@topvisor/ui 1.3.5-4 → 1.3.5-5.0

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 (126) hide show
  1. package/.chunks/{core-DF7fuQev.es.js → core-CaWxDXrZ.es.js} +4 -4
  2. package/.chunks/{core-DF7fuQev.es.js.map → core-CaWxDXrZ.es.js.map} +1 -1
  3. package/.chunks/{core-BS_ygt0h.amd.js → core-DmO1i1Ua.amd.js} +2 -2
  4. package/.chunks/{core-BS_ygt0h.amd.js.map → core-DmO1i1Ua.amd.js.map} +1 -1
  5. package/.chunks/{datepicker-BYLW8X5k.amd.js → datepicker-CPrHVH4x.amd.js} +2 -2
  6. package/.chunks/{datepicker-BYLW8X5k.amd.js.map → datepicker-CPrHVH4x.amd.js.map} +1 -1
  7. package/.chunks/{datepicker-BVIBaChw.es.js → datepicker-J8Zg9mKt.es.js} +2 -2
  8. package/.chunks/{datepicker-BVIBaChw.es.js.map → datepicker-J8Zg9mKt.es.js.map} +1 -1
  9. package/.chunks/{dialog_selectorRegions-D5DOxBQO.es.js → dialog_selectorRegions-DoEjgXtb.es.js} +4 -4
  10. package/.chunks/{dialog_selectorRegions-D5DOxBQO.es.js.map → dialog_selectorRegions-DoEjgXtb.es.js.map} +1 -1
  11. package/.chunks/{dialog_selectorRegions-CaR2-Qo2.amd.js → dialog_selectorRegions-DzufTzj9.amd.js} +2 -2
  12. package/.chunks/{dialog_selectorRegions-CaR2-Qo2.amd.js.map → dialog_selectorRegions-DzufTzj9.amd.js.map} +1 -1
  13. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-B5rYBKgA.amd.js → dialogs.vue_vue_type_script_setup_true_lang-8KsNy0Bd.amd.js} +2 -2
  14. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-B5rYBKgA.amd.js.map → dialogs.vue_vue_type_script_setup_true_lang-8KsNy0Bd.amd.js.map} +1 -1
  15. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-CPByl0SB.es.js → dialogs.vue_vue_type_script_setup_true_lang-DvkvzHEY.es.js} +2 -2
  16. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-CPByl0SB.es.js.map → dialogs.vue_vue_type_script_setup_true_lang-DvkvzHEY.es.js.map} +1 -1
  17. package/.chunks/{forms-BrdvrjiZ.es.js → forms-COXAfg9G.es.js} +53 -51
  18. package/.chunks/{forms-BrdvrjiZ.es.js.map → forms-COXAfg9G.es.js.map} +1 -1
  19. package/.chunks/{forms-CzUjrBXG.amd.js → forms-DXX5M4DO.amd.js} +3 -3
  20. package/.chunks/{forms-CzUjrBXG.amd.js.map → forms-DXX5M4DO.amd.js.map} +1 -1
  21. package/.chunks/listItem.vue_vue_type_script_setup_true_lang--W1RouXP.es.js +199 -0
  22. package/.chunks/listItem.vue_vue_type_script_setup_true_lang--W1RouXP.es.js.map +1 -0
  23. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DzV225TL.amd.js +2 -0
  24. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DzV225TL.amd.js.map +1 -0
  25. package/.chunks/{menu.vue_vue_type_style_index_0_lang-BNr8VcFM.es.js → menu.vue_vue_type_style_index_0_lang-BiyxTfdE.es.js} +2 -2
  26. package/.chunks/{menu.vue_vue_type_style_index_0_lang-BNr8VcFM.es.js.map → menu.vue_vue_type_style_index_0_lang-BiyxTfdE.es.js.map} +1 -1
  27. package/.chunks/{menu.vue_vue_type_style_index_0_lang-jnHbXDIR.amd.js → menu.vue_vue_type_style_index_0_lang-D3OAqOqX.amd.js} +2 -2
  28. package/.chunks/{menu.vue_vue_type_style_index_0_lang-jnHbXDIR.amd.js.map → menu.vue_vue_type_style_index_0_lang-D3OAqOqX.amd.js.map} +1 -1
  29. package/.chunks/{notice-CzWMWg_D.amd.js → notice-CSGn_jTM.amd.js} +2 -2
  30. package/.chunks/{notice-CzWMWg_D.amd.js.map → notice-CSGn_jTM.amd.js.map} +1 -1
  31. package/.chunks/{notice-BPgkjMG1.es.js → notice-P7CXfEuX.es.js} +2 -2
  32. package/.chunks/{notice-BPgkjMG1.es.js.map → notice-P7CXfEuX.es.js.map} +1 -1
  33. package/.chunks/opener.vue_vue_type_script_setup_true_lang-DRzrTv7Q.es.js +36 -0
  34. package/.chunks/opener.vue_vue_type_script_setup_true_lang-DRzrTv7Q.es.js.map +1 -0
  35. package/.chunks/opener.vue_vue_type_script_setup_true_lang-gNZhYkDf.amd.js +2 -0
  36. package/.chunks/opener.vue_vue_type_script_setup_true_lang-gNZhYkDf.amd.js.map +1 -0
  37. package/.chunks/{page.vue_vue_type_script_setup_true_lang-XMwkQHNU.es.js → page.vue_vue_type_script_setup_true_lang-D9m45rLs.es.js} +4 -4
  38. package/.chunks/{page.vue_vue_type_script_setup_true_lang-XMwkQHNU.es.js.map → page.vue_vue_type_script_setup_true_lang-D9m45rLs.es.js.map} +1 -1
  39. package/.chunks/{page.vue_vue_type_script_setup_true_lang-C-BJRiFc.amd.js → page.vue_vue_type_script_setup_true_lang-DHPOnLj5.amd.js} +2 -2
  40. package/.chunks/{page.vue_vue_type_script_setup_true_lang-C-BJRiFc.amd.js.map → page.vue_vue_type_script_setup_true_lang-DHPOnLj5.amd.js.map} +1 -1
  41. package/.chunks/popup-CF4k7j3U.amd.js +2 -0
  42. package/.chunks/popup-CF4k7j3U.amd.js.map +1 -0
  43. package/.chunks/{popup-do4HUI7u.es.js → popup-G7FYKscC.es.js} +116 -90
  44. package/.chunks/popup-G7FYKscC.es.js.map +1 -0
  45. package/.chunks/{utils-B6aJagiK.es.js → utils-CWm0zAtM.es.js} +3 -3
  46. package/.chunks/{utils-B6aJagiK.es.js.map → utils-CWm0zAtM.es.js.map} +1 -1
  47. package/.chunks/{utils-BgVG2kmp.amd.js → utils-D505nRsu.amd.js} +2 -2
  48. package/.chunks/{utils-BgVG2kmp.amd.js.map → utils-D505nRsu.amd.js.map} +1 -1
  49. package/.chunks/{utils-BqT8hS8L.amd.js → utils-DmxcQpWA.amd.js} +2 -2
  50. package/.chunks/{utils-BqT8hS8L.amd.js.map → utils-DmxcQpWA.amd.js.map} +1 -1
  51. package/.chunks/{utils-DyhMNhnz.es.js → utils-Rbz9mxy6.es.js} +2 -2
  52. package/.chunks/{utils-DyhMNhnz.es.js.map → utils-Rbz9mxy6.es.js.map} +1 -1
  53. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-CVsiIZz5.amd.js → widgetInput.vue_vue_type_script_setup_true_lang-BU-FdL6d.amd.js} +2 -2
  54. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-CVsiIZz5.amd.js.map → widgetInput.vue_vue_type_script_setup_true_lang-BU-FdL6d.amd.js.map} +1 -1
  55. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-Bo064qPK.es.js → widgetInput.vue_vue_type_script_setup_true_lang-TVpBXc9F.es.js} +2 -2
  56. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-Bo064qPK.es.js.map → widgetInput.vue_vue_type_script_setup_true_lang-TVpBXc9F.es.js.map} +1 -1
  57. package/assets/forms.css +1 -1
  58. package/assets/listItem.css +1 -1
  59. package/charts/charts.amd.js +1 -1
  60. package/charts/charts.js +1 -1
  61. package/core/app.amd.js +1 -1
  62. package/core/app.js +5 -5
  63. package/dialog/dialog.amd.js +1 -1
  64. package/dialog/dialog.js +2 -2
  65. package/forms/forms.amd.js +1 -1
  66. package/forms/forms.js +1 -1
  67. package/formsExt/formsExt.amd.js +1 -1
  68. package/formsExt/formsExt.amd.js.map +1 -1
  69. package/formsExt/formsExt.js +387 -388
  70. package/formsExt/formsExt.js.map +1 -1
  71. package/layout/layout.amd.js +1 -1
  72. package/layout/layout.js +1 -1
  73. package/package.json +1 -1
  74. package/popup/popup.amd.js +1 -1
  75. package/popup/popup.amd.js.map +1 -1
  76. package/popup/popup.js +39 -34
  77. package/popup/popup.js.map +1 -1
  78. package/popup/worker.amd.js +1 -1
  79. package/popup/worker.amd.js.map +1 -1
  80. package/popup/worker.js +24 -20
  81. package/popup/worker.js.map +1 -1
  82. package/project/project.amd.js +1 -1
  83. package/project/project.amd.js.map +1 -1
  84. package/project/project.js +26 -25
  85. package/project/project.js.map +1 -1
  86. package/src/api/api/types/ext.d.ts +2 -2
  87. package/src/components/forms/button/types.d.ts +6 -0
  88. package/src/components/forms/input/input.vue.d.ts +1 -1
  89. package/src/components/forms/input/types.d.ts +1 -1
  90. package/src/components/forms/inputDate/inputDate.vue.d.ts +1 -1
  91. package/src/components/formsExt/libs/optionGroup/types.d.ts +1 -1
  92. package/src/components/formsExt/selector2/composables/useAPI.d.ts +3 -2
  93. package/src/components/formsExt/selector2/composables/useMenu.d.ts +1 -1
  94. package/src/components/formsExt/selector2/selector2.vue.d.ts +2 -0
  95. package/src/components/formsExt/selector2/types.d.ts +18 -1
  96. package/src/components/formsExt/selector2/utils.d.ts +1 -0
  97. package/src/components/popup/lib/popup.d.ts +14 -2
  98. package/src/components/popup/lib/worker.d.ts +1 -1
  99. package/src/components/popup/popup/opener/opener.vue.d.ts +17 -0
  100. package/src/components/popup/popup/opener/types.d.ts +51 -0
  101. package/src/components/popup/popup/opener.vue.d.ts +1 -1
  102. package/src/components/popup/popup/types.d.ts +1 -45
  103. package/src/components/project/tagSelector/utils/el.d.ts +1 -1
  104. package/tabsView/tabsView.amd.js +1 -1
  105. package/tabsView/tabsView.js +2 -2
  106. package/utils/clipboard.amd.js +1 -1
  107. package/utils/clipboard.js +1 -1
  108. package/utils/date.amd.js +1 -1
  109. package/utils/date.js +1 -1
  110. package/utils/device.amd.js +1 -1
  111. package/utils/device.js +1 -1
  112. package/utils/lodash.amd.js +1 -1
  113. package/utils/lodash.js +1 -1
  114. package/utils/price.amd.js +1 -1
  115. package/utils/price.js +1 -1
  116. package/utils/searchers.amd.js +1 -1
  117. package/utils/searchers.js +3 -3
  118. package/utils/string.amd.js +1 -1
  119. package/utils/string.js +1 -1
  120. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DZ6ExJKC.es.js +0 -192
  121. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DZ6ExJKC.es.js.map +0 -1
  122. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-_sniT1lq.amd.js +0 -2
  123. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-_sniT1lq.amd.js.map +0 -1
  124. package/.chunks/popup-UOJ-t8-v.amd.js +0 -2
  125. package/.chunks/popup-UOJ-t8-v.amd.js.map +0 -1
  126. package/.chunks/popup-do4HUI7u.es.js.map +0 -1
