@topvisor/ui 0.0.35 → 0.0.37

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 (267) hide show
  1. package/.chunks/datepicker-6d57a408.es.js +275 -0
  2. package/.chunks/datepicker-6d57a408.es.js.map +1 -0
  3. package/.chunks/datepicker-a0840577.amd.js +234 -0
  4. package/.chunks/datepicker-a0840577.amd.js.map +1 -0
  5. package/.chunks/forms-1aa30229.amd.js +3 -0
  6. package/.chunks/forms-1aa30229.amd.js.map +1 -0
  7. package/.chunks/forms-7be951a7.es.js +962 -0
  8. package/.chunks/forms-7be951a7.es.js.map +1 -0
  9. package/.chunks/popup-604c0a49.amd.js +341 -0
  10. package/.chunks/popup-604c0a49.amd.js.map +1 -0
  11. package/.chunks/popup-b9517276.es.js +700 -0
  12. package/.chunks/popup-b9517276.es.js.map +1 -0
  13. package/README.md +52 -19
  14. package/common/common.amd.js +2 -0
  15. package/common/common.amd.js.map +1 -0
  16. package/common/common.js +2 -0
  17. package/common/common.js.map +1 -0
  18. package/core/core.amd.js +2 -0
  19. package/core/core.amd.js.map +1 -0
  20. package/core/core.js +6 -0
  21. package/core/core.js.map +1 -0
  22. package/core.css +1 -0
  23. package/dark.css +1 -0
  24. package/forms/forms.amd.js +2 -0
  25. package/forms/forms.amd.js.map +1 -0
  26. package/forms/forms.js +16 -0
  27. package/forms/forms.js.map +1 -0
  28. package/forms/helpers.amd.js +2 -0
  29. package/forms/helpers.amd.js.map +1 -0
  30. package/forms/helpers.js +9 -0
  31. package/forms/helpers.js.map +1 -0
  32. package/forms.css +1 -0
  33. package/formsExt/formsExt.amd.js +3 -0
  34. package/formsExt/formsExt.amd.js.map +1 -0
  35. package/formsExt/formsExt.js +220 -0
  36. package/formsExt/formsExt.js.map +1 -0
  37. package/formsExt.css +1 -0
  38. package/{src/resources/icomoon → icomoon}/demo-files/demo.css +161 -161
  39. package/{src/resources/icomoon → icomoon}/demo-files/demo.js +30 -30
  40. package/{src/resources/icomoon → icomoon}/demo.html +2945 -2945
  41. package/{src/resources/icomoon → icomoon}/fonts/Topvisor-2.svg +232 -232
  42. package/{src/resources/icomoon → icomoon}/style.css +647 -647
  43. package/light.css +1 -0
  44. package/package.json +19 -68
  45. package/popup/popup.amd.js +3 -0
  46. package/popup/popup.amd.js.map +1 -0
  47. package/popup/popup.js +144 -0
  48. package/popup/popup.js.map +1 -0
  49. package/popup/worker.amd.js +2 -0
  50. package/popup/worker.amd.js.map +1 -0
  51. package/popup/worker.js +154 -0
  52. package/popup/worker.js.map +1 -0
  53. package/popup.css +1 -0
  54. package/tabs/tabs.amd.js +3 -0
  55. package/tabs/tabs.amd.js.map +1 -0
  56. package/tabs/tabs.js +97 -0
  57. package/tabs/tabs.js.map +1 -0
  58. package/tabs.css +1 -0
  59. package/utils/date.amd.js +2 -0
  60. package/utils/date.amd.js.map +1 -0
  61. package/utils/date.js +6 -0
  62. package/utils/date.js.map +1 -0
  63. package/utils/device.amd.js +2 -0
  64. package/utils/device.amd.js.map +1 -0
  65. package/utils/device.js +6 -0
  66. package/utils/device.js.map +1 -0
  67. package/utils/dom.amd.js +2 -0
  68. package/utils/dom.amd.js.map +1 -0
  69. package/utils/dom.js +64 -0
  70. package/utils/dom.js.map +1 -0
  71. package/.storybook/TopTheme.js +0 -82
  72. package/.storybook/TopThemeManager.js +0 -44
  73. package/.storybook/main.ts +0 -43
  74. package/.storybook/manager.ts +0 -28
  75. package/.storybook/preview-head.html +0 -16
  76. package/.storybook/preview.ts +0 -48
  77. package/.storybook/vue/coreDecorator.ts +0 -19
  78. package/.storybook/vue/vModelDecorator.ts +0 -27
  79. package/.vscode/extensions.json +0 -11
  80. package/.vscode/keybindings.example.json +0 -121
  81. package/.vscode/settings.json +0 -46
  82. package/Dockerfile +0 -3
  83. package/NPM.md +0 -25
  84. package/PUBLISH.md +0 -18
  85. package/STORYBOOK.md +0 -27
  86. package/USE_IN_PROJECT.md +0 -29
  87. package/build/afterBuild.sh +0 -12
  88. package/build/cssModules.ts +0 -39
  89. package/build/plugin/amdFix.ts +0 -46
  90. package/build/rollup.config.ts +0 -18
  91. package/nbproject/project.properties +0 -11
  92. package/nbproject/project.xml +0 -9
  93. package/public/README.md +0 -63
  94. package/src/components/common/common.ts +0 -1
  95. package/src/components/common/icon/icon.ts +0 -4
  96. package/src/components/common/icon/icon.vue +0 -15
  97. package/src/components/component.ts +0 -133
  98. package/src/components/forms/button/button.stories.ts +0 -112
  99. package/src/components/forms/button/button.ts +0 -51
  100. package/src/components/forms/button/button.vue +0 -75
  101. package/src/components/forms/button/stories/README.md +0 -35
  102. package/src/components/forms/button/stories/overview.vue +0 -33
  103. package/src/components/forms/button/style/button.css +0 -124
  104. package/src/components/forms/button/style/style-outline.css +0 -42
  105. package/src/components/forms/button/style/style-soft.css +0 -31
  106. package/src/components/forms/button/style/style-transparent.css +0 -35
  107. package/src/components/forms/checkbox/checkbox.stories.ts +0 -33
  108. package/src/components/forms/checkbox/checkbox.ts +0 -23
  109. package/src/components/forms/checkbox/checkbox.vue +0 -135
  110. package/src/components/forms/checkbox/stories/overview.vue +0 -171
  111. package/src/components/forms/controlLabel/controlLabel.stories.ts +0 -38
  112. package/src/components/forms/controlLabel/controlLabel.ts +0 -4
  113. package/src/components/forms/controlLabel/controlLabel.vue +0 -48
  114. package/src/components/forms/forms.ts +0 -10
  115. package/src/components/forms/helpers.ts +0 -10
  116. package/src/components/forms/hint/hint.stories.ts +0 -46
  117. package/src/components/forms/hint/hint.ts +0 -8
  118. package/src/components/forms/hint/hint.vue +0 -32
  119. package/src/components/forms/input/input.stories.ts +0 -31
  120. package/src/components/forms/input/input.ts +0 -34
  121. package/src/components/forms/input/input.vue +0 -170
  122. package/src/components/forms/input/stories/overview.vue +0 -61
  123. package/src/components/forms/inputDate/datepicker.css +0 -233
  124. package/src/components/forms/inputDate/datepicker.ts +0 -101
  125. package/src/components/forms/inputDate/inputDate.stories.ts +0 -41
  126. package/src/components/forms/inputDate/inputDate.ts +0 -4
  127. package/src/components/forms/inputDate/inputDate.vue +0 -127
  128. package/src/components/forms/inputDate/stories/overview.vue +0 -35
  129. package/src/components/forms/radio/radio.stories.ts +0 -34
  130. package/src/components/forms/radio/radio.ts +0 -15
  131. package/src/components/forms/radio/radio.vue +0 -107
  132. package/src/components/forms/radio/stories/overview.vue +0 -79
  133. package/src/components/forms/select/select.stories.ts +0 -34
  134. package/src/components/forms/select/select.ts +0 -36
  135. package/src/components/forms/select/select.vue +0 -253
  136. package/src/components/forms/select/stories/exampleOptions.ts +0 -71
  137. package/src/components/forms/select/stories/overview.vue +0 -60
  138. package/src/components/forms/switcher/stories/overview.vue +0 -139
  139. package/src/components/forms/switcher/switcher.stories.ts +0 -33
  140. package/src/components/forms/switcher/switcher.ts +0 -22
  141. package/src/components/forms/switcher/switcher.vue +0 -113
  142. package/src/components/forms/textarea/stories/overview.vue +0 -62
  143. package/src/components/forms/textarea/textarea.stories.ts +0 -33
  144. package/src/components/forms/textarea/textarea.ts +0 -38
  145. package/src/components/forms/textarea/textarea.vue +0 -119
  146. package/src/components/formsExt/editArea/editArea.stories.ts +0 -72
  147. package/src/components/formsExt/editArea/editArea.ts +0 -25
  148. package/src/components/formsExt/editArea/editArea.vue +0 -172
  149. package/src/components/formsExt/editArea/stories/README.md +0 -17
  150. package/src/components/formsExt/editArea/stories/overview.vue +0 -66
  151. package/src/components/formsExt/editInput/editInput.stories.ts +0 -36
  152. package/src/components/formsExt/editInput/editInput.ts +0 -20
  153. package/src/components/formsExt/editInput/editInput.vue +0 -57
  154. package/src/components/formsExt/editInput/stories/overview.vue +0 -54
  155. package/src/components/formsExt/formsExt.ts +0 -3
  156. package/src/components/formsExt/radioGroup/radioGroup.stories.ts +0 -51
  157. package/src/components/formsExt/radioGroup/radioGroup.ts +0 -28
  158. package/src/components/formsExt/radioGroup/radioGroup.vue +0 -143
  159. package/src/components/formsExt/radioGroup/stories/overview.vue +0 -78
  160. package/src/components/formsExt/radioGroup/styles/top-scrollBar.css +0 -52
  161. package/src/components/helper.js +0 -10
  162. package/src/components/helpersStories.ts +0 -151
  163. package/src/components/popup/lib/popup.globalEvents.js +0 -205
  164. package/src/components/popup/lib/popup.js +0 -702
  165. package/src/components/popup/lib/worker.globalEvents.js +0 -78
  166. package/src/components/popup/lib/worker.js +0 -232
  167. package/src/components/popup/popup/listItem.vue +0 -42
  168. package/src/components/popup/popup/opener.vue +0 -74
  169. package/src/components/popup/popup/popup.stories.ts +0 -68
  170. package/src/components/popup/popup/popup.ts +0 -93
  171. package/src/components/popup/popup/popup.vue +0 -95
  172. package/src/components/popup/popup/stories/README.md +0 -34
  173. package/src/components/popup/popup/stories/listItems.vue +0 -44
  174. package/src/components/popup/popup/stories/listSubItems.vue +0 -52
  175. package/src/components/popup/popup/stories/overview.vue +0 -208
  176. package/src/components/popup/popup/style/popup.css +0 -243
  177. package/src/components/popup/popup/style/popup.m.css +0 -71
  178. package/src/components/popup/popup/style/popup.pc.css +0 -28
  179. package/src/components/popup/popup.ts +0 -3
  180. package/src/components/popup/worker.ts +0 -1
  181. package/src/components/tabs/tabs/content.vue +0 -24
  182. package/src/components/tabs/tabs/stories/README.md +0 -10
  183. package/src/components/tabs/tabs/tab.vue +0 -52
  184. package/src/components/tabs/tabs/tabs.stories.ts +0 -171
  185. package/src/components/tabs/tabs/tabs.ts +0 -22
  186. package/src/components/tabs/tabs/tabs.vue +0 -64
  187. package/src/components/tabs/tabs.ts +0 -3
  188. package/src/core/base/Colors.stories.ts +0 -15
  189. package/src/core/base/Layout.stories.ts +0 -15
  190. package/src/core/base/Properties.stories.ts +0 -15
  191. package/src/core/base/base.mdx +0 -21
  192. package/src/core/core/core.ts +0 -144
  193. package/src/core/core/events.ts +0 -54
  194. package/src/core/core/options.ts +0 -15
  195. package/src/core/core/state.ts +0 -44
  196. package/src/core/directives/tooltip.ts +0 -55
  197. package/src/core/theme/Colors.stories.ts +0 -15
  198. package/src/core/theme/Properties.stories.ts +0 -15
  199. package/src/core/theme/theme.mdx +0 -15
  200. package/src/core/utils/date.ts +0 -164
  201. package/src/core/utils/device.ts +0 -48
  202. package/src/core/utils/dom.ts +0 -185
  203. package/src/core//320/235/320/260/320/261/320/276/321/200 /320/270/320/272/320/276/320/275/320/276/320/272/gallery.vue" +0 -72
  204. package/src/core//320/235/320/260/320/261/320/276/321/200 /320/270/320/272/320/276/320/275/320/276/320/272//320/235/320/260/320/261/320/276/321/200 /320/270/320/272/320/276/320/275/320/276/320/272.mdx" +0 -31
  205. package/src/core//320/235/320/260/320/261/320/276/321/200 /320/270/320/272/320/276/320/275/320/276/320/272//320/235/320/260/320/261/320/276/321/200 /320/270/320/272/320/276/320/275/320/276/320/272.stories.ts" +0 -14
  206. package/src/docs/CSS/FAQ.mdx +0 -43
  207. package/src/docs/CSS//320/236/320/261/321/211/320/270/320/265 /320/274/320/276/320/264/320/270/321/204/320/270/320/272/320/260/321/202/320/276/321/200/321/213.mdx" +0 -156
  208. package/src/docs/CSS//320/237/320/265/321/200/320/265/320/274/320/265/320/275/320/275/321/213/320/265.mdx +0 -47
  209. package/src/docs/CSS//320/237/321/200/320/265/320/264/320/277/321/200/320/276/321/206/320/265/321/201/321/201/320/276/321/200/321/213.mdx +0 -15
  210. package/src/docs/CSS//320/240/320/265/320/272/320/276/320/274/320/265/320/275/320/264/320/260/321/206/320/270/320/270 /320/221/320/255/320/234.mdx" +0 -49
  211. package/src/docs/CSS//320/241/321/202/320/270/320/273/320/270.md +0 -53
  212. package/src/docs/CSS//320/241/321/202/320/270/320/273/320/270.mdx +0 -4
  213. package/src/docs/CSS//320/247/321/202/320/276 /321/202/320/260/320/272/320/276/320/265 css /320/274/320/276/320/264/321/203/320/273/321/214.mdx" +0 -53
  214. package/src/docs/ROADMAP.md +0 -17
  215. package/src/docs/Roadmap.mdx +0 -4
  216. package/src/docs//320/222/320/262/320/265/320/264/320/265/320/275/320/270/320/265 /320/262 Storybook.mdx" +0 -323
  217. package/src/docs//320/232/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202/321/213.mdx +0 -20
  218. package/src/docs//320/237/320/276/320/273/320/265/320/267/320/275/320/260/321/217 /320/270/320/275/321/204/320/276/321/200/320/274/320/260/321/206/320/270/321/217.mdx" +0 -8
  219. package/src/docs//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260/IDE.mdx" +0 -42
  220. package/src/docs//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260//320/233/320/270/320/275/321/202/320/265/321/200.mdx" +0 -72
  221. package/src/docs//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260.mdx" +0 -29
  222. package/src/globals.d.ts +0 -1
  223. package/src/resources/styles/core/colors.css +0 -204
  224. package/src/resources/styles/core/components.css +0 -70
  225. package/src/resources/styles/core/core.ts +0 -10
  226. package/src/resources/styles/core/forms/clear.css +0 -19
  227. package/src/resources/styles/core/forms/controls.css +0 -20
  228. package/src/resources/styles/core/forms/focusable.css +0 -26
  229. package/src/resources/styles/core/forms/forms.css +0 -100
  230. package/src/resources/styles/core/icon.css +0 -58
  231. package/src/resources/styles/core/layout.css +0 -40
  232. package/src/resources/styles/core/modifiers/as.css +0 -9
  233. package/src/resources/styles/core/modifiers/ellipsis.css +0 -18
  234. package/src/resources/styles/core/modifiers/modifiers.css +0 -81
  235. package/src/resources/styles/core/modifiers/only.css +0 -19
  236. package/src/resources/styles/core/select.css +0 -16
  237. package/src/resources/styles/jquery-ui.min.css +0 -6
  238. package/src/resources/styles/storybook.css +0 -11
  239. package/src/resources/styles/themes/dark/theme.css +0 -139
  240. package/src/resources/styles/themes/dark.ts +0 -1
  241. package/src/resources/styles/themes/light/theme.css +0 -139
  242. package/src/resources/styles/themes/light.ts +0 -1
  243. package/src/storybook/components/color.vue +0 -45
  244. package/src/storybook/components/colors.vue +0 -34
  245. package/src/storybook/components/icomoon.ts +0 -38
  246. package/src/storybook/components/properties.vue +0 -82
  247. package/src/storybook/resources/accessibility.png +0 -0
  248. package/src/storybook/resources/accessibility.svg +0 -5
  249. package/src/storybook/resources/addon-library.png +0 -0
  250. package/src/storybook/resources/assets.png +0 -0
  251. package/src/storybook/resources/context.png +0 -0
  252. package/src/storybook/resources/discord.svg +0 -15
  253. package/src/storybook/resources/docs.png +0 -0
  254. package/src/storybook/resources/figma-plugin.png +0 -0
  255. package/src/storybook/resources/github.svg +0 -3
  256. package/src/storybook/resources/share.png +0 -0
  257. package/src/storybook/resources/styling.png +0 -0
  258. package/src/storybook/resources/testing.png +0 -0
  259. package/src/storybook/resources/theming.png +0 -0
  260. package/src/storybook/resources/tutorials.svg +0 -12
  261. package/src/storybook/resources/youtube.svg +0 -4
  262. package/src//320/224/320/276/320/261/321/200/320/276 /320/277/320/276/320/266/320/260/320/273/320/276/320/262/320/260/321/202/321/214.mdx" +0 -3
  263. package/tsconfig.json +0 -62
  264. package/vite.config.ts +0 -91
  265. /package/{src/resources/icomoon → icomoon}/fonts/Topvisor-2.ttf +0 -0
  266. /package/{src/resources/icomoon → icomoon}/fonts/Topvisor-2.woff +0 -0
  267. /package/{src/resources/icomoon → icomoon}/selection.json +0 -0
