@gudhub/ssg-web-components-library 1.0.0

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 (230) hide show
  1. package/index.js +3 -0
  2. package/package.json +20 -0
  3. package/src/components/about-us-banner/about-us-banner-data.json +9 -0
  4. package/src/components/about-us-banner/about-us-banner.html +19 -0
  5. package/src/components/about-us-banner/about-us-banner.js +23 -0
  6. package/src/components/about-us-banner/about-us-banner.scss +59 -0
  7. package/src/components/about-us-banner/config.js +5 -0
  8. package/src/components/about-us-image-counter/about-us-image-counter-data.json +35 -0
  9. package/src/components/about-us-image-counter/about-us-image-counter.html +22 -0
  10. package/src/components/about-us-image-counter/about-us-image-counter.js +23 -0
  11. package/src/components/about-us-image-counter/about-us-image-counter.scss +44 -0
  12. package/src/components/about-us-image-counter/config.js +5 -0
  13. package/src/components/about-us-team-members/about-us-team-members-data.json +99 -0
  14. package/src/components/about-us-team-members/about-us-team-members.html +25 -0
  15. package/src/components/about-us-team-members/about-us-team-members.js +22 -0
  16. package/src/components/about-us-team-members/about-us-team-members.scss +71 -0
  17. package/src/components/about-us-team-members/config.js +5 -0
  18. package/src/components/animation-block/animation-block-data.json +40 -0
  19. package/src/components/animation-block/animation-block.html +37 -0
  20. package/src/components/animation-block/animation-block.js +23 -0
  21. package/src/components/animation-block/animation-block.scss +337 -0
  22. package/src/components/animation-block/config.js +5 -0
  23. package/src/components/banner-and-text/banner-and-text-data.json +24 -0
  24. package/src/components/banner-and-text/banner-and-text.html +30 -0
  25. package/src/components/banner-and-text/banner-and-text.js +25 -0
  26. package/src/components/banner-and-text/banner-and-text.scss +85 -0
  27. package/src/components/banner-and-text/config.js +5 -0
  28. package/src/components/blog/article/allArticles.json +96 -0
  29. package/src/components/blog/article/article-component.html +189 -0
  30. package/src/components/blog/article/article-component.js +340 -0
  31. package/src/components/blog/article/article-component.scss +776 -0
  32. package/src/components/blog/article/authors-object.json +125 -0
  33. package/src/components/blog/article/categories-object.json +47 -0
  34. package/src/components/blog/author-page/author-page.html +37 -0
  35. package/src/components/blog/author-page/author-page.js +113 -0
  36. package/src/components/blog/author-page/author-page.json +111 -0
  37. package/src/components/blog/author-page/author-page.scss +107 -0
  38. package/src/components/blog/authors-list/authors-list.html +40 -0
  39. package/src/components/blog/authors-list/authors-list.js +60 -0
  40. package/src/components/blog/authors-list/authors-list.json +132 -0
  41. package/src/components/blog/authors-list/authors-list.scss +171 -0
  42. package/src/components/blog/categories-list/categories-list.html +21 -0
  43. package/src/components/blog/categories-list/categories-list.js +26 -0
  44. package/src/components/blog/categories-list/categories-list.json +53 -0
  45. package/src/components/blog/categories-list/categories-list.scss +125 -0
  46. package/src/components/blog/comments/comments.html +89 -0
  47. package/src/components/blog/comments/comments.js +181 -0
  48. package/src/components/blog/comments/comments.json +130 -0
  49. package/src/components/blog/comments/comments.scss +324 -0
  50. package/src/components/blog/contents/contents.html +14 -0
  51. package/src/components/blog/contents/contents.js +63 -0
  52. package/src/components/blog/contents/contents.scss +157 -0
  53. package/src/components/blog/posts-template/articles.json +139 -0
  54. package/src/components/blog/posts-template/authors-object.json +61 -0
  55. package/src/components/blog/posts-template/categories.json +61 -0
  56. package/src/components/blog/posts-template/posts-template.html +239 -0
  57. package/src/components/blog/posts-template/posts-template.js +532 -0
  58. package/src/components/blog/posts-template/posts-template.scss +566 -0
  59. package/src/components/breadcrumbs/breadcrumbs-component.js +65 -0
  60. package/src/components/breadcrumbs/breadcrumbs.html +21 -0
  61. package/src/components/breadcrumbs/breadcrumbs.scss +118 -0
  62. package/src/components/breadcrumbs/config.js +5 -0
  63. package/src/components/button-component/button-component.html +3 -0
  64. package/src/components/button-component/button-component.js +39 -0
  65. package/src/components/button-component/button-component.readme.md +11 -0
  66. package/src/components/button-component/button-component.scss +34 -0
  67. package/src/components/button-component/config.js +5 -0
  68. package/src/components/category-banner/category-banner.html +7 -0
  69. package/src/components/category-banner/category-banner.js +44 -0
  70. package/src/components/category-banner/category-banner.scss +22 -0
  71. package/src/components/category-banner/config.js +5 -0
  72. package/src/components/contact-us-block/config.js +5 -0
  73. package/src/components/contact-us-block/contact-us-block.html +41 -0
  74. package/src/components/contact-us-block/contact-us-block.js +22 -0
  75. package/src/components/contact-us-block/contact-us-block.scss +59 -0
  76. package/src/components/cookies-popup/config.js +5 -0
  77. package/src/components/cookies-popup/cookies-popup.html +8 -0
  78. package/src/components/cookies-popup/cookies-popup.js +27 -0
  79. package/src/components/cookies-popup/cookies-popup.scss +68 -0
  80. package/src/components/counter-section/config.js +5 -0
  81. package/src/components/counter-section/counter-section-data.json +21 -0
  82. package/src/components/counter-section/counter-section.html +38 -0
  83. package/src/components/counter-section/counter-section.js +23 -0
  84. package/src/components/counter-section/counter-section.readme.md +19 -0
  85. package/src/components/counter-section/counter-section.scss +204 -0
  86. package/src/components/counter-section-with-text/config.js +5 -0
  87. package/src/components/counter-section-with-text/counter-section-with-text-data.json +21 -0
  88. package/src/components/counter-section-with-text/counter-section-with-text.html +46 -0
  89. package/src/components/counter-section-with-text/counter-section-with-text.js +23 -0
  90. package/src/components/counter-section-with-text/counter-section-with-text.readme.md +19 -0
  91. package/src/components/counter-section-with-text/counter-section-with-text.scss +164 -0
  92. package/src/components/crm-services-banner/config.js +5 -0
  93. package/src/components/crm-services-banner/crm-services-banner-data.json +20 -0
  94. package/src/components/crm-services-banner/crm-services-banner.html +28 -0
  95. package/src/components/crm-services-banner/crm-services-banner.js +25 -0
  96. package/src/components/crm-services-banner/crm-services-banner.scss +57 -0
  97. package/src/components/edit-mode/config.js +5 -0
  98. package/src/components/edit-mode/edit-mode.html +4 -0
  99. package/src/components/edit-mode/edit-mode.js +23 -0
  100. package/src/components/edit-mode/edit-mode.scss +69 -0
  101. package/src/components/faq/config.js +5 -0
  102. package/src/components/faq/faq.html +20 -0
  103. package/src/components/faq/faq.js +40 -0
  104. package/src/components/faq/faq.scss +80 -0
  105. package/src/components/footer/config.js +5 -0
  106. package/src/components/footer/footer.html +74 -0
  107. package/src/components/footer/footer.js +21 -0
  108. package/src/components/footer/footer.scss +356 -0
  109. package/src/components/footer/pages-object.json +58 -0
  110. package/src/components/fullscreen-image-and-text/config.js +5 -0
  111. package/src/components/fullscreen-image-and-text/fullscreen-image-and-text.html +42 -0
  112. package/src/components/fullscreen-image-and-text/fullscreen-image-and-text.js +29 -0
  113. package/src/components/fullscreen-image-and-text/fullscreen-image-and-text.scss +192 -0
  114. package/src/components/get-in-touch-block/config.js +5 -0
  115. package/src/components/get-in-touch-block/get-in-touch-block-data.json +4 -0
  116. package/src/components/get-in-touch-block/get-in-touch-block.html +11 -0
  117. package/src/components/get-in-touch-block/get-in-touch-block.js +22 -0
  118. package/src/components/get-in-touch-block/get-in-touch-block.scss +12 -0
  119. package/src/components/get-in-touch-form/config.js +5 -0
  120. package/src/components/get-in-touch-form/get-in-touch-form-data.json +114 -0
  121. package/src/components/get-in-touch-form/get-in-touch-form.html +35 -0
  122. package/src/components/get-in-touch-form/get-in-touch-form.js +115 -0
  123. package/src/components/get-in-touch-form/get-in-touch-form.readme.md +45 -0
  124. package/src/components/get-in-touch-form/get-in-touch-form.scss +334 -0
  125. package/src/components/get-in-touch-form/sendEmail.js +161 -0
  126. package/src/components/grid/config.js +5 -0
  127. package/src/components/grid/grid.html +51 -0
  128. package/src/components/grid/grid.js +115 -0
  129. package/src/components/grid/grid.scss +566 -0
  130. package/src/components/grid-component/config.js +5 -0
  131. package/src/components/grid-component/grid-component-data.json +115 -0
  132. package/src/components/grid-component/grid-component.html +52 -0
  133. package/src/components/grid-component/grid-component.js +40 -0
  134. package/src/components/grid-component/grid-component.readme.md +32 -0
  135. package/src/components/grid-component/grid-component.scss +199 -0
  136. package/src/components/header/config.js +5 -0
  137. package/src/components/header/header.html +60 -0
  138. package/src/components/header/header.js +55 -0
  139. package/src/components/header/header.scss +556 -0
  140. package/src/components/homepage-banner/config.js +5 -0
  141. package/src/components/homepage-banner/homepage-banner.html +1443 -0
  142. package/src/components/homepage-banner/homepage-banner.js +23 -0
  143. package/src/components/homepage-banner/homepage-banner.scss +147 -0
  144. package/src/components/image-component/config.js +5 -0
  145. package/src/components/image-component/image-component.html +25 -0
  146. package/src/components/image-component/image-component.js +107 -0
  147. package/src/components/list-text-and-media/config.js +5 -0
  148. package/src/components/list-text-and-media/list-text-and-media-data.json +70 -0
  149. package/src/components/list-text-and-media/list-text-and-media.html +38 -0
  150. package/src/components/list-text-and-media/list-text-and-media.js +22 -0
  151. package/src/components/list-text-and-media/list-text-and-media.readme.md +30 -0
  152. package/src/components/list-text-and-media/list-text-and-media.scss +156 -0
  153. package/src/components/media-and-accordion/config.js +5 -0
  154. package/src/components/media-and-accordion/media-and-accordion-data.json +84 -0
  155. package/src/components/media-and-accordion/media-and-accordion.html +37 -0
  156. package/src/components/media-and-accordion/media-and-accordion.js +55 -0
  157. package/src/components/media-and-accordion/media-and-accordion.scss +170 -0
  158. package/src/components/media-and-list-of-text/config.js +5 -0
  159. package/src/components/media-and-list-of-text/media-and-list-of-text-data.json +16 -0
  160. package/src/components/media-and-list-of-text/media-and-list-of-text.html +32 -0
  161. package/src/components/media-and-list-of-text/media-and-list-of-text.js +24 -0
  162. package/src/components/media-and-list-of-text/media-and-list-of-text.readme.md +26 -0
  163. package/src/components/media-and-list-of-text/media-and-list-of-text.scss +102 -0
  164. package/src/components/media-and-text/config.js +5 -0
  165. package/src/components/media-and-text/media-and-text-data.json +20 -0
  166. package/src/components/media-and-text/media-and-text.html +26 -0
  167. package/src/components/media-and-text/media-and-text.js +26 -0
  168. package/src/components/media-and-text/media-and-text.scss +51 -0
  169. package/src/components/meta/articles.json +95 -0
  170. package/src/components/meta/author-schema.js +71 -0
  171. package/src/components/meta/authors.json +108 -0
  172. package/src/components/meta/blog-schema.js +93 -0
  173. package/src/components/meta/canonical.js +74 -0
  174. package/src/components/meta/config.js +40 -0
  175. package/src/components/meta/meta-index.js +14 -0
  176. package/src/components/meta/meta-tag.js +168 -0
  177. package/src/components/meta/organization-schema.js +50 -0
  178. package/src/components/meta/service-schema.js +76 -0
  179. package/src/components/meta/title-tag.js +64 -0
  180. package/src/components/overflow-cards/config.js +5 -0
  181. package/src/components/overflow-cards/overflow-cards-data.json +33 -0
  182. package/src/components/overflow-cards/overflow-cards.html +33 -0
  183. package/src/components/overflow-cards/overflow-cards.js +28 -0
  184. package/src/components/overflow-cards/overflow-cards.scss +112 -0
  185. package/src/components/popup/config.js +5 -0
  186. package/src/components/popup/popup.html +10 -0
  187. package/src/components/popup/popup.js +66 -0
  188. package/src/components/popup/popup.readme.md +13 -0
  189. package/src/components/popup/popup.scss +76 -0
  190. package/src/components/prices-cards/config.js +5 -0
  191. package/src/components/prices-cards/prices-cards-data.json +90 -0
  192. package/src/components/prices-cards/prices-cards.html +35 -0
  193. package/src/components/prices-cards/prices-cards.js +23 -0
  194. package/src/components/prices-cards/prices-cards.readme.md +48 -0
  195. package/src/components/prices-cards/prices-cards.scss +206 -0
  196. package/src/components/recent-posts/author-object.json +53 -0
  197. package/src/components/recent-posts/config.js +5 -0
  198. package/src/components/recent-posts/recent-posts.html +85 -0
  199. package/src/components/recent-posts/recent-posts.js +89 -0
  200. package/src/components/recent-posts/recent-posts.json +258 -0
  201. package/src/components/recent-posts/recent-posts.scss +274 -0
  202. package/src/components/reviews-slider/config.js +5 -0
  203. package/src/components/reviews-slider/reviews-slider-data.json +30 -0
  204. package/src/components/reviews-slider/reviews-slider.html +48 -0
  205. package/src/components/reviews-slider/reviews-slider.js +86 -0
  206. package/src/components/reviews-slider/reviews-slider.scss +92 -0
  207. package/src/components/service-counter/config.js +5 -0
  208. package/src/components/service-counter/service-counter-data.json +24 -0
  209. package/src/components/service-counter/service-counter.html +19 -0
  210. package/src/components/service-counter/service-counter.js +23 -0
  211. package/src/components/service-counter/service-counter.scss +171 -0
  212. package/src/components/service-image-counter/config.js +5 -0
  213. package/src/components/service-image-counter/service-image-counter-data.json +52 -0
  214. package/src/components/service-image-counter/service-image-counter.html +30 -0
  215. package/src/components/service-image-counter/service-image-counter.js +23 -0
  216. package/src/components/service-image-counter/service-image-counter.scss +114 -0
  217. package/src/components/tabs/config.js +5 -0
  218. package/src/components/tabs/tabs-component.js +45 -0
  219. package/src/components/tabs/tabs.html +28 -0
  220. package/src/components/tabs/tabs.scss +399 -0
  221. package/src/components/text-only/config.js +5 -0
  222. package/src/components/text-only/text-only-data.json +4 -0
  223. package/src/components/text-only/text-only.html +8 -0
  224. package/src/components/text-only/text-only.js +20 -0
  225. package/src/components/text-only/text-only.scss +21 -0
  226. package/src/components/top-banner/config.js +5 -0
  227. package/src/components/top-banner/top-banner.html +22 -0
  228. package/src/components/top-banner/top-banner.js +50 -0
  229. package/src/components/top-banner/top-banner.scss +132 -0
  230. package/src/config.js +38 -0
