@topvisor/ui 0.9.33 → 0.9.34-utils-components-2

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 (211) hide show
  1. package/.chunks/{datepicker-D1JLNEmV.es.js → datepicker-BGhDjLcn.es.js} +2 -2
  2. package/.chunks/{datepicker-D1JLNEmV.es.js.map → datepicker-BGhDjLcn.es.js.map} +1 -1
  3. package/.chunks/{datepicker-5QMJRJn-.amd.js → datepicker-DM6aPyRB.amd.js} +2 -2
  4. package/.chunks/{datepicker-5QMJRJn-.amd.js.map → datepicker-DM6aPyRB.amd.js.map} +1 -1
  5. package/.chunks/{forms-S36M7cBH.es.js → forms-CRAV8PiZ.es.js} +328 -312
  6. package/.chunks/forms-CRAV8PiZ.es.js.map +1 -0
  7. package/.chunks/forms-Cksc7Rb7.amd.js +3 -0
  8. package/.chunks/forms-Cksc7Rb7.amd.js.map +1 -0
  9. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-BfCj7kQR.es.js → listItem.vue_vue_type_script_setup_true_lang-C2XaxeNZ.es.js} +9 -9
  10. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-BfCj7kQR.es.js.map → listItem.vue_vue_type_script_setup_true_lang-C2XaxeNZ.es.js.map} +1 -1
  11. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CpNwVBHY.amd.js +2 -0
  12. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-C7tg-67i.amd.js.map → listItem.vue_vue_type_script_setup_true_lang-CpNwVBHY.amd.js.map} +1 -1
  13. package/.chunks/{menu-v5knQbeF.es.js → menu-BWjYRHkQ.es.js} +8 -8
  14. package/.chunks/menu-BWjYRHkQ.es.js.map +1 -0
  15. package/.chunks/{menu-S1Hk7D3W.amd.js → menu-BX8GV8-v.amd.js} +2 -2
  16. package/.chunks/menu-BX8GV8-v.amd.js.map +1 -0
  17. package/.chunks/{popup-DncRq57t.amd.js → popup-3fVBIqu0.amd.js} +3 -3
  18. package/.chunks/{popup-DncRq57t.amd.js.map → popup-3fVBIqu0.amd.js.map} +1 -1
  19. package/.chunks/{popup-BK3xlBZm.es.js → popup-BWTP6yaC.es.js} +3 -3
  20. package/.chunks/{popup-BK3xlBZm.es.js.map → popup-BWTP6yaC.es.js.map} +1 -1
  21. package/.chunks/punycode.es6-C2yitnNb.amd.js +2 -0
  22. package/.chunks/punycode.es6-C2yitnNb.amd.js.map +1 -0
  23. package/.chunks/punycode.es6-CNI-zL6U.es.js +134 -0
  24. package/.chunks/punycode.es6-CNI-zL6U.es.js.map +1 -0
  25. package/assets/core.css +1 -1
  26. package/assets/dark.css +1 -1
  27. package/assets/forms.css +1 -1
  28. package/assets/formsExt.css +1 -1
  29. package/assets/light.css +1 -1
  30. package/core/core.amd.js +1 -1
  31. package/core/core.js +1 -1
  32. package/core/directives/focus.amd.js +2 -0
  33. package/core/directives/focus.amd.js.map +1 -0
  34. package/core/directives/focus.d.ts +3 -0
  35. package/core/directives/focus.js +5 -0
  36. package/core/directives/focus.js.map +1 -0
  37. package/core/directives/sticky.amd.js +2 -0
  38. package/core/directives/sticky.amd.js.map +1 -0
  39. package/core/directives/sticky.d.ts +3 -0
  40. package/core/directives/sticky.js +5 -0
  41. package/core/directives/sticky.js.map +1 -0
  42. package/core/directives/swimUp.amd.js +2 -0
  43. package/core/directives/swimUp.amd.js.map +1 -0
  44. package/core/directives/swimUp.d.ts +3 -0
  45. package/core/directives/swimUp.js +5 -0
  46. package/core/directives/swimUp.js.map +1 -0
  47. package/core/directives/tooltip.amd.js +2 -0
  48. package/core/directives/tooltip.amd.js.map +1 -0
  49. package/core/directives/tooltip.d.ts +3 -0
  50. package/core/directives/tooltip.js +5 -0
  51. package/core/directives/tooltip.js.map +1 -0
  52. package/core/plugin/plugin.amd.js +2 -0
  53. package/core/plugin/plugin.amd.js.map +1 -0
  54. package/core/plugin/plugin.d.ts +3 -0
  55. package/core/plugin/plugin.js +23 -0
  56. package/core/plugin/plugin.js.map +1 -0
  57. package/forms/forms.amd.js +1 -1
  58. package/forms/forms.js +14 -14
  59. package/formsExt/formsExt.amd.js +1 -1
  60. package/formsExt/formsExt.amd.js.map +1 -1
  61. package/formsExt/formsExt.js +122 -363
  62. package/formsExt/formsExt.js.map +1 -1
  63. package/package.json +32 -24
  64. package/popup/popup.amd.js +1 -1
  65. package/popup/popup.amd.js.map +1 -1
  66. package/popup/popup.js +47 -6
  67. package/popup/popup.js.map +1 -1
  68. package/popup/worker.amd.js +1 -1
  69. package/popup/worker.js +3 -3
  70. package/project/project.amd.js +1 -1
  71. package/project/project.amd.js.map +1 -1
  72. package/project/project.js +15 -15
  73. package/project/project.js.map +1 -1
  74. package/src/components/forms/avatar/avatar.stories.d.ts +15 -14
  75. package/src/components/forms/avatar/avatar.vue.d.ts +7 -6
  76. package/src/components/forms/button/button.stories.d.ts +59 -57
  77. package/src/components/forms/button/button.vue.d.ts +10 -8
  78. package/src/components/forms/checkbox/checkbox.stories.d.ts +34 -33
  79. package/src/components/forms/checkbox/checkbox.vue.d.ts +17 -16
  80. package/src/components/forms/controlLabel/controlLabel.stories.d.ts +14 -13
  81. package/src/components/forms/controlLabel/controlLabel.vue.d.ts +4 -3
  82. package/src/components/forms/forms.d.ts +33 -13
  83. package/src/components/forms/hint/hint.stories.d.ts +23 -22
  84. package/src/components/forms/hint/hint.vue.d.ts +4 -3
  85. package/src/components/forms/input/input.stories.d.ts +64 -62
  86. package/src/components/forms/input/input.vue.d.ts +10 -8
  87. package/src/components/forms/inputDate/inputDate.d.ts +1 -1
  88. package/src/components/forms/inputDate/inputDate.stories.d.ts +31 -29
  89. package/src/components/forms/inputDate/inputDate.vue.d.ts +6 -5
  90. package/src/components/forms/inputRange/inputRange.stories.d.ts +84 -81
  91. package/src/components/forms/inputRange/inputRange.vue.d.ts +2 -1
  92. package/src/components/forms/loadbar/loadbar.stories.d.ts +2 -1
  93. package/src/components/forms/loadbar/loadbar.vue.d.ts +2 -1
  94. package/src/components/forms/radio/radio.stories.d.ts +32 -31
  95. package/src/components/forms/radio/radio.vue.d.ts +5 -4
  96. package/src/components/forms/select/select.stories.d.ts +24 -22
  97. package/src/components/forms/select/select.vue.d.ts +25 -23
  98. package/src/components/forms/switcher/switcher.stories.d.ts +32 -31
  99. package/src/components/forms/switcher/switcher.vue.d.ts +5 -4
  100. package/src/components/forms/textarea/textarea.stories.d.ts +24 -23
  101. package/src/components/forms/textarea/textarea.vue.d.ts +6 -5
  102. package/src/components/formsExt/editArea/editArea.stories.d.ts +40 -39
  103. package/src/components/formsExt/editArea/editArea.vue.d.ts +6 -5
  104. package/src/components/formsExt/editInput/editInput.stories.d.ts +22 -19
  105. package/src/components/formsExt/editInput/editInput.vue.d.ts +5 -4
  106. package/src/components/formsExt/formsExt.d.ts +10 -5
  107. package/src/components/formsExt/menu/menu.stories.d.ts +15 -14
  108. package/src/components/formsExt/menu/menu.vue.d.ts +17 -16
  109. package/src/components/formsExt/radioGroup/radioGroup.stories.d.ts +16 -14
  110. package/src/components/formsExt/radioGroup/radioGroup.vue.d.ts +17 -14
  111. package/src/components/formsExt/selector2/api.d.ts +2 -2
  112. package/src/components/formsExt/selector2/selector2.stories.d.ts +67 -65
  113. package/src/components/popup/popup/listItem.vue.d.ts +5 -4
  114. package/src/components/popup/popup/opener.vue.d.ts +8 -7
  115. package/src/components/popup/popup/popup.stories.d.ts +198 -193
  116. package/src/components/popup/popup/popup.vue.d.ts +9 -8
  117. package/src/components/popup/popup/widgetInput.vue.d.ts +31 -28
  118. package/src/components/popup/popup.d.ts +10 -4
  119. package/src/components/popup/worker.d.ts +4 -1
  120. package/src/components/project/project.d.ts +4 -1
  121. package/src/components/project/selectorCompetitors/composables.d.ts +2 -1
  122. package/src/components/project/selectorCompetitors/selectorCompetitors.stories.d.ts +9 -8
  123. package/src/components/project/selectorCompetitors/selectorCompetitors.vue.d.ts +10 -9
  124. package/src/components/project/selectorCompetitors/stories/items.d.ts +2 -1
  125. package/src/components/tabs/tabs/content.vue.d.ts +4 -3
  126. package/src/components/tabs/tabs/tab.vue.d.ts +4 -3
  127. package/src/components/tabs/tabs/tabs.stories.d.ts +165 -162
  128. package/src/components/tabs/tabs/tabs.vue.d.ts +4 -3
  129. package/src/components/tabs/tabs.d.ts +8 -3
  130. package/src/components/tabsView/tabsView/menu.vue.d.ts +7 -6
  131. package/src/components/tabsView/tabsView/menuDelimeter.vue.d.ts +2 -1
  132. package/src/components/tabsView/tabsView/menuItem.vue.d.ts +6 -5
  133. package/src/components/tabsView/tabsView/menuTitle.vue.d.ts +4 -3
  134. package/src/components/tabsView/tabsView/store.d.ts +126 -69
  135. package/src/components/tabsView/tabsView/tabsView.d.ts +1 -1
  136. package/src/components/tabsView/tabsView/tabsView.stories.d.ts +95 -94
  137. package/src/components/tabsView/tabsView/tabsView.vue.d.ts +13 -12
  138. 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 +93 -92
  139. 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 +45 -44
  140. package/src/components/tabsView/tabsView.d.ts +8 -3
  141. package/src/core/core/core.d.ts +1 -0
  142. package/src/core/core/page.d.ts +4 -0
  143. package/src/core/core/state.d.ts +4 -0
  144. package/src/core/directives/focus.d.ts +9 -0
  145. package/src/core/directives/sticky.d.ts +11 -0
  146. package/src/core/directives/swimUp.d.ts +10 -0
  147. package/src/core/directives/tooltip.d.ts +11 -0
  148. package/src/core/plugin/plugin.d.ts +48 -0
  149. package/src/core/utils/device.d.ts +6 -0
  150. package/src/core/utils/image.d.ts +12 -0
  151. package/src/core/utils/number.d.ts +7 -0
  152. package/src/core/utils/store/plugin.d.ts +2 -1
  153. package/src/core/utils/string.d.ts +4 -0
  154. package/tabs/tabs.amd.js +1 -1
  155. package/tabs/tabs.amd.js.map +1 -1
  156. package/tabs/tabs.js +23 -23
  157. package/tabs/tabs.js.map +1 -1
  158. package/tabsView/tabsView.amd.js +1 -1
  159. package/tabsView/tabsView.amd.js.map +1 -1
  160. package/tabsView/tabsView.js +72 -73
  161. package/tabsView/tabsView.js.map +1 -1
  162. package/utils/date.amd.js +1 -1
  163. package/utils/date.js +7 -7
  164. package/utils/device.amd.js +1 -1
  165. package/utils/device.js +9 -8
  166. package/utils/image.amd.js +2 -0
  167. package/utils/image.amd.js.map +1 -0
  168. package/utils/image.d.ts +1 -0
  169. package/utils/image.js +13 -0
  170. package/utils/image.js.map +1 -0
  171. package/utils/number.amd.js +2 -0
  172. package/utils/number.amd.js.map +1 -0
  173. package/utils/number.d.ts +1 -0
  174. package/utils/number.js +9 -0
  175. package/utils/number.js.map +1 -0
  176. package/utils/scroll.amd.js +1 -1
  177. package/utils/scroll.js +1 -1
  178. package/utils/string.amd.js +1 -1
  179. package/utils/string.amd.js.map +1 -1
  180. package/utils/string.js +20 -13
  181. package/utils/string.js.map +1 -1
  182. package/utils/system.amd.js +1 -1
  183. package/utils/system.amd.js.map +1 -1
  184. package/utils/system.js +8 -8
  185. package/utils/system.js.map +1 -1
  186. package/utils/url.amd.js +2 -2
  187. package/utils/url.amd.js.map +1 -1
  188. package/utils/url.js +40 -168
  189. package/utils/url.js.map +1 -1
  190. package/utils/window.amd.js +1 -1
  191. package/utils/window.js +1 -1
  192. package/web-types.json +62 -0
  193. package/.chunks/forms-B2NcBl7S.amd.js +0 -3
  194. package/.chunks/forms-B2NcBl7S.amd.js.map +0 -1
  195. package/.chunks/forms-S36M7cBH.es.js.map +0 -1
  196. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C7tg-67i.amd.js +0 -2
  197. package/.chunks/menu-S1Hk7D3W.amd.js.map +0 -1
  198. package/.chunks/menu-v5knQbeF.es.js.map +0 -1
  199. package/.chunks/widgetInput-Br5COpvG.es.js +0 -46
  200. package/.chunks/widgetInput-Br5COpvG.es.js.map +0 -1
  201. package/.chunks/widgetInput-CrrUoVPc.amd.js +0 -2
  202. package/.chunks/widgetInput-CrrUoVPc.amd.js.map +0 -1
  203. package/src/components/formsExt/selector2/itemMulti.vue.d.ts +0 -17
  204. package/src/components/formsExt/selector2/selector2.vue.d.ts +0 -130
  205. package/src/core/utils/common.d.ts +0 -21
  206. package/utils/common.amd.js +0 -2
  207. package/utils/common.amd.js.map +0 -1
  208. package/utils/common.d.ts +0 -1
  209. package/utils/common.js +0 -21
  210. package/utils/common.js.map +0 -1
  211. /package/assets/{widgetInput.css → popup.css} +0 -0
