@gravitee/ui-components 3.25.3-typescript-50960c3 → 3.25.3-typescript-9d19b68
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.
- package/package.json +5 -13
- package/src/atoms/gv-autocomplete.js +422 -1
- package/src/atoms/gv-button.js +397 -1
- package/src/atoms/gv-checkbox.js +178 -1
- package/src/atoms/gv-date-picker-calendar.js +812 -1
- package/src/atoms/gv-date-picker-cell.js +174 -1
- package/src/atoms/gv-date-picker.js +638 -1
- package/src/atoms/gv-file-upload.js +348 -1
- package/src/atoms/gv-icon.js +93 -1
- package/src/atoms/gv-image.js +135 -1
- package/src/atoms/gv-input-message.js +78 -1
- package/src/atoms/gv-input.js +508 -1
- package/src/atoms/gv-link.js +204 -1
- package/src/atoms/gv-message.js +133 -1
- package/src/atoms/gv-metric.js +112 -1
- package/src/atoms/gv-relative-time.js +143 -1
- package/src/atoms/gv-select-native.js +363 -1
- package/src/atoms/gv-select.js +413 -1
- package/src/atoms/gv-spinner.js +54 -1
- package/src/atoms/gv-state.js +125 -1
- package/src/atoms/gv-switch.js +235 -1
- package/src/atoms/gv-tag.js +162 -1
- package/src/atoms/gv-text.js +160 -1
- package/src/charts/gv-chart-bar.js +101 -1
- package/src/charts/gv-chart-gauge.js +92 -1
- package/src/charts/gv-chart-histogram.js +78 -1
- package/src/charts/gv-chart-line.js +218 -1
- package/src/charts/gv-chart-map.js +111 -1
- package/src/charts/gv-chart-pie.js +89 -1
- package/src/index.js +77 -1
- package/src/lib/cron-expression.js +176 -1
- package/src/lib/date.js +43 -1
- package/src/lib/events.js +26 -1
- package/src/lib/http-client-schema-form.js +67 -1
- package/src/lib/http.js +237 -1
- package/src/lib/i18n.js +93 -1
- package/src/lib/item.js +110 -1
- package/src/lib/properties.js +171 -1
- package/src/lib/schema-form.js +39 -1
- package/src/lib/studio.js +144 -1
- package/src/lib/style.js +39 -1
- package/src/lib/text-format.js +65 -1
- package/src/lib/theme.js +60 -1
- package/src/lib/utils.js +106 -1
- package/src/mixins/chart-element.js +153 -1
- package/src/mixins/input-element.js +136 -1
- package/src/mixins/item-resource.js +102 -1
- package/src/mixins/keyboard-element.js +62 -1
- package/src/mixins/update-after-browser.js +30 -1
- package/src/mixins/with-resize-observer.js +62 -1
- package/src/mixins/with-skeleton-attribute.js +109 -1
- package/src/molecules/gv-card-full.js +209 -1
- package/src/molecules/gv-card-list.js +101 -1
- package/src/molecules/gv-card.js +130 -1
- package/src/molecules/gv-category-list.js +56 -1
- package/src/molecules/gv-category.js +163 -1
- package/src/molecules/gv-code.js +334 -1
- package/src/molecules/gv-confirm.js +175 -1
- package/src/molecules/gv-cron-editor.js +685 -1
- package/src/molecules/gv-dropdown-menu.js +108 -1
- package/src/molecules/gv-expandable.js +116 -1
- package/src/molecules/gv-expression-language.js +263 -1
- package/src/molecules/gv-identity-picture.js +139 -1
- package/src/molecules/gv-list.js +214 -1
- package/src/molecules/gv-metrics.js +147 -1
- package/src/molecules/gv-modal.js +203 -1
- package/src/molecules/gv-nav.js +180 -1
- package/src/molecules/gv-option.js +230 -1
- package/src/molecules/gv-plans.js +400 -1
- package/src/molecules/gv-popover.js +323 -1
- package/src/molecules/gv-promote.js +203 -1
- package/src/molecules/gv-rating-list.js +341 -1
- package/src/molecules/gv-rating.js +234 -1
- package/src/molecules/gv-row-expandable.js +42 -1
- package/src/molecules/gv-row.js +205 -1
- package/src/molecules/gv-stats.js +110 -1
- package/src/molecules/gv-stepper.js +274 -1
- package/src/molecules/gv-table.js +644 -1
- package/src/molecules/gv-tree.js +238 -1
- package/src/organisms/gv-documentation.js +205 -1
- package/src/organisms/gv-header.js +276 -1
- package/src/organisms/gv-http-client.js +258 -1
- package/src/organisms/gv-menu.js +258 -1
- package/src/organisms/gv-newsletter-subscription.js +258 -1
- package/src/organisms/gv-pagination.js +179 -1
- package/src/organisms/gv-properties.js +860 -1
- package/src/organisms/gv-resizable-views.js +371 -1
- package/src/organisms/gv-resources.js +496 -1
- package/src/organisms/gv-schema-form-array.js +237 -1
- package/src/organisms/gv-schema-form-control-object.js +141 -1
- package/src/organisms/gv-schema-form-control.js +419 -1
- package/src/organisms/gv-schema-form.js +700 -1
- package/src/organisms/gv-tabs.js +201 -1
- package/src/organisms/gv-user-menu.js +298 -1
- package/src/organisms/gv-vertical-menu.js +119 -1
- package/src/policy-studio/gv-flow-step.js +443 -1
- package/src/policy-studio/gv-flow.js +595 -1
- package/src/policy-studio/gv-policy-studio-menu.js +689 -1
- package/src/policy-studio/gv-policy-studio.js +1712 -1
- package/src/styles/empty.js +35 -1
- package/src/styles/input.js +262 -1
- package/src/styles/link.js +31 -1
- package/src/styles/shapes.js +17 -1
- package/src/styles/skeleton.js +52 -1
- package/src/styles/zoom.js +39 -1
- package/src/theme/gv-theme.js +197 -1
- package/wc/gv-autocomplete.js +1 -1
- package/wc/gv-button.js +1 -1
- package/wc/gv-card-full.js +1 -1
- package/wc/gv-card-list.js +1 -1
- package/wc/gv-card.js +1 -1
- package/wc/gv-category-list.js +1 -1
- package/wc/gv-category.js +1 -1
- package/wc/gv-chart-bar.js +1 -1
- package/wc/gv-chart-gauge.js +1 -1
- package/wc/gv-chart-histogram.js +1 -1
- package/wc/gv-chart-line.js +1 -1
- package/wc/gv-chart-map.js +1 -1
- package/wc/gv-chart-pie.js +1 -1
- package/wc/gv-checkbox.js +1 -1
- package/wc/gv-code.js +1 -1
- package/wc/gv-confirm.js +1 -1
- package/wc/gv-cron-editor.js +1 -1
- package/wc/gv-date-picker-calendar.js +1 -1
- package/wc/gv-date-picker-cell.js +1 -1
- package/wc/gv-date-picker.js +1 -1
- package/wc/gv-documentation.js +1 -1
- package/wc/gv-dropdown-menu.js +1 -1
- package/wc/gv-expandable.js +1 -1
- package/wc/gv-expression-language.js +1 -1
- package/wc/gv-file-upload.js +1 -1
- package/wc/gv-flow-step.js +1 -1
- package/wc/gv-flow.js +1 -1
- package/wc/gv-header.js +1 -1
- package/wc/gv-http-client.js +1 -1
- package/wc/gv-icon.js +1 -1
- package/wc/gv-identity-picture.js +1 -1
- package/wc/gv-image.js +1 -1
- package/wc/gv-input-message.js +1 -1
- package/wc/gv-input.js +1 -1
- package/wc/gv-link.js +1 -1
- package/wc/gv-list.js +1 -1
- package/wc/gv-menu.js +1 -1
- package/wc/gv-message.js +1 -1
- package/wc/gv-metric.js +1 -1
- package/wc/gv-metrics.js +1 -1
- package/wc/gv-modal.js +1 -1
- package/wc/gv-nav.js +1 -1
- package/wc/gv-newsletter-subscription.js +1 -1
- package/wc/gv-option.js +1 -1
- package/wc/gv-pagination.js +1 -1
- package/wc/gv-plans.js +1 -1
- package/wc/gv-policy-studio-menu.js +1 -1
- package/wc/gv-policy-studio.js +1 -1
- package/wc/gv-popover.js +1 -1
- package/wc/gv-promote.js +1 -1
- package/wc/gv-properties.js +1 -1
- package/wc/gv-rating-list.js +1 -1
- package/wc/gv-rating.js +1 -1
- package/wc/gv-relative-time.js +1 -1
- package/wc/gv-resizable-views.js +1 -1
- package/wc/gv-resources.js +1 -1
- package/wc/gv-row-expandable.js +1 -1
- package/wc/gv-row.js +1 -1
- package/wc/gv-schema-form-array.js +1 -1
- package/wc/gv-schema-form-control-object.js +1 -1
- package/wc/gv-schema-form-control.js +1 -1
- package/wc/gv-schema-form.js +1 -1
- package/wc/gv-select-native.js +1 -1
- package/wc/gv-select.js +1 -1
- package/wc/gv-spinner.js +1 -1
- package/wc/gv-state.js +1 -1
- package/wc/gv-stats.js +1 -1
- package/wc/gv-stepper.js +1 -1
- package/wc/gv-switch.js +1 -1
- package/wc/gv-table.js +1 -1
- package/wc/gv-tabs.js +1 -1
- package/wc/gv-tag.js +1 -1
- package/wc/gv-text.js +1 -1
- package/wc/gv-theme.js +1 -1
- package/wc/gv-tree.js +1 -1
- package/wc/gv-user-menu.js +1 -1
- package/wc/gv-vertical-menu.js +1 -1
package/src/organisms/gv-menu.js
CHANGED
|
@@ -1 +1,258 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2015 The Gravitee team (http://gravitee.io)
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { LitElement, html, css } from 'lit';
|
|
17
|
+
import '../molecules/gv-nav';
|
|
18
|
+
import { isSameRoutes } from '../lib/utils';
|
|
19
|
+
import { classMap } from 'lit/directives/class-map';
|
|
20
|
+
import { withResizeObserver } from '../mixins/with-resize-observer';
|
|
21
|
+
/**
|
|
22
|
+
* A menu
|
|
23
|
+
*
|
|
24
|
+
* ## Details
|
|
25
|
+
* * has @theme facet
|
|
26
|
+
*
|
|
27
|
+
* @fires gv-link:click - Custom event when link click
|
|
28
|
+
*
|
|
29
|
+
* @slot top - The content on top of menu
|
|
30
|
+
* @slot right - The content at right
|
|
31
|
+
* @slot right-transition - The content at right with transition
|
|
32
|
+
*
|
|
33
|
+
* @attr {Array} routes - definition of routes [{active: Boolean, icon: String, path: String, title: Promise<String>]
|
|
34
|
+
* @cssprop {Color} [--gv-menu--c=var(--gv-theme-font-color-light, #ffffff)] - Color
|
|
35
|
+
* @cssprop {Color} [--gv-menu--bgc=var(--gv-theme-color-dark, #28444f)] - Background color.
|
|
36
|
+
* @cssprop {Color} [--gv-menu-link-active--bdc=var(--gv-theme-color-light, #86c3d0)] - Border bottom color of active link.
|
|
37
|
+
* @cssprop {String} [--gv-menu-link-active--bds=solid] - Border bottom style of active link.
|
|
38
|
+
* @cssprop {Length} [--gv-menu-link-active--bdw=0 0 3px 0] - Border bottom width of active link.
|
|
39
|
+
* @cssprop {Color} [--gv-menu-link-active--bgc=transparent] - Active background color
|
|
40
|
+
* @cssprop {Color} [--gv-menu-link--bgc=transparent] - Background color
|
|
41
|
+
* @cssprop {Length} [--gv-menu-link-a--pv=0px] - Link vertical padding
|
|
42
|
+
*/
|
|
43
|
+
export class GvMenu extends withResizeObserver(LitElement) {
|
|
44
|
+
static get properties() {
|
|
45
|
+
return {
|
|
46
|
+
/** @required **/
|
|
47
|
+
routes: { type: Array },
|
|
48
|
+
sticky: { type: Boolean, reflect: true },
|
|
49
|
+
_small: { type: Boolean, attribute: false },
|
|
50
|
+
_routes: { type: Array, attribute: false },
|
|
51
|
+
_hasHeader: { type: Boolean, attribute: false },
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
static get styles() {
|
|
55
|
+
return [
|
|
56
|
+
// language=css
|
|
57
|
+
css `
|
|
58
|
+
:host {
|
|
59
|
+
--gv-link--c: var(--gv-menu--c, var(--gv-theme-font-color-light, #ffffff));
|
|
60
|
+
--gv-link-active--c: var(--gv-menu--c, var(--gv-theme-font-color-light, #ffffff));
|
|
61
|
+
--gv-link--bgc: var(--gv-menu-link--bgc, transparent);
|
|
62
|
+
--gv-link-active--bgc: var(--gv-menu-link-active--bgc, transparent);
|
|
63
|
+
--gv-link-active--bdc: var(--gv-menu-link-active--bdc, var(--gv-theme-color-light, #86c3d0));
|
|
64
|
+
--gv-link-active--bds: var(--gv-menu-link-active--bds, solid);
|
|
65
|
+
--gv-link-active--bdw: var(--gv-menu-link-active--bdw, 0 0 3px 0);
|
|
66
|
+
--pr: var(--gv-theme-layout--pr, 4rem);
|
|
67
|
+
--pl: var(--gv-theme-layout--pl, 4rem);
|
|
68
|
+
box-sizing: border-box;
|
|
69
|
+
display: block;
|
|
70
|
+
font-size: var(--gv-theme-font-size-s, 12px);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
:host([sticky]) gv-nav {
|
|
74
|
+
line-height: 14px;
|
|
75
|
+
--gv-link-icon--s: 20px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
:host([sticky]) .has-header gv-nav {
|
|
79
|
+
line-height: 34px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:host([sticky]) ::slotted([slot='top']) {
|
|
83
|
+
transition: height 250ms ease-in-out;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:host([w-lt-1024]) {
|
|
87
|
+
--pr: 5px;
|
|
88
|
+
--pl: 5px;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
:host([w-lt-768]) .nav-container {
|
|
92
|
+
width: 100%;
|
|
93
|
+
padding-left: var(--pl);
|
|
94
|
+
--gv-link-a--pv: var(--gv-menu-link-a--pv, 0px);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
:host([w-lt-580]) .nav-container {
|
|
98
|
+
flex: auto;
|
|
99
|
+
padding-left: 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
:host([w-lt-580]) gv-nav {
|
|
103
|
+
flex: auto;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
:host([w-lt-580]) .right {
|
|
107
|
+
flex: auto;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
:host([w-lt-380]) .nav-container {
|
|
111
|
+
display: flex;
|
|
112
|
+
flex-direction: column-reverse;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
:host([w-lt-380]) gv-nav {
|
|
116
|
+
align-self: flex-start;
|
|
117
|
+
flex: 1;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
:host([w-lt-380]) .right {
|
|
121
|
+
align-self: flex-end;
|
|
122
|
+
flex: 1;
|
|
123
|
+
width: 100%;
|
|
124
|
+
padding-right: 0;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
gv-nav {
|
|
128
|
+
display: table-cell;
|
|
129
|
+
line-height: 50px;
|
|
130
|
+
vertical-align: middle;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.nav-container {
|
|
134
|
+
display: grid;
|
|
135
|
+
grid-template-columns: auto auto;
|
|
136
|
+
background-color: var(--gv-menu--bgc, var(--gv-theme-color-dark, #28444f));
|
|
137
|
+
color: var(--gv-menu--c, var(--gv-theme-font-color-light, #ffffff));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.has-header .nav-container {
|
|
141
|
+
width: calc(100% - 10rem);
|
|
142
|
+
padding-left: 10rem;
|
|
143
|
+
--gv-link-a--pv: 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
:host([sticky]) .has-header .nav-container {
|
|
147
|
+
width: calc(100% - 5rem);
|
|
148
|
+
padding-left: 5rem;
|
|
149
|
+
transition: all 250ms ease-in-out;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.right {
|
|
153
|
+
display: flex;
|
|
154
|
+
padding-right: var(--pr);
|
|
155
|
+
justify-content: center;
|
|
156
|
+
flex-direction: column;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
gv-nav {
|
|
160
|
+
padding-left: var(--pl);
|
|
161
|
+
transition: width 250ms ease-in-out;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
slot[name='right-transition'],
|
|
165
|
+
slot[name='right'] {
|
|
166
|
+
display: flex;
|
|
167
|
+
justify-content: flex-end;
|
|
168
|
+
width: 100%;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.right ::slotted([slot='right']),
|
|
172
|
+
.right ::slotted([slot='right-transition']) {
|
|
173
|
+
align-self: center;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.right ::slotted([slot='right-transition']) {
|
|
177
|
+
transition: width 250ms ease 250ms;
|
|
178
|
+
width: 70%;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.right:focus-within ::slotted([slot='right-transition']) {
|
|
182
|
+
animation: slide 250ms 250ms;
|
|
183
|
+
transition: width 250ms ease-in-out 250ms;
|
|
184
|
+
width: 100%;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.right ::slotted([slot='right']) {
|
|
188
|
+
--gv-button--p: 7px 16px;
|
|
189
|
+
--gv-button--fz: 15px;
|
|
190
|
+
}
|
|
191
|
+
`,
|
|
192
|
+
];
|
|
193
|
+
}
|
|
194
|
+
constructor() {
|
|
195
|
+
super();
|
|
196
|
+
/** @protected */
|
|
197
|
+
this._routes = [];
|
|
198
|
+
this.sticky = false;
|
|
199
|
+
this.breakpoints = {
|
|
200
|
+
// ceiled width with 275px tiles and 1rem (16px) gap
|
|
201
|
+
width: [380, 580, 768, 1024],
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
set routes(candidate) {
|
|
205
|
+
if (candidate) {
|
|
206
|
+
Promise.resolve(candidate).then((candidates) => {
|
|
207
|
+
if (candidates) {
|
|
208
|
+
Promise.all(candidates).then((futureRoutes) => {
|
|
209
|
+
if (!isSameRoutes(this._routes, futureRoutes)) {
|
|
210
|
+
this._routes = futureRoutes;
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this._routes = [];
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
this._routes = [];
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
onResize({ width }) {
|
|
224
|
+
if (width <= 1024) {
|
|
225
|
+
this._small = true;
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
this._small = false;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
render() {
|
|
232
|
+
return html `
|
|
233
|
+
<div class="${classMap({ 'has-header': this._hasHeader })}">
|
|
234
|
+
<slot name="top"></slot>
|
|
235
|
+
<div class="nav-container">
|
|
236
|
+
<gv-nav .routes="${this._routes}" ?small="${this._small}"></gv-nav>
|
|
237
|
+
<div class="right"><slot name="right-transition"></slot><slot name="right"></slot></div>
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
`;
|
|
241
|
+
}
|
|
242
|
+
updated(changedProperties) {
|
|
243
|
+
super.updated(changedProperties);
|
|
244
|
+
let _header = false;
|
|
245
|
+
for (const node of this.childNodes) {
|
|
246
|
+
if (node.nodeType === 1) {
|
|
247
|
+
const child = node.nodeName.toLowerCase() === 'gv-header' ? node : node.querySelector('gv-header');
|
|
248
|
+
if (child) {
|
|
249
|
+
child.sticky = this.sticky;
|
|
250
|
+
_header = true;
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
this._hasHeader = _header;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
window.customElements.define('gv-menu', GvMenu);
|
|
@@ -1 +1,258 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2015 The Gravitee team (http://gravitee.io)
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { css, html, LitElement } from 'lit';
|
|
17
|
+
import { dispatchCustomEvent } from '../lib/events';
|
|
18
|
+
/**
|
|
19
|
+
* The newsletter subscription page
|
|
20
|
+
*
|
|
21
|
+
* @fires gv-newsletter-subscription:subscribe - Custom event when link click
|
|
22
|
+
* @fires gv-newsletter-subscription:skip - Custom event when link click
|
|
23
|
+
*
|
|
24
|
+
* @attr {String} title - The title of newsletter subscription container
|
|
25
|
+
* @attr {String} header - The header of newsletter subscription container
|
|
26
|
+
* @attr {String} placeholder - The placeholder used for the email input
|
|
27
|
+
* @attr {String} subscribeLabel - The text of the subscribe button
|
|
28
|
+
* @attr {String} skipLabel - The text of the skip button
|
|
29
|
+
* @attr {Array} taglines - The taglines to promote the newsletter subscription
|
|
30
|
+
* @attr {String} email - The email value
|
|
31
|
+
* @attr {Boolean} disabled - The disabled state of email input
|
|
32
|
+
* @attr {String} githubUrl - The url to github page
|
|
33
|
+
* @attr {String} twitterUrl - The url to twitter page
|
|
34
|
+
* @attr {String} linkedinUrl - The url to linkedin page
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
export class GvNewsletterSubscription extends LitElement {
|
|
38
|
+
static get properties() {
|
|
39
|
+
return {
|
|
40
|
+
title: { type: String },
|
|
41
|
+
header: { type: String },
|
|
42
|
+
placeholder: { type: String },
|
|
43
|
+
subscribeLabel: { type: String, attribute: 'subscribe-label' },
|
|
44
|
+
skipLabel: { type: String, attribute: 'skip-label' },
|
|
45
|
+
taglines: { type: Array },
|
|
46
|
+
email: { type: String },
|
|
47
|
+
disabled: { type: Boolean },
|
|
48
|
+
githubUrl: { type: String, attribute: 'github-url' },
|
|
49
|
+
twitterUrl: { type: String, attribute: 'twitter-url' },
|
|
50
|
+
linkedinUrl: { type: String, attribute: 'linkedin-url' },
|
|
51
|
+
_invalid: { type: Boolean, attribute: false },
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
static get styles() {
|
|
55
|
+
return [
|
|
56
|
+
// language=css
|
|
57
|
+
css `
|
|
58
|
+
:host {
|
|
59
|
+
box-sizing: border-box;
|
|
60
|
+
margin: 0.2rem;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.newsletter-container {
|
|
64
|
+
display: flex;
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
align-items: center;
|
|
67
|
+
justify-content: space-between;
|
|
68
|
+
max-width: 680px;
|
|
69
|
+
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
|
|
70
|
+
padding: 25px 20px 5px 20px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.newsletter__header {
|
|
74
|
+
text-transform: uppercase;
|
|
75
|
+
font-style: oblique;
|
|
76
|
+
text-align: center;
|
|
77
|
+
font-size: 16px;
|
|
78
|
+
font-weight: bold;
|
|
79
|
+
padding: 5px 35px;
|
|
80
|
+
color: var(--gv-theme-neutral-color-lightest, #ffffff);
|
|
81
|
+
background-color: var(--gv-theme-color-light, #86c3d0);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.newsletter__title {
|
|
85
|
+
display: flex;
|
|
86
|
+
flex-direction: column;
|
|
87
|
+
align-items: center;
|
|
88
|
+
font-size: 20px;
|
|
89
|
+
text-transform: uppercase;
|
|
90
|
+
padding: 20px;
|
|
91
|
+
color: var(--gv-theme-color-light, #86c3d0);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.newsletter__title-highlight {
|
|
95
|
+
font-size: 30px;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.newsletter__email {
|
|
99
|
+
display: flex;
|
|
100
|
+
flex-direction: column;
|
|
101
|
+
width: 50%;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.newsletter__taglines {
|
|
105
|
+
display: flex;
|
|
106
|
+
flex-direction: row;
|
|
107
|
+
justify-content: space-between;
|
|
108
|
+
align-items: center;
|
|
109
|
+
text-align: center;
|
|
110
|
+
text-transform: uppercase;
|
|
111
|
+
font-size: 14px;
|
|
112
|
+
height: 20%;
|
|
113
|
+
margin-top: 20px;
|
|
114
|
+
padding: 10px 0;
|
|
115
|
+
color: var(--gv-theme-color-darker, #383e3f);
|
|
116
|
+
border-bottom: solid 1px var(--gv-theme-color-darker, #383e3f);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.newsletter__tagline {
|
|
120
|
+
display: flex;
|
|
121
|
+
flex-basis: 100%;
|
|
122
|
+
flex-direction: column;
|
|
123
|
+
justify-content: center;
|
|
124
|
+
align-items: center;
|
|
125
|
+
height: 100%;
|
|
126
|
+
font-weight: bold;
|
|
127
|
+
padding: 0 15px;
|
|
128
|
+
border-right: solid 1px var(--gv-theme-color-darker, #383e3f);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.newsletter__tagline.last {
|
|
132
|
+
border-right: none;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.newsletter__tagline-text {
|
|
136
|
+
width: 100%;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.newsletter__skip {
|
|
140
|
+
margin-top: 20px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.social {
|
|
144
|
+
width: 100%;
|
|
145
|
+
display: flex;
|
|
146
|
+
flex-direction: row;
|
|
147
|
+
justify-content: flex-end;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.social-link {
|
|
151
|
+
--gv-icon--c: var(--gv-theme-color-light, #86c3d0);
|
|
152
|
+
--gv-icon--s: 32px;
|
|
153
|
+
}
|
|
154
|
+
`,
|
|
155
|
+
];
|
|
156
|
+
}
|
|
157
|
+
constructor() {
|
|
158
|
+
super();
|
|
159
|
+
this.header = 'Customers process over 1 billion requests through the gravitee.io gateway in just one week';
|
|
160
|
+
this.title = 'Community of api masters';
|
|
161
|
+
this.placeholder = 'Enter your email';
|
|
162
|
+
this.subscribeLabel = 'Become an API master now';
|
|
163
|
+
this.taglines = ['New release monthly updates', 'Free trial of Gravitee.IO enterprise', 'Share your experiences with other members'];
|
|
164
|
+
this.skipLabel = 'Skip';
|
|
165
|
+
this.email = '';
|
|
166
|
+
this.disabled = false;
|
|
167
|
+
this._invalid = true;
|
|
168
|
+
this.githubUrl = 'https://github.com/gravitee-io';
|
|
169
|
+
this.twitterUrl = 'https://twitter.com/GraviteeIO';
|
|
170
|
+
this.linkedinUrl = 'https://www.linkedin.com/company/gravitee-io/';
|
|
171
|
+
}
|
|
172
|
+
render() {
|
|
173
|
+
return html `
|
|
174
|
+
<div class="newsletter-container">
|
|
175
|
+
<div class="newsletter__header">
|
|
176
|
+
${this.header}
|
|
177
|
+
</div>
|
|
178
|
+
<div class="newsletter__title">
|
|
179
|
+
<span>Join the</span>
|
|
180
|
+
<span class="newsletter__title-highlight">${this.title}</span>
|
|
181
|
+
<span>Today</span>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="newsletter__email">
|
|
184
|
+
<gv-input
|
|
185
|
+
id="email"
|
|
186
|
+
name="email"
|
|
187
|
+
@gv-input:submit="${this._onSubscribe}"
|
|
188
|
+
@gv-input:input="${this._onInputChange}"
|
|
189
|
+
type="email"
|
|
190
|
+
required
|
|
191
|
+
.value="${this.email}"
|
|
192
|
+
.disabled=${this.disabled}
|
|
193
|
+
placeholder="${this.placeholder}"
|
|
194
|
+
></gv-input>
|
|
195
|
+
<gv-button @click="${this._onSubscribe}"
|
|
196
|
+
id="email-submit"
|
|
197
|
+
provider="graviteeio_am"
|
|
198
|
+
icon-right="navigation:angle-right"
|
|
199
|
+
.disabled=${!this.disabled && this._invalid}>
|
|
200
|
+
${this.subscribeLabel}
|
|
201
|
+
</gv-button>
|
|
202
|
+
</div>
|
|
203
|
+
${this.taglines.length > 0
|
|
204
|
+
? html ` <div class="newsletter__taglines">
|
|
205
|
+
${this.taglines.map((item, i, arr) => html `
|
|
206
|
+
<div class="newsletter__tagline ${i === arr.length - 1 ? 'last' : ''}">
|
|
207
|
+
<div class="newsletter__tagline-text">${item}</div>
|
|
208
|
+
</div>
|
|
209
|
+
`)}
|
|
210
|
+
</div>`
|
|
211
|
+
: ''}
|
|
212
|
+
<div class="newsletter__skip">
|
|
213
|
+
<gv-button @click="${this._onSkip}"
|
|
214
|
+
provider="graviteeio_am"
|
|
215
|
+
icon-right="navigation:angle-right"
|
|
216
|
+
small
|
|
217
|
+
outlined>
|
|
218
|
+
${this.skipLabel}
|
|
219
|
+
</gv-button>
|
|
220
|
+
</div>
|
|
221
|
+
<div class="social">
|
|
222
|
+
<gv-button class="social-link"
|
|
223
|
+
link
|
|
224
|
+
icon="thirdparty:github"
|
|
225
|
+
.href="${this.githubUrl}"
|
|
226
|
+
@gv-button:click="${this._navigateSocial.bind(this, this.githubUrl)}">
|
|
227
|
+
</gv-button>
|
|
228
|
+
<gv-button class="social-link"
|
|
229
|
+
link icon="thirdparty:twitter"
|
|
230
|
+
.href="${this.twitterUrl}"
|
|
231
|
+
@gv-button:click="${this._navigateSocial.bind(this, this.twitterUrl)}">
|
|
232
|
+
</gv-button>
|
|
233
|
+
<gv-button class="social-link"
|
|
234
|
+
link
|
|
235
|
+
icon="thirdparty:linkedin"
|
|
236
|
+
.href="${this.linkedinUrl}"
|
|
237
|
+
@gv-button:click="${this._navigateSocial.bind(this, this.linkedinUrl)}">
|
|
238
|
+
</gv-button>
|
|
239
|
+
</gv-link>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
`;
|
|
243
|
+
}
|
|
244
|
+
_onSubscribe() {
|
|
245
|
+
dispatchCustomEvent(this, 'subscribe', this.email);
|
|
246
|
+
}
|
|
247
|
+
_onSkip() {
|
|
248
|
+
dispatchCustomEvent(this, 'skip');
|
|
249
|
+
}
|
|
250
|
+
_navigateSocial(url) {
|
|
251
|
+
window.open(url, '_blank');
|
|
252
|
+
}
|
|
253
|
+
_onInputChange(e) {
|
|
254
|
+
this._invalid = e.target.invalid;
|
|
255
|
+
this.email = e.detail;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
window.customElements.define('gv-newsletter-subscription', GvNewsletterSubscription);
|