@topvisor/ui 1.0.4 → 1.0.7

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.
Files changed (149) hide show
  1. package/.chunks/{datepicker-BJGX0c7G.amd.js → datepicker-CRfiJCmp.amd.js} +2 -2
  2. package/.chunks/{datepicker-BJGX0c7G.amd.js.map → datepicker-CRfiJCmp.amd.js.map} +1 -1
  3. package/.chunks/{datepicker-3uPurK_5.es.js → datepicker-CugKFVIH.es.js} +2 -2
  4. package/.chunks/{datepicker-3uPurK_5.es.js.map → datepicker-CugKFVIH.es.js.map} +1 -1
  5. package/.chunks/{forms-D9r2-H5Y.es.js → forms-CHiMZ8vg.es.js} +758 -743
  6. package/.chunks/forms-CHiMZ8vg.es.js.map +1 -0
  7. package/.chunks/forms-CjYoXTEQ.amd.js +3 -0
  8. package/.chunks/forms-CjYoXTEQ.amd.js.map +1 -0
  9. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-Bdv8YBAk.es.js → listItem.vue_vue_type_script_setup_true_lang-Bb7B8CTJ.es.js} +4 -4
  10. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-Bdv8YBAk.es.js.map → listItem.vue_vue_type_script_setup_true_lang-Bb7B8CTJ.es.js.map} +1 -1
  11. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-BxpjEUsq.amd.js → listItem.vue_vue_type_script_setup_true_lang-CEF3WDJ_.amd.js} +2 -2
  12. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-BxpjEUsq.amd.js.map → listItem.vue_vue_type_script_setup_true_lang-CEF3WDJ_.amd.js.map} +1 -1
  13. package/.chunks/{menu-B0Ul7Kbg.es.js → menu-CHeV29rC.es.js} +2 -2
  14. package/.chunks/{menu-B0Ul7Kbg.es.js.map → menu-CHeV29rC.es.js.map} +1 -1
  15. package/.chunks/{menu-CbhB9e4x.amd.js → menu-D1lnYuWU.amd.js} +2 -2
  16. package/.chunks/{menu-CbhB9e4x.amd.js.map → menu-D1lnYuWU.amd.js.map} +1 -1
  17. package/.chunks/{popup-pQCswyfj.amd.js → popup-C4Tne4qA.amd.js} +5 -5
  18. package/.chunks/{popup-pQCswyfj.amd.js.map → popup-C4Tne4qA.amd.js.map} +1 -1
  19. package/.chunks/{popup-Coq_61yv.es.js → popup-D-G2sXks.es.js} +2 -3
  20. package/.chunks/{popup-Coq_61yv.es.js.map → popup-D-G2sXks.es.js.map} +1 -1
  21. package/.chunks/utils-BOlUthaH.es.js +91 -0
  22. package/.chunks/utils-BOlUthaH.es.js.map +1 -0
  23. package/.chunks/utils-x88W55mf.amd.js +2 -0
  24. package/.chunks/utils-x88W55mf.amd.js.map +1 -0
  25. package/assets/forms.css +1 -1
  26. package/assets/project.css +1 -1
  27. package/assets/themes/dark.css +1 -1
  28. package/assets/themes/light.css +1 -1
  29. package/components/forms/avatar/avatar.vue.d.ts +3 -33
  30. package/components/forms/button/button.vue.d.ts +11 -31
  31. package/components/forms/checkbox/checkbox.vue.d.ts +12 -16
  32. package/components/forms/controlLabel/controlLabel.vue.d.ts +9 -13
  33. package/components/forms/hint/hint.vue.d.ts +2 -11
  34. package/components/forms/input/input.vue.d.ts +13 -31
  35. package/components/forms/inputDate/inputDate.vue.d.ts +6 -27
  36. package/components/forms/inputRange/inputRange.vue.d.ts +10 -5
  37. package/components/forms/loadbar/loadbar.vue.d.ts +2 -2
  38. package/components/forms/radio/radio.vue.d.ts +12 -16
  39. package/components/forms/select/select.vue.d.ts +8 -27
  40. package/components/forms/switcher/switcher.vue.d.ts +12 -16
  41. package/components/forms/textarea/textarea.vue.d.ts +6 -29
  42. package/components/formsExt/editArea/editArea.vue.d.ts +9 -38
  43. package/components/formsExt/editInput/editInput.vue.d.ts +5 -14
  44. package/components/formsExt/menu/menu.vue.d.ts +6 -27
  45. package/components/formsExt/radioGroup/radioGroup.vue.d.ts +8 -27
  46. package/components/formsExt/selector2/api.d.ts +2 -2
  47. package/components/formsExt/selector2/itemMulti.vue.d.ts +5 -14
  48. package/components/formsExt/selector2/selector2.vue.d.ts +107 -35
  49. package/components/popup/alert/alert.vue.d.ts +17 -21
  50. package/components/popup/confirm/confirm.vue.d.ts +19 -23
  51. package/components/popup/popup/listItem.vue.d.ts +10 -28
  52. package/components/popup/popup/opener.vue.d.ts +10 -30
  53. package/components/popup/popup/popup.vue.d.ts +21 -43
  54. package/components/popup/popup/widgetInput.vue.d.ts +11 -29
  55. package/components/popup/prompt/prompt.vue.d.ts +19 -23
  56. package/components/popup/worker.d.ts +0 -4
  57. package/components/project/project.d.ts +2 -0
  58. package/components/project/selectorCompetitors/selectorCompetitors.vue.d.ts +6 -27
  59. package/components/project/selectorRegion/composables/compare.d.ts +12 -0
  60. package/components/project/selectorRegion/composables/selectRegion.d.ts +14 -0
  61. package/components/project/selectorRegion/composables/selectSearcher.d.ts +13 -0
  62. package/components/project/selectorRegion/composables/selectorRegion.d.ts +25 -0
  63. package/components/project/selectorRegion/selectorRegion.d.ts +182 -0
  64. package/components/project/selectorRegion/selectorRegion.vue.d.ts +25 -0
  65. package/components/project/selectorRegion/stories/searchers.d.ts +3 -0
  66. package/components/project/selectorRegion/utils/consts.d.ts +20 -0
  67. package/components/project/selectorRegion/utils/utils.d.ts +23 -0
  68. package/components/project/utils.d.ts +1 -0
  69. package/components/tabs/tabs/content.vue.d.ts +9 -13
  70. package/components/tabs/tabs/tab.vue.d.ts +9 -13
  71. package/components/tabs/tabs/tabs.vue.d.ts +11 -15
  72. package/components/tabsView/tabsView/menu.vue.d.ts +17 -20
  73. package/components/tabsView/tabsView/menuDelimeter.vue.d.ts +2 -2
  74. package/components/tabsView/tabsView/menuItem.vue.d.ts +11 -29
  75. package/components/tabsView/tabsView/menuTitle.vue.d.ts +10 -14
  76. package/components/tabsView/tabsView/store.d.ts +6 -6
  77. package/components/tabsView/tabsView/tabsView.vue.d.ts +15 -31
  78. package/core/app.amd.js +1 -1
  79. package/core/app.amd.js.map +1 -1
  80. package/core/app.js +2 -2
  81. package/core/core/core.d.ts +0 -8
  82. package/core/core.amd.js +1 -1
  83. package/core/core.js +1 -1
  84. package/core/utils/date.d.ts +2 -2
  85. package/core/utils/scroll.d.ts +7 -1
  86. package/core/utils/searchers.d.ts +40 -0
  87. package/forms/forms.amd.js +1 -1
  88. package/forms/forms.js +5 -5
  89. package/formsExt/formsExt.amd.js +1 -1
  90. package/formsExt/formsExt.amd.js.map +1 -1
  91. package/formsExt/formsExt.js +64 -64
  92. package/icomoon/Topvisor icons.json +5846 -0
  93. package/icomoon/demo.html +26 -26
  94. package/icomoon/fonts/Topvisor-2.svg +12 -12
  95. package/icomoon/fonts/Topvisor-2.ttf +0 -0
  96. package/icomoon/fonts/Topvisor-2.woff +0 -0
  97. package/icomoon/selection.json +1 -1
  98. package/icomoon/style.css +16 -16
  99. package/package.json +1 -1
  100. package/popup/popup.amd.js +1 -1
  101. package/popup/popup.amd.js.map +1 -1
  102. package/popup/popup.js +14 -14
  103. package/popup/worker.amd.js +1 -1
  104. package/popup/worker.d.ts +0 -4
  105. package/popup/worker.js +3 -4
  106. package/project/project.amd.js +1 -1
  107. package/project/project.amd.js.map +1 -1
  108. package/project/project.js +366 -45
  109. package/project/project.js.map +1 -1
  110. package/project/utils.amd.js +2 -0
  111. package/project/utils.amd.js.map +1 -0
  112. package/project/utils.d.ts +2 -0
  113. package/project/utils.js +6 -0
  114. package/project/utils.js.map +1 -0
  115. package/tabs/tabs.amd.js +1 -1
  116. package/tabs/tabs.js +1 -1
  117. package/tabsView/tabsView.amd.js +1 -1
  118. package/tabsView/tabsView.amd.js.map +1 -1
  119. package/tabsView/tabsView.js +150 -143
  120. package/tabsView/tabsView.js.map +1 -1
  121. package/utils/date.amd.js +1 -1
  122. package/utils/date.js +1 -1
  123. package/utils/device.amd.js +1 -1
  124. package/utils/device.js +1 -1
  125. package/utils/lodash.amd.js +1 -1
  126. package/utils/lodash.js +4 -4
  127. package/utils/price.amd.js +1 -1
  128. package/utils/price.amd.js.map +1 -1
  129. package/utils/price.js +6 -7
  130. package/utils/price.js.map +1 -1
  131. package/utils/scroll.amd.js +1 -1
  132. package/utils/scroll.amd.js.map +1 -1
  133. package/utils/scroll.js +10 -8
  134. package/utils/scroll.js.map +1 -1
  135. package/utils/searchers.amd.js +2 -0
  136. package/utils/searchers.amd.js.map +1 -0
  137. package/utils/searchers.d.ts +2 -0
  138. package/utils/searchers.js +130 -0
  139. package/utils/searchers.js.map +1 -0
  140. package/utils/string.amd.js +1 -1
  141. package/utils/string.amd.js.map +1 -1
  142. package/utils/string.js +1 -1
  143. package/.chunks/forms-BImXJ_ZO.amd.js +0 -3
  144. package/.chunks/forms-BImXJ_ZO.amd.js.map +0 -1
  145. package/.chunks/forms-D9r2-H5Y.es.js.map +0 -1
  146. package/.chunks/i18n-C_OH9IT3.amd.js +0 -2
  147. package/.chunks/i18n-C_OH9IT3.amd.js.map +0 -1
  148. package/.chunks/i18n-DuTvft1T.es.js +0 -26
  149. package/.chunks/i18n-DuTvft1T.es.js.map +0 -1
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Вспомогательный класс для работы с разными Поисковиками
3
+ */
4
+ export declare const searchersNames: {
5
+ 0: string;
6
+ 20: string;
7
+ 21: string;
8
+ 1: string;
9
+ 2: string;
10
+ 4: string;
11
+ 5: string;
12
+ 6: string;
13
+ 7: string;
14
+ 8: string;
15
+ 9: string;
16
+ 101: string;
17
+ 102: string;
18
+ 103: string;
19
+ };
20
+ /**
21
+ * Получить иконку ПС
22
+ * @param searcherKey - цифра или строка с цифрой обозначающая ПС. Если null вернется иконка с глобусом
23
+ */
24
+ export declare const getSearcherGIcon: (searcherKey: number | string | null) => string;
25
+ /**
26
+ * Получить иконку устройства (ПК, планшет, смартфон)
27
+ */
28
+ export declare const getDeviceGIcon: (device: number | string) => string;
29
+ /**
30
+ * Получить иконку языка
31
+ */
32
+ export declare const getLangLabel: (searcherKey: number | string, lang: string) => string;
33
+ /**
34
+ * Сгенерировать заголовок типа частоты
35
+ */
36
+ export declare const genVolumeLabel: (label: string, searcherKey: 0 | 1, volumeType: 1 | 2 | 3 | 5 | 6) => string;
37
+ /**
38
+ * Проверить значение частоты, вернуть правильное значение частоты
39
+ */
40
+ export declare const prepareVolumeType: (searcherKey: number, volumeType: number) => number;
@@ -1,2 +1,2 @@
1
- define(["require","exports","../.chunks/forms-BImXJ_ZO.amd"],function(n,T,a){"use strict";if(typeof e>"u")var e=window.Vue;T.TopAvatar=a.TopAvatar,T.TopButton=a.TopButton$1,T.TopCheckbox=a.TopCheckbox,T.TopControlLabel=a.TopControlLabel,T.TopHint=a.TopHint$1,T.TopInput=a.TopInput,T.TopInputDate=a.TopInputDate,T.TopInputRange=a.TopInputRange,T.TopLoadbar=a.TopLoadbar,T.TopRadio=a.TopRadio,T.TopSelect=a.TopSelect,T.TopSwitcher=a.TopSwitcher,T.TopTextarea=a.TopTextarea,Object.defineProperty(T,Symbol.toStringTag,{value:"Module"})});
1
+ define(["require","exports","../.chunks/forms-CjYoXTEQ.amd"],function(n,T,a){"use strict";if(typeof e>"u")var e=window.Vue;T.TopAvatar=a.TopAvatar,T.TopButton=a.TopButton$1,T.TopCheckbox=a.TopCheckbox,T.TopControlLabel=a.TopControlLabel,T.TopHint=a.TopHint$1,T.TopInput=a.TopInput,T.TopInputDate=a.TopInputDate,T.TopInputRange=a.TopInputRange,T.TopLoadbar=a.TopLoadbar,T.TopRadio=a.TopRadio,T.TopSelect=a.TopSelect,T.TopSwitcher=a.TopSwitcher,T.TopTextarea=a.TopTextarea,Object.defineProperty(T,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=forms.amd.js.map
package/forms/forms.js CHANGED
@@ -1,4 +1,4 @@
1
- import { b as p, c as T, e as s, f as t, g as e, h as n, j as r, k as b, l as c, m as l, n as u, o as h, p as i } from "../.chunks/forms-D9r2-H5Y.es.js";
1
+ import { c as p, e as T, f as s, g as t, h as e, j as n, k as r, l as c, m as l, n as u, o as b, p as h, q as i } from "../.chunks/forms-CHiMZ8vg.es.js";
2
2
  export {
3
3
  p as TopAvatar,
4
4
  T as TopButton,
@@ -7,10 +7,10 @@ export {
7
7
  e as TopHint,
8
8
  n as TopInput,
9
9
  r as TopInputDate,
10
- b as TopInputRange,
11
- c as TopLoadbar,
12
- l as TopRadio,
13
- u as TopSelect,
10
+ c as TopInputRange,
11
+ l as TopLoadbar,
12
+ u as TopRadio,
13
+ b as TopSelect,
14
14
  h as TopSwitcher,
15
15
  i as TopTextarea
16
16
  };
@@ -1,2 +1,2 @@
1
- define(["require","exports","vue","../.chunks/forms-BImXJ_ZO.amd","../utils/keyboard.amd","../popup/popup.amd","../.chunks/menu-CbhB9e4x.amd","../require/css.amd!../assets/formsExt.css"],function(re,b,e,y,M,w,E){"use strict";if(typeof e>"u")var e=window.Vue;const $={class:"top-editArea_footer"},S=e.defineComponent({__name:"editArea",props:{defaultValue:{default:""},title:{},cancelText:{default:"Cancel"},submitText:{default:"Send"},closeText:{default:"Close"},isFocused:{type:Boolean},forceShowCloseBtn:{type:Boolean},attachToKeyboard:{type:Boolean},modelValue:{},name:{},placeholder:{},rows:{},minHeight:{},expandable:{type:Boolean,default:!0},disabled:{type:Boolean},readonly:{type:Boolean},isError:{type:Boolean},hint:{}},emits:["submit","close","clickOnTitle"],setup(i,{emit:c}){const t=i,r=c,m=e.ref(t.defaultValue),f=e.ref(t.isFocused),s=e.computed(()=>m.value!==t.defaultValue),p=e.computed(()=>t.attachToKeyboard?"":t.forceShowCloseBtn&&!s.value?t.closeText:t.cancelText),u=d=>{r("submit",d),m.value=t.defaultValue},v=()=>{if(t.forceShowCloseBtn&&!s.value){r("close");return}m.value=t.defaultValue},B=()=>{t.attachToKeyboard&&r("clickOnTitle")};return(d,l)=>{const V=e.resolveDirective("top-focus");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-editArea":!0,"top-editArea-attachedToKeyboard":d.attachToKeyboard})},[d.title?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-editArea_title",onClick:l[0]||(l[0]=h=>B())},e.toDisplayString(d.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass({"top-editArea_form":!0,"top-error":d.isError,"top-focus":f.value})},[e.withDirectives(e.createVNode(y.Textarea,{modelValue:m.value,"onUpdate:modelValue":l[1]||(l[1]=h=>m.value=h),name:d.name,placeholder:d.placeholder,rows:d.rows,minHeight:d.minHeight,expandable:d.expandable,disabled:d.disabled,readonly:d.readonly,isError:d.isError,hint:d.hint,class:"top-editArea_element",onFocus:l[2]||(l[2]=()=>f.value=!0),onBlur:l[3]||(l[3]=()=>f.value=!1),onKeyup:[e.withKeys(v,["esc"]),l[4]||(l[4]=e.withKeys(e.withModifiers(h=>u(m.value),["ctrl"]),["enter"]))]},null,8,["modelValue","name","placeholder","rows","minHeight","expandable","disabled","readonly","isError","hint"]),[[V,{disabled:!f.value}]]),e.createElementVNode("div",$,[s.value||d.forceShowCloseBtn?(e.openBlock(),e.createBlock(y.TopButton,{key:0,class:"top-editArea_button",color:"theme",styling:"soft",icon:d.attachToKeyboard?"":"",onClick:v},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value),1)]),_:1},8,["icon"])):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createBlock(y.TopButton,{key:1,class:"top-editArea_button",icon:d.attachToKeyboard?"":"",onClick:l[5]||(l[5]=h=>u(m.value))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.attachToKeyboard?"":d.submitText),1)]),_:1},8,["icon"])):e.createCommentVNode("",!0)])],2)],2)}}}),I={$style:{"top-editArea":"top-editArea","top-editArea_title":"top-editArea_title","top-editArea_form":"top-editArea_form","top-focus":"top-focus","top-textarea":"top-textarea","top-editArea_element":"top-editArea_element","top-textarea_textarea":"top-textarea_textarea","top-editArea_footer":"top-editArea_footer","top-editArea-attachedToKeyboard":"top-editArea-attachedToKeyboard","top-button":"top-button","top-editArea_button":"top-editArea_button"}},N=y._export_sfc(S,[["__cssModules",I]]),K={class:"top-editInput"},L=e.defineComponent({__name:"editInput",props:{modelValue:{},input:{},button:{}},emits:["update:modelValue"],setup(i,{emit:c}){const t=i,r=e.ref(t.modelValue);e.watch(e.toRef(t.modelValue),()=>{r.value=t.modelValue});const m=c,f=()=>{m("update:modelValue",r.value)};return(s,p)=>(e.openBlock(),e.createElementBlock("div",K,[e.createVNode(y.TopInput$1,e.mergeProps(s.input,{onKeydownCapture:p[0]||(p[0]=e.withKeys(e.withModifiers(u=>r.value=s.modelValue,["stop"]),["esc"])),onKeydown:e.withKeys(e.withModifiers(f,["stop"]),["enter"]),modelValue:r.value,"onUpdate:modelValue":p[1]||(p[1]=u=>r.value=u)}),null,16,["onKeydown","modelValue"]),r.value!==s.modelValue?(e.openBlock(),e.createBlock(y.TopButton,e.mergeProps({key:0,icon:"",styling:"soft"},s.button,{onClick:f}),null,16)):e.createCommentVNode("",!0)]))}}),P={$style:{"top-editInput":"top-editInput","top-input":"top-input"}},G=y._export_sfc(L,[["__cssModules",P]]),D=["data-top-icon","onClick"],O={key:0,class:"top-radioGroup_circle"},z=["value","disabled"],F=e.defineComponent({__name:"radioGroup",props:e.mergeModels({modelValue:{},radiosProps:{},showIndicator:{type:Boolean},size:{default:"s"},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:e.mergeModels(["update:modelValue"],["update:modelValue"]),setup(i,{emit:c}){const t=e.useModel(i,"modelValue"),r=i,m=e.ref(null);e.watch(t,()=>{var s,p,u,v,B;(s=r.radiosProps)!=null&&s.some(d=>d.value===t.value)||(t.value=((u=(p=r.radiosProps)==null?void 0:p[0])==null?void 0:u.value)??""),(B=(v=m.value)==null?void 0:v.querySelector(".radioGroup_item-selected"))==null||B.scrollIntoView()},{immediate:!0});const f="radioGroup-"+Math.random();return(s,p)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"elRef",ref:m,class:e.normalizeClass({"top-radioGroup":!0,"top-scrollBarXHidding":!0,["top-size_"+s.size]:!!s.size,"top-error":s.isError})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.radiosProps,u=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-radioGroup_item-selected":u.value===t.value,"top-radioGroup_item":!0,"top-forms-focusable":!0,"top-disabled":u.disabled}),"data-top-icon":u.icon,onClick:v=>t.value=u.value},[e.createTextVNode(e.toDisplayString(u.title)+" ",1),s.showIndicator?(e.openBlock(),e.createElementBlock("span",O)):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[0]||(p[0]=v=>t.value=v),name:f,type:"radio",class:e.normalizeClass({"top-unvisible":!0}),value:u.value,disabled:u.disabled},null,8,z),[[e.vModelRadio,t.value]])],10,D))),256))],2))}}),H={$style:{"top-scrollBarXHidding":"top-scrollBarXHidding","top-radioGroup":"top-radioGroup","top-radioGroup_item":"top-radioGroup_item","top-radioGroup_item-selected":"top-radioGroup_item-selected","top-radioGroup_circle":"top-radioGroup_circle","top-error":"top-error","top-disabled":"top-disabled"}},x=y._export_sfc(F,[["__cssModules",H]]),U=(i,c,t)=>{const r=e.ref([]),m=e.ref(!1);let f="",s;i&&!i.params.limit&&(i.params.limit=100);const p=async()=>{if(!i)return;let l,V;if(t&&(i.cache??=new Map,V=JSON.stringify(i.params),l=i.cache.get(V),l))return l;if(m.value=!0,l=await i.call(),m.value=!1,l.errors)return;if(!Array.isArray(l.result)){console.warn("В result ожидался массив");return}const h=l.result.findIndex(A=>A.id===void 0||A.name===void 0);if(h!==-1){console.warn(`В result[${h}] нет id или name`);return}return t&&i.cache.set(V,l),l},u=async()=>{if(!i)return;i.params.offset=0,i.params.search=f;const l=await p();l&&(s=l.nextOffset,r.value=l.result)},v=async()=>{if(!i||!s||m.value)return;i.params.offset=s,i.params.search=f;const l=await p();l&&(s=l.nextOffset,r.value=r.value.concat(l.result))},B=y.debounce(()=>u(),200);return{items:r,isLoading:m,loadAppend:v,setSearchTextAndLoad:(l,V=!0)=>{i&&(l.length<c||l===f&&r.value.length||(f=l,V?B():u()))}}},W={class:"top-selector2_itemMulti top-ellipsis"},J=e.defineComponent({__name:"itemMulti",props:{id:{},name:{}},emits:["delete"],setup(i){return(c,t)=>(e.openBlock(),e.createElementBlock("div",W,[e.createTextVNode(e.toDisplayString(c.name)+" ",1),e.createElementVNode("span",{class:"top-selector2_itemMultiDelete","data-top-icon":"",onClick:t[0]||(t[0]=r=>c.$emit("delete",c.id)),onMousedown:t[1]||(t[1]=e.withModifiers(()=>{},["stop"]))},null,32)]))}}),R={$style:{"top-selector2_itemMulti":"top-selector2_itemMulti","top-selector2_itemMultiDelete":"top-selector2_itemMultiDelete","top-selector2":"top-selector2","top-active":"top-active"}},X=y._export_sfc(J,[["__cssModules",R]]),j={key:0,class:"top-selector2_activeItems"},Y={key:1,class:"top-selector2_activeName top-ellipsis"},Q=e.defineComponent({__name:"selector2",props:e.mergeModels({modelValue:{},items:{default:()=>[]},multiselect:{type:Boolean},disabled:{type:Boolean},size:{default:"s"},isError:{type:Boolean},apiRequest:{},minLength:{default:0},useCache:{type:Boolean},appendSearchToResult:{type:Boolean},appendAllValue:{type:Boolean},addChanger:{type:Boolean},placeholder:{},showSelectedInInput:{type:Boolean,default:!0}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const c=i,t=e.useModel(i,"modelValue"),r=e.ref(""),m={id:0,name:"Все"},f=e.ref(null),s=()=>{var o;return(o=f.value)==null?void 0:o.popup};window.__STORYBOOK_PREVIEW__&&!c.modelValue&&e.watch(()=>c.multiselect,()=>{t.value=c.multiselect?[]:{id:null,name:""}},{immediate:!0});const p=U(c.apiRequest,c.minLength,c.useCache),u=e.computed(()=>{const o=[];return!c.multiselect&&c.appendAllValue&&o.push(m),c.items.forEach(n=>o.push({...n})),o}),v=(o,n=!0)=>n&&o.id===null?Array.isArray(t.value)?t.value.some(a=>a.id===o.id&&a.name===o.name):o.name===t.value.name:Array.isArray(t.value)?t.value.some(a=>a.id===o.id):o.id===t.value.id,B=e.computed(()=>{const o=r.value.toLowerCase(),n=M.invertKeyboardLayout(o);let a=[];return u.value.forEach(k=>{const g=k.name.toLowerCase();(k.id===Number(o)||g.includes(o)||g.includes(n))&&(g===o||g===n?a.unshift(k):a.push(k))}),a.push(...p.items.value),c.appendSearchToResult&&r.value&&(!a.length||a[0].name.toLowerCase()!==o)&&a.push({id:null,name:r.value}),c.multiselect&&(a=a.filter(k=>!v(k))),a}),d=async o=>{var n,a;if(c.multiselect){if(!Array.isArray(t.value)||v(o))return;const k=[...t.value];k.push({...o}),t.value=k,y.Core.state.isMobile?(n=s())==null||n.close():setTimeout(()=>{var g,C,T,_;(g=s())==null||g.recalcPosition(),(_=(T=(C=s())==null?void 0:C.elPopupWidget)==null?void 0:T.querySelector("input"))==null||_.focus(),r.value&&(B.value.length||(r.value="",p.items.value=[]))})}else r.value&&(r.value="",p.items.value=[]),JSON.stringify(o)!==JSON.stringify(t.value)&&(t.value={...o}),(a=s())==null||a.close()},l=()=>{if(!Array.isArray(t.value)){const n=(u.value.findIndex(a=>a.id===t.value.id)+1)%u.value.length;t.value={...u.value[n]}}},V=async o=>{Array.isArray(t.value)&&(t.value=t.value.filter(n=>n.id!==o),setTimeout(()=>{var n;(n=s())==null||n.recalcPosition()}))},h=e.ref(!1);c.apiRequest&&(e.watch(h,()=>{h.value&&p.setSearchTextAndLoad(r.value,!1)}),e.watch(r,()=>p.setSearchTextAndLoad(r.value)));const A=o=>{const n=o.target;n.scrollTop/(n.scrollHeight-n.offsetHeight)>.8&&p.loadAppend()};return(o,n)=>(e.openBlock(),e.createBlock(e.unref(w.TopPopup),{ref_key:"popupRef",ref:f,onOpen:n[1]||(n[1]=a=>h.value=!0),onClose:n[2]||(n[2]=a=>h.value=!1),onScrollContentList:n[3]||(n[3]=a=>o.apiRequest?A(a):void 0),notch:!1,transitionDuration:0},{opener:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass({"top-selector2":!0,"top-selector2-multiselect":o.multiselect,["top-size_"+o.size]:!0,"top-disabled":o.disabled,"top-forms-focusable":!o.disabled,"top-error":o.isError})},[o.multiselect?(e.openBlock(),e.createElementBlock("div",j,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value,a=>(e.openBlock(),e.createBlock(X,{id:a.id,name:a.name,onDelete:V},null,8,["id","name"]))),256))])):e.createCommentVNode("",!0),o.multiselect?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Y,e.toDisplayString(Array.isArray(t.value)?"":t.value.name),1)),o.addChanger&&!o.multiselect&&u.value.length>1&&!o.disabled?(e.openBlock(),e.createElementBlock("span",{key:2,class:"top-changer top-changer-selector",onClick:e.withModifiers(l,["stop"])})):e.createCommentVNode("",!0)],2)]),widget:e.withCtx(()=>[e.createVNode(e.unref(w.TopPopupWidgetInput),{title:"Поиск",icon:"",modelValue:r.value,"onUpdate:modelValue":n[0]||(n[0]=a=>r.value=a),isLoading:e.unref(p).isLoading.value,placeholder:!Array.isArray(t.value)&&!o.multiselect&&o.showSelectedInInput?t.value.name:o.placeholder},null,8,["modelValue","isLoading","placeholder"])]),contentList:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,a=>(e.openBlock(),e.createBlock(e.unref(w.TopPopupListItem),{class:e.normalizeClass({"top-active":!Array.isArray(t.value)&&!o.multiselect&&t.value.name===a.name}),key:a.id??void 0,onClick:e.withModifiers(k=>d(a),["stop"])},{default:e.withCtx(()=>[o.$slots.item?e.renderSlot(o.$slots,"item",{key:0,item:a}):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(a.name),1)],64))]),_:2},1032,["class","onClick"]))),128)),B.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(w.TopPopupListItem),{key:0,type:"regular"},{default:e.withCtx(()=>[e.createTextVNode(" Нет результатов ")]),_:1}))]),_:3},512))}}),Z={$style:{"top-selector2":"top-selector2","top-selector2-multiselect":"top-selector2-multiselect","top-active":"top-active","top-selector2_activeItems":"top-selector2_activeItems","top-selector2_activeName":"top-selector2_activeName","top-changer-selector":"top-changer-selector"}},q=y._export_sfc(Q,[["__cssModules",Z]]),ee=N,te=G,oe=x,le=q,ae=E.Menu;b.TopEditArea=ee,b.TopEditInput=te,b.TopMenu=ae,b.TopRadioGroup=oe,b.TopSelector2=le,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})});
1
+ define(["require","exports","vue","../.chunks/forms-CjYoXTEQ.amd","../utils/keyboard.amd","../popup/popup.amd","../.chunks/menu-D1lnYuWU.amd","../require/css.amd!../assets/formsExt.css"],function(re,b,e,y,M,w,E){"use strict";if(typeof e>"u")var e=window.Vue;const $={class:"top-editArea_footer"},S=e.defineComponent({__name:"editArea",props:{defaultValue:{default:""},title:{},cancelText:{default:"Cancel"},submitText:{default:"Send"},closeText:{default:"Close"},isFocused:{type:Boolean},forceShowCloseBtn:{type:Boolean},attachToKeyboard:{type:Boolean},modelValue:{},name:{},placeholder:{},rows:{},minHeight:{},expandable:{type:Boolean,default:!0},disabled:{type:Boolean},readonly:{type:Boolean},isError:{type:Boolean},hint:{}},emits:["submit","close","clickOnTitle"],setup(i,{emit:c}){const t=i,r=c,m=e.ref(t.defaultValue),f=e.ref(t.isFocused),n=e.computed(()=>m.value!==t.defaultValue),p=e.computed(()=>t.attachToKeyboard?"":t.forceShowCloseBtn&&!n.value?t.closeText:t.cancelText),u=d=>{r("submit",d),m.value=t.defaultValue},v=()=>{if(t.forceShowCloseBtn&&!n.value){r("close");return}m.value=t.defaultValue},B=()=>{t.attachToKeyboard&&r("clickOnTitle")};return(d,l)=>{const V=e.resolveDirective("top-focus");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-editArea":!0,"top-editArea-attachedToKeyboard":d.attachToKeyboard})},[d.title?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-editArea_title",onClick:l[0]||(l[0]=h=>B())},e.toDisplayString(d.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass({"top-editArea_form":!0,"top-error":d.isError,"top-focus":f.value})},[e.withDirectives(e.createVNode(y.Textarea,{modelValue:m.value,"onUpdate:modelValue":l[1]||(l[1]=h=>m.value=h),name:d.name,placeholder:d.placeholder,rows:d.rows,minHeight:d.minHeight,expandable:d.expandable,disabled:d.disabled,readonly:d.readonly,isError:d.isError,hint:d.hint,class:"top-editArea_element",onFocus:l[2]||(l[2]=()=>f.value=!0),onBlur:l[3]||(l[3]=()=>f.value=!1),onKeyup:[e.withKeys(v,["esc"]),l[4]||(l[4]=e.withKeys(e.withModifiers(h=>u(m.value),["ctrl"]),["enter"]))]},null,8,["modelValue","name","placeholder","rows","minHeight","expandable","disabled","readonly","isError","hint"]),[[V,{disabled:!f.value}]]),e.createElementVNode("div",$,[n.value||d.forceShowCloseBtn?(e.openBlock(),e.createBlock(y.TopButton,{key:0,class:"top-editArea_button",color:"theme",styling:"soft",icon:d.attachToKeyboard?"":"",onClick:v},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value),1)]),_:1},8,["icon"])):e.createCommentVNode("",!0),n.value?(e.openBlock(),e.createBlock(y.TopButton,{key:1,class:"top-editArea_button",icon:d.attachToKeyboard?"":"",onClick:l[5]||(l[5]=h=>u(m.value))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.attachToKeyboard?"":d.submitText),1)]),_:1},8,["icon"])):e.createCommentVNode("",!0)])],2)],2)}}}),I={$style:{"top-editArea":"top-editArea","top-editArea_title":"top-editArea_title","top-editArea_form":"top-editArea_form","top-focus":"top-focus","top-textarea":"top-textarea","top-editArea_element":"top-editArea_element","top-textarea_textarea":"top-textarea_textarea","top-editArea_footer":"top-editArea_footer","top-editArea-attachedToKeyboard":"top-editArea-attachedToKeyboard","top-button":"top-button","top-editArea_button":"top-editArea_button"}},N=y._export_sfc(S,[["__cssModules",I]]),K={class:"top-editInput"},L=e.defineComponent({__name:"editInput",props:{modelValue:{},input:{},button:{}},emits:["update:modelValue"],setup(i,{emit:c}){const t=i,r=e.ref(t.modelValue);e.watch(e.toRef(t.modelValue),()=>{r.value=t.modelValue});const m=c,f=()=>{m("update:modelValue",r.value)};return(n,p)=>(e.openBlock(),e.createElementBlock("div",K,[e.createVNode(y.TopInput$1,e.mergeProps(n.input,{onKeydownCapture:p[0]||(p[0]=e.withKeys(e.withModifiers(u=>r.value=n.modelValue,["stop"]),["esc"])),onKeydown:e.withKeys(e.withModifiers(f,["stop"]),["enter"]),modelValue:r.value,"onUpdate:modelValue":p[1]||(p[1]=u=>r.value=u)}),null,16,["onKeydown","modelValue"]),r.value!==n.modelValue?(e.openBlock(),e.createBlock(y.TopButton,e.mergeProps({key:0,icon:"",styling:"soft"},n.button,{onClick:f}),null,16)):e.createCommentVNode("",!0)]))}}),P={$style:{"top-editInput":"top-editInput","top-input":"top-input"}},G=y._export_sfc(L,[["__cssModules",P]]),D=["data-top-icon","onClick"],O={key:0,class:"top-radioGroup_circle"},z=["value","disabled"],F=e.defineComponent({__name:"radioGroup",props:e.mergeModels({modelValue:{},radiosProps:{},showIndicator:{type:Boolean},size:{default:"s"},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:e.mergeModels(["update:modelValue"],["update:modelValue"]),setup(i,{emit:c}){const t=e.useModel(i,"modelValue"),r=i,m=e.ref(null);e.watch(t,()=>{var n,p,u,v,B;(n=r.radiosProps)!=null&&n.some(d=>d.value===t.value)||(t.value=((u=(p=r.radiosProps)==null?void 0:p[0])==null?void 0:u.value)??""),(B=(v=m.value)==null?void 0:v.querySelector(".radioGroup_item-selected"))==null||B.scrollIntoView()},{immediate:!0});const f="radioGroup-"+Math.random();return(n,p)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"elRef",ref:m,class:e.normalizeClass({"top-radioGroup":!0,"top-scrollBarXHidding":!0,["top-size_"+n.size]:!!n.size,"top-error":n.isError})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.radiosProps,u=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-radioGroup_item-selected":u.value===t.value,"top-radioGroup_item":!0,"top-forms-focusable":!0,"top-disabled":u.disabled}),"data-top-icon":u.icon,onClick:v=>t.value=u.value},[e.createTextVNode(e.toDisplayString(u.title)+" ",1),n.showIndicator?(e.openBlock(),e.createElementBlock("span",O)):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[0]||(p[0]=v=>t.value=v),name:f,type:"radio",class:e.normalizeClass({"top-unvisible":!0}),value:u.value,disabled:u.disabled},null,8,z),[[e.vModelRadio,t.value]])],10,D))),256))],2))}}),H={$style:{"top-scrollBarXHidding":"top-scrollBarXHidding","top-radioGroup":"top-radioGroup","top-radioGroup_item":"top-radioGroup_item","top-radioGroup_item-selected":"top-radioGroup_item-selected","top-radioGroup_circle":"top-radioGroup_circle","top-error":"top-error","top-disabled":"top-disabled"}},x=y._export_sfc(F,[["__cssModules",H]]),U=(i,c,t)=>{const r=e.ref([]),m=e.ref(!1);let f="",n;i&&!i.params.limit&&(i.params.limit=100);const p=async()=>{if(!i)return;let l,V;if(t&&(i.cache??=new Map,V=JSON.stringify(i.params),l=i.cache.get(V),l))return l;if(m.value=!0,l=await i.call(),m.value=!1,l.errors)return;if(!Array.isArray(l.result)){console.warn("В result ожидался массив");return}const h=l.result.findIndex(A=>A.id===void 0||A.name===void 0);if(h!==-1){console.warn(`В result[${h}] нет id или name`);return}return t&&i.cache.set(V,l),l},u=async()=>{if(!i)return;i.params.offset=0,i.params.search=f;const l=await p();l&&(n=l.nextOffset,r.value=l.result)},v=async()=>{if(!i||!n||m.value)return;i.params.offset=n,i.params.search=f;const l=await p();l&&(n=l.nextOffset,r.value=r.value.concat(l.result))},B=y.debounce(()=>u(),200);return{items:r,isLoading:m,loadAppend:v,setSearchTextAndLoad:(l,V=!0)=>{i&&(l.length<c||l===f&&r.value.length||(f=l,V?B():u()))}}},W={class:"top-selector2_itemMulti top-ellipsis"},J=e.defineComponent({__name:"itemMulti",props:{id:{},name:{}},emits:["delete"],setup(i){return(c,t)=>(e.openBlock(),e.createElementBlock("div",W,[e.createTextVNode(e.toDisplayString(c.name)+" ",1),e.createElementVNode("span",{class:"top-selector2_itemMultiDelete","data-top-icon":"",onClick:t[0]||(t[0]=r=>c.$emit("delete",c.id)),onMousedown:t[1]||(t[1]=e.withModifiers(()=>{},["stop"]))},null,32)]))}}),R={$style:{"top-selector2_itemMulti":"top-selector2_itemMulti","top-selector2_itemMultiDelete":"top-selector2_itemMultiDelete","top-selector2":"top-selector2","top-active":"top-active"}},X=y._export_sfc(J,[["__cssModules",R]]),j={key:0,class:"top-selector2_activeItems"},Y={key:1,class:"top-selector2_activeName top-ellipsis"},Q=e.defineComponent({__name:"selector2",props:e.mergeModels({modelValue:{},items:{default:()=>[]},multiselect:{type:Boolean},disabled:{type:Boolean},size:{default:"s"},isError:{type:Boolean},apiRequest:{},minLength:{default:0},useCache:{type:Boolean},appendSearchToResult:{type:Boolean},appendAllValue:{type:Boolean},addChanger:{type:Boolean},placeholder:{},showSelectedInInput:{type:Boolean,default:!0}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const c=i,t=e.useModel(i,"modelValue"),r=e.ref(""),m={id:0,name:"Все"},f=e.ref(null),n=()=>{var o;return(o=f.value)==null?void 0:o.popup};window.__STORYBOOK_PREVIEW__&&!c.modelValue&&e.watch(()=>c.multiselect,()=>{t.value=c.multiselect?[]:{id:null,name:""}},{immediate:!0});const p=U(c.apiRequest,c.minLength,c.useCache),u=e.computed(()=>{const o=[];return!c.multiselect&&c.appendAllValue&&o.push(m),c.items.forEach(s=>o.push({...s})),o}),v=(o,s=!0)=>s&&o.id===null?Array.isArray(t.value)?t.value.some(a=>a.id===o.id&&a.name===o.name):o.name===t.value.name:Array.isArray(t.value)?t.value.some(a=>a.id===o.id):o.id===t.value.id,B=e.computed(()=>{const o=r.value.toLowerCase(),s=M.invertKeyboardLayout(o);let a=[];return u.value.forEach(k=>{const g=k.name.toLowerCase();(k.id===Number(o)||g.includes(o)||g.includes(s))&&(g===o||g===s?a.unshift(k):a.push(k))}),a.push(...p.items.value),c.appendSearchToResult&&r.value&&(!a.length||a[0].name.toLowerCase()!==o)&&a.push({id:null,name:r.value}),c.multiselect&&(a=a.filter(k=>!v(k))),a}),d=async o=>{var s,a;if(c.multiselect){if(!Array.isArray(t.value)||v(o))return;const k=[...t.value];k.push({...o}),t.value=k,y.Core.state.isMobile?(s=n())==null||s.close():setTimeout(()=>{var g,C,T,_;(g=n())==null||g.recalcPosition(),(_=(T=(C=n())==null?void 0:C.elPopupWidget)==null?void 0:T.querySelector("input"))==null||_.focus(),r.value&&(B.value.length||(r.value="",p.items.value=[]))})}else r.value&&(r.value="",p.items.value=[]),JSON.stringify(o)!==JSON.stringify(t.value)&&(t.value={...o}),(a=n())==null||a.close()},l=()=>{if(!Array.isArray(t.value)){const s=(u.value.findIndex(a=>a.id===t.value.id)+1)%u.value.length;t.value={...u.value[s]}}},V=async o=>{Array.isArray(t.value)&&(t.value=t.value.filter(s=>s.id!==o),setTimeout(()=>{var s;(s=n())==null||s.recalcPosition()}))},h=e.ref(!1);c.apiRequest&&(e.watch(h,()=>{h.value&&p.setSearchTextAndLoad(r.value,!1)}),e.watch(r,()=>p.setSearchTextAndLoad(r.value)));const A=o=>{const s=o.target;s.scrollTop/(s.scrollHeight-s.offsetHeight)>.8&&p.loadAppend()};return(o,s)=>(e.openBlock(),e.createBlock(e.unref(w.TopPopup),{ref_key:"popupRef",ref:f,onOpen:s[1]||(s[1]=a=>h.value=!0),onClose:s[2]||(s[2]=a=>h.value=!1),onScrollContentList:s[3]||(s[3]=a=>o.apiRequest?A(a):void 0),notch:!1,transitionDuration:0},{opener:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass({"top-selector2":!0,"top-selector2-multiselect":o.multiselect,["top-size_"+o.size]:!0,"top-disabled":o.disabled,"top-forms-focusable":!o.disabled,"top-error":o.isError})},[o.multiselect?(e.openBlock(),e.createElementBlock("div",j,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.value,a=>(e.openBlock(),e.createBlock(X,{id:a.id,name:a.name,onDelete:V},null,8,["id","name"]))),256))])):e.createCommentVNode("",!0),o.multiselect?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",Y,e.toDisplayString(Array.isArray(t.value)?"":t.value.name),1)),o.addChanger&&!o.multiselect&&u.value.length>1&&!o.disabled?(e.openBlock(),e.createElementBlock("span",{key:2,class:"top-changer top-changer-selector",onClick:e.withModifiers(l,["stop"])})):e.createCommentVNode("",!0)],2)]),widget:e.withCtx(()=>[e.createVNode(e.unref(w.TopPopupWidgetInput),{title:"Поиск",icon:"",modelValue:r.value,"onUpdate:modelValue":s[0]||(s[0]=a=>r.value=a),isLoading:e.unref(p).isLoading.value,placeholder:!Array.isArray(t.value)&&!o.multiselect&&o.showSelectedInInput?t.value.name:o.placeholder},null,8,["modelValue","isLoading","placeholder"])]),contentList:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(B.value,a=>(e.openBlock(),e.createBlock(e.unref(w.TopPopupListItem),{class:e.normalizeClass({"top-active":!Array.isArray(t.value)&&!o.multiselect&&t.value.name===a.name}),key:a.id??void 0,onClick:e.withModifiers(k=>d(a),["stop"])},{default:e.withCtx(()=>[o.$slots.item?e.renderSlot(o.$slots,"item",{key:0,item:a}):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(a.name),1)],64))]),_:2},1032,["class","onClick"]))),128)),B.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(w.TopPopupListItem),{key:0,type:"regular"},{default:e.withCtx(()=>s[4]||(s[4]=[e.createTextVNode(" Нет результатов ")])),_:1}))]),_:3},512))}}),Z={$style:{"top-selector2":"top-selector2","top-selector2-multiselect":"top-selector2-multiselect","top-active":"top-active","top-selector2_activeItems":"top-selector2_activeItems","top-selector2_activeName":"top-selector2_activeName","top-changer-selector":"top-changer-selector"}},q=y._export_sfc(Q,[["__cssModules",Z]]),ee=N,te=G,oe=x,le=q,ae=E.Menu;b.TopEditArea=ee,b.TopEditInput=te,b.TopMenu=ae,b.TopRadioGroup=oe,b.TopSelector2=le,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=formsExt.amd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formsExt.amd.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 { computed, ref } from 'vue';\r\nimport Button from '@/components/forms/button/button.vue';\r\nimport type { Emits, Props } 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=\"{ disabled: !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 { Emits, Props } 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-layout-middle);\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-layout-front-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/* 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-shading-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-1);\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-line-negative-1);\r\n}\r\n</style>\r\n","import type { Ref } from 'vue';\r\nimport { ref } from 'vue';\r\nimport { debounce } from '@/core/utils/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};\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","isChanged","vue","localValue","cancelBtnText","submit","value","intermediateValue","elRef","model","_a","item","_c","_b","items","isLoading","_searchText","apiRequest","res","indexWithError","callAPIRequest","_nextOffset","loadAppend","searchText","minLength","popupRef","API","useAPI","localItems","itemAll","itemSelected","itemsForShow","searchStringInvertKeyboard","utils_keyboard","searchString","isSelected","selectItem","newModel","forms","getPopup","_d","nextIndex","deleteItemById","id","isOpened","onScrollContentList","e","el","TopEditArea","EditArea","TopEditInput","EditInput","TopRadioGroup","RadioGroup","TopSelector2","Selector2","TopMenu","menu"],"mappings":"kxBAQA,MAAAA,EAAAC,EAQAC,EAAAC,+CAMAC,EAAAC,EAAA,SAAA,IAAAC,EAAA,QAAAN,EAAA,YAAA,EAEAO,EAAAF,EAAA,SAAA,IACCL,EAAA,iBAAA,GAEAA,EAAA,mBAAA,CAAAI,EAAA,MAAAJ,EAAA,UAEAA,EAAA,UAAa,EAGdQ,EAAAC,GAAA,CACCP,EAAA,SAAAO,CAAA,EAEAH,EAAA,MAAAN,EAAA,YAAyB,2CAKxBE,EAAA,OAAA,EAEA,OAGDI,EAAA,MAAAN,EAAA,YAAyB,8CAIsB,y2EC3ChD,MAAAA,EAAAC,2DAKCS,EAAA,MAAAV,EAAA,UAAgC,CAAA,EAGjC,MAAAE,EAAAC,uCAGkD,sjCCRlDH,EAAAC,EAMAU,EAAAN,EAAA,IAAA,IAAA,EAEAA,EAAA,MAAAO,EAAA,IAAA,gBACCC,EAAAb,EAAA,cAAA,MAAAa,EAAA,KAAAC,GAAAA,EAAA,QAAAF,EAAA,SACCA,EAAA,QAAAG,GAAAC,EAAAhB,EAAA,cAAA,YAAAgB,EAAA,KAAA,YAAAD,EAAA,QAAA,uGAGuE,EAAA,CAAA,UAAA,EAAA,CAAA,gzCCbxE,MAAAE,EAAAZ,EAAA,IAAA,CAAA,CAAA,EAKAa,EAAAb,EAAA,IAAA,EAAA,EAEA,IAAAc,EAAA,0BAICC,EAAA,OAAA,MAAA,uBASA,GAAA,CAAAA,EAAA,sBAQCA,EAAA,QAAA,IAAA,4DAcD,GAJAF,EAAA,MAAA,GACAG,EAAA,MAAAD,EAAA,KAAA,EACAF,EAAA,MAAA,GAEAG,EAAA,OAAA,6EAKC,qEAID,GAAAC,IAAA,GAAA,CACC,QAAA,KAAA,YAAAA,CAAA,mBAAA,EAEA,mCAOM,cAOP,GAAA,CAAAF,EAAA,OAEAA,EAAA,OAAA,OAAA,EACAA,EAAA,OAAA,OAAAD,EAEA,MAAAE,EAAA,MAAAE,EAAA,EACAF,IAEAG,EAAAH,EAAA,WAEAJ,EAAA,MAAAI,EAAA,OAAkB,cAalB,GANA,CAAAD,GAGA,CAAAI,GAGAN,EAAA,MAAA,OAEAE,EAAA,OAAA,OAAAI,EACAJ,EAAA,OAAA,OAAAD,EAEA,MAAAE,EAAA,MAAAE,EAAA,EACAF,IAEAG,EAAAH,EAAA,WAEAJ,EAAA,MAAAA,EAAA,MAAA,OAAAI,EAAA,MAAA,EAA2C,4BA+B5C,MAAA,CAAO,MAAAJ,EACN,UAAAC,EACA,WAAAO,EACA,gCAnBAL,IAEAM,EAAA,OAAAC,0CAWA,CAOA,6uCCtIF,MAAA3B,EAAAC,+BAcAyB,EAAArB,EAAA,IAAA,EAAA,oBAIO,EAMPuB,EAAAvB,EAAA,IAAA,IAAA,eAMC,OAAAQ,EAAAe,EAAA,QAAA,YAAAf,EAAA,KAAuB,+CAKvBR,EAAA,wBACa,IAAA,CAEXO,EAAA,MAAAZ,EAAA,YAAA,CAAA,EAAA,CAAA,GAAA,KAAA,KAAA,EAAA,GACD,CAAA,UAAA,EAAA,CACkB,EAIpB,MAAA6B,EAAAC,EAAA9B,EAAA,WAAAA,EAAA,UAAAA,EAAA,QAAA,EAKA+B,EAAA1B,EAAA,SAAA,IAAA,CACC,MAAAY,EAAA,CAAA,0CAGCA,EAAA,KAAAe,CAAA,EAGDhC,EAAA,MAAA,QAAAc,GAAAG,EAAA,KAAA,CAAA,GAAAH,CAAA,CAAA,CAAA,GAEO,CAAA,+IAgBNF,EAAA,MAAA,KAAAqB,GAAAA,EAAA,KAAAnB,EAAA,EAAA,oBASFoB,EAAA7B,EAAA,SAAA,IAAA,+BAEC8B,EAAAC,EAAA,qBAAAC,CAAA,EAEA,IAAApB,EAAA,CAAA,0HAWGA,EAAA,QAAAH,CAAA,EAEAG,EAAA,KAAAH,CAAA,EAEF,CAAA,2BAKDd,EAAA,sBAAA0B,EAAA,QAAA,CAAAT,EAAA,QAAAA,EAAA,CAAA,EAAA,KAAA,YAAA,IAAAoB,oBAMM,KAAAX,EAAA,KACa,CAAA,EAInB1B,EAAA,cACCiB,EAAAA,EAAA,OAAAH,GAAA,CAAAwB,EAAAxB,CAAA,CAAA,IAGM,CAAA,EAQRyB,EAAA,MAAAzB,GAAA,SACC,GAAAd,EAAA,YAAA,CAGC,4BAAAsC,EAAAxB,CAAA,EACC,2CAKDF,EAAA,MAAA4B,EAEAC,EAAA,KAAA,MAAA,UACC5B,EAAA6B,EAAA,IAAA,MAAA7B,EAAA,qCAGCA,EAAA6B,EAAA,IAAA,MAAA7B,EAAA,kBACA8B,GAAA5B,GAAAC,EAAA0B,EAAA,IAAA,YAAA1B,EAAA,gBAAA,YAAAD,EAAA,cAAA,WAAA,MAAA4B,EAAA,QAGAjB,EAAA,QACCQ,EAAA,MAAA,SACCR,EAAA,MAAA,GACAG,EAAA,MAAA,MAAA,CAAA,GAEF,CAAA,CAEF,MAGAH,EAAA,QACCA,EAAA,MAAA,GACAG,EAAA,MAAA,MAAA,CAAA,GAGD,KAAA,UAAAf,CAAA,IAAA,KAAA,UAAAF,EAAA,KAAA,qBAIAI,EAAA0B,EAAA,IAAA,MAAA1B,EAAA,OACD,qCASC,MAAA4B,2CAAA,GAAAb,EAAA,MAAA,OACAnB,EAAA,MAAA,CAAA,GAAAmB,EAAA,MAAAa,CAAA,CAAA,EACD,EAODC,EAAA,MAAAC,GAAA,0BAEElC,EAAA,MAAAA,EAAA,MAAA,OAAAE,GAAAA,EAAA,KAAAgC,CAAA,yBAGCjC,EAAA6B,EAAA,IAAA,MAAA7B,EAAA,gBAA2B,CAAA,EAE7B,EAGDkC,EAAA1C,EAAA,IAAA,EAAA,EAEAL,EAAA,aACCK,EAAA,MAAA0C,EAAA,IAAA,CACCA,EAAA,yCAGA,CAAA,EAID1C,EAAA,MAAAqB,EAAA,IAAAG,EAAA,qBAAAH,EAAA,KAAA,CAAA,GAGD,MAAAsB,EAAAC,GAAA,CACC,MAAAC,EAAAD,EAAA,OAEAC,EAAA,WAAAA,EAAA,aAAAA,EAAA,cAAA,IACCrB,EAAA,WAAA,CACD,6gFC5NMsB,GAAAC,EACAC,GAAAC,EACAC,GAAAC,EACAC,GAAAC,EACAC,GAAAC,EAAA"}
1
+ {"version":3,"file":"formsExt.amd.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 { computed, ref } from 'vue';\r\nimport Button from '@/components/forms/button/button.vue';\r\nimport type { Emits, Props } 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=\"{ disabled: !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 { Emits, Props } 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-layout-middle);\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-layout-front-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/* 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-shading-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-1);\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-line-negative-1);\r\n}\r\n</style>\r\n","import type { Ref } from 'vue';\r\nimport { ref } from 'vue';\r\nimport { debounce } from '@/core/utils/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};\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","isChanged","vue","localValue","cancelBtnText","submit","value","intermediateValue","elRef","model","_a","item","_c","_b","items","isLoading","_searchText","apiRequest","res","indexWithError","callAPIRequest","_nextOffset","loadAppend","searchText","minLength","popupRef","API","useAPI","localItems","itemAll","itemSelected","itemsForShow","searchStringInvertKeyboard","utils_keyboard","searchString","isSelected","selectItem","newModel","forms","getPopup","_d","nextIndex","deleteItemById","id","isOpened","onScrollContentList","e","el","TopEditArea","EditArea","TopEditInput","EditInput","TopRadioGroup","RadioGroup","TopSelector2","Selector2","TopMenu","menu"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import Q from "../core/core.js";
2
2
  import { defineComponent as L, ref as V, computed as N, resolveDirective as x, openBlock as c, createElementBlock as v, normalizeClass as I, toDisplayString as $, createCommentVNode as T, createElementVNode as E, withDirectives as Y, createVNode as F, withKeys as O, withModifiers as S, createBlock as C, withCtx as w, createTextVNode as B, watch as k, toRef as q, mergeProps as X, mergeModels as D, useModel as j, Fragment as P, renderList as H, vModelRadio as ee, unref as M, renderSlot as te } from "vue";
3
- import { s as oe, T as z, _ as K, r as le, q as ae, C as se } from "../.chunks/forms-D9r2-H5Y.es.js";
3
+ import { w as oe, T as z, _ as K, v as le, r as ae, C as se } from "../.chunks/forms-CHiMZ8vg.es.js";
4
4
  import { invertKeyboardLayout as re } from "../utils/keyboard.js";
5
5
  import { TopPopup as ne, TopPopupWidgetInput as ie, TopPopupListItem as R } from "../popup/popup.js";
6
- import { M as ue } from "../.chunks/menu-B0Ul7Kbg.es.js";
7
- const Z = ["../assets/formsExt.css"].map((s) => import.meta.resolve(s));
6
+ import { M as ue } from "../.chunks/menu-CHeV29rC.es.js";
7
+ const Z = ["../assets/formsExt.css"].map((r) => import.meta.resolve(r));
8
8
  Q.insertCSSLinkToPage(Z, !0);
9
9
  const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
10
10
  __name: "editArea",
@@ -29,11 +29,11 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
29
29
  hint: {}
30
30
  },
