@topvisor/ui 0.9.34-utils-components-4 → 0.9.34-utils-components-6

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