package/light.css ADDED
@@ -0,0 +1 @@
1
+ :root{--color-primary: var(--color-blue-500);--color-primary-light: var(--color-blue-100);--color-primary-light-opacity: rgba(25, 117, 255, .11);--color-primary-2: var(--color-blue-550);--color-primary-2-light: var(--color-blue-150);--color-primary-2-light-opacity: rgba(25, 117, 255, .22);--color-secondary-opacity: rgba(14, 65, 142, .06);--color-secondary-2-opacity: rgba(14, 65, 142, .08);--color-secondary-3-opacity: rgba(14, 65, 142, .12);--color-positive: var(--color-green-500);--color-positive-opacity: rgba(22, 196, 96, .3);--color-positive-light: var(--color-green-100);--color-positive-light-opacity: rgba(22, 196, 96, .11);--color-positive-2: var(--color-green-500);--color-positive-2-light: var(--color-green-150);--color-positive-2-light-opacity: rgba(22, 196, 96, .22);--color-warning: var(--color-orange-500);--color-warning-opacity: rgba(255, 170, 51, .3);--color-warning-light: var(--color-orange-100);--color-warning-light-opacity: rgba(255, 170, 51, .12);--color-warning-2: var(--color-orange-550);--color-warning-2-light: var(--color-orange-150);--color-warning-2-light-opacity: rgba(255, 159, 25, .22);--color-negative: var(--color-red-500);--color-negative-opacity: rgba(234, 65, 50, .3);--color-negative-light: var(--color-red-100);--color-negative-light-opacity: rgba(234, 65, 50, .11);--color-negative-2: var(--color-red-550);--color-negative-2-light: var(--color-red-150);--color-negative-2-light-opacity: rgba(234, 65, 50, .22);--color-text-1: var(--color-theme-975);--color-text-2: var(--color-theme-750);--color-text-3: var(--color-theme-550);--color-text-4: var(--color-theme-450);--color-text: var(--color-text-1);--color-text-secondary: var(--color-gray-250);--color-text-secondary-2: var(--color-gray-350);--color-text-link: var(--color-blue-550);--color-text-link-hover: var(--color-blue-600);--color-overlay: rgba(0, 0, 0, .5);--color-placeholder: var(--color-gray-500);--color-placeholder-active: var(--color-gray-300);--color-bg-1: var(--color-steel-300);--color-bg-2: var(--color-steel-150);--color-bg-3: var(--color-white);--color-line-1-opacity: rgba(14, 65, 142, .1);--color-line-2-opacity: rgba(191, 203, 218, .67);--color-line-3-opacity: rgba(143, 158, 178, .74);--scroll-thumb-color: var(--color-theme-250);--scroll-thumb-color-hover: var(--color-theme-350);--scroll-thumb-color-active: var(--color-theme-500);--body-background-color: var(--content-background-color);--content-background-color: var(--color-bg-3);--color-theme-0: var(--color-bg-3);--color-theme-25: rgba(251, 252, 253, 1);--color-theme-50: rgba(248, 250, 252, 1);--color-theme-75: rgba(241, 243, 247, 1);--color-theme-100: rgba(233, 238, 243, 1);--color-theme-125: rgba(226, 232, 238, 1);--color-theme-150: rgba(220, 226, 234, 1);--color-theme-200: rgba(213, 220, 230, 1);--color-theme-250: rgba(206, 215, 226, 1);--color-theme-300: rgba(199, 209, 222, 1);--color-theme-350: rgba(191, 203, 218, 1);--color-theme-400: rgba(181, 193, 208, 1);--color-theme-450: rgba(172, 183, 198, 1);--color-theme-500: rgba(161, 173, 188, 1);--color-theme-525: rgba(151, 162, 178, 1);--color-theme-550: rgba(141, 152, 167, 1);--color-theme-600: rgba(129, 142, 161, 1);--color-theme-650: rgba(117, 131, 150, 1);--color-theme-700: rgba(105, 118, 135, 1);--color-theme-750: rgba(94, 105, 120, 1);--color-theme-800: rgba(82, 92, 105, 1);--color-theme-850: rgba(70, 79, 90, 1);--color-theme-875: rgba(59, 66, 75, 1);--color-theme-900: rgba(47, 52, 60, 1);--color-theme-925: rgba(35, 39, 45, 1);--color-theme-950: rgba(23, 26, 30, 1);--color-theme-975: rgba(12, 13, 15, 1);--color-theme-1000: rgba(0, 0, 0, 1);--top-shadow-s: 0px 0px 3px rgba(112, 144, 176, .07), 0px 5px 25px rgba(112, 144, 176, .12);--top-shadow: 0px 0px 4px rgba(4, 9, 84, .08), 0px 4px 32px rgba(4, 9, 84, .1);--top-shadow-b: 0px 0px 4px rgba(4, 36, 84, .08), 0px 18px 32px rgba(4, 25, 84, .18);--top-shadow-darken: inset 1000px 1000px 1000px 1000px rgba(0, 0, 0, .03);--top-shadow-darken-2: inset 1000px 1000px 1000px 1000px rgba(0, 0, 0, .07);--top-shadow-darken-3: inset 1000px 1000px 1000px 1000px rgba(0, 0, 0, .14)}:root{--top-forms-color: var(--color-text-1);--top-forms-color-disabled: var(--color-text-3);--top-forms-border-color: var(--color-line-2-opacity);--top-forms-border-color-hover: var(--color-primary);--top-forms-border-color-disabled: var(--color-line-1-opacity);--top-forms-placeholder-color: var(--color-text-3);--top-forms-placeholder-color-disabled: var(--color-text-4);--top-forms-background-color: var(--color-bg-3);--top-forms-background-color-hover: var(--color-bg-3)}
package/package.json CHANGED
@@ -1,68 +1,19 @@
1
- {
2
- "name": "@topvisor/ui",
3
- "private": false,
4
- "version": "0.0.35",
5
- "type": "module",
6
- "description": "Topvisor UI-kit Vue",
7
- "scripts": {
8
- "storybook": "storybook dev -p 6006 --ci",
9
- "preview": "concurrently \"npx vite build -w\" \"bash build/afterBuild.sh\" \"npx vite preview --port 4173\"",
10
- "build": "vite build && bash build/afterBuild.sh",
11
- "publish-without-change-version": "npm run build && cd dist/ && npm config set registry https://registry.npmjs.org/ && npm login && npm publish --access=public",
12
- "publish": "npm version patch && npm run publish-without-change-version"
13
- },
14
- "author": "Topvisor",
15
- "keywords": [
16
- "topvisor",
17
- "vue",
18
- "ui framework",
19
- "component framework",
20
- "component library"
21
- ],
22
- "license": "MIT",
23
- "devDependencies": {
24
- "@rollup/plugin-babel": "^6.0.3",
25
- "@rollup/plugin-commonjs": "^25.0.4",
26
- "@rollup/plugin-node-resolve": "^15.1.0",
27
- "@rollup/plugin-terser": "^0.4.3",
28
- "@storybook/addon-a11y": "^7.4.6",
29
- "@storybook/addon-console": "^2.0.0",
30
- "@storybook/addon-controls": "^7.4.6",
31
- "@storybook/addon-designs": "^7.0.5",
32
- "@storybook/addon-docs": "^7.4.6",
33
- "@storybook/addon-essentials": "^7.4.6",
34
- "@storybook/addon-interactions": "^7.4.6",
35
- "@storybook/addon-links": "^7.4.6",
36
- "@storybook/addon-mdx-gfm": "^7.4.6",
37
- "@storybook/addon-storysource": "^7.4.6",
38
- "@storybook/addon-toolbars": "^7.4.6",
39
- "@storybook/addons": "^7.4.6",
40
- "@storybook/api": "^7.4.6",
41
- "@storybook/blocks": "^7.4.6",
42
- "@storybook/global": "^5.0.0",
43
- "@storybook/manager-api": "^7.4.6",
44
- "@storybook/react": "^7.4.6",
45
- "@storybook/react-vite": "^7.4.6",
46
- "@storybook/testing-library": "^0.2.2",
47
- "@storybook/theming": "^7.4.6",
48
- "@storybook/vue3": "^7.4.6",
49
- "@storybook/vue3-vite": "^7.4.6",
50
- "@vitejs/plugin-vue": "^4.0.0",
51
- "@vuelidate/core": "^2.0.0",
52
- "@vuelidate/validators": "^2.0.0",
53
- "@whitespace/storybook-addon-html": "^5.1.6",
54
- "clean-css-cli": "^5.6.2",
55
- "concurrently": "^8.2.1",
56
- "lightningcss": "^1.21.8",
57
- "prop-types": "^15.8.1",
58
- "react": "^18.2.0",
59
- "react-dom": "^18.2.0",
60
- "storybook": "^7.4.6",
61
- "storybook-addon-pseudo-states": "^2.1.1",
62
- "string-hash": "^1.1.3",
63
- "vite": "^4.4.11"
64
- },
65
- "peerDependencies": {
66
- "vue": "^3.3.4"
67
- }
68
- }
1
+ {
2
+ "name": "@topvisor/ui",
3
+ "private": false,
4
+ "version": "0.0.37",
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
+ "peerDependencies": {
17
+ "vue": "^3.3.4"
18
+ }
19
+ }
@@ -0,0 +1,3 @@
1
+ define(["exports","vue","./worker.amd","../.chunks/forms-1aa30229.amd","../utils/dom.amd"],function(d,e,i,C,P){"use strict"; if(typeof vue === "undefined") var vue = window.Vue;var m=document.createElement("style");m.textContent=`h3[data-top-popup],div[data-top-popup],i[data-top-popup]:not(.btn):not(.g_btn),b[data-top-popup]:not(.btn):not(.g_btn){cursor:pointer;-webkit-user-select:none;user-select:none;font-style:normal;text-decoration:none;display:inline-flex;align-items:center}[data-top-popup][data-top-popup-disabled]{pointer-events:none;cursor:auto!important}i[contenteditable]{cursor:text!important}
2
+ `,document.head.appendChild(m);const u=e.defineComponent({__name:"opener",props:{id:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByHover:{type:Boolean},posBy:{default:"fixed"}},setup(a){const t=a,n=t.id||Math.random()+"";let l;function s(p){setTimeout(()=>{l=p.nextElementSibling,l&&c(l)})}e.onUpdated(()=>{l&&c(l)});function c(p){p.dataset.topPopup="vue-"+n,p.dataset.topPopupId=n,p.dataset.topPopupP=t.pos,p.dataset.topPopupPosBy=t.posBy,p.dataset.topPopupNotch=t.notch?"true":"",p.dataset.topPopupOpenByHover=t.openByHover?"true":""}return(p,r)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("template",{ref:s}),e.renderSlot(p.$slots,"default")],64))}}),$="",y={key:0,class:"top-popup_header"},f={key:1,class:"top-popup_content"},B={key:2,class:"top-popup_content"},k={key:3,class:"top-popup_footer"},_=e.defineComponent({__name:"popup",props:{id:{default:""},class:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByHover:{type:Boolean},posBy:{default:"fixed"}},emits:["open","close"],setup(a,{emit:t}){const n=a,l=n.id||Math.random()+"",s=e.ref(null),r={onOpen:async o=>{o.elPopupInner.innerText="",s.value=o.elPopupInner,r.opened=!0,r.popup=o,t("open")},onClose:o=>{s.value=null,r.opened=!1,r.popup=null,t("close")},classRef:e.toRef(n,"class"),opened:!1,popup:null};return i.regVueComponent(l,r),e.onUnmounted(()=>{i.unregVueComponent(l)}),(o,g)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[o.$slots.opener?(e.openBlock(),e.createBlock(u,{key:0,id:e.unref(l),pos:o.pos,posBy:o.posBy,notch:o.notch,openByHover:o.openByHover},{default:e.withCtx(()=>[e.renderSlot(o.$slots,"opener")]),_:3},8,["id","pos","posBy","notch","openByHover"])):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createBlock(e.Teleport,{key:1,to:s.value},[o.$slots.header?(e.openBlock(),e.createElementBlock("div",y,[e.renderSlot(o.$slots,"header")])):e.createCommentVNode("",!0),o.$slots.content?(e.openBlock(),e.createElementBlock("div",f,[e.renderSlot(o.$slots,"content")])):e.createCommentVNode("",!0),o.$slots.contentList?(e.openBlock(),e.createElementBlock("ul",B,[e.renderSlot(o.$slots,"contentList")])):e.createCommentVNode("",!0),o.$slots.footer?(e.openBlock(),e.createElementBlock("div",k,[e.renderSlot(o.$slots,"footer")])):e.createCommentVNode("",!0)],8,["to"])):e.createCommentVNode("",!0)],64))}}),h=e.defineComponent({inheritAttrs:!1,__name:"listItem",props:{type:{default:"simple"},closeByClick:{type:Boolean,default:!0}},setup(a){const t=a;return(n,l)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass({"top-popup_listDelimiter":n.type==="delimiter","top-popup_listTitle":n.type==="title"})},[t.type==="simple"||t.type==="link"?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.type==="link"?"a":"i"),e.mergeProps({key:0,class:{"top-popup_item":!0,"top-popup_item-a":t.type==="simple",a:!0,"top-popup-noCloser":!n.closeByClick}},n.$attrs),{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3},16,["class"])):e.createCommentVNode("",!0),t.type==="title"||t.type==="control"?e.renderSlot(n.$slots,"default",{key:1}):e.createCommentVNode("",!0)],2))}});d.Popup=_,d.PopupListItem=h,d.PopupOpener=u,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
3
+ //# sourceMappingURL=popup.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.amd.js","sources":["../../src/components/popup/popup/opener.vue","../../src/components/popup/popup/popup.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { onUpdated, ref } from 'vue';\r\nimport type { OpenerProps } from './popup';\r\n\r\nconst props = withDefaults(defineProps<OpenerProps>(), {\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst id = props.id || Math.random() + '';\r\n\r\nlet elOpener: Element;\r\n\r\n/**\r\n * Необычная функция для проброски props внтурь элемента слота\r\n *\r\n * @param el - вспомогательрный элемент для доступа к элементам слота\r\n */\r\nfunction render (el: any) {\r\n\tsetTimeout(() => {\r\n\t\telOpener = el.nextElementSibling;\r\n\r\n\t\tif (elOpener) {\r\n\t\t\trenderOpener(elOpener);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nonUpdated(() => {\r\n\tif (elOpener) {\r\n\t\trenderOpener(elOpener);\r\n\t}\r\n});\r\n\r\nfunction renderOpener (elOpener: any) {\r\n\telOpener.dataset.topPopup = 'vue-' + id;\r\n\telOpener.dataset.topPopupId = id;\r\n\telOpener.dataset.topPopupP = props.pos;\r\n\telOpener.dataset.topPopupPosBy = props.posBy;\r\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\r\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<template :ref=\"render\"></template>\r\n\r\n\t<!-- @slot элемент для открытия Popup -->\r\n\t<slot></slot>\r\n</template>\r\n\r\n<style>\r\nh3[data-top-popup],\r\ndiv[data-top-popup],\r\ni[data-top-popup]:not(.btn):not(.g_btn),\r\nb[data-top-popup]:not(.btn):not(.g_btn) {\r\n\tcursor: pointer;\r\n\tuser-select: none;\r\n\tfont-style: normal;\r\n\ttext-decoration: none;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n}\r\n\r\n[data-top-popup][data-top-popup-disabled] {\r\n\tpointer-events: none;\r\n\tcursor: auto !important;\r\n}\r\n\r\ni[contenteditable] {\r\n\tcursor: text !important;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { ref, toRef, onUnmounted } from 'vue';\r\nimport type { Props, Emits } from './popup';\r\nimport Opener from './opener.vue';\r\nimport Worker from '@/components/popup/lib/worker';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tid: '',\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst id = props.id || Math.random() + '';\r\nconst elPopupRef = ref(null);\r\n\r\n// см. lib/popup\r\nconst onOpen = async (popup: any) => {\r\n\tpopup.elPopupInner.innerText = '';\r\n\r\n\telPopupRef.value = popup.elPopupInner;\r\n\r\n\tvueConnector.opened = true;\r\n\tvueConnector.popup = popup;\r\n\r\n\temit('open');\r\n};\r\n\r\n// см. lib/popup\r\nconst onClose = (popup: any) => {\r\n\telPopupRef.value = null;\r\n\r\n\tvueConnector.opened = false;\r\n\tvueConnector.popup = null;\r\n\r\n\temit('close');\r\n};\r\n\r\nconst vueConnector = {\r\n\tonOpen,\r\n\tonClose,\r\n\tclassRef: toRef(props, 'class'),\r\n\topened: false,\r\n\tpopup: null,\r\n};\r\n\r\nWorker.regVueComponent(id, vueConnector);\r\n\r\nonUnmounted(() => {\r\n\tWorker.unregVueComponent(id);\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<Opener\r\n\t\tv-if=\"$slots.opener\"\r\n\t\t:id=\"id\"\r\n\t\t:pos=\"pos\"\r\n\t\t:posBy=\"posBy\"\r\n\t\t:notch=\"notch\"\r\n\t\t:openByHover=\"openByHover\"\r\n\t>\r\n\t\t<!-- @slot элемент для открытия Popup -->\r\n\t\t<slot name=\"opener\"></slot>\r\n\t</Opener>\r\n\r\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\r\n\t<!-- elPopupRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\r\n\t<teleport\r\n\t\tv-if=\"elPopupRef\"\r\n\t\t:to=\"elPopupRef\"\r\n\t>\r\n\t\t<div v-if=\"$slots.header\" class=\"top-popup_header\">\r\n\t\t\t<!-- @slot Шапка -->\r\n\t\t\t<slot name=\"header\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div v-if=\"$slots.content\" class=\"top-popup_content\">\r\n\t\t\t<!-- @slot Контент в свободной форме -->\r\n\t\t\t<slot name=\"content\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<ul v-if=\"$slots.contentList\" class=\"top-popup_content\">\r\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка испоьзуйте компонент popup/listItem -->\r\n\t\t\t<slot name=\"contentList\"></slot>\r\n\t\t</ul>\r\n\r\n\t\t<div v-if=\"$slots.footer\" class=\"top-popup_footer\">\r\n\t\t\t<!-- @slot Футер -->\r\n\t\t\t<slot name=\"footer\"></slot>\r\n\t\t</div>\r\n\t</teleport>\r\n</template>"],"names":["id","props","elOpener","render","el","renderOpener","onUpdated","elPopupRef","ref","vueConnector","popup","emit","toRef","Worker","onUnmounted"],"mappings":";gNAUMA,EAAKC,EAAM,IAAM,KAAK,OAAW,EAAA,GAEnC,IAAAC,EAOJ,SAASC,EAAQC,EAAS,CACzB,WAAW,IAAM,CAChBF,EAAWE,EAAG,mBAEVF,GACHG,EAAaH,CAAQ,CACtB,CACA,CACF,CAEAI,EAAAA,UAAU,IAAM,CACXJ,GACHG,EAAaH,CAAQ,CACtB,CACA,EAED,SAASG,EAAcH,EAAe,CACrCA,EAAS,QAAQ,SAAW,OAASF,EACrCE,EAAS,QAAQ,WAAaF,EAC9BE,EAAS,QAAQ,UAAYD,EAAM,IACnCC,EAAS,QAAQ,cAAgBD,EAAM,MACvCC,EAAS,QAAQ,cAAgBD,EAAM,MAAQ,OAAS,GACxDC,EAAS,QAAQ,oBAAsBD,EAAM,YAAc,OAAS,EACrE,sgBC3BMD,EAAKC,EAAM,IAAM,KAAK,OAAW,EAAA,GACjCM,EAAaC,MAAI,IAAI,EAwBrBC,EAAe,CACpB,OAtBc,MAAOC,GAAe,CACpCA,EAAM,aAAa,UAAY,GAE/BH,EAAW,MAAQG,EAAM,aAEzBD,EAAa,OAAS,GACtBA,EAAa,MAAQC,EAErBC,EAAK,MAAM,CAAA,EAeX,QAXgBD,GAAe,CAC/BH,EAAW,MAAQ,KAEnBE,EAAa,OAAS,GACtBA,EAAa,MAAQ,KAErBE,EAAK,OAAO,CAAA,EAMZ,SAAUC,EAAAA,MAAMX,EAAO,OAAO,EAC9B,OAAQ,GACR,MAAO,IAAA,EAGDY,OAAAA,EAAA,gBAAgBb,EAAIS,CAAY,EAEvCK,EAAAA,YAAY,IAAM,CACjBD,EAAO,kBAAkBb,CAAE,CAAA,CAC3B"}
package/popup/popup.js ADDED
@@ -0,0 +1,144 @@
1
+ import { defineComponent as m, onUpdated as h, openBlock as n, createElementBlock as u, Fragment as B, createElementVNode as v, renderSlot as r, ref as k, toRef as $, onUnmounted as P, createBlock as y, unref as C, withCtx as _, createCommentVNode as l, Teleport as H, normalizeClass as g, resolveDynamicComponent as I, mergeProps as T } from "vue";
2
+ import f from "./worker.js";
3
+ import "../.chunks/forms-7be951a7.es.js";
4
+ import "../utils/dom.js";
5
+ const V = /* @__PURE__ */ m({
6
+ __name: "opener",
7
+ props: {
8
+ id: {},
9
+ pos: { default: "3" },
10
+ notch: { type: Boolean, default: !0 },
11
+ openByHover: { type: Boolean },
12
+ posBy: { default: "fixed" }
13
+ },
14
+ setup(d) {
15
+ const o = d, t = o.id || Math.random() + "";
16
+ let s;
17
+ function a(p) {
18
+ setTimeout(() => {
19
+ s = p.nextElementSibling, s && c(s);
20
+ });
21
+ }
22
+ h(() => {
23
+ s && c(s);
24
+ });
25
+ function c(p) {
26
+ p.dataset.topPopup = "vue-" + t, p.dataset.topPopupId = t, p.dataset.topPopupP = o.pos, p.dataset.topPopupPosBy = o.posBy, p.dataset.topPopupNotch = o.notch ? "true" : "", p.dataset.topPopupOpenByHover = o.openByHover ? "true" : "";
27
+ }
28
+ return (p, i) => (n(), u(B, null, [
29
+ v("template", { ref: a }),
30
+ r(p.$slots, "default")
31
+ ], 64));
32
+ }
33
+ });
34
+ const E = {
35
+ key: 0,
36
+ class: "top-popup_header"
37
+ }, L = {
38
+ key: 1,
39
+ class: "top-popup_content"
40
+ }, N = {
41
+ key: 2,
42
+ class: "top-popup_content"
43
+ }, R = {
44
+ key: 3,
45
+ class: "top-popup_footer"
46
+ }, w = /* @__PURE__ */ m({
47
+ __name: "popup",
48
+ props: {
49
+ id: { default: "" },
50
+ class: {},
51
+ pos: { default: "3" },
52
+ notch: { type: Boolean, default: !0 },
53
+ openByHover: { type: Boolean },
54
+ posBy: { default: "fixed" }
55
+ },
56
+ emits: ["open", "close"],
57
+ setup(d, { emit: o }) {
58
+ const t = d, s = t.id || Math.random() + "", a = k(null), i = {
59
+ onOpen: async (e) => {
60
+ e.elPopupInner.innerText = "", a.value = e.elPopupInner, i.opened = !0, i.popup = e, o("open");
61
+ },
62
+ onClose: (e) => {
63
+ a.value = null, i.opened = !1, i.popup = null, o("close");
64
+ },
65
+ classRef: $(t, "class"),
66
+ opened: !1,
67
+ popup: null
68
+ };
69
+ return f.regVueComponent(s, i), P(() => {
70
+ f.unregVueComponent(s);
71
+ }), (e, D) => (n(), u(B, null, [
72
+ e.$slots.opener ? (n(), y(V, {
73
+ key: 0,
74
+ id: C(s),
75
+ pos: e.pos,
76
+ posBy: e.posBy,
77
+ notch: e.notch,
78
+ openByHover: e.openByHover
79
+ }, {
80
+ default: _(() => [
81
+ r(e.$slots, "opener")
82
+ ]),
83
+ _: 3
84
+ }, 8, ["id", "pos", "posBy", "notch", "openByHover"])) : l("", !0),
85
+ a.value ? (n(), y(H, {
86
+ key: 1,
87
+ to: a.value
88
+ }, [
89
+ e.$slots.header ? (n(), u("div", E, [
90
+ r(e.$slots, "header")
91
+ ])) : l("", !0),
92
+ e.$slots.content ? (n(), u("div", L, [
93
+ r(e.$slots, "content")
94
+ ])) : l("", !0),
95
+ e.$slots.contentList ? (n(), u("ul", N, [
96
+ r(e.$slots, "contentList")
97
+ ])) : l("", !0),
98
+ e.$slots.footer ? (n(), u("div", R, [
99
+ r(e.$slots, "footer")
100
+ ])) : l("", !0)
101
+ ], 8, ["to"])) : l("", !0)
102
+ ], 64));
103
+ }
104
+ }), z = /* @__PURE__ */ m({
105
+ inheritAttrs: !1,
106
+ __name: "listItem",
107
+ props: {
108
+ type: { default: "simple" },
109
+ closeByClick: { type: Boolean, default: !0 }
110
+ },
111
+ setup(d) {
112
+ const o = d;
113
+ return (t, s) => (n(), u("li", {
114
+ class: g({
115
+ "top-popup_listDelimiter": t.type === "delimiter",
116
+ "top-popup_listTitle": t.type === "title"
117
+ })
118
+ }, [
119
+ o.type === "simple" || o.type === "link" ? (n(), y(I(o.type === "link" ? "a" : "i"), T({
120
+ key: 0,
121
+ class: {
122
+ "top-popup_item": !0,
123
+ "top-popup_item-a": o.type === "simple",
124
+ // имитация оформления ссылки
125
+ a: !0,
126
+ // deprecated
127
+ "top-popup-noCloser": !t.closeByClick
128
+ }
129
+ }, t.$attrs), {
130
+ default: _(() => [
131
+ r(t.$slots, "default")
132
+ ]),
133
+ _: 3
134
+ }, 16, ["class"])) : l("", !0),
135
+ o.type === "title" || o.type === "control" ? r(t.$slots, "default", { key: 1 }) : l("", !0)
136
+ ], 2));
137
+ }
138
+ });
139
+ export {
140
+ w as Popup,
141
+ z as PopupListItem,
142
+ V as PopupOpener
143
+ };
144
+ //# sourceMappingURL=popup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.js","sources":["../../src/components/popup/popup/opener.vue","../../src/components/popup/popup/popup.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { onUpdated, ref } from 'vue';\r\nimport type { OpenerProps } from './popup';\r\n\r\nconst props = withDefaults(defineProps<OpenerProps>(), {\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst id = props.id || Math.random() + '';\r\n\r\nlet elOpener: Element;\r\n\r\n/**\r\n * Необычная функция для проброски props внтурь элемента слота\r\n *\r\n * @param el - вспомогательрный элемент для доступа к элементам слота\r\n */\r\nfunction render (el: any) {\r\n\tsetTimeout(() => {\r\n\t\telOpener = el.nextElementSibling;\r\n\r\n\t\tif (elOpener) {\r\n\t\t\trenderOpener(elOpener);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nonUpdated(() => {\r\n\tif (elOpener) {\r\n\t\trenderOpener(elOpener);\r\n\t}\r\n});\r\n\r\nfunction renderOpener (elOpener: any) {\r\n\telOpener.dataset.topPopup = 'vue-' + id;\r\n\telOpener.dataset.topPopupId = id;\r\n\telOpener.dataset.topPopupP = props.pos;\r\n\telOpener.dataset.topPopupPosBy = props.posBy;\r\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\r\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<template :ref=\"render\"></template>\r\n\r\n\t<!-- @slot элемент для открытия Popup -->\r\n\t<slot></slot>\r\n</template>\r\n\r\n<style>\r\nh3[data-top-popup],\r\ndiv[data-top-popup],\r\ni[data-top-popup]:not(.btn):not(.g_btn),\r\nb[data-top-popup]:not(.btn):not(.g_btn) {\r\n\tcursor: pointer;\r\n\tuser-select: none;\r\n\tfont-style: normal;\r\n\ttext-decoration: none;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n}\r\n\r\n[data-top-popup][data-top-popup-disabled] {\r\n\tpointer-events: none;\r\n\tcursor: auto !important;\r\n}\r\n\r\ni[contenteditable] {\r\n\tcursor: text !important;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { ref, toRef, onUnmounted } from 'vue';\r\nimport type { Props, Emits } from './popup';\r\nimport Opener from './opener.vue';\r\nimport Worker from '@/components/popup/lib/worker';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tid: '',\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst id = props.id || Math.random() + '';\r\nconst elPopupRef = ref(null);\r\n\r\n// см. lib/popup\r\nconst onOpen = async (popup: any) => {\r\n\tpopup.elPopupInner.innerText = '';\r\n\r\n\telPopupRef.value = popup.elPopupInner;\r\n\r\n\tvueConnector.opened = true;\r\n\tvueConnector.popup = popup;\r\n\r\n\temit('open');\r\n};\r\n\r\n// см. lib/popup\r\nconst onClose = (popup: any) => {\r\n\telPopupRef.value = null;\r\n\r\n\tvueConnector.opened = false;\r\n\tvueConnector.popup = null;\r\n\r\n\temit('close');\r\n};\r\n\r\nconst vueConnector = {\r\n\tonOpen,\r\n\tonClose,\r\n\tclassRef: toRef(props, 'class'),\r\n\topened: false,\r\n\tpopup: null,\r\n};\r\n\r\nWorker.regVueComponent(id, vueConnector);\r\n\r\nonUnmounted(() => {\r\n\tWorker.unregVueComponent(id);\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<Opener\r\n\t\tv-if=\"$slots.opener\"\r\n\t\t:id=\"id\"\r\n\t\t:pos=\"pos\"\r\n\t\t:posBy=\"posBy\"\r\n\t\t:notch=\"notch\"\r\n\t\t:openByHover=\"openByHover\"\r\n\t>\r\n\t\t<!-- @slot элемент для открытия Popup -->\r\n\t\t<slot name=\"opener\"></slot>\r\n\t</Opener>\r\n\r\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\r\n\t<!-- elPopupRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\r\n\t<teleport\r\n\t\tv-if=\"elPopupRef\"\r\n\t\t:to=\"elPopupRef\"\r\n\t>\r\n\t\t<div v-if=\"$slots.header\" class=\"top-popup_header\">\r\n\t\t\t<!-- @slot Шапка -->\r\n\t\t\t<slot name=\"header\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div v-if=\"$slots.content\" class=\"top-popup_content\">\r\n\t\t\t<!-- @slot Контент в свободной форме -->\r\n\t\t\t<slot name=\"content\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<ul v-if=\"$slots.contentList\" class=\"top-popup_content\">\r\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка испоьзуйте компонент popup/listItem -->\r\n\t\t\t<slot name=\"contentList\"></slot>\r\n\t\t</ul>\r\n\r\n\t\t<div v-if=\"$slots.footer\" class=\"top-popup_footer\">\r\n\t\t\t<!-- @slot Футер -->\r\n\t\t\t<slot name=\"footer\"></slot>\r\n\t\t</div>\r\n\t</teleport>\r\n</template>"],"names":["id","props","elOpener","render","el","renderOpener","onUpdated","elPopupRef","ref","vueConnector","popup","emit","toRef","Worker","onUnmounted"],"mappings":";;;;;;;;;;;;;;iBAUMA,IAAKC,EAAM,MAAM,KAAK,OAAW,IAAA;AAEnC,QAAAC;AAOJ,aAASC,EAAQC,GAAS;AACzB,iBAAW,MAAM;AAChB,QAAAF,IAAWE,EAAG,oBAEVF,KACHG,EAAaH,CAAQ;AAAA,MACtB,CACA;AAAA,IACF;AAEA,IAAAI,EAAU,MAAM;AACf,MAAIJ,KACHG,EAAaH,CAAQ;AAAA,IACtB,CACA;AAED,aAASG,EAAcH,GAAe;AACrCA,MAAAA,EAAS,QAAQ,WAAW,SAASF,GACrCE,EAAS,QAAQ,aAAaF,GAC9BE,EAAS,QAAQ,YAAYD,EAAM,KACnCC,EAAS,QAAQ,gBAAgBD,EAAM,OACvCC,EAAS,QAAQ,gBAAgBD,EAAM,QAAQ,SAAS,IACxDC,EAAS,QAAQ,sBAAsBD,EAAM,cAAc,SAAS;AAAA,IACrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBC3BMD,IAAKC,EAAM,MAAM,KAAK,OAAW,IAAA,IACjCM,IAAaC,EAAI,IAAI,GAwBrBC,IAAe;AAAA,MACpB,QAtBc,OAAOC,MAAe;AACpC,QAAAA,EAAM,aAAa,YAAY,IAE/BH,EAAW,QAAQG,EAAM,cAEzBD,EAAa,SAAS,IACtBA,EAAa,QAAQC,GAErBC,EAAK,MAAM;AAAA,MAAA;AAAA,MAeX,SAXe,CAACD,MAAe;AAC/B,QAAAH,EAAW,QAAQ,MAEnBE,EAAa,SAAS,IACtBA,EAAa,QAAQ,MAErBE,EAAK,OAAO;AAAA,MAAA;AAAA,MAMZ,UAAUC,EAAMX,GAAO,OAAO;AAAA,MAC9B,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA;AAGD,WAAAY,EAAA,gBAAgBb,GAAIS,CAAY,GAEvCK,EAAY,MAAM;AACjB,MAAAD,EAAO,kBAAkBb,CAAE;AAAA,IAAA,CAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ define(["require","../.chunks/forms-1aa30229.amd","../utils/dom.amd","vue"],function(require,forms,utils_dom,vue){"use strict"; if(typeof vue === "undefined") var vue = window.Vue;class WorkerEvents{static init(){document.addEventListener("mouseover",t=>{var o;(o=t.target.dataset)!=null&&o.topPopupOpenByHover&&t.target.click()}),document.addEventListener("scroll",()=>{forms.Core.isMobile||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 a,r;let o;switch(!0){case!!((a=t.target.dataset)!=null&&a.topPopup):o=t.target;break;case!!((r=t.target.parentElement)!=null&&r.dataset.topPopup):o=t.target.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){decoratorBeforeOpen=e==null?void 0:e.decoratorBeforeOpen,decoratorAfterOpen=e==null?void 0:e.decoratorAfterOpen,decoratorIsIgnoreOuterClick=e==null?void 0:e.decoratorIsIgnoreOuterClick,i18n=e==null?void 0:e.i18n}static getPopup(e){return utils_dom.storage(e,"Popup")}static getAll(){return utils_dom.querySelectorAllArray(document,".top-popup-wrapper")}static getAllVisible(){return utils_dom.querySelectorAllVisible(document,".top-popup-wrapper")}static async openByOpener(e){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),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),e.dataset.topPopupOpenByHover&&(t.openByHover=e.dataset.topPopupOpenByHover),e.dataset.topPopupUseOriginal&&(t.useOriginal=e.dataset.topPopupUseOriginal),await Worker.open(e,t)}static async open(elOpener,options){elOpener.dataset.topPopupOpened="opened";const{default:Popup}=await new Promise((e,t)=>require(["../.chunks/popup-604c0a49.amd"],e,t));if(typeof jQuery=="function"){const $elOpener=jQuery(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,await 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.recalcPosition(),HelperCommon.genHasScroll($(t.elPopupBody)))}static scrollToActive(e){if(!utils_dom.querySelectorVisible(e,"ul.top-popup_content > li > .top-active"))return;const o=e.querySelector("ul.top-popup_content"),a=utils_dom.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 r=100;for(const s of a){if(s.querySelector(":scope > .top-active"))break;r+=s.offsetHeight}const p=o.offsetHeight;r>p?o.scrollTop=r-p: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(Worker,forms.Core);const Worker$1=Worker;return Worker$1});
2
+ //# sourceMappingURL=worker.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.amd.js","sources":["../../src/components/popup/lib/worker.globalEvents.js","../../src/components/popup/lib/worker.js"],"sourcesContent":["import Core from '@/core/core/core';\r\nimport Events from '@/core/core/events';\r\nimport Worker from '@/components/popup/lib/worker';\r\n\r\n/**\r\n * Глобальные события, для реализации Popup\r\n */\r\nclass WorkerEvents {\r\n\tstatic init () {\r\n\t\t// автоматическое открытие при наведении мыши, событие глобальное, так как инициализация popup отложена\r\n\t\tdocument.addEventListener('mouseover', (e) => {\r\n\t\t\tif (!e.target.dataset?.topPopupOpenByHover) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\te.target.click();\r\n\t\t});\r\n\r\n\t\t// при скролле страницы убирать закрыть Popup\r\n\t\tdocument.addEventListener('scroll', () => {\r\n\t\t\tif (Core.isMobile) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\r\n\t\t});\r\n\r\n\t\tEvents.addOnReize(e => {\r\n\t\t\t// закрыть popup при повороте экрана телефона\r\n\t\t\t// если была отображена ПК версия, она будет закрыта\r\n\t\t\tif (Core.state.isMobile && e.topEvent.widthDiff) {\r\n\t\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdocument.addEventListener('click', this.onclick);\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик кликов\r\n\t * обрабатывает клики на открытие Popup\r\n\t * @param {Event} e\r\n\t */\r\n\tstatic async onclick (e) {\r\n\t\tlet elOpener;\r\n\r\n\t\tswitch (true) {\r\n\t\t\tcase !!e.target.dataset?.topPopup:\r\n\t\t\t\telOpener = e.target;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase !!e.target.parentElement?.dataset.topPopup:\r\n\t\t\t\telOpener = e.target.parentElement;\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif (!elOpener) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupDisabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// меню уже открыто\r\n\t\tif (elOpener.dataset.topPopupOpened) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tawait Worker.openByOpener(elOpener);\r\n\t}\r\n}\r\n\r\nexport default WorkerEvents;\r\n","import Core from '@/core/core/core';\r\nimport DOM from '@/core/utils/dom';\r\nimport GlobalEvents from '@/components/popup/lib/worker.globalEvents';\r\n\r\nlet decoratorBeforeOpen;\r\nlet decoratorAfterOpen;\r\nlet decoratorIsIgnoreOuterClick;\r\nlet i18n = {\r\n\tClose: 'Close',\r\n};\r\n\r\nclass Worker {\r\n\r\n\t// глобальное выключение закрытия меню, используется при различных оверлеях\r\n\tstatic noClose = false;\r\n\r\n\tstatic vueConnectors = new Map();\r\n\r\n\t/**\r\n\t * Вызывается при инициализаци приложения\r\n\t * устанавливает глобальные статические декортаоры для компонента Popup\r\n\t * @param {{\r\n\t * \tdecoratorBeforeOpen: (object) => void\r\n\t * \tdecoratorAfterOpen: (object) => void,\r\n\t * \tdecoratorIsIgnoreOuterClick: (e) => void,\r\n\t * \ti18n: {Close: string}\r\n\t * }} options\r\n\t */\r\n\tstatic onInitApp (options) {\r\n\t\tdecoratorBeforeOpen = options?.decoratorBeforeOpen;\r\n\t\tdecoratorAfterOpen = options?.decoratorAfterOpen;\r\n\t\tdecoratorIsIgnoreOuterClick = options?.decoratorIsIgnoreOuterClick;\r\n\t\ti18n = options?.i18n;\r\n\t}\r\n\r\n\t// вернуть объект компонента popup, привязанный к элементу\r\n\tstatic getPopup (elPopup) {\r\n\t\treturn DOM.storage(elPopup, 'Popup');\r\n\t}\r\n\r\n\tstatic getAll () {\r\n\t\treturn DOM.querySelectorAllArray(document, '.top-popup-wrapper');\r\n\t}\r\n\r\n\tstatic getAllVisible () {\r\n\t\treturn DOM.querySelectorAllVisible(document, '.top-popup-wrapper');\r\n\t}\r\n\r\n\t/**\r\n\t * Открть Popup от указанного elOpener\r\n\t * @param {Element} elOpener - элемент, который должен вызвать открытие Popup\r\n\t */\r\n\tstatic async openByOpener (elOpener) {\r\n\t\tconst options = {};\r\n\r\n\t\toptions.popup = elOpener.dataset.topPopup;\r\n\r\n\t\tif (elOpener.dataset.topPopupP) {\r\n\t\t\toptions.p = parseInt(elOpener.dataset.topPopupP);\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupNotch) {\r\n\t\t\toptions.notch = elOpener.dataset.topPopupNotch;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupClass) {\r\n\t\t\toptions.class = elOpener.dataset.topPopupClass;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupPosBy) {\r\n\t\t\toptions.posBy = elOpener.dataset.topPopupPosBy;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupFront) {\r\n\t\t\toptions.frontSelector = elOpener.dataset.topPopupFront;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupInvertX) {\r\n\t\t\toptions.invertX = elOpener.dataset.topPopupInvertX;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupOpenByHover) {\r\n\t\t\toptions.openByHover = elOpener.dataset.topPopupOpenByHover;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupUseOriginal) {\r\n\t\t\toptions.useOriginal = elOpener.dataset.topPopupUseOriginal;\r\n\t\t}\r\n\r\n\t\treturn await Worker.open(elOpener, options);\r\n\t}\r\n\r\n\t/**\r\n\t * Создать и открыть Popup\r\n\t * @param {Element} elOpener - элемент, вызвавший открытие Popup\r\n\t * @param {object} options - опции Popup\r\n\t */\r\n\tstatic async open (elOpener, options) {\r\n\t\telOpener.dataset.topPopupOpened = 'opened';\r\n\r\n\t\tconst { default: Popup } = await import('./popup');\r\n\r\n\t\tif (typeof (jQuery) === 'function') {\r\n\t\t\tconst $elOpener = jQuery(elOpener);\r\n\r\n\t\t\t// deprecated, используется aftershow.top-menu-popup\r\n\t\t\tif ($elOpener.data('aftershow')) {\r\n\t\t\t\tlet afterShow = $elOpener.data('aftershow');\r\n\t\t\t\tif (typeof (afterShow) == 'string') {\r\n\t\t\t\t\tafterShow = eval(afterShow.replace(/\\W/g, ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$elOpener.one('aftershow.top-menu-popup', afterShow);\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated, используется afterclose.top-menu-popup\r\n\t\t\tif ($elOpener.data('afterclose')) {\r\n\t\t\t\tlet afterclose = $elOpener.data('afterclose');\r\n\t\t\t\tif (typeof (afterclose) == 'string') {\r\n\t\t\t\t\tafterclose = eval(afterclose.replace(/\\W/g, ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$elOpener.one('afterclose.top-menu-popup', afterclose);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions.isFullScreen = Core.state.isMobile;\r\n\t\toptions.i18n = i18n;\r\n\r\n\t\treturn await new Popup(elOpener, options);\r\n\t}\r\n\r\n\tstatic close (elPopup) {\r\n\t\tconst popup = Worker.getPopup(elPopup);\r\n\t\tif (popup) {\r\n\t\t\tpopup.close();\r\n\t\t}\r\n\t}\r\n\r\n\tstatic recalcPosition (elPopup) {\r\n\t\tconst popup = Worker.getPopup(elPopup);\r\n\t\tif (popup) {\r\n\t\t\tpopup.recalcPosition();\r\n\r\n\t\t\t// контроль за состоянием тени скролла\r\n\t\t\t// вызывать после имзенения высоты скролла popup.elPopupBody\r\n\t\t\tHelperCommon.genHasScroll($(popup.elPopupBody));\r\n\t\t}\r\n\t}\r\n\r\n\t// скролл к активному элементу списка\r\n\tstatic scrollToActive (elPopup) {\r\n\t\tconst elItemActive = DOM.querySelectorVisible(elPopup, 'ul.top-popup_content > li > .top-active');\r\n\t\tif (!elItemActive) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elUl = elPopup.querySelector('ul.top-popup_content');\r\n\t\tconst elsLi = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li');\r\n\r\n\t\telPopup.classList.add('top-popup-wrapper-no_animate');\r\n\t\tsetTimeout(() => elPopup.classList.remove('top-popup-wrapper-no_animate'), 100);\r\n\r\n\t\tlet top = 100;\r\n\t\tfor (const elLi of elsLi) {\r\n\t\t\tif (elLi.querySelector(':scope > .top-active')) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\ttop += elLi.offsetHeight;\r\n\t\t}\r\n\r\n\t\tconst heightWrapper = elUl.offsetHeight;\r\n\t\tif (top > heightWrapper) {\r\n\t\t\telUl.scrollTop = top - heightWrapper;\r\n\t\t} else {\r\n\t\t\telUl.scrollTop = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tstatic decoratorBeforeOpen (popup) {\r\n\t\tif (decoratorBeforeOpen) {\r\n\t\t\tdecoratorBeforeOpen(popup);\r\n\t\t}\r\n\t};\r\n\r\n\tstatic decoratorAfterOpen (popup) {\r\n\t\tif (decoratorAfterOpen) {\r\n\t\t\tdecoratorAfterOpen(popup);\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Определитель того, что клик вне Popup нужно игнорировать\r\n\t * @returns {boolean} - игнорировать клик, то есть не закрывать Popup\r\n\t */\r\n\tstatic decoratorIsIgnoreOuterClick (e) {\r\n\t\tif (decoratorIsIgnoreOuterClick) {\r\n\t\t\treturn decoratorIsIgnoreOuterClick(e);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Зарегистрировать Vue компонент\r\n\t *\r\n\t * Каждый экземляр Popup регистрируется в словаре vueConnectors для последующего доступа из js\r\n\t * @param {string} id\r\n\t * @param {any} vueConnector\r\n\t */\r\n\tstatic regVueComponent (id, vueConnector) {\r\n\t\tif (Worker.vueConnectors.get(id)) {\r\n\t\t\tthrow 'Vue component Popup use duplicated id: ' + id;\r\n\t\t}\r\n\r\n\t\tWorker.vueConnectors.set(id, vueConnector);\r\n\t}\r\n\r\n\t/**\r\n\t * Снять с регистрации Vue компонент\r\n\t * @param {string} id\r\n\t */\r\n\tstatic unregVueComponent (id) {\r\n\t\tWorker.vueConnectors.delete(id);\r\n\t}\r\n\r\n}\r\n\r\nGlobalEvents.init(Worker, Core);\r\n\r\nexport default Worker;\r\n"],"names":["e","_a","Core","Worker","elPopup","Events","elOpener","_b","options","DOM","resolve","reject","popup","elUl","elsLi","top","elLi","heightWrapper","id","vueConnector","GlobalEvents"],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ import { C as Core, E as Events } from "../.chunks/forms-7be951a7.es.js";
2
+ import DOM from "../utils/dom.js";
3
+ import "vue";
4
+ class WorkerEvents {
5
+ static init() {
6
+ document.addEventListener("mouseover", (t) => {
7
+ var o;
8
+ (o = t.target.dataset) != null && o.topPopupOpenByHover && t.target.click();
9
+ }), document.addEventListener("scroll", () => {
10
+ Core.isMobile || Worker$1.getAll().forEach((t) => Worker$1.close(t));
11
+ }), Events.addOnReize((t) => {
12
+ Core.state.isMobile && t.topEvent.widthDiff && Worker$1.getAll().forEach((o) => Worker$1.close(o));
13
+ }), document.addEventListener("click", this.onclick);
14
+ }
15
+ /**
16
+ * Глобальный обработчик кликов
17
+ * обрабатывает клики на открытие Popup
18
+ * @param {Event} e
19
+ */
20
+ static async onclick(t) {
21
+ var a, r;
22
+ let o;
23
+ switch (!0) {
24
+ case !!((a = t.target.dataset) != null && a.topPopup):
25
+ o = t.target;
26
+ break;
27
+ case !!((r = t.target.parentElement) != null && r.dataset.topPopup):
28
+ o = t.target.parentElement;
29
+ break;
30
+ }
31
+ o && (o.dataset.topPopupDisabled || o.dataset.topPopupOpened || (t.preventDefault(), await Worker$1.openByOpener(o)));
32
+ }
33
+ }
34
+ let decoratorBeforeOpen, decoratorAfterOpen, decoratorIsIgnoreOuterClick, i18n = {
35
+ Close: "Close"
36
+ };
37
+ class Worker {
38
+ // глобальное выключение закрытия меню, используется при различных оверлеях
39
+ static noClose = !1;
40
+ static vueConnectors = /* @__PURE__ */ new Map();
41
+ /**
42
+ * Вызывается при инициализаци приложения
43
+ * устанавливает глобальные статические декортаоры для компонента Popup
44
+ * @param {{
45
+ * decoratorBeforeOpen: (object) => void
46
+ * decoratorAfterOpen: (object) => void,
47
+ * decoratorIsIgnoreOuterClick: (e) => void,
48
+ * i18n: {Close: string}
49
+ * }} options
50
+ */
51
+ static onInitApp(e) {
52
+ decoratorBeforeOpen = e == null ? void 0 : e.decoratorBeforeOpen, decoratorAfterOpen = e == null ? void 0 : e.decoratorAfterOpen, decoratorIsIgnoreOuterClick = e == null ? void 0 : e.decoratorIsIgnoreOuterClick, i18n = e == null ? void 0 : e.i18n;
53
+ }
54
+ // вернуть объект компонента popup, привязанный к элементу
55
+ static getPopup(e) {
56
+ return DOM.storage(e, "Popup");
57
+ }
58
+ static getAll() {
59
+ return DOM.querySelectorAllArray(document, ".top-popup-wrapper");
60
+ }
61
+ static getAllVisible() {
62
+ return DOM.querySelectorAllVisible(document, ".top-popup-wrapper");
63
+ }
64
+ /**
65
+ * Открть Popup от указанного elOpener
66
+ * @param {Element} elOpener - элемент, который должен вызвать открытие Popup
67
+ */
68
+ static async openByOpener(e) {
69
+ const t = {};
70
+ return t.popup = e.dataset.topPopup, e.dataset.topPopupP && (t.p = parseInt(e.dataset.topPopupP)), e.dataset.topPopupNotch && (t.notch = e.dataset.topPopupNotch), 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), e.dataset.topPopupOpenByHover && (t.openByHover = e.dataset.topPopupOpenByHover), e.dataset.topPopupUseOriginal && (t.useOriginal = e.dataset.topPopupUseOriginal), await Worker.open(e, t);
71
+ }
72
+ /**
73
+ * Создать и открыть Popup
74
+ * @param {Element} elOpener - элемент, вызвавший открытие Popup
75
+ * @param {object} options - опции Popup
76
+ */
77
+ static async open(elOpener, options) {
78
+ elOpener.dataset.topPopupOpened = "opened";
79
+ const { default: Popup } = await import("../.chunks/popup-b9517276.es.js");
80
+ if (typeof jQuery == "function") {
81
+ const $elOpener = jQuery(elOpener);
82
+ if ($elOpener.data("aftershow")) {
83
+ let afterShow = $elOpener.data("aftershow");
84
+ typeof afterShow == "string" && (afterShow = eval(afterShow.replace(/\W/g, ""))), $elOpener.one("aftershow.top-menu-popup", afterShow);
85
+ }
86
+ if ($elOpener.data("afterclose")) {
87
+ let afterclose = $elOpener.data("afterclose");
88
+ typeof afterclose == "string" && (afterclose = eval(afterclose.replace(/\W/g, ""))), $elOpener.one("afterclose.top-menu-popup", afterclose);
89
+ }
90
+ }
91
+ return options.isFullScreen = Core.state.isMobile, options.i18n = i18n, await new Popup(elOpener, options);
92
+ }
93
+ static close(e) {
94
+ const t = Worker.getPopup(e);
95
+ t && t.close();
96
+ }
97
+ static recalcPosition(e) {
98
+ const t = Worker.getPopup(e);
99
+ t && (t.recalcPosition(), HelperCommon.genHasScroll($(t.elPopupBody)));
100
+ }
101
+ // скролл к активному элементу списка
102
+ static scrollToActive(e) {
103
+ if (!DOM.querySelectorVisible(e, "ul.top-popup_content > li > .top-active"))
104
+ return;
105
+ const o = e.querySelector("ul.top-popup_content"), a = DOM.querySelectorAllVisible(e, "ul.top-popup_content > li");
106
+ e.classList.add("top-popup-wrapper-no_animate"), setTimeout(() => e.classList.remove("top-popup-wrapper-no_animate"), 100);
107
+ let r = 100;
108
+ for (const s of a) {
109
+ if (s.querySelector(":scope > .top-active"))
110
+ break;
111
+ r += s.offsetHeight;
112
+ }
113
+ const p = o.offsetHeight;
114
+ r > p ? o.scrollTop = r - p : o.scrollTop = 0;
115
+ }
116
+ static decoratorBeforeOpen(e) {
117
+ decoratorBeforeOpen && decoratorBeforeOpen(e);
118
+ }
119
+ static decoratorAfterOpen(e) {
120
+ decoratorAfterOpen && decoratorAfterOpen(e);
121
+ }
122
+ /**
123
+ * Определитель того, что клик вне Popup нужно игнорировать
124
+ * @returns {boolean} - игнорировать клик, то есть не закрывать Popup
125
+ */
126
+ static decoratorIsIgnoreOuterClick(e) {
127
+ return decoratorIsIgnoreOuterClick ? decoratorIsIgnoreOuterClick(e) : !1;
128
+ }
129
+ /**
130
+ * Зарегистрировать Vue компонент
131
+ *
132
+ * Каждый экземляр Popup регистрируется в словаре vueConnectors для последующего доступа из js
133
+ * @param {string} id
134
+ * @param {any} vueConnector
135
+ */
136
+ static regVueComponent(e, t) {
137
+ if (Worker.vueConnectors.get(e))
138
+ throw "Vue component Popup use duplicated id: " + e;
139
+ Worker.vueConnectors.set(e, t);
140
+ }
141
+ /**
142
+ * Снять с регистрации Vue компонент
143
+ * @param {string} id
144
+ */
145
+ static unregVueComponent(e) {
146
+ Worker.vueConnectors.delete(e);
147
+ }
148
+ }
149
+ WorkerEvents.init(Worker, Core);
150
+ const Worker$1 = Worker;
151
+ export {
152
+ Worker$1 as default
153
+ };
154
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sources":["../../src/components/popup/lib/worker.globalEvents.js","../../src/components/popup/lib/worker.js"],"sourcesContent":["import Core from '@/core/core/core';\r\nimport Events from '@/core/core/events';\r\nimport Worker from '@/components/popup/lib/worker';\r\n\r\n/**\r\n * Глобальные события, для реализации Popup\r\n */\r\nclass WorkerEvents {\r\n\tstatic init () {\r\n\t\t// автоматическое открытие при наведении мыши, событие глобальное, так как инициализация popup отложена\r\n\t\tdocument.addEventListener('mouseover', (e) => {\r\n\t\t\tif (!e.target.dataset?.topPopupOpenByHover) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\te.target.click();\r\n\t\t});\r\n\r\n\t\t// при скролле страницы убирать закрыть Popup\r\n\t\tdocument.addEventListener('scroll', () => {\r\n\t\t\tif (Core.isMobile) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\r\n\t\t});\r\n\r\n\t\tEvents.addOnReize(e => {\r\n\t\t\t// закрыть popup при повороте экрана телефона\r\n\t\t\t// если была отображена ПК версия, она будет закрыта\r\n\t\t\tif (Core.state.isMobile && e.topEvent.widthDiff) {\r\n\t\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdocument.addEventListener('click', this.onclick);\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик кликов\r\n\t * обрабатывает клики на открытие Popup\r\n\t * @param {Event} e\r\n\t */\r\n\tstatic async onclick (e) {\r\n\t\tlet elOpener;\r\n\r\n\t\tswitch (true) {\r\n\t\t\tcase !!e.target.dataset?.topPopup:\r\n\t\t\t\telOpener = e.target;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase !!e.target.parentElement?.dataset.topPopup:\r\n\t\t\t\telOpener = e.target.parentElement;\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif (!elOpener) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupDisabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// меню уже открыто\r\n\t\tif (elOpener.dataset.topPopupOpened) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tawait Worker.openByOpener(elOpener);\r\n\t}\r\n}\r\n\r\nexport default WorkerEvents;\r\n","import Core from '@/core/core/core';\r\nimport DOM from '@/core/utils/dom';\r\nimport GlobalEvents from '@/components/popup/lib/worker.globalEvents';\r\n\r\nlet decoratorBeforeOpen;\r\nlet decoratorAfterOpen;\r\nlet decoratorIsIgnoreOuterClick;\r\nlet i18n = {\r\n\tClose: 'Close',\r\n};\r\n\r\nclass Worker {\r\n\r\n\t// глобальное выключение закрытия меню, используется при различных оверлеях\r\n\tstatic noClose = false;\r\n\r\n\tstatic vueConnectors = new Map();\r\n\r\n\t/**\r\n\t * Вызывается при инициализаци приложения\r\n\t * устанавливает глобальные статические декортаоры для компонента Popup\r\n\t * @param {{\r\n\t * \tdecoratorBeforeOpen: (object) => void\r\n\t * \tdecoratorAfterOpen: (object) => void,\r\n\t * \tdecoratorIsIgnoreOuterClick: (e) => void,\r\n\t * \ti18n: {Close: string}\r\n\t * }} options\r\n\t */\r\n\tstatic onInitApp (options) {\r\n\t\tdecoratorBeforeOpen = options?.decoratorBeforeOpen;\r\n\t\tdecoratorAfterOpen = options?.decoratorAfterOpen;\r\n\t\tdecoratorIsIgnoreOuterClick = options?.decoratorIsIgnoreOuterClick;\r\n\t\ti18n = options?.i18n;\r\n\t}\r\n\r\n\t// вернуть объект компонента popup, привязанный к элементу\r\n\tstatic getPopup (elPopup) {\r\n\t\treturn DOM.storage(elPopup, 'Popup');\r\n\t}\r\n\r\n\tstatic getAll () {\r\n\t\treturn DOM.querySelectorAllArray(document, '.top-popup-wrapper');\r\n\t}\r\n\r\n\tstatic getAllVisible () {\r\n\t\treturn DOM.querySelectorAllVisible(document, '.top-popup-wrapper');\r\n\t}\r\n\r\n\t/**\r\n\t * Открть Popup от указанного elOpener\r\n\t * @param {Element} elOpener - элемент, который должен вызвать открытие Popup\r\n\t */\r\n\tstatic async openByOpener (elOpener) {\r\n\t\tconst options = {};\r\n\r\n\t\toptions.popup = elOpener.dataset.topPopup;\r\n\r\n\t\tif (elOpener.dataset.topPopupP) {\r\n\t\t\toptions.p = parseInt(elOpener.dataset.topPopupP);\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupNotch) {\r\n\t\t\toptions.notch = elOpener.dataset.topPopupNotch;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupClass) {\r\n\t\t\toptions.class = elOpener.dataset.topPopupClass;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupPosBy) {\r\n\t\t\toptions.posBy = elOpener.dataset.topPopupPosBy;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupFront) {\r\n\t\t\toptions.frontSelector = elOpener.dataset.topPopupFront;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupInvertX) {\r\n\t\t\toptions.invertX = elOpener.dataset.topPopupInvertX;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupOpenByHover) {\r\n\t\t\toptions.openByHover = elOpener.dataset.topPopupOpenByHover;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupUseOriginal) {\r\n\t\t\toptions.useOriginal = elOpener.dataset.topPopupUseOriginal;\r\n\t\t}\r\n\r\n\t\treturn await Worker.open(elOpener, options);\r\n\t}\r\n\r\n\t/**\r\n\t * Создать и открыть Popup\r\n\t * @param {Element} elOpener - элемент, вызвавший открытие Popup\r\n\t * @param {object} options - опции Popup\r\n\t */\r\n\tstatic async open (elOpener, options) {\r\n\t\telOpener.dataset.topPopupOpened = 'opened';\r\n\r\n\t\tconst { default: Popup } = await import('./popup');\r\n\r\n\t\tif (typeof (jQuery) === 'function') {\r\n\t\t\tconst $elOpener = jQuery(elOpener);\r\n\r\n\t\t\t// deprecated, используется aftershow.top-menu-popup\r\n\t\t\tif ($elOpener.data('aftershow')) {\r\n\t\t\t\tlet afterShow = $elOpener.data('aftershow');\r\n\t\t\t\tif (typeof (afterShow) == 'string') {\r\n\t\t\t\t\tafterShow = eval(afterShow.replace(/\\W/g, ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$elOpener.one('aftershow.top-menu-popup', afterShow);\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated, используется afterclose.top-menu-popup\r\n\t\t\tif ($elOpener.data('afterclose')) {\r\n\t\t\t\tlet afterclose = $elOpener.data('afterclose');\r\n\t\t\t\tif (typeof (afterclose) == 'string') {\r\n\t\t\t\t\tafterclose = eval(afterclose.replace(/\\W/g, ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$elOpener.one('afterclose.top-menu-popup', afterclose);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions.isFullScreen = Core.state.isMobile;\r\n\t\toptions.i18n = i18n;\r\n\r\n\t\treturn await new Popup(elOpener, options);\r\n\t}\r\n\r\n\tstatic close (elPopup) {\r\n\t\tconst popup = Worker.getPopup(elPopup);\r\n\t\tif (popup) {\r\n\t\t\tpopup.close();\r\n\t\t}\r\n\t}\r\n\r\n\tstatic recalcPosition (elPopup) {\r\n\t\tconst popup = Worker.getPopup(elPopup);\r\n\t\tif (popup) {\r\n\t\t\tpopup.recalcPosition();\r\n\r\n\t\t\t// контроль за состоянием тени скролла\r\n\t\t\t// вызывать после имзенения высоты скролла popup.elPopupBody\r\n\t\t\tHelperCommon.genHasScroll($(popup.elPopupBody));\r\n\t\t}\r\n\t}\r\n\r\n\t// скролл к активному элементу списка\r\n\tstatic scrollToActive (elPopup) {\r\n\t\tconst elItemActive = DOM.querySelectorVisible(elPopup, 'ul.top-popup_content > li > .top-active');\r\n\t\tif (!elItemActive) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elUl = elPopup.querySelector('ul.top-popup_content');\r\n\t\tconst elsLi = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li');\r\n\r\n\t\telPopup.classList.add('top-popup-wrapper-no_animate');\r\n\t\tsetTimeout(() => elPopup.classList.remove('top-popup-wrapper-no_animate'), 100);\r\n\r\n\t\tlet top = 100;\r\n\t\tfor (const elLi of elsLi) {\r\n\t\t\tif (elLi.querySelector(':scope > .top-active')) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\ttop += elLi.offsetHeight;\r\n\t\t}\r\n\r\n\t\tconst heightWrapper = elUl.offsetHeight;\r\n\t\tif (top > heightWrapper) {\r\n\t\t\telUl.scrollTop = top - heightWrapper;\r\n\t\t} else {\r\n\t\t\telUl.scrollTop = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tstatic decoratorBeforeOpen (popup) {\r\n\t\tif (decoratorBeforeOpen) {\r\n\t\t\tdecoratorBeforeOpen(popup);\r\n\t\t}\r\n\t};\r\n\r\n\tstatic decoratorAfterOpen (popup) {\r\n\t\tif (decoratorAfterOpen) {\r\n\t\t\tdecoratorAfterOpen(popup);\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Определитель того, что клик вне Popup нужно игнорировать\r\n\t * @returns {boolean} - игнорировать клик, то есть не закрывать Popup\r\n\t */\r\n\tstatic decoratorIsIgnoreOuterClick (e) {\r\n\t\tif (decoratorIsIgnoreOuterClick) {\r\n\t\t\treturn decoratorIsIgnoreOuterClick(e);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Зарегистрировать Vue компонент\r\n\t *\r\n\t * Каждый экземляр Popup регистрируется в словаре vueConnectors для последующего доступа из js\r\n\t * @param {string} id\r\n\t * @param {any} vueConnector\r\n\t */\r\n\tstatic regVueComponent (id, vueConnector) {\r\n\t\tif (Worker.vueConnectors.get(id)) {\r\n\t\t\tthrow 'Vue component Popup use duplicated id: ' + id;\r\n\t\t}\r\n\r\n\t\tWorker.vueConnectors.set(id, vueConnector);\r\n\t}\r\n\r\n\t/**\r\n\t * Снять с регистрации Vue компонент\r\n\t * @param {string} id\r\n\t */\r\n\tstatic unregVueComponent (id) {\r\n\t\tWorker.vueConnectors.delete(id);\r\n\t}\r\n\r\n}\r\n\r\nGlobalEvents.init(Worker, Core);\r\n\r\nexport default Worker;\r\n"],"names":["e","_a","Worker","elPopup","elOpener","_b","options","popup","elUl","elsLi","top","elLi","heightWrapper","id","vueConnector","GlobalEvents"],"mappings":"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"}
package/popup.css ADDED
@@ -0,0 +1 @@
1
+ h3[data-top-popup],div[data-top-popup],i[data-top-popup]:not(.btn):not(.g_btn),b[data-top-popup]:not(.btn):not(.g_btn){cursor:pointer;-webkit-user-select:none;user-select:none;font-style:normal;text-decoration:none;display:inline-flex;align-items:center}[data-top-popup][data-top-popup-disabled]{pointer-events:none;cursor:auto!important}i[contenteditable]{cursor:text!important}
@@ -0,0 +1,3 @@
1
+ define(["exports","vue","../.chunks/forms-1aa30229.amd"],function(o,t,a){"use strict"; if(typeof vue === "undefined") var vue = window.Vue;var s=document.createElement("style");s.textContent=`.top-tabs{background:var(--content-background-color);border-radius:8px;border:1px solid var(--color-line-2-opacity);padding:0;display:flex;flex-wrap:wrap;align-items:stretch}.top-tabs_header{padding:6px;margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.top-tabs_contents{border-top:1px solid var(--color-line-2-opacity);width:100%;margin-top:-1px}.top-tabs_tabInput:checked:nth-child(1)~.top-tabs_contents>.top-tabs_content:nth-child(1),.top-tabs_tabInput:checked:nth-child(3)~.top-tabs_contents>.top-tabs_content:nth-child(2),.top-tabs_tabInput:checked:nth-child(5)~.top-tabs_contents>.top-tabs_content:nth-child(3),.top-tabs_tabInput:checked:nth-child(7)~.top-tabs_contents>.top-tabs_content:nth-child(4),.top-tabs_tabInput:checked:nth-child(9)~.top-tabs_contents>.top-tabs_content:nth-child(5),.top-tabs_tabInput:checked:nth-child(11)~.top-tabs_contents>.top-tabs_content:nth-child(6){display:block}.top-tabs_tabLabel{cursor:pointer;border-bottom:2px solid transparent;padding:14px 20px;position:relative;display:flex;align-items:center}.top-tabs_tabLabel:hover{border-color:var(--color-line-2-opacity)}.top-tabs_tabInput:checked+.top-tabs_tabLabel{border-color:var(--color-primary);color:var(--color-primary)}.top-tabs_tabLabel.top-disabled{color:var(--color-text-3)}.top-tabs_content{padding:14px;overflow:auto;display:none}
2
+ `,document.head.appendChild(s);const c={class:t.normalizeClass({"top-tabs":!0})},p={key:0,class:"top-tabs_header"},d={class:"top-tabs_contents"},r=t.defineComponent({__name:"tabs",props:{id:{}},setup(n){return(e,l)=>(t.openBlock(),t.createElementBlock("div",c,[t.renderSlot(e.$slots,"buttons"),e.$slots.header?(t.openBlock(),t.createElementBlock("div",p,[t.renderSlot(e.$slots,"header")])):t.createCommentVNode("",!0),t.createElementVNode("div",d,[t.renderSlot(e.$slots,"contents")])]))}}),b={$style:{"top-tabs":"top-tabs","top-tabs_header":"top-tabs_header","top-tabs_contents":"top-tabs_contents","top-tabs_tabInput":"top-tabs_tabInput","top-tabs_content":"top-tabs_content"}},i=a._export_sfc(r,[["__cssModules",b]]),_=["id","name","value","checked","disabled"],h=["for"],m=t.defineComponent({__name:"tab",props:{tabsId:{},name:{},title:{},active:{type:Boolean},disabled:{type:Boolean}},setup(n){return(e,l)=>(t.openBlock(),t.createElementBlock(t.Fragment,null,[t.createElementVNode("input",{type:"radio",class:"top-tabs_tabInput top-unvisible",id:e.tabsId+e.name,name:e.tabsId,value:e.name,checked:e.active,disabled:e.disabled},null,8,_),t.createElementVNode("label",{class:t.normalizeClass({"top-tabs_tabLabel":!0,"top-forms-focusable":!0,"top-disabled":e.disabled}),for:e.tabsId+e.name},[t.renderSlot(e.$slots,"default")],10,h)],64))}}),u={$style:{"top-tabs_tabLabel":"top-tabs_tabLabel","top-tabs_tabInput":"top-tabs_tabInput","top-disabled":"top-disabled"}},y=a._export_sfc(m,[["__cssModules",u]]),f=["data-tabs-name"],k=t.defineComponent({__name:"content",props:{name:{}},setup(n){return(e,l)=>(t.openBlock(),t.createElementBlock("div",{class:t.normalizeClass({"top-tabs_content":!0}),"data-tabs-name":e.name},[t.renderSlot(e.$slots,"default")],8,f))}}),$={$style:{"top-tabs_content":"top-tabs_content"}},I=a._export_sfc(k,[["__cssModules",$]]);o.Tabs=i,o.TabsContent=I,o.TabsTab=y,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
3
+ //# sourceMappingURL=tabs.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.amd.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/tabs/tabs.js ADDED
@@ -0,0 +1,97 @@
1
+ import { defineComponent as n, openBlock as e, createElementBlock as a, renderSlot as s, createCommentVNode as c, createElementVNode as o, normalizeClass as b, Fragment as _ } from "vue";
2
+ import { _ as l } from "../.chunks/forms-7be951a7.es.js";
3
+ const r = {
4
+ class: /* @__PURE__ */ b({
5
+ "top-tabs": !0
6
+ })
7
+ }, i = {
8
+ key: 0,
9
+ class: "top-tabs_header"
10
+ }, u = { class: "top-tabs_contents" }, m = /* @__PURE__ */ n({
11
+ __name: "tabs",
12
+ props: {
13
+ id: {}
14
+ },
15
+ setup(p) {
16
+ return (t, d) => (e(), a("div", r, [
17
+ s(t.$slots, "buttons"),
18
+ t.$slots.header ? (e(), a("div", i, [
19
+ s(t.$slots, "header")
20
+ ])) : c("", !0),
21
+ o("div", u, [
22
+ s(t.$slots, "contents")
23
+ ])
24
+ ]));
25
+ }
26
+ }), $ = {
27
+ "top-tabs": "top-tabs",
28
+ "top-tabs_header": "top-tabs_header",
29
+ "top-tabs_contents": "top-tabs_contents",
30
+ "top-tabs_tabInput": "top-tabs_tabInput",
31
+ "top-tabs_content": "top-tabs_content"
32
+ }, h = {
33
+ $style: $
34
+ }, N = /* @__PURE__ */ l(m, [["__cssModules", h]]), f = ["id", "name", "value", "checked", "disabled"], y = ["for"], v = /* @__PURE__ */ n({
35
+ __name: "tab",
36
+ props: {
37
+ tabsId: {},
38
+ name: {},
39
+ title: {},
40
+ active: { type: Boolean },
41
+ disabled: { type: Boolean }
42
+ },
43
+ setup(p) {
44
+ return (t, d) => (e(), a(_, null, [
45
+ o("input", {
46
+ type: "radio",
47
+ class: "top-tabs_tabInput top-unvisible",
48
+ id: t.tabsId + t.name,
49
+ name: t.tabsId,
50
+ value: t.name,
51
+ checked: t.active,
52
+ disabled: t.disabled
53
+ }, null, 8, f),
54
+ o("label", {
55
+ class: b({
56
+ "top-tabs_tabLabel": !0,
57
+ "top-forms-focusable": !0,
58
+ "top-disabled": t.disabled
59
+ }),
60
+ for: t.tabsId + t.name
61
+ }, [
62
+ s(t.$slots, "default")
63
+ ], 10, y)
64
+ ], 64));
65
+ }
66
+ }), I = {
67
+ "top-tabs_tabLabel": "top-tabs_tabLabel",
68
+ "top-tabs_tabInput": "top-tabs_tabInput",
69
+ "top-disabled": "top-disabled"
70
+ }, M = {
71
+ $style: I
72
+ }, V = /* @__PURE__ */ l(v, [["__cssModules", M]]), k = ["data-tabs-name"], B = /* @__PURE__ */ n({
73
+ __name: "content",
74
+ props: {
75
+ name: {}
76
+ },
77
+ setup(p) {
78
+ return (t, d) => (e(), a("div", {
79
+ class: b({
80
+ "top-tabs_content": !0
81
+ }),
82
+ "data-tabs-name": t.name
83
+ }, [
84
+ s(t.$slots, "default")
85
+ ], 8, k));
86
+ }
87
+ }), C = {
88
+ "top-tabs_content": "top-tabs_content"
89
+ }, T = {
90
+ $style: C
91
+ }, g = /* @__PURE__ */ l(B, [["__cssModules", T]]);
92
+ export {
93
+ N as Tabs,
94
+ g as TabsContent,
95
+ V as TabsTab
96
+ };
97
+ //# sourceMappingURL=tabs.js.map