31
31
  emits: ["submit", "close", "clickOnTitle"],
32
- setup(s, { emit: d }) {
33
- 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) => {
32
+ setup(r, { emit: d }) {
33
+ const e = r, a = d, m = V(e.defaultValue), f = V(e.isFocused), n = N(() => m.value !== e.defaultValue), p = N(() => e.attachToKeyboard ? "" : e.forceShowCloseBtn && !n.value ? e.closeText : e.cancelText), i = (u) => {
34
34
  a("submit", u), m.value = e.defaultValue;
35
35
  }, y = () => {
36
- if (e.forceShowCloseBtn && !r.value) {
36
+ if (e.forceShowCloseBtn && !n.value) {
37
37
  a("close");
38
38
  return;
39
39
  }
@@ -84,7 +84,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
84
84
  [g, { disabled: !f.value }]
85
85
  ]),
86
86
  E("div", de, [
87
- r.value || u.forceShowCloseBtn ? (c(), C(z, {
87
+ n.value || u.forceShowCloseBtn ? (c(), C(z, {
88
88
  key: 0,
89
89
  class: "top-editArea_button",
90
90
  color: "theme",
@@ -97,7 +97,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
97
97
  ]),
98
98
  _: 1
99
99
  }, 8, ["icon"])) : T("", !0),
100
- r.value ? (c(), C(z, {
100
+ n.value ? (c(), C(z, {
101
101
  key: 1,
102
102
  class: "top-editArea_button",
103
103
  icon: u.attachToKeyboard ? "" : "",
@@ -135,26 +135,26 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
135
135
  button: {}
136
136
  },
137
137
  emits: ["update:modelValue"],
138
- setup(s, { emit: d }) {
139
- const e = s, a = V(e.modelValue);
138
+ setup(r, { emit: d }) {
139
+ const e = r, a = V(e.modelValue);
140
140
  k(q(e.modelValue), () => {
141
141
  a.value = e.modelValue;
142
142
  });
143
143
  const m = d, f = () => {
144
144
  m("update:modelValue", a.value);
145
145
  };
146
- return (r, p) => (c(), v("div", ve, [
147
- F(le, X(r.input, {
148
- onKeydownCapture: p[0] || (p[0] = O(S((i) => a.value = r.modelValue, ["stop"]), ["esc"])),
146
+ return (n, p) => (c(), v("div", ve, [
147
+ F(le, X(n.input, {
148
+ onKeydownCapture: p[0] || (p[0] = O(S((i) => a.value = n.modelValue, ["stop"]), ["esc"])),
149
149
  onKeydown: O(S(f, ["stop"]), ["enter"]),
150
150
  modelValue: a.value,
151
151
  "onUpdate:modelValue": p[1] || (p[1] = (i) => a.value = i)
152
152
  }), null, 16, ["onKeydown", "modelValue"]),
153
- a.value !== r.modelValue ? (c(), C(z, X({
153
+ a.value !== n.modelValue ? (c(), C(z, X({
154
154
  key: 0,
155
155
  icon: "",
156
156
  styling: "soft"
157
- }, r.button, { onClick: f }), null, 16)) : T("", !0)
157
+ }, n.button, { onClick: f }), null, 16)) : T("", !0)
158
158
  ]));
159
159
  }
160
160
  }), he = {
@@ -180,24 +180,24 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
180
180
  modelModifiers: {}
181
181
  }),
182
182
  emits: /* @__PURE__ */ D(["update:modelValue"], ["update:modelValue"]),
183
- setup(s, { emit: d }) {
184
- const e = j(s, "modelValue"), a = s, m = V(null);
183
+ setup(r, { emit: d }) {
184
+ const e = j(r, "modelValue"), a = r, m = V(null);
185
185
  k(e, () => {
186
- var r, p, i, y, b;
187
- (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();
186
+ var n, p, i, y, b;
187
+ (n = a.radiosProps) != null && n.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();
188
188
  }, { immediate: !0 });
189
189
  const f = "radioGroup-" + Math.random();
190
- return (r, p) => (c(), v("div", {
190
+ return (n, p) => (c(), v("div", {
191
191
  ref_key: "elRef",
192
192
  ref: m,
193
193
  class: I({
194
194
  "top-radioGroup": !0,
195
195
  "top-scrollBarXHidding": !0,
196
- ["top-size_" + r.size]: !!r.size,
197
- "top-error": r.isError
196
+ ["top-size_" + n.size]: !!n.size,
197
+ "top-error": n.isError
198
198
  })
199
199
  }, [
200
- (c(!0), v(P, null, H(r.radiosProps, (i) => (c(), v("label", {
200
+ (c(!0), v(P, null, H(n.radiosProps, (i) => (c(), v("label", {
201
201
  class: I({
202
202
  "top-radioGroup_item-selected": i.value === e.value,
203
203
  "top-radioGroup_item": !0,
@@ -208,7 +208,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
208
208
  onClick: (y) => e.value = i.value
209
209
  }, [
210
210
  B($(i.title) + " ", 1),
211
- r.showIndicator ? (c(), v("span", Te)) : T("", !0),
211
+ n.showIndicator ? (c(), v("span", Te)) : T("", !0),
212
212
  Y(E("input", {
213
213
  "onUpdate:modelValue": p[0] || (p[0] = (y) => e.value = y),
214
214
  name: f,
@@ -234,16 +234,16 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
234
234
  "top-disabled": "top-disabled"
235
235
  }, Ce = {
236
236
  $style: we
237
- }, Ie = /* @__PURE__ */ K(_e, [["__cssModules", Ce]]), $e = (s, d, e) => {
237
+ }, Ie = /* @__PURE__ */ K(_e, [["__cssModules", Ce]]), $e = (r, d, e) => {
238
238
  const a = V([]), m = V(!1);
239
- let f = "", r;
240
- s && !s.params.limit && (s.params.limit = 100);
239
+ let f = "", n;
240
+ r && !r.params.limit && (r.params.limit = 100);
241
241
  const p = async () => {
242
- if (!s) return;
242
+ if (!r) return;
243
243
  let o, g;
244
- if (e && (s.cache ??= /* @__PURE__ */ new Map(), g = JSON.stringify(s.params), o = s.cache.get(g), o))
244
+ if (e && (r.cache ??= /* @__PURE__ */ new Map(), g = JSON.stringify(r.params), o = r.cache.get(g), o))
245
245
  return o;
246
- if (m.value = !0, o = await s.call(), m.value = !1, o.errors) return;
246
+ if (m.value = !0, o = await r.call(), m.value = !1, o.errors) return;
247
247
  if (!Array.isArray(o.result)) {
248
248
  console.warn("В result ожидался массив");
249
249
  return;
@@ -253,24 +253,24 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
253
253
  console.warn(`В result[${h}] нет id или name`);
254
254
  return;
255
255
  }
256
- return e && s.cache.set(g, o), o;
256
+ return e && r.cache.set(g, o), o;
257
257
  }, i = async () => {
258
- if (!s) return;
259
- s.params.offset = 0, s.params.search = f;
258
+ if (!r) return;
259
+ r.params.offset = 0, r.params.search = f;
260
260
  const o = await p();
261
- o && (r = o.nextOffset, a.value = o.result);
261
+ o && (n = o.nextOffset, a.value = o.result);
262
262
  }, y = async () => {
263
- if (!s || !r || m.value) return;
264
- s.params.offset = r, s.params.search = f;
263
+ if (!r || !n || m.value) return;
264
+ r.params.offset = n, r.params.search = f;
265
265
  const o = await p();
266
- o && (r = o.nextOffset, a.value = a.value.concat(o.result));
266
+ o && (n = o.nextOffset, a.value = a.value.concat(o.result));
267
267
  }, b = ae(() => i(), 200);
268
268
  return {
269
269
  items: a,
270
270
  isLoading: m,
271
271
  loadAppend: y,
272
272
  setSearchTextAndLoad: (o, g = !0) => {
273
- s && (o.length < d || o === f && a.value.length || (f = o, g ? b() : i()));
273
+ r && (o.length < d || o === f && a.value.length || (f = o, g ? b() : i()));
274
274
  }
275
275
  };
276
276
  }, Se = { class: "top-selector2_itemMulti top-ellipsis" }, Be = /* @__PURE__ */ L({
@@ -280,7 +280,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
280
280
  name: {}
281
281
  },
282
282
  emits: ["delete"],
283
- setup(s) {
283
+ setup(r) {
284
284
  return (d, e) => (c(), v("div", Se, [
285
285
  B($(d.name) + " ", 1),
286
286
  E("span", {
@@ -327,11 +327,11 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
327
327
  modelModifiers: {}
328
328
  }),
329
329
  emits: ["update:modelValue"],
330
- setup(s) {
331
- const d = s, e = j(s, "modelValue"), a = V(""), m = {
330
+ setup(r) {
331
+ const d = r, e = j(r, "modelValue"), a = V(""), m = {
332
332
  id: 0,
333
333
  name: "Все"
334
- }, f = V(null), r = () => {
334
+ }, f = V(null), n = () => {
335
335
  var t;
336
336
  return (t = f.value) == null ? void 0 : t.popup;
337
337
  };
@@ -344,53 +344,53 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
344
344
  );
345
345
  const p = $e(d.apiRequest, d.minLength, d.useCache), i = N(() => {
346
346
  const t = [];
347
- return !d.multiselect && d.appendAllValue && t.push(m), d.items.forEach((n) => t.push({ ...n })), t;
348
- }), 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(() => {
349
- const t = a.value.toLowerCase(), n = re(t);
347
+ return !d.multiselect && d.appendAllValue && t.push(m), d.items.forEach((s) => t.push({ ...s })), t;
348
+ }), y = (t, s = !0) => s && 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(() => {
349
+ const t = a.value.toLowerCase(), s = re(t);
350
350
  let l = [];
351
351
  return i.value.forEach((A) => {
352
352
  const _ = A.name.toLowerCase();
353
- (A.id === Number(t) || _.includes(t) || _.includes(n)) && (_ === t || _ === n ? l.unshift(A) : l.push(A));
353
+ (A.id === Number(t) || _.includes(t) || _.includes(s)) && (_ === t || _ === s ? l.unshift(A) : l.push(A));
354
354
  }), l.push(...p.items.value), d.appendSearchToResult && a.value && (!l.length || l[0].name.toLowerCase() !== t) && l.push({
355
355
  id: null,
356
356
  name: a.value
357
357
  }), d.multiselect && (l = l.filter((A) => !y(A))), l;
358
358
  }), u = async (t) => {
359
- var n, l;
359
+ var s, l;
360
360
  if (d.multiselect) {
361
361
  if (!Array.isArray(e.value) || y(t))
362
362
  return;
363
363
  const A = [...e.value];
364
- A.push({ ...t }), e.value = A, se.state.isMobile ? (n = r()) == null || n.close() : setTimeout(() => {
364
+ A.push({ ...t }), e.value = A, se.state.isMobile ? (s = n()) == null || s.close() : setTimeout(() => {
365
365
  var _, U, W, J;
366
- (_ = 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 = []));
366
+ (_ = n()) == null || _.recalcPosition(), (J = (W = (U = n()) == null ? void 0 : U.elPopupWidget) == null ? void 0 : W.querySelector("input")) == null || J.focus(), a.value && (b.value.length || (a.value = "", p.items.value = []));
367
367
  });
368
368
  } else
369
- a.value && (a.value = "", p.items.value = []), JSON.stringify(t) !== JSON.stringify(e.value) && (e.value = { ...t }), (l = r()) == null || l.close();
369
+ a.value && (a.value = "", p.items.value = []), JSON.stringify(t) !== JSON.stringify(e.value) && (e.value = { ...t }), (l = n()) == null || l.close();
370
370
  }, o = () => {
371
371
  if (!Array.isArray(e.value)) {
372
- const n = (i.value.findIndex((l) => l.id === e.value.id) + 1) % i.value.length;
373
- e.value = { ...i.value[n] };
372
+ const s = (i.value.findIndex((l) => l.id === e.value.id) + 1) % i.value.length;
373
+ e.value = { ...i.value[s] };
374
374
  }
375
375
  }, g = async (t) => {
376
- Array.isArray(e.value) && (e.value = e.value.filter((n) => n.id !== t), setTimeout(() => {
377
- var n;
378
- (n = r()) == null || n.recalcPosition();
376
+ Array.isArray(e.value) && (e.value = e.value.filter((s) => s.id !== t), setTimeout(() => {
377
+ var s;
378
+ (s = n()) == null || s.recalcPosition();
379
379
  }));
380
380
  }, h = V(!1);
381
381
  d.apiRequest && (k(h, () => {
382
382
  h.value && p.setSearchTextAndLoad(a.value, !1);
383
383
  }), k(a, () => p.setSearchTextAndLoad(a.value)));
384
384
  const G = (t) => {
385
- const n = t.target;
386
- n.scrollTop / (n.scrollHeight - n.offsetHeight) > 0.8 && p.loadAppend();
385
+ const s = t.target;
386
+ s.scrollTop / (s.scrollHeight - s.offsetHeight) > 0.8 && p.loadAppend();
387
387
  };
388
- return (t, n) => (c(), C(M(ne), {
388
+ return (t, s) => (c(), C(M(ne), {
389
389
  ref_key: "popupRef",
390
390
  ref: f,
391
- onOpen: n[1] || (n[1] = (l) => h.value = !0),
392
- onClose: n[2] || (n[2] = (l) => h.value = !1),
393
- onScrollContentList: n[3] || (n[3] = (l) => t.apiRequest ? G(l) : void 0),
391
+ onOpen: s[1] || (s[1] = (l) => h.value = !0),
392
+ onClose: s[2] || (s[2] = (l) => h.value = !1),
393
+ onScrollContentList: s[3] || (s[3] = (l) => t.apiRequest ? G(l) : void 0),
394
394
  notch: !1,
395
395
  transitionDuration: 0
396
396
  }, {
@@ -425,7 +425,7 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
425
425
  title: "Поиск",
426
426
  icon: "",
427
427
  modelValue: a.value,
428
- "onUpdate:modelValue": n[0] || (n[0] = (l) => a.value = l),
428
+ "onUpdate:modelValue": s[0] || (s[0] = (l) => a.value = l),
429
429
  isLoading: M(p).isLoading.value,
430
430
  placeholder: !Array.isArray(e.value) && !t.multiselect && t.showSelectedInInput ? e.value.name : t.placeholder
431
431
  }, null, 8, ["modelValue", "isLoading", "placeholder"])
@@ -452,9 +452,9 @@ const de = { class: "top-editArea_footer" }, pe = /* @__PURE__ */ L({
452
452
  key: 0,
453
453
  type: "regular"
454
454
  }, {
455
- default: w(() => [
455
+ default: w(() => s[4] || (s[4] = [
456
456
  B(" Нет результатов ")
457
- ]),
457
+ ])),
458
458
  _: 1
459
459
  }))
460
460
  ]),