@@ -0,0 +1,118 @@
1
+ breadcrumbs-component {
2
+ .breadcrumbs_list {
3
+ list-style: none;
4
+ display: flex;
5
+ align-items: center;
6
+ margin-bottom: 30px;
7
+ height: 16px;
8
+ li {
9
+ margin-right: 31px;
10
+ position: relative;
11
+ font-size: 16px;
12
+ line-height: 100%;
13
+ font-weight: 300;
14
+ height: 100%;
15
+ white-space: nowrap;
16
+ a {
17
+ display: flex;
18
+ align-items: center;
19
+ color: var(--breadcrumbsColor);
20
+ position: relative;
21
+ &::after {
22
+ content: '';
23
+ position: absolute;
24
+ bottom: -2px;
25
+ left: 0;
26
+ transition: all .2s ease;
27
+ height: 1px;
28
+ width: 0;
29
+ background: var(--breadcrumbsColor);
30
+ }
31
+ &:hover::after {
32
+ width: 100%;
33
+ }
34
+ }
35
+ &:last-child {
36
+ color: var(--breadcrumbsLastColor);
37
+ margin-right: 0;
38
+ max-width: 80%;
39
+ overflow: hidden;
40
+ font-weight: 500;
41
+ text-overflow: ellipsis;
42
+ &::after {
43
+ content: none;
44
+ }
45
+ }
46
+ &::after {
47
+ content: '';
48
+ position: absolute;
49
+ top: calc(50% - 5px);
50
+ right: -17px;
51
+ width: 6px;
52
+ height: 6px;
53
+ background-repeat: no-repeat;
54
+ border-right: 1px solid;
55
+ border-bottom: 1px solid;
56
+ border-color: var(--breadcrumbsColor);
57
+ transform: rotate(-45deg);
58
+ }
59
+ }
60
+ }
61
+ }
62
+ article breadcrumbs-component .breadcrumbs_list {
63
+ li {
64
+ &:last-child {
65
+ overflow: hidden;
66
+ text-overflow: ellipsis;
67
+ max-width: 400px;
68
+ }
69
+ }
70
+ }
71
+
72
+ @media screen and (max-width: 1300px) {
73
+ breadcrumbs-component {
74
+ padding-top: 30px;
75
+ display: block;
76
+ }
77
+ .service_banner_left breadcrumbs-component + h1 {
78
+ margin-top: 0;
79
+ }
80
+ }
81
+ @media screen and (max-width: 1080px) {
82
+ article breadcrumbs-component .breadcrumbs_list li:last-child {
83
+ max-width: 280px;
84
+ }
85
+ }
86
+ @media screen and (max-width: 990px) {
87
+ article breadcrumbs-component .breadcrumbs_list li:last-child {
88
+ max-width: 100%;
89
+ }
90
+ }
91
+ @media screen and (max-width: 640px) {
92
+ breadcrumbs-component {
93
+ padding-top: 15px;
94
+ .breadcrumbs_list {
95
+ margin-bottom: 15px;
96
+ li {
97
+ margin-right: 21px;
98
+ font-size: 14px;
99
+ &::after {
100
+ right: -11px;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+ @media screen and (max-width: 420px) {
107
+ breadcrumbs-component {
108
+ .breadcrumbs_list {
109
+ li {
110
+ font-size: 12px;
111
+ &::after {
112
+ top: calc(50% - 6px);
113
+ right: -13px;
114
+ }
115
+ }
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,5 @@
1
+ export const breadcrumbsComponent = {
2
+ tag: 'breadcrumbs-component',
3
+ src: '@gudhub/ssg-web-component-library/src/components/breadcrumbs/breadcrumbs-component.js',
4
+ serverOnly: true
5
+ }
@@ -0,0 +1,3 @@
1
+ <${tag} class="${className}">
2
+ ${text}
3
+ </${tag}>
@@ -0,0 +1,39 @@
1
+ import html from './button-component.html';
2
+ import './button-component.scss';
3
+
4
+ class ButtonComponent extends GHComponent {
5
+
6
+ constructor() {
7
+ super();
8
+ this.popupId = this.hasAttribute('data-popup-id') ? this.getAttribute('data-popup-id') : null;
9
+ this.placement = this.hasAttribute('data-placement') ? this.getAttribute('data-placement') : 'no-placement-attribute';
10
+ this.href = this.hasAttribute('href') ? this.getAttribute('href') : null;
11
+ this.tag = !this.popupId && this.href ? `a href="${this.href}"` : 'div onclick="openPopup()"';
12
+ }
13
+
14
+ async onServerRender() {
15
+ this.text = this.textContent != '' ? this.textContent : 'Замовити консультацію';
16
+ if (this.href) {
17
+ this.removeHref();
18
+ }
19
+
20
+ this.className = this.hasAttribute('class') ? this.getAttribute('class') : 'btn';
21
+
22
+ super.render(html);
23
+ this.removeAttribute('class');
24
+ }
25
+
26
+ openPopup () {
27
+ window.dispatchEvent( new CustomEvent('open-popup', {
28
+ detail: {
29
+ popupId: this.popupId,
30
+ placement: this.placement
31
+ }
32
+ }));
33
+ }
34
+
35
+ removeHref() {
36
+ this.removeAttribute('href');
37
+ }
38
+ }
39
+ window.customElements.define('button-component', ButtonComponent);
@@ -0,0 +1,11 @@
1
+ # Button text
2
+ Button text defines in component innerText: <button-component>button text</button-component>
3
+
4
+ #
5
+
6
+ # Data-attributes
7
+ data-popup-id="popup-id": button will open popup, and "popup-id" determines which popup will be opened
8
+
9
+ href: button will be with tag <a> and open link from href attribute of component
10
+
11
+ data-placement: value of this attribute will be in event details (for example it used in form to track which button user clicked)
@@ -0,0 +1,34 @@
1
+ button-component {
2
+ .btn {
3
+ color: var(--button-primary-normal-font-color);
4
+ border-radius: var(--button-primary-border-radius);
5
+ border: 1px solid;
6
+ background-color: var(--button-primary-normal-fill-color);
7
+ border-color: var(--button-primary-normal-border-color);
8
+ padding: 20px 25px;
9
+ cursor: pointer;
10
+ font-weight: var(--button-primary-font-weight);
11
+ transition: all .2s ease;
12
+ &:hover {
13
+ color: var(--button-primary-hover-font-color);
14
+ background-color: var(--button-primary-hover-fill-color);
15
+ border-color: var(--button-primary-hover-border-color);
16
+ }
17
+ &.empty {
18
+ color: var(--button-secondary-normal-font-color);
19
+ border-radius: var(--button-secondary-border-radius);
20
+ background-color: var(--button-secondary-normal-fill-color);
21
+ border-color: var(--button-secondary-normal-border-color);
22
+ font-weight: var(--button-secondary-font-weight);
23
+ &:hover {
24
+ color: var(--button-secondary-hover-font-color);
25
+ background-color: var(--button-secondary-hover-fill-color);
26
+ border-color: var(--button-secondary-hover-border-color);
27
+ }
28
+ }
29
+ }
30
+
31
+ a {
32
+ display: block;
33
+ }
34
+ }
@@ -0,0 +1,5 @@
1
+ export const buttonComponent = {
2
+ tag: 'button-component',
3
+ src: '@gudhub/ssg-web-component-library/src/components/button-component/button-component.js',
4
+ serverOnly: false
5
+ }
@@ -0,0 +1,7 @@
1
+ <section>
2
+ <div class="container">
3
+ <breadcrumbs-component data-items='${breadcrumbs}'></breadcrumbs-component>
4
+ <h1>${title}</h1>
5
+ <p class="subtitle">${description}</p>
6
+ </div>
7
+ </section>
@@ -0,0 +1,44 @@
1
+ import html from './category-banner.html';
2
+ import './category-banner.scss';
3
+
4
+ class CategoryBanner extends GHComponent {
5
+ /**
6
+ * data-chapter - blog, default - page
7
+ */
8
+ constructor() {
9
+ super();
10
+ }
11
+
12
+ async onServerRender() {
13
+ let chapter = this.getAttribute('data-chapter')
14
+ let url = new URL(window.location.href);
15
+ let route = url.searchParams.get('path');
16
+ let slug;
17
+ if (route.includes('/page/')) {
18
+ route = route.slice(1, route.length - 1);
19
+ route = route.split('/');
20
+ slug = `/${route[0]}/${route[1]}/`;
21
+ } else {
22
+ slug = false;
23
+ }
24
+
25
+ // This algorithm with findIds we use because pagination pages is not exist in gudhub application and can't get data from their items
26
+ let ids = await super.findIds(chapter, slug);
27
+ const items = await gudhub.getItems(ids.appId);
28
+ const item = items.find(item => item.item_id == ids.itemId);
29
+
30
+ let description = await fetch(`https://gudhub.com/userdata/${ids.appId}/${item.fields.find(field => field.field_id == window.constants.chapters.blog.description_field_id).field_value}.html?t=${new Date().getTime()}`);
31
+ description = await description.text();
32
+
33
+ let div = document.createElement('div');
34
+ div.innerHTML = description;
35
+ this.description = div.querySelector('div').innerText;
36
+ this.title = item.fields.find(field => field.field_id == window.constants.chapters.blog.heading_field_id).field_value;
37
+
38
+ this.breadcrumbs = JSON.stringify([{"title": "Blog", "slug": "/blog/"},{"title": this.title}]);
39
+
40
+ super.render(html);
41
+ }
42
+ }
43
+
44
+ window.customElements.define('category-banner', CategoryBanner);
@@ -0,0 +1,22 @@
1
+ category-banner {
2
+ section {
3
+ padding-top: 70px;
4
+ }
5
+ text-align: center;
6
+ h1 {
7
+ text-align: center;
8
+ }
9
+ p {
10
+ width: 100%;
11
+ max-width: 950px;
12
+ margin: 0 auto
13
+ }
14
+ }
15
+
16
+ @media screen and (max-width: 600px) {
17
+ category-banner {
18
+ section {
19
+ padding-top: 60px;
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,5 @@
1
+ export const categoryBanner = {
2
+ tag: 'category-banner',
3
+ src: '@gudhub/ssg-web-component-library/src/components/category-banner/category-banner.js',
4
+ serverOnly: true
5
+ }
@@ -0,0 +1,5 @@
1
+ export const contactUsBlock = {
2
+ tag: 'contact-us-block',
3
+ src: '@gudhub/ssg-web-component-library/src/components/contact-us-block/contact-us-block.js',
4
+ serverOnly: false
5
+ }
@@ -0,0 +1,41 @@
1
+ <section class="contact_us_block">
2
+ <div class="contact_us_block_container">
3
+ <h1 class="title" gh-id="${ghId}.title"></h1>
4
+ <div class="subtitle" gh-id="${ghId}.subtitle"></div>
5
+ <ul class="contact_info_list">
6
+ <li class="tel">
7
+ <a href="tel:${hrefPhone}">
8
+ <div class="icon-wrapper">
9
+ <svg xmlns="http://www.w3.org/2000/svg" width="26" height="26" viewBox="0 0 26 26" fill="none"><g clip-path="url(#clip0_1428_29328)"><path d="M22.3204 17.1261C21.6107 16.4098 20.6649 16.0155 19.6566 16.0155C19.6556 16.0155 19.6545 16.0155 19.6535 16.0155C18.6442 16.0163 17.6978 16.4122 16.9885 17.1304L15.4698 18.668C11.8226 17.1394 8.90841 14.2224 7.38191 10.5773L8.93201 9.00779C10.3827 7.53899 10.3699 5.1619 8.90336 3.70885L5.36176 0.199707H5.05312C2.37882 0.199707 0.203125 2.3754 0.203125 5.0497C0.203125 7.85059 0.751874 10.5681 1.83402 13.1267C2.87917 15.5977 4.37522 17.8167 6.28061 19.7221C8.18601 21.6275 10.4051 23.1236 12.876 24.1687C15.4346 25.2509 18.1522 25.7997 20.9531 25.7997C23.6274 25.7997 25.8031 23.624 25.8031 20.9497V20.6411L22.3204 17.1261ZM20.9531 24.2997C10.3386 24.2997 1.70312 15.6642 1.70312 5.0497C1.70312 3.30205 3.04817 1.8627 4.75752 1.71265L7.84756 4.7743C8.72746 5.64615 8.73521 7.07239 7.86476 7.95369L5.63031 10.2161L5.80246 10.6671C7.46651 15.0268 10.9135 18.5018 15.2596 20.2011L15.8398 20.4279L18.0557 18.1844C18.4813 17.7535 19.0491 17.516 19.6547 17.5155C19.6554 17.5155 19.656 17.5155 19.6566 17.5155C20.2615 17.5155 20.829 17.7521 21.2548 18.1818L24.2902 21.2453C24.1401 22.9546 22.7007 24.2997 20.9531 24.2997Z" fill="white"/><path d="M22.0529 3.9488C19.6353 1.5312 16.4209 0.199707 13.002 0.199707V1.6997C19.2328 1.6997 24.3019 6.76884 24.3019 12.9997H25.8019C25.8019 9.58069 24.4705 6.36635 22.0529 3.9488Z" fill="white"/><path d="M13.002 4.69971V6.1997C16.7515 6.1997 19.8019 9.25015 19.8019 12.9997H21.3019C21.3019 8.42305 17.5786 4.69971 13.002 4.69971Z" fill="white"/></g><defs><clipPath id="clip0_1428_29328"><rect width="25.6" height="25.6" fill="white" transform="translate(0.199219 0.200195)"/></clipPath></defs></svg>
10
+ </div>
11
+ <div class="flex-wrapper">
12
+ <h3>Phone:</h3>
13
+ <span>${info.phone}</span>
14
+ </div>
15
+ </a>
16
+ </li>
17
+ <li class="mail">
18
+ <a href="mailto:${info.email}">
19
+ <div class="icon-wrapper">
20
+ <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" fill="none"><g clip-path="url(#clip0_1428_29305)"><mask id="mask0_1428_29305" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="30" height="30"><path d="M0.902344 0.919592H29.0623V29.0796H0.902344V0.919592Z" fill="white"/></mask><g mask="url(#mask0_1428_29305)"><path d="M1.72656 5.15522H28.2366V24.8452H1.72656V5.15522Z" stroke="white" stroke-width="1.5" stroke-miterlimit="10"/><path d="M1.7207 5.155L14.9757 17.75L28.2307 5.155" stroke="white" stroke-width="1.5" stroke-miterlimit="10"/><path d="M1.7207 24.8452L11.6517 14.5917" stroke="white" stroke-width="1.5" stroke-miterlimit="10"/><path d="M28.2278 24.8452L18.2969 14.5917" stroke="white" stroke-width="1.5" stroke-miterlimit="10"/></g></g><defs><clipPath id="clip0_1428_29305"><rect width="28.16" height="28.16" fill="white" transform="translate(0.919922 0.919922)"/></clipPath></defs></svg>
21
+ </div>
22
+ <div class="flex-wrapper">
23
+ <h3>Email:</h3>
24
+ <span>${info.email}</span>
25
+ </div>
26
+ </a>
27
+ </li>
28
+ <li class="address">
29
+ <a href="${info.googleMaps}" target="_blank" rel="noreferrer noopener nofollow">
30
+ <div class="icon-wrapper">
31
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="29" viewBox="0 0 24 29" fill="none"><g clip-path="url(#clip0_1428_29403)"><path d="M12.0535 14.2955C10.984 14.2955 9.91434 13.8884 9.10029 13.0741C7.47178 11.4458 7.47178 8.79617 9.10029 7.16766C9.88898 6.37875 10.9379 5.94434 12.0535 5.94434C13.1692 5.94434 14.2179 6.37896 15.0068 7.16766C16.6353 8.79617 16.6353 11.4458 15.0068 13.0741C14.1925 13.8884 13.123 14.2955 12.0535 14.2955ZM12.0535 7.59756C11.4071 7.59756 10.7606 7.84355 10.2684 8.33576C9.28398 9.32018 9.28398 10.9218 10.2684 11.9062C10.7451 12.383 11.3791 12.6455 12.0535 12.6455C12.7279 12.6455 13.3619 12.383 13.8387 11.9062C14.8231 10.9218 14.8231 9.32018 13.8387 8.33576C13.3465 7.84355 12.7 7.59756 12.0535 7.59756Z" fill="white"/><path d="M12.0675 28.5799L11.4288 27.8297C11.0549 27.3903 2.26953 16.9919 2.26953 10.2082C2.26953 4.8109 6.66051 0.419922 12.0578 0.419922C17.4551 0.419922 21.8461 4.8109 21.8461 10.2082C21.8461 16.6582 13.0684 27.3673 12.6948 27.82L12.0675 28.5799ZM12.0578 2.07186C7.57145 2.07186 3.92146 5.72184 3.92146 10.2082C3.92146 12.7296 5.42494 16.3785 8.26947 20.7607C9.74566 23.0348 11.2322 24.9607 12.0488 25.9799C12.8667 24.9327 14.3674 22.9435 15.8528 20.6262C18.693 16.1959 20.1942 12.5932 20.1942 10.2082C20.1942 5.72184 16.5442 2.07186 12.0578 2.07186Z" fill="white"/></g><defs><clipPath id="clip0_1428_29403"><rect width="28.16" height="28.16" fill="white" transform="translate(-2.08008 0.419922)"/></clipPath></defs></svg>
32
+ </div>
33
+ <div class="flex-wrapper">
34
+ <h3>Adress:</h3>
35
+ <span>${info.fullAddress}</span>
36
+ </div>
37
+ </a>
38
+ </li>
39
+ </ul>
40
+ </div>
41
+ </section>
@@ -0,0 +1,22 @@
1
+ import html from './contact-us-block.html';
2
+ import './contact-us-block.scss';
3
+
4
+ import generalInfo from '../../../../general-info.json';
5
+
6
+ class ContactUsBlock extends GHComponent {
7
+
8
+ constructor() {
9
+ super();
10
+ }
11
+
12
+ async onServerRender() {
13
+ this.ghId = this.getAttribute('data-gh-id') || null;
14
+
15
+ this.info = generalInfo;
16
+
17
+ this.hrefPhone = this.info.phone.replace(/[ ()+-]/g, '');
18
+
19
+ super.render(html);
20
+ }
21
+ }
22
+ window.customElements.define('contact-us-block', ContactUsBlock);
@@ -0,0 +1,59 @@
1
+ contact-us-block {
2
+ background-color: var(--primary-bg-color);
3
+ .contact_us_block {
4
+ .title, .subtitle {
5
+ text-align: left;
6
+ }
7
+ .contact_info_list {
8
+ padding-top: 30px;
9
+ list-style: none;
10
+ li {
11
+ &:not(:last-child) {
12
+ margin-bottom: 30px;
13
+ }
14
+ span {
15
+ color: var(--text-color);
16
+ transition: color .3s ease;
17
+ }
18
+ &:hover {
19
+ span {
20
+ color: var(--primary-color);
21
+ }
22
+ }
23
+ }
24
+ a {
25
+ display: flex;
26
+ gap: 10px;
27
+ }
28
+ h3 {
29
+ font-size: 28px;
30
+ margin-bottom: 0;
31
+ }
32
+ .icon-wrapper {
33
+ position: relative;
34
+ min-width: 64px;
35
+ height: 64px;
36
+ background-color: var(--primary-color);
37
+ border-radius: 50%;
38
+ svg {
39
+ width: 28px;
40
+ height: 28px;
41
+ position: absolute;
42
+ top: 50%;
43
+ left: 50%;
44
+ transform: translate(-50%, -50%);
45
+ }
46
+ }
47
+ .flex-wrapper {
48
+ max-width: 300px;
49
+ flex-direction: column;
50
+ justify-content: center;
51
+ }
52
+ }
53
+ }
54
+ @media screen and (max-width: 900px) {
55
+ .contact_us_block .contact_info_list {
56
+ padding-top: 0;
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,5 @@
1
+ export const aboutUsBanner = {
2
+ tag: 'about-us-banner',
3
+ src: '@gudhub/ssg-web-component-library/src/components/about-us-banner/about-us-banner.js',
4
+ serverOnly: false
5
+ }
@@ -0,0 +1,8 @@
1
+ <div class="cookies_popup">
2
+ <div class="container">
3
+ <div class="flex_wrap">
4
+ <div class="text">By continuing to use this site, you agree to our <a href="/privacy-policy/">cookie policy</a>.</div>
5
+ <div class="popup_btn" onclick="gotIt()">GOT IT</div>
6
+ </div>
7
+ </div>
8
+ </div>
@@ -0,0 +1,27 @@
1
+ import html from './cookies-popup.html';
2
+ import './cookies-popup.scss';
3
+
4
+ class CookiesPopup extends GHComponent {
5
+
6
+ constructor() {
7
+ super();
8
+ }
9
+
10
+ async onServerRender() {
11
+ super.render(html);
12
+ }
13
+
14
+ onClientReady () {
15
+ if ( localStorage.getItem('agreeWithCookies') == null ) {
16
+ this.classList.add('show');
17
+ }
18
+ }
19
+
20
+ gotIt() {
21
+ this.classList.add('hide');
22
+ localStorage.setItem('agreeWithCookies', true);
23
+ }
24
+
25
+ }
26
+
27
+ window.customElements.define('cookies-popup', CookiesPopup);
@@ -0,0 +1,68 @@
1
+ cookies-popup {
2
+ display: none;
3
+ &.show {
4
+ display: block;
5
+ background-color: #4D555B;
6
+ padding: 15px 0;
7
+ position: fixed;
8
+ bottom: 0;
9
+ left: 0;
10
+ width: 100%;
11
+ z-index: 10;
12
+ transition: all 1s ease;
13
+ &.hide {
14
+ bottom: -100%;
15
+ }
16
+ .flex_wrap {
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+ }
21
+ .text {
22
+ color: #fff;
23
+ font-size: 16px;
24
+ line-height: 25px;
25
+ margin-right: 60px;
26
+ a {
27
+ color: #fff;
28
+ font-size: 14px;
29
+ line-height: 22px;
30
+ text-decoration: underline;
31
+ transition: all .2s ease;
32
+ &:hover {
33
+ color: #00BFD6;
34
+ }
35
+ }
36
+ }
37
+ .popup_btn {
38
+ padding: 8px 40px;
39
+ background-color: #00BFD6;
40
+ border: 1px solid #00BFD6;
41
+ color: #fff;
42
+ font-size: 14px;
43
+ line-height: 22px;
44
+ border-radius: 50px;
45
+ cursor: pointer;
46
+ transition: all .2s ease;
47
+ white-space: nowrap;
48
+ &:hover {
49
+ background-color: #fff;
50
+ color: #00BFD6;
51
+ }
52
+ }
53
+ }
54
+ }
55
+
56
+ @media screen and (max-width: 450px) {
57
+ cookies-popup.show {
58
+ .text {
59
+ color: #fff;
60
+ font-size: 14px;
61
+ line-height: 18px;
62
+ margin-right: 15px;
63
+ }
64
+ .popup_btn {
65
+ padding: 8px 20px;
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,5 @@
1
+ export const counterSection = {
2
+ tag: 'counter-section',
3
+ src: '@gudhub/ssg-web-component-library/src/components/counter-section/counter-section.js',
4
+ serverOnly: true
5
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "title": "Title",
3
+ "subtitle": "Subtitle",
4
+ "button_text": "button_text",
5
+ "items": [
6
+ {
7
+ "number": "98",
8
+ "symbol": "%",
9
+ "text": "Sed rhoncus venenatis velit"
10
+ },
11
+ {
12
+ "number": "10/7",
13
+ "text": "Duis efficitur condimentum lacus"
14
+ },
15
+ {
16
+ "number": "На",
17
+ "symbol": "&nbsp%",
18
+ "text": "Quisque vel justo lorem"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,38 @@
1
+ <section class="service_counter">
2
+ <div class="container">
3
+ <div class="top_part">
4
+ ${json.title ? `
5
+ <h2 class="h2" gh-id="${ghId}.title"> TITLE </h2>
6
+ ` : ''}
7
+ ${json.subtitle ? `
8
+ <p gh-id="${ghId}.subtitle" class="subtitle"> SUBTITLE </p>
9
+ ` : ''}
10
+ </div>
11
+ <div class="counters">
12
+ ${
13
+ items.reduce((acc, item, index) => {
14
+ return acc + `
15
+ <div class="counter_item">
16
+ <div class="counter_top">
17
+ ${item.number ? `
18
+ <span class="counter_num" gh-id="${ghId}.items.${index}.number"></span>
19
+ ` : ''}
20
+ ${item.symbol ? `
21
+ <span class="counter_symbol" gh-id="${ghId}.items.${index}.symbol"></span>
22
+ ` : ''}
23
+ </div>
24
+ ${item.text ? `
25
+ <div class="counter_bottom" gh-id="${ghId}.items.${index}.text"></div>
26
+ ` : ""}
27
+ </div>
28
+ `
29
+ }, '')
30
+ }
31
+ </div>
32
+ ${json.button ? `
33
+ <div class="bottom_button">
34
+ <button-component data-popup-id="${json.button.popupId}" data-placement="${json.button.placement}">${json.button.text}</button-component>
35
+ </div>
36
+ `: ''}
37
+ </div>
38
+ </section>
@@ -0,0 +1,23 @@
1
+ import html from './counter-section.html';
2
+ import './counter-section.scss';
3
+ import jsonTemplate from './counter-section-data.json';
4
+
5
+ class CounterSection extends GHComponent {
6
+
7
+ constructor() {
8
+ super();
9
+ super.setDefaultData(jsonTemplate);
10
+ }
11
+
12
+ async onServerRender() {
13
+ this.ghId = this.getAttribute('data-gh-id') || null;
14
+
15
+ this.json = await super.getGhData(this.ghId);
16
+ this.items = this.json.items;
17
+
18
+ super.render(html);
19
+ }
20
+
21
+ }
22
+
23
+ window.customElements.define('counter-section', CounterSection);
@@ -0,0 +1,19 @@
1
+ # Attributes:
2
+
3
+ none
4
+
5
+
6
+ # Component data-object:
7
+ ("?" means "unnecessary")
8
+ ```json
9
+ {
10
+ "title?": "string",
11
+ "subtitle?": "string",
12
+ "button_text?": "string",
13
+ "items": [ {
14
+ "number?": "string",
15
+ "symbol?": "string",
16
+ "text?": "string"
17
+ } ]
18
+ }
19
+ ```