@topvisor/ui 0.9.34-utils-components-4 → 0.9.34-utils-components-6
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-Bh_DAFqD.es.js +289 -0
- package/.chunks/datepicker-Bh_DAFqD.es.js.map +1 -0
- package/.chunks/datepicker-CIbLjf_3.amd.js +247 -0
- package/.chunks/datepicker-CIbLjf_3.amd.js.map +1 -0
- package/.chunks/forms-BfIXIMY_.es.js +1089 -0
- package/.chunks/forms-BfIXIMY_.es.js.map +1 -0
- package/.chunks/forms-C__H1yL_.amd.js +3 -0
- package/.chunks/forms-C__H1yL_.amd.js.map +1 -0
- package/.chunks/i18n-B5a6l_mZ.es.js +23 -0
- package/.chunks/i18n-B5a6l_mZ.es.js.map +1 -0
- package/.chunks/i18n-CfQopOHM.amd.js +2 -0
- package/.chunks/i18n-CfQopOHM.amd.js.map +1 -0
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CaBP5R7L.amd.js +2 -0
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CaBP5R7L.amd.js.map +1 -0
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DJZS6vRL.es.js +161 -0
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DJZS6vRL.es.js.map +1 -0
- package/.chunks/{menu-D8Pkjvdh.es.js → menu-24EpQtdy.es.js} +37 -37
- package/.chunks/menu-24EpQtdy.es.js.map +1 -0
- package/.chunks/menu-DV1iSTyB.amd.js +2 -0
- package/.chunks/menu-DV1iSTyB.amd.js.map +1 -0
- package/.chunks/popup-BDbiwl2O.amd.js +440 -0
- package/.chunks/popup-BDbiwl2O.amd.js.map +1 -0
- package/.chunks/{popup-DUd8G4iQ.es.js → popup-brcaxiWt.es.js} +515 -511
- package/.chunks/popup-brcaxiWt.es.js.map +1 -0
- package/.chunks/store-Bl79G7T_.amd.js.map +1 -1
- package/.chunks/store-PoMCiuBr.es.js.map +1 -1
- package/README.md +86 -86
- package/assets/forms.css +1 -1
- package/common/common.d.ts +1 -1
- package/{src/components → components}/formsExt/editInput/editInput.vue.d.ts +1 -10
- package/{src/components → components}/popup/lib/popup.d.ts +0 -3
- package/{src/components → components}/popup/lib/worker.d.ts +0 -4
- package/core/app.amd.js +2 -0
- package/core/app.amd.js.map +1 -0
- package/core/app.d.ts +7 -0
- package/core/app.js +307 -0
- package/core/app.js.map +1 -0
- package/{src/core → core}/core/core.d.ts +17 -24
- package/core/core/options.d.ts +24 -0
- package/{src/core → core}/core/state.d.ts +3 -2
- package/core/core.amd.js +1 -1
- package/core/core.d.ts +2 -2
- package/core/core.js +1 -1
- package/core/directives/focus.d.ts +9 -3
- package/core/directives/sticky.d.ts +11 -3
- package/core/directives/swimUp.d.ts +10 -3
- package/core/directives/tooltip.d.ts +11 -3
- package/{src/core/plugin/plugin.d.ts → core/plugins/core.d.ts} +14 -17
- package/core/plugins/i18n.d.ts +98 -0
- package/core/plugins/piniaTPA.d.ts +18 -0
- package/core/utils/clipboard.d.ts +1 -0
- package/{src/core → core}/utils/price.d.ts +3 -1
- package/{src/core → core}/utils/system.d.ts +0 -1
- package/forms/forms.amd.js +1 -1
- package/forms/forms.d.ts +1 -1
- package/forms/forms.js +7 -7
- package/forms/helpers.amd.js.map +1 -1
- package/forms/helpers.d.ts +1 -1
- package/forms/helpers.js.map +1 -1
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.d.ts +1 -1
- package/formsExt/formsExt.js +76 -81
- package/formsExt/formsExt.js.map +1 -1
- package/icomoon/Read Me.txt +7 -7
- package/icomoon/demo-files/demo.css +161 -161
- package/icomoon/demo-files/demo.js +30 -30
- package/icomoon/demo.html +3379 -3379
- package/icomoon/fonts/Topvisor-2.svg +263 -263
- package/icomoon/style.css +740 -740
- package/package.json +36 -32
- package/popup/popup.amd.js +1 -1
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.d.ts +1 -1
- package/popup/popup.js +6 -6
- package/popup/popup.js.map +1 -1
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.d.ts +2 -2
- package/popup/worker.js +5 -7
- 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.d.ts +1 -1
- package/project/project.js +7 -7
- package/project/project.js.map +1 -1
- package/require/css.amd.js +11 -11
- package/tabs/tabs.amd.js +1 -1
- package/tabs/tabs.amd.js.map +1 -1
- package/tabs/tabs.d.ts +1 -1
- package/tabs/tabs.js +5 -5
- package/tabs/tabs.js.map +1 -1
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/tabsView/tabsView.d.ts +1 -1
- package/tabsView/tabsView.js +8 -8
- package/tabsView/tabsView.js.map +1 -1
- package/utils/check.amd.js.map +1 -1
- package/utils/check.d.ts +1 -1
- package/utils/check.js.map +1 -1
- package/utils/clipboard.amd.js +2 -0
- package/utils/clipboard.amd.js.map +1 -0
- package/utils/clipboard.d.ts +1 -0
- package/utils/clipboard.js +10 -0
- package/utils/clipboard.js.map +1 -0
- package/utils/css.amd.js.map +1 -1
- package/utils/css.d.ts +1 -1
- package/utils/css.js.map +1 -1
- package/utils/date.amd.js +1 -1
- package/utils/date.d.ts +1 -1
- package/utils/date.js +4 -4
- package/utils/device.amd.js +1 -1
- package/utils/device.d.ts +1 -1
- package/utils/device.js +5 -5
- package/utils/dom.amd.js.map +1 -1
- package/utils/dom.d.ts +2 -2
- package/utils/dom.js.map +1 -1
- package/utils/image.amd.js.map +1 -1
- package/utils/image.d.ts +1 -1
- package/utils/image.js.map +1 -1
- package/utils/keyboard.amd.js.map +1 -1
- package/utils/keyboard.d.ts +1 -1
- package/utils/keyboard.js.map +1 -1
- package/utils/number.amd.js.map +1 -1
- package/utils/number.d.ts +1 -1
- package/utils/number.js.map +1 -1
- package/utils/price.amd.js +1 -1
- package/utils/price.amd.js.map +1 -1
- package/utils/price.d.ts +1 -1
- package/utils/price.js +8 -5
- package/utils/price.js.map +1 -1
- package/utils/route.amd.js.map +1 -1
- package/utils/route.d.ts +1 -1
- 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.d.ts +1 -1
- package/utils/scroll.js +1 -1
- package/utils/scroll.js.map +1 -1
- package/utils/store.d.ts +1 -1
- package/utils/string.amd.js +1 -1
- package/utils/string.amd.js.map +1 -1
- package/utils/string.d.ts +1 -1
- package/utils/string.js +38 -35
- package/utils/string.js.map +1 -1
- package/utils/system.amd.js +1 -1
- package/utils/system.amd.js.map +1 -1
- package/utils/system.d.ts +1 -1
- package/utils/system.js +16 -17
- package/utils/system.js.map +1 -1
- package/utils/url.amd.js.map +1 -1
- package/utils/url.d.ts +1 -1
- package/utils/url.js.map +1 -1
- package/utils/window.amd.js +1 -1
- package/utils/window.d.ts +1 -1
- package/utils/window.js +1 -1
- package/.chunks/datepicker-B-QNMaqL.es.js +0 -289
- package/.chunks/datepicker-B-QNMaqL.es.js.map +0 -1
- package/.chunks/datepicker-BtTKGtP7.amd.js +0 -247
- package/.chunks/datepicker-BtTKGtP7.amd.js.map +0 -1
- package/.chunks/forms-CRdPxA6a.es.js +0 -1186
- package/.chunks/forms-CRdPxA6a.es.js.map +0 -1
- package/.chunks/forms-CbJDUr1_.amd.js +0 -3
- package/.chunks/forms-CbJDUr1_.amd.js.map +0 -1
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-D5EXHsIJ.es.js +0 -164
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-D5EXHsIJ.es.js.map +0 -1
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-W45jLCVb.amd.js +0 -2
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-W45jLCVb.amd.js.map +0 -1
- package/.chunks/menu-BNQ5GpPq.amd.js +0 -2
- package/.chunks/menu-BNQ5GpPq.amd.js.map +0 -1
- package/.chunks/menu-D8Pkjvdh.es.js.map +0 -1
- package/.chunks/popup-DUd8G4iQ.es.js.map +0 -1
- package/.chunks/popup-DcfMTbwU.amd.js +0 -440
- package/.chunks/popup-DcfMTbwU.amd.js.map +0 -1
- package/core/directives/focus.amd.js +0 -2
- package/core/directives/focus.amd.js.map +0 -1
- package/core/directives/focus.js +0 -5
- package/core/directives/focus.js.map +0 -1
- package/core/directives/sticky.amd.js +0 -2
- package/core/directives/sticky.amd.js.map +0 -1
- package/core/directives/sticky.js +0 -5
- package/core/directives/sticky.js.map +0 -1
- package/core/directives/swimUp.amd.js +0 -2
- package/core/directives/swimUp.amd.js.map +0 -1
- package/core/directives/swimUp.js +0 -5
- package/core/directives/swimUp.js.map +0 -1
- package/core/directives/tooltip.amd.js +0 -2
- package/core/directives/tooltip.amd.js.map +0 -1
- package/core/directives/tooltip.js +0 -5
- package/core/directives/tooltip.js.map +0 -1
- package/core/plugin/plugin.amd.js +0 -2
- package/core/plugin/plugin.amd.js.map +0 -1
- package/core/plugin/plugin.d.ts +0 -3
- package/core/plugin/plugin.js +0 -23
- package/core/plugin/plugin.js.map +0 -1
- package/src/components/forms/avatar/avatar.stories.d.ts +0 -85
- package/src/components/forms/button/button.stories.d.ts +0 -278
- package/src/components/forms/checkbox/checkbox.stories.d.ts +0 -116
- package/src/components/forms/controlLabel/controlLabel.stories.d.ts +0 -65
- package/src/components/forms/hint/hint.stories.d.ts +0 -75
- package/src/components/forms/input/input.stories.d.ts +0 -226
- package/src/components/forms/inputDate/inputDate.stories.d.ts +0 -117
- package/src/components/forms/inputRange/inputRange.stories.d.ts +0 -285
- package/src/components/forms/loadbar/loadbar.stories.d.ts +0 -10
- package/src/components/forms/radio/radio.stories.d.ts +0 -132
- package/src/components/forms/select/select.stories.d.ts +0 -108
- package/src/components/forms/switcher/switcher.stories.d.ts +0 -127
- package/src/components/forms/textarea/textarea.stories.d.ts +0 -90
- package/src/components/formsExt/editArea/editArea.stories.d.ts +0 -158
- package/src/components/formsExt/editInput/editInput.stories.d.ts +0 -98
- package/src/components/formsExt/menu/menu.stories.d.ts +0 -82
- package/src/components/formsExt/radioGroup/radioGroup.stories.d.ts +0 -67
- package/src/components/formsExt/selector2/selector2.stories.d.ts +0 -277
- package/src/components/popup/popup/popup.stories.d.ts +0 -701
- package/src/components/project/selectorCompetitors/selectorCompetitors.stories.d.ts +0 -43
- package/src/components/tabs/tabs/tabs.stories.d.ts +0 -539
- package/src/components/tabsView/tabsView/tabsView.stories.d.ts +0 -352
- package/src/components/tabsView/tabsView//320/255/320/273/320/265/320/274/320/265/320/275/321/202/321/213/MenuItem.stories.d.ts +0 -333
- package/src/components/tabsView/tabsView//320/255/320/273/320/265/320/274/320/265/320/275/321/202/321/213/MenuTitle.stories.d.ts +0 -175
- package/src/core/core/options.d.ts +0 -13
- package/src/core/core/page.d.ts +0 -7
- package/src/core/directives/focus.d.ts +0 -9
- package/src/core/directives/sticky.d.ts +0 -11
- package/src/core/directives/swimUp.d.ts +0 -10
- package/src/core/directives/tooltip.d.ts +0 -11
- /package/{src/components → components}/common/common.d.ts +0 -0
- /package/{src/components → components}/common/icon/icon.d.ts +0 -0
- /package/{src/components → components}/forms/avatar/avatar.d.ts +0 -0
- /package/{src/components → components}/forms/avatar/avatar.vue.d.ts +0 -0
- /package/{src/components → components}/forms/button/button.d.ts +0 -0
- /package/{src/components → components}/forms/button/button.vue.d.ts +0 -0
- /package/{src/components → components}/forms/checkbox/checkbox.d.ts +0 -0
- /package/{src/components → components}/forms/checkbox/checkbox.vue.d.ts +0 -0
- /package/{src/components → components}/forms/controlLabel/controlLabel.d.ts +0 -0
- /package/{src/components → components}/forms/controlLabel/controlLabel.vue.d.ts +0 -0
- /package/{src/components → components}/forms/forms.d.ts +0 -0
- /package/{src/components → components}/forms/helpers.d.ts +0 -0
- /package/{src/components → components}/forms/hint/hint.d.ts +0 -0
- /package/{src/components → components}/forms/hint/hint.vue.d.ts +0 -0
- /package/{src/components → components}/forms/input/input.d.ts +0 -0
- /package/{src/components → components}/forms/input/input.vue.d.ts +0 -0
- /package/{src/components → components}/forms/inputDate/datepicker.d.ts +0 -0
- /package/{src/components → components}/forms/inputDate/inputDate.d.ts +0 -0
- /package/{src/components → components}/forms/inputDate/inputDate.vue.d.ts +0 -0
- /package/{src/components → components}/forms/inputRange/inputRange.d.ts +0 -0
- /package/{src/components → components}/forms/inputRange/inputRange.vue.d.ts +0 -0
- /package/{src/components → components}/forms/loadbar/loadbar.vue.d.ts +0 -0
- /package/{src/components → components}/forms/radio/radio.d.ts +0 -0
- /package/{src/components → components}/forms/radio/radio.vue.d.ts +0 -0
- /package/{src/components → components}/forms/select/select.d.ts +0 -0
- /package/{src/components → components}/forms/select/select.vue.d.ts +0 -0
- /package/{src/components → components}/forms/select/stories/exampleOptions.d.ts +0 -0
- /package/{src/components → components}/forms/switcher/switcher.d.ts +0 -0
- /package/{src/components → components}/forms/switcher/switcher.vue.d.ts +0 -0
- /package/{src/components → components}/forms/textarea/textarea.d.ts +0 -0
- /package/{src/components → components}/forms/textarea/textarea.vue.d.ts +0 -0
- /package/{src/components → components}/formsExt/editArea/editArea.d.ts +0 -0
- /package/{src/components → components}/formsExt/editArea/editArea.vue.d.ts +0 -0
- /package/{src/components → components}/formsExt/editInput/editInput.d.ts +0 -0
- /package/{src/components → components}/formsExt/formsExt.d.ts +0 -0
- /package/{src/components → components}/formsExt/menu/menu.d.ts +0 -0
- /package/{src/components → components}/formsExt/menu/menu.vue.d.ts +0 -0
- /package/{src/components → components}/formsExt/menu/stories/items.d.ts +0 -0
- /package/{src/components → components}/formsExt/radioGroup/radioGroup.d.ts +0 -0
- /package/{src/components → components}/formsExt/radioGroup/radioGroup.vue.d.ts +0 -0
- /package/{src/components → components}/formsExt/selector2/api.d.ts +0 -0
- /package/{src/components → components}/formsExt/selector2/itemMulti.vue.d.ts +0 -0
- /package/{src/components → components}/formsExt/selector2/selector2.d.ts +0 -0
- /package/{src/components → components}/formsExt/selector2/selector2.vue.d.ts +0 -0
- /package/{src/components → components}/formsExt/selector2/stories/dummyAPIRequest.d.ts +0 -0
- /package/{src/components → components}/popup/lib/popup.globalEvents.d.ts +0 -0
- /package/{src/components → components}/popup/lib/worker.globalEvents.d.ts +0 -0
- /package/{src/components → components}/popup/popup/listItem.vue.d.ts +0 -0
- /package/{src/components → components}/popup/popup/opener.vue.d.ts +0 -0
- /package/{src/components → components}/popup/popup/popup.d.ts +0 -0
- /package/{src/components → components}/popup/popup/popup.vue.d.ts +0 -0
- /package/{src/components → components}/popup/popup/widgetInput.vue.d.ts +0 -0
- /package/{src/components → components}/popup/popup.d.ts +0 -0
- /package/{src/components → components}/popup/worker.d.ts +0 -0
- /package/{src/components → components}/project/project.d.ts +0 -0
- /package/{src/components → components}/project/selectorCompetitors/composables.d.ts +0 -0
- /package/{src/components → components}/project/selectorCompetitors/selectorCompetitors.d.ts +0 -0
- /package/{src/components → components}/project/selectorCompetitors/selectorCompetitors.vue.d.ts +0 -0
- /package/{src/components → components}/project/selectorCompetitors/stories/items.d.ts +0 -0
- /package/{src/components → components}/project/selectorCompetitors/types/competitor.d.ts +0 -0
- /package/{src/components → components}/tabs/tabs/content.vue.d.ts +0 -0
- /package/{src/components → components}/tabs/tabs/tab.vue.d.ts +0 -0
- /package/{src/components → components}/tabs/tabs/tabs.d.ts +0 -0
- /package/{src/components → components}/tabs/tabs/tabs.vue.d.ts +0 -0
- /package/{src/components → components}/tabs/tabs.d.ts +0 -0
- /package/{src/components → components}/tabsView/tabsView/menu.vue.d.ts +0 -0
- /package/{src/components → components}/tabsView/tabsView/menuDelimeter.vue.d.ts +0 -0
- /package/{src/components → components}/tabsView/tabsView/menuItem.vue.d.ts +0 -0
- /package/{src/components → components}/tabsView/tabsView/menuTitle.vue.d.ts +0 -0
- /package/{src/components → components}/tabsView/tabsView/store.d.ts +0 -0
- /package/{src/components → components}/tabsView/tabsView/tabsView.d.ts +0 -0
- /package/{src/components → components}/tabsView/tabsView/tabsView.vue.d.ts +0 -0
- /package/{src/components → components}/tabsView/tabsView/utils.d.ts +0 -0
- /package/{src/components → components}/tabsView/tabsView.d.ts +0 -0
- /package/{src/core → core}/core/events.d.ts +0 -0
- /package/{src/core → core}/utils/check.d.ts +0 -0
- /package/{src/core → core}/utils/css.d.ts +0 -0
- /package/{src/core → core}/utils/date.d.ts +0 -0
- /package/{src/core → core}/utils/device.d.ts +0 -0
- /package/{src/core → core}/utils/dom.d.ts +0 -0
- /package/{src/core → core}/utils/image.d.ts +0 -0
- /package/{src/core → core}/utils/keyboard.d.ts +0 -0
- /package/{src/core → core}/utils/number.d.ts +0 -0
- /package/{src/core → core}/utils/route.d.ts +0 -0
- /package/{src/core → core}/utils/scroll.d.ts +0 -0
- /package/{src/core → core}/utils/store/localStorage.d.ts +0 -0
- /package/{src/core → core}/utils/store/plugin.d.ts +0 -0
- /package/{src/core → core}/utils/store/store.d.ts +0 -0
- /package/{src/core → core}/utils/store.d.ts +0 -0
- /package/{src/core → core}/utils/string.d.ts +0 -0
- /package/{src/core → core}/utils/url.d.ts +0 -0
- /package/{src/core → core}/utils/window.d.ts +0 -0
package/formsExt/formsExt.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { insertToPage as
|
|
2
|
-
import { defineComponent as K, ref as V, computed as N, resolveDirective as
|
|
3
|
-
import {
|
|
1
|
+
import { insertToPage as Q } from "../utils/css.js";
|
|
2
|
+
import { defineComponent as K, ref as V, computed as N, resolveDirective as x, openBlock as c, createElementBlock as v, normalizeClass as $, toDisplayString as C, createCommentVNode as T, createElementVNode as E, withDirectives as Y, createVNode as F, withKeys as O, withModifiers as B, createBlock as I, withCtx as w, createTextVNode as M, watch as k, toRef as q, mergeProps as X, mergeModels as D, useModel as j, Fragment as G, renderList as H, vModelRadio as ee, unref as S, renderSlot as te } from "vue";
|
|
3
|
+
import { r as oe, T as z, a as L, b as le, C as ae } from "../.chunks/forms-BfIXIMY_.es.js";
|
|
4
4
|
import { invertKeyboardLayout as se } from "../utils/keyboard.js";
|
|
5
5
|
import { TopPopup as re, TopPopupWidgetInput as ne, TopPopupListItem as R } from "../popup/popup.js";
|
|
6
6
|
import { debounce as ie } from "lodash";
|
|
7
|
-
import { M as ue } from "../.chunks/menu-
|
|
8
|
-
const
|
|
9
|
-
Z
|
|
7
|
+
import { M as ue } from "../.chunks/menu-24EpQtdy.es.js";
|
|
8
|
+
const Z = ["../assets/formsExt.css"].map((s) => import.meta.resolve(s));
|
|
9
|
+
Q(Z, !0);
|
|
10
10
|
const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
11
11
|
__name: "editArea",
|
|
12
12
|
props: {
|
|
@@ -30,20 +30,20 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
30
30
|
hint: {}
|
|
31
31
|
},
|
|
32
32
|
emits: ["submit", "close", "clickOnTitle"],
|
|
33
|
-
setup(
|
|
34
|
-
const e =
|
|
33
|
+
setup(s, { emit: d }) {
|
|
34
|
+
const e = s, a = d, m = V(e.defaultValue), f = V(e.isFocused), r = N(() => m.value !== e.defaultValue), p = N(() => e.attachToKeyboard ? "" : e.forceShowCloseBtn && !r.value ? e.closeText : e.cancelText), i = (u) => {
|
|
35
35
|
a("submit", u), m.value = e.defaultValue;
|
|
36
36
|
}, y = () => {
|
|
37
|
-
if (e.forceShowCloseBtn && !
|
|
37
|
+
if (e.forceShowCloseBtn && !r.value) {
|
|
38
38
|
a("close");
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
m.value = e.defaultValue;
|
|
42
|
-
},
|
|
42
|
+
}, b = () => {
|
|
43
43
|
e.attachToKeyboard && a("clickOnTitle");
|
|
44
44
|
};
|
|
45
45
|
return (u, o) => {
|
|
46
|
-
const g =
|
|
46
|
+
const g = x("top-focus");
|
|
47
47
|
return c(), v("div", {
|
|
48
48
|
class: $({
|
|
49
49
|
"top-editArea": !0,
|
|
@@ -53,7 +53,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
53
53
|
u.title ? (c(), v("div", {
|
|
54
54
|
key: 0,
|
|
55
55
|
class: "top-editArea_title",
|
|
56
|
-
onClick: o[0] || (o[0] = (h) =>
|
|
56
|
+
onClick: o[0] || (o[0] = (h) => b())
|
|
57
57
|
}, C(u.title), 1)) : T("", !0),
|
|
58
58
|
E("div", {
|
|
59
59
|
class: $({
|
|
@@ -85,7 +85,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
85
85
|
[g, f.value]
|
|
86
86
|
]),
|
|
87
87
|
E("div", de, [
|
|
88
|
-
|
|
88
|
+
r.value || u.forceShowCloseBtn ? (c(), I(z, {
|
|
89
89
|
key: 0,
|
|
90
90
|
class: "top-editArea_button",
|
|
91
91
|
color: "theme",
|
|
@@ -93,18 +93,18 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
93
93
|
icon: u.attachToKeyboard ? "" : "",
|
|
94
94
|
onClick: y
|
|
95
95
|
}, {
|
|
96
|
-
default:
|
|
96
|
+
default: w(() => [
|
|
97
97
|
M(C(p.value), 1)
|
|
98
98
|
]),
|
|
99
99
|
_: 1
|
|
100
100
|
}, 8, ["icon"])) : T("", !0),
|
|
101
|
-
|
|
101
|
+
r.value ? (c(), I(z, {
|
|
102
102
|
key: 1,
|
|
103
103
|
class: "top-editArea_button",
|
|
104
104
|
icon: u.attachToKeyboard ? "" : "",
|
|
105
105
|
onClick: o[5] || (o[5] = (h) => i(m.value))
|
|
106
106
|
}, {
|
|
107
|
-
default:
|
|
107
|
+
default: w(() => [
|
|
108
108
|
M(C(u.attachToKeyboard ? "" : u.submitText), 1)
|
|
109
109
|
]),
|
|
110
110
|
_: 1
|
|
@@ -136,39 +136,34 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
136
136
|
button: {}
|
|
137
137
|
},
|
|
138
138
|
emits: ["update:modelValue"],
|
|
139
|
-
setup(
|
|
140
|
-
const e =
|
|
141
|
-
k(
|
|
139
|
+
setup(s, { emit: d }) {
|
|
140
|
+
const e = s, a = V(e.modelValue);
|
|
141
|
+
k(q(e.modelValue), () => {
|
|
142
142
|
a.value = e.modelValue;
|
|
143
143
|
});
|
|
144
144
|
const m = d, f = () => {
|
|
145
145
|
m("update:modelValue", a.value);
|
|
146
146
|
};
|
|
147
|
-
return (
|
|
148
|
-
F(le, X(
|
|
149
|
-
onKeydownCapture: p[0] || (p[0] = O(B((i) => a.value =
|
|
147
|
+
return (r, p) => (c(), v("div", ve, [
|
|
148
|
+
F(le, X(r.input, {
|
|
149
|
+
onKeydownCapture: p[0] || (p[0] = O(B((i) => a.value = r.modelValue, ["stop"]), ["esc"])),
|
|
150
150
|
onKeydown: O(B(f, ["stop"]), ["enter"]),
|
|
151
151
|
modelValue: a.value,
|
|
152
152
|
"onUpdate:modelValue": p[1] || (p[1] = (i) => a.value = i)
|
|
153
153
|
}), null, 16, ["onKeydown", "modelValue"]),
|
|
154
|
-
a.value !==
|
|
154
|
+
a.value !== r.modelValue ? (c(), I(z, X({
|
|
155
155
|
key: 0,
|
|
156
156
|
icon: "",
|
|
157
157
|
styling: "soft"
|
|
158
|
-
},
|
|
159
|
-
default: _(() => [
|
|
160
|
-
j(s.$slots, "default")
|
|
161
|
-
]),
|
|
162
|
-
_: 3
|
|
163
|
-
}, 16)) : T("", !0)
|
|
158
|
+
}, r.button, { onClick: f }), null, 16)) : T("", !0)
|
|
164
159
|
]));
|
|
165
160
|
}
|
|
166
161
|
}), he = {
|
|
167
162
|
"top-editInput": "top-editInput",
|
|
168
163
|
"top-input": "top-input"
|
|
169
|
-
},
|
|
164
|
+
}, be = {
|
|
170
165
|
$style: he
|
|
171
|
-
},
|
|
166
|
+
}, Ae = /* @__PURE__ */ L(ye, [["__cssModules", be]]), ge = ["data-top-icon", "onClick"], Te = {
|
|
172
167
|
key: 0,
|
|
173
168
|
class: "top-radioGroup_circle"
|
|
174
169
|
}, Ve = ["value", "disabled"], _e = /* @__PURE__ */ K({
|
|
@@ -186,24 +181,24 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
186
181
|
modelModifiers: {}
|
|
187
182
|
}),
|
|
188
183
|
emits: /* @__PURE__ */ D(["update:modelValue"], ["update:modelValue"]),
|
|
189
|
-
setup(
|
|
190
|
-
const e =
|
|
184
|
+
setup(s, { emit: d }) {
|
|
185
|
+
const e = j(s, "modelValue"), a = s, m = V(null);
|
|
191
186
|
k(e, () => {
|
|
192
|
-
var
|
|
193
|
-
(
|
|
187
|
+
var r, p, i, y, b;
|
|
188
|
+
(r = a.radiosProps) != null && r.some((u) => u.value === e.value) || (e.value = ((i = (p = a.radiosProps) == null ? void 0 : p[0]) == null ? void 0 : i.value) ?? ""), (b = (y = m.value) == null ? void 0 : y.querySelector(".radioGroup_item-selected")) == null || b.scrollIntoView();
|
|
194
189
|
}, { immediate: !0 });
|
|
195
190
|
const f = "radioGroup-" + Math.random();
|
|
196
|
-
return (
|
|
191
|
+
return (r, p) => (c(), v("div", {
|
|
197
192
|
ref_key: "elRef",
|
|
198
193
|
ref: m,
|
|
199
194
|
class: $({
|
|
200
195
|
"top-radioGroup": !0,
|
|
201
196
|
"top-scrollBarXHidding": !0,
|
|
202
|
-
["top-size_" +
|
|
203
|
-
"top-error":
|
|
197
|
+
["top-size_" + r.size]: !!r.size,
|
|
198
|
+
"top-error": r.isError
|
|
204
199
|
})
|
|
205
200
|
}, [
|
|
206
|
-
(c(!0), v(G, null, H(
|
|
201
|
+
(c(!0), v(G, null, H(r.radiosProps, (i) => (c(), v("label", {
|
|
207
202
|
class: $({
|
|
208
203
|
"top-radioGroup_item-selected": i.value === e.value,
|
|
209
204
|
"top-radioGroup_item": !0,
|
|
@@ -214,7 +209,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
214
209
|
onClick: (y) => e.value = i.value
|
|
215
210
|
}, [
|
|
216
211
|
M(C(i.title) + " ", 1),
|
|
217
|
-
|
|
212
|
+
r.showIndicator ? (c(), v("span", Te)) : T("", !0),
|
|
218
213
|
Y(E("input", {
|
|
219
214
|
"onUpdate:modelValue": p[0] || (p[0] = (y) => e.value = y),
|
|
220
215
|
name: f,
|
|
@@ -225,7 +220,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
225
220
|
value: i.value,
|
|
226
221
|
disabled: i.disabled
|
|
227
222
|
}, null, 8, Ve), [
|
|
228
|
-
[
|
|
223
|
+
[ee, e.value]
|
|
229
224
|
])
|
|
230
225
|
], 10, ge))), 256))
|
|
231
226
|
], 2));
|
|
@@ -240,16 +235,16 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
240
235
|
"top-error": "top-error"
|
|
241
236
|
}, Ie = {
|
|
242
237
|
$style: we
|
|
243
|
-
}, $e = /* @__PURE__ */ L(_e, [["__cssModules", Ie]]), Ce = (
|
|
238
|
+
}, $e = /* @__PURE__ */ L(_e, [["__cssModules", Ie]]), Ce = (s, d, e) => {
|
|
244
239
|
const a = V([]), m = V(!1);
|
|
245
|
-
let f = "",
|
|
246
|
-
|
|
240
|
+
let f = "", r;
|
|
241
|
+
s && !s.params.limit && (s.params.limit = 100);
|
|
247
242
|
const p = async () => {
|
|
248
|
-
if (!
|
|
243
|
+
if (!s) return;
|
|
249
244
|
let o, g;
|
|
250
|
-
if (e && (
|
|
245
|
+
if (e && (s.cache ??= /* @__PURE__ */ new Map(), g = JSON.stringify(s.params), o = s.cache.get(g), o))
|
|
251
246
|
return o;
|
|
252
|
-
if (m.value = !0, o = await
|
|
247
|
+
if (m.value = !0, o = await s.call(), m.value = !1, o.errors) return;
|
|
253
248
|
if (!Array.isArray(o.result)) {
|
|
254
249
|
console.warn("В result ожидался массив");
|
|
255
250
|
return;
|
|
@@ -259,24 +254,24 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
259
254
|
console.warn(`В result[${h}] нет id или name`);
|
|
260
255
|
return;
|
|
261
256
|
}
|
|
262
|
-
return e &&
|
|
257
|
+
return e && s.cache.set(g, o), o;
|
|
263
258
|
}, i = async () => {
|
|
264
|
-
if (!
|
|
265
|
-
|
|
259
|
+
if (!s) return;
|
|
260
|
+
s.params.offset = 0, s.params.search = f;
|
|
266
261
|
const o = await p();
|
|
267
|
-
o && (
|
|
262
|
+
o && (r = o.nextOffset, a.value = o.result);
|
|
268
263
|
}, y = async () => {
|
|
269
|
-
if (!
|
|
270
|
-
|
|
264
|
+
if (!s || !r || m.value) return;
|
|
265
|
+
s.params.offset = r, s.params.search = f;
|
|
271
266
|
const o = await p();
|
|
272
|
-
o && (
|
|
273
|
-
},
|
|
267
|
+
o && (r = o.nextOffset, a.value = a.value.concat(o.result));
|
|
268
|
+
}, b = ie(() => i(), 200);
|
|
274
269
|
return {
|
|
275
270
|
items: a,
|
|
276
271
|
isLoading: m,
|
|
277
272
|
loadAppend: y,
|
|
278
273
|
setSearchTextAndLoad: (o, g = !0) => {
|
|
279
|
-
|
|
274
|
+
s && (o.length < d || o === f && a.value.length || (f = o, g ? b() : i()));
|
|
280
275
|
}
|
|
281
276
|
};
|
|
282
277
|
}, Be = { class: "top-selector2_itemMulti top-ellipsis" }, Me = /* @__PURE__ */ K({
|
|
@@ -286,7 +281,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
286
281
|
name: {}
|
|
287
282
|
},
|
|
288
283
|
emits: ["delete"],
|
|
289
|
-
setup(
|
|
284
|
+
setup(s) {
|
|
290
285
|
return (d, e) => (c(), v("div", Be, [
|
|
291
286
|
M(C(d.name) + " ", 1),
|
|
292
287
|
E("span", {
|
|
@@ -333,11 +328,11 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
333
328
|
modelModifiers: {}
|
|
334
329
|
}),
|
|
335
330
|
emits: ["update:modelValue"],
|
|
336
|
-
setup(
|
|
337
|
-
const d =
|
|
331
|
+
setup(s) {
|
|
332
|
+
const d = s, e = j(s, "modelValue"), a = V(""), m = {
|
|
338
333
|
id: 0,
|
|
339
334
|
name: "Все"
|
|
340
|
-
}, f = V(null),
|
|
335
|
+
}, f = V(null), r = () => {
|
|
341
336
|
var t;
|
|
342
337
|
return (t = f.value) == null ? void 0 : t.popup;
|
|
343
338
|
};
|
|
@@ -351,28 +346,28 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
351
346
|
const p = Ce(d.apiRequest, d.minLength, d.useCache), i = N(() => {
|
|
352
347
|
const t = [];
|
|
353
348
|
return !d.multiselect && d.appendAllValue && t.push(m), d.items.forEach((n) => t.push({ ...n })), t;
|
|
354
|
-
}), y = (t, n = !0) => n && t.id === null ? Array.isArray(e.value) ? e.value.some((l) => l.id === t.id && l.name === t.name) : t.name === e.value.name : Array.isArray(e.value) ? e.value.some((l) => l.id === t.id) : t.id === e.value.id,
|
|
349
|
+
}), y = (t, n = !0) => n && t.id === null ? Array.isArray(e.value) ? e.value.some((l) => l.id === t.id && l.name === t.name) : t.name === e.value.name : Array.isArray(e.value) ? e.value.some((l) => l.id === t.id) : t.id === e.value.id, b = N(() => {
|
|
355
350
|
const t = a.value.toLowerCase(), n = se(t);
|
|
356
351
|
let l = [];
|
|
357
|
-
return i.value.forEach((
|
|
358
|
-
const
|
|
359
|
-
(
|
|
352
|
+
return i.value.forEach((A) => {
|
|
353
|
+
const _ = A.name.toLowerCase();
|
|
354
|
+
(A.id === Number(t) || _.includes(t) || _.includes(n)) && (_ === t || _ === n ? l.unshift(A) : l.push(A));
|
|
360
355
|
}), l.push(...p.items.value), d.appendSearchToResult && a.value && (!l.length || l[0].name.toLowerCase() !== t) && l.push({
|
|
361
356
|
id: null,
|
|
362
357
|
name: a.value
|
|
363
|
-
}), d.multiselect && (l = l.filter((
|
|
358
|
+
}), d.multiselect && (l = l.filter((A) => !y(A))), l;
|
|
364
359
|
}), u = async (t) => {
|
|
365
360
|
var n, l;
|
|
366
361
|
if (d.multiselect) {
|
|
367
362
|
if (!Array.isArray(e.value) || y(t))
|
|
368
363
|
return;
|
|
369
|
-
const
|
|
370
|
-
|
|
371
|
-
var
|
|
372
|
-
(
|
|
364
|
+
const A = [...e.value];
|
|
365
|
+
A.push({ ...t }), e.value = A, ae.state.isMobile ? (n = r()) == null || n.close() : setTimeout(() => {
|
|
366
|
+
var _, U, W, J;
|
|
367
|
+
(_ = r()) == null || _.recalcPosition(), (J = (W = (U = r()) == null ? void 0 : U.elPopupWidget) == null ? void 0 : W.querySelector("input")) == null || J.focus(), a.value && (b.value.length || (a.value = "", p.items.value = []));
|
|
373
368
|
});
|
|
374
369
|
} else
|
|
375
|
-
a.value && (a.value = "", p.items.value = []), JSON.stringify(t) !== JSON.stringify(e.value) && (e.value = { ...t }), (l =
|
|
370
|
+
a.value && (a.value = "", p.items.value = []), JSON.stringify(t) !== JSON.stringify(e.value) && (e.value = { ...t }), (l = r()) == null || l.close();
|
|
376
371
|
}, o = () => {
|
|
377
372
|
if (!Array.isArray(e.value)) {
|
|
378
373
|
const n = (i.value.findIndex((l) => l.id === e.value.id) + 1) % i.value.length;
|
|
@@ -381,7 +376,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
381
376
|
}, g = async (t) => {
|
|
382
377
|
Array.isArray(e.value) && (e.value = e.value.filter((n) => n.id !== t), setTimeout(() => {
|
|
383
378
|
var n;
|
|
384
|
-
(n =
|
|
379
|
+
(n = r()) == null || n.recalcPosition();
|
|
385
380
|
}));
|
|
386
381
|
}, h = V(!1);
|
|
387
382
|
d.apiRequest && (k(h, () => {
|
|
@@ -400,7 +395,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
400
395
|
notch: !1,
|
|
401
396
|
transitionDuration: 0
|
|
402
397
|
}, {
|
|
403
|
-
opener:
|
|
398
|
+
opener: w(() => [
|
|
404
399
|
E("div", {
|
|
405
400
|
class: $({
|
|
406
401
|
"top-selector2": !0,
|
|
@@ -426,7 +421,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
426
421
|
})) : T("", !0)
|
|
427
422
|
], 2)
|
|
428
423
|
]),
|
|
429
|
-
widget:
|
|
424
|
+
widget: w(() => [
|
|
430
425
|
F(S(ne), {
|
|
431
426
|
title: "Поиск",
|
|
432
427
|
icon: "",
|
|
@@ -436,16 +431,16 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
436
431
|
placeholder: !Array.isArray(e.value) && !t.multiselect && t.showSelectedInInput ? e.value.name : t.placeholder
|
|
437
432
|
}, null, 8, ["modelValue", "isLoading", "placeholder"])
|
|
438
433
|
]),
|
|
439
|
-
contentList:
|
|
440
|
-
(c(!0), v(G, null, H(
|
|
434
|
+
contentList: w(() => [
|
|
435
|
+
(c(!0), v(G, null, H(b.value, (l) => (c(), I(S(R), {
|
|
441
436
|
class: $({
|
|
442
437
|
"top-active": !Array.isArray(e.value) && !t.multiselect && e.value.name === l.name
|
|
443
438
|
}),
|
|
444
439
|
key: l.id ?? void 0,
|
|
445
|
-
onClick: B((
|
|
440
|
+
onClick: B((A) => u(l), ["stop"])
|
|
446
441
|
}, {
|
|
447
|
-
default:
|
|
448
|
-
t.$slots.item ?
|
|
442
|
+
default: w(() => [
|
|
443
|
+
t.$slots.item ? te(t.$slots, "item", {
|
|
449
444
|
key: 0,
|
|
450
445
|
item: l
|
|
451
446
|
}) : (c(), v(G, { key: 1 }, [
|
|
@@ -454,11 +449,11 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
454
449
|
]),
|
|
455
450
|
_: 2
|
|
456
451
|
}, 1032, ["class", "onClick"]))), 128)),
|
|
457
|
-
|
|
452
|
+
b.value.length ? T("", !0) : (c(), I(S(R), {
|
|
458
453
|
key: 0,
|
|
459
454
|
type: "regular"
|
|
460
455
|
}, {
|
|
461
|
-
default:
|
|
456
|
+
default: w(() => [
|
|
462
457
|
M(" Нет результатов ")
|
|
463
458
|
]),
|
|
464
459
|
_: 1
|
|
@@ -476,7 +471,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ K({
|
|
|
476
471
|
"top-changer-selector": "top-changer-selector"
|
|
477
472
|
}, Ne = {
|
|
478
473
|
$style: Ge
|
|
479
|
-
}, Oe = /* @__PURE__ */ L(Pe, [["__cssModules", Ne]]), Xe = fe, Re =
|
|
474
|
+
}, Oe = /* @__PURE__ */ L(Pe, [["__cssModules", Ne]]), Xe = fe, Re = Ae, Ye = $e, je = Oe, Qe = ue;
|
|
480
475
|
export {
|
|
481
476
|
Xe as TopEditArea,
|
|
482
477
|
Re as TopEditInput,
|
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 { ref, computed } from 'vue';\nimport Button from '@/components/forms/button/button.vue';\nimport type { Props, Emits } 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=\"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=\"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:icon=\"attachToKeyboard ? '': ''\"\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 module>\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</style>\n","<script setup lang=\"ts\">\nimport { ref, toRef, watch } from 'vue';\nimport type { Props, Emits } 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\t\t<!-- @slot Слот Button -->\n\t\t\t<slot></slot>\n\t\t</TopButton>\n\t</div>\n</template>\n\n<style module>\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 module>\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-bg-2);\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-bg-3);\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-secondary-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-2);\n}\n\n/* top-disabled */\n.top-radioGroup_item.top-disabled {\n\t--top-icon-color: var(--color-text-3);\n\n\tcolor: var(--color-text-3);\n}\n\n.top-radioGroup_item.top-disabled .top-radioGroup_circle {\n\tborder-color: var(--color-theme-400);\n\tbackground-color: var(--color-theme-100);\n}\n\n/* top-error */\n.top-radioGroup.top-error .top-radioGroup_item:not(.top-disabled) .top-radioGroup_circle {\n\tborder-color: var(--color-negative);\n}\n</style>","import type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { debounce } from '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};","<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 { 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: 'Все',\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 * Управляет закрытием окна\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\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\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}\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=\"API.isLoading.value\"\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=\"!itemsForShow.length\"\n\t\t\t\ttype=\"regular\"\n\t\t\t>\n\t\t\t\tНет результатов\n\t\t\t</TopPopupListItem>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style module>\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","popupRef","getPopup","API","localItems","isSelected","checkNameForNullId","itemSelected","itemsForShow","searchString","searchStringInvertKeyboard","invertKeyboardLayout","itemName","selectItem","newModel","Core","selectNextItem","nextIndex","deleteItemById","id","isOpened","onScrollContentList","e","el","TopEditArea","EditArea","TopEditInput","EditInput","TopRadioGroup","RadioGroup","TopSelector2","Selector2","TopMenu","Menu"],"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\">\r\nimport { ref, computed } from 'vue';\r\nimport Button from '@/components/forms/button/button.vue';\r\nimport type { Props, Emits } from './editArea';\r\nimport Textarea from '@/components/forms/textarea/textarea.vue';\r\n\r\n// TODO: добавить переменную top-forms-fixed-height и использовать ее при добавлении отступов у страницы\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tdefaultValue: '',\r\n\tcancelText: 'Cancel',\r\n\tsubmitText: 'Send',\r\n\tcloseText: 'Close',\r\n\texpandable: true,\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst localValue = ref(props.defaultValue);\r\n\r\nconst isFocused = ref(props.isFocused);\r\n\r\nconst isChanged = computed(() => localValue.value !== props.defaultValue);\r\n\r\nconst cancelBtnText = computed(() => {\r\n\tif (props.attachToKeyboard) return '';\r\n\r\n\tif (props.forceShowCloseBtn && !isChanged.value) return props.closeText;\r\n\r\n\treturn props.cancelText;\r\n});\r\n\r\nconst submit = (value: string) => {\r\n\temit('submit', value);\r\n\r\n\tlocalValue.value = props.defaultValue;\r\n};\r\n\r\nconst cancel = () => {\r\n\tif (props.forceShowCloseBtn && !isChanged.value) {\r\n\t\temit('close');\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tlocalValue.value = props.defaultValue;\r\n};\r\n\r\nconst clickOnTitle = () => {\r\n\tif (props.attachToKeyboard) emit('clickOnTitle');\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-editArea': true,\r\n\t\t\t'top-editArea-attachedToKeyboard': attachToKeyboard,\r\n\t\t}\"\r\n\t>\r\n\t\t<div\r\n\t\t\tv-if=\"title\"\r\n\t\t\tclass=\"top-editArea_title\"\r\n\t\t\t@click=\"clickOnTitle()\"\r\n\t\t>\r\n\t\t\t{{ title }}\r\n\t\t</div>\r\n\r\n\t\t<div\r\n\t\t\t:class=\"{\r\n\t\t\t\t'top-editArea_form': true,\r\n\t\t\t\t'top-error': isError,\r\n\t\t\t\t'top-focus': isFocused,\r\n\t\t\t}\"\r\n\t\t>\r\n\t\t\t<Textarea\r\n\t\t\t\tv-top-focus=\"isFocused\"\r\n\t\t\t\tv-model=\"localValue\"\r\n\t\t\t\t:name=\"name\"\r\n\t\t\t\t:placeholder=\"placeholder\"\r\n\t\t\t\t:rows=\"rows\"\r\n\t\t\t\t:minHeight=\"minHeight\"\r\n\t\t\t\t:expandable=\"expandable\"\r\n\t\t\t\t:disabled=\"disabled\"\r\n\t\t\t\t:readonly=\"readonly\"\r\n\t\t\t\t:isError=\"isError\"\r\n\t\t\t\t:hint=\"hint\"\r\n\t\t\t\tclass=\"top-editArea_element\"\r\n\t\t\t\t@focus=\"() => isFocused = true\"\r\n\t\t\t\t@blur=\"() => isFocused = false\"\r\n\t\t\t\t@keyup.esc=\"cancel\"\r\n\t\t\t\t@keyup.ctrl.enter=\"submit(localValue)\"\r\n\t\t\t/>\r\n\r\n\t\t\t<div class=\"top-editArea_footer\">\r\n\t\t\t\t<Button\r\n\t\t\t\t\tv-if=\"isChanged || forceShowCloseBtn\"\r\n\t\t\t\t\tclass=\"top-editArea_button\"\r\n\t\t\t\t\tcolor=\"theme\"\r\n\t\t\t\t\tstyling=\"soft\"\r\n\t\t\t\t\t:icon=\"attachToKeyboard ? '': ''\"\r\n\t\t\t\t\t@click=\"cancel\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ cancelBtnText }}\r\n\t\t\t\t</Button>\r\n\r\n\t\t\t\t<Button\r\n\t\t\t\t\tclass=\"top-editArea_button\"\r\n\t\t\t\t\tv-if=\"isChanged\"\r\n\t\t\t\t\t:icon=\"attachToKeyboard ? '': ''\"\r\n\t\t\t\t\t@click=\"submit(localValue)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ attachToKeyboard ? '' : submitText }}\r\n\t\t\t\t</Button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-editArea {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tgap: 6px;\r\n}\r\n\r\n.top-editArea_title {\r\n\tfont-size: 12px;\r\n}\r\n\r\n.top-editArea_form {\r\n\tflex-direction: column;\r\n}\r\n\r\n.top-editArea_form:hover {\r\n\tborder-color: var(--top-forms-border-color-hover);\r\n}\r\n\r\n.top-editArea_form.top-focus {\r\n\tborder-color: var(--color-line-primary-1);\r\n\toutline: none;\r\n}\r\n\r\n/* textarea в EditArea */\r\n.top-textarea {\r\n\twidth: 100%;\r\n}\r\n\r\n.top-editArea_element.top-textarea_textarea {\r\n\tborder: none;\r\n\toutline: none;\r\n\tanimation: none;\r\n}\r\n\r\n/* footer */\r\n.top-editArea_footer {\r\n\tpadding: var(--top-forms-padding);\r\n\tdisplay: flex;\r\n\tmin-height: 32px;\r\n\tjustify-content: flex-end;\r\n\tgap: var(--top-forms-padding);\r\n}\r\n\r\n/* attachedToKeyboard */\r\n.top-editArea-attachedToKeyboard {\r\n\tbackground: var(--top-forms-background-color);\r\n\tmargin-bottom: env(keyboard-inset-height, 0);\r\n\tposition: fixed;\r\n\tbottom: 0;\r\n\tright: 0;\r\n\tleft: 0;\r\n\tz-index: 2;\r\n\tgap: 0;\r\n}\r\n\r\n.top-editArea-attachedToKeyboard .top-editArea_form {\r\n\tborder-radius: 0;\r\n\tborder: none;\r\n\tborder-top: 1px solid var(--top-forms-border-color);\r\n}\r\n\r\n.top-editArea-attachedToKeyboard .top-editArea_title {\r\n\tcursor: pointer;\r\n\tborder-top: 1px solid var(--color-line-2-opacity);\r\n\tpadding: var(--top-forms-padding);\r\n}\r\n\r\n.top-editArea-attachedToKeyboard .top-editArea_footer > [data-top-icon] {\r\n\tborder-radius: 100%;\r\n}\r\n\r\n.top-editArea-attachedToKeyboard .top-button.top-editArea_button {\r\n\tmin-width: auto;\r\n\tpadding: 0;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { ref, toRef, watch } from 'vue';\r\nimport type { Props, Emits } from './editInput';\r\nimport TopInput from '@/components/forms/input/input.vue';\r\nimport TopButton from '@/components/forms/button/button.vue';\r\n\r\nconst props = defineProps<Props>();\r\n\r\nconst intermediateValue = ref(props.modelValue);\r\n\r\nwatch(toRef(props.modelValue), () => {\r\n\tintermediateValue.value = props.modelValue;\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst submit = () => {\r\n\temit('update:modelValue', intermediateValue.value);\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-editInput\">\r\n\t\t<TopInput\r\n\t\t\t:=\"input\"\r\n\t\t\t@keydown.esc.capture.stop=\"intermediateValue = modelValue\"\r\n\t\t\t@keydown.enter.stop=\"submit\"\r\n\t\t\tv-model=\"intermediateValue\"\r\n\t\t/>\r\n\r\n\t\t<TopButton\r\n\t\t\tv-if=\"intermediateValue !== modelValue\"\r\n\t\t\ticon=\"\"\r\n\t\t\tstyling=\"soft\"\r\n\t\t\t:=\"button\"\r\n\t\t\t@click=\"submit\"\r\n\t\t/>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-editInput {\r\n\twidth: 220px;\r\n\tflex-grow: 1;\r\n\tdisplay: flex;\r\n\talign-items: flex-end;\r\n\tgap: var(--top-gap-1);\r\n}\r\n\r\n.top-editInput .top-input {\r\n\twidth: unset;\r\n\tflex-grow: 1;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { Ref } from '@vue/reactivity';\r\nimport { ref, watch } from 'vue';\r\nimport type { Props, Emits } from './radioGroup';\r\n\r\nconst model = defineModel<string>({\r\n\trequired: true,\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tsize: 's',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst elRef: Ref<HTMLElement|null> = ref(null);\r\n\r\nwatch(model, () => {\r\n\tif (!props.radiosProps?.some(item => item.value === model.value)) {\r\n\t\tmodel.value = props.radiosProps?.[0]?.value ?? '';\r\n\t}\r\n\r\n\telRef.value?.querySelector('.radioGroup_item-selected')?.scrollIntoView();\r\n}, { immediate: true });\r\n\r\nconst uid = 'radioGroup-' + Math.random();\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\tref=\"elRef\"\r\n\t\t:class=\"{\r\n\t\t\t['top-radioGroup']: true,\r\n\t\t\t['top-scrollBarXHidding']: true,\r\n\t\t\t['top-size_' + size]: !!size,\r\n\t\t\t['top-error']: isError,\r\n\t\t}\"\r\n\t>\r\n\t\t<label\r\n\t\t\tv-for=\"item of radiosProps\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-radioGroup_item-selected']: item.value === model,\r\n\t\t\t\t['top-radioGroup_item']: true,\r\n\t\t\t\t['top-forms-focusable']: true,\r\n\t\t\t\t['top-disabled']: item.disabled,\r\n\t\t\t}\"\r\n\t\t\t:data-top-icon=\"item.icon\"\r\n\t\t\t@click=\"model = item.value\"\r\n\t\t>\r\n\t\t\t{{ item.title }}\r\n\r\n\t\t\t<span\r\n\t\t\t\tv-if=\"showIndicator\"\r\n\t\t\t\tclass=\"top-radioGroup_circle\"\r\n\t\t\t></span>\r\n\r\n\t\t\t<!-- Для нативной навигации -->\r\n\t\t\t<input\r\n\t\t\t\tv-model=\"model\"\r\n\t\t\t\t:name=\"uid\"\r\n\t\t\t\ttype=\"radio\"\r\n\t\t\t\t:class=\"{\r\n\t\t\t\t\t['top-unvisible']: true,\r\n\t\t\t\t}\"\r\n\t\t\t\t:value=\"item.value\"\r\n\t\t\t\t:disabled=\"item.disabled\"\r\n\t\t\t/>\r\n\t\t</label>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n@import \"./styles/top-scrollBar.css\";\r\n\r\n.top-radioGroup {\r\n\tuser-select: none;\r\n\tbox-sizing: border-box;\r\n\tborder-radius: 8px;\r\n\tbackground-color: var(--color-bg-2);\r\n\theight: var(--top-forms-base-height);\r\n\tpadding: 2px;\r\n\tgap: 2px;\r\n\tdisplay: flex;\r\n\talign-items: flex-start;\r\n}\r\n\r\n.top-radioGroup_item {\r\n\tcolor: var(--color-text-2);\r\n\tcursor: pointer;\r\n\tbox-sizing: border-box;\r\n\tborder-radius: 6px;\r\n\theight: calc(var(--top-forms-base-height) - 4px);\r\n\tpadding: 0 16px;\r\n\tfont-weight: 400;\r\n\twhite-space: nowrap;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tflex-grow: 1;\r\n\tgap: 4px;\r\n}\r\n\r\n.top-radioGroup_item:hover {\r\n\tbackground-color: var(--color-bg-3);\r\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\r\n}\r\n\r\n/* selected */\r\n.top-radioGroup_item-selected {\r\n\tcolor: var(--color-text-1);\r\n\tpointer-events: none;\r\n\tbackground-color: var(--color-bg-secondary-1);\r\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\r\n}\r\n\r\n/* circle */\r\n.top-radioGroup_circle {\r\n\tcontent: \"\";\r\n\tbox-sizing: border-box;\r\n\tborder: 1px solid var(--color-line-3-opacity);\r\n\tborder-radius: 50%;\r\n\tpadding: 3px;\r\n\tmargin-left: auto;\r\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\r\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\r\n}\r\n\r\n.top-radioGroup_item:hover .top-radioGroup_circle:before {\r\n\tborder-color: var(--color-line-primary-1);\r\n}\r\n\r\n/* circle selected */\r\n.top-radioGroup_item-selected .top-radioGroup_circle {\r\n\tborder-color: var(--color-line-primary-1);\r\n\tborder-width: 5px;\r\n}\r\n\r\n.top-radioGroup_item-selected:hover .top-radioGroup_circle {\r\n\tborder-color: var(--color-line-primary-2);\r\n}\r\n\r\n/* top-disabled */\r\n.top-radioGroup_item.top-disabled {\r\n\t--top-icon-color: var(--color-text-3);\r\n\r\n\tcolor: var(--color-text-3);\r\n}\r\n\r\n.top-radioGroup_item.top-disabled .top-radioGroup_circle {\r\n\tborder-color: var(--color-theme-400);\r\n\tbackground-color: var(--color-theme-100);\r\n}\r\n\r\n/* top-error */\r\n.top-radioGroup.top-error .top-radioGroup_item:not(.top-disabled) .top-radioGroup_circle {\r\n\tborder-color: var(--color-negative);\r\n}\r\n</style>","import type { Ref } from 'vue';\r\nimport { ref } from 'vue';\r\nimport { debounce } from 'lodash';\r\nimport type { Item, Props } from './selector2';\r\n\r\nexport const useAPI = (apiRequest: Props['apiRequest'], minLength: number, useCache: Props['useCache']) => {\r\n\t/**\r\n\t * Список, полученный через API\r\n\t */\r\n\tconst items: Ref<Array<Item>> = ref([]);\r\n\r\n\t/**\r\n\t * Флаг - идет загрузка\r\n\t */\r\n\tconst isLoading = ref(false);\r\n\r\n\tlet _searchText = '';\r\n\tlet _nextOffset: number | undefined;\r\n\r\n\tif (apiRequest && !apiRequest.params.limit) {\r\n\t\tapiRequest.params.limit = 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Выполнить обращение к API\r\n\t *\r\n\t * При ошибке вернет undefined\r\n\t */\r\n\tconst callAPIRequest = async (): Promise<{ nextOffset?: number, result: Array<Item> } | undefined> => {\r\n\t\tif (!apiRequest) return;\r\n\r\n\t\tlet res;\r\n\t\tlet cacheKey;\r\n\r\n\t\tif (useCache) {\r\n\t\t\t// кэш для полученных ответов через apiRequest\r\n\t\t\t// общий для всех компонентов, использующих apiRequest\r\n\t\t\tapiRequest.cache ??= new Map();\r\n\r\n\t\t\tcacheKey = JSON.stringify(apiRequest.params);\r\n\t\t\tres = apiRequest.cache.get(cacheKey);\r\n\r\n\t\t\tif (res) {\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tisLoading.value = true;\r\n\t\tres = await apiRequest.call();\r\n\t\tisLoading.value = false;\r\n\r\n\t\tif (res.errors) return;\r\n\r\n\t\tif (!Array.isArray(res.result)) {\r\n\t\t\tconsole.warn(`В result ожидался массив`);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst indexWithError = (res.result as Array<Item | any>).findIndex(item => item.id === undefined || item.name === undefined);\r\n\t\tif (indexWithError !== -1) {\r\n\t\t\tconsole.warn(`В result[${indexWithError}] нет id или name`);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (useCache) {\r\n\t\t\tapiRequest.cache.set(cacheKey as string, res);\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t};\r\n\r\n\t/**\r\n\t * Загрузить items\r\n\t */\r\n\tconst load = async () => {\r\n\t\tif (!apiRequest) return;\r\n\r\n\t\tapiRequest.params.offset = 0;\r\n\t\tapiRequest.params.search = _searchText;\r\n\r\n\t\tconst res = await callAPIRequest();\r\n\t\tif (!res) return;\r\n\r\n\t\t_nextOffset = res.nextOffset;\r\n\r\n\t\titems.value = res.result;\r\n\t};\r\n\r\n\t/**\r\n\t * Загрузить следующую страницу items\r\n\t */\r\n\tconst loadAppend = async () => {\r\n\t\tif (!apiRequest) return;\r\n\r\n\t\t// данных о следующих страницах не обнаружено\r\n\t\tif (!_nextOffset) return;\r\n\r\n\t\t// дозагружать нельзя, если не завершена предыдущшая загрузка\r\n\t\tif (isLoading.value) return;\r\n\r\n\t\tapiRequest.params.offset = _nextOffset;\r\n\t\tapiRequest.params.search = _searchText;\r\n\r\n\t\tconst res = await callAPIRequest();\r\n\t\tif (!res) return;\r\n\r\n\t\t_nextOffset = res.nextOffset;\r\n\r\n\t\titems.value = items.value.concat(res.result);\r\n\t};\r\n\r\n\tconst loadDebounce = debounce(() => load(), 200);\r\n\r\n\t/**\r\n\t * Выполнить поиск по указанному тексту\r\n\t *\r\n\t * Если длина текста меньше minLength, поиск не будет проивзеден\r\n\t *\r\n\t * Если текст не изменился, поиск не будет проивзеден\r\n\t * @param searchText - текст поиска\r\n\t * @param useDebounce - отложенное выполнение поиска\r\n\t */\r\n\tconst setSearchTextAndLoad = (searchText: string, useDebounce = true) => {\r\n\t\tif (!apiRequest) return;\r\n\r\n\t\tif (searchText.length < minLength) return;\r\n\r\n\t\t// условия поиска не поменялись, данные загружены\r\n\t\tif (searchText === _searchText && items.value.length) return;\r\n\r\n\t\t_searchText = searchText;\r\n\r\n\t\tif (useDebounce) {\r\n\t\t\tloadDebounce();\r\n\t\t} else {\r\n\t\t\tvoid load();\r\n\t\t}\r\n\t};\r\n\r\n\treturn {\r\n\t\titems,\r\n\t\tisLoading,\r\n\t\tloadAppend,\r\n\t\tsetSearchTextAndLoad,\r\n\t};\r\n};","<script setup lang=\"ts\">\r\nimport type { Ref, ComputedRef, ModelRef, ComponentInstance } from 'vue';\r\nimport { computed, ref, watch } from 'vue';\r\nimport Core from '@/core/core/core';\r\nimport { invertKeyboardLayout } from '@/core/utils/keyboard';\r\nimport { TopPopup, TopPopupListItem, TopPopupWidgetInput } from '@/components/popup/popup';\r\nimport type PopupClass from '@/components/popup/lib/popup';\r\nimport type { Item, Props, Slots } from './selector2';\r\nimport { useAPI } from './api';\r\nimport Selector2ItemMulti from './itemMulti.vue';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\titems: () => [] as Array<Item>,\r\n\tsize: 's',\r\n\tminLength: 0,\r\n\tshowSelectedInInput: true,\r\n});\r\n\r\nconst model = defineModel<Props['modelValue']>() as ModelRef<Props['modelValue']>;\r\n\r\ndefineSlots<Slots>();\r\n\r\n/**\r\n * Текст поиска по результатам\r\n */\r\nconst searchText = ref('');\r\n\r\nconst itemAll = {\r\n\tid: 0,\r\n\tname: 'Все',\r\n};\r\n\r\n/**\r\n * Экземпляр компонента Popup\r\n */\r\nconst popupRef: Ref<ComponentInstance<typeof TopPopup> | null> = ref(null);\r\n\r\n/**\r\n * Получить доступ к объекту popup\r\n */\r\nconst getPopup = (): PopupClass | undefined => {\r\n\treturn popupRef.value?.popup;\r\n};\r\n\r\n// для storybook\r\nif ((window as any).__STORYBOOK_PREVIEW__ && !props.modelValue) {\r\n\twatch(\r\n\t\t() => props.multiselect,\r\n\t\t() => {\r\n\t\t\tmodel.value = props.multiselect ? [] : { id: null, name: '' };\r\n\t\t},\r\n\t\t{ immediate: true },\r\n\t);\r\n}\r\n\r\nconst API = useAPI(props.apiRequest, props.minLength, props.useCache);\r\n\r\n/**\r\n * Варианты выбора: props.items + \"Выбрать все\"\r\n */\r\nconst localItems: ComputedRef<Array<Item>> = computed(() => {\r\n\tconst items: Array<Item> = [];\r\n\r\n\tif (!props.multiselect && props.appendAllValue) {\r\n\t\titems.push(itemAll);\r\n\t}\r\n\r\n\tprops.items.forEach(item => items.push({ ...item }));\r\n\r\n\treturn items;\r\n});\r\n\r\n/**\r\n * Проверить, что элемент выбран\r\n */\r\nconst isSelected = (item: Item, checkNameForNullId = true) => {\r\n\tif (checkNameForNullId && item.id === null) {\r\n\t\tif (Array.isArray(model.value)) {\r\n\t\t\treturn model.value.some(itemSelected => itemSelected.id === item.id && itemSelected.name === item.name);\r\n\t\t} else {\r\n\t\t\treturn item.name === model.value.name;\r\n\t\t}\r\n\t}\r\n\r\n\tif (Array.isArray(model.value)) {\r\n\t\treturn model.value.some(itemSelected => itemSelected.id === item.id);\r\n\t} else {\r\n\t\treturn item.id === model.value.id;\r\n\t}\r\n};\r\n\r\n/**\r\n * Варианты выбора, которые выводятся\r\n */\r\nconst itemsForShow = computed(() => {\r\n\tconst searchString = searchText.value.toLowerCase();\r\n\tconst searchStringInvertKeyboard = invertKeyboardLayout(searchString);\r\n\r\n\tlet items: typeof localItems.value = [];\r\n\r\n\tlocalItems.value.forEach((item) => {\r\n\t\tconst itemName = item.name.toLowerCase();\r\n\r\n\t\tif (\r\n\t\t\titem.id === Number(searchString) ||\r\n\t\t\titemName.includes(searchString) ||\r\n\t\t\titemName.includes(searchStringInvertKeyboard)\r\n\t\t) {\r\n\t\t\tif (itemName === searchString || itemName === searchStringInvertKeyboard) {\r\n\t\t\t\titems.unshift(item);\r\n\t\t\t} else {\r\n\t\t\t\titems.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\titems.push(...API.items.value);\r\n\r\n\tif (\r\n\t\tprops.appendSearchToResult &&\r\n\t\t!!searchText.value &&\r\n\t\t(!items.length || items[0].name.toLowerCase() !== searchString)\r\n\t) {\r\n\t\titems.push({\r\n\t\t\tid: null,\r\n\t\t\tname: searchText.value,\r\n\t\t});\r\n\t}\r\n\r\n\tif (props.multiselect) {\r\n\t\titems = items.filter(item => !isSelected(item));\r\n\t}\r\n\r\n\treturn items;\r\n});\r\n\r\n/**\r\n * Выбрать значение\r\n *\r\n * Управляет закрытием окна\r\n */\r\nconst selectItem = async (item: Item) => {\r\n\tif (props.multiselect) {\r\n\t\tif (!Array.isArray(model.value)) return;\r\n\r\n\t\tif (isSelected(item)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst newModel = [...model.value];\r\n\t\tnewModel.push({ ...item });\r\n\t\tmodel.value = newModel;\r\n\r\n\t\tif (Core.state.isMobile) {\r\n\t\t\tgetPopup()?.close();\r\n\t\t} else {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tgetPopup()?.recalcPosition();\r\n\t\t\t\tgetPopup()?.elPopupWidget?.querySelector('input')?.focus();\r\n\r\n\t\t\t\t// сбросить введенный текст, только если больше не найдено результатов\r\n\t\t\t\tif (searchText.value) {\r\n\t\t\t\t\tif (!itemsForShow.value.length) {\r\n\t\t\t\t\t\tsearchText.value = '';\r\n\t\t\t\t\t\tAPI.items.value = [];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t} else {\r\n\t\t// сбросить введенный текст\r\n\t\tif (searchText.value) {\r\n\t\t\tsearchText.value = '';\r\n\t\t\tAPI.items.value = [];\r\n\t\t}\r\n\r\n\t\tif (JSON.stringify(item) !== JSON.stringify(model.value)) {\r\n\t\t\tmodel.value = { ...item };\r\n\t\t}\r\n\r\n\t\tgetPopup()?.close();\r\n\t}\r\n};\r\n\r\n/**\r\n * Выбрать следующее значение\r\n */\r\nconst selectNextItem = () => {\r\n\tif (!Array.isArray(model.value)) {\r\n\t\tconst currentIndex = localItems.value.findIndex(item => item.id === (model.value as Item).id);\r\n\t\tconst nextIndex = (currentIndex + 1) % localItems.value.length;\r\n\t\tmodel.value = { ...localItems.value[nextIndex] };\r\n\t}\r\n};\r\n\r\n/**\r\n * Удалить выбранное значение по id\r\n * @param id\r\n */\r\nconst deleteItemById = async (id: Item['id']) => {\r\n\tif (Array.isArray(model.value)) {\r\n\t\tmodel.value = model.value.filter(item => item.id !== id);\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tgetPopup()?.recalcPosition();\r\n\t\t});\r\n\t}\r\n};\r\n\r\nconst isOpened = ref(false); // флаг попап открыт\r\n\r\nif (props.apiRequest) {\r\n\twatch(isOpened, () => {\r\n\t\tif (isOpened.value) {\r\n\t\t\t// при открытии сразу выполнить поиск\r\n\t\t\tAPI.setSearchTextAndLoad(searchText.value, false);\r\n\t\t}\r\n\t});\r\n\r\n\t// отложенный поиск при вводе текста\r\n\twatch(searchText, () => API.setSearchTextAndLoad(searchText.value));\r\n}\r\n\r\nconst onScrollContentList = (e: Event) => {\r\n\tconst el = e.target as HTMLElement;\r\n\r\n\tif (el.scrollTop / (el.scrollHeight - el.offsetHeight) > 0.8) {\r\n\t\tAPI.loadAppend();\r\n\t}\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<TopPopup\r\n\t\tref=\"popupRef\"\r\n\t\t@open=\"isOpened = true\"\r\n\t\t@close=\"isOpened = false\"\r\n\t\t@scrollContentList=\"apiRequest ? onScrollContentList($event) : undefined\"\r\n\t\t:notch=\"false\"\r\n\t\t:transitionDuration=\"0\"\r\n\t>\r\n\t\t<template #opener>\r\n\t\t\t<div\r\n\t\t\t\t:class=\"{\r\n\t\t\t\t\t'top-selector2' : true,\r\n\t\t\t\t\t'top-selector2-multiselect': multiselect,\r\n\t\t\t\t\t['top-size_' + size]: true,\r\n\t\t\t\t\t['top-disabled']: disabled,\r\n\t\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t\t['top-error']: isError,\r\n\t\t\t\t}\"\r\n\t\t\t>\r\n\t\t\t\t<template v-if=\"multiselect\">\r\n\t\t\t\t\t<div class=\"top-selector2_activeItems\">\r\n\t\t\t\t\t\t<Selector2ItemMulti\r\n\t\t\t\t\t\t\tv-for=\"item of model as Array<Item>\"\r\n\t\t\t\t\t\t\t:id=\"item.id\"\r\n\t\t\t\t\t\t\t:name=\"item.name\"\r\n\t\t\t\t\t\t\t@delete=\"deleteItemById\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</template>\r\n\r\n\t\t\t\t<span v-if=\"!multiselect\" class=\"top-selector2_activeName top-ellipsis\">\r\n\t\t\t\t\t{{ !Array.isArray(model) ? model.name : '' }}\r\n\t\t\t\t</span>\r\n\r\n\t\t\t\t<span\r\n\t\t\t\t\tv-if=\"addChanger && !multiselect && localItems.length > 1 && !disabled\"\r\n\t\t\t\t\tclass=\"top-changer top-changer-selector\"\r\n\t\t\t\t\t@click.stop=\"selectNextItem\"\r\n\t\t\t\t></span>\r\n\t\t\t</div>\r\n\t\t</template>\r\n\r\n\t\t<template #widget>\r\n\t\t\t<TopPopupWidgetInput\r\n\t\t\t\ttitle=\"Поиск\"\r\n\t\t\t\ticon=\"\"\r\n\t\t\t\tv-model=\"searchText\"\r\n\t\t\t\t:isLoading=\"API.isLoading.value\"\r\n\t\t\t\t:placeholder=\"!Array.isArray(model) && !multiselect && showSelectedInInput ? model.name : placeholder\"\r\n\t\t\t/>\r\n\t\t</template>\r\n\r\n\t\t<template #contentList>\r\n\t\t\t<TopPopupListItem\r\n\t\t\t\tv-for=\"item of itemsForShow\"\r\n\t\t\t\t:class=\"{\r\n\t\t\t\t\t'top-active': !Array.isArray(model) && !multiselect && model.name === item.name\r\n\t\t\t\t}\"\r\n\t\t\t\t:key=\"item.id ?? undefined\"\r\n\t\t\t\t@click.stop=\"selectItem(item)\"\r\n\t\t\t>\r\n\t\t\t\t<slot\r\n\t\t\t\t\tv-if=\"$slots.item\"\r\n\t\t\t\t\tname=\"item\"\r\n\t\t\t\t\t:item=\"item\"\r\n\t\t\t\t></slot>\r\n\r\n\t\t\t\t<template\r\n\t\t\t\t\tv-else\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ item.name }}\r\n\t\t\t\t</template>\r\n\t\t\t</TopPopupListItem>\r\n\r\n\t\t\t<TopPopupListItem\r\n\t\t\t\tv-if=\"!itemsForShow.length\"\r\n\t\t\t\ttype=\"regular\"\r\n\t\t\t>\r\n\t\t\t\tНет результатов\r\n\t\t\t</TopPopupListItem>\r\n\t\t</template>\r\n\t</TopPopup>\r\n</template>\r\n\r\n<style module>\r\n.top-selector2 {\r\n\twidth: 180px;\r\n\tmin-height: var(--top-forms-base-height);\r\n\tbox-sizing: border-box;\r\n\tposition: relative;\r\n\tdisplay: flex;\r\n\toverflow: hidden;\r\n\tpadding: var(--top-padding-1) var(--top-forms-padding);\r\n\tcolor: var(--top-forms-placeholder-color);\r\n\r\n\tborder-radius: var(--top-radius-2);\r\n\tborder: 1px solid var(--top-forms-border-color);\r\n\tbackground: var(--top-forms-background-color);\r\n}\r\n\r\n.top-selector2-multiselect {\r\n\twidth: unset;\r\n\tmin-width: 180px;\r\n\tpadding: var(--top-padding-1);\r\n}\r\n\r\n.top-selector2.top-active {\r\n\t--top-forms-border-color: var(--top-forms-border-color-hover);\r\n\t--top-forms-background-color: var(--top-forms-background-color-hover);\r\n}\r\n\r\n.top-selector2_activeItems {\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\tgap: var(--top-padding-1);\r\n\tmax-width: 100%;\r\n}\r\n\r\n.top-selector2_activeName {\r\n\twhite-space: nowrap;\r\n}\r\n\r\n.top-changer-selector {\r\n\ttransform: translateX(-16px);\r\n}\r\n</style>\r\n","import type { ComponentCustomProps } from 'vue';\r\n\r\nimport EditArea from './editArea/editArea.vue';\r\nimport EditInput from './editInput/editInput.vue';\r\nimport RadioGroup from './radioGroup/radioGroup.vue';\r\nimport Selector2 from './selector2/selector2.vue';\r\nimport Menu from './menu/menu.vue';\r\n\r\nexport const TopEditArea = EditArea as typeof EditArea & ComponentCustomProps;\r\nexport const TopEditInput = EditInput as typeof EditInput & ComponentCustomProps;\r\nexport const TopRadioGroup = RadioGroup as typeof RadioGroup & ComponentCustomProps;\r\nexport const TopSelector2 = Selector2 as typeof Selector2 & ComponentCustomProps;\r\nexport const TopMenu = Menu as typeof Menu & ComponentCustomProps;\r\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","popupRef","getPopup","API","localItems","isSelected","checkNameForNullId","itemSelected","itemsForShow","searchString","searchStringInvertKeyboard","invertKeyboardLayout","itemName","selectItem","newModel","Core","selectNextItem","nextIndex","deleteItemById","id","isOpened","onScrollContentList","e","el","TopEditArea","EditArea","TopEditInput","EditInput","TopRadioGroup","RadioGroup","TopSelector2","Selector2","TopMenu","Menu"],"mappings":"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"}
|
package/icomoon/Read Me.txt
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
|
|
2
|
-
|
|
3
|
-
To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/docs/#local-fonts
|
|
4
|
-
|
|
5
|
-
You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
|
|
6
|
-
|
|
7
|
-
You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection.
|
|
1
|
+
Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
|
|
2
|
+
|
|
3
|
+
To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/docs/#local-fonts
|
|
4
|
+
|
|
5
|
+
You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
|
|
6
|
+
|
|
7
|
+
You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection.
|