@@ -1,2 +1,2 @@
1
- define(["require","exports","vue","../.chunks/forms-CzUjrBXG.amd","../.chunks/listItem.vue_vue_type_script_setup_true_lang-_sniT1lq.amd","../.chunks/widgetInput.vue_vue_type_script_setup_true_lang-CVsiIZz5.amd","../.chunks/popupHint.vue_vue_type_style_index_0_lang-Cce9ZdtW.amd","../utils/keyboard.amd","../.chunks/menu.vue_vue_type_style_index_0_lang-jnHbXDIR.amd","../require/css.amd!../assets/formsExt.css","../require/css.amd!../assets/popupHint.css"],(function(te,w,e,C,E,_,oe,I,S){"use strict";if(typeof e>"u")var e=window.Vue;const N={class:"top-editArea_footer"},M=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:{},styling:{},rows:{},minHeight:{},expandable:{type:Boolean,default:!0},disabled:{type:Boolean},readonly:{type:Boolean},isError:{type:Boolean},hint:{},maxLength:{}},emits:["submit","close","clickOnTitle"],setup(r,{emit:t}){const l=r,a=t,c=e.ref(l.defaultValue),s=e.ref(l.isFocused),n=e.computed(()=>c.value!==l.defaultValue),u=d=>{a("submit",d),c.value=l.defaultValue},p=()=>{if(l.forceShowCloseBtn&&!n.value){a("close");return}c.value=l.defaultValue},k=()=>{l.attachToKeyboard&&a("clickOnTitle")};return(d,f)=>(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:f[0]||(f[0]=B=>k())},e.toDisplayString(d.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass({"top-editArea_form":!0,"top-forms-focusable":!0,"top-as-input":!0,"top-error":d.isError,"top-focus":s.value})},[e.createVNode(C._sfc_main$11,{modelValue:c.value,"onUpdate:modelValue":f[1]||(f[1]=B=>c.value=B),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:f[2]||(f[2]=()=>s.value=!0),onBlur:f[3]||(f[3]=()=>s.value=!1),onKeyup:[e.withKeys(p,["esc"]),f[4]||(f[4]=e.withKeys(e.withModifiers(B=>u(c.value),["ctrl"]),["enter"]))]},null,8,["modelValue","name","placeholder","rows","minHeight","expandable","disabled","readonly","isError","hint"]),e.createElementVNode("div",N,[n.value||d.forceShowCloseBtn?(e.openBlock(),e.createBlock(C._sfc_main$1,{key:0,icon:d.$core.state.isMobile?"":"",class:"top-editArea_button",color:"theme",styling:"soft",onClick:p},e.createSlots({_:2},[d.$core.state.isMobile?void 0:{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.cancelText),1)]),key:"0"}]),1032,["icon"])):e.createCommentVNode("",!0),n.value?(e.openBlock(),e.createBlock(C._sfc_main$1,{key:1,class:"top-editArea_button",icon:d.$core.state.isMobile?"":"",onClick:f[5]||(f[5]=B=>u(c.value))},e.createSlots({_:2},[d.$core.state.isMobile?void 0:{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.submitText),1)]),key:"0"}]),1032,["icon"])):e.createCommentVNode("",!0)])],2)],2))}}),L={class:"top-editInput"},z=e.defineComponent({__name:"editInput",props:{modelValue:{},input:{},button:{}},emits:["update:modelValue"],setup(r,{emit:t}){const l=r,a=e.ref(l.modelValue);e.watch(e.toRef(l.modelValue),()=>{a.value=l.modelValue});const c=t,s=()=>{c("update:modelValue",a.value)};return(n,u)=>(e.openBlock(),e.createElementBlock("div",L,[e.createVNode(C._sfc_main,e.mergeProps(n.input,{onKeydownCapture:u[0]||(u[0]=e.withKeys(e.withModifiers(p=>a.value=n.modelValue,["stop"]),["esc"])),onKeydown:e.withKeys(e.withModifiers(s,["stop"]),["enter"]),modelValue:a.value,"onUpdate:modelValue":u[1]||(u[1]=p=>a.value=p)}),null,16,["onKeydown","modelValue"]),a.value!==n.modelValue?(e.openBlock(),e.createBlock(C._sfc_main$1,e.mergeProps({key:0,icon:"",styling:"soft"},n.button,{onClick:s}),null,16)):e.createCommentVNode("",!0)]))}}),$=e.defineComponent({__name:"optionGroup",props:e.mergeModels({modelValue:{},items:{},size:{default:"s"},showIndicator:{type:Boolean},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(r){const t=e.useModel(r,"modelValue"),l=r,a=e.ref(null);e.watch(t,()=>{var n,u;const s=l.items.map(p=>p.value);Array.isArray(t.value)?t.value.find(k=>!s.includes(k))&&(t.value=t.value.filter(k=>s.includes(k))):s.includes(t.value)||(t.value=s[0]??""),(u=(n=a.value)==null?void 0:n.querySelector(".radioGroup_item-selected"))==null||u.scrollIntoView()},{immediate:!0});const c="optionGroup-"+Math.random();return(s,n)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"elRef",ref:a,class:e.normalizeClass({"top-optionGroup":!0,["top-optionGroup-showIndicator_"+Number(s.showIndicator)]:!0,"top-scrollBarXHidding":!0,["top-size_"+s.size]:!!s.size,"top-error":s.isError})},[Array.isArray(t.value)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.items,u=>(e.openBlock(),e.createBlock(C._sfc_main$4,{class:e.normalizeClass({"top-optionGroup_item-selected":t.value.includes(u.value),"top-optionGroup_item":!0}),modelValue:t.value,"onUpdate:modelValue":n[0]||(n[0]=p=>t.value=p),value:u.value,title:u.title,disabled:u.disabled,isError:s.isError,"data-top-icon":u.icon},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.label),1)]),_:2},1032,["class","modelValue","value","title","disabled","isError","data-top-icon"]))),256)):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(s.items,u=>(e.openBlock(),e.createBlock(C._sfc_main$8,{class:e.normalizeClass({"top-optionGroup_item-selected":u.value===t.value,"top-optionGroup_item":!0}),modelValue:t.value,"onUpdate:modelValue":n[1]||(n[1]=p=>t.value=p),name:c,value:u.value,title:u.title,disabled:u.disabled,isError:s.isError,"data-top-icon":u.icon},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.label),1)]),_:2},1032,["class","modelValue","value","title","disabled","isError","data-top-icon"]))),256))],2))}}),D=e.defineComponent({__name:"radioGroup",props:e.mergeModels({modelValue:{},items:{},size:{},showIndicator:{type:Boolean},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(r){const t=e.useModel(r,"modelValue");return(l,a)=>(e.openBlock(),e.createBlock($,{class:"top-radioGroup",modelValue:t.value,"onUpdate:modelValue":a[0]||(a[0]=c=>t.value=c),items:l.$props.items,size:l.$props.size,showIndicator:l.$props.showIndicator,isError:l.$props.isError},{default:e.withCtx(()=>[e.renderSlot(l.$slots,"default")]),_:3},8,["modelValue","items","size","showIndicator","isError"]))}}),K=e.defineComponent({__name:"checkboxGroup",props:e.mergeModels({modelValue:{},items:{},size:{},showIndicator:{type:Boolean},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(r){const t=e.useModel(r,"modelValue");return(l,a)=>(e.openBlock(),e.createBlock($,{class:"top-checkboxGroup",modelValue:t.value,"onUpdate:modelValue":a[0]||(a[0]=c=>t.value=c),items:l.$props.items,size:l.$props.size,showIndicator:l.$props.showIndicator,isError:l.$props.isError},{default:e.withCtx(()=>[e.renderSlot(l.$slots,"default")]),_:3},8,["modelValue","items","size","showIndicator","isError"]))}}),R={class:"top-selector2_itemMulti top-ellipsis"},P=e.defineComponent({__name:"itemMulti",props:{id:{},name:{}},emits:["delete"],setup(r){return(t,l)=>(e.openBlock(),e.createElementBlock("div",R,[e.createTextVNode(e.toDisplayString(t.name)+" ",1),e.createElementVNode("span",{class:"top-selector2_itemMultiDelete","data-top-icon":"",onClick:l[0]||(l[0]=a=>t.$emit("delete",t.id)),onMousedown:l[1]||(l[1]=e.withModifiers(()=>{},["stop"]))},null,32)]))}}),q=(r,t,l,a)=>{const c=e.ref([]),s=new Map,n=e.ref(!1);let u="",p;r&&!r.params.limit&&(r.params.limit=100);const k=async()=>{if(!r)return;let v;if(a){v=JSON.stringify(r.params);const b=s.get(v);if(b)return b}n.value=!0;const h=await r.call();if(n.value=!1,h.errors)return;if(!Array.isArray(h.result)){console.warn("Array expected in `res.result`");return}const T=h.result.findIndex(b=>b.id===void 0||b.name===void 0);if(T!==-1){console.warn(`В result[${T}] нет id или name`);return}return v&&s.set(v,h),h},d=async v=>{if(!r)return;if(v){if(!p||n.value)return;r.params.offset=p}else r.params.offset=0;t==null||t(u);const h=await k();h&&(p=h.nextOffset,v?c.value=c.value.concat(h.result):c.value=h.result)},f=C.debounce(()=>d(!1),200);return{apiRequest:r,items:c,isLoading:n,load:d,setSearchTextAndLoad:(v,h=!0)=>{r&&(v.length<l||v===u&&c.value.length||(u=v,h?f():d(!1)))}}},G=0,A=(r,t,l=!0)=>l&&t.id===null?Array.isArray(r)?r.some(a=>a.id===t.id&&a.name===t.name):t.name===r.name:Array.isArray(r)?r.some(a=>a.id===t.id):t.id===r.id,O=(r,t,l,a,c,s,n,u)=>{const p=e.ref(""),k={id:G,name:C.useI18n().Common.All},d=()=>{p.value="",u.items.value=[]},f=()=>!(!u.apiRequest||s.value!=="inline"||p.value.length>=n),B=e.computed(()=>{var o;const y=[];return!l&&a.value&&y.push(k),(o=t.value)==null||o.forEach(i=>y.push({...i})),y}),v=e.computed(()=>{const y=p.value.toLowerCase(),o=I.invertKeyboardLayout(y);let i=[];return B.value.forEach(g=>{const m=g.name.toLowerCase();(g.id===Number(y)||m.includes(y)||m.includes(o))&&(m===y||m===o?i.unshift(g):i.push(g))}),i.push(...u.items.value),c.value&&p.value&&(!i.length||i[0].name.toLowerCase()!==y)&&i.push({id:null,name:p.value}),l&&(i=i.filter(g=>!A(r.value,g))),i});return{searchText:p,resetSearch:d,genIsShort:f,items:B,itemsForShow:v,selectItem:y=>{l&&Array.isArray(r.value)?A(r.value,y)||(r.value=[...r.value,y]):r.value=y},selectNextItem:()=>{if(!Array.isArray(r.value)){const o=(v.value.findIndex(i=>i.id===r.value.id)+1)%v.value.length;r.value={...v.value[o]}}},deleteItemById:async y=>{Array.isArray(r.value)&&(r.value=r.value.filter(o=>o.id!==y))}}},F={key:0,class:"top-selector2_activeItems"},H={key:1,class:"top-selector2_activeName top-ellipsis"},U={key:2,class:"top-selector2_placeholder top-ellipsis"},W=e.defineComponent({__name:"selector2",props:e.mergeModels({modelValue:{},items:{default:()=>[]},title:{},disabled:{type:Boolean},modificator:{},size:{default:"s"},isError:{type:Boolean},searchType:{default:"popup"},placeholder:{},api:{},apiSetSearchParams:{},minLength:{default:0},useCache:{type:Boolean},appendSearchToResult:{type:Boolean},multiselect:{type:Boolean},appendAllValue:{type:Boolean},addChanger:{type:Boolean},buttonProps:{},selectedAsPlaceholder:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(r){const t=r,l=e.useModel(r,"modelValue"),a=e.computed(()=>t.searchType==="inline"&&t.multiselect||t.searchType==="inline"&&C.Core.state.isMobile?"popup":t.searchType);let c=0;a.value==="inline"&&t.minLength&&(c=t.minLength);const s=q(t.api,t.apiSetSearchParams,c,t.useCache),n=O(l,e.toRef(t,"items"),t.multiselect,e.toRef(t,"appendAllValue"),e.toRef(t,"appendSearchToResult"),a,c,s),u=e.computed(()=>t.buttonProps?"TopButton":a.value==="inline"?"TopInput":"div"),p=e.ref(null),k=()=>{var o;return(o=p.value)==null?void 0:o.popup};s.apiRequest&&e.watch(n.searchText,()=>{var o;s.setSearchTextAndLoad(n.searchText.value),a.value==="inline"&&n.genIsShort()&&((o=k())==null||o.close())}),e.watch(l,()=>{a.value==="inline"&&n.resetSearch()});const d=e.computed(()=>{var o;return Array.isArray(l.value)||t.multiselect||!t.selectedAsPlaceholder&&a.value!=="inline"?t.placeholder:((o=l.value)==null?void 0:o.name)||t.placeholder}),f=o=>{var m,V;let i=!1;switch(o.key){case"Delete":case"Backspace":Array.isArray(l.value)&&(o.preventDefault(),o.stopPropagation(),l.value.pop());break;case"ArrowUp":case"ArrowRight":case"ArrowDown":case"ArrowLeft":case"Enter":case" ":i=!0;break;case"Escape":a.value==="inline"&&n.resetSearch();break}const g=o.key.length===1&&!o.ctrlKey&&!o.metaKey;(a.value==="popup"||a.value==="inline")&&g&&(i=!0),(m=k())!=null&&m.elPopup&&(i=!1),i&&(a.value==="popup"&&(o.preventDefault(),o.stopPropagation(),g&&(n.searchText.value||(n.searchText.value=o.key))),(V=o.currentTarget)==null||V.click())};let B=!1;const v=o=>{var i;B||a.value==="inline"&&((i=o.currentTarget)==null||i.click())},h=o=>{var i,g;o.preventDefault(),B=!0,(g=(i=o.currentTarget)==null?void 0:i.parentElement)==null||g.focus(),B=!1,n.selectNextItem()},T=()=>{var o;if(B=!0,s.apiRequest){if(n.genIsShort()){(o=k())==null||o.close();return}s.setSearchTextAndLoad(n.searchText.value,!1)}},b=()=>{setTimeout(()=>{B=!1},100),a.value==="popup"&&n.searchText.value&&n.resetSearch()},y=o=>{const i=o.target;i.scrollTop/(i.scrollHeight-i.offsetHeight)>.8&&s.load(!0)};return window.__STORYBOOK_PREVIEW__&&(e.watch(()=>t.multiselect,()=>{t.multiselect?Array.isArray(l.value)||(l.value=[{id:1,name:"Выбери меня"}]):Array.isArray(l.value)&&(l.value={id:null,name:""})},{immediate:!0}),e.watch(()=>t.searchType,()=>{setTimeout(()=>{location.reload()},500)})),(o,i)=>{const g=e.resolveDirective("top-focus");return e.openBlock(),e.createBlock(e.unref(E._sfc_main),{ref_key:"popupRef",ref:p,onOpen:i[3]||(i[3]=m=>T()),onClose:i[4]||(i[4]=m=>b()),onScrollContentList:i[5]||(i[5]=m=>e.unref(s)?y(m):void 0),notch:a.value!=="inline",transitionDuration:0},e.createSlots({opener:e.withCtx(()=>[e.withDirectives((e.openBlock(),e.createBlock(e.resolveDynamicComponent(u.value),e.mergeProps(o.buttonProps,{ref:"subcomponentSelector",class:{"top-selector2":!0,"top-selector2-multiselect":o.multiselect,["top-selector2-"+o.modificator]:!!o.modificator,"top-as-input":!o.buttonProps,"top-as-selector":!0,["top-size_"+o.size]:!0,"top-disabled":o.disabled,"top-forms-focusable":!o.disabled,"top-error":o.isError},tabindex:"0",onKeydown:f,placeholder:d.value,modelValue:e.unref(n).searchText.value,"onUpdate:modelValue":i[0]||(i[0]=m=>e.unref(n).searchText.value=m),onFocus:v,onBlur:i[1]||(i[1]=m=>{var V;return(V=k())!=null&&V.isClosed?e.unref(n).resetSearch():""})}),{default:e.withCtx(()=>[o.multiselect?(e.openBlock(),e.createElementBlock("div",F,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,m=>(e.openBlock(),e.createBlock(P,{id:m.id,name:m.name,onDelete:e.unref(n).deleteItemById},null,8,["id","name","onDelete"]))),256))])):e.createCommentVNode("",!0),a.value!=="inline"&&!o.multiselect?(e.openBlock(),e.createElementBlock("span",H,e.toDisplayString(Array.isArray(l.value)?"":l.value.name),1)):e.createCommentVNode("",!0),o.multiselect&&!l.value.length?(e.openBlock(),e.createElementBlock("span",U,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0),o.addChanger&&!o.buttonProps&&!o.multiselect&&e.unref(n).items.value.length>1&&!o.disabled?(e.openBlock(),e.createElementBlock("span",{key:3,class:"top-changer top-changer-selector top-popup_widget","data-top-popup-disabled":"true",onClick:h})):e.createCommentVNode("",!0)]),_:1},16,["class","placeholder","modelValue"])),[[g,o.isError,void 0,{onupdate:!0}]])]),contentList:e.withCtx(()=>{var m;return[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(n).itemsForShow.value,V=>(e.openBlock(),e.createBlock(e.unref(E._sfc_main$2),{class:e.normalizeClass({"top-active":!Array.isArray(l.value)&&!o.multiselect&&l.value.id===V.id&&l.value.name===V.name}),key:V.id??void 0,closeByClick:!o.multiselect||e.unref(C.Core).state.isMobile,onClick:le=>e.unref(n).selectItem(V)},{default:e.withCtx(()=>[o.$slots.item?e.renderSlot(o.$slots,"item",{key:0,item:V}):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(V.name),1)],64))]),_:2},1032,["class","closeByClick","onClick"]))),128)),!e.unref(s).isLoading.value&&!e.unref(n).itemsForShow.value.length?(e.openBlock(),e.createBlock(e.unref(E._sfc_main$2),{key:0,type:"regular"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.$i18n.Common.No_results),1)]),_:1})):e.createCommentVNode("",!0),e.unref(s).isLoading.value&&(o.searchType!=="popup"||(m=e.unref(s).apiRequest)!=null&&m.params.offset)?(e.openBlock(),e.createBlock(e.unref(E._sfc_main$2),{key:1,type:"regular"},{default:e.withCtx(()=>[e.createVNode(e.unref(C._sfc_main$12),{type:"circles"})]),_:1})):e.createCommentVNode("",!0)]}),_:2},[a.value==="popup"?{name:"widget",fn:e.withCtx(()=>{var m;return[e.createVNode(e.unref(_._sfc_main),{title:"Поиск",icon:"",modelValue:e.unref(n).searchText.value,"onUpdate:modelValue":i[2]||(i[2]=V=>e.unref(n).searchText.value=V),isLoading:e.unref(s).isLoading.value&&!((m=e.unref(s).apiRequest)!=null&&m.params.offset),placeholder:d.value},null,8,["modelValue","isLoading","placeholder"])]}),key:"0"}:void 0]),1032,["notch"])}}}),j=["data-top-icon"],J={class:"top-info_text"},X={key:0,class:"top-info_value"},Y=e.defineComponent({__name:"info",props:{icon:{},styling:{default:"default"},size:{default:"default"}},setup(r){return(t,l)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-info":!0,["top-size_"+t.size]:!0,["top-info-styling_"+t.styling]:!0}),"data-top-icon":t.icon},[e.createElementVNode("div",J,[e.renderSlot(t.$slots,"default")]),t.$slots.additional?(e.openBlock(),e.createElementBlock("span",X,[e.renderSlot(t.$slots,"additional")])):e.createCommentVNode("",!0)],10,j))}}),Q={key:0,class:"top-policy"},Z={class:"top-policy_title"},x=["innerHTML"],ee=e.defineComponent({__name:"policy",props:{title:{},description:{},acceptText:{}},emits:["accept"],setup(r,{emit:t}){const l=t,a=e.ref(!0),c=()=>{a.value=!1,l("accept")};return(s,n)=>a.value?(e.openBlock(),e.createElementBlock("div",Q,[e.createElementVNode("div",Z,e.toDisplayString(s.title),1),e.createElementVNode("div",{class:"top-policy_description",innerHTML:s.description},null,8,x),e.createVNode(e.unref(C._sfc_main$1),{size:"m",onClick:c},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.acceptText),1)]),_:1})])):e.createCommentVNode("",!0)}});w.TopMenu=S._sfc_main,w.TopCheckboxGroup=K,w.TopEditArea=M,w.TopEditInput=z,w.TopInfo=Y,w.TopPolicy=ee,w.TopRadioGroup=D,w.TopSelector2=W,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}));
1
+ define(["require","exports","vue","../.chunks/forms-DXX5M4DO.amd","../.chunks/listItem.vue_vue_type_script_setup_true_lang-DzV225TL.amd","../.chunks/widgetInput.vue_vue_type_script_setup_true_lang-BU-FdL6d.amd","../.chunks/popupHint.vue_vue_type_style_index_0_lang-Cce9ZdtW.amd","../utils/keyboard.amd","../.chunks/menu.vue_vue_type_style_index_0_lang-D3OAqOqX.amd","../require/css.amd!../assets/formsExt.css","../require/css.amd!../assets/popupHint.css"],(function(oe,C,e,g,T,I,le,S,N){"use strict";if(typeof e>"u")var e=window.Vue;const M={class:"top-editArea_footer"},L=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:{},styling:{},rows:{},minHeight:{},expandable:{type:Boolean,default:!0},disabled:{type:Boolean},readonly:{type:Boolean},isError:{type:Boolean},hint:{},maxLength:{}},emits:["submit","close","clickOnTitle"],setup(n,{emit:l}){const o=n,a=l,m=e.ref(o.defaultValue),r=e.ref(o.isFocused),p=e.computed(()=>m.value!==o.defaultValue),s=u=>{a("submit",u),m.value=o.defaultValue},i=()=>{if(o.forceShowCloseBtn&&!p.value){a("close");return}m.value=o.defaultValue},h=()=>{o.attachToKeyboard&&a("clickOnTitle")};return(u,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-editArea":!0,"top-editArea-attachedToKeyboard":u.attachToKeyboard})},[u.title?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-editArea_title",onClick:f[0]||(f[0]=V=>h())},e.toDisplayString(u.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass({"top-editArea_form":!0,"top-forms-focusable":!0,"top-as-input":!0,"top-error":u.isError,"top-focus":r.value})},[e.createVNode(g._sfc_main$11,{modelValue:m.value,"onUpdate:modelValue":f[1]||(f[1]=V=>m.value=V),name:u.name,placeholder:u.placeholder,rows:u.rows,minHeight:u.minHeight,expandable:u.expandable,disabled:u.disabled,readonly:u.readonly,isError:u.isError,hint:u.hint,class:"top-editArea_element",onFocus:f[2]||(f[2]=()=>r.value=!0),onBlur:f[3]||(f[3]=()=>r.value=!1),onKeyup:[e.withKeys(i,["esc"]),f[4]||(f[4]=e.withKeys(e.withModifiers(V=>s(m.value),["ctrl"]),["enter"]))]},null,8,["modelValue","name","placeholder","rows","minHeight","expandable","disabled","readonly","isError","hint"]),e.createElementVNode("div",M,[p.value||u.forceShowCloseBtn?(e.openBlock(),e.createBlock(g._sfc_main$1,{key:0,icon:u.$core.state.isMobile?"":"",class:"top-editArea_button",color:"theme",styling:"soft",onClick:i},e.createSlots({_:2},[u.$core.state.isMobile?void 0:{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.cancelText),1)]),key:"0"}]),1032,["icon"])):e.createCommentVNode("",!0),p.value?(e.openBlock(),e.createBlock(g._sfc_main$1,{key:1,class:"top-editArea_button",icon:u.$core.state.isMobile?"":"",onClick:f[5]||(f[5]=V=>s(m.value))},e.createSlots({_:2},[u.$core.state.isMobile?void 0:{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.submitText),1)]),key:"0"}]),1032,["icon"])):e.createCommentVNode("",!0)])],2)],2))}}),D={class:"top-editInput"},z=e.defineComponent({__name:"editInput",props:{modelValue:{},input:{},button:{}},emits:["update:modelValue"],setup(n,{emit:l}){const o=n,a=e.ref(o.modelValue);e.watch(e.toRef(o.modelValue),()=>{a.value=o.modelValue});const m=l,r=()=>{m("update:modelValue",a.value)};return(p,s)=>(e.openBlock(),e.createElementBlock("div",D,[e.createVNode(g._sfc_main,e.mergeProps(p.input,{onKeydownCapture:s[0]||(s[0]=e.withKeys(e.withModifiers(i=>a.value=p.modelValue,["stop"]),["esc"])),onKeydown:e.withKeys(e.withModifiers(r,["stop"]),["enter"]),modelValue:a.value,"onUpdate:modelValue":s[1]||(s[1]=i=>a.value=i)}),null,16,["onKeydown","modelValue"]),a.value!==p.modelValue?(e.openBlock(),e.createBlock(g._sfc_main$1,e.mergeProps({key:0,icon:"",styling:"soft"},p.button,{onClick:r}),null,16)):e.createCommentVNode("",!0)]))}}),A=e.defineComponent({__name:"optionGroup",props:e.mergeModels({modelValue:{},items:{},size:{default:"s"},showIndicator:{type:Boolean},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(n){const l=e.useModel(n,"modelValue"),o=n,a=e.ref(null);e.watch(l,()=>{var p,s;const r=o.items.map(i=>i.value);Array.isArray(l.value)?l.value.find(h=>!r.includes(h))&&(l.value=l.value.filter(h=>r.includes(h))):r.includes(l.value)||(l.value=r[0]??""),(s=(p=a.value)==null?void 0:p.querySelector(".radioGroup_item-selected"))==null||s.scrollIntoView()},{immediate:!0});const m="optionGroup-"+Math.random();return(r,p)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"elRef",ref:a,class:e.normalizeClass({"top-optionGroup":!0,["top-optionGroup-showIndicator_"+Number(r.showIndicator)]:!0,"top-scrollBarXHidding":!0,["top-size_"+r.size]:!!r.size,"top-error":r.isError})},[Array.isArray(l.value)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(r.items,s=>(e.openBlock(),e.createBlock(g._sfc_main$4,{class:e.normalizeClass({"top-optionGroup_item-selected":l.value.includes(s.value),"top-optionGroup_item":!0}),modelValue:l.value,"onUpdate:modelValue":p[0]||(p[0]=i=>l.value=i),value:s.value,title:s.title,disabled:s.disabled,isError:r.isError,"data-top-icon":s.icon},e.createSlots({_:2},[s.label?{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.label),1)]),key:"0"}:void 0]),1032,["class","modelValue","value","title","disabled","isError","data-top-icon"]))),256)):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(r.items,s=>(e.openBlock(),e.createBlock(g._sfc_main$8,{class:e.normalizeClass({"top-optionGroup_item-selected":s.value===l.value,"top-optionGroup_item":!0}),modelValue:l.value,"onUpdate:modelValue":p[1]||(p[1]=i=>l.value=i),name:m,value:s.value,title:s.title,disabled:s.disabled,isError:r.isError,"data-top-icon":s.icon},e.createSlots({_:2},[s.label?{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.label),1)]),key:"0"}:void 0]),1032,["class","modelValue","value","title","disabled","isError","data-top-icon"]))),256))],2))}}),K=e.defineComponent({__name:"radioGroup",props:e.mergeModels({modelValue:{},items:{},size:{},showIndicator:{type:Boolean},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(n){const l=e.useModel(n,"modelValue");return(o,a)=>(e.openBlock(),e.createBlock(A,{class:"top-radioGroup",modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=m=>l.value=m),items:o.$props.items,size:o.$props.size,showIndicator:o.$props.showIndicator,isError:o.$props.isError},{default:e.withCtx(()=>[e.renderSlot(o.$slots,"default")]),_:3},8,["modelValue","items","size","showIndicator","isError"]))}}),R=e.defineComponent({__name:"checkboxGroup",props:e.mergeModels({modelValue:{},items:{},size:{},showIndicator:{type:Boolean},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(n){const l=e.useModel(n,"modelValue");return(o,a)=>(e.openBlock(),e.createBlock(A,{class:"top-checkboxGroup",modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=m=>l.value=m),items:o.$props.items,size:o.$props.size,showIndicator:o.$props.showIndicator,isError:o.$props.isError},{default:e.withCtx(()=>[e.renderSlot(o.$slots,"default")]),_:3},8,["modelValue","items","size","showIndicator","isError"]))}}),P={class:"top-selector2_itemMulti top-ellipsis"},q=e.defineComponent({__name:"itemMulti",props:{id:{},name:{}},emits:["delete"],setup(n){return(l,o)=>(e.openBlock(),e.createElementBlock("div",P,[e.createTextVNode(e.toDisplayString(l.name)+" ",1),e.createElementVNode("span",{class:"top-selector2_itemMultiDelete","data-top-icon":"",onClick:o[0]||(o[0]=a=>l.$emit("delete",l.id)),onMousedown:o[1]||(o[1]=e.withModifiers(()=>{},["stop"]))},null,32)]))}}),F=(n,l,o,a)=>{const m=e.ref([]),r=new Map,p=e.ref(!1);let s="",i;n&&!n.params.limit&&(n.params.limit=100);const h=async()=>{if(!n)return;let k;if(a){k=JSON.stringify(n.params);const w=r.get(k);if(w)return w}p.value=!0;const v=await n.call();if(p.value=!1,v.errors)return;if(!Array.isArray(v.result)){console.warn("Array expected in `res.result`");return}const b=v.result.findIndex(w=>w.id===void 0||w.name===void 0);if(b!==-1){console.warn(`В result[${b}] нет id или name`);return}return k&&r.set(k,v),v},u=async k=>{if(!n)return;if(k){if(!i||p.value)return;n.params.offset=i}else n.params.offset=0;l==null||l(s);const v=await h();v&&(i=v.nextOffset,k?m.value=m.value.concat(v.result):m.value=v.result)},f=g.debounce(()=>u(!1),200);return{apiRequest:n,items:m,isLoading:p,load:u,setSearchTextAndLoad:(k,v=!0)=>{n&&(k.length<o||k===s&&m.value.length||(s=k,v?f():u(!1)))}}},G=0,E=null,_=(n,l,o=!0)=>o&&l.id===E?Array.isArray(n)?n.some(a=>a.id===l.id&&a.name===l.name):l.name===n.name:Array.isArray(n)?n.some(a=>a.id===l.id):l.id===n.id,O=(n,l,o,a,m,r,p,s,i)=>{const h=e.ref(""),u={id:G,name:g.useI18n().Common.All},f=()=>{h.value="",i.items.value=[]},V=()=>!(!i.apiRequest||p.value!=="inline"||h.value.length>=s),k=e.computed(()=>{var c;const t=[];return!a&&m.value&&t.push(u),(c=o.value)==null||c.forEach(y=>t.push({...y})),t}),v=e.computed(()=>{const t=h.value.toLowerCase(),c=S.invertKeyboardLayout(t);let y=[];if(k.value.forEach(d=>{const B=d.name.toLowerCase();(d.id===Number(t)||B.includes(t)||B.includes(c))&&(B===t||B===c?y.unshift(d):y.push(d))}),y.push(...i.items.value),r.value&&h.value&&!y.find(d=>d.name.toLowerCase()===t)){const d={id:E,name:h.value};i.items.value.length?y.push(d):y.unshift(d)}return a&&(y=y.filter(d=>!_(n.value,d))),y});return{searchText:h,resetSearch:f,genIsShort:V,items:k,itemsForShow:v,selectItem:t=>{a&&Array.isArray(n.value)?_(n.value,t)||(n.value=[...n.value,t]):n.value=t,t.id===E&&l("appendItem",t)},selectNextItem:()=>{if(!Array.isArray(n.value)){const c=(v.value.findIndex(y=>y.id===n.value.id)+1)%v.value.length;n.value={...v.value[c]}}},deleteItemById:async t=>{Array.isArray(n.value)&&(n.value=n.value.filter(c=>c.id!==t))}}},H={key:0,class:"top-selector2_activeItems"},U={key:1,class:"top-selector2_activeName top-ellipsis"},W={key:2,class:"top-selector2_placeholder top-ellipsis"},j=e.defineComponent({__name:"selector2",props:e.mergeModels({modelValue:{},items:{default:()=>[]},title:{},disabled:{type:Boolean},modificator:{},size:{default:"s"},isError:{type:Boolean},openByFocus:{type:Boolean},searchType:{default:"popup"},placeholder:{},api:{},apiSetSearchParams:{},minLength:{default:0},useCache:{type:Boolean},appendSearchToResult:{type:Boolean},multiselect:{type:Boolean},appendAllValue:{type:Boolean},addChanger:{type:Boolean},buttonProps:{},selectedAsPlaceholder:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:e.mergeModels(["appendItem"],["update:modelValue"]),setup(n,{emit:l}){const o=n,a=e.useModel(n,"modelValue"),m=l,r=e.computed(()=>o.searchType==="inline"&&o.multiselect||o.searchType==="inline"&&g.Core.state.isMobile?"popup":o.searchType);let p=0;r.value==="inline"&&o.minLength&&(p=o.minLength);const s=F(o.api,o.apiSetSearchParams,p,o.useCache),i=O(a,m,e.toRef(o,"items"),o.multiselect,e.toRef(o,"appendAllValue"),e.toRef(o,"appendSearchToResult"),r,p,s),h=e.computed(()=>o.buttonProps?"TopButton":r.value==="inline"?"TopInput":"div"),u=e.ref(null),f=()=>{var t;return(t=u.value)==null?void 0:t.popup};s.apiRequest&&e.watch(i.searchText,()=>{var t;s.setSearchTextAndLoad(i.searchText.value),r.value==="inline"&&i.genIsShort()&&((t=f())==null||t.close())}),e.watch(a,()=>{r.value==="inline"&&i.resetSearch()});const V=e.computed(()=>{var t;return Array.isArray(a.value)||o.multiselect||!o.selectedAsPlaceholder&&r.value!=="inline"?o.placeholder:((t=a.value)==null?void 0:t.name)||o.placeholder}),k=t=>{var d,B;let c=!1;switch(t.key){case"Delete":case"Backspace":Array.isArray(a.value)&&(t.preventDefault(),t.stopPropagation(),a.value.pop());break;case"ArrowUp":case"ArrowRight":case"ArrowDown":case"ArrowLeft":case"Enter":case" ":c=!0;break;case"Escape":r.value==="inline"&&i.resetSearch();break}const y=t.key.length===1&&!t.ctrlKey&&!t.metaKey;(r.value==="popup"||r.value==="inline")&&y&&(c=!0),(d=f())!=null&&d.elPopup&&(c=!1),c&&(r.value==="popup"&&(t.preventDefault(),t.stopPropagation(),y&&(i.searchText.value||(i.searchText.value=t.key))),(B=t.currentTarget)==null||B.click())},v=t=>{t.preventDefault(),i.selectNextItem()},b=()=>{var t;if(s.apiRequest){if(i.genIsShort()){(t=f())==null||t.close();return}s.setSearchTextAndLoad(i.searchText.value,!1)}},w=()=>{r.value&&i.searchText.value&&i.resetSearch()},$=t=>{const c=t.target;c.scrollTop/(c.scrollHeight-c.offsetHeight)>.8&&s.load(!0)};return window.__STORYBOOK_PREVIEW__&&(e.watch(()=>o.multiselect,()=>{o.multiselect?Array.isArray(a.value)||(a.value=[{id:1,name:"Выбери меня"}]):Array.isArray(a.value)&&(a.value={id:null,name:""})},{immediate:!0}),e.watch(()=>o.searchType,()=>{setTimeout(()=>{location.reload()},500)})),(t,c)=>{const y=e.resolveDirective("top-focus");return e.openBlock(),e.createBlock(e.unref(T._sfc_main),{ref_key:"popupRef",ref:u,onOpen:c[2]||(c[2]=d=>b()),onClose:c[3]||(c[3]=d=>w()),onScrollContentList:c[4]||(c[4]=d=>e.unref(s)?$(d):void 0),notch:r.value!=="inline",transitionDuration:0,openByFocus:r.value==="inline"},e.createSlots({opener:e.withCtx(()=>[e.withDirectives((e.openBlock(),e.createBlock(e.resolveDynamicComponent(h.value),e.mergeProps(t.buttonProps,{ref:"subcomponentSelector",class:{"top-selector2":!0,"top-selector2-multiselect":t.multiselect,["top-selector2-"+t.modificator]:!!t.modificator,"top-as-input":!t.buttonProps,"top-as-selector":!0,["top-size_"+t.size]:!0,"top-disabled":t.disabled,"top-forms-focusable":!t.disabled,"top-error":t.isError},tabindex:"0",onKeydown:k,placeholder:V.value,modelValue:e.unref(i).searchText.value,"onUpdate:modelValue":c[0]||(c[0]=d=>e.unref(i).searchText.value=d)}),{default:e.withCtx(()=>[t.multiselect?(e.openBlock(),e.createElementBlock("div",H,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,d=>(e.openBlock(),e.createBlock(q,{id:d.id,name:d.name,onDelete:e.unref(i).deleteItemById},null,8,["id","name","onDelete"]))),256))])):e.createCommentVNode("",!0),r.value!=="inline"&&!t.multiselect?(e.openBlock(),e.createElementBlock("span",U,e.toDisplayString(Array.isArray(a.value)?"":a.value.name),1)):e.createCommentVNode("",!0),t.multiselect&&!a.value.length?(e.openBlock(),e.createElementBlock("span",W,e.toDisplayString(V.value),1)):e.createCommentVNode("",!0),t.addChanger&&!t.buttonProps&&!t.multiselect&&e.unref(i).items.value.length>1&&!t.disabled?(e.openBlock(),e.createElementBlock("span",{key:3,class:"top-changer top-changer-selector top-popup_widget",onClick:v})):e.createCommentVNode("",!0)]),_:1},16,["class","placeholder","modelValue"])),[[y,t.isError,void 0,{onupdate:!0}]])]),contentList:e.withCtx(()=>{var d;return[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i).itemsForShow.value,B=>(e.openBlock(),e.createBlock(e.unref(T._sfc_main$1),{class:e.normalizeClass({"top-active":!Array.isArray(a.value)&&!t.multiselect&&a.value.id===B.id&&a.value.name===B.name}),key:B.id??void 0,closeByClick:!t.multiselect||e.unref(g.Core).state.isMobile,onClick:ae=>e.unref(i).selectItem(B)},{default:e.withCtx(()=>[t.$slots.item?e.renderSlot(t.$slots,"item",{key:0,item:B}):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(B.name),1)],64))]),_:2},1032,["class","closeByClick","onClick"]))),128)),!e.unref(s).isLoading.value&&!e.unref(i).itemsForShow.value.length?(e.openBlock(),e.createBlock(e.unref(T._sfc_main$1),{key:0,type:"regular"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.$i18n.Common.No_results),1)]),_:1})):e.createCommentVNode("",!0),e.unref(s).isLoading.value&&(t.searchType!=="popup"||(d=e.unref(s).apiRequest)!=null&&d.params.offset)?(e.openBlock(),e.createBlock(e.unref(T._sfc_main$1),{key:1,type:"regular"},{default:e.withCtx(()=>[e.createVNode(e.unref(g._sfc_main$12),{type:"circles"})]),_:1})):e.createCommentVNode("",!0)]}),_:2},[r.value==="popup"?{name:"widget",fn:e.withCtx(()=>{var d;return[e.createVNode(e.unref(I._sfc_main),{title:"Поиск",icon:"",modelValue:e.unref(i).searchText.value,"onUpdate:modelValue":c[1]||(c[1]=B=>e.unref(i).searchText.value=B),isLoading:e.unref(s).isLoading.value&&!((d=e.unref(s).apiRequest)!=null&&d.params.offset),placeholder:V.value},null,8,["modelValue","isLoading","placeholder"])]}),key:"0"}:void 0]),1032,["notch","openByFocus"])}}}),J=["data-top-icon"],X={class:"top-info_text"},Y={key:0,class:"top-info_value"},Q=e.defineComponent({__name:"info",props:{icon:{},styling:{default:"default"},size:{default:"default"}},setup(n){return(l,o)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-info":!0,["top-size_"+l.size]:!0,["top-info-styling_"+l.styling]:!0}),"data-top-icon":l.icon},[e.createElementVNode("div",X,[e.renderSlot(l.$slots,"default")]),l.$slots.additional?(e.openBlock(),e.createElementBlock("span",Y,[e.renderSlot(l.$slots,"additional")])):e.createCommentVNode("",!0)],10,J))}}),Z={key:0,class:"top-policy"},x={class:"top-policy_title"},ee=["innerHTML"],te=e.defineComponent({__name:"policy",props:{title:{},description:{},acceptText:{}},emits:["accept"],setup(n,{emit:l}){const o=l,a=e.ref(!0),m=()=>{a.value=!1,o("accept")};return(r,p)=>a.value?(e.openBlock(),e.createElementBlock("div",Z,[e.createElementVNode("div",x,e.toDisplayString(r.title),1),e.createElementVNode("div",{class:"top-policy_description",innerHTML:r.description},null,8,ee),e.createVNode(e.unref(g._sfc_main$1),{size:"m",onClick:m},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.acceptText),1)]),_:1})])):e.createCommentVNode("",!0)}});C.TopMenu=N._sfc_main,C.TopCheckboxGroup=R,C.TopEditArea=L,C.TopEditInput=z,C.TopInfo=Q,C.TopPolicy=te,C.TopRadioGroup=K,C.TopSelector2=j,Object.defineProperty(C,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/libs/optionGroup/optionGroup.vue","../../src/components/formsExt/radioGroup/radioGroup.vue","../../src/components/formsExt/checkboxGroup/checkboxGroup.vue","../../src/components/formsExt/selector2/itemMulti.vue","../../src/components/formsExt/selector2/composables/useAPI.ts","../../src/components/formsExt/selector2/utils.ts","../../src/components/formsExt/selector2/composables/useMenu.ts","../../src/components/formsExt/selector2/selector2.vue","../../src/components/formsExt/info/info.vue","../../src/components/formsExt/policy/policy.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport Button from '@/components/forms/button/button.vue';\nimport type { Emits, Props } from './types';\nimport Textarea from '@/components/forms/textarea/textarea.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tdefaultValue: '',\n\tcancelText: 'Cancel',\n\tsubmitText: 'Send',\n\tcloseText: 'Close',\n\texpandable: true,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = ref(props.defaultValue);\n\nconst isFocused = ref(props.isFocused);\n\nconst isChanged = computed(() => localValue.value !== props.defaultValue);\n\nconst submit = (value: string) => {\n\temit('submit', value);\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst cancel = () => {\n\tif (props.forceShowCloseBtn && !isChanged.value) {\n\t\temit('close');\n\n\t\treturn;\n\t}\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst clickOnTitle = () => {\n\tif (props.attachToKeyboard) emit('clickOnTitle');\n};\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-editArea': true,\n\t\t\t'top-editArea-attachedToKeyboard': attachToKeyboard,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tv-if=\"title\"\n\t\t\tclass=\"top-editArea_title\"\n\t\t\t@click=\"clickOnTitle()\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-editArea_form': true,\n\t\t\t\t'top-forms-focusable': true,\n\t\t\t\t'top-as-input': true,\n\t\t\t\t'top-error': isError,\n\t\t\t\t'top-focus': isFocused,\n\t\t\t}\"\n\t\t>\n\t\t\t<Textarea\n\t\t\t\tv-model=\"localValue\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:rows=\"rows\"\n\t\t\t\t:minHeight=\"minHeight\"\n\t\t\t\t:expandable=\"expandable\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:readonly=\"readonly\"\n\t\t\t\t:isError=\"isError\"\n\t\t\t\t:hint=\"hint\"\n\t\t\t\tclass=\"top-editArea_element\"\n\t\t\t\t@focus=\"() => isFocused = true\"\n\t\t\t\t@blur=\"() => isFocused = false\"\n\t\t\t\t@keyup.esc=\"cancel\"\n\t\t\t\t@keyup.ctrl.enter=\"submit(localValue)\"\n\t\t\t/>\n\n\t\t\t<div class=\"top-editArea_footer\">\n\t\t\t\t<Button\n\t\t\t\t\tv-if=\"isChanged || forceShowCloseBtn\"\n\t\t\t\t\t:icon=\"$core.state.isMobile ? '': ''\"\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\tstyling=\"soft\"\n\t\t\t\t\t@click=\"cancel\"\n\t\t\t\t>\n\t\t\t\t\t<template\n\t\t\t\t\t\t#default\n\t\t\t\t\t\tv-if=\"!$core.state.isMobile\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ cancelText }}\n\t\t\t\t\t</template>\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tv-if=\"isChanged\"\n\t\t\t\t\t:icon=\"$core.state.isMobile ? '': ''\"\n\t\t\t\t\t@click=\"submit(localValue)\"\n\t\t\t\t>\n\t\t\t\t\t<template\n\t\t\t\t\t\t#default\n\t\t\t\t\t\tv-if=\"!$core.state.isMobile\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ submitText }}\n\t\t\t\t\t</template>\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-editArea {\n\t--top-editArea-bottom: env(keyboard-inset-height, 0px);\n\t--top-editArea-offset-bottom: 0px;\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n}\n\n.top-editArea_title {\n\tfont-size: 12px;\n}\n\n.top-editArea_form {\n\tflex-direction: column;\n}\n\n/* textarea в EditArea */\n.top-textarea {\n\twidth: 100%;\n}\n\n.top-editArea_element.top-textarea_textarea {\n\t--top-forms-border-width: 0px;\n\n\toutline: none;\n\tanimation: none;\n}\n\n/* footer */\n.top-editArea_footer {\n\tpadding: var(--top-forms-padding);\n\tdisplay: flex;\n\tmin-height: 32px;\n\talign-self: flex-end;\n\tjustify-content: flex-end;\n\tgap: var(--top-forms-padding);\n}\n\n/* attachedToKeyboard */\n.top-editArea-attachedToKeyboard {\n\tbackground: var(--top-forms-background-color);\n\tposition: fixed;\n\tbottom: calc(var(--top-editArea-offset-bottom) + var(--top-editArea-bottom));\n\tright: 0;\n\tleft: 0;\n\tz-index: 2;\n\tgap: 0;\n\ttransition: bottom var(--transition-fast);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_form {\n\tborder-radius: 0;\n\tborder: none;\n\tborder-top: 1px solid var(--top-forms-border-color);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_title {\n\tcursor: pointer;\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\tpadding: var(--top-forms-padding);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_footer > [data-top-icon] {\n\tborder-radius: 100%;\n}\n\n@media screen and (max-width: 900px) {\n\t.top-editArea_form{\n\t\tflex-direction: row;\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, toRef, watch } from 'vue';\nimport type { Emits, Props } from './types';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = defineProps<Props>();\n\nconst intermediateValue = ref(props.modelValue);\n\nwatch(toRef(props.modelValue), () => {\n\tintermediateValue.value = props.modelValue;\n});\n\nconst emit = defineEmits<Emits>();\n\nconst submit = () => {\n\temit('update:modelValue', intermediateValue.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-editInput\">\n\t\t<TopInput\n\t\t\t:=\"input\"\n\t\t\t@keydown.esc.capture.stop=\"intermediateValue = modelValue\"\n\t\t\t@keydown.enter.stop=\"submit\"\n\t\t\tv-model=\"intermediateValue\"\n\t\t/>\n\n\t\t<TopButton\n\t\t\tv-if=\"intermediateValue !== modelValue\"\n\t\t\ticon=\"\"\n\t\t\tstyling=\"soft\"\n\t\t\t:=\"button\"\n\t\t\t@click=\"submit\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n.top-editInput {\n\twidth: 220px;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: var(--top-gap-1);\n}\n\n.top-editInput .top-input {\n\twidth: unset;\n\tflex-grow: 1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { Props } from './types';\nimport TopCheckbox from '@/components/forms/checkbox/checkbox.vue';\nimport TopRadio from '@/components/forms/radio/radio.vue';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst elRef = ref<HTMLElement | null>(null);\n\nwatch(model, () => {\n\tconst valuesAvailable = props.items.map(item => item.value);\n\n\tif (Array.isArray(model.value)) {\n\t\t// есть ли неподдерживаемые значения\n\t\tconst valueIsWrong = model.value.find((value) => {\n\t\t\treturn !valuesAvailable.includes(value);\n\t\t});\n\n\t\tif (valueIsWrong) {\n\t\t\t// оставить только поддерживаемые значения\n\t\t\tmodel.value = model.value.filter((value) => {\n\t\t\t\treturn valuesAvailable.includes(value);\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif (!valuesAvailable.includes(model.value)) {\n\t\t\tmodel.value = valuesAvailable[0] ?? '';\n\t\t}\n\t}\n\n\telRef.value?.querySelector('.radioGroup_item-selected')?.scrollIntoView();\n}, { immediate: true });\n\nconst name = 'optionGroup-' + Math.random();\n</script>\n\n<template>\n\t<div\n\t\tref=\"elRef\"\n\t\t:class=\"{\n\t\t\t['top-optionGroup']: true,\n\t\t\t['top-optionGroup-showIndicator_' + Number(showIndicator)]: true,\n\t\t\t['top-scrollBarXHidding']: true,\n\t\t\t['top-size_' + size]: !!size,\n\t\t\t['top-error']: isError,\n\t\t}\"\n\t>\n\t\t<template v-if=\"Array.isArray(model)\">\n\t\t\t<TopCheckbox\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-optionGroup_item-selected']: model.includes(item.value),\n\t\t\t\t\t['top-optionGroup_item']: true,\n\t\t\t\t}\"\n\t\t\t\tv-for=\"item of items\"\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t\t:isError\n\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t>\n\t\t\t\t{{ item.label }}\n\t\t\t</TopCheckbox>\n\t\t</template>\n\n\t\t<template v-else>\n\t\t\t<TopRadio\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-optionGroup_item-selected']: item.value === model,\n\t\t\t\t\t['top-optionGroup_item']: true,\n\t\t\t\t}\"\n\t\t\t\tv-for=\"item of items\"\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:name\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t\t:isError\n\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t>\n\t\t\t\t{{ item.label }}\n\t\t\t</TopRadio>\n\t\t</template>\n\t</div>\n</template>\n\n<style>\n.top-optionGroup {\n\tuser-select: none;\n\tbox-sizing: border-box;\n\tborder-radius: 8px;\n\tbackground-color: var(--color-layout-middle);\n\theight: var(--top-forms-base-height);\n\tpadding: 2px;\n\tgap: 2px;\n\tdisplay: flex;\n\talign-items: flex-start;\n}\n\n.top-optionGroup_item {\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\tborder-radius: 6px;\n\theight: calc(var(--top-forms-base-height) - 4px);\n\tpadding: 1px var(--top-padding-2);\n\tcolor: var(--color-text-2);\n\tfont-weight: 400;\n\twhite-space: nowrap;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-grow: 1;\n\tgap: var(--top-gap-1);\n}\n\n.top-optionGroup_item:hover {\n\tbackground-color: var(--color-layout-front-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n.top-optionGroup_item-selected {\n\tcolor: var(--color-text-1);\n\tbackground-color: var(--color-bg-lightning-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n.top-optionGroup_item > .top-forms-optionLabel {\n\tflex-grow: 0;\n}\n\n/* indicator */\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item {\n\tjustify-content: center;\n}\n\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item:has(:focus-visible) {\n\toutline: 2px solid var(--color-bg-primary-2);\n\toutline-offset: -1px;\n}\n\n.top-optionGroup-showIndicator_1 > .top-optionGroup_item {\n\tpadding: 1px 3px;\n\tjustify-content: flex-start;\n}\n\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item > .top-forms-option {\n\topacity: 0;\n\twidth: 0;\n\theight: 0;\n\tposition: absolute;\n}\n\n.top-optionGroup_item > .top-forms-option {\n\torder: -1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport OptionGroup from '../libs/optionGroup/optionGroup.vue';\n\nimport type { Props } from './types';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<OptionGroup\n\t\tclass=\"top-radioGroup\"\n\t\tv-model=\"model\"\n\t\t:items=\"$props.items\"\n\t\t:size=\"$props.size\"\n\t\t:showIndicator=\"$props.showIndicator\"\n\t\t:isError=\"$props.isError\"\n\t>\n\t\t<slot/>\n\t</OptionGroup>\n</template>\n","<script setup lang=\"ts\">\nimport OptionGroup from '../libs/optionGroup/optionGroup.vue';\n\nimport type { Props } from './types';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<OptionGroup\n\t\tclass=\"top-checkboxGroup\"\n\t\tv-model=\"model\"\n\t\t:items=\"$props.items\"\n\t\t:size=\"$props.size\"\n\t\t:showIndicator=\"$props.showIndicator\"\n\t\t:isError=\"$props.isError\"\n\t>\n\t\t<slot/>\n\t</OptionGroup>\n</template>\n","<script setup lang=\"ts\">\nimport type { EmitsItemMulti, PropsItemMulti } from './types';\n\ndefineProps<PropsItemMulti>();\ndefineEmits<EmitsItemMulti>();\n</script>\n\n<template>\n\t<div class=\"top-selector2_itemMulti top-ellipsis\">\n\t\t{{ name }}\n\t\t<span\n\t\t\tclass=\"top-selector2_itemMultiDelete\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t@click=\"$emit('delete', id)\"\n\t\t\t@mousedown.stop\n\t\t></span>\n\t</div>\n</template>\n\n<style>\n.top-selector2_itemMulti {\n\tbox-sizing: border-box;\n\tpadding-left: var(--top-padding-2);\n\tborder-radius: var(--top-radius-1, 4px);\n\tborder: 1px solid var(--color-line-primary-1);\n\tbackground: var(--color-layer-primary-2);\n\tmin-height: 22px;\n\tmax-width: 100%;\n\tcolor: var(--color-text-1);\n\tflex-grow: 0;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--top-gap-1);\n}\n\n.top-selector2_itemMultiDelete {\n\t--top-icon-size: 14px;\n\t--top-icon-width: 18px;\n\t--top-icon-color: var(--color-text-1);\n\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 100%;\n\tcursor: pointer;\n}\n\n.top-selector2_itemMultiDelete:hover {\n\tbackground: var(--color-layer-primary-2);\n}\n\n@media screen and (min-width: 900px) {\n\t.top-selector2.top-active .top-selector2_itemMultiDelete {\n\t\tz-index: calc(var(--top-popup-z-index) + 1);\n\t}\n}\n</style>\n","import { ref } from 'vue';\nimport { debounce } from '../../../../core/utils/lodash';\nimport type { Item, Props } from '../types';\n\nexport type API = ReturnType<typeof useAPI>;\n\nexport const useAPI = (api: Props['api'], apiSetSearchParams: Props['apiSetSearchParams'], minLength: number, useCache: Props['useCache']) => {\n\t/**\n\t * Список, полученный через API\n\t */\n\tconst items = ref<Item[]>([]);\n\n\t/**\n\t * Кэш для полученных ответов через apiRequest\n\t */\n\tconst cache = new Map<string, any>();\n\n\t/**\n\t * Флаг - идет загрузка\n\t */\n\tconst isLoading = ref(false);\n\n\tlet searchText = '';\n\tlet nextOffset: number | null | undefined;\n\n\tif (api && !api.params.limit) {\n\t\tapi.params.limit = 100;\n\t}\n\n\t/**\n\t * Выполнить обращение к API\n\t *\n\t * При ошибке вернет undefined\n\t */\n\tconst callAPI = async (): Promise<Api.ResponseSuccess<any, 'get'> | undefined> => {\n\t\tif (!api) return;\n\n\t\tlet cacheKey: string | undefined = undefined;\n\n\t\tif (useCache) {\n\t\t\tcacheKey = JSON.stringify(api.params);\n\t\t\tconst res = cache.get(cacheKey);\n\n\t\t\tif (res) {\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\n\t\tisLoading.value = true;\n\t\tconst res = await api.call();\n\t\tisLoading.value = false;\n\n\t\tif (res.errors) return;\n\n\t\tif (!Array.isArray(res.result)) {\n\t\t\tconsole.warn('Array expected in `res.result`');\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst indexWithError = (res.result as Array<Item | any>).findIndex(item => item.id === undefined || item.name === undefined);\n\t\tif (indexWithError !== -1) {\n\t\t\tconsole.warn(`В result[${indexWithError}] нет id или name`);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (cacheKey) {\n\t\t\tcache.set(cacheKey, res);\n\t\t}\n\n\t\treturn res as Api.ResponseSuccess<any, 'get'>;\n\t};\n\n\t/**\n\t * Загрузить items\n\t */\n\tconst load = async (append: boolean) => {\n\t\tif (!api) return;\n\n\t\tif (append) {\n\t\t\t// данных о следующих страницах не обнаружено\n\t\t\tif (!nextOffset) return;\n\n\t\t\t// дозагружать нельзя, если не завершена предыдущая загрузка\n\t\t\tif (isLoading.value) return;\n\n\t\t\tapi.params.offset = nextOffset;\n\t\t} else {\n\t\t\tapi.params.offset = 0;\n\t\t}\n\n\t\tapiSetSearchParams?.(searchText);\n\n\t\tconst res = await callAPI();\n\t\tif (!res) return;\n\n\t\tnextOffset = res.nextOffset;\n\n\t\tif (append) {\n\t\t\titems.value = items.value.concat(res.result);\n\t\t} else {\n\t\t\titems.value = res.result;\n\t\t}\n\t};\n\n\tconst loadDebounce = debounce(() => load(false), 200);\n\n\t/**\n\t * Выполнить поиск по указанному тексту\n\t *\n\t * Если длина текста меньше minLength, поиск не будет произведен\n\t *\n\t * Если текст не изменился, поиск не будет произведен\n\t *\n\t * @param newSearchText - текст поиска\n\t * @param useDebounce - дедупликация загрузки списка\n\t */\n\tconst setSearchTextAndLoad = (newSearchText: string, useDebounce = true) => {\n\t\tif (!api) return;\n\n\t\tif (newSearchText.length < minLength) return;\n\n\t\t// условия поиска не поменялись, данные загружены\n\t\tif (newSearchText === searchText && items.value.length) return;\n\n\t\tsearchText = newSearchText;\n\n\t\tif (useDebounce) {\n\t\t\tvoid loadDebounce();\n\t\t} else {\n\t\t\tvoid load(false);\n\t\t}\n\t};\n\n\treturn {\n\t\tapiRequest: api,\n\t\titems,\n\t\tisLoading,\n\t\tload,\n\t\tsetSearchTextAndLoad,\n\t};\n};\n","import type { Item, Props } from './types';\n\nexport const ITEM_ID_ALL = 0;\n\n/**\n * Выбран ли элемент\n */\nexport const isSelected = (modelValue: Props['modelValue'], item: Item, checkNameForNullId = true) => {\n\tif (checkNameForNullId && item.id === null) {\n\t\tif (Array.isArray(modelValue)) {\n\t\t\treturn modelValue.some(itemSelected => itemSelected.id === item.id && itemSelected.name === item.name);\n\t\t} else {\n\t\t\treturn item.name === modelValue.name;\n\t\t}\n\t}\n\n\tif (Array.isArray(modelValue)) {\n\t\treturn modelValue.some(itemSelected => itemSelected.id === item.id);\n\t} else {\n\t\treturn item.id === modelValue.id;\n\t}\n};\n","import { computed, ref, type ComputedRef, type Ref } from 'vue';\nimport { invertKeyboardLayout } from '@/core/utils/keyboard';\nimport type { Item, Props } from '../types';\nimport { type API } from './useAPI';\nimport { isSelected, ITEM_ID_ALL } from '../utils';\nimport { useI18n } from '@/core/plugins/i18n';\n\n/**\n * Функционал поиска\n */\nexport const useMenu = (\n\tmodel: Ref<Props['modelValue']>,\n\titems: Ref<Props['items']>,\n\tmultiselect: Props['multiselect'],\n\tappendAllValue: Ref<Props['appendAllValue']>,\n\tappendSearchToResult: Ref<Props['appendSearchToResult']>,\n\tsearchType: Ref<Props['searchType']>,\n\tminLength: number,\n\tapi: API,\n) => {\n\t/**\n\t * Текст поиска по результатам\n\t */\n\tconst searchText = ref('');\n\n\t/**\n\t * Объект, представляющий опцию \"Все\"\n\t */\n\tconst itemAll = {\n\t\tid: ITEM_ID_ALL,\n\t\tname: useI18n().Common.All,\n\t};\n\n\t/**\n\t * Сброс поиска\n\t */\n\tconst resetSearch = () => {\n\t\tsearchText.value = '';\n\t\tapi.items.value = [];\n\t};\n\n\t/**\n\t * Является ли строка поиска достаточной длины для отображения меню\n\t */\n\tconst genIsShort = () => {\n\t\tif (!api.apiRequest) return false;\n\t\tif (searchType.value !== 'inline') return false;\n\t\tif (searchText.value.length >= minLength) return false;\n\n\t\treturn true;\n\t};\n\n\t/**\n\t * Варианты выбора: props.items + \"Выбрать все\"\n\t */\n\tconst localItems: ComputedRef<Item[]> = computed(() => {\n\t\tconst localItems: Item[] = [];\n\n\t\tif (!multiselect && appendAllValue.value) {\n\t\t\tlocalItems.push(itemAll);\n\t\t}\n\n\t\titems.value?.forEach(item => localItems.push({ ...item }));\n\n\t\treturn localItems;\n\t});\n\n\t/**\n\t * Подготовленный список меню, который содержит в сумме:\n\t * - prop.items: указанный список с учетом фильтра и опций компонента\n\t * - api.items: результаты api запроса, если используется api\n\t *\n\t * @returns Отфильтрованный массив элементов для отображения\n\t */\n\tconst itemsForShow = computed(() => {\n\t\tconst searchString = searchText.value.toLowerCase();\n\t\tconst searchStringInvertKeyboard = invertKeyboardLayout(searchString);\n\n\t\tlet items: NonNullable<Props['items']> = [];\n\n\t\tlocalItems.value.forEach((item) => {\n\t\t\tconst itemName = item.name.toLowerCase();\n\n\t\t\tif (\n\t\t\t\titem.id === Number(searchString) ||\n\t\t\t\titemName.includes(searchString) ||\n\t\t\t\titemName.includes(searchStringInvertKeyboard)\n\t\t\t) {\n\t\t\t\tif (itemName === searchString || itemName === searchStringInvertKeyboard) {\n\t\t\t\t\titems.unshift(item);\n\t\t\t\t} else {\n\t\t\t\t\titems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\titems.push(...api.items.value);\n\n\t\t// ввод произвольного значения\n\t\tif (\n\t\t\tappendSearchToResult.value &&\n\t\t\t!!searchText.value &&\n\t\t\t(!items.length || items[0].name.toLowerCase() !== searchString)\n\t\t) {\n\t\t\titems.push({\n\t\t\t\tid: null,\n\t\t\t\tname: searchText.value,\n\t\t\t});\n\t\t}\n\n\t\tif (multiselect) {\n\t\t\titems = items.filter(item => !isSelected(model.value, item));\n\t\t}\n\n\t\treturn items;\n\t});\n\n\t/**\n\t * Выбрать элемент\n\t *\n\t * @param item Элемент для выбора\n\t */\n\tconst selectItem = (item: Item) => {\n\t\tif (multiselect && Array.isArray(model.value)) {\n\t\t\tif (!isSelected(model.value, item)) {\n\t\t\t\tmodel.value = [...model.value, item];\n\t\t\t}\n\t\t} else {\n\t\t\tmodel.value = item;\n\t\t}\n\t};\n\n\t/**\n\t * Выбрать следующее значение\n\t */\n\tconst selectNextItem = () => {\n\t\tif (!Array.isArray(model.value)) {\n\t\t\tconst currentIndex = itemsForShow.value.findIndex(item => item.id === (model.value as Item).id);\n\t\t\tconst nextIndex = (currentIndex + 1) % itemsForShow.value.length;\n\t\t\tmodel.value = { ...itemsForShow.value[nextIndex] };\n\t\t}\n\t};\n\n\t/**\n\t * Удалить выбранное значение по id\n\t *\n\t * @param id Идентификатор элемента для удаления\n\t */\n\tconst deleteItemById = async (id: Item['id']) => {\n\t\tif (Array.isArray(model.value)) {\n\t\t\tmodel.value = model.value.filter(item => item.id !== id);\n\t\t}\n\t};\n\n\treturn {\n\t\tsearchText,\n\t\tresetSearch,\n\t\tgenIsShort,\n\t\titems: localItems,\n\t\titemsForShow,\n\t\tselectItem,\n\t\tselectNextItem,\n\t\tdeleteItemById,\n\t};\n};\n","<script setup lang=\"ts\">\nimport { computed, ref, toRef, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { TopPopup, TopPopupListItem, TopPopupWidgetInput } from '@/components/popup/popup';\nimport { TopPreloader } from '@/components/forms/forms';\nimport type { Item, Props, Slots } from './types';\nimport Selector2ItemMulti from './itemMulti.vue';\nimport { useAPI } from './composables/useAPI';\nimport { useMenu } from './composables/useMenu';\nimport type { TopLibPopup } from '../../popup/lib/popup';\n\nconst props = withDefaults(defineProps<Props>(), {\n\titems: () => [] as Item[],\n\tsize: 's',\n\tminLength: 0,\n\tsearchType: 'popup',\n});\n\nconst model = defineModel<Props['modelValue']>({ required: true });\n\ndefineSlots<Slots>();\n\nconst searchTypeLocal = computed(() => {\n\t// multiselect не поддерживает inline ввода\n\tif (props.searchType === 'inline' && props.multiselect) return 'popup';\n\n\t// В мобильной версии popup работает в полноэкранном режиме\n\tif (props.searchType === 'inline' && Core.state.isMobile) return 'popup';\n\n\treturn props.searchType;\n});\n\nlet minLength = 0;\nif (searchTypeLocal.value === 'inline' && props.minLength) {\n\tminLength = props.minLength;\n}\n\n/**\n * Объект для работы с API\n */\nconst api = useAPI(props.api, props.apiSetSearchParams, minLength, props.useCache);\n\n/**\n * Объект для работы с меню\n */\nconst menu = useMenu(\n\tmodel,\n\ttoRef(props, 'items'),\n\tprops.multiselect,\n\ttoRef(props, 'appendAllValue'),\n\ttoRef(props, 'appendSearchToResult'),\n\tsearchTypeLocal,\n\tminLength,\n\tapi,\n);\n\nconst component = computed(() => {\n\tif (props.buttonProps) return 'TopButton';\n\tif (searchTypeLocal.value === 'inline') return 'TopInput';\n\n\treturn 'div';\n});\n\n/**\n * Экземпляр компонента Popup\n */\nconst popupRef = ref<any>(null);\n\n/**\n * Получить доступ к объекту popup\n */\nconst getPopup = (): TopLibPopup | undefined => {\n\treturn popupRef.value?.popup;\n};\n\nif (api.apiRequest) {\n\t// отложенный поиск при вводе текста\n\twatch(menu.searchText, () => {\n\t\tapi.setSearchTextAndLoad(menu.searchText.value);\n\n\t\tif (searchTypeLocal.value === 'inline') {\n\t\t\tif (menu.genIsShort()) {\n\t\t\t\tgetPopup()?.close();\n\t\t\t}\n\t\t}\n\t});\n}\n\nwatch(model, () => {\n\t/**\n\t * При изменении значения модели в режиме inline необходимо очистить поле поиска,\n\t * так как поиск больше не актуален после выбора значения\n\t */\n\tif (searchTypeLocal.value === 'inline') {\n\t\tmenu.resetSearch();\n\t}\n});\n\nconst placeholder = computed(() => {\n\tif (Array.isArray(model.value) || props.multiselect || !props.selectedAsPlaceholder && searchTypeLocal.value !== 'inline') {\n\t\treturn props.placeholder;\n\t}\n\n\treturn model.value?.name || props.placeholder;\n});\n\n/**\n * Обработчик ввода клавиш на кнопке или поле ввода\n */\nconst onOpenerKeydown = (e: KeyboardEvent) => {\n\tlet needOpen = false;\n\n\tswitch (e.key) {\n\t\tcase 'Delete':\n\t\tcase 'Backspace':\n\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tmodel.value.pop();\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'ArrowUp':\n\t\tcase 'ArrowRight':\n\t\tcase 'ArrowDown':\n\t\tcase 'ArrowLeft':\n\t\tcase 'Enter':\n\t\tcase ' ':\n\t\t\tneedOpen = true;\n\n\t\t\tbreak;\n\t\tcase 'Escape':\n\t\t\tif (searchTypeLocal.value === 'inline') {\n\t\t\t\t// очистка введенного текста\n\t\t\t\tmenu.resetSearch();\n\t\t\t}\n\n\t\t\tbreak;\n\t}\n\n\t// введен символ\n\tconst symbolPressed = e.key.length === 1 && !e.ctrlKey && !e.metaKey;\n\n\t// введен символ\n\tif (searchTypeLocal.value === 'popup' || searchTypeLocal.value === 'inline') {\n\t\tif (symbolPressed) {\n\t\t\tneedOpen = true;\n\t\t}\n\t}\n\n\t// popup уже открыт\n\tif (getPopup()?.elPopup) {\n\t\tneedOpen = false;\n\t}\n\n\tif (needOpen) {\n\t\tif (searchTypeLocal.value === 'popup') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\t// введен символ\n\t\t\tif (symbolPressed) {\n\t\t\t\t// начало ввода, сразу ввести первый символ вместе с открытием popup\n\t\t\t\tif (!menu.searchText.value) {\n\t\t\t\t\tmenu.searchText.value = e.key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t(e.currentTarget as HTMLElement)?.click();\n\t}\n};\n\nlet disabledFocusToOpen = false;\n\nconst onFocus = (e: FocusEvent) => {\n\tif (disabledFocusToOpen) return;\n\n\tif (searchTypeLocal.value === 'inline') {\n\t\t(e.currentTarget as HTMLElement)?.click();\n\t}\n};\n\nconst onClickChanger = (e: MouseEvent) => {\n\te.preventDefault();\n\n\tdisabledFocusToOpen = true;\n\t(e.currentTarget as HTMLElement)?.parentElement?.focus();\n\tdisabledFocusToOpen = false;\n\n\tmenu.selectNextItem();\n};\n\n/**\n * Обработчик открытия попапа\n */\nconst onOpen = () => {\n\tdisabledFocusToOpen = true;\n\n\tif (api.apiRequest) {\n\t\tif (menu.genIsShort()) {\n\t\t\tgetPopup()?.close();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// при открытии сразу выполнить поиск\n\t\tapi.setSearchTextAndLoad(menu.searchText.value, false);\n\t}\n};\n\n/**\n * Обработчик закрытия попапа\n */\nconst onClose = () => {\n\tsetTimeout(() => {\n\t\tdisabledFocusToOpen = false;\n\t}, 100);\n\n\t// очистка введенного текста\n\tif (searchTypeLocal.value === 'popup') {\n\t\tif (menu.searchText.value) menu.resetSearch();\n\t}\n};\n\n/**\n * Обработчик прокрутки списка контента\n *\n * Для дозагрузки элеменов через api\n *\n * @param {Event} e - Событие прокрутки\n */\nconst onScrollContentList = (e: Event) => {\n\tconst el = e.target as HTMLElement;\n\n\tif (el.scrollTop / (el.scrollHeight - el.offsetHeight) > 0.8) {\n\t\tapi.load(true);\n\t}\n};\n\n// для storybook\nif ((window as any).__STORYBOOK_PREVIEW__) {\n\twatch(\n\t\t() => props.multiselect,\n\t\t() => {\n\t\t\tif (props.multiselect) {\n\t\t\t\tif (!Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\tname: 'Выбери меня',\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = {\n\t\t\t\t\t\tid: null,\n\t\t\t\t\t\tname: '',\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ immediate: true },\n\t);\n\n\twatch(\n\t\t() => props.searchType,\n\t\t() => {\n\t\t\t// пауза для установки props в адресной строке\n\t\t\tsetTimeout(() => {\n\t\t\t\tlocation.reload();\n\t\t\t}, 500);\n\t\t},\n\t);\n}\n</script>\n\n<template>\n\t<TopPopup\n\t\tref=\"popupRef\"\n\t\t@open=\"onOpen()\"\n\t\t@close=\"onClose()\"\n\t\t@scrollContentList=\"api ? onScrollContentList($event) : undefined\"\n\t\t:notch=\"searchTypeLocal !== 'inline'\"\n\t\t:transitionDuration=\"0\"\n\t>\n\t\t<template #opener>\n\t\t\t<component\n\t\t\t\t:is=\"component\"\n\n\t\t\t\t:=\"buttonProps\"\n\n\t\t\t\tref=\"subcomponentSelector\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-selector2' : true,\n\t\t\t\t\t'top-selector2-multiselect': multiselect,\n\t\t\t\t\t['top-selector2-' + modificator]: !!modificator,\n\t\t\t\t\t'top-as-input': !buttonProps,\n\t\t\t\t\t'top-as-selector': true,\n\t\t\t\t\t['top-size_' + size]: true,\n\t\t\t\t\t['top-disabled']: disabled,\n\t\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t\t['top-error']: isError,\n\t\t\t\t}\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@keydown=\"onOpenerKeydown\"\n\t\t\t\tv-top-focus.onupdate=\"isError\"\n\n\t\t\t\t:placeholder\n\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t\t@focus=\"onFocus\"\n\t\t\t\t@blur=\"getPopup()?.isClosed ? menu.resetSearch() : ''\"\n\t\t\t>\n\t\t\t\t<template v-if=\"multiselect\">\n\t\t\t\t\t<div class=\"top-selector2_activeItems\">\n\t\t\t\t\t\t<Selector2ItemMulti\n\t\t\t\t\t\t\tv-for=\"item of model as Item[]\"\n\t\t\t\t\t\t\t:id=\"item.id\"\n\t\t\t\t\t\t\t:name=\"item.name\"\n\t\t\t\t\t\t\t@delete=\"menu.deleteItemById\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<span v-if=\"searchTypeLocal !== 'inline' && !multiselect\" class=\"top-selector2_activeName top-ellipsis\">\n\t\t\t\t\t{{ !Array.isArray(model) ? model.name : '' }}\n\t\t\t\t</span>\n\n\t\t\t\t<span v-if=\"multiselect && !model.length\" class=\"top-selector2_placeholder top-ellipsis\">\n\t\t\t\t\t{{ placeholder }}\n\t\t\t\t</span>\n\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"addChanger && !buttonProps && !multiselect && menu.items.value.length > 1 && !disabled\"\n\t\t\t\t\tclass=\"top-changer top-changer-selector top-popup_widget\"\n\t\t\t\t\tdata-top-popup-disabled=\"true\"\n\t\t\t\t\t@click=\"onClickChanger\"\n\t\t\t\t></span>\n\t\t\t</component>\n\t\t</template>\n\n\t\t<template #widget v-if=\"searchTypeLocal === 'popup'\">\n\t\t\t<TopPopupWidgetInput\n\t\t\t\ttitle=\"Поиск\"\n\t\t\t\ticon=\"\"\n\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t\t:isLoading=\"api.isLoading.value && !api.apiRequest?.params.offset\"\n\t\t\t\t:placeholder\n\t\t\t/>\n\t\t</template>\n\n\t\t<template #contentList>\n\t\t\t<TopPopupListItem\n\t\t\t\tv-for=\"item of menu.itemsForShow.value\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-active': !Array.isArray(model) && !multiselect && model.id === item.id && model.name === item.name,\n\t\t\t\t}\"\n\t\t\t\t:key=\"item.id ?? undefined\"\n\t\t\t\t:closeByClick=\"!multiselect || Core.state.isMobile\"\n\t\t\t\t@click=\"menu.selectItem(item)\"\n\t\t\t>\n\t\t\t\t<slot\n\t\t\t\t\tv-if=\"$slots.item\"\n\t\t\t\t\tname=\"item\"\n\t\t\t\t\t:item\n\t\t\t\t></slot>\n\n\t\t\t\t<template\n\t\t\t\t\tv-else\n\t\t\t\t>\n\t\t\t\t\t{{ item.name }}\n\t\t\t\t</template>\n\t\t\t</TopPopupListItem>\n\n\t\t\t<TopPopupListItem\n\t\t\t\tv-if=\"!api.isLoading.value && !menu.itemsForShow.value.length\"\n\t\t\t\ttype=\"regular\"\n\t\t\t>\n\t\t\t\t{{ $i18n.Common.No_results }}\n\t\t\t</TopPopupListItem>\n\n\t\t\t<!-- Индикатор загрузки, первичная дозагрузка отображается в поле поиска, если оно отображено -->\n\t\t\t<TopPopupListItem\n\t\t\t\tv-if=\"api.isLoading.value && (searchType !== 'popup' || api.apiRequest?.params.offset)\"\n\t\t\t\ttype=\"regular\"\n\t\t\t>\n\t\t\t\t<TopPreloader type=\"circles\"/>\n\t\t\t</TopPopupListItem>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style>\n.top-selector2 {\n\twidth: 180px;\n\tpadding: var(--top-padding-1) var(--top-forms-padding);\n}\n\n.top-selector2::placeholder,\n.top-selector2_placeholder {\n\tcolor: var(--color-text-2);\n}\n\n.top-selector2_placeholder {\n\tpadding-left: var(--top-padding-1);\n}\n\n.top-selector2-multiselect {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tflex-grow: 1;\n}\n\n.top-selector2.top-active {\n\t--top-forms-border-color: var(--top-forms-border-color-hover);\n}\n\n.top-selector2_activeItems {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--top-padding-1);\n\tmax-width: 100%;\n}\n\n.top-selector2_activeName {\n\twhite-space: nowrap;\n}\n\n.top-changer-selector {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tmargin: calc(0px - var(--top-padding-1));\n\ttransform: translateX(0);\n}\n\n.top-selector2.top-button {\n\tjustify-content: start;\n}\n\n.top-selector2.top-input_input ~ .top-changer-selector {\n\ttransform: translateX(-52px);\n}\n\n.top-selector2.top-as-selector {\n\tpadding-right: calc(var(--top-selector-arrow-width) + var(--top-padding-2));\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { Props, Slots } from './types';\n\nwithDefaults(defineProps<Props>(), {\n\tstyling: 'default',\n\tsize: 'default',\n});\n\ndefineSlots<Slots>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t['top-info']: true,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-info-styling_' + styling]: true,\n\t\t}\"\n\t\t:data-top-icon=\"icon\"\n\t>\n\t\t<div class=\"top-info_text\">\n\t\t\t<slot></slot>\n\t\t</div>\n\n\t\t<span v-if=\"$slots.additional\" class=\"top-info_value\">\n\t\t\t<slot name=\"additional\"></slot>\n\t\t</span>\n\t</div>\n</template>\n\n<style>\n.top-info {\n\t--top-icon-width: var(--top-icon-size);\n\n\tborder-radius: var(--top-forms-radius);\n\tbox-sizing: border-box;\n\tmin-height: var(--top-forms-base-height);\n\tpadding: var(--top-padding-1) var(--top-padding-2);\n\tflex-grow: 5;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: var(--top-gap-2);\n}\n\n.top-info_text {\n\tflex-grow: 1;\n}\n\n.top-info_value {\n\tfont-weight: bold;\n}\n\n/* size */\n.top-info.top-size_default {\n\tborder-radius: var(--top-radius-3);\n\tpadding: var(--top-padding-4);\n}\n\n/* styling */\n.top-info-styling_default {\n\t--top-icon-color: var(--color-text-2);\n\n\tbackground: var(--color-layer-1);\n}\n\n.top-info-styling_info {\n\t--top-icon-color: var(--color-text-primary);\n\n\tbackground: var(--color-layer-primary-1);\n}\n\n.top-info-styling_warning {\n\t--top-icon-color: var(--color-text-warning);\n\n\tbackground: var(--color-layer-warning-1);\n}\n\n.top-info-styling_negative {\n\t--top-icon-color: var(--color-text-negative);\n\n\tbackground: var(--color-layer-negative-1);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { TopButton } from '@/components/forms/forms';\nimport type { Emits, Props } from '@/components/formsExt/policy/types';\n\ndefineProps<Props>();\nconst emits = defineEmits<Emits>();\n\nconst isVisible = ref(true);\n\nconst onAccept = () => {\n\tisVisible.value = false;\n\n\temits('accept');\n};\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"isVisible\"\n\t\tclass=\"top-policy\"\n\t>\n\t\t<div class=\"top-policy_title\">\n\t\t\t{{ title }}\n\t\t</div>\n\n\t\t<div\n\t\t\tclass=\"top-policy_description\"\n\t\t\tv-html=\"description\"\n\t\t></div>\n\n\t\t<TopButton\n\t\t\tsize=\"m\"\n\t\t\t@click=\"onAccept\"\n\t\t>\n\t\t\t{{ acceptText }}\n\t\t</TopButton>\n\t</div>\n</template>\n\n<style>\n.top-policy {\n\tbox-sizing: border-box;\n\tbox-shadow: var(--top-shadow-b);\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-bg-lightning-1);\n\twidth: 600px;\n\tpadding: var(--top-padding-4);\n\tposition: fixed;\n\tright: var(--top-gap-10);\n\tbottom: var(--top-gap-10);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-4);\n\tz-index: 10000;\n}\n\n.top-policy_title {\n\tfont-size: 24px;\n\tfont-weight: 700;\n}\n\n.top-policy_description {\n\tfont-size: 14px;\n}\n\n@media screen and (max-width: 900px) {\n\t.top-policy {\n\t\twidth: 100%;\n\t\tright: 0;\n\t\tbottom: calc(var(--top-gap-5) + var(--toolbar-height, 0px));\n\t}\n}\n</style>\n"],"names":["isChanged","vue","localValue","props","submit","value","emit","_cache","$event","clickOnTitle","_ctx","name","placeholder","rows","minHeight","expandable","disabled","readonly","isError","isFocused","cancel","forms","intermediateValue","elRef","model","valuesAvailable","item","size","items","cache","isLoading","nextOffset","api","res2","res","indexWithError","cacheKey","load","append","callAPI","loadDebounce","newSearchText","minLength","modelValue","itemSelected","useMenu","multiselect","appendAllValue","appendSearchToResult","searchType","searchText","localItems","localItems2","itemAll","_a","itemsForShow","searchStringInvertKeyboard","utils_keyboard","searchString","items2","isSelected","resetSearch","genIsShort","nextIndex","id","searchTypeLocal","useAPI","component","popupRef","menu","getPopup","onOpenerKeydown","e","symbolPressed","_b","onFocus","onClickChanger","onScrollContentList","el","onOpen","onClose","modificator","_hoisted_1$2","widgetInput_vue_vue_type_script_setup_true_lang","icon","isVisible","_hoisted_2","description","onAccept"],"mappings":"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"}
1
+ {"version":3,"file":"formsExt.amd.js","sources":["../../src/components/formsExt/editArea/editArea.vue","../../src/components/formsExt/editInput/editInput.vue","../../src/components/formsExt/libs/optionGroup/optionGroup.vue","../../src/components/formsExt/radioGroup/radioGroup.vue","../../src/components/formsExt/checkboxGroup/checkboxGroup.vue","../../src/components/formsExt/selector2/itemMulti.vue","../../src/components/formsExt/selector2/composables/useAPI.ts","../../src/components/formsExt/selector2/utils.ts","../../src/components/formsExt/selector2/composables/useMenu.ts","../../src/components/formsExt/selector2/selector2.vue","../../src/components/formsExt/info/info.vue","../../src/components/formsExt/policy/policy.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport Button from '@/components/forms/button/button.vue';\nimport type { Emits, Props } from './types';\nimport Textarea from '@/components/forms/textarea/textarea.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tdefaultValue: '',\n\tcancelText: 'Cancel',\n\tsubmitText: 'Send',\n\tcloseText: 'Close',\n\texpandable: true,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = ref(props.defaultValue);\n\nconst isFocused = ref(props.isFocused);\n\nconst isChanged = computed(() => localValue.value !== props.defaultValue);\n\nconst submit = (value: string) => {\n\temit('submit', value);\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst cancel = () => {\n\tif (props.forceShowCloseBtn && !isChanged.value) {\n\t\temit('close');\n\n\t\treturn;\n\t}\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst clickOnTitle = () => {\n\tif (props.attachToKeyboard) emit('clickOnTitle');\n};\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-editArea': true,\n\t\t\t'top-editArea-attachedToKeyboard': attachToKeyboard,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tv-if=\"title\"\n\t\t\tclass=\"top-editArea_title\"\n\t\t\t@click=\"clickOnTitle()\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-editArea_form': true,\n\t\t\t\t'top-forms-focusable': true,\n\t\t\t\t'top-as-input': true,\n\t\t\t\t'top-error': isError,\n\t\t\t\t'top-focus': isFocused,\n\t\t\t}\"\n\t\t>\n\t\t\t<Textarea\n\t\t\t\tv-model=\"localValue\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:rows=\"rows\"\n\t\t\t\t:minHeight=\"minHeight\"\n\t\t\t\t:expandable=\"expandable\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:readonly=\"readonly\"\n\t\t\t\t:isError=\"isError\"\n\t\t\t\t:hint=\"hint\"\n\t\t\t\tclass=\"top-editArea_element\"\n\t\t\t\t@focus=\"() => isFocused = true\"\n\t\t\t\t@blur=\"() => isFocused = false\"\n\t\t\t\t@keyup.esc=\"cancel\"\n\t\t\t\t@keyup.ctrl.enter=\"submit(localValue)\"\n\t\t\t/>\n\n\t\t\t<div class=\"top-editArea_footer\">\n\t\t\t\t<Button\n\t\t\t\t\tv-if=\"isChanged || forceShowCloseBtn\"\n\t\t\t\t\t:icon=\"$core.state.isMobile ? '': ''\"\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\tstyling=\"soft\"\n\t\t\t\t\t@click=\"cancel\"\n\t\t\t\t>\n\t\t\t\t\t<template\n\t\t\t\t\t\t#default\n\t\t\t\t\t\tv-if=\"!$core.state.isMobile\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ cancelText }}\n\t\t\t\t\t</template>\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tv-if=\"isChanged\"\n\t\t\t\t\t:icon=\"$core.state.isMobile ? '': ''\"\n\t\t\t\t\t@click=\"submit(localValue)\"\n\t\t\t\t>\n\t\t\t\t\t<template\n\t\t\t\t\t\t#default\n\t\t\t\t\t\tv-if=\"!$core.state.isMobile\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ submitText }}\n\t\t\t\t\t</template>\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-editArea {\n\t--top-editArea-bottom: env(keyboard-inset-height, 0px);\n\t--top-editArea-offset-bottom: 0px;\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n}\n\n.top-editArea_title {\n\tfont-size: 12px;\n}\n\n.top-editArea_form {\n\tflex-direction: column;\n}\n\n/* textarea в EditArea */\n.top-textarea {\n\twidth: 100%;\n}\n\n.top-editArea_element.top-textarea_textarea {\n\t--top-forms-border-width: 0px;\n\n\toutline: none;\n\tanimation: none;\n}\n\n/* footer */\n.top-editArea_footer {\n\tpadding: var(--top-forms-padding);\n\tdisplay: flex;\n\tmin-height: 32px;\n\talign-self: flex-end;\n\tjustify-content: flex-end;\n\tgap: var(--top-forms-padding);\n}\n\n/* attachedToKeyboard */\n.top-editArea-attachedToKeyboard {\n\tbackground: var(--top-forms-background-color);\n\tposition: fixed;\n\tbottom: calc(var(--top-editArea-offset-bottom) + var(--top-editArea-bottom));\n\tright: 0;\n\tleft: 0;\n\tz-index: 2;\n\tgap: 0;\n\ttransition: bottom var(--transition-fast);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_form {\n\tborder-radius: 0;\n\tborder: none;\n\tborder-top: 1px solid var(--top-forms-border-color);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_title {\n\tcursor: pointer;\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\tpadding: var(--top-forms-padding);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_footer > [data-top-icon] {\n\tborder-radius: 100%;\n}\n\n@media screen and (max-width: 900px) {\n\t.top-editArea_form{\n\t\tflex-direction: row;\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, toRef, watch } from 'vue';\nimport type { Emits, Props } from './types';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = defineProps<Props>();\n\nconst intermediateValue = ref(props.modelValue);\n\nwatch(toRef(props.modelValue), () => {\n\tintermediateValue.value = props.modelValue;\n});\n\nconst emit = defineEmits<Emits>();\n\nconst submit = () => {\n\temit('update:modelValue', intermediateValue.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-editInput\">\n\t\t<TopInput\n\t\t\t:=\"input\"\n\t\t\t@keydown.esc.capture.stop=\"intermediateValue = modelValue\"\n\t\t\t@keydown.enter.stop=\"submit\"\n\t\t\tv-model=\"intermediateValue\"\n\t\t/>\n\n\t\t<TopButton\n\t\t\tv-if=\"intermediateValue !== modelValue\"\n\t\t\ticon=\"\"\n\t\t\tstyling=\"soft\"\n\t\t\t:=\"button\"\n\t\t\t@click=\"submit\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n.top-editInput {\n\twidth: 220px;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: var(--top-gap-1);\n}\n\n.top-editInput .top-input {\n\twidth: unset;\n\tflex-grow: 1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { Props } from './types';\nimport TopCheckbox from '@/components/forms/checkbox/checkbox.vue';\nimport TopRadio from '@/components/forms/radio/radio.vue';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst elRef = ref<HTMLElement | null>(null);\n\nwatch(model, () => {\n\tconst valuesAvailable = props.items.map(item => item.value);\n\n\tif (Array.isArray(model.value)) {\n\t\t// есть ли неподдерживаемые значения\n\t\tconst valueIsWrong = model.value.find((value) => {\n\t\t\treturn !valuesAvailable.includes(value);\n\t\t});\n\n\t\tif (valueIsWrong) {\n\t\t\t// оставить только поддерживаемые значения\n\t\t\tmodel.value = model.value.filter((value) => {\n\t\t\t\treturn valuesAvailable.includes(value);\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif (!valuesAvailable.includes(model.value)) {\n\t\t\tmodel.value = valuesAvailable[0] ?? '';\n\t\t}\n\t}\n\n\telRef.value?.querySelector('.radioGroup_item-selected')?.scrollIntoView();\n}, { immediate: true });\n\nconst name = 'optionGroup-' + Math.random();\n</script>\n\n<template>\n\t<div\n\t\tref=\"elRef\"\n\t\t:class=\"{\n\t\t\t['top-optionGroup']: true,\n\t\t\t['top-optionGroup-showIndicator_' + Number(showIndicator)]: true,\n\t\t\t['top-scrollBarXHidding']: true,\n\t\t\t['top-size_' + size]: !!size,\n\t\t\t['top-error']: isError,\n\t\t}\"\n\t>\n\t\t<template v-if=\"Array.isArray(model)\">\n\t\t\t<TopCheckbox\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-optionGroup_item-selected']: model.includes(item.value),\n\t\t\t\t\t['top-optionGroup_item']: true,\n\t\t\t\t}\"\n\t\t\t\tv-for=\"item of items\"\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t\t:isError\n\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"item.label\">\n\t\t\t\t\t{{ item.label }}\n\t\t\t\t</template>\n\t\t\t</TopCheckbox>\n\t\t</template>\n\n\t\t<template v-else>\n\t\t\t<TopRadio\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-optionGroup_item-selected']: item.value === model,\n\t\t\t\t\t['top-optionGroup_item']: true,\n\t\t\t\t}\"\n\t\t\t\tv-for=\"item of items\"\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:name\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t\t:isError\n\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"item.label\">\n\t\t\t\t\t{{ item.label }}\n\t\t\t\t</template>\n\t\t\t</TopRadio>\n\t\t</template>\n\t</div>\n</template>\n\n<style>\n.top-optionGroup {\n\tuser-select: none;\n\tbox-sizing: border-box;\n\tborder-radius: 8px;\n\tbackground-color: var(--color-layout-middle);\n\theight: var(--top-forms-base-height);\n\tpadding: 2px;\n\tgap: 2px;\n\tdisplay: flex;\n\talign-items: flex-start;\n}\n\n.top-optionGroup_item {\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\tborder-radius: 6px;\n\theight: calc(var(--top-forms-base-height) - 4px);\n\tpadding: 1px var(--top-padding-2);\n\tcolor: var(--color-text-2);\n\tfont-weight: 400;\n\twhite-space: nowrap;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-grow: 1;\n\tgap: var(--top-gap-1);\n}\n\n.top-optionGroup_item:hover {\n\tbackground-color: var(--color-layout-front-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n.top-optionGroup_item-selected {\n\tcolor: var(--color-text-1);\n\tbackground-color: var(--color-bg-lightning-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n.top-optionGroup_item > .top-forms-optionLabel {\n\tflex-grow: 0;\n}\n\n/* indicator */\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item {\n\tjustify-content: center;\n}\n\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item:has(:focus-visible) {\n\toutline: 2px solid var(--color-bg-primary-2);\n\toutline-offset: -1px;\n}\n\n.top-optionGroup-showIndicator_1 > .top-optionGroup_item {\n\tpadding: 1px 3px;\n\tjustify-content: flex-start;\n}\n\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item > .top-forms-option {\n\topacity: 0;\n\twidth: 0;\n\theight: 0;\n\tposition: absolute;\n}\n\n.top-optionGroup_item > .top-forms-option {\n\torder: -1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport OptionGroup from '../libs/optionGroup/optionGroup.vue';\n\nimport type { Props } from './types';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<OptionGroup\n\t\tclass=\"top-radioGroup\"\n\t\tv-model=\"model\"\n\t\t:items=\"$props.items\"\n\t\t:size=\"$props.size\"\n\t\t:showIndicator=\"$props.showIndicator\"\n\t\t:isError=\"$props.isError\"\n\t>\n\t\t<slot/>\n\t</OptionGroup>\n</template>\n","<script setup lang=\"ts\">\nimport OptionGroup from '../libs/optionGroup/optionGroup.vue';\n\nimport type { Props } from './types';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<OptionGroup\n\t\tclass=\"top-checkboxGroup\"\n\t\tv-model=\"model\"\n\t\t:items=\"$props.items\"\n\t\t:size=\"$props.size\"\n\t\t:showIndicator=\"$props.showIndicator\"\n\t\t:isError=\"$props.isError\"\n\t>\n\t\t<slot/>\n\t</OptionGroup>\n</template>\n","<script setup lang=\"ts\">\nimport type { EmitsItemMulti, PropsItemMulti } from './types';\n\ndefineProps<PropsItemMulti>();\ndefineEmits<EmitsItemMulti>();\n</script>\n\n<template>\n\t<div class=\"top-selector2_itemMulti top-ellipsis\">\n\t\t{{ name }}\n\t\t<span\n\t\t\tclass=\"top-selector2_itemMultiDelete\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t@click=\"$emit('delete', id)\"\n\t\t\t@mousedown.stop\n\t\t></span>\n\t</div>\n</template>\n\n<style>\n.top-selector2_itemMulti {\n\tbox-sizing: border-box;\n\tpadding-left: var(--top-padding-2);\n\tborder-radius: var(--top-radius-1, 4px);\n\tborder: 1px solid var(--color-line-primary-1);\n\tbackground: var(--color-layer-primary-2);\n\tmin-height: 22px;\n\tmax-width: 100%;\n\tcolor: var(--color-text-1);\n\tflex-grow: 0;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--top-gap-1);\n}\n\n.top-selector2_itemMultiDelete {\n\t--top-icon-size: 14px;\n\t--top-icon-width: 18px;\n\t--top-icon-color: var(--color-text-1);\n\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 100%;\n\tcursor: pointer;\n}\n\n.top-selector2_itemMultiDelete:hover {\n\tbackground: var(--color-layer-primary-2);\n}\n\n@media screen and (min-width: 900px) {\n\t.top-selector2.top-active .top-selector2_itemMultiDelete {\n\t\tz-index: calc(var(--top-popup-z-index) + 1);\n\t}\n}\n</style>\n","import { ref } from 'vue';\nimport { debounce } from '../../../../core/utils/lodash';\nimport type { Item, Props } from '../types';\n\nexport type API = ReturnType<typeof useAPI>;\n\nexport const useAPI = (api: Props['api'], apiSetSearchParams: Props['apiSetSearchParams'], minLength: number, useCache: Props['useCache']) => {\n\t/**\n\t * Список, полученный через API\n\t */\n\tconst items = ref<Item[]>([]);\n\n\t/**\n\t * Кэш для полученных ответов через apiRequest\n\t */\n\tconst cache = new Map<string, any>();\n\n\t/**\n\t * Флаг - идет загрузка\n\t */\n\tconst isLoading = ref(false);\n\n\tlet searchText = '';\n\tlet nextOffset: number | null | undefined;\n\n\tif (api && !api.params.limit) {\n\t\tapi.params.limit = 100;\n\t}\n\n\t/**\n\t * Выполнить обращение к API\n\t *\n\t * При ошибке вернет undefined\n\t */\n\tconst callAPI = async (): Promise<Api.ResponseSuccess<any, 'get'> | undefined> => {\n\t\tif (!api) return;\n\n\t\tlet cacheKey: string | undefined = undefined;\n\n\t\tif (useCache) {\n\t\t\tcacheKey = JSON.stringify(api.params);\n\t\t\tconst res = cache.get(cacheKey);\n\n\t\t\tif (res) {\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\n\t\tisLoading.value = true;\n\t\tconst res = await api.call();\n\t\tisLoading.value = false;\n\n\t\tif (res.errors) return;\n\n\t\tif (!Array.isArray(res.result)) {\n\t\t\tconsole.warn('Array expected in `res.result`');\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst indexWithError = (res.result as Array<Item | any>).findIndex(item => item.id === undefined || item.name === undefined);\n\t\tif (indexWithError !== -1) {\n\t\t\tconsole.warn(`В result[${indexWithError}] нет id или name`);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (cacheKey) {\n\t\t\tcache.set(cacheKey, res);\n\t\t}\n\n\t\treturn res as Api.ResponseSuccess<any, 'get'>;\n\t};\n\n\t/**\n\t * Загрузить items\n\t */\n\tconst load = async (append: boolean) => {\n\t\tif (!api) return;\n\n\t\tif (append) {\n\t\t\t// данных о следующих страницах не обнаружено\n\t\t\tif (!nextOffset) return;\n\n\t\t\t// дозагружать нельзя, если не завершена предыдущая загрузка\n\t\t\tif (isLoading.value) return;\n\n\t\t\tapi.params.offset = nextOffset;\n\t\t} else {\n\t\t\tapi.params.offset = 0;\n\t\t}\n\n\t\tapiSetSearchParams?.(searchText);\n\n\t\tconst res = await callAPI();\n\t\tif (!res) return;\n\n\t\tnextOffset = res.nextOffset;\n\n\t\tif (append) {\n\t\t\titems.value = items.value.concat(res.result);\n\t\t} else {\n\t\t\titems.value = res.result;\n\t\t}\n\t};\n\n\tconst loadDebounce = debounce(() => load(false), 200);\n\n\t/**\n\t * Выполнить поиск по указанному тексту\n\t *\n\t * Если длина текста меньше minLength, поиск не будет произведен\n\t *\n\t * Если текст не изменился, поиск не будет произведен\n\t *\n\t * @param newSearchText - текст поиска\n\t * @param useDebounce - дедупликация загрузки списка\n\t */\n\tconst setSearchTextAndLoad = (newSearchText: string, useDebounce = true) => {\n\t\tif (!api) return;\n\n\t\tif (newSearchText.length < minLength) return;\n\n\t\t// условия поиска не поменялись, данные загружены\n\t\tif (newSearchText === searchText && items.value.length) return;\n\n\t\tsearchText = newSearchText;\n\n\t\tif (useDebounce) {\n\t\t\tvoid loadDebounce();\n\t\t} else {\n\t\t\tvoid load(false);\n\t\t}\n\t};\n\n\treturn {\n\t\tapiRequest: api,\n\t\titems,\n\t\tisLoading,\n\t\tload,\n\t\tsetSearchTextAndLoad,\n\t};\n};\n","import type { Item, Props } from './types';\n\nexport const ITEM_ID_ALL = 0;\nexport const ITEM_ID_NEW = null;\n\n/**\n * Выбран ли элемент\n */\nexport const isSelected = (modelValue: Props['modelValue'], item: Item, checkNameForNullId = true) => {\n\tif (checkNameForNullId && item.id === ITEM_ID_NEW) {\n\t\tif (Array.isArray(modelValue)) {\n\t\t\treturn modelValue.some(itemSelected => itemSelected.id === item.id && itemSelected.name === item.name);\n\t\t} else {\n\t\t\treturn item.name === modelValue.name;\n\t\t}\n\t}\n\n\tif (Array.isArray(modelValue)) {\n\t\treturn modelValue.some(itemSelected => itemSelected.id === item.id);\n\t} else {\n\t\treturn item.id === modelValue.id;\n\t}\n};\n","import { computed, type ComputedRef, ref, type Ref } from 'vue';\nimport { invertKeyboardLayout } from '@/core/utils/keyboard';\nimport type { Item, Props } from '../types';\nimport { type API } from './useAPI';\nimport { isSelected, ITEM_ID_ALL, ITEM_ID_NEW } from '../utils';\nimport { useI18n } from '@/core/plugins/i18n';\n\n/**\n * Функционал поиска\n */\nexport const useMenu = (\n\tmodel: Ref<Props['modelValue']>,\n\temits: ReturnType<typeof defineEmits>,\n\titems: Ref<Props['items']>,\n\tmultiselect: Props['multiselect'],\n\tappendAllValue: Ref<Props['appendAllValue']>,\n\tappendSearchToResult: Ref<Props['appendSearchToResult']>,\n\tsearchType: Ref<Props['searchType']>,\n\tminLength: number,\n\tapi: API,\n) => {\n\t/**\n\t * Текст поиска по результатам\n\t */\n\tconst searchText = ref('');\n\n\t/**\n\t * Объект, представляющий опцию \"Все\"\n\t */\n\tconst itemAll = {\n\t\tid: ITEM_ID_ALL,\n\t\tname: useI18n().Common.All,\n\t};\n\n\t/**\n\t * Сброс поиска\n\t */\n\tconst resetSearch = () => {\n\t\tsearchText.value = '';\n\t\tapi.items.value = [];\n\t};\n\n\t/**\n\t * Является ли строка поиска достаточной длины для отображения меню\n\t */\n\tconst genIsShort = () => {\n\t\tif (!api.apiRequest) return false;\n\t\tif (searchType.value !== 'inline') return false;\n\t\tif (searchText.value.length >= minLength) return false;\n\n\t\treturn true;\n\t};\n\n\t/**\n\t * Варианты выбора: props.items + \"Выбрать все\"\n\t */\n\tconst localItems: ComputedRef<Item[]> = computed(() => {\n\t\tconst localItems: Item[] = [];\n\n\t\tif (!multiselect && appendAllValue.value) {\n\t\t\tlocalItems.push(itemAll);\n\t\t}\n\n\t\titems.value?.forEach(item => localItems.push({ ...item }));\n\n\t\treturn localItems;\n\t});\n\n\t/**\n\t * Подготовленный список меню, который содержит в сумме:\n\t * - prop.items: указанный список с учетом фильтра и опций компонента\n\t * - api.items: результаты api запроса, если используется api\n\t *\n\t * @returns Отфильтрованный массив элементов для отображения\n\t */\n\tconst itemsForShow = computed(() => {\n\t\tconst searchString = searchText.value.toLowerCase();\n\t\tconst searchStringInvertKeyboard = invertKeyboardLayout(searchString);\n\n\t\tlet items: NonNullable<Props['items']> = [];\n\n\t\tlocalItems.value.forEach((item) => {\n\t\t\tconst itemName = item.name.toLowerCase();\n\t\t\tif (\n\t\t\t\titem.id === Number(searchString) ||\n\t\t\t\titemName.includes(searchString) ||\n\t\t\t\titemName.includes(searchStringInvertKeyboard)\n\t\t\t) {\n\t\t\t\tif (itemName === searchString || itemName === searchStringInvertKeyboard) {\n\t\t\t\t\titems.unshift(item);\n\t\t\t\t} else {\n\t\t\t\t\titems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\titems.push(...api.items.value);\n\n\t\t// ввод произвольного значения\n\t\tif (\n\t\t\tappendSearchToResult.value &&\n\t\t\t!!searchText.value &&\n\t\t\t!items.find((item) => item.name.toLowerCase() === searchString)\n\t\t) {\n\t\t\tconst itemNew = {\n\t\t\t\tid: ITEM_ID_NEW,\n\t\t\t\tname: searchText.value,\n\t\t\t};\n\n\t\t\tif (api.items.value.length) {\n\t\t\t\t// если это ajax поиск, отображаем новый элемент внизу\n\t\t\t\titems.push(itemNew);\n\t\t\t} else{\n\t\t\t\t// если это не ajax поиск или результатов нет, отображаем новый элемент вверху\n\t\t\t\titems.unshift(itemNew);\n\t\t\t}\n\t\t}\n\n\t\tif (multiselect) {\n\t\t\titems = items.filter(item => !isSelected(model.value, item));\n\t\t}\n\n\t\treturn items;\n\t});\n\n\t/**\n\t * Выбрать элемент\n\t *\n\t * @param item Элемент для выбора\n\t */\n\tconst selectItem = (item: Item) => {\n\t\tif (multiselect && Array.isArray(model.value)) {\n\t\t\tif (!isSelected(model.value, item)) {\n\t\t\t\tmodel.value = [...model.value, item];\n\t\t\t}\n\t\t} else {\n\t\t\tmodel.value = item;\n\t\t}\n\n\t\tif (item.id === ITEM_ID_NEW) {\n\t\t\temits('appendItem', item);\n\t\t}\n\t};\n\n\t/**\n\t * Выбрать следующее значение\n\t */\n\tconst selectNextItem = () => {\n\t\tif (!Array.isArray(model.value)) {\n\t\t\tconst currentIndex = itemsForShow.value.findIndex(item => item.id === (model.value as Item).id);\n\t\t\tconst nextIndex = (currentIndex + 1) % itemsForShow.value.length;\n\t\t\tmodel.value = { ...itemsForShow.value[nextIndex] };\n\t\t}\n\t};\n\n\t/**\n\t * Удалить выбранное значение по id\n\t *\n\t * @param id Идентификатор элемента для удаления\n\t */\n\tconst deleteItemById = async (id: Item['id']) => {\n\t\tif (Array.isArray(model.value)) {\n\t\t\tmodel.value = model.value.filter(item => item.id !== id);\n\t\t}\n\t};\n\n\treturn {\n\t\tsearchText,\n\t\tresetSearch,\n\t\tgenIsShort,\n\t\titems: localItems,\n\t\titemsForShow,\n\t\tselectItem,\n\t\tselectNextItem,\n\t\tdeleteItemById,\n\t};\n};\n","<script setup lang=\"ts\">\nimport { computed, ref, toRef, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { TopPopup, TopPopupListItem, TopPopupWidgetInput } from '@/components/popup/popup';\nimport { TopPreloader } from '@/components/forms/forms';\nimport type { Emits, Item, Props, Slots } from './types';\nimport Selector2ItemMulti from './itemMulti.vue';\nimport { useAPI } from './composables/useAPI';\nimport { useMenu } from './composables/useMenu';\nimport type { TopLibPopup } from '../../popup/lib/popup';\nimport Worker from '../../popup/lib/worker';\n\nconst props = withDefaults(defineProps<Props>(), {\n\titems: () => [] as Item[],\n\tsize: 's',\n\tminLength: 0,\n\tsearchType: 'popup',\n});\n\nconst model = defineModel<Props['modelValue']>({ required: true });\n\ndefineSlots<Slots>();\n\nconst emits = defineEmits<Emits>();\n\nconst searchTypeLocal = computed(() => {\n\t// multiselect не поддерживает inline ввода\n\tif (props.searchType === 'inline' && props.multiselect) return 'popup';\n\n\t// В мобильной версии popup работает в полноэкранном режиме\n\tif (props.searchType === 'inline' && Core.state.isMobile) return 'popup';\n\n\treturn props.searchType;\n});\n\nlet minLength = 0;\nif (searchTypeLocal.value === 'inline' && props.minLength) {\n\tminLength = props.minLength;\n}\n\n/**\n * Объект для работы с API\n */\nconst api = useAPI(props.api, props.apiSetSearchParams, minLength, props.useCache);\n\n/**\n * Объект для работы с меню\n */\nconst menu = useMenu(\n\tmodel,\n\temits,\n\ttoRef(props, 'items'),\n\tprops.multiselect,\n\ttoRef(props, 'appendAllValue'),\n\ttoRef(props, 'appendSearchToResult'),\n\tsearchTypeLocal,\n\tminLength,\n\tapi,\n);\n\nconst component = computed(() => {\n\tif (props.buttonProps) return 'TopButton';\n\tif (searchTypeLocal.value === 'inline') return 'TopInput';\n\n\treturn 'div';\n});\n\n/**\n * Экземпляр компонента Popup\n */\nconst popupRef = ref<any>(null);\n\n/**\n * Получить доступ к объекту popup\n */\nconst getPopup = (): TopLibPopup | undefined => {\n\treturn popupRef.value?.popup;\n};\n\nif (api.apiRequest) {\n\t// отложенный поиск при вводе текста\n\twatch(menu.searchText, () => {\n\t\tapi.setSearchTextAndLoad(menu.searchText.value);\n\n\t\tif (searchTypeLocal.value === 'inline') {\n\t\t\tif (menu.genIsShort()) {\n\t\t\t\tgetPopup()?.close();\n\t\t\t}\n\t\t}\n\t});\n}\n\nwatch(model, () => {\n\t/**\n\t * При изменении значения модели в режиме inline необходимо очистить поле поиска,\n\t * так как поиск больше не актуален после выбора значения\n\t */\n\tif (searchTypeLocal.value === 'inline') {\n\t\tmenu.resetSearch();\n\t}\n});\n\nconst placeholder = computed(() => {\n\tif (Array.isArray(model.value) || props.multiselect || !props.selectedAsPlaceholder && searchTypeLocal.value !== 'inline') {\n\t\treturn props.placeholder;\n\t}\n\n\treturn model.value?.name || props.placeholder;\n});\n\n/**\n * Обработчик ввода клавиш на кнопке или поле ввода\n */\nconst onOpenerKeydown = (e: KeyboardEvent) => {\n\tlet needOpen = false;\n\n\tswitch (e.key) {\n\t\tcase 'Delete':\n\t\tcase 'Backspace':\n\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tmodel.value.pop();\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'ArrowUp':\n\t\tcase 'ArrowRight':\n\t\tcase 'ArrowDown':\n\t\tcase 'ArrowLeft':\n\t\tcase 'Enter':\n\t\tcase ' ':\n\t\t\tneedOpen = true;\n\n\t\t\tbreak;\n\t\tcase 'Escape':\n\t\t\tif (searchTypeLocal.value === 'inline') {\n\t\t\t\t// очистка введенного текста\n\t\t\t\tmenu.resetSearch();\n\t\t\t}\n\n\t\t\tbreak;\n\t}\n\n\t// введен символ\n\tconst symbolPressed = e.key.length === 1 && !e.ctrlKey && !e.metaKey;\n\n\t// введен символ\n\tif (searchTypeLocal.value === 'popup' || searchTypeLocal.value === 'inline') {\n\t\tif (symbolPressed) {\n\t\t\tneedOpen = true;\n\t\t}\n\t}\n\n\t// popup уже открыт\n\tif (getPopup()?.elPopup) {\n\t\tneedOpen = false;\n\t}\n\n\tif (needOpen) {\n\t\tif (searchTypeLocal.value === 'popup') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\t// введен символ\n\t\t\tif (symbolPressed) {\n\t\t\t\t// начало ввода, сразу ввести первый символ вместе с открытием popup\n\t\t\t\tif (!menu.searchText.value) {\n\t\t\t\t\tmenu.searchText.value = e.key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t(e.currentTarget as HTMLElement)?.click();\n\t}\n};\n\nconst onClickChanger = (e: MouseEvent) => {\n\te.preventDefault();\n\n\tmenu.selectNextItem();\n};\n\n/**\n * Обработчик открытия попапа\n */\nconst onOpen = () => {\n\tif (api.apiRequest) {\n\t\tif (menu.genIsShort()) {\n\t\t\tgetPopup()?.close();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// при открытии сразу выполнить поиск\n\t\tapi.setSearchTextAndLoad(menu.searchText.value, false);\n\t}\n};\n\n/**\n * Обработчик закрытия попапа\n */\nconst onClose = () => {\n\t// очистка введенного текста\n\tif (searchTypeLocal.value) {\n\t\tif (menu.searchText.value) menu.resetSearch();\n\t}\n};\n\n/**\n * Обработчик прокрутки списка контента\n *\n * Для дозагрузки элеменов через api\n *\n * @param {Event} e - Событие прокрутки\n */\nconst onScrollContentList = (e: Event) => {\n\tconst el = e.target as HTMLElement;\n\n\tif (el.scrollTop / (el.scrollHeight - el.offsetHeight) > 0.8) {\n\t\tapi.load(true);\n\t}\n};\n\n// для storybook\nif ((window as any).__STORYBOOK_PREVIEW__) {\n\twatch(\n\t\t() => props.multiselect,\n\t\t() => {\n\t\t\tif (props.multiselect) {\n\t\t\t\tif (!Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\tname: 'Выбери меня',\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = {\n\t\t\t\t\t\tid: null,\n\t\t\t\t\t\tname: '',\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ immediate: true },\n\t);\n\n\twatch(\n\t\t() => props.searchType,\n\t\t() => {\n\t\t\t// пауза для установки props в адресной строке\n\t\t\tsetTimeout(() => {\n\t\t\t\tlocation.reload();\n\t\t\t}, 500);\n\t\t},\n\t);\n}\n</script>\n\n<template>\n\t<TopPopup\n\t\tref=\"popupRef\"\n\t\t@open=\"onOpen()\"\n\t\t@close=\"onClose()\"\n\t\t@scrollContentList=\"api ? onScrollContentList($event) : undefined\"\n\t\t:notch=\"searchTypeLocal !== 'inline'\"\n\t\t:transitionDuration=\"0\"\n\t\t:openByFocus=\"searchTypeLocal === 'inline'\"\n\t>\n\t\t<template #opener>\n\t\t\t<component\n\t\t\t\t:is=\"component\"\n\n\t\t\t\t:=\"buttonProps\"\n\n\t\t\t\tref=\"subcomponentSelector\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-selector2' : true,\n\t\t\t\t\t'top-selector2-multiselect': multiselect,\n\t\t\t\t\t['top-selector2-' + modificator]: !!modificator,\n\t\t\t\t\t'top-as-input': !buttonProps,\n\t\t\t\t\t'top-as-selector': true,\n\t\t\t\t\t['top-size_' + size]: true,\n\t\t\t\t\t['top-disabled']: disabled,\n\t\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t\t['top-error']: isError,\n\t\t\t\t}\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@keydown=\"onOpenerKeydown\"\n\t\t\t\tv-top-focus.onupdate=\"isError\"\n\n\t\t\t\t:placeholder\n\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t>\n\t\t\t\t<template v-if=\"multiselect\">\n\t\t\t\t\t<div class=\"top-selector2_activeItems\">\n\t\t\t\t\t\t<Selector2ItemMulti\n\t\t\t\t\t\t\tv-for=\"item of model as Item[]\"\n\t\t\t\t\t\t\t:id=\"item.id\"\n\t\t\t\t\t\t\t:name=\"item.name\"\n\t\t\t\t\t\t\t@delete=\"menu.deleteItemById\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<span v-if=\"searchTypeLocal !== 'inline' && !multiselect\" class=\"top-selector2_activeName top-ellipsis\">\n\t\t\t\t\t{{ !Array.isArray(model) ? model.name : '' }}\n\t\t\t\t</span>\n\n\t\t\t\t<span v-if=\"multiselect && !model.length\" class=\"top-selector2_placeholder top-ellipsis\">\n\t\t\t\t\t{{ placeholder }}\n\t\t\t\t</span>\n\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"addChanger && !buttonProps && !multiselect && menu.items.value.length > 1 && !disabled\"\n\t\t\t\t\tclass=\"top-changer top-changer-selector top-popup_widget\"\n\t\t\t\t\t@click=\"onClickChanger\"\n\t\t\t\t></span>\n\t\t\t</component>\n\t\t</template>\n\n\t\t<template #widget v-if=\"searchTypeLocal === 'popup'\">\n\t\t\t<TopPopupWidgetInput\n\t\t\t\ttitle=\"Поиск\"\n\t\t\t\ticon=\"\"\n\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t\t:isLoading=\"api.isLoading.value && !api.apiRequest?.params.offset\"\n\t\t\t\t:placeholder\n\t\t\t/>\n\t\t</template>\n\n\t\t<template #contentList>\n\t\t\t<TopPopupListItem\n\t\t\t\tv-for=\"item of menu.itemsForShow.value\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-active': !Array.isArray(model) && !multiselect && model.id === item.id && model.name === item.name,\n\t\t\t\t}\"\n\t\t\t\t:key=\"item.id ?? undefined\"\n\t\t\t\t:closeByClick=\"!multiselect || Core.state.isMobile\"\n\t\t\t\t@click=\"menu.selectItem(item)\"\n\t\t\t>\n\t\t\t\t<slot\n\t\t\t\t\tv-if=\"$slots.item\"\n\t\t\t\t\tname=\"item\"\n\t\t\t\t\t:item\n\t\t\t\t></slot>\n\n\t\t\t\t<template\n\t\t\t\t\tv-else\n\t\t\t\t>\n\t\t\t\t\t{{ item.name }}\n\t\t\t\t</template>\n\t\t\t</TopPopupListItem>\n\n\t\t\t<TopPopupListItem\n\t\t\t\tv-if=\"!api.isLoading.value && !menu.itemsForShow.value.length\"\n\t\t\t\ttype=\"regular\"\n\t\t\t>\n\t\t\t\t{{ $i18n.Common.No_results }}\n\t\t\t</TopPopupListItem>\n\n\t\t\t<!-- Индикатор загрузки, первичная дозагрузка отображается в поле поиска, если оно отображено -->\n\t\t\t<TopPopupListItem\n\t\t\t\tv-if=\"api.isLoading.value && (searchType !== 'popup' || api.apiRequest?.params.offset)\"\n\t\t\t\ttype=\"regular\"\n\t\t\t>\n\t\t\t\t<TopPreloader type=\"circles\"/>\n\t\t\t</TopPopupListItem>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style>\n.top-selector2 {\n\twidth: 180px;\n\tpadding: var(--top-padding-1) var(--top-forms-padding);\n}\n\n.top-selector2::placeholder,\n.top-selector2_placeholder {\n\tcolor: var(--color-text-2);\n}\n\n.top-selector2_placeholder {\n\tpadding-left: var(--top-padding-1);\n}\n\n.top-selector2-multiselect {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tflex-grow: 1;\n}\n\n.top-selector2.top-active {\n\t--top-forms-border-color: var(--top-forms-border-color-hover);\n}\n\n.top-selector2_activeItems {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--top-padding-1);\n\tmax-width: 100%;\n}\n\n.top-selector2_activeName {\n\twhite-space: nowrap;\n}\n\n.top-changer-selector {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tmargin: calc(0px - var(--top-padding-1));\n\ttransform: translateX(0);\n}\n\n.top-selector2.top-button {\n\tjustify-content: start;\n}\n\n.top-selector2.top-input_input ~ .top-changer-selector {\n\ttransform: translateX(-52px);\n}\n\n.top-selector2.top-as-selector {\n\tpadding-right: calc(var(--top-selector-arrow-width) + var(--top-padding-2));\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { Props, Slots } from './types';\n\nwithDefaults(defineProps<Props>(), {\n\tstyling: 'default',\n\tsize: 'default',\n});\n\ndefineSlots<Slots>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t['top-info']: true,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-info-styling_' + styling]: true,\n\t\t}\"\n\t\t:data-top-icon=\"icon\"\n\t>\n\t\t<div class=\"top-info_text\">\n\t\t\t<slot></slot>\n\t\t</div>\n\n\t\t<span v-if=\"$slots.additional\" class=\"top-info_value\">\n\t\t\t<slot name=\"additional\"></slot>\n\t\t</span>\n\t</div>\n</template>\n\n<style>\n.top-info {\n\t--top-icon-width: var(--top-icon-size);\n\n\tborder-radius: var(--top-forms-radius);\n\tbox-sizing: border-box;\n\tmin-height: var(--top-forms-base-height);\n\tpadding: var(--top-padding-1) var(--top-padding-2);\n\tflex-grow: 5;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: var(--top-gap-2);\n}\n\n.top-info_text {\n\tflex-grow: 1;\n}\n\n.top-info_value {\n\tfont-weight: bold;\n}\n\n/* size */\n.top-info.top-size_default {\n\tborder-radius: var(--top-radius-3);\n\tpadding: var(--top-padding-4);\n}\n\n/* styling */\n.top-info-styling_default {\n\t--top-icon-color: var(--color-text-2);\n\n\tbackground: var(--color-layer-1);\n}\n\n.top-info-styling_info {\n\t--top-icon-color: var(--color-text-primary);\n\n\tbackground: var(--color-layer-primary-1);\n}\n\n.top-info-styling_warning {\n\t--top-icon-color: var(--color-text-warning);\n\n\tbackground: var(--color-layer-warning-1);\n}\n\n.top-info-styling_negative {\n\t--top-icon-color: var(--color-text-negative);\n\n\tbackground: var(--color-layer-negative-1);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { TopButton } from '@/components/forms/forms';\nimport type { Emits, Props } from '@/components/formsExt/policy/types';\n\ndefineProps<Props>();\nconst emits = defineEmits<Emits>();\n\nconst isVisible = ref(true);\n\nconst onAccept = () => {\n\tisVisible.value = false;\n\n\temits('accept');\n};\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"isVisible\"\n\t\tclass=\"top-policy\"\n\t>\n\t\t<div class=\"top-policy_title\">\n\t\t\t{{ title }}\n\t\t</div>\n\n\t\t<div\n\t\t\tclass=\"top-policy_description\"\n\t\t\tv-html=\"description\"\n\t\t></div>\n\n\t\t<TopButton\n\t\t\tsize=\"m\"\n\t\t\t@click=\"onAccept\"\n\t\t>\n\t\t\t{{ acceptText }}\n\t\t</TopButton>\n\t</div>\n</template>\n\n<style>\n.top-policy {\n\tbox-sizing: border-box;\n\tbox-shadow: var(--top-shadow-b);\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-bg-lightning-1);\n\twidth: 600px;\n\tpadding: var(--top-padding-4);\n\tposition: fixed;\n\tright: var(--top-gap-10);\n\tbottom: var(--top-gap-10);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-4);\n\tz-index: 10000;\n}\n\n.top-policy_title {\n\tfont-size: 24px;\n\tfont-weight: 700;\n}\n\n.top-policy_description {\n\tfont-size: 14px;\n}\n\n@media screen and (max-width: 900px) {\n\t.top-policy {\n\t\twidth: 100%;\n\t\tright: 0;\n\t\tbottom: calc(var(--top-gap-5) + var(--toolbar-height, 0px));\n\t}\n}\n</style>\n"],"names":["isChanged","vue","localValue","props","submit","value","emit","_cache","$event","clickOnTitle","_ctx","name","placeholder","rows","minHeight","expandable","disabled","readonly","isError","isFocused","cancel","forms","intermediateValue","elRef","model","valuesAvailable","item","size","items","cache","isLoading","nextOffset","api","res2","res","indexWithError","cacheKey","load","append","callAPI","loadDebounce","newSearchText","minLength","modelValue","itemSelected","searchText","localItems","multiselect","appendAllValue","localItems2","itemAll","_a","itemsForShow","searchStringInvertKeyboard","utils_keyboard","searchString","items2","appendSearchToResult","itemNew","isSelected","resetSearch","genIsShort","ITEM_ID_NEW","emits","nextIndex","id","searchTypeLocal","useAPI","component","popupRef","menu","getPopup","onOpenerKeydown","e","symbolPressed","_b","onClickChanger","onScrollContentList","el","onOpen","onClose","modificator","_hoisted_1$2","widgetInput_vue_vue_type_script_setup_true_lang","icon","isVisible","_hoisted_2","description","onAccept"],"mappings":"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"}