@topvisor/ui 0.0.17 → 0.0.33

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 (86) hide show
  1. package/.chunks/datepicker-48f2fa8d.es.js +275 -0
  2. package/.chunks/datepicker-48f2fa8d.es.js.map +1 -0
  3. package/.chunks/datepicker-f94ba423.amd.js +234 -0
  4. package/.chunks/datepicker-f94ba423.amd.js.map +1 -0
  5. package/.chunks/forms-6c397f5a.es.js +935 -0
  6. package/.chunks/forms-6c397f5a.es.js.map +1 -0
  7. package/.chunks/forms-cab135c7.amd.js +3 -0
  8. package/.chunks/forms-cab135c7.amd.js.map +1 -0
  9. package/.chunks/popup-04c385e0.es.js +701 -0
  10. package/.chunks/popup-04c385e0.es.js.map +1 -0
  11. package/.chunks/popup-33f53a1c.amd.js +342 -0
  12. package/.chunks/popup-33f53a1c.amd.js.map +1 -0
  13. package/README.md +62 -62
  14. package/common/common.amd.js +1 -21
  15. package/common/common.amd.js.map +1 -1
  16. package/common/common.js +1 -20
  17. package/common/common.js.map +1 -1
  18. package/core/core.amd.js +1 -4
  19. package/core/core.amd.js.map +1 -1
  20. package/core/core.js +2 -3
  21. package/core/core.js.map +1 -1
  22. package/core.css +1 -648
  23. package/dark.css +1 -136
  24. package/forms/forms.amd.js +1 -12
  25. package/forms/forms.amd.js.map +1 -1
  26. package/forms/forms.js +11 -9
  27. package/forms/helpers.amd.js +1 -5
  28. package/forms/helpers.amd.js.map +1 -1
  29. package/forms/helpers.js +6 -3
  30. package/forms/helpers.js.map +1 -1
  31. package/forms.css +1 -505
  32. package/formsExt/formsExt.amd.js +3 -0
  33. package/formsExt/formsExt.amd.js.map +1 -0
  34. package/formsExt/formsExt.js +152 -0
  35. package/formsExt/formsExt.js.map +1 -0
  36. package/formsExt.css +1 -0
  37. package/icomoon/demo-files/demo.css +161 -161
  38. package/icomoon/demo-files/demo.js +30 -30
  39. package/icomoon/demo.html +2945 -2945
  40. package/icomoon/fonts/Topvisor-2.svg +232 -232
  41. package/icomoon/style.css +647 -647
  42. package/light.css +1 -136
  43. package/package.json +19 -19
  44. package/popup/popup.amd.js +2 -197
  45. package/popup/popup.amd.js.map +1 -1
  46. package/popup/popup.js +104 -158
  47. package/popup/popup.js.map +1 -1
  48. package/popup/worker.amd.js +1 -233
  49. package/popup/worker.amd.js.map +1 -1
  50. package/popup/worker.js +60 -143
  51. package/popup/worker.js.map +1 -1
  52. package/popup.css +1 -19
  53. package/tabs/tabs.amd.js +2 -122
  54. package/tabs/tabs.amd.js.map +1 -1
  55. package/tabs/tabs.js +63 -86
  56. package/tabs/tabs.js.map +1 -1
  57. package/tabs.css +1 -60
  58. package/utils/date.amd.js +2 -0
  59. package/utils/date.amd.js.map +1 -0
  60. package/utils/date.js +6 -0
  61. package/utils/date.js.map +1 -0
  62. package/utils/device.amd.js +1 -41
  63. package/utils/device.amd.js.map +1 -1
  64. package/utils/device.js +3 -38
  65. package/utils/device.js.map +1 -1
  66. package/utils/dom.amd.js +1 -94
  67. package/utils/dom.amd.js.map +1 -1
  68. package/utils/dom.js +47 -77
  69. package/utils/dom.js.map +1 -1
  70. package/.chunks/core-0b2c7817.es.js +0 -152
  71. package/.chunks/core-0b2c7817.es.js.map +0 -1
  72. package/.chunks/core-51f7b679.amd.js +0 -151
  73. package/.chunks/core-51f7b679.amd.js.map +0 -1
  74. package/.chunks/forms-245e3bc0.es.js +0 -565
  75. package/.chunks/forms-245e3bc0.es.js.map +0 -1
  76. package/.chunks/forms-f7b7b259.amd.js +0 -568
  77. package/.chunks/forms-f7b7b259.amd.js.map +0 -1
  78. package/.chunks/popup-8f650530.amd.js +0 -728
  79. package/.chunks/popup-8f650530.amd.js.map +0 -1
  80. package/.chunks/popup-d240ed19.es.js +0 -731
  81. package/.chunks/popup-d240ed19.es.js.map +0 -1
  82. package/editArea/editArea.amd.js +0 -126
  83. package/editArea/editArea.amd.js.map +0 -1
  84. package/editArea/editArea.js +0 -123
  85. package/editArea/editArea.js.map +0 -1
  86. package/editArea.css +0 -61
