@topvisor/ui 0.0.35 → 0.0.36

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 (266) hide show
  1. package/{src/components/forms/inputDate/datepicker.css → .chunks/datepicker-1e725859.amd.js} +3 -2
  2. package/.chunks/datepicker-1e725859.amd.js.map +1 -0
  3. package/.chunks/datepicker-ad465c48.es.js +275 -0
  4. package/.chunks/datepicker-ad465c48.es.js.map +1 -0
  5. package/.chunks/forms-2891e074.amd.js +3 -0
  6. package/.chunks/forms-2891e074.amd.js.map +1 -0
  7. package/.chunks/forms-db4cb24d.es.js +946 -0
  8. package/.chunks/forms-db4cb24d.es.js.map +1 -0
  9. package/.chunks/popup-0f540839.es.js +700 -0
  10. package/.chunks/popup-0f540839.es.js.map +1 -0
  11. package/.chunks/popup-e49a9bab.amd.js +341 -0
  12. package/.chunks/popup-e49a9bab.amd.js.map +1 -0
  13. package/README.md +63 -30
  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 +15 -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 +207 -0
  36. package/formsExt/formsExt.js.map +1 -0
  37. package/formsExt.css +1 -0
  38. package/light.css +1 -0
  39. package/package.json +1 -50
  40. package/popup/popup.amd.js +3 -0
  41. package/popup/popup.amd.js.map +1 -0
  42. package/popup/popup.js +144 -0
  43. package/popup/popup.js.map +1 -0
  44. package/popup/worker.amd.js +2 -0
  45. package/popup/worker.amd.js.map +1 -0
  46. package/popup/worker.js +154 -0
  47. package/popup/worker.js.map +1 -0
  48. package/popup.css +1 -0
  49. package/tabs/tabs.amd.js +3 -0
  50. package/tabs/tabs.amd.js.map +1 -0
  51. package/tabs/tabs.js +97 -0
  52. package/tabs/tabs.js.map +1 -0
  53. package/tabs.css +1 -0
  54. package/utils/date.amd.js +2 -0
  55. package/utils/date.amd.js.map +1 -0
  56. package/utils/date.js +6 -0
  57. package/utils/date.js.map +1 -0
  58. package/utils/device.amd.js +2 -0
  59. package/utils/device.amd.js.map +1 -0
  60. package/utils/device.js +6 -0
  61. package/utils/device.js.map +1 -0
  62. package/utils/dom.amd.js +2 -0
  63. package/utils/dom.amd.js.map +1 -0
  64. package/utils/dom.js +64 -0
  65. package/utils/dom.js.map +1 -0
  66. package/.storybook/TopTheme.js +0 -82
  67. package/.storybook/TopThemeManager.js +0 -44
  68. package/.storybook/main.ts +0 -43
  69. package/.storybook/manager.ts +0 -28
  70. package/.storybook/preview-head.html +0 -16
  71. package/.storybook/preview.ts +0 -48
  72. package/.storybook/vue/coreDecorator.ts +0 -19
  73. package/.storybook/vue/vModelDecorator.ts +0 -27
  74. package/.vscode/extensions.json +0 -11
  75. package/.vscode/keybindings.example.json +0 -121
  76. package/.vscode/settings.json +0 -46
  77. package/Dockerfile +0 -3
  78. package/NPM.md +0 -25
  79. package/PUBLISH.md +0 -18
  80. package/STORYBOOK.md +0 -27
  81. package/USE_IN_PROJECT.md +0 -29
  82. package/build/afterBuild.sh +0 -12
  83. package/build/cssModules.ts +0 -39
  84. package/build/plugin/amdFix.ts +0 -46
  85. package/build/rollup.config.ts +0 -18
  86. package/nbproject/project.properties +0 -11
  87. package/nbproject/project.xml +0 -9
  88. package/public/README.md +0 -63
  89. package/src/components/common/common.ts +0 -1
  90. package/src/components/common/icon/icon.ts +0 -4
  91. package/src/components/common/icon/icon.vue +0 -15
  92. package/src/components/component.ts +0 -133
  93. package/src/components/forms/button/button.stories.ts +0 -112
  94. package/src/components/forms/button/button.ts +0 -51
  95. package/src/components/forms/button/button.vue +0 -75
  96. package/src/components/forms/button/stories/README.md +0 -35
  97. package/src/components/forms/button/stories/overview.vue +0 -33
  98. package/src/components/forms/button/style/button.css +0 -124
  99. package/src/components/forms/button/style/style-outline.css +0 -42
  100. package/src/components/forms/button/style/style-soft.css +0 -31
  101. package/src/components/forms/button/style/style-transparent.css +0 -35
  102. package/src/components/forms/checkbox/checkbox.stories.ts +0 -33
  103. package/src/components/forms/checkbox/checkbox.ts +0 -23
  104. package/src/components/forms/checkbox/checkbox.vue +0 -135
  105. package/src/components/forms/checkbox/stories/overview.vue +0 -171
  106. package/src/components/forms/controlLabel/controlLabel.stories.ts +0 -38
  107. package/src/components/forms/controlLabel/controlLabel.ts +0 -4
  108. package/src/components/forms/controlLabel/controlLabel.vue +0 -48
  109. package/src/components/forms/forms.ts +0 -10
  110. package/src/components/forms/helpers.ts +0 -10
  111. package/src/components/forms/hint/hint.stories.ts +0 -46
  112. package/src/components/forms/hint/hint.ts +0 -8
  113. package/src/components/forms/hint/hint.vue +0 -32
  114. package/src/components/forms/input/input.stories.ts +0 -31
  115. package/src/components/forms/input/input.ts +0 -34
  116. package/src/components/forms/input/input.vue +0 -170
  117. package/src/components/forms/input/stories/overview.vue +0 -61
  118. package/src/components/forms/inputDate/datepicker.ts +0 -101
  119. package/src/components/forms/inputDate/inputDate.stories.ts +0 -41
  120. package/src/components/forms/inputDate/inputDate.ts +0 -4
  121. package/src/components/forms/inputDate/inputDate.vue +0 -127
  122. package/src/components/forms/inputDate/stories/overview.vue +0 -35
  123. package/src/components/forms/radio/radio.stories.ts +0 -34
  124. package/src/components/forms/radio/radio.ts +0 -15
  125. package/src/components/forms/radio/radio.vue +0 -107
  126. package/src/components/forms/radio/stories/overview.vue +0 -79
  127. package/src/components/forms/select/select.stories.ts +0 -34
  128. package/src/components/forms/select/select.ts +0 -36
  129. package/src/components/forms/select/select.vue +0 -253
  130. package/src/components/forms/select/stories/exampleOptions.ts +0 -71
  131. package/src/components/forms/select/stories/overview.vue +0 -60
  132. package/src/components/forms/switcher/stories/overview.vue +0 -139
  133. package/src/components/forms/switcher/switcher.stories.ts +0 -33
  134. package/src/components/forms/switcher/switcher.ts +0 -22
  135. package/src/components/forms/switcher/switcher.vue +0 -113
  136. package/src/components/forms/textarea/stories/overview.vue +0 -62
  137. package/src/components/forms/textarea/textarea.stories.ts +0 -33
  138. package/src/components/forms/textarea/textarea.ts +0 -38
  139. package/src/components/forms/textarea/textarea.vue +0 -119
  140. package/src/components/formsExt/editArea/editArea.stories.ts +0 -72
  141. package/src/components/formsExt/editArea/editArea.ts +0 -25
  142. package/src/components/formsExt/editArea/editArea.vue +0 -172
  143. package/src/components/formsExt/editArea/stories/README.md +0 -17
  144. package/src/components/formsExt/editArea/stories/overview.vue +0 -66
  145. package/src/components/formsExt/editInput/editInput.stories.ts +0 -36
  146. package/src/components/formsExt/editInput/editInput.ts +0 -20
  147. package/src/components/formsExt/editInput/editInput.vue +0 -57
  148. package/src/components/formsExt/editInput/stories/overview.vue +0 -54
  149. package/src/components/formsExt/formsExt.ts +0 -3
  150. package/src/components/formsExt/radioGroup/radioGroup.stories.ts +0 -51
  151. package/src/components/formsExt/radioGroup/radioGroup.ts +0 -28
  152. package/src/components/formsExt/radioGroup/radioGroup.vue +0 -143
  153. package/src/components/formsExt/radioGroup/stories/overview.vue +0 -78
  154. package/src/components/formsExt/radioGroup/styles/top-scrollBar.css +0 -52
  155. package/src/components/helper.js +0 -10
  156. package/src/components/helpersStories.ts +0 -151
  157. package/src/components/popup/lib/popup.globalEvents.js +0 -205
  158. package/src/components/popup/lib/popup.js +0 -702
  159. package/src/components/popup/lib/worker.globalEvents.js +0 -78
  160. package/src/components/popup/lib/worker.js +0 -232
  161. package/src/components/popup/popup/listItem.vue +0 -42
  162. package/src/components/popup/popup/opener.vue +0 -74
  163. package/src/components/popup/popup/popup.stories.ts +0 -68
  164. package/src/components/popup/popup/popup.ts +0 -93
  165. package/src/components/popup/popup/popup.vue +0 -95
  166. package/src/components/popup/popup/stories/README.md +0 -34
  167. package/src/components/popup/popup/stories/listItems.vue +0 -44
  168. package/src/components/popup/popup/stories/listSubItems.vue +0 -52
  169. package/src/components/popup/popup/stories/overview.vue +0 -208
  170. package/src/components/popup/popup/style/popup.css +0 -243
  171. package/src/components/popup/popup/style/popup.m.css +0 -71
  172. package/src/components/popup/popup/style/popup.pc.css +0 -28
  173. package/src/components/popup/popup.ts +0 -3
  174. package/src/components/popup/worker.ts +0 -1
  175. package/src/components/tabs/tabs/content.vue +0 -24
  176. package/src/components/tabs/tabs/stories/README.md +0 -10
  177. package/src/components/tabs/tabs/tab.vue +0 -52
  178. package/src/components/tabs/tabs/tabs.stories.ts +0 -171
  179. package/src/components/tabs/tabs/tabs.ts +0 -22
  180. package/src/components/tabs/tabs/tabs.vue +0 -64
  181. package/src/components/tabs/tabs.ts +0 -3
  182. package/src/core/base/Colors.stories.ts +0 -15
  183. package/src/core/base/Layout.stories.ts +0 -15
  184. package/src/core/base/Properties.stories.ts +0 -15
  185. package/src/core/base/base.mdx +0 -21
  186. package/src/core/core/core.ts +0 -144
  187. package/src/core/core/events.ts +0 -54
  188. package/src/core/core/options.ts +0 -15
  189. package/src/core/core/state.ts +0 -44
  190. package/src/core/directives/tooltip.ts +0 -55
  191. package/src/core/theme/Colors.stories.ts +0 -15
  192. package/src/core/theme/Properties.stories.ts +0 -15
  193. package/src/core/theme/theme.mdx +0 -15
  194. package/src/core/utils/date.ts +0 -164
  195. package/src/core/utils/device.ts +0 -48
  196. package/src/core/utils/dom.ts +0 -185
  197. 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
  198. 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
  199. 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
  200. package/src/docs/CSS/FAQ.mdx +0 -43
  201. 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
  202. 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
  203. 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
  204. 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
  205. package/src/docs/CSS//320/241/321/202/320/270/320/273/320/270.md +0 -53
  206. package/src/docs/CSS//320/241/321/202/320/270/320/273/320/270.mdx +0 -4
  207. 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
  208. package/src/docs/ROADMAP.md +0 -17
  209. package/src/docs/Roadmap.mdx +0 -4
  210. 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
  211. 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
  212. 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
  213. 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
  214. 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
  215. 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
  216. package/src/globals.d.ts +0 -1
  217. package/src/resources/styles/core/colors.css +0 -204
  218. package/src/resources/styles/core/components.css +0 -70
  219. package/src/resources/styles/core/core.ts +0 -10
  220. package/src/resources/styles/core/forms/clear.css +0 -19
  221. package/src/resources/styles/core/forms/controls.css +0 -20
  222. package/src/resources/styles/core/forms/focusable.css +0 -26
  223. package/src/resources/styles/core/forms/forms.css +0 -100
  224. package/src/resources/styles/core/icon.css +0 -58
  225. package/src/resources/styles/core/layout.css +0 -40
  226. package/src/resources/styles/core/modifiers/as.css +0 -9
  227. package/src/resources/styles/core/modifiers/ellipsis.css +0 -18
  228. package/src/resources/styles/core/modifiers/modifiers.css +0 -81
  229. package/src/resources/styles/core/modifiers/only.css +0 -19
  230. package/src/resources/styles/core/select.css +0 -16
  231. package/src/resources/styles/jquery-ui.min.css +0 -6
  232. package/src/resources/styles/storybook.css +0 -11
  233. package/src/resources/styles/themes/dark/theme.css +0 -139
  234. package/src/resources/styles/themes/dark.ts +0 -1
  235. package/src/resources/styles/themes/light/theme.css +0 -139
  236. package/src/resources/styles/themes/light.ts +0 -1
  237. package/src/storybook/components/color.vue +0 -45
  238. package/src/storybook/components/colors.vue +0 -34
  239. package/src/storybook/components/icomoon.ts +0 -38
  240. package/src/storybook/components/properties.vue +0 -82
  241. package/src/storybook/resources/accessibility.png +0 -0
  242. package/src/storybook/resources/accessibility.svg +0 -5
  243. package/src/storybook/resources/addon-library.png +0 -0
  244. package/src/storybook/resources/assets.png +0 -0
  245. package/src/storybook/resources/context.png +0 -0
  246. package/src/storybook/resources/discord.svg +0 -15
  247. package/src/storybook/resources/docs.png +0 -0
  248. package/src/storybook/resources/figma-plugin.png +0 -0
  249. package/src/storybook/resources/github.svg +0 -3
  250. package/src/storybook/resources/share.png +0 -0
  251. package/src/storybook/resources/styling.png +0 -0
  252. package/src/storybook/resources/testing.png +0 -0
  253. package/src/storybook/resources/theming.png +0 -0
  254. package/src/storybook/resources/tutorials.svg +0 -12
  255. package/src/storybook/resources/youtube.svg +0 -4
  256. 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
  257. package/tsconfig.json +0 -62
  258. package/vite.config.ts +0 -91
  259. /package/{src/resources/icomoon → icomoon}/demo-files/demo.css +0 -0
  260. /package/{src/resources/icomoon → icomoon}/demo-files/demo.js +0 -0
  261. /package/{src/resources/icomoon → icomoon}/demo.html +0 -0
  262. /package/{src/resources/icomoon → icomoon}/fonts/Topvisor-2.svg +0 -0
  263. /package/{src/resources/icomoon → icomoon}/fonts/Topvisor-2.ttf +0 -0
  264. /package/{src/resources/icomoon → icomoon}/fonts/Topvisor-2.woff +0 -0
  265. /package/{src/resources/icomoon → icomoon}/selection.json +0 -0
  266. /package/{src/resources/icomoon → icomoon}/style.css +0 -0