@@ -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"],"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-editArea_form-focus': isFocused,\r\n\t\t\t}\"\r\n\t\t>\r\n\t\t\t<Textarea\r\n\t\t\t\tv-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\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-focus {\r\n\tborder-color: var(--color-primary);\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>","<script setup lang=\"ts\">\r\nimport { ref, toRef, watch } from 'vue';\r\nimport type { Props, Emits } from './editInput';\r\nimport Input from '@/components/forms/input/input.vue';\r\nimport Button 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<Input\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<Button\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\t\t<!-- @slot Слот Button -->\r\n\t\t\t<slot></slot>\r\n\t\t</Button>\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>","<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 { Popup, PopupListItem, PopupWidgetInput } 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 Popup> | 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<Popup\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<PopupWidgetInput\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<PopupListItem\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</PopupListItem>\r\n\r\n\t\t\t<PopupListItem\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</PopupListItem>\r\n\t\t</template>\r\n\t</Popup>\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>"],"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"],"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/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-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>","<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\t\t<!-- @slot Слот Button -->\r\n\t\t\t<slot></slot>\r\n\t\t</TopButton>\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 { 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 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 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","TopEditArea","EditArea","TopEditInput","EditInput","TopRadioGroup","RadioGroup","TopMenu","Menu"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAAA,IAAAC,GAQAC,IAAAC,GAEAC,IAAAC,EAAAL,EAAA,YAAA,GAEAM,IAAAD,EAAAL,EAAA,SAAA,GAEAO,IAAAC,EAAA,MAAAJ,EAAA,UAAAJ,EAAA,YAAA,GAEAS,IAAAD,EAAA,MACCR,EAAA,mBAAA,KAEAA,EAAA,qBAAA,CAAAO,EAAA,QAAAP,EAAA,YAEAA,EAAA,UAAa,GAGdU,IAAA,CAAAC,MAAA;AACC,MAAAT,EAAA,UAAAS,CAAA,GAEAP,EAAA,QAAAJ,EAAA;AAAA,IAAyB,GAG1BY,IAAA,MAAA;AACC,UAAAZ,EAAA,qBAAA,CAAAO,EAAA,OAAA;AACC,QAAAL,EAAA,OAAA;AAEA;AAAA,MAAA;AAGD,MAAAE,EAAA,QAAAJ,EAAA;AAAA,IAAyB,GAG1Ba,IAAA,MAAA;AACC,MAAAb,EAAA,oBAAAE,EAAA,cAAA;AAAA,IAA+C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3ChD,UAAAF,IAAAC,GAEAa,IAAAT,EAAAL,EAAA,UAAA;AAEA,IAAAe,EAAAC,EAAAhB,EAAA,UAAA,GAAA,MAAA;AACC,MAAAc,EAAA,QAAAd,EAAA;AAAA,IAAgC,CAAA;AAGjC,UAAAE,IAAAC,GAEAO,IAAA,MAAA;AACC,MAAAR,EAAA,qBAAAY,EAAA,KAAA;AAAA,IAAiD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZlD,UAAAG,IAAAC,EAAAjB,GAAA,YAAA,GAIAD,IAAAC,GAMAkB,IAAAd,EAAA,IAAA;AAEA,IAAAU,EAAAE,GAAA,MAAA;;AACC,OAAAG,IAAApB,EAAA,gBAAA,QAAAoB,EAAA,KAAA,CAAAC,MAAAA,EAAA,UAAAJ,EAAA,WACCA,EAAA,UAAAK,KAAAC,IAAAvB,EAAA,gBAAA,gBAAAuB,EAAA,OAAA,gBAAAD,EAAA,UAAA,MAGDE,KAAAC,IAAAN,EAAA,UAAA,gBAAAM,EAAA,cAAA,iCAAA,QAAAD,EAAA;AAAA,IAAwE,GAAA,EAAA,WAAA,GAAA,CAAA;AAGzE,UAAAE,IAAA,gBAAA,KAAA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDClBOC,KAAAC,GACAC,KAAAC,IACAC,KAAAC,IACAC,KAAAC;"}
package/package.json CHANGED
@@ -1,24 +1,32 @@
1
- {
2
- "name": "@topvisor/ui",
3
- "private": false,
4
- "version": "0.9.33",
5
- "type": "module",
6
- "description": "Topvisor UI-kit Vue",
7
- "author": "Topvisor",
8
- "keywords": [
9
- "topvisor",
10
- "vue",
11
- "ui framework",
12
- "component framework",
13
- "component library"
14
- ],
15
- "license": "MIT",
16
- "engines": {
17
- "npm": ">=10.0.0",
18
- "node": ">=22.0.0"
19
- },
20
- "peerDependencies": {
21
- "lodash": "^4.17.21",
22
- "vue": "^3.4.31"
23
- }
24
- }
1
+ {
2
+ "name": "@topvisor/ui",
3
+ "private": false,
4
+ "version": "0.9.34-utils-components-2",
5
+ "type": "module",
6
+ "description": "Topvisor UI-kit Vue",
7
+ "author": "Topvisor",
8
+ "keywords": [
9
+ "topvisor",
10
+ "vue",
11
+ "ui framework",
12
+ "component framework",
13
+ "component library"
14
+ ],
15
+ "license": "MIT",
16
+ "engines": {
17
+ "npm": ">=10.0.0",
18
+ "node": ">=22.0.0"
19
+ },
20
+ "exports": {
21
+ "./forms/forms.js": "./src/components/forms/forms.js",
22
+ "./formsExt/formsExt.js": "./src/components/formsExt/formsExt.js",
23
+ "./popup/popup.js": "./src/components/popup/popup.js",
24
+ "./project/project.js": "./src/components/project/project.js",
25
+ "./tabs/tabs.js": "./src/components/tabs/tabs.js",
26
+ "./tabsView/tabsView.js": "./src/components/tabsView/tabsView.js"
27
+ },
28
+ "peerDependencies": {
29
+ "lodash": "^4.17.21",
30
+ "vue": "^3.4.38"
31
+ }
32
+ }
@@ -1,2 +1,2 @@
1
- define(["require","exports","../.chunks/listItem.vue_vue_type_script_setup_true_lang-C7tg-67i.amd","../.chunks/widgetInput-CrrUoVPc.amd"],function(d,n,e,i){"use strict";if(typeof u>"u")var u=window.Vue;n.Popup=e._sfc_main,n.PopupListItem=e._sfc_main$2,n.PopupOpener=e._sfc_main$1,n.PopupWidgetInput=i.PopupWidgetInput,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})});
1
+ define(["require","exports","../.chunks/listItem.vue_vue_type_script_setup_true_lang-CpNwVBHY.amd","vue","../.chunks/forms-Cksc7Rb7.amd","../require/css.amd!../assets/popup.css"],function(y,o,p,e,t){"use strict";if(typeof e>"u")var e=window.Vue;const i=e.defineComponent({__name:"widgetInput",props:e.mergeModels({modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},modificator:{},size:{},isError:{type:Boolean},isLoading:{type:Boolean},icon:{},icon2:{},addCleaner:{type:Boolean,default:!0},title:{},captionType:{}},{modelValue:{default:""},modelModifiers:{}}),emits:["update:modelValue"],setup(m){const n=e.useModel(m,"modelValue");return(f,u)=>(e.openBlock(),e.createBlock(t.TopInput$1,e.mergeProps(f.$props,{modificator:"popupWidgetInput",modelValue:n.value,"onUpdate:modelValue":u[0]||(u[0]=g=>n.value=g)}),null,16,["modelValue"]))}}),d={$style:{"top-input-popupWidgetInput":"top-input-popupWidgetInput","top-input_input-popupWidgetInput":"top-input_input-popupWidgetInput"}},s=t._export_sfc(i,[["__cssModules",d]]),l=p._sfc_main,a=p._sfc_main$2,c=p._sfc_main$1,r=s;o.TopPopup=l,o.TopPopupListItem=c,o.TopPopupOpener=a,o.TopPopupWidgetInput=r,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=popup.amd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"popup.amd.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"popup.amd.js","sources":["../../src/components/popup/popup.ts"],"sourcesContent":["import type { ComponentCustomProps } from 'vue';\r\n\r\nimport Popup from './popup/popup.vue';\r\nimport PopupOpener from './popup/opener.vue';\r\nimport PopupListItem from './popup/listItem.vue';\r\nimport PopupWidgetInput from './popup/widgetInput.vue';\r\n\r\nexport const TopPopup = Popup as typeof Popup & ComponentCustomProps;\r\nexport const TopPopupOpener = PopupOpener as typeof PopupOpener & ComponentCustomProps;\r\nexport const TopPopupListItem = PopupListItem as typeof PopupListItem & ComponentCustomProps;\r\nexport const TopPopupWidgetInput = PopupWidgetInput as typeof PopupWidgetInput & ComponentCustomProps;\r\n"],"names":["TopPopup","listItem_vue_vue_type_script_setup_true_lang","TopPopupOpener","TopPopupListItem","TopPopupWidgetInput","PopupWidgetInput"],"mappings":"8gCAOOA,EAAAC,EAAA,UACAC,EAAAD,EAAA,YACAE,EAAAF,EAAA,YACAG,EAAAC"}
package/popup/popup.js CHANGED
@@ -1,9 +1,50 @@
1
- import { _ as e, b as t, a } from "../.chunks/listItem.vue_vue_type_script_setup_true_lang-BfCj7kQR.es.js";
2
- import { P as s } from "../.chunks/widgetInput-Br5COpvG.es.js";
1
+ import { insertToPage as s } from "../utils/css.js";
2
+ import { _ as a, b as i, a as l } from "../.chunks/listItem.vue_vue_type_script_setup_true_lang-C2XaxeNZ.es.js";
3
+ import { defineComponent as d, mergeModels as r, useModel as m, openBlock as c, createBlock as f, mergeProps as _ } from "vue";
4
+ import { u as g, q as I } from "../.chunks/forms-CRAV8PiZ.es.js";
5
+ const u = ["../assets/popup.css"].map((e) => import.meta.resolve(e));
6
+ s(u, !0);
7
+ const y = /* @__PURE__ */ d({
8
+ __name: "widgetInput",
9
+ props: /* @__PURE__ */ r({
10
+ modelValue: {},
11
+ name: {},
12
+ disabled: { type: Boolean },
13
+ readonly: { type: Boolean },
14
+ modificator: {},
15
+ size: {},
16
+ isError: { type: Boolean },
17
+ isLoading: { type: Boolean },
18
+ icon: {},
19
+ icon2: {},
20
+ addCleaner: { type: Boolean, default: !0 },
21
+ title: {},
22
+ captionType: {}
23
+ }, {
24
+ modelValue: {
25
+ default: ""
26
+ },
27
+ modelModifiers: {}
28
+ }),
29
+ emits: ["update:modelValue"],
30
+ setup(e) {
31
+ const o = m(e, "modelValue");
32
+ return (t, p) => (c(), f(g, _(t.$props, {
33
+ modificator: "popupWidgetInput",
34
+ modelValue: o.value,
35
+ "onUpdate:modelValue": p[0] || (p[0] = (n) => o.value = n)
36
+ }), null, 16, ["modelValue"]));
37
+ }
38
+ }), P = {
39
+ "top-input-popupWidgetInput": "top-input-popupWidgetInput",
40
+ "top-input_input-popupWidgetInput": "top-input_input-popupWidgetInput"
41
+ }, T = {
42
+ $style: P
43
+ }, B = /* @__PURE__ */ I(y, [["__cssModules", T]]), v = a, C = i, b = l, k = B;
3
44
  export {
4
- e as Popup,
5
- t as PopupListItem,
6
- a as PopupOpener,
7
- s as PopupWidgetInput
45
+ v as TopPopup,
46
+ b as TopPopupListItem,
47
+ C as TopPopupOpener,
48
+ k as TopPopupWidgetInput
8
49
  };
9
50
  //# sourceMappingURL=popup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"popup.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"popup.js","sources":["../../src/components/popup/popup/widgetInput.vue","../../src/components/popup/popup.ts"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport type { ModelRef } from 'vue';\r\nimport type { Props } from '@/components/forms/input/input';\r\nimport TopInput from '@/components/forms/input/input.vue';\r\n\r\nwithDefaults(defineProps<Props>(), {\r\n\taddCleaner: true,\r\n});\r\n\r\nconst model: ModelRef<string> = defineModel({\r\n\tdefault: '',\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<TopInput\r\n\t\t:=\"$props\"\r\n\t\tmodificator=\"popupWidgetInput\"\r\n\t\tv-model=\"model\"\r\n\t/>\r\n</template>\r\n\r\n<style module>\r\n.top-input-popupWidgetInput {\r\n\t--top-loadbar-color: var(--color-line-2);\r\n\r\n\twidth: 100%;\r\n}\r\n\r\n.top-input_input-popupWidgetInput {\r\n\tborder: none;\r\n\tbackground: var(--color-layer-secondary-1);\r\n}\r\n\r\n.top-input_input-popupWidgetInput:hover {\r\n\tbackground: var(--color-layer-secondary-2);\r\n}\r\n\r\n.top-input_input-popupWidgetInput:focus {\r\n\tbackground: var(--color-layer-secondary-3);\r\n\toutline: unset;\r\n}\r\n</style>\r\n","import type { ComponentCustomProps } from 'vue';\r\n\r\nimport Popup from './popup/popup.vue';\r\nimport PopupOpener from './popup/opener.vue';\r\nimport PopupListItem from './popup/listItem.vue';\r\nimport PopupWidgetInput from './popup/widgetInput.vue';\r\n\r\nexport const TopPopup = Popup as typeof Popup & ComponentCustomProps;\r\nexport const TopPopupOpener = PopupOpener as typeof PopupOpener & ComponentCustomProps;\r\nexport const TopPopupListItem = PopupListItem as typeof PopupListItem & ComponentCustomProps;\r\nexport const TopPopupWidgetInput = PopupWidgetInput as typeof PopupWidgetInput & ComponentCustomProps;\r\n"],"names":["model","useModel","__props","TopPopup","_sfc_main$1","TopPopupOpener","_sfc_main$2","TopPopupListItem","_sfc_main$3","TopPopupWidgetInput","PopupWidgetInput"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,UAAAA,IAAAC,EAAAC,GAAA,YAAA;;;;;;;;;;;;oDCFOC,IAAAC,GACAC,IAAAC,GACAC,IAAAC,GACAC,IAAAC;"}
@@ -1,2 +1,2 @@
1
- define(["require","exports","../.chunks/forms-B2NcBl7S.amd","../utils/dom.amd","../utils/scroll.amd"],function(require,exports,forms,utils_dom,utils_scroll){"use strict";if(typeof vue>"u")var vue=window.Vue;class WorkerEvents{static init(){document.addEventListener("mouseover",t=>{var o;!(t.target instanceof HTMLElement)||!((o=t.target.dataset)!=null&&o.topPopupOpenByHover)||t.target.click()}),document.addEventListener("scroll",()=>{forms.Core.state.isMobile||forms.Core.state.isMobileUA||Worker$1.getAll().forEach(t=>Worker$1.close(t))}),forms.Events.addOnReize(t=>{forms.Core.state.isMobile&&t.topEvent.widthDiff&&Worker$1.getAll().forEach(o=>Worker$1.close(o))}),document.addEventListener("click",this.onclick)}static async onclick(t){var p,a,r,s,n;if(!(t.target instanceof HTMLElement))return;let o;switch(!0){case!!((p=t.target.dataset)!=null&&p.topPopup):o=t.target;break;case!!((a=t.target.parentElement)!=null&&a.dataset.topPopup):o=t.target.parentElement;break;case!!((s=(r=t.target.parentElement)==null?void 0:r.parentElement)!=null&&s.dataset.topPopup):o=(n=t.target.parentElement)==null?void 0:n.parentElement;break}o&&(o.dataset.topPopupDisabled||o.dataset.topPopupOpened||(t.preventDefault(),await Worker$1.openByOpener(o)))}}let decoratorBeforeOpen,decoratorAfterOpen,decoratorIsIgnoreOuterClick,i18n={Close:"Close"};class Worker{static noClose=!1;static vueConnectors=new Map;static onInitApp(e){e&&(decoratorBeforeOpen=e.decoratorBeforeOpen,decoratorAfterOpen=e.decoratorAfterOpen,decoratorIsIgnoreOuterClick=e.decoratorIsIgnoreOuterClick,i18n=e.i18n)}static getPopup(e){return utils_dom.default.storage(e,"Popup")}static getAll(){return utils_dom.default.querySelectorAllArray(document,".top-popup-wrapper")}static getAllVisible(){return utils_dom.default.querySelectorAllVisible(document,".top-popup-wrapper")}static async openByOpener(e){if(!(e instanceof HTMLElement))return;const t={};return t.popup=e.dataset.topPopup,e.dataset.topPopupP&&(t.p=parseInt(e.dataset.topPopupP)),e.dataset.topPopupNotch&&(t.notch=e.dataset.topPopupNotch==="true"||e.dataset.topPopupNotch==="1"),e.dataset.topPopupClass&&(t.class=e.dataset.topPopupClass),e.dataset.topPopupPosBy&&(t.posBy=e.dataset.topPopupPosBy),e.dataset.topPopupFront&&(t.frontSelector=e.dataset.topPopupFront),e.dataset.topPopupInvertX&&(t.invertX=e.dataset.topPopupInvertX==="true"||e.dataset.topPopupInvertX==="1"),e.dataset.topPopupOpenByHover&&(t.openByHover=e.dataset.topPopupOpenByHover==="true"||e.dataset.topPopupOpenByHover==="1"),e.dataset.topPopupUseOriginal&&(t.useOriginal=e.dataset.topPopupUseOriginal==="true"||e.dataset.topPopupUseOriginal==="1"),await Worker.open(e,t)}static async open(elOpener,options){elOpener instanceof HTMLElement&&(elOpener.dataset.topPopupOpened="opened");const{default:Popup}=await new Promise((e,t)=>require(["../.chunks/popup-DncRq57t.amd"],e,t));if(forms.Core.$){const $elOpener=forms.Core.$(elOpener);if($elOpener.data("aftershow")){let afterShow=$elOpener.data("aftershow");typeof afterShow=="string"&&(afterShow=eval(afterShow.replace(/\W/g,""))),$elOpener.one("aftershow.top-menu-popup",afterShow)}if($elOpener.data("afterclose")){let afterclose=$elOpener.data("afterclose");typeof afterclose=="string"&&(afterclose=eval(afterclose.replace(/\W/g,""))),$elOpener.one("afterclose.top-menu-popup",afterclose)}}return options.isFullScreen=forms.Core.state.isMobile,options.i18n=i18n,new Popup(elOpener,options)}static close(e){const t=Worker.getPopup(e);t&&t.close()}static recalcPosition(e){const t=Worker.getPopup(e);t&&t.elPopupBody instanceof HTMLElement&&(t.recalcPosition(),utils_scroll.genHasScroll(t.elPopupBody))}static scrollToActive(e){if(!utils_dom.default.querySelectorVisible(e,"ul.top-popup_content > li > .top-active"))return;const o=e.querySelector("ul.top-popup_content"),p=utils_dom.default.querySelectorAllVisible(e,"ul.top-popup_content > li");e.classList.add("top-popup-wrapper-no_animate"),setTimeout(()=>e.classList.remove("top-popup-wrapper-no_animate"),100);let a=100;for(const r of p){if(r.querySelector(":scope > .top-active"))break;r instanceof HTMLElement&&(a+=r.offsetHeight)}if(o instanceof HTMLElement){const r=o.offsetHeight;a>r?o.scrollTop=a-r:o.scrollTop=0}}static decoratorBeforeOpen(e){decoratorBeforeOpen&&decoratorBeforeOpen(e)}static decoratorAfterOpen(e){decoratorAfterOpen&&decoratorAfterOpen(e)}static decoratorIsIgnoreOuterClick(e){return decoratorIsIgnoreOuterClick?decoratorIsIgnoreOuterClick(e):!1}static regVueComponent(e,t){if(Worker.vueConnectors.get(e))throw"Vue component Popup use duplicated id: "+e;Worker.vueConnectors.set(e,t)}static unregVueComponent(e){Worker.vueConnectors.delete(e)}}WorkerEvents.init();const Worker$1=Worker;exports.PopupWorker=Worker$1,exports.default=Worker$1,Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ define(["require","exports","../.chunks/forms-Cksc7Rb7.amd","../utils/dom.amd","../utils/scroll.amd"],function(require,exports,forms,utils_dom,utils_scroll){"use strict";if(typeof vue>"u")var vue=window.Vue;class WorkerEvents{static init(){document.addEventListener("mouseover",t=>{var o;!(t.target instanceof HTMLElement)||!((o=t.target.dataset)!=null&&o.topPopupOpenByHover)||t.target.click()}),document.addEventListener("scroll",()=>{forms.Core.state.isMobile||forms.Core.state.isMobileUA||Worker$1.getAll().forEach(t=>Worker$1.close(t))}),forms.Events.addOnReize(t=>{forms.Core.state.isMobile&&t.topEvent.widthDiff&&Worker$1.getAll().forEach(o=>Worker$1.close(o))}),document.addEventListener("click",this.onclick)}static async onclick(t){var p,a,r,s,n;if(!(t.target instanceof HTMLElement))return;let o;switch(!0){case!!((p=t.target.dataset)!=null&&p.topPopup):o=t.target;break;case!!((a=t.target.parentElement)!=null&&a.dataset.topPopup):o=t.target.parentElement;break;case!!((s=(r=t.target.parentElement)==null?void 0:r.parentElement)!=null&&s.dataset.topPopup):o=(n=t.target.parentElement)==null?void 0:n.parentElement;break}o&&(o.dataset.topPopupDisabled||o.dataset.topPopupOpened||(t.preventDefault(),await Worker$1.openByOpener(o)))}}let decoratorBeforeOpen,decoratorAfterOpen,decoratorIsIgnoreOuterClick,i18n={Close:"Close"};class Worker{static noClose=!1;static vueConnectors=new Map;static onInitApp(e){e&&(decoratorBeforeOpen=e.decoratorBeforeOpen,decoratorAfterOpen=e.decoratorAfterOpen,decoratorIsIgnoreOuterClick=e.decoratorIsIgnoreOuterClick,i18n=e.i18n)}static getPopup(e){return utils_dom.default.storage(e,"Popup")}static getAll(){return utils_dom.default.querySelectorAllArray(document,".top-popup-wrapper")}static getAllVisible(){return utils_dom.default.querySelectorAllVisible(document,".top-popup-wrapper")}static async openByOpener(e){if(!(e instanceof HTMLElement))return;const t={};return t.popup=e.dataset.topPopup,e.dataset.topPopupP&&(t.p=parseInt(e.dataset.topPopupP)),e.dataset.topPopupNotch&&(t.notch=e.dataset.topPopupNotch==="true"||e.dataset.topPopupNotch==="1"),e.dataset.topPopupClass&&(t.class=e.dataset.topPopupClass),e.dataset.topPopupPosBy&&(t.posBy=e.dataset.topPopupPosBy),e.dataset.topPopupFront&&(t.frontSelector=e.dataset.topPopupFront),e.dataset.topPopupInvertX&&(t.invertX=e.dataset.topPopupInvertX==="true"||e.dataset.topPopupInvertX==="1"),e.dataset.topPopupOpenByHover&&(t.openByHover=e.dataset.topPopupOpenByHover==="true"||e.dataset.topPopupOpenByHover==="1"),e.dataset.topPopupUseOriginal&&(t.useOriginal=e.dataset.topPopupUseOriginal==="true"||e.dataset.topPopupUseOriginal==="1"),await Worker.open(e,t)}static async open(elOpener,options){elOpener instanceof HTMLElement&&(elOpener.dataset.topPopupOpened="opened");const{default:Popup}=await new Promise((e,t)=>require(["../.chunks/popup-3fVBIqu0.amd"],e,t));if(forms.Core.$){const $elOpener=forms.Core.$(elOpener);if($elOpener.data("aftershow")){let afterShow=$elOpener.data("aftershow");typeof afterShow=="string"&&(afterShow=eval(afterShow.replace(/\W/g,""))),$elOpener.one("aftershow.top-menu-popup",afterShow)}if($elOpener.data("afterclose")){let afterclose=$elOpener.data("afterclose");typeof afterclose=="string"&&(afterclose=eval(afterclose.replace(/\W/g,""))),$elOpener.one("afterclose.top-menu-popup",afterclose)}}return options.isFullScreen=forms.Core.state.isMobile,options.i18n=i18n,new Popup(elOpener,options)}static close(e){const t=Worker.getPopup(e);t&&t.close()}static recalcPosition(e){const t=Worker.getPopup(e);t&&t.elPopupBody instanceof HTMLElement&&(t.recalcPosition(),utils_scroll.genHasScroll(t.elPopupBody))}static scrollToActive(e){if(!utils_dom.default.querySelectorVisible(e,"ul.top-popup_content > li > .top-active"))return;const o=e.querySelector("ul.top-popup_content"),p=utils_dom.default.querySelectorAllVisible(e,"ul.top-popup_content > li");e.classList.add("top-popup-wrapper-no_animate"),setTimeout(()=>e.classList.remove("top-popup-wrapper-no_animate"),100);let a=100;for(const r of p){if(r.querySelector(":scope > .top-active"))break;r instanceof HTMLElement&&(a+=r.offsetHeight)}if(o instanceof HTMLElement){const r=o.offsetHeight;a>r?o.scrollTop=a-r:o.scrollTop=0}}static decoratorBeforeOpen(e){decoratorBeforeOpen&&decoratorBeforeOpen(e)}static decoratorAfterOpen(e){decoratorAfterOpen&&decoratorAfterOpen(e)}static decoratorIsIgnoreOuterClick(e){return decoratorIsIgnoreOuterClick?decoratorIsIgnoreOuterClick(e):!1}static regVueComponent(e,t){if(Worker.vueConnectors.get(e))throw"Vue component Popup use duplicated id: "+e;Worker.vueConnectors.set(e,t)}static unregVueComponent(e){Worker.vueConnectors.delete(e)}}WorkerEvents.init();const Worker$1=Worker;exports.TopPopupWorker=Worker$1,exports.default=Worker$1,Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
2
2
  //# sourceMappingURL=worker.amd.js.map
package/popup/worker.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C as Core, E as Events } from "../.chunks/forms-S36M7cBH.es.js";
1
+ import { C as Core, E as Events } from "../.chunks/forms-CRAV8PiZ.es.js";
2
2
  import DOM from "../utils/dom.js";
3
3
  import { genHasScroll } from "../utils/scroll.js";
4
4
  class WorkerEvents {
@@ -74,7 +74,7 @@ class Worker {
74
74
  */
75
75
  static async open(elOpener, options) {
76
76
  elOpener instanceof HTMLElement && (elOpener.dataset.topPopupOpened = "opened");
77
- const { default: Popup } = await import("../.chunks/popup-BK3xlBZm.es.js");
77
+ const { default: Popup } = await import("../.chunks/popup-BWTP6yaC.es.js");
78
78
  if (Core.$) {
79
79
  const $elOpener = Core.$(elOpener);
80
80
  if ($elOpener.data("aftershow")) {
@@ -146,7 +146,7 @@ class Worker {
146
146
  WorkerEvents.init();
147
147
  const Worker$1 = Worker;
148
148
  export {
149
- Worker$1 as PopupWorker,
149
+ Worker$1 as TopPopupWorker,
150
150
  Worker$1 as default
151
151
  };
152
152
  //# sourceMappingURL=worker.js.map
@@ -1,2 +1,2 @@
1
- define(["require","exports","vue","../.chunks/forms-B2NcBl7S.amd","../.chunks/listItem.vue_vue_type_script_setup_true_lang-C7tg-67i.amd","../.chunks/menu-S1Hk7D3W.amd","../require/css.amd!../assets/project.css"],function(y,c,e,s,i,p){"use strict";if(typeof e>"u")var e=window.Vue;const d={class:"top-selectorCompetitors"},m={class:"top-ellipsis1"},f=e.defineComponent({__name:"selectorCompetitors",props:e.mergeModels({modelValue:{},items:{},showSelectAllItem:{type:Boolean,default:!0}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(a){const C=a,o=e.useModel(a,"modelValue"),_=e.computed(()=>{if(C.showSelectAllItem)return{icon:"",title:"Select all",value:"all",content:""}});return(n,r)=>(e.openBlock(),e.createElementBlock("div",d,[e.unref(s.Core).state.isMobile?(e.openBlock(),e.createBlock(i._sfc_main,{key:0},{opener:e.withCtx(()=>[e.createVNode(s.Button,{class:"top-selectorCompetitors_opener",color:"theme",icon:"",icon2:""},{default:e.withCtx(()=>{var t;return[e.createTextVNode(e.toDisplayString((t=n.items.find(u=>{var l;return u.value===((l=o.value)==null?void 0:l[0])}))==null?void 0:t.content),1)]}),_:1})]),contentList:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.items,(t,u)=>{var l;return e.openBlock(),e.createBlock(i._sfc_main$2,{class:e.normalizeClass({"top-active":(l=o.value)==null?void 0:l.includes(t.value)}),"data-top-icon":t.icon,title:t.title,onClick:()=>o.value=[t.value]},{default:e.withCtx(()=>[e.createElementVNode("span",m,e.toDisplayString(t.content),1)]),_:2},1032,["class","data-top-icon","title","onClick"])}),256))]),_:1})):(e.openBlock(),e.createBlock(p.Menu,{key:1,modelValue:o.value,"onUpdate:modelValue":r[0]||(r[0]=t=>o.value=t),items:n.items,isMultiple:!0,styling:"bar",canBeEmptyMultiple:!1,selectAllItem:_.value},null,8,["modelValue","items","selectAllItem"]))]))}}),k={$style:{"top-selectorCompetitors_opener":"top-selectorCompetitors_opener","top-button":"top-button"}},v=s._export_sfc(f,[["__cssModules",k]]);c.SelectorCompetitors=v,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
1
+ define(["require","exports","vue","../.chunks/forms-Cksc7Rb7.amd","../.chunks/listItem.vue_vue_type_script_setup_true_lang-CpNwVBHY.amd","../.chunks/menu-BX8GV8-v.amd","../require/css.amd!../assets/project.css"],function(y,c,e,s,i,p){"use strict";if(typeof e>"u")var e=window.Vue;const m={class:"top-selectorCompetitors"},d={class:"top-ellipsis1"},f=e.defineComponent({__name:"selectorCompetitors",props:e.mergeModels({modelValue:{},items:{},showSelectAllItem:{type:Boolean,default:!0}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(r){const v=r,o=e.useModel(r,"modelValue"),_=e.computed(()=>{if(v.showSelectAllItem)return{icon:"",title:"Select all",value:"all",content:""}});return(n,a)=>(e.openBlock(),e.createElementBlock("div",m,[e.unref(s.Core).state.isMobile?(e.openBlock(),e.createBlock(i._sfc_main,{key:0},{opener:e.withCtx(()=>[e.createVNode(s.TopButton$1,{class:"top-selectorCompetitors_opener",color:"theme",icon:"",icon2:""},{default:e.withCtx(()=>{var t;return[e.createTextVNode(e.toDisplayString((t=n.items.find(u=>{var l;return u.value===((l=o.value)==null?void 0:l[0])}))==null?void 0:t.content),1)]}),_:1})]),contentList:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.items,(t,u)=>{var l;return e.openBlock(),e.createBlock(i._sfc_main$1,{class:e.normalizeClass({"top-active":(l=o.value)==null?void 0:l.includes(t.value)}),"data-top-icon":t.icon,title:t.title,onClick:()=>o.value=[t.value]},{default:e.withCtx(()=>[e.createElementVNode("span",d,e.toDisplayString(t.content),1)]),_:2},1032,["class","data-top-icon","title","onClick"])}),256))]),_:1})):(e.openBlock(),e.createBlock(p.Menu,{key:1,modelValue:o.value,"onUpdate:modelValue":a[0]||(a[0]=t=>o.value=t),items:n.items,isMultiple:!0,styling:"bar",canBeEmptyMultiple:!1,selectAllItem:_.value},null,8,["modelValue","items","selectAllItem"]))]))}}),C={$style:{"top-selectorCompetitors_opener":"top-selectorCompetitors_opener","top-button":"top-button"}},k=s._export_sfc(f,[["__cssModules",C]]);c.TopSelectorCompetitors=k,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=project.amd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.amd.js","sources":["../../src/components/project/selectorCompetitors/selectorCompetitors.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props } from './selectorCompetitors';\r\nimport Core from '@/core/core/core';\r\nimport Button from '@/components/forms/button/button.vue';\r\nimport Popup from '@/components/popup/popup/popup.vue';\r\nimport ListItem from '@/components/popup/popup/listItem.vue';\r\nimport Menu from '@/components/formsExt/menu/menu.vue';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tshowSelectAllItem: true,\r\n});\r\nconst model = defineModel<Props['modelValue']>();\r\n\r\nconst selectAllItem = computed(() => {\r\n\tif (props.showSelectAllItem) {\r\n\t\treturn {\r\n\t\t\ticon: '',\r\n\t\t\ttitle: 'Select all', // ### TODO: translate\r\n\t\t\tvalue: 'all',\r\n\t\t\tcontent: '',\r\n\t\t};\r\n\t}\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-selectorCompetitors\">\r\n\t\t<Popup v-if=\"Core.state.isMobile\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tclass=\"top-selectorCompetitors_opener\"\r\n\t\t\t\t\tcolor=\"theme\"\r\n\t\t\t\t\ticon=\"\"\r\n\t\t\t\t\ticon2=\"\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ items.find((item) => item.value === model?.[0])?.content }}\r\n\t\t\t\t</Button>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<ListItem\r\n\t\t\t\t\tv-for=\"(item, index) in items\"\r\n\t\t\t\t\t:class=\"{\r\n\t\t\t\t\t\t'top-active': model?.includes(item.value)\r\n\t\t\t\t\t}\"\r\n\t\t\t\t\t:data-top-icon=\"item.icon\"\r\n\t\t\t\t\t:title=\"item.title\"\r\n\t\t\t\t\t@click=\"() => model = [item.value]\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"top-ellipsis1\">\r\n\t\t\t\t\t\t{{ item.content }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</ListItem>\r\n\t\t\t</template>\r\n\t\t</Popup>\r\n\r\n\t\t<Menu\r\n\t\t\tv-else\r\n\t\t\tv-model=\"model\"\r\n\t\t\t:items=\"items\"\r\n\t\t\t:isMultiple=\"true\"\r\n\t\t\tstyling=\"bar\"\r\n\t\t\t:canBeEmptyMultiple=\"false\"\r\n\t\t\t:selectAllItem=\"selectAllItem\"\r\n\t\t/>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-selectorCompetitors_opener.top-button {\r\n\twidth: 100%;\r\n}\r\n</style>"],"names":["props","__props","selectAllItem","vue"],"mappings":"+iBASA,MAAAA,EAAAC,+BAKAC,EAAAC,EAAA,SAAA,IAAA,CACC,GAAAH,EAAA,kBACC,MAAA,mDAIU,CAEX,CAAA"}
1
+ {"version":3,"file":"project.amd.js","sources":["../../src/components/project/selectorCompetitors/selectorCompetitors.vue","../../src/components/project/project.ts"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props } from './selectorCompetitors';\r\nimport Core from '@/core/core/core';\r\nimport Button from '@/components/forms/button/button.vue';\r\nimport Popup from '@/components/popup/popup/popup.vue';\r\nimport ListItem from '@/components/popup/popup/listItem.vue';\r\nimport Menu from '@/components/formsExt/menu/menu.vue';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tshowSelectAllItem: true,\r\n});\r\nconst model = defineModel<Props['modelValue']>();\r\n\r\nconst selectAllItem = computed(() => {\r\n\tif (props.showSelectAllItem) {\r\n\t\treturn {\r\n\t\t\ticon: '',\r\n\t\t\ttitle: 'Select all', // ### TODO: translate\r\n\t\t\tvalue: 'all',\r\n\t\t\tcontent: '',\r\n\t\t};\r\n\t}\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-selectorCompetitors\">\r\n\t\t<Popup v-if=\"Core.state.isMobile\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tclass=\"top-selectorCompetitors_opener\"\r\n\t\t\t\t\tcolor=\"theme\"\r\n\t\t\t\t\ticon=\"\"\r\n\t\t\t\t\ticon2=\"\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ items.find((item) => item.value === model?.[0])?.content }}\r\n\t\t\t\t</Button>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<ListItem\r\n\t\t\t\t\tv-for=\"(item, index) in items\"\r\n\t\t\t\t\t:class=\"{\r\n\t\t\t\t\t\t'top-active': model?.includes(item.value)\r\n\t\t\t\t\t}\"\r\n\t\t\t\t\t:data-top-icon=\"item.icon\"\r\n\t\t\t\t\t:title=\"item.title\"\r\n\t\t\t\t\t@click=\"() => model = [item.value]\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"top-ellipsis1\">\r\n\t\t\t\t\t\t{{ item.content }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</ListItem>\r\n\t\t\t</template>\r\n\t\t</Popup>\r\n\r\n\t\t<Menu\r\n\t\t\tv-else\r\n\t\t\tv-model=\"model\"\r\n\t\t\t:items=\"items\"\r\n\t\t\t:isMultiple=\"true\"\r\n\t\t\tstyling=\"bar\"\r\n\t\t\t:canBeEmptyMultiple=\"false\"\r\n\t\t\t:selectAllItem=\"selectAllItem\"\r\n\t\t/>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-selectorCompetitors_opener.top-button {\r\n\twidth: 100%;\r\n}\r\n</style>","import type { ComponentCustomProps } from 'vue';\n\nimport SelectorCompetitors from './selectorCompetitors/selectorCompetitors.vue';\n\nexport const TopSelectorCompetitors = SelectorCompetitors as typeof SelectorCompetitors & ComponentCustomProps;\n"],"names":["props","__props","selectAllItem","vue","TopSelectorCompetitors"],"mappings":"+iBASA,MAAAA,EAAAC,+BAKAC,EAAAC,EAAA,SAAA,IAAA,CACC,GAAAH,EAAA,kBACC,MAAA,mDAIU,CAEX,CAAA,wwCClBMI"}
@@ -1,11 +1,11 @@
1
1
  import { insertToPage as f } from "../utils/css.js";
2
- import { defineComponent as C, mergeModels as v, useModel as M, computed as V, openBlock as l, createElementBlock as m, unref as y, createBlock as r, withCtx as a, createVNode as k, createTextVNode as B, toDisplayString as p, Fragment as S, renderList as g, normalizeClass as I, createElementVNode as b } from "vue";
3
- import { C as h, B as A, a as N } from "../.chunks/forms-S36M7cBH.es.js";
4
- import { _ as w, b as x } from "../.chunks/listItem.vue_vue_type_script_setup_true_lang-BfCj7kQR.es.js";
5
- import { M as E } from "../.chunks/menu-v5knQbeF.es.js";
2
+ import { defineComponent as C, mergeModels as v, useModel as M, computed as V, openBlock as l, createElementBlock as m, unref as y, createBlock as r, withCtx as a, createVNode as S, createTextVNode as k, toDisplayString as p, Fragment as g, renderList as B, normalizeClass as I, createElementVNode as h } from "vue";
3
+ import { C as A, r as T, q as b } from "../.chunks/forms-CRAV8PiZ.es.js";
4
+ import { _ as N, a as w } from "../.chunks/listItem.vue_vue_type_script_setup_true_lang-C2XaxeNZ.es.js";
5
+ import { M as x } from "../.chunks/menu-BWjYRHkQ.es.js";
6
6
  const _ = ["../assets/project.css"].map((s) => import.meta.resolve(s));
7
7
  f(_, !0);
8
- const T = { class: "top-selectorCompetitors" }, $ = { class: "top-ellipsis1" }, L = /* @__PURE__ */ C({
8
+ const E = { class: "top-selectorCompetitors" }, $ = { class: "top-ellipsis1" }, L = /* @__PURE__ */ C({
9
9
  __name: "selectorCompetitors",
10
10
  props: /* @__PURE__ */ v({
11
11
  modelValue: {},
@@ -27,10 +27,10 @@ const T = { class: "top-selectorCompetitors" }, $ = { class: "top-ellipsis1" },
27
27
  content: ""
28
28
  };
29
29
  });
30
- return (n, i) => (l(), m("div", T, [
31
- y(h).state.isMobile ? (l(), r(w, { key: 0 }, {
30
+ return (n, i) => (l(), m("div", E, [
31
+ y(A).state.isMobile ? (l(), r(N, { key: 0 }, {
32
32
  opener: a(() => [
33
- k(A, {
33
+ S(T, {
34
34
  class: "top-selectorCompetitors_opener",
35
35
  color: "theme",
36
36
  icon: "",
@@ -39,7 +39,7 @@ const T = { class: "top-selectorCompetitors" }, $ = { class: "top-ellipsis1" },
39
39
  default: a(() => {
40
40
  var e;
41
41
  return [
42
- B(p((e = n.items.find((c) => {
42
+ k(p((e = n.items.find((c) => {
43
43
  var o;
44
44
  return c.value === ((o = t.value) == null ? void 0 : o[0]);
45
45
  })) == null ? void 0 : e.content), 1)
@@ -49,9 +49,9 @@ const T = { class: "top-selectorCompetitors" }, $ = { class: "top-ellipsis1" },
49
49
  })
50
50
  ]),
51
51
  contentList: a(() => [
52
- (l(!0), m(S, null, g(n.items, (e, c) => {
52
+ (l(!0), m(g, null, B(n.items, (e, c) => {
53
53
  var o;
54
- return l(), r(x, {
54
+ return l(), r(w, {
55
55
  class: I({
56
56
  "top-active": (o = t.value) == null ? void 0 : o.includes(e.value)
57
57
  }),
@@ -60,14 +60,14 @@ const T = { class: "top-selectorCompetitors" }, $ = { class: "top-ellipsis1" },
60
60
  onClick: () => t.value = [e.value]
61
61
  }, {
62
62
  default: a(() => [
63
- b("span", $, p(e.content), 1)
63
+ h("span", $, p(e.content), 1)
64
64
  ]),
65
65
  _: 2
66
66
  }, 1032, ["class", "data-top-icon", "title", "onClick"]);
67
67
  }), 256))
68
68
  ]),
69
69
  _: 1
70
- })) : (l(), r(E, {
70
+ })) : (l(), r(x, {
71
71
  key: 1,
72
72
  modelValue: t.value,
73
73
  "onUpdate:modelValue": i[0] || (i[0] = (e) => t.value = e),
@@ -84,8 +84,8 @@ const T = { class: "top-selectorCompetitors" }, $ = { class: "top-ellipsis1" },
84
84
  "top-button": "top-button"
85
85
  }, U = {
86
86
  $style: P
87
- }, G = /* @__PURE__ */ N(L, [["__cssModules", U]]);
87
+ }, j = /* @__PURE__ */ b(L, [["__cssModules", U]]), H = j;
88
88
  export {
89
- G as SelectorCompetitors
89
+ H as TopSelectorCompetitors
90
90
  };
91
91
  //# sourceMappingURL=project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sources":["../../src/components/project/selectorCompetitors/selectorCompetitors.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props } from './selectorCompetitors';\r\nimport Core from '@/core/core/core';\r\nimport Button from '@/components/forms/button/button.vue';\r\nimport Popup from '@/components/popup/popup/popup.vue';\r\nimport ListItem from '@/components/popup/popup/listItem.vue';\r\nimport Menu from '@/components/formsExt/menu/menu.vue';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tshowSelectAllItem: true,\r\n});\r\nconst model = defineModel<Props['modelValue']>();\r\n\r\nconst selectAllItem = computed(() => {\r\n\tif (props.showSelectAllItem) {\r\n\t\treturn {\r\n\t\t\ticon: '',\r\n\t\t\ttitle: 'Select all', // ### TODO: translate\r\n\t\t\tvalue: 'all',\r\n\t\t\tcontent: '',\r\n\t\t};\r\n\t}\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-selectorCompetitors\">\r\n\t\t<Popup v-if=\"Core.state.isMobile\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tclass=\"top-selectorCompetitors_opener\"\r\n\t\t\t\t\tcolor=\"theme\"\r\n\t\t\t\t\ticon=\"\"\r\n\t\t\t\t\ticon2=\"\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ items.find((item) => item.value === model?.[0])?.content }}\r\n\t\t\t\t</Button>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<ListItem\r\n\t\t\t\t\tv-for=\"(item, index) in items\"\r\n\t\t\t\t\t:class=\"{\r\n\t\t\t\t\t\t'top-active': model?.includes(item.value)\r\n\t\t\t\t\t}\"\r\n\t\t\t\t\t:data-top-icon=\"item.icon\"\r\n\t\t\t\t\t:title=\"item.title\"\r\n\t\t\t\t\t@click=\"() => model = [item.value]\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"top-ellipsis1\">\r\n\t\t\t\t\t\t{{ item.content }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</ListItem>\r\n\t\t\t</template>\r\n\t\t</Popup>\r\n\r\n\t\t<Menu\r\n\t\t\tv-else\r\n\t\t\tv-model=\"model\"\r\n\t\t\t:items=\"items\"\r\n\t\t\t:isMultiple=\"true\"\r\n\t\t\tstyling=\"bar\"\r\n\t\t\t:canBeEmptyMultiple=\"false\"\r\n\t\t\t:selectAllItem=\"selectAllItem\"\r\n\t\t/>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-selectorCompetitors_opener.top-button {\r\n\twidth: 100%;\r\n}\r\n</style>"],"names":["props","__props","model","useModel","selectAllItem","computed"],"mappings":";;;;;;;;;;;;;;;;;;;AASA,UAAAA,IAAAC,GAGAC,IAAAC,EAAAF,GAAA,YAAA,GAEAG,IAAAC,EAAA,MAAA;AACC,UAAAL,EAAA;AACC,eAAA;AAAA,UAAO,MAAA;AAAA,UACA,OAAA;AAAA;AAAA,UACC,OAAA;AAAA,UACA,SAAA;AAAA,QACE;AAAA,IAEX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"project.js","sources":["../../src/components/project/selectorCompetitors/selectorCompetitors.vue","../../src/components/project/project.ts"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props } from './selectorCompetitors';\r\nimport Core from '@/core/core/core';\r\nimport Button from '@/components/forms/button/button.vue';\r\nimport Popup from '@/components/popup/popup/popup.vue';\r\nimport ListItem from '@/components/popup/popup/listItem.vue';\r\nimport Menu from '@/components/formsExt/menu/menu.vue';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tshowSelectAllItem: true,\r\n});\r\nconst model = defineModel<Props['modelValue']>();\r\n\r\nconst selectAllItem = computed(() => {\r\n\tif (props.showSelectAllItem) {\r\n\t\treturn {\r\n\t\t\ticon: '',\r\n\t\t\ttitle: 'Select all', // ### TODO: translate\r\n\t\t\tvalue: 'all',\r\n\t\t\tcontent: '',\r\n\t\t};\r\n\t}\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-selectorCompetitors\">\r\n\t\t<Popup v-if=\"Core.state.isMobile\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tclass=\"top-selectorCompetitors_opener\"\r\n\t\t\t\t\tcolor=\"theme\"\r\n\t\t\t\t\ticon=\"\"\r\n\t\t\t\t\ticon2=\"\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ items.find((item) => item.value === model?.[0])?.content }}\r\n\t\t\t\t</Button>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<ListItem\r\n\t\t\t\t\tv-for=\"(item, index) in items\"\r\n\t\t\t\t\t:class=\"{\r\n\t\t\t\t\t\t'top-active': model?.includes(item.value)\r\n\t\t\t\t\t}\"\r\n\t\t\t\t\t:data-top-icon=\"item.icon\"\r\n\t\t\t\t\t:title=\"item.title\"\r\n\t\t\t\t\t@click=\"() => model = [item.value]\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"top-ellipsis1\">\r\n\t\t\t\t\t\t{{ item.content }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</ListItem>\r\n\t\t\t</template>\r\n\t\t</Popup>\r\n\r\n\t\t<Menu\r\n\t\t\tv-else\r\n\t\t\tv-model=\"model\"\r\n\t\t\t:items=\"items\"\r\n\t\t\t:isMultiple=\"true\"\r\n\t\t\tstyling=\"bar\"\r\n\t\t\t:canBeEmptyMultiple=\"false\"\r\n\t\t\t:selectAllItem=\"selectAllItem\"\r\n\t\t/>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-selectorCompetitors_opener.top-button {\r\n\twidth: 100%;\r\n}\r\n</style>","import type { ComponentCustomProps } from 'vue';\n\nimport SelectorCompetitors from './selectorCompetitors/selectorCompetitors.vue';\n\nexport const TopSelectorCompetitors = SelectorCompetitors as typeof SelectorCompetitors & ComponentCustomProps;\n"],"names":["props","__props","model","useModel","selectAllItem","computed","TopSelectorCompetitors","SelectorCompetitors"],"mappings":";;;;;;;;;;;;;;;;;;;AASA,UAAAA,IAAAC,GAGAC,IAAAC,EAAAF,GAAA,YAAA,GAEAG,IAAAC,EAAA,MAAA;AACC,UAAAL,EAAA;AACC,eAAA;AAAA,UAAO,MAAA;AAAA,UACA,OAAA;AAAA;AAAA,UACC,OAAA;AAAA,UACA,SAAA;AAAA,QACE;AAAA,IAEX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oDClBMM,IAAAC;"}
@@ -1,4 +1,5 @@
1
1
  import { StoryObj } from '@storybook/vue3';
2
+ import { DefineComponent, PropType, ComponentOptionsMixin, PublicProps, ExtractPropTypes } from 'vue';
2
3
 
3
4
  import * as ComponentsConst from './avatar';
4
5
  /**
@@ -7,26 +8,26 @@ import * as ComponentsConst from './avatar';
7
8
  * Рекомендуемый размер изображения: 128x128
8
9
  */
9
10
  declare const meta: {
10
- component: import('vue').DefineComponent<{
11
+ component: DefineComponent<{
11
12
  image: {
12
- type: import('vue').PropType<string>;
13
+ type: PropType<string>;
13
14
  required: true;
14
15
  };
15
16
  size: {
16
- type: import('vue').PropType<ComponentsConst.Size>;
17
+ type: PropType<ComponentsConst.Size>;
17
18
  default: number;
18
19
  };
19
20
  nickname: {
20
- type: import('vue').PropType<string>;
21
+ type: PropType<string>;
21
22
  };
22
23
  isOnline: {
23
- type: import('vue').PropType<boolean>;
24
+ type: PropType<boolean>;
24
25
  };
25
26
  lastActiveTime: {
26
- type: import('vue').PropType<string>;
27
+ type: PropType<string>;
27
28
  };
28
29
  i18n: {
29
- type: import('vue').PropType<{
30
+ type: PropType<{
30
31
  Online: string;
31
32
  LastSeen: string;
32
33
  }>;
@@ -35,26 +36,26 @@ declare const meta: {
35
36
  LastSeen: string;
36
37
  };
37
38
  };
38
- }, {}, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
39
+ }, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly< ExtractPropTypes<{
39
40
  image: {
40
- type: import('vue').PropType<string>;
41
+ type: PropType<string>;
41
42
  required: true;
42
43
  };
43
44
  size: {
44
- type: import('vue').PropType<ComponentsConst.Size>;
45
+ type: PropType<ComponentsConst.Size>;
45
46
  default: number;
46
47
  };
47
48
  nickname: {
48
- type: import('vue').PropType<string>;
49
+ type: PropType<string>;
49
50
  };
50
51
  isOnline: {
51
- type: import('vue').PropType<boolean>;
52
+ type: PropType<boolean>;
52
53
  };
53
54
  lastActiveTime: {
54
- type: import('vue').PropType<string>;
55
+ type: PropType<string>;
55
56
  };
56
57
  i18n: {
57
- type: import('vue').PropType<{
58
+ type: PropType<{
58
59
  Online: string;
59
60
  LastSeen: string;
60
61
  }>;
@@ -1,19 +1,20 @@
1
- import { Props } from './avatar';
1
+ import { Props, Size } from './avatar';
2
+ import { DefineComponent, ComponentOptionsMixin, PublicProps, ExtractPropTypes, PropType } from 'vue';
2
3
 
3
- declare const _default: import('vue').DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
4
+ declare const _default: DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
4
5
  size: number;
5
6
  i18n: () => {
6
7
  Online: string;
7
8
  LastSeen: string;
8
9
  };
9
- }>, {}, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
10
+ }>, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly< ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
10
11
  size: number;
11
12
  i18n: () => {
12
13
  Online: string;
13
14
  LastSeen: string;
14
15
  };
15
16
  }>>>, {
16
- size: import('./avatar').Size;
17
+ size: Size;
17
18
  i18n: {
18
19
  Online: string;
19
20
  LastSeen: string;
@@ -23,9 +24,9 @@ export default _default;
23
24
  type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
24
25
  type __VLS_TypePropsToRuntimeProps<T> = {
25
26
  [K in keyof T]-?: {} extends Pick<T, K> ? {
26
- type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
27
+ type: PropType<__VLS_NonUndefinedable<T[K]>>;
27
28
  } : {
28
- type: import('vue').PropType<T[K]>;
29
+ type: PropType<T[K]>;
29
30
  required: true;
30
31
  };
31
32
  };