package/utils/dom.js CHANGED
@@ -1,94 +1,64 @@
1
- function genEl(tagName, attrs, ...elsChildrens) {
2
- const el = document.createElement(tagName);
3
- for (const name in attrs) {
4
- if (name.indexOf("on") === 0) {
5
- el[name] = attrs[name];
6
- } else {
7
- el.setAttribute(name, attrs[name]);
8
- }
9
- }
10
- elsChildrens.forEach((elChildren) => {
11
- if (typeof elChildren === "string") {
12
- el.insertAdjacentHTML("beforeend", elChildren);
13
- } else {
14
- el.append(elChildren);
15
- }
16
- });
17
- return el;
1
+ function f(t, e, ...n) {
2
+ const o = document.createElement(t);
3
+ for (const r in e)
4
+ r.indexOf("on") === 0 ? o[r] = e[r] : o.setAttribute(r, e[r]);
5
+ return n.forEach((r) => {
6
+ typeof r == "string" ? o.insertAdjacentHTML("beforeend", r) : o.append(r);
7
+ }), o;
18
8
  }
19
- function isVisible(el) {
20
- if (!el) {
21
- return false;
22
- }
23
- const boundingClientRect = el.getBoundingClientRect();
24
- return !!(boundingClientRect.width || boundingClientRect.height);
9
+ function i(t) {
10
+ if (!t)
11
+ return !1;
12
+ const e = t.getBoundingClientRect();
13
+ return !!(e.width || e.height);
25
14
  }
26
- function offset(el) {
27
- const boundingClientRect = el.getBoundingClientRect();
15
+ function l(t) {
16
+ const e = t.getBoundingClientRect();
28
17
  return {
29
- top: boundingClientRect.top + window.scrollY,
30
- left: boundingClientRect.left + window.scrollX
18
+ top: e.top + window.scrollY,
19
+ left: e.left + window.scrollX
31
20
  };
32
21
  }
33
- function css(el, property) {
34
- return window.getComputedStyle(el).getPropertyValue(property);
22
+ function c(t, e) {
23
+ return window.getComputedStyle(t).getPropertyValue(e);
35
24
  }
36
- function wrap(el, tagName) {
37
- const elWrapper = document.createElement(tagName);
38
- el.after(elWrapper);
39
- elWrapper.append(el);
40
- return elWrapper;
25
+ function s(t, e) {
26
+ const n = document.createElement(e);
27
+ return t.after(n), n.append(t), n;
41
28
  }
42
- function querySelectorVisible(el, selectors) {
43
- return querySelectorAllArray(el, selectors).find(isVisible) || null;
29
+ function a(t, e) {
30
+ return u(t, e).find(i) || null;
44
31
  }
45
- function querySelectorVisibleLast(el, selectors) {
46
- return querySelectorAllArray(el, selectors).findLast(isVisible) || null;
32
+ function d(t, e) {
33
+ return u(t, e).findLast(i) || null;
47
34
  }
48
- function querySelectorAllVisible(el, selectors) {
49
- return querySelectorAllArray(el, selectors).filter(isVisible);
35
+ function p(t, e) {
36
+ return u(t, e).filter(i);
50
37
  }
51
- function querySelectorAllArray(el, selectors) {
52
- if (!el) {
53
- return [];
54
- }
55
- return [...el.querySelectorAll(selectors)];
38
+ function u(t, e) {
39
+ return t ? [...t.querySelectorAll(e)] : [];
56
40
  }
57
- function storage(el, contextName = "common", contextData = void 0) {
58
- if (!el) {
59
- return;
60
- }
61
- if (!el.topData) {
62
- el.topData = {};
63
- }
64
- if (contextData) {
65
- el.topData[contextName] = contextData;
66
- }
67
- if (contextData === null) {
68
- delete el.topData[contextName];
69
- }
70
- return el.topData[contextName];
41
+ function g(t, e = "common", n = void 0) {
42
+ if (t)
43
+ return t.topData || (t.topData = {}), n && (t.topData[e] = n), n === null && delete t.topData[e], t.topData[e];
71
44
  }
72
- function storageClear(el) {
73
- if (!el) {
74
- return;
75
- }
76
- delete el.topData;
45
+ function y(t) {
46
+ t && delete t.topData;
77
47
  }
78
- const DOM = {
79
- genEl,
80
- isVisible,
81
- offset,
82
- css,
83
- wrap,
84
- querySelectorVisible,
85
- querySelectorVisibleLast,
86
- querySelectorAllVisible,
87
- querySelectorAllArray,
88
- storage,
89
- storageClear
48
+ const b = {
49
+ genEl: f,
50
+ isVisible: i,
51
+ offset: l,
52
+ css: c,
53
+ wrap: s,
54
+ querySelectorVisible: a,
55
+ querySelectorVisibleLast: d,
56
+ querySelectorAllVisible: p,
57
+ querySelectorAllArray: u,
58
+ storage: g,
59
+ storageClear: y
90
60
  };
91
61
  export {
92
- DOM as default
62
+ b as default
93
63
  };
94
64
  //# sourceMappingURL=dom.js.map
package/utils/dom.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","sources":["../../src/core/utils/dom.ts"],"sourcesContent":["/**\n * Функции для работы с работы с Document Object Model (DOM)\n */\n\n/**\n * Создать элемент\n * @param {string} tagName\n * @param {any} attrs - атрибуты\n * @param {Element[]} elsChildrens\n * @returns {Element} - созданный элемент\n */\nfunction genEl (tagName: string, attrs: any, ...elsChildrens: Element[]): Element {\n\tconst el: any = document.createElement(tagName);\n\n\tfor (const name in attrs) {\n\t\tif (name.indexOf('on') === 0) {\n\t\t\t// events\n\t\t\tel[name] = attrs[name];\n\t\t} else {\n\t\t\tel.setAttribute(name, attrs[name]);\n\t\t}\n\t}\n\n\telsChildrens.forEach((elChildren) => {\n\t\tif (typeof (elChildren) === 'string') {\n\t\t\tel.insertAdjacentHTML('beforeend', elChildren);\n\t\t} else {\n\t\t\tel.append(elChildren);\n\t\t}\n\t});\n\n\treturn el;\n}\n\n/**\n * Проверить видимость элемента\n * @param {?Element} el\n * @returns boolean - вернет true, если элемент считается видимым\n */\nfunction isVisible (el?: Element) {\n\tif (!el) {\n\t\treturn false;\n\t}\n\n\tconst boundingClientRect = el.getBoundingClientRect();\n\treturn !!(boundingClientRect.width || boundingClientRect.height);\n}\n\n/**\n * Получить координаты элемента относительно документа\n * @param {Element} el\n * @returns {{top: number, left: number}} - координаты элемента относительно документа\n */\nfunction offset (el: Element): { top: number, left: number } {\n\tconst boundingClientRect = el.getBoundingClientRect();\n\n\treturn {\n\t\ttop: boundingClientRect.top + window.scrollY,\n\t\tleft: boundingClientRect.left + window.scrollX,\n\t};\n}\n\n/**\n * Получить значение css свойства элемента\n * @param {Element} el\n * @param {string} property - имя свойства\n * @return {string} - значение css стиля\n */\nfunction css (el: Element, property: string): string {\n\treturn window.getComputedStyle(el).getPropertyValue(property);\n}\n\n/**\n * Обернуть элемент и вернуть только что созданный элемент\n * @param {Element} el - элемент, который требуется обернуть\n * @param {string} tagName - имя тега элемента, в который треубется обернуть элемент\n * @returns {Element}\n */\nfunction wrap (el: Element, tagName: string): Element {\n\tconst elWrapper = document.createElement(tagName);\n\tel.after(elWrapper);\n\n\telWrapper.append(el);\n\n\treturn elWrapper;\n}\n\n/**\n * Найти и вернуть первый видимый элемент\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element|null}\n */\nfunction querySelectorVisible (el: Element, selectors: string): Element | null {\n\treturn querySelectorAllArray(el, selectors).find(isVisible) || null;\n}\n\n/**\n * Найти и вернуть последний видимый элемент\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element|null}\n */\nfunction querySelectorVisibleLast (el: Element, selectors: string): Element | null {\n\treturn querySelectorAllArray(el, selectors).findLast(isVisible) || null;\n}\n\n/**\n * Найти видимые элементы\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element[]} - обратите внимание, возвращается не NodeList[], а Element[]\n */\nfunction querySelectorAllVisible (el: Element, selectors: string): Element[] {\n\treturn querySelectorAllArray(el, selectors).filter(isVisible);\n}\n\n/**\n * Найти элементы и вернуть в виде массива\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element[]}\n */\nfunction querySelectorAllArray (el: Element, selectors: string): Element[] {\n\tif (!el) {\n\t\treturn [];\n\t}\n\n\treturn [...el.querySelectorAll(selectors)];\n}\n\n/**\n * Хранилище данных элемента\n * @param {Element} el\n * @param {string} contextName - контекст, обычно используется имя компонента\n * @param {?object | null} contextData - установить объект с данными, предыдущие данные будут заменены, установите null для удаления данных\n * @returns {?object} - вернет объект контекста или undefined, если данные контекста не найдены\n */\nfunction storage (\n\tel?: Element & { topData?: any },\n\tcontextName: string = 'common', contextData: object | null | undefined = undefined,\n): object | undefined {\n\tif (!el) {\n\t\treturn;\n\t}\n\n\tif (!el.topData) {\n\t\tel.topData = {};\n\t}\n\n\tif (contextData) {\n\t\tel.topData[contextName] = contextData;\n\t}\n\n\tif (contextData === null) {\n\t\tdelete el.topData[contextName];\n\t}\n\n\treturn el.topData[contextName];\n}\n\n/**\n * Очистить хранилище элемента\n */\nfunction storageClear (el?: Element & { topData?: any }) {\n\tif (!el) {\n\t\treturn;\n\t}\n\n\tdelete el.topData;\n}\n\nexport default {\n\tgenEl,\n\tisVisible,\n\toffset,\n\tcss,\n\twrap,\n\tquerySelectorVisible,\n\tquerySelectorVisibleLast,\n\tquerySelectorAllVisible,\n\tquerySelectorAllArray,\n\tstorage,\n\tstorageClear,\n};\n"],"names":[],"mappings":"AAWA,SAAS,MAAO,SAAiB,UAAe,cAAkC;AAC3E,QAAA,KAAU,SAAS,cAAc,OAAO;AAE9C,aAAW,QAAQ,OAAO;AACzB,QAAI,KAAK,QAAQ,IAAI,MAAM,GAAG;AAE1B,SAAA,IAAI,IAAI,MAAM,IAAI;AAAA,IAAA,OACf;AACN,SAAG,aAAa,MAAM,MAAM,IAAI,CAAC;AAAA,IAClC;AAAA,EACD;AAEa,eAAA,QAAQ,CAAC,eAAe;AAChC,QAAA,OAAQ,eAAgB,UAAU;AAClC,SAAA,mBAAmB,aAAa,UAAU;AAAA,IAAA,OACvC;AACN,SAAG,OAAO,UAAU;AAAA,IACrB;AAAA,EAAA,CACA;AAEM,SAAA;AACR;AAOA,SAAS,UAAW,IAAc;AACjC,MAAI,CAAC,IAAI;AACD,WAAA;AAAA,EACR;AAEM,QAAA,qBAAqB,GAAG;AAC9B,SAAO,CAAC,EAAE,mBAAmB,SAAS,mBAAmB;AAC1D;AAOA,SAAS,OAAQ,IAA4C;AACtD,QAAA,qBAAqB,GAAG;AAEvB,SAAA;AAAA,IACN,KAAK,mBAAmB,MAAM,OAAO;AAAA,IACrC,MAAM,mBAAmB,OAAO,OAAO;AAAA,EAAA;AAEzC;AAQA,SAAS,IAAK,IAAa,UAA0B;AACpD,SAAO,OAAO,iBAAiB,EAAE,EAAE,iBAAiB,QAAQ;AAC7D;AAQA,SAAS,KAAM,IAAa,SAA0B;AAC/C,QAAA,YAAY,SAAS,cAAc,OAAO;AAChD,KAAG,MAAM,SAAS;AAElB,YAAU,OAAO,EAAE;AAEZ,SAAA;AACR;AAQA,SAAS,qBAAsB,IAAa,WAAmC;AAC9E,SAAO,sBAAsB,IAAI,SAAS,EAAE,KAAK,SAAS,KAAK;AAChE;AAQA,SAAS,yBAA0B,IAAa,WAAmC;AAClF,SAAO,sBAAsB,IAAI,SAAS,EAAE,SAAS,SAAS,KAAK;AACpE;AAQA,SAAS,wBAAyB,IAAa,WAA8B;AAC5E,SAAO,sBAAsB,IAAI,SAAS,EAAE,OAAO,SAAS;AAC7D;AAQA,SAAS,sBAAuB,IAAa,WAA8B;AAC1E,MAAI,CAAC,IAAI;AACR,WAAO;EACR;AAEA,SAAO,CAAC,GAAG,GAAG,iBAAiB,SAAS,CAAC;AAC1C;AASA,SAAS,QACR,IACA,cAAsB,UAAU,cAAyC,QACpD;AACrB,MAAI,CAAC,IAAI;AACR;AAAA,EACD;AAEI,MAAA,CAAC,GAAG,SAAS;AAChB,OAAG,UAAU;EACd;AAEA,MAAI,aAAa;AACb,OAAA,QAAQ,WAAW,IAAI;AAAA,EAC3B;AAEA,MAAI,gBAAgB,MAAM;AAClB,WAAA,GAAG,QAAQ,WAAW;AAAA,EAC9B;AAEO,SAAA,GAAG,QAAQ,WAAW;AAC9B;AAKA,SAAS,aAAc,IAAkC;AACxD,MAAI,CAAC,IAAI;AACR;AAAA,EACD;AAEA,SAAO,GAAG;AACX;AAEA,MAAe,MAAA;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;"}
1
+ {"version":3,"file":"dom.js","sources":["../../src/core/utils/dom.ts"],"sourcesContent":["/**\r\n * Функции для работы с работы с Document Object Model (DOM)\r\n */\r\n\r\n/**\r\n * Создать элемент\r\n * @param {string} tagName\r\n * @param {any} attrs - атрибуты\r\n * @param {Element[]} elsChildrens\r\n * @returns {Element} - созданный элемент\r\n */\r\nfunction genEl (tagName: string, attrs: any, ...elsChildrens: Element[]): Element {\r\n\tconst el: any = document.createElement(tagName);\r\n\r\n\tfor (const name in attrs) {\r\n\t\tif (name.indexOf('on') === 0) {\r\n\t\t\t// events\r\n\t\t\tel[name] = attrs[name];\r\n\t\t} else {\r\n\t\t\tel.setAttribute(name, attrs[name]);\r\n\t\t}\r\n\t}\r\n\r\n\telsChildrens.forEach((elChildren) => {\r\n\t\tif (typeof (elChildren) === 'string') {\r\n\t\t\tel.insertAdjacentHTML('beforeend', elChildren);\r\n\t\t} else {\r\n\t\t\tel.append(elChildren);\r\n\t\t}\r\n\t});\r\n\r\n\treturn el;\r\n}\r\n\r\n/**\r\n * Проверить видимость элемента\r\n * @param {?Element} el\r\n * @returns boolean - вернет true, если элемент считается видимым\r\n */\r\nfunction isVisible (el?: Element) {\r\n\tif (!el) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tconst boundingClientRect = el.getBoundingClientRect();\r\n\treturn !!(boundingClientRect.width || boundingClientRect.height);\r\n}\r\n\r\n/**\r\n * Получить координаты элемента относительно документа\r\n * @param {Element} el\r\n * @returns {{top: number, left: number}} - координаты элемента относительно документа\r\n */\r\nfunction offset (el: Element): { top: number, left: number } {\r\n\tconst boundingClientRect = el.getBoundingClientRect();\r\n\r\n\treturn {\r\n\t\ttop: boundingClientRect.top + window.scrollY,\r\n\t\tleft: boundingClientRect.left + window.scrollX,\r\n\t};\r\n}\r\n\r\n/**\r\n * Получить значение css свойства элемента\r\n * @param {Element} el\r\n * @param {string} property - имя свойства\r\n * @return {string} - значение css стиля\r\n */\r\nfunction css (el: Element, property: string): string {\r\n\treturn window.getComputedStyle(el).getPropertyValue(property);\r\n}\r\n\r\n/**\r\n * Обернуть элемент и вернуть только что созданный элемент\r\n * @param {Element} el - элемент, который требуется обернуть\r\n * @param {string} tagName - имя тега элемента, в который треубется обернуть элемент\r\n * @returns {Element}\r\n */\r\nfunction wrap (el: Element, tagName: string): Element {\r\n\tconst elWrapper = document.createElement(tagName);\r\n\tel.after(elWrapper);\r\n\r\n\telWrapper.append(el);\r\n\r\n\treturn elWrapper;\r\n}\r\n\r\n/**\r\n * Найти и вернуть первый видимый элемент\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element|null}\r\n */\r\nfunction querySelectorVisible (el: Element, selectors: string): Element | null {\r\n\treturn querySelectorAllArray(el, selectors).find(isVisible) || null;\r\n}\r\n\r\n/**\r\n * Найти и вернуть последний видимый элемент\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element|null}\r\n */\r\nfunction querySelectorVisibleLast (el: Element, selectors: string): Element | null {\r\n\treturn querySelectorAllArray(el, selectors).findLast(isVisible) || null;\r\n}\r\n\r\n/**\r\n * Найти видимые элементы\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element[]} - обратите внимание, возвращается не NodeList[], а Element[]\r\n */\r\nfunction querySelectorAllVisible (el: Element, selectors: string): Element[] {\r\n\treturn querySelectorAllArray(el, selectors).filter(isVisible);\r\n}\r\n\r\n/**\r\n * Найти элементы и вернуть в виде массива\r\n * @param {?Document|Element} el - корневой элемент поиска\r\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\r\n * @returns {Element[]}\r\n */\r\nfunction querySelectorAllArray (el: Element, selectors: string): Element[] {\r\n\tif (!el) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\treturn [...el.querySelectorAll(selectors)];\r\n}\r\n\r\n/**\r\n * Хранилище данных элемента\r\n * @param {Element} el\r\n * @param {string} contextName - контекст, обычно используется имя компонента\r\n * @param {?object | null} contextData - установить объект с данными, предыдущие данные будут заменены, установите null для удаления данных\r\n * @returns {?object} - вернет объект контекста или undefined, если данные контекста не найдены\r\n */\r\nfunction storage (\r\n\tel?: Element & { topData?: any },\r\n\tcontextName: string = 'common', contextData: object | null | undefined = undefined,\r\n): object | undefined {\r\n\tif (!el) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (!el.topData) {\r\n\t\tel.topData = {};\r\n\t}\r\n\r\n\tif (contextData) {\r\n\t\tel.topData[contextName] = contextData;\r\n\t}\r\n\r\n\tif (contextData === null) {\r\n\t\tdelete el.topData[contextName];\r\n\t}\r\n\r\n\treturn el.topData[contextName];\r\n}\r\n\r\n/**\r\n * Очистить хранилище элемента\r\n */\r\nfunction storageClear (el?: Element & { topData?: any }) {\r\n\tif (!el) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tdelete el.topData;\r\n}\r\n\r\nexport default {\r\n\tgenEl,\r\n\tisVisible,\r\n\toffset,\r\n\tcss,\r\n\twrap,\r\n\tquerySelectorVisible,\r\n\tquerySelectorVisibleLast,\r\n\tquerySelectorAllVisible,\r\n\tquerySelectorAllArray,\r\n\tstorage,\r\n\tstorageClear,\r\n};\r\n"],"names":["genEl","tagName","attrs","elsChildrens","el","name","elChildren","isVisible","boundingClientRect","offset","css","property","wrap","elWrapper","querySelectorVisible","selectors","querySelectorAllArray","querySelectorVisibleLast","querySelectorAllVisible","storage","contextName","contextData","storageClear","DOM"],"mappings":"AAWA,SAASA,EAAOC,GAAiBC,MAAeC,GAAkC;AAC3E,QAAAC,IAAU,SAAS,cAAcH,CAAO;AAE9C,aAAWI,KAAQH;AAClB,IAAIG,EAAK,QAAQ,IAAI,MAAM,IAEvBD,EAAAC,CAAI,IAAIH,EAAMG,CAAI,IAErBD,EAAG,aAAaC,GAAMH,EAAMG,CAAI,CAAC;AAItB,SAAAF,EAAA,QAAQ,CAACG,MAAe;AAChC,IAAA,OAAQA,KAAgB,WACxBF,EAAA,mBAAmB,aAAaE,CAAU,IAE7CF,EAAG,OAAOE,CAAU;AAAA,EACrB,CACA,GAEMF;AACR;AAOA,SAASG,EAAWH,GAAc;AACjC,MAAI,CAACA;AACG,WAAA;AAGF,QAAAI,IAAqBJ,EAAG;AAC9B,SAAO,CAAC,EAAEI,EAAmB,SAASA,EAAmB;AAC1D;AAOA,SAASC,EAAQL,GAA4C;AACtD,QAAAI,IAAqBJ,EAAG;AAEvB,SAAA;AAAA,IACN,KAAKI,EAAmB,MAAM,OAAO;AAAA,IACrC,MAAMA,EAAmB,OAAO,OAAO;AAAA,EAAA;AAEzC;AAQA,SAASE,EAAKN,GAAaO,GAA0B;AACpD,SAAO,OAAO,iBAAiBP,CAAE,EAAE,iBAAiBO,CAAQ;AAC7D;AAQA,SAASC,EAAMR,GAAaH,GAA0B;AAC/C,QAAAY,IAAY,SAAS,cAAcZ,CAAO;AAChD,SAAAG,EAAG,MAAMS,CAAS,GAElBA,EAAU,OAAOT,CAAE,GAEZS;AACR;AAQA,SAASC,EAAsBV,GAAaW,GAAmC;AAC9E,SAAOC,EAAsBZ,GAAIW,CAAS,EAAE,KAAKR,CAAS,KAAK;AAChE;AAQA,SAASU,EAA0Bb,GAAaW,GAAmC;AAClF,SAAOC,EAAsBZ,GAAIW,CAAS,EAAE,SAASR,CAAS,KAAK;AACpE;AAQA,SAASW,EAAyBd,GAAaW,GAA8B;AAC5E,SAAOC,EAAsBZ,GAAIW,CAAS,EAAE,OAAOR,CAAS;AAC7D;AAQA,SAASS,EAAuBZ,GAAaW,GAA8B;AAC1E,SAAKX,IAIE,CAAC,GAAGA,EAAG,iBAAiBW,CAAS,CAAC,IAHjC;AAIT;AASA,SAASI,EACRf,GACAgB,IAAsB,UAAUC,IAAyC,QACpD;AACrB,MAAKjB;AAID,WAACA,EAAG,YACPA,EAAG,UAAU,KAGViB,MACAjB,EAAA,QAAQgB,CAAW,IAAIC,IAGvBA,MAAgB,QACZ,OAAAjB,EAAG,QAAQgB,CAAW,GAGvBhB,EAAG,QAAQgB,CAAW;AAC9B;AAKA,SAASE,EAAclB,GAAkC;AACxD,EAAKA,KAIL,OAAOA,EAAG;AACX;AAEA,MAAemB,IAAA;AAAA,EACd,OAAAvB;AAAA,EACA,WAAAO;AAAA,EACA,QAAAE;AAAA,EACA,KAAAC;AAAA,EACA,MAAAE;AAAA,EACA,sBAAAE;AAAA,EACA,0BAAAG;AAAA,EACA,yBAAAC;AAAA,EACA,uBAAAF;AAAA,EACA,SAAAG;AAAA,EACA,cAAAG;AACD;"}
@@ -1,152 +0,0 @@
1
- import { reactive } from "vue";
2
- import Device from "../utils/device.js";
3
- const onResizeDelay = 100;
4
- let onResizeTimer;
5
- const onResizeListeners = /* @__PURE__ */ new Map();
6
- const windowSize = {
7
- width: window.innerWidth,
8
- height: window.innerHeight
9
- };
10
- function addOnReize(listener) {
11
- onResizeListeners.set(listener, listener);
12
- }
13
- function removeOnResize(listener) {
14
- onResizeListeners.delete(listener);
15
- }
16
- function onResize(e) {
17
- clearTimeout(onResizeTimer);
18
- onResizeTimer = setTimeout(function() {
19
- e.topEvent = {
20
- widthDiff: windowSize.width - window.innerWidth,
21
- hightDiff: windowSize.height - window.innerHeight
22
- };
23
- windowSize.width = window.innerWidth;
24
- windowSize.height = window.innerHeight;
25
- onResizeListeners.forEach((callback) => callback(e));
26
- }, onResizeDelay);
27
- }
28
- window.addEventListener("resize", onResize);
29
- const Events = {
30
- addOnReize,
31
- removeOnResize
32
- };
33
- const options = {
34
- widthForMobile: 900
35
- };
36
- const state = {
37
- /**
38
- * Device by size
39
- * @see widthForMobile
40
- */
41
- isMobile: false,
42
- /**
43
- * Device by user agent
44
- */
45
- isMobileUA: false,
46
- /**
47
- * true, если плотность пикселей экрана больше 1
48
- */
49
- isRetina: false,
50
- /**
51
- * true, елси это приложение
52
- */
53
- isApp: false,
54
- /**
55
- * true при горизонтальном расположении устройства
56
- */
57
- isLandscape: true,
58
- /**
59
- * true при вертикальном расположении устройства
60
- */
61
- isPortrait: false,
62
- size: 0
63
- };
64
- const _window = window;
65
- class Core {
66
- static page = (_window == null ? void 0 : _window.page) || {};
67
- static options = options;
68
- static state = reactive({ ...state });
69
- static matchMediaIsMobile;
70
- /**
71
- * Добавить на страницу стили, используется для загрузки стилей из js
72
- *
73
- * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию
74
- * @param style - css стили в строке
75
- * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile
76
- */
77
- static appendStyle(style, type) {
78
- let media = "all";
79
- if (type === "m") {
80
- media = "(max-width: " + this.options.widthForMobile + "px)";
81
- }
82
- if (type === "pc") {
83
- media = "(min-width: " + this.options.widthForMobile + "px)";
84
- }
85
- const elStyle = document.createElement("style");
86
- elStyle.innerHTML = style;
87
- elStyle.media = media;
88
- document.head.append(elStyle);
89
- }
90
- /**
91
- * Установить как плагин в прилоежнии Vue
92
- * Core.state является общим для всех приложений Vue на странице
93
- * Core.options является общим для всех приложений Vue на странице
94
- * @param app - Vue App
95
- * @param {typeof options} options - параметры UI
96
- */
97
- static install(app, options2) {
98
- Core.defineOptions(options2);
99
- app.provide("top-core", Core);
100
- }
101
- /**
102
- * Установить конфигурацию UI
103
- * @param {typeof options} options
104
- */
105
- static defineOptions(options2) {
106
- if (options2.widthForMobile) {
107
- this.options.widthForMobile = options2.widthForMobile;
108
- }
109
- Core.setState();
110
- }
111
- static setState() {
112
- Core.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);
113
- Core.state.isMobileUA = Device.isMobile();
114
- Core.state.isRetina = Device.isRetina();
115
- Core.state.isApp = Device.isApp();
116
- Core.setStateByWindowSize();
117
- Events.addOnReize(Core.onResize);
118
- Core.onResize();
119
- Core.saveToCookie();
120
- }
121
- static onResize() {
122
- Core.setStateByWindowSize();
123
- document.documentElement.style.setProperty("--100vh", window.innerHeight + "px");
124
- }
125
- static setStateByWindowSize() {
126
- var _a;
127
- Core.state.isMobile = !!((_a = Core.matchMediaIsMobile) == null ? void 0 : _a.matches);
128
- Core.state.isLandscape = window.innerWidth > window.innerHeight;
129
- Core.state.isPortrait = !Core.state.isLandscape;
130
- Core.state.size = window.innerWidth > window.innerHeight ? window.innerWidth : window.innerHeight;
131
- Core.saveToCookie();
132
- }
133
- /**
134
- * Сохранить информацию об устройстве в cookie
135
- */
136
- static saveToCookie() {
137
- const device = [
138
- 1,
139
- window.innerWidth,
140
- window.innerHeight,
141
- window.devicePixelRatio,
142
- Number(Core.state.isMobile),
143
- Number(Core.state.isRetina)
144
- ];
145
- document.cookie = "device=" + device.join(",") + "; path=/;";
146
- }
147
- }
148
- export {
149
- Core as C,
150
- Events as E
151
- };
152
- //# sourceMappingURL=core-0b2c7817.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"core-0b2c7817.es.js","sources":["../../src/core/core/events.ts","../../src/core/core/options.ts","../../src/core/core/state.ts","../../src/core/core/core.ts"],"sourcesContent":["const onResizeDelay = 100;\n\nlet onResizeTimer: NodeJS.Timeout;\n\ntype TopEvent = Event & { topEvent: { widthDiff: number, hightDiff: number } }\n\n/**\n * Установленные обрабочики на событие изменения размеров окна\n */\nconst onResizeListeners: Map<(ev: TopEvent) => any, (ev: TopEvent) => any> = new Map();\n\n// зафиксированное состояние размеров окна\nconst windowSize = {\n\twidth: window.innerWidth,\n\theight: window.innerHeight,\n};\n\n/**\n * Добавить обработчик на событие изменения размеров экрана\n * вызов таких обработчиков будет опмизирован и объединен в одно событие\n */\nfunction addOnReize (listener: (this: Element, ev: TopEvent) => any) {\n\tonResizeListeners.set(listener, listener);\n}\n\n/**\n * Удаление обработчика на событие изменений размеров экрана\n */\nfunction removeOnResize (listener: (this: Element, ev: TopEvent) => any) {\n\tonResizeListeners.delete(listener);\n}\n\nfunction onResize (e: any) {\n\tclearTimeout(onResizeTimer);\n\n\tonResizeTimer = setTimeout(function () {\n\t\te.topEvent = {\n\t\t\twidthDiff: windowSize.width - window.innerWidth,\n\t\t\thightDiff: windowSize.height - window.innerHeight,\n\t\t};\n\n\t\twindowSize.width = window.innerWidth;\n\t\twindowSize.height = window.innerHeight;\n\n\t\tonResizeListeners.forEach((callback) => callback(e));\n\t}, onResizeDelay);\n}\n\nwindow.addEventListener('resize', onResize);\n\nexport default {\n\taddOnReize,\n\tremoveOnResize,\n};\n","/**\n * Конфигурация UI\n * Можно переопределить при подклчюении UI во Vue приложение через app.use(Core, options)\n */\nconst options = {\n\twidthForMobile: 900,\n};\n\nexport default options;","/**\n * State UI для взаимодейсвтиями с приложениями Vue\n */\nconst state = {\n\t/**\n\t * Device by size\n\t * @see widthForMobile\n\t */\n\tisMobile: false,\n\n\t/**\n\t * Device by user agent\n\t */\n\tisMobileUA: false,\n\n\t/**\n\t * true, если плотность пикселей экрана больше 1\n\t */\n\tisRetina: false,\n\n\t/**\n\t * true, елси это приложение\n\t */\n\tisApp: false,\n\n\t/**\n\t * true при горизонтальном расположении устройства\n\t */\n\tisLandscape: true,\n\n\t/**\n\t * true при вертикальном расположении устройства\n\t */\n\tisPortrait: false,\n\tsize: 0,\n};\n\nexport default state;","import { reactive } from 'vue';\nimport Device from '@/core/utils/device';\nimport DOM from '@/core/utils/dom';\nimport Events from '@/core/core/events';\nimport options from '@/core/core/options';\nimport state from '@/core/core/state';\n\nconst _window: any = window;\n\nclass Core {\n\n\tstatic page = _window?.page || {};\n\n\tstatic options = options;\n\n\tstatic state = reactive({ ...state });\n\n\tstatic matchMediaIsMobile?: MediaQueryList;\n\n\t/**\n\t * Добавить на страницу стили, используется для загрузки стилей из js\n\t *\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\n\t * @param style - css стили в строке\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\n\t */\n\tstatic appendStyle (style: string, type: '' | 'm' | 'pc'): void {\n\t\tlet media = 'all';\n\n\t\tif (type === 'm') {\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tif (type === 'pc') {\n\t\t\tmedia = '(min-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tconst elStyle = document.createElement('style');\n\t\telStyle.innerHTML = style;\n\t\telStyle.media = media;\n\n\t\tdocument.head.append(elStyle);\n\t}\n\n\t/**\n\t * Установить как плагин в прилоежнии Vue\n\t * Core.state является общим для всех приложений Vue на странице\n\t * Core.options является общим для всех приложений Vue на странице\n\t * @param app - Vue App\n\t * @param {typeof options} options - параметры UI\n\t */\n\tstatic install (app: any, options: typeof this.options) {\n\t\tCore.defineOptions(options);\n\n\t\tapp.provide('top-core', Core);\n\t}\n\n\t/**\n\t * Установить конфигурацию UI\n\t * @param {typeof options} options\n\t */\n\tstatic defineOptions (options: typeof this.options) {\n\t\tif (options.widthForMobile) {\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\n\t\t}\n\n\t\tCore.setState();\n\t}\n\n\tstatic setState () {\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\n\n\t\tCore.state.isMobileUA = Device.isMobile();\n\t\tCore.state.isRetina = Device.isRetina();\n\t\tCore.state.isApp = Device.isApp();\n\n\t\tCore.setStateByWindowSize();\n\n\t\t// пересчет значений, зависящих от рамзеров окна\n\t\tEvents.addOnReize(Core.onResize);\n\n\t\tCore.onResize();\n\n\t\tCore.saveToCookie();\n\t}\n\n\tstatic onResize () {\n\t\tCore.setStateByWindowSize();\n\n\t\t// честный vh\n\t\tdocument.documentElement.style.setProperty('--100vh', window.innerHeight + 'px');\n\t}\n\n\tstatic setStateByWindowSize () {\n\t\tCore.state.isMobile = !!Core.matchMediaIsMobile?.matches;\n\t\tCore.state.isLandscape = (window.innerWidth > window.innerHeight);\n\t\tCore.state.isPortrait = !Core.state.isLandscape;\n\t\tCore.state.size = (window.innerWidth > window.innerHeight) ? window.innerWidth : window.innerHeight;\n\n\t\tCore.saveToCookie();\n\t}\n\n\t/**\n\t * Сохранить информацию об устройстве в cookie\n\t */\n\tstatic saveToCookie () {\n\t\tconst device = [\n\t\t\t1,\n\t\t\twindow.innerWidth,\n\t\t\twindow.innerHeight,\n\t\t\twindow.devicePixelRatio,\n\t\t\tNumber(Core.state.isMobile),\n\t\t\tNumber(Core.state.isRetina),\n\t\t];\n\n\t\tdocument.cookie = 'device=' + device.join(',') + '; path=/;';\n\t}\n\n}\n\nexport default Core;"],"names":["options"],"mappings":"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"}
@@ -1,151 +0,0 @@
1
- define(["exports", "vue", "../utils/device.amd"], function(exports, vue, utils_device) {
2
- "use strict";
3
- const onResizeDelay = 100;
4
- let onResizeTimer;
5
- const onResizeListeners = /* @__PURE__ */ new Map();
6
- const windowSize = {
7
- width: window.innerWidth,
8
- height: window.innerHeight
9
- };
10
- function addOnReize(listener) {
11
- onResizeListeners.set(listener, listener);
12
- }
13
- function removeOnResize(listener) {
14
- onResizeListeners.delete(listener);
15
- }
16
- function onResize(e) {
17
- clearTimeout(onResizeTimer);
18
- onResizeTimer = setTimeout(function() {
19
- e.topEvent = {
20
- widthDiff: windowSize.width - window.innerWidth,
21
- hightDiff: windowSize.height - window.innerHeight
22
- };
23
- windowSize.width = window.innerWidth;
24
- windowSize.height = window.innerHeight;
25
- onResizeListeners.forEach((callback) => callback(e));
26
- }, onResizeDelay);
27
- }
28
- window.addEventListener("resize", onResize);
29
- const Events = {
30
- addOnReize,
31
- removeOnResize
32
- };
33
- const options = {
34
- widthForMobile: 900
35
- };
36
- const state = {
37
- /**
38
- * Device by size
39
- * @see widthForMobile
40
- */
41
- isMobile: false,
42
- /**
43
- * Device by user agent
44
- */
45
- isMobileUA: false,
46
- /**
47
- * true, если плотность пикселей экрана больше 1
48
- */
49
- isRetina: false,
50
- /**
51
- * true, елси это приложение
52
- */
53
- isApp: false,
54
- /**
55
- * true при горизонтальном расположении устройства
56
- */
57
- isLandscape: true,
58
- /**
59
- * true при вертикальном расположении устройства
60
- */
61
- isPortrait: false,
62
- size: 0
63
- };
64
- const _window = window;
65
- class Core {
66
- static page = (_window == null ? void 0 : _window.page) || {};
67
- static options = options;
68
- static state = vue.reactive({ ...state });
69
- static matchMediaIsMobile;
70
- /**
71
- * Добавить на страницу стили, используется для загрузки стилей из js
72
- *
73
- * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию
74
- * @param style - css стили в строке
75
- * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile
76
- */
77
- static appendStyle(style, type) {
78
- let media = "all";
79
- if (type === "m") {
80
- media = "(max-width: " + this.options.widthForMobile + "px)";
81
- }
82
- if (type === "pc") {
83
- media = "(min-width: " + this.options.widthForMobile + "px)";
84
- }
85
- const elStyle = document.createElement("style");
86
- elStyle.innerHTML = style;
87
- elStyle.media = media;
88
- document.head.append(elStyle);
89
- }
90
- /**
91
- * Установить как плагин в прилоежнии Vue
92
- * Core.state является общим для всех приложений Vue на странице
93
- * Core.options является общим для всех приложений Vue на странице
94
- * @param app - Vue App
95
- * @param {typeof options} options - параметры UI
96
- */
97
- static install(app, options2) {
98
- Core.defineOptions(options2);
99
- app.provide("top-core", Core);
100
- }
101
- /**
102
- * Установить конфигурацию UI
103
- * @param {typeof options} options
104
- */
105
- static defineOptions(options2) {
106
- if (options2.widthForMobile) {
107
- this.options.widthForMobile = options2.widthForMobile;
108
- }
109
- Core.setState();
110
- }
111
- static setState() {
112
- Core.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);
113
- Core.state.isMobileUA = utils_device.isMobile();
114
- Core.state.isRetina = utils_device.isRetina();
115
- Core.state.isApp = utils_device.isApp();
116
- Core.setStateByWindowSize();
117
- Events.addOnReize(Core.onResize);
118
- Core.onResize();
119
- Core.saveToCookie();
120
- }
121
- static onResize() {
122
- Core.setStateByWindowSize();
123
- document.documentElement.style.setProperty("--100vh", window.innerHeight + "px");
124
- }
125
- static setStateByWindowSize() {
126
- var _a;
127
- Core.state.isMobile = !!((_a = Core.matchMediaIsMobile) == null ? void 0 : _a.matches);
128
- Core.state.isLandscape = window.innerWidth > window.innerHeight;
129
- Core.state.isPortrait = !Core.state.isLandscape;
130
- Core.state.size = window.innerWidth > window.innerHeight ? window.innerWidth : window.innerHeight;
131
- Core.saveToCookie();
132
- }
133
- /**
134
- * Сохранить информацию об устройстве в cookie
135
- */
136
- static saveToCookie() {
137
- const device = [
138
- 1,
139
- window.innerWidth,
140
- window.innerHeight,
141
- window.devicePixelRatio,
142
- Number(Core.state.isMobile),
143
- Number(Core.state.isRetina)
144
- ];
145
- document.cookie = "device=" + device.join(",") + "; path=/;";
146
- }
147
- }
148
- exports.Core = Core;
149
- exports.Events = Events;
150
- });
151
- //# sourceMappingURL=core-51f7b679.amd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"core-51f7b679.amd.js","sources":["../../src/core/core/events.ts","../../src/core/core/options.ts","../../src/core/core/state.ts","../../src/core/core/core.ts"],"sourcesContent":["const onResizeDelay = 100;\n\nlet onResizeTimer: NodeJS.Timeout;\n\ntype TopEvent = Event & { topEvent: { widthDiff: number, hightDiff: number } }\n\n/**\n * Установленные обрабочики на событие изменения размеров окна\n */\nconst onResizeListeners: Map<(ev: TopEvent) => any, (ev: TopEvent) => any> = new Map();\n\n// зафиксированное состояние размеров окна\nconst windowSize = {\n\twidth: window.innerWidth,\n\theight: window.innerHeight,\n};\n\n/**\n * Добавить обработчик на событие изменения размеров экрана\n * вызов таких обработчиков будет опмизирован и объединен в одно событие\n */\nfunction addOnReize (listener: (this: Element, ev: TopEvent) => any) {\n\tonResizeListeners.set(listener, listener);\n}\n\n/**\n * Удаление обработчика на событие изменений размеров экрана\n */\nfunction removeOnResize (listener: (this: Element, ev: TopEvent) => any) {\n\tonResizeListeners.delete(listener);\n}\n\nfunction onResize (e: any) {\n\tclearTimeout(onResizeTimer);\n\n\tonResizeTimer = setTimeout(function () {\n\t\te.topEvent = {\n\t\t\twidthDiff: windowSize.width - window.innerWidth,\n\t\t\thightDiff: windowSize.height - window.innerHeight,\n\t\t};\n\n\t\twindowSize.width = window.innerWidth;\n\t\twindowSize.height = window.innerHeight;\n\n\t\tonResizeListeners.forEach((callback) => callback(e));\n\t}, onResizeDelay);\n}\n\nwindow.addEventListener('resize', onResize);\n\nexport default {\n\taddOnReize,\n\tremoveOnResize,\n};\n","/**\n * Конфигурация UI\n * Можно переопределить при подклчюении UI во Vue приложение через app.use(Core, options)\n */\nconst options = {\n\twidthForMobile: 900,\n};\n\nexport default options;","/**\n * State UI для взаимодейсвтиями с приложениями Vue\n */\nconst state = {\n\t/**\n\t * Device by size\n\t * @see widthForMobile\n\t */\n\tisMobile: false,\n\n\t/**\n\t * Device by user agent\n\t */\n\tisMobileUA: false,\n\n\t/**\n\t * true, если плотность пикселей экрана больше 1\n\t */\n\tisRetina: false,\n\n\t/**\n\t * true, елси это приложение\n\t */\n\tisApp: false,\n\n\t/**\n\t * true при горизонтальном расположении устройства\n\t */\n\tisLandscape: true,\n\n\t/**\n\t * true при вертикальном расположении устройства\n\t */\n\tisPortrait: false,\n\tsize: 0,\n};\n\nexport default state;","import { reactive } from 'vue';\nimport Device from '@/core/utils/device';\nimport DOM from '@/core/utils/dom';\nimport Events from '@/core/core/events';\nimport options from '@/core/core/options';\nimport state from '@/core/core/state';\n\nconst _window: any = window;\n\nclass Core {\n\n\tstatic page = _window?.page || {};\n\n\tstatic options = options;\n\n\tstatic state = reactive({ ...state });\n\n\tstatic matchMediaIsMobile?: MediaQueryList;\n\n\t/**\n\t * Добавить на страницу стили, используется для загрузки стилей из js\n\t *\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\n\t * @param style - css стили в строке\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\n\t */\n\tstatic appendStyle (style: string, type: '' | 'm' | 'pc'): void {\n\t\tlet media = 'all';\n\n\t\tif (type === 'm') {\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tif (type === 'pc') {\n\t\t\tmedia = '(min-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tconst elStyle = document.createElement('style');\n\t\telStyle.innerHTML = style;\n\t\telStyle.media = media;\n\n\t\tdocument.head.append(elStyle);\n\t}\n\n\t/**\n\t * Установить как плагин в прилоежнии Vue\n\t * Core.state является общим для всех приложений Vue на странице\n\t * Core.options является общим для всех приложений Vue на странице\n\t * @param app - Vue App\n\t * @param {typeof options} options - параметры UI\n\t */\n\tstatic install (app: any, options: typeof this.options) {\n\t\tCore.defineOptions(options);\n\n\t\tapp.provide('top-core', Core);\n\t}\n\n\t/**\n\t * Установить конфигурацию UI\n\t * @param {typeof options} options\n\t */\n\tstatic defineOptions (options: typeof this.options) {\n\t\tif (options.widthForMobile) {\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\n\t\t}\n\n\t\tCore.setState();\n\t}\n\n\tstatic setState () {\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\n\n\t\tCore.state.isMobileUA = Device.isMobile();\n\t\tCore.state.isRetina = Device.isRetina();\n\t\tCore.state.isApp = Device.isApp();\n\n\t\tCore.setStateByWindowSize();\n\n\t\t// пересчет значений, зависящих от рамзеров окна\n\t\tEvents.addOnReize(Core.onResize);\n\n\t\tCore.onResize();\n\n\t\tCore.saveToCookie();\n\t}\n\n\tstatic onResize () {\n\t\tCore.setStateByWindowSize();\n\n\t\t// честный vh\n\t\tdocument.documentElement.style.setProperty('--100vh', window.innerHeight + 'px');\n\t}\n\n\tstatic setStateByWindowSize () {\n\t\tCore.state.isMobile = !!Core.matchMediaIsMobile?.matches;\n\t\tCore.state.isLandscape = (window.innerWidth > window.innerHeight);\n\t\tCore.state.isPortrait = !Core.state.isLandscape;\n\t\tCore.state.size = (window.innerWidth > window.innerHeight) ? window.innerWidth : window.innerHeight;\n\n\t\tCore.saveToCookie();\n\t}\n\n\t/**\n\t * Сохранить информацию об устройстве в cookie\n\t */\n\tstatic saveToCookie () {\n\t\tconst device = [\n\t\t\t1,\n\t\t\twindow.innerWidth,\n\t\t\twindow.innerHeight,\n\t\t\twindow.devicePixelRatio,\n\t\t\tNumber(Core.state.isMobile),\n\t\t\tNumber(Core.state.isRetina),\n\t\t];\n\n\t\tdocument.cookie = 'device=' + device.join(',') + '; path=/;';\n\t}\n\n}\n\nexport default Core;"],"names":["reactive","options","Device"],"mappings":";;AAAA,QAAM,gBAAgB;AAEtB,MAAI;AAOJ,QAAM,wCAA2E;AAGjF,QAAM,aAAa;AAAA,IAClB,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,EAChB;AAMA,WAAS,WAAY,UAAgD;AAClD,sBAAA,IAAI,UAAU,QAAQ;AAAA,EACzC;AAKA,WAAS,eAAgB,UAAgD;AACxE,sBAAkB,OAAO,QAAQ;AAAA,EAClC;AAEA,WAAS,SAAU,GAAQ;AAC1B,iBAAa,aAAa;AAE1B,oBAAgB,WAAW,WAAY;AACtC,QAAE,WAAW;AAAA,QACZ,WAAW,WAAW,QAAQ,OAAO;AAAA,QACrC,WAAW,WAAW,SAAS,OAAO;AAAA,MAAA;AAGvC,iBAAW,QAAQ,OAAO;AAC1B,iBAAW,SAAS,OAAO;AAE3B,wBAAkB,QAAQ,CAAC,aAAa,SAAS,CAAC,CAAC;AAAA,OACjD,aAAa;AAAA,EACjB;AAEA,SAAO,iBAAiB,UAAU,QAAQ;AAE3B,QAAA,SAAA;AAAA,IACd;AAAA,IACA;AAAA,EACD;ACjDA,QAAM,UAAU;AAAA,IACf,gBAAgB;AAAA,EACjB;ACHA,QAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,IAKb,UAAU;AAAA;AAAA;AAAA;AAAA,IAKV,YAAY;AAAA;AAAA;AAAA;AAAA,IAKZ,UAAU;AAAA;AAAA;AAAA;AAAA,IAKV,OAAO;AAAA;AAAA;AAAA;AAAA,IAKP,aAAa;AAAA;AAAA;AAAA;AAAA,IAKb,YAAY;AAAA,IACZ,MAAM;AAAA,EACP;AC5BA,QAAM,UAAe;AAAA,EAErB,MAAM,KAAK;AAAA,IAEV,OAAO,QAAO,mCAAS,SAAQ;IAE/B,OAAO,UAAU;AAAA,IAEjB,OAAO,QAAQA,IAAA,SAAS,EAAE,GAAG,MAAO,CAAA;AAAA,IAEpC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASP,OAAO,YAAa,OAAe,MAA6B;AAC/D,UAAI,QAAQ;AAEZ,UAAI,SAAS,KAAK;AACT,gBAAA,iBAAiB,KAAK,QAAQ,iBAAiB;AAAA,MACxD;AAEA,UAAI,SAAS,MAAM;AACV,gBAAA,iBAAiB,KAAK,QAAQ,iBAAiB;AAAA,MACxD;AAEM,YAAA,UAAU,SAAS,cAAc,OAAO;AAC9C,cAAQ,YAAY;AACpB,cAAQ,QAAQ;AAEP,eAAA,KAAK,OAAO,OAAO;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,OAAO,QAAS,KAAUC,UAA8B;AACvD,WAAK,cAAcA,QAAO;AAEtB,UAAA,QAAQ,YAAY,IAAI;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,OAAO,cAAeA,UAA8B;AACnD,UAAIA,SAAQ,gBAAgB;AACtB,aAAA,QAAQ,iBAAiBA,SAAQ;AAAA,MACvC;AAEA,WAAK,SAAS;AAAA,IACf;AAAA,IAEA,OAAO,WAAY;AAClB,WAAK,qBAAqB,OAAO,WAAW,eAAe,KAAK,QAAQ,cAAc,KAAK;AAEtF,WAAA,MAAM,aAAaC,aAAO,SAAS;AACnC,WAAA,MAAM,WAAWA,aAAO,SAAS;AACjC,WAAA,MAAM,QAAQA,aAAO,MAAM;AAEhC,WAAK,qBAAqB;AAGnB,aAAA,WAAW,KAAK,QAAQ;AAE/B,WAAK,SAAS;AAEd,WAAK,aAAa;AAAA,IACnB;AAAA,IAEA,OAAO,WAAY;AAClB,WAAK,qBAAqB;AAG1B,eAAS,gBAAgB,MAAM,YAAY,WAAW,OAAO,cAAc,IAAI;AAAA,IAChF;AAAA,IAEA,OAAO,uBAAwB;;AAC9B,WAAK,MAAM,WAAW,CAAC,GAAC,UAAK,uBAAL,mBAAyB;AACjD,WAAK,MAAM,cAAe,OAAO,aAAa,OAAO;AACrD,WAAK,MAAM,aAAa,CAAC,KAAK,MAAM;AAC/B,WAAA,MAAM,OAAQ,OAAO,aAAa,OAAO,cAAe,OAAO,aAAa,OAAO;AAExF,WAAK,aAAa;AAAA,IACnB;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,eAAgB;AACtB,YAAM,SAAS;AAAA,QACd;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO,KAAK,MAAM,QAAQ;AAAA,QAC1B,OAAO,KAAK,MAAM,QAAQ;AAAA,MAAA;AAG3B,eAAS,SAAS,YAAY,OAAO,KAAK,GAAG,IAAI;AAAA,IAClD;AAAA,EAED;;;;"}