@@ -0,0 +1,207 @@
1
+ import { defineComponent as T, ref as b, watch as g, toRef as w, computed as k, openBlock as d, createElementBlock as i, normalizeClass as y, toDisplayString as m, createCommentVNode as v, createElementVNode as K, createVNode as f, withKeys as V, withModifiers as h, createBlock as C, withCtx as A, createTextVNode as _, mergeProps as G, renderSlot as E, Fragment as I, renderList as H } from "vue";
2
+ import { T as M, B as $, _ as B, I as z } from "../.chunks/forms-db4cb24d.es.js";
3
+ const N = {
4
+ key: 0,
5
+ class: "top-editArea_title"
6
+ }, P = { class: "top-editArea_footer" }, X = /* @__PURE__ */ T({
7
+ __name: "editArea",
8
+ props: {
9
+ modelValue: {},
10
+ title: {},
11
+ cancelText: { default: "Отмена" },
12
+ submitText: { default: "Отправить" },
13
+ attachToKeyboard: { type: Boolean },
14
+ name: {},
15
+ placeholder: {},
16
+ rows: {},
17
+ minHeight: {},
18
+ expandable: { type: Boolean, default: !0 },
19
+ disabled: { type: Boolean },
20
+ readonly: { type: Boolean },
21
+ isError: { type: Boolean },
22
+ hint: {}
23
+ },
24
+ emits: ["update:modelValue", "cancel"],
25
+ setup(p, { emit: n }) {
26
+ const r = p, t = b(""), o = b(r.modelValue);
27
+ g(w(r, "modelValue"), () => {
28
+ o.value = r.modelValue;
29
+ });
30
+ const s = k(() => o.value !== r.modelValue), a = (e) => {
31
+ n("update:modelValue", e);
32
+ }, u = () => {
33
+ n("cancel"), o.value = r.modelValue;
34
+ };
35
+ return (e, l) => (d(), i("div", {
36
+ class: y({
37
+ "top-editArea": !0,
38
+ "top-editArea-attachedToKeyboard": e.attachToKeyboard
39
+ })
40
+ }, [
41
+ e.title ? (d(), i("div", N, m(e.title), 1)) : v("", !0),
42
+ K("div", {
43
+ class: y({
44
+ "top-editArea_form": !0,
45
+ "top-error": e.isError,
46
+ "top-focus": t.value == "focus"
47
+ })
48
+ }, [
49
+ f(M, {
50
+ modelValue: o.value,
51
+ "onUpdate:modelValue": l[0] || (l[0] = (c) => o.value = c),
52
+ name: e.name,
53
+ placeholder: e.placeholder,
54
+ rows: e.rows,
55
+ minHeight: e.minHeight,
56
+ expandable: e.expandable,
57
+ disabled: e.disabled,
58
+ readonly: e.readonly,
59
+ isError: e.isError,
60
+ hint: e.hint,
61
+ class: "top-editArea_element",
62
+ onFocus: l[1] || (l[1] = (c) => t.value = "focus"),
63
+ onBlur: l[2] || (l[2] = (c) => t.value = ""),
64
+ onKeyup: [
65
+ V(u, ["esc"]),
66
+ l[3] || (l[3] = V(h((c) => a(o.value), ["ctrl"]), ["enter"]))
67
+ ]
68
+ }, null, 8, ["modelValue", "name", "placeholder", "rows", "minHeight", "expandable", "disabled", "readonly", "isError", "hint", "onKeyup"]),
69
+ K("div", P, [
70
+ s.value && (!e.attachToKeyboard || e.modelValue) ? (d(), C($, {
71
+ key: 0,
72
+ class: "top-editArea_button",
73
+ color: "theme",
74
+ icon: e.attachToKeyboard ? "" : "",
75
+ onClick: u
76
+ }, {
77
+ default: A(() => [
78
+ _(m(e.attachToKeyboard ? "" : e.cancelText), 1)
79
+ ]),
80
+ _: 1
81
+ }, 8, ["icon"])) : v("", !0),
82
+ f($, {
83
+ class: "top-editArea_button",
84
+ icon: e.attachToKeyboard ? "" : "",
85
+ onClick: l[4] || (l[4] = (c) => a(o.value))
86
+ }, {
87
+ default: A(() => [
88
+ _(m(e.attachToKeyboard ? "" : e.submitText), 1)
89
+ ]),
90
+ _: 1
91
+ }, 8, ["icon"])
92
+ ])
93
+ ], 2)
94
+ ], 2));
95
+ }
96
+ }), F = {
97
+ "top-editArea": "top-editArea",
98
+ "top-editArea_title": "top-editArea_title",
99
+ "top-editArea_form": "top-editArea_form",
100
+ "top-textarea": "top-textarea",
101
+ "top-editArea_element": "top-editArea_element",
102
+ "top-textarea_textarea": "top-textarea_textarea",
103
+ "top-editArea_footer": "top-editArea_footer",
104
+ "top-editArea-attachedToKeyboard": "top-editArea-attachedToKeyboard"
105
+ }, R = {
106
+ $style: F
107
+ }, Z = /* @__PURE__ */ B(X, [["__cssModules", R]]), S = { class: "top-editInput" }, U = /* @__PURE__ */ T({
108
+ __name: "editInput",
109
+ props: {
110
+ modelValue: {},
111
+ input: {},
112
+ button: {}
113
+ },
114
+ emits: ["update:modelValue"],
115
+ setup(p, { emit: n }) {
116
+ const r = p, t = b(r.modelValue);
117
+ g(w(r.modelValue), () => {
118
+ t.value = r.modelValue;
119
+ });
120
+ const o = () => {
121
+ n("update:modelValue", t.value);
122
+ };
123
+ return (s, a) => (d(), i("div", S, [
124
+ f(z, G(s.input, {
125
+ onKeydownCapture: a[0] || (a[0] = V(h((u) => t.value = s.modelValue, ["stop"]), ["esc"])),
126
+ onKeydown: V(h(o, ["stop"]), ["enter"]),
127
+ modelValue: t.value,
128
+ "onUpdate:modelValue": a[1] || (a[1] = (u) => t.value = u)
129
+ }), null, 16, ["onKeydown", "modelValue"]),
130
+ t.value !== s.modelValue ? (d(), C($, G({
131
+ key: 0,
132
+ icon: "",
133
+ styling: "soft"
134
+ }, s.button, { onClick: o }), {
135
+ default: A(() => [
136
+ E(s.$slots, "default")
137
+ ]),
138
+ _: 3
139
+ }, 16)) : v("", !0)
140
+ ]));
141
+ }
142
+ }), D = {
143
+ "top-editInput": "top-editInput",
144
+ "top-input": "top-input"
145
+ }, L = {
146
+ $style: D
147
+ }, x = /* @__PURE__ */ B(U, [["__cssModules", L]]), j = ["data-top-icon", "onClick"], q = {
148
+ key: 0,
149
+ class: "top-radioGroup_circle"
150
+ }, J = /* @__PURE__ */ T({
151
+ __name: "radioGroup",
152
+ props: {
153
+ modelValue: {},
154
+ radiosProps: {},
155
+ showIndicator: { type: Boolean },
156
+ size: { default: "s" },
157
+ isError: { type: Boolean }
158
+ },
159
+ emits: ["update:modelValue"],
160
+ setup(p, { emit: n }) {
161
+ const r = p, t = k({
162
+ get() {
163
+ return r.modelValue;
164
+ },
165
+ set(o) {
166
+ n("update:modelValue", o);
167
+ }
168
+ });
169
+ return (o, s) => (d(), i("div", {
170
+ class: y({
171
+ "top-radioGroup": !0,
172
+ "top-scrollBarXHidding": !0,
173
+ ["top-size_" + o.size]: !!o.size,
174
+ "top-error": o.isError
175
+ })
176
+ }, [
177
+ (d(!0), i(I, null, H(o.radiosProps, (a) => (d(), i("div", {
178
+ class: y({
179
+ "top-radioGroup_item-selected": a.value === t.value,
180
+ "top-radioGroup_item": !0,
181
+ "top-disabled": a.disabled
182
+ }),
183
+ "data-top-icon": a.icon,
184
+ onClick: (u) => t.value = a.value
185
+ }, [
186
+ _(m(a.title) + " ", 1),
187
+ o.showIndicator ? (d(), i("span", q)) : v("", !0)
188
+ ], 10, j))), 256))
189
+ ], 2));
190
+ }
191
+ }), O = {
192
+ "top-scrollBarXHidding": "top-scrollBarXHidding",
193
+ "top-radioGroup": "top-radioGroup",
194
+ "top-radioGroup_item": "top-radioGroup_item",
195
+ "top-radioGroup_item-selected": "top-radioGroup_item-selected",
196
+ "top-radioGroup_circle": "top-radioGroup_circle",
197
+ "top-disabled": "top-disabled",
198
+ "top-error": "top-error"
199
+ }, Q = {
200
+ $style: O
201
+ }, ee = /* @__PURE__ */ B(J, [["__cssModules", Q]]);
202
+ export {
203
+ Z as EditArea,
204
+ x as EditInput,
205
+ ee as RadioGroup
206
+ };
207
+ //# sourceMappingURL=formsExt.js.map
@@ -0,0 +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"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, toRef, watch, computed } from 'vue';\nimport Button from '@/components/forms/button/button.vue';\nimport type { Props, Emits } from './editArea';\nimport Textarea from '@/components/forms/textarea/textarea.vue';\n\n// TODO: добавить переменную top-forms-fixed-height и использовать ее при добавлении отступов у страницы\n\nconst props = withDefaults(defineProps<Props>(), {\n\tcancelText: 'Отмена',\n\tsubmitText: 'Отправить',\n\texpandable: true,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst state = ref('');\n\n/**\n * Локальное значение modelValue, будет проброшено вверх только в случае отправки формы\n */\nconst localValue = ref(props.modelValue);\n\nwatch(toRef(props, 'modelValue'), () => {\n\tlocalValue.value = props.modelValue;\n});\n\nconst isChanged = computed(() => localValue.value !== props.modelValue);\n\nconst submit = (value: string) => {\n\temit('update:modelValue', value);\n};\n\nconst cancel = () => {\n\temit('cancel');\n\n\t// сброс введенного значения\n\tlocalValue.value = props.modelValue;\n};\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-editArea': true,\n\t\t\t'top-editArea-attachedToKeyboard': attachToKeyboard,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tv-if=\"title\"\n\t\t\tclass=\"top-editArea_title\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-editArea_form': true,\n\t\t\t\t'top-error': isError,\n\t\t\t\t'top-focus': state == 'focus',\n\t\t\t}\"\n\t\t>\n\t\t\t<Textarea\n\t\t\t\tv-model=\"localValue\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:rows=\"rows\"\n\t\t\t\t:minHeight=\"minHeight\"\n\t\t\t\t:expandable=\"expandable\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:readonly=\"readonly\"\n\t\t\t\t:isError=\"isError\"\n\t\t\t\t:hint=\"hint\"\n\t\t\t\tclass=\"top-editArea_element\"\n\t\t\t\t@focus=\"state = 'focus'\"\n\t\t\t\t@blur=\"state = ''\"\n\t\t\t\t@keyup.esc=\"cancel\"\n\t\t\t\t@keyup.ctrl.enter=\"submit(localValue)\"\n\t\t\t/>\n\n\t\t\t<div class=\"top-editArea_footer\">\n\t\t\t\t<Button\n\t\t\t\t\tv-if=\"isChanged && (!attachToKeyboard || modelValue)\"\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\t:icon=\"attachToKeyboard ? '': ''\"\n\t\t\t\t\t@click=\"cancel\"\n\t\t\t\t>\n\t\t\t\t\t{{ attachToKeyboard ? '' : cancelText }}\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\t:icon=\"attachToKeyboard ? '': ''\"\n\t\t\t\t\t@click=\"submit(localValue)\"\n\t\t\t\t>\n\t\t\t\t\t{{ attachToKeyboard ? '' : submitText }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style module>\n.top-editArea {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n}\n\n.top-editArea_title {\n\tfont-size: 12px;\n}\n\n.top-editArea_form {\n\tbackground: var(--top-forms-background-color);\n\toutline-color: var(--color-theme-75);\n\toutline-offset: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.top-editArea_form:hover {\n\tbackground: var(--top-forms-background-color-hover);\n}\n\n/* textarea в EditArea */\n.top-textarea {\n\twidth: 100%;\n}\n\n.top-editArea_element.top-textarea_textarea {\n\tborder: none;\n\toutline: none;\n\tanimation: none;\n}\n\n/* footer */\n.top-editArea_footer {\n\tpadding: var(--top-forms-padding);\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tgap: var(--top-forms-padding);\n}\n\n/* attachedToKeyboard */\n.top-editArea-attachedToKeyboard {\n\tbackground: var(--top-forms-background-color);\n\tmargin-bottom: env(keyboard-inset-height, 0);\n\tposition: fixed;\n\tbottom: 0;\n\tright: 0;\n\tleft: 0;\n\tz-index: 2;\n\tgap: 0;\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_form {\n\tborder-radius: 0;\n\tborder: none;\n\tborder-top: 1px solid var(--top-forms-border-color);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_title {\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\tpadding: var(--top-forms-padding);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_footer > [data-top-icon] {\n\tborder-radius: 100%;\n}\n</style>","<script setup lang=\"ts\">\nimport { ref, toRef, watch } from 'vue';\nimport type { Props, Emits } from './editInput';\nimport Input from '@/components/forms/input/input.vue';\nimport Button from '@/components/forms/button/button.vue';\n\nconst props = defineProps<Props>();\n\nconst intermediateValue = ref(props.modelValue);\n\nwatch(toRef(props.modelValue), () => {\n\tintermediateValue.value = props.modelValue;\n});\n\nconst emit = defineEmits<Emits>();\n\nconst submit = () => {\n\temit('update:modelValue', intermediateValue.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-editInput\">\n\t\t<Input\n\t\t\t:=\"input\"\n\t\t\t@keydown.esc.capture.stop=\"intermediateValue = modelValue\"\n\t\t\t@keydown.enter.stop=\"submit\"\n\t\t\tv-model=\"intermediateValue\"\n\t\t/>\n\n\t\t<Button\n\t\t\tv-if=\"intermediateValue !== modelValue\"\n\t\t\ticon=\"\"\n\t\t\tstyling=\"soft\"\n\t\t\t:=\"button\"\n\t\t\t@click=\"submit\"\n\t\t>\n\t\t\t<!-- @slot Слот Button -->\n\t\t\t<slot></slot>\n\t\t</Button>\n\t</div>\n</template>\n\n<style module>\n.top-editInput {\n\twidth: 220px;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: var(--top-gap-1);\n}\n\n.top-editInput .top-input {\n\twidth: unset;\n\tflex-grow: 1;\n}\n</style>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } from './radioGroup';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t['top-radioGroup']: true,\n\t\t\t['top-scrollBarXHidding']: true,\n\t\t\t['top-size_' + size]: !!size,\n\t\t\t['top-error']: isError,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tv-for=\"item of radiosProps\"\n\t\t\t:class=\"{\n\t\t\t\t['top-radioGroup_item-selected']: item.value === localValue,\n\t\t\t\t['top-radioGroup_item']: true,\n\t\t\t\t['top-disabled']: item.disabled,\n\t\t\t}\"\n\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t@click=\"localValue = item.value\"\n\t\t>\n\t\t\t{{ item.title }}\n\n\t\t\t<span\n\t\t\t\tv-if=\"showIndicator\"\n\t\t\t\tclass=\"top-radioGroup_circle\"\n\t\t\t></span>\n\t\t</div>\n\t</div>\n</template>\n\n<style module>\n@import \"./styles/top-scrollBar.css\";\n\n.top-radioGroup {\n\tuser-select: none;\n\tbox-sizing: border-box;\n\tborder-radius: 8px;\n\tbackground-color: var(--color-theme-50);\n\theight: var(--top-forms-base-height);\n\tpadding: 2px;\n\tgap: 2px;\n\tdisplay: flex;\n\talign-items: flex-start;\n}\n\n.top-radioGroup_item {\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\tborder-radius: 6px;\n\theight: calc(var(--top-forms-base-height) - 4px);\n\tpadding: 0 16px;\n\tfont-weight: 600;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-grow: 1;\n\tgap: 4px;\n}\n\n.top-radioGroup_item:hover {\n\tbackground-color: var(--color-theme-25);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n/* selected */\n.top-radioGroup_item-selected {\n\tpointer-events: none;\n\tbackground-color: var(--color-bg-3);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n/* circle */\n.top-radioGroup_circle {\n\tpadding: 3px;\n\tmargin-left: auto;\n\tdisplay: flex;\n}\n\n.top-radioGroup_circle:before {\n\tcontent: \"\";\n\tborder: 1px solid var(--color-line-3-opacity);\n\tborder-radius: 50%;\n\tbox-sizing: border-box;\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\n}\n\n.top-radioGroup_item:hover .top-radioGroup_circle:before {\n\tborder-color: var(--color-primary);\n}\n\n/* circle selected */\n.top-radioGroup_item-selected .top-radioGroup_circle:before {\n\tborder-color: var(--color-primary);\n\tborder-width: 5px;\n}\n\n.top-radioGroup_item-selected:hover .top-radioGroup_circle:before {\n\tborder-color: var(--color-primary-2);\n}\n\n/* top-disabled */\n.top-radioGroup_item.top-disabled {\n\t--top-icon-color: var(--color-text-3);\n\n\tcolor: var(--color-text-3);\n}\n\n.top-radioGroup_item.top-disabled .top-radioGroup_circle:before {\n\tborder-color: var(--color-theme-400);\n\tbackground-color: var(--color-theme-50);\n}\n\n/* top-error */\n.top-radioGroup.top-error .top-radioGroup_item:not(.top-disabled) .top-radioGroup_circle:before {\n\tborder-color: var(--color-negative);\n}\n\n.top-radioGroup.top-error .top-radioGroup_item:hover .top-radioGroup_circle:before {\n\tborder-color: var(--color-negative-2);\n}\n</style>"],"names":["state","ref","localValue","props","watch","toRef","isChanged","computed","submit","value","emit","cancel","intermediateValue"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;iBAgBMA,IAAQC,EAAI,EAAE,GAKdC,IAAaD,EAAIE,EAAM,UAAU;AAEvC,IAAAC,EAAMC,EAAMF,GAAO,YAAY,GAAG,MAAM;AACvC,MAAAD,EAAW,QAAQC,EAAM;AAAA,IAAA,CACzB;AAED,UAAMG,IAAYC,EAAS,MAAML,EAAW,UAAUC,EAAM,UAAU,GAEhEK,IAAS,CAACC,MAAkB;AACjC,MAAAC,EAAK,qBAAqBD,CAAK;AAAA,IAAA,GAG1BE,IAAS,MAAM;AACpB,MAAAD,EAAK,QAAQ,GAGbR,EAAW,QAAQC,EAAM;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBC7BpBS,IAAoBX,EAAIE,EAAM,UAAU;AAE9C,IAAAC,EAAMC,EAAMF,EAAM,UAAU,GAAG,MAAM;AACpC,MAAAS,EAAkB,QAAQT,EAAM;AAAA,IAAA,CAChC;AAID,UAAMK,IAAS,MAAM;AACf,MAAAE,EAAA,qBAAqBE,EAAkB,KAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCP5CV,IAAaK,EAAS;AAAA,MAC3B,MAAM;AACL,eAAOJ,EAAM;AAAA,MACd;AAAA,MAEA,IAAIM,GAAO;AACV,QAAAC,EAAK,qBAAqBD,CAAK;AAAA,MAChC;AAAA,IAAA,CACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/formsExt.css ADDED
@@ -0,0 +1 @@
1
+ .top-editArea{display:flex;flex-direction:column;gap:6px}.top-editArea_title{font-size:12px}.top-editArea_form{background:var(--top-forms-background-color);outline-color:var(--color-theme-75);outline-offset:0;display:flex;flex-direction:column}.top-editArea_form:hover{background:var(--top-forms-background-color-hover)}.top-textarea{width:100%}.top-editArea_element.top-textarea_textarea{border:none;outline:none;animation:none}.top-editArea_footer{padding:var(--top-forms-padding);display:flex;justify-content:flex-end;gap:var(--top-forms-padding)}.top-editArea-attachedToKeyboard{background:var(--top-forms-background-color);margin-bottom:env(keyboard-inset-height,0);position:fixed;bottom:0;right:0;left:0;z-index:2;gap:0}.top-editArea-attachedToKeyboard .top-editArea_form{border-radius:0;border:none;border-top:1px solid var(--top-forms-border-color)}.top-editArea-attachedToKeyboard .top-editArea_title{border-top:1px solid var(--color-line-2-opacity);padding:var(--top-forms-padding)}.top-editArea-attachedToKeyboard .top-editArea_footer>[data-top-icon]{border-radius:100%}.top-editInput{width:220px;flex-grow:1;display:flex;align-items:flex-end;gap:var(--top-gap-1)}.top-editInput .top-input{width:unset;flex-grow:1}.top-scrollBarXHidding{scrollbar-width:none;overflow-x:auto;overflow-y:hidden}.top-scrollBarXHidding:hover{scrollbar-width:thin}.top-scrollBarXHidding::-webkit-scrollbar{height:6px;display:none}.top-scrollBarXHidding:hover::-webkit-scrollbar{display:block;scrollbar-width:thin}.top-scrollBarXHidding::-webkit-scrollbar-track{background-color:transparent;box-shadow:inset #0000000f 0 0 0 10px}.top-scrollBarXHidding::-webkit-scrollbar-track:hover{box-shadow:inset #00000014 0 0 0 10px}.top-scrollBarXHidding::-webkit-scrollbar-track:active{box-shadow:inset #0000001a 0 0 0 10px}.top-scrollBarXHidding::-webkit-scrollbar-thumb{background-color:var(--color-line-1-opacity)}.top-scrollBarXHidding::-webkit-scrollbar-thumb:hover{background-color:var(--color-line-2-opacity)}.top-scrollBarXHidding::-webkit-scrollbar-thumb:active{background-color:var(--color-line-3-opacity)}.top-scrollBarXHidding::-webkit-scrollbar-button{width:0;height:0}.top-radioGroup{-webkit-user-select:none;user-select:none;box-sizing:border-box;border-radius:8px;background-color:var(--color-theme-50);height:var(--top-forms-base-height);padding:2px;gap:2px;display:flex;align-items:flex-start}.top-radioGroup_item{cursor:pointer;box-sizing:border-box;border-radius:6px;height:calc(var(--top-forms-base-height) - 4px);padding:0 16px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-grow:1;gap:4px}.top-radioGroup_item:hover{background-color:var(--color-theme-25);box-shadow:0 4px 32px #0409541a,0 0 4px #04095414}.top-radioGroup_item-selected{pointer-events:none;background-color:var(--color-bg-3);box-shadow:0 4px 32px #0409541a,0 0 4px #04095414}.top-radioGroup_circle{padding:3px;margin-left:auto;display:flex}.top-radioGroup_circle:before{content:"";border:1px solid var(--color-line-3-opacity);border-radius:50%;box-sizing:border-box;width:calc(var(--top-forms-option-height) - 3px * 2);height:calc(var(--top-forms-option-height) - 3px * 2)}.top-radioGroup_item:hover .top-radioGroup_circle:before{border-color:var(--color-primary)}.top-radioGroup_item-selected .top-radioGroup_circle:before{border-color:var(--color-primary);border-width:5px}.top-radioGroup_item-selected:hover .top-radioGroup_circle:before{border-color:var(--color-primary-2)}.top-radioGroup_item.top-disabled{--top-icon-color: var(--color-text-3);color:var(--color-text-3)}.top-radioGroup_item.top-disabled .top-radioGroup_circle:before{border-color:var(--color-theme-400);background-color:var(--color-theme-50)}.top-radioGroup.top-error .top-radioGroup_item:not(.top-disabled) .top-radioGroup_circle:before{border-color:var(--color-negative)}.top-radioGroup.top-error .top-radioGroup_item:hover .top-radioGroup_circle:before{border-color:var(--color-negative-2)}
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,16 +1,9 @@
1
1
  {
2
2
  "name": "@topvisor/ui",
3
3
  "private": false,
4
- "version": "0.0.35",
4
+ "version": "0.0.36",
5
5
  "type": "module",
6
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
7
  "author": "Topvisor",
15
8
  "keywords": [
16
9
  "topvisor",
@@ -20,48 +13,6 @@
20
13
  "component library"
21
14
  ],
22
15
  "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
16
  "peerDependencies": {
66
17
  "vue": "^3.3.4"
67
18
  }
@@ -0,0 +1,3 @@
1
+ define(["exports","vue","./worker.amd","../.chunks/forms-2891e074.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\">\nimport { onUpdated, ref } from 'vue';\nimport type { OpenerProps } from './popup';\n\nconst props = withDefaults(defineProps<OpenerProps>(), {\n\tpos: '3',\n\tnotch: true,\n\tposBy: 'fixed',\n});\n\nconst id = props.id || Math.random() + '';\n\nlet elOpener: Element;\n\n/**\n * Необычная функция для проброски props внтурь элемента слота\n *\n * @param el - вспомогательрный элемент для доступа к элементам слота\n */\nfunction render (el: any) {\n\tsetTimeout(() => {\n\t\telOpener = el.nextElementSibling;\n\n\t\tif (elOpener) {\n\t\t\trenderOpener(elOpener);\n\t\t}\n\t});\n}\n\nonUpdated(() => {\n\tif (elOpener) {\n\t\trenderOpener(elOpener);\n\t}\n});\n\nfunction renderOpener (elOpener: any) {\n\telOpener.dataset.topPopup = 'vue-' + id;\n\telOpener.dataset.topPopupId = id;\n\telOpener.dataset.topPopupP = props.pos;\n\telOpener.dataset.topPopupPosBy = props.posBy;\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\n}\n</script>\n\n<template>\n\t<template :ref=\"render\"></template>\n\n\t<!-- @slot элемент для открытия Popup -->\n\t<slot></slot>\n</template>\n\n<style>\nh3[data-top-popup],\ndiv[data-top-popup],\ni[data-top-popup]:not(.btn):not(.g_btn),\nb[data-top-popup]:not(.btn):not(.g_btn) {\n\tcursor: pointer;\n\tuser-select: none;\n\tfont-style: normal;\n\ttext-decoration: none;\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n[data-top-popup][data-top-popup-disabled] {\n\tpointer-events: none;\n\tcursor: auto !important;\n}\n\ni[contenteditable] {\n\tcursor: text !important;\n}\n</style>","<script setup lang=\"ts\">\nimport { ref, toRef, onUnmounted } from 'vue';\nimport type { Props, Emits } from './popup';\nimport Opener from './opener.vue';\nimport Worker from '@/components/popup/lib/worker';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tid: '',\n\tpos: '3',\n\tnotch: true,\n\tposBy: 'fixed',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst id = props.id || Math.random() + '';\nconst elPopupRef = ref(null);\n\n// см. lib/popup\nconst onOpen = async (popup: any) => {\n\tpopup.elPopupInner.innerText = '';\n\n\telPopupRef.value = popup.elPopupInner;\n\n\tvueConnector.opened = true;\n\tvueConnector.popup = popup;\n\n\temit('open');\n};\n\n// см. lib/popup\nconst onClose = (popup: any) => {\n\telPopupRef.value = null;\n\n\tvueConnector.opened = false;\n\tvueConnector.popup = null;\n\n\temit('close');\n};\n\nconst vueConnector = {\n\tonOpen,\n\tonClose,\n\tclassRef: toRef(props, 'class'),\n\topened: false,\n\tpopup: null,\n};\n\nWorker.regVueComponent(id, vueConnector);\n\nonUnmounted(() => {\n\tWorker.unregVueComponent(id);\n});\n</script>\n\n<template>\n\t<Opener\n\t\tv-if=\"$slots.opener\"\n\t\t:id=\"id\"\n\t\t:pos=\"pos\"\n\t\t:posBy=\"posBy\"\n\t\t:notch=\"notch\"\n\t\t:openByHover=\"openByHover\"\n\t>\n\t\t<!-- @slot элемент для открытия Popup -->\n\t\t<slot name=\"opener\"></slot>\n\t</Opener>\n\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\n\t<!-- elPopupRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\n\t<teleport\n\t\tv-if=\"elPopupRef\"\n\t\t:to=\"elPopupRef\"\n\t>\n\t\t<div v-if=\"$slots.header\" class=\"top-popup_header\">\n\t\t\t<!-- @slot Шапка -->\n\t\t\t<slot name=\"header\"></slot>\n\t\t</div>\n\n\t\t<div v-if=\"$slots.content\" class=\"top-popup_content\">\n\t\t\t<!-- @slot Контент в свободной форме -->\n\t\t\t<slot name=\"content\"></slot>\n\t\t</div>\n\n\t\t<ul v-if=\"$slots.contentList\" class=\"top-popup_content\">\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка испоьзуйте компонент popup/listItem -->\n\t\t\t<slot name=\"contentList\"></slot>\n\t\t</ul>\n\n\t\t<div v-if=\"$slots.footer\" class=\"top-popup_footer\">\n\t\t\t<!-- @slot Футер -->\n\t\t\t<slot name=\"footer\"></slot>\n\t\t</div>\n\t</teleport>\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-db4cb24d.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\">\nimport { onUpdated, ref } from 'vue';\nimport type { OpenerProps } from './popup';\n\nconst props = withDefaults(defineProps<OpenerProps>(), {\n\tpos: '3',\n\tnotch: true,\n\tposBy: 'fixed',\n});\n\nconst id = props.id || Math.random() + '';\n\nlet elOpener: Element;\n\n/**\n * Необычная функция для проброски props внтурь элемента слота\n *\n * @param el - вспомогательрный элемент для доступа к элементам слота\n */\nfunction render (el: any) {\n\tsetTimeout(() => {\n\t\telOpener = el.nextElementSibling;\n\n\t\tif (elOpener) {\n\t\t\trenderOpener(elOpener);\n\t\t}\n\t});\n}\n\nonUpdated(() => {\n\tif (elOpener) {\n\t\trenderOpener(elOpener);\n\t}\n});\n\nfunction renderOpener (elOpener: any) {\n\telOpener.dataset.topPopup = 'vue-' + id;\n\telOpener.dataset.topPopupId = id;\n\telOpener.dataset.topPopupP = props.pos;\n\telOpener.dataset.topPopupPosBy = props.posBy;\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\n}\n</script>\n\n<template>\n\t<template :ref=\"render\"></template>\n\n\t<!-- @slot элемент для открытия Popup -->\n\t<slot></slot>\n</template>\n\n<style>\nh3[data-top-popup],\ndiv[data-top-popup],\ni[data-top-popup]:not(.btn):not(.g_btn),\nb[data-top-popup]:not(.btn):not(.g_btn) {\n\tcursor: pointer;\n\tuser-select: none;\n\tfont-style: normal;\n\ttext-decoration: none;\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n[data-top-popup][data-top-popup-disabled] {\n\tpointer-events: none;\n\tcursor: auto !important;\n}\n\ni[contenteditable] {\n\tcursor: text !important;\n}\n</style>","<script setup lang=\"ts\">\nimport { ref, toRef, onUnmounted } from 'vue';\nimport type { Props, Emits } from './popup';\nimport Opener from './opener.vue';\nimport Worker from '@/components/popup/lib/worker';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tid: '',\n\tpos: '3',\n\tnotch: true,\n\tposBy: 'fixed',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst id = props.id || Math.random() + '';\nconst elPopupRef = ref(null);\n\n// см. lib/popup\nconst onOpen = async (popup: any) => {\n\tpopup.elPopupInner.innerText = '';\n\n\telPopupRef.value = popup.elPopupInner;\n\n\tvueConnector.opened = true;\n\tvueConnector.popup = popup;\n\n\temit('open');\n};\n\n// см. lib/popup\nconst onClose = (popup: any) => {\n\telPopupRef.value = null;\n\n\tvueConnector.opened = false;\n\tvueConnector.popup = null;\n\n\temit('close');\n};\n\nconst vueConnector = {\n\tonOpen,\n\tonClose,\n\tclassRef: toRef(props, 'class'),\n\topened: false,\n\tpopup: null,\n};\n\nWorker.regVueComponent(id, vueConnector);\n\nonUnmounted(() => {\n\tWorker.unregVueComponent(id);\n});\n</script>\n\n<template>\n\t<Opener\n\t\tv-if=\"$slots.opener\"\n\t\t:id=\"id\"\n\t\t:pos=\"pos\"\n\t\t:posBy=\"posBy\"\n\t\t:notch=\"notch\"\n\t\t:openByHover=\"openByHover\"\n\t>\n\t\t<!-- @slot элемент для открытия Popup -->\n\t\t<slot name=\"opener\"></slot>\n\t</Opener>\n\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\n\t<!-- elPopupRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\n\t<teleport\n\t\tv-if=\"elPopupRef\"\n\t\t:to=\"elPopupRef\"\n\t>\n\t\t<div v-if=\"$slots.header\" class=\"top-popup_header\">\n\t\t\t<!-- @slot Шапка -->\n\t\t\t<slot name=\"header\"></slot>\n\t\t</div>\n\n\t\t<div v-if=\"$slots.content\" class=\"top-popup_content\">\n\t\t\t<!-- @slot Контент в свободной форме -->\n\t\t\t<slot name=\"content\"></slot>\n\t\t</div>\n\n\t\t<ul v-if=\"$slots.contentList\" class=\"top-popup_content\">\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка испоьзуйте компонент popup/listItem -->\n\t\t\t<slot name=\"contentList\"></slot>\n\t\t</ul>\n\n\t\t<div v-if=\"$slots.footer\" class=\"top-popup_footer\">\n\t\t\t<!-- @slot Футер -->\n\t\t\t<slot name=\"footer\"></slot>\n\t\t</div>\n\t</teleport>\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-2891e074.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-e49a9bab.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';\nimport Events from '@/core/core/events';\nimport Worker from '@/components/popup/lib/worker';\n\n/**\n * Глобальные события, для реализации Popup\n */\nclass WorkerEvents {\n\tstatic init () {\n\t\t// автоматическое открытие при наведении мыши, событие глобальное, так как инициализация popup отложена\n\t\tdocument.addEventListener('mouseover', (e) => {\n\t\t\tif (!e.target.dataset?.topPopupOpenByHover) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.target.click();\n\t\t});\n\n\t\t// при скролле страницы убирать закрыть Popup\n\t\tdocument.addEventListener('scroll', () => {\n\t\t\tif (Core.isMobile) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\n\t\t});\n\n\t\tEvents.addOnReize(e => {\n\t\t\t// закрыть popup при повороте экрана телефона\n\t\t\t// если была отображена ПК версия, она будет закрыта\n\t\t\tif (Core.state.isMobile && e.topEvent.widthDiff) {\n\t\t\t\tWorker.getAll().forEach(elPopup => Worker.close(elPopup));\n\t\t\t}\n\t\t});\n\n\t\tdocument.addEventListener('click', this.onclick);\n\t}\n\n\t/**\n\t * Глобальный обработчик кликов\n\t * обрабатывает клики на открытие Popup\n\t * @param {Event} e\n\t */\n\tstatic async onclick (e) {\n\t\tlet elOpener;\n\n\t\tswitch (true) {\n\t\t\tcase !!e.target.dataset?.topPopup:\n\t\t\t\telOpener = e.target;\n\n\t\t\t\tbreak;\n\n\t\t\tcase !!e.target.parentElement?.dataset.topPopup:\n\t\t\t\telOpener = e.target.parentElement;\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!elOpener) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupDisabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// меню уже открыто\n\t\tif (elOpener.dataset.topPopupOpened) {\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\tawait Worker.openByOpener(elOpener);\n\t}\n}\n\nexport default WorkerEvents;\n","import Core from '@/core/core/core';\nimport DOM from '@/core/utils/dom';\nimport GlobalEvents from '@/components/popup/lib/worker.globalEvents';\n\nlet decoratorBeforeOpen;\nlet decoratorAfterOpen;\nlet decoratorIsIgnoreOuterClick;\nlet i18n = {\n\tClose: 'Close',\n};\n\nclass Worker {\n\n\t// глобальное выключение закрытия меню, используется при различных оверлеях\n\tstatic noClose = false;\n\n\tstatic vueConnectors = new Map();\n\n\t/**\n\t * Вызывается при инициализаци приложения\n\t * устанавливает глобальные статические декортаоры для компонента Popup\n\t * @param {{\n\t * \tdecoratorBeforeOpen: (object) => void\n\t * \tdecoratorAfterOpen: (object) => void,\n\t * \tdecoratorIsIgnoreOuterClick: (e) => void,\n\t * \ti18n: {Close: string}\n\t * }} options\n\t */\n\tstatic onInitApp (options) {\n\t\tdecoratorBeforeOpen = options?.decoratorBeforeOpen;\n\t\tdecoratorAfterOpen = options?.decoratorAfterOpen;\n\t\tdecoratorIsIgnoreOuterClick = options?.decoratorIsIgnoreOuterClick;\n\t\ti18n = options?.i18n;\n\t}\n\n\t// вернуть объект компонента popup, привязанный к элементу\n\tstatic getPopup (elPopup) {\n\t\treturn DOM.storage(elPopup, 'Popup');\n\t}\n\n\tstatic getAll () {\n\t\treturn DOM.querySelectorAllArray(document, '.top-popup-wrapper');\n\t}\n\n\tstatic getAllVisible () {\n\t\treturn DOM.querySelectorAllVisible(document, '.top-popup-wrapper');\n\t}\n\n\t/**\n\t * Открть Popup от указанного elOpener\n\t * @param {Element} elOpener - элемент, который должен вызвать открытие Popup\n\t */\n\tstatic async openByOpener (elOpener) {\n\t\tconst options = {};\n\n\t\toptions.popup = elOpener.dataset.topPopup;\n\n\t\tif (elOpener.dataset.topPopupP) {\n\t\t\toptions.p = parseInt(elOpener.dataset.topPopupP);\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupNotch) {\n\t\t\toptions.notch = elOpener.dataset.topPopupNotch;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupClass) {\n\t\t\toptions.class = elOpener.dataset.topPopupClass;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupPosBy) {\n\t\t\toptions.posBy = elOpener.dataset.topPopupPosBy;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupFront) {\n\t\t\toptions.frontSelector = elOpener.dataset.topPopupFront;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupInvertX) {\n\t\t\toptions.invertX = elOpener.dataset.topPopupInvertX;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupOpenByHover) {\n\t\t\toptions.openByHover = elOpener.dataset.topPopupOpenByHover;\n\t\t}\n\n\t\tif (elOpener.dataset.topPopupUseOriginal) {\n\t\t\toptions.useOriginal = elOpener.dataset.topPopupUseOriginal;\n\t\t}\n\n\t\treturn await Worker.open(elOpener, options);\n\t}\n\n\t/**\n\t * Создать и открыть Popup\n\t * @param {Element} elOpener - элемент, вызвавший открытие Popup\n\t * @param {object} options - опции Popup\n\t */\n\tstatic async open (elOpener, options) {\n\t\telOpener.dataset.topPopupOpened = 'opened';\n\n\t\tconst { default: Popup } = await import('./popup');\n\n\t\tif (typeof (jQuery) === 'function') {\n\t\t\tconst $elOpener = jQuery(elOpener);\n\n\t\t\t// deprecated, используется aftershow.top-menu-popup\n\t\t\tif ($elOpener.data('aftershow')) {\n\t\t\t\tlet afterShow = $elOpener.data('aftershow');\n\t\t\t\tif (typeof (afterShow) == 'string') {\n\t\t\t\t\tafterShow = eval(afterShow.replace(/\\W/g, ''));\n\t\t\t\t}\n\n\t\t\t\t$elOpener.one('aftershow.top-menu-popup', afterShow);\n\t\t\t}\n\n\t\t\t// deprecated, используется afterclose.top-menu-popup\n\t\t\tif ($elOpener.data('afterclose')) {\n\t\t\t\tlet afterclose = $elOpener.data('afterclose');\n\t\t\t\tif (typeof (afterclose) == 'string') {\n\t\t\t\t\tafterclose = eval(afterclose.replace(/\\W/g, ''));\n\t\t\t\t}\n\n\t\t\t\t$elOpener.one('afterclose.top-menu-popup', afterclose);\n\t\t\t}\n\t\t}\n\n\t\toptions.isFullScreen = Core.state.isMobile;\n\t\toptions.i18n = i18n;\n\n\t\treturn await new Popup(elOpener, options);\n\t}\n\n\tstatic close (elPopup) {\n\t\tconst popup = Worker.getPopup(elPopup);\n\t\tif (popup) {\n\t\t\tpopup.close();\n\t\t}\n\t}\n\n\tstatic recalcPosition (elPopup) {\n\t\tconst popup = Worker.getPopup(elPopup);\n\t\tif (popup) {\n\t\t\tpopup.recalcPosition();\n\n\t\t\t// контроль за состоянием тени скролла\n\t\t\t// вызывать после имзенения высоты скролла popup.elPopupBody\n\t\t\tHelperCommon.genHasScroll($(popup.elPopupBody));\n\t\t}\n\t}\n\n\t// скролл к активному элементу списка\n\tstatic scrollToActive (elPopup) {\n\t\tconst elItemActive = DOM.querySelectorVisible(elPopup, 'ul.top-popup_content > li > .top-active');\n\t\tif (!elItemActive) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elUl = elPopup.querySelector('ul.top-popup_content');\n\t\tconst elsLi = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li');\n\n\t\telPopup.classList.add('top-popup-wrapper-no_animate');\n\t\tsetTimeout(() => elPopup.classList.remove('top-popup-wrapper-no_animate'), 100);\n\n\t\tlet top = 100;\n\t\tfor (const elLi of elsLi) {\n\t\t\tif (elLi.querySelector(':scope > .top-active')) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\ttop += elLi.offsetHeight;\n\t\t}\n\n\t\tconst heightWrapper = elUl.offsetHeight;\n\t\tif (top > heightWrapper) {\n\t\t\telUl.scrollTop = top - heightWrapper;\n\t\t} else {\n\t\t\telUl.scrollTop = 0;\n\t\t}\n\t}\n\n\tstatic decoratorBeforeOpen (popup) {\n\t\tif (decoratorBeforeOpen) {\n\t\t\tdecoratorBeforeOpen(popup);\n\t\t}\n\t};\n\n\tstatic decoratorAfterOpen (popup) {\n\t\tif (decoratorAfterOpen) {\n\t\t\tdecoratorAfterOpen(popup);\n\t\t}\n\t};\n\n\t/**\n\t * Определитель того, что клик вне Popup нужно игнорировать\n\t * @returns {boolean} - игнорировать клик, то есть не закрывать Popup\n\t */\n\tstatic decoratorIsIgnoreOuterClick (e) {\n\t\tif (decoratorIsIgnoreOuterClick) {\n\t\t\treturn decoratorIsIgnoreOuterClick(e);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Зарегистрировать Vue компонент\n\t *\n\t * Каждый экземляр Popup регистрируется в словаре vueConnectors для последующего доступа из js\n\t * @param {string} id\n\t * @param {any} vueConnector\n\t */\n\tstatic regVueComponent (id, vueConnector) {\n\t\tif (Worker.vueConnectors.get(id)) {\n\t\t\tthrow 'Vue component Popup use duplicated id: ' + id;\n\t\t}\n\n\t\tWorker.vueConnectors.set(id, vueConnector);\n\t}\n\n\t/**\n\t * Снять с регистрации Vue компонент\n\t * @param {string} id\n\t */\n\tstatic unregVueComponent (id) {\n\t\tWorker.vueConnectors.delete(id);\n\t}\n\n}\n\nGlobalEvents.init(Worker, Core);\n\nexport default Worker;\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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"}