@gravitee/ui-components 3.25.3-typescript-fdacf14 → 3.25.3-typescript-493e1dd
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/molecules/gv-code.js
CHANGED
|
@@ -1 +1,334 @@
|
|
|
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 } from 'lit';
|
|
17
|
+
import { EditorView, basicSetup } from '@codemirror/basic-setup';
|
|
18
|
+
import { EditorState, Compartment } from '@codemirror/state';
|
|
19
|
+
import { autocompletion } from '@codemirror/autocomplete';
|
|
20
|
+
import { json } from '@codemirror/lang-json';
|
|
21
|
+
import { languages } from '@codemirror/language-data';
|
|
22
|
+
import { placeholder } from '@codemirror/view';
|
|
23
|
+
import { shapeClipboard } from '../styles/shapes';
|
|
24
|
+
import { dispatchCustomEvent } from '../lib/events';
|
|
25
|
+
import { uuid } from '../lib/utils';
|
|
26
|
+
import { classMap } from 'lit/directives/class-map';
|
|
27
|
+
import { GvInput } from '../atoms/gv-input';
|
|
28
|
+
import { skeleton } from '../styles/skeleton';
|
|
29
|
+
import { empty } from '../styles/empty';
|
|
30
|
+
import { input } from '../styles/input';
|
|
31
|
+
/**
|
|
32
|
+
* Code component
|
|
33
|
+
*
|
|
34
|
+
* ## Details
|
|
35
|
+
* * has @theme facet
|
|
36
|
+
*
|
|
37
|
+
* @fires gv-code:input - input events with the `value` on `detail`
|
|
38
|
+
* @fires gv-code:ready - event dispatch when component is ready
|
|
39
|
+
* @fires gv-code:clipboard-copy - event dispatch when component the `value` has been copied to clipboard
|
|
40
|
+
*
|
|
41
|
+
* @attr {String} label - code language
|
|
42
|
+
* @attr {String} value - code content to be highlighted
|
|
43
|
+
* @attr {options} Object - options based on codemirror
|
|
44
|
+
* @attr {String} placeholder - an example value to display in the input when empty
|
|
45
|
+
* @attr {Number} rows - number of rows of the text element
|
|
46
|
+
* @attr {Boolean} large - for a large input (only if the field has one row)
|
|
47
|
+
* @attr {Boolean} medium - for a medium input (only if the field has one row) (Default)
|
|
48
|
+
* @attr {Boolean} small - for a small input (only if the field has one row)
|
|
49
|
+
*
|
|
50
|
+
* @attr {Boolean} [clipboard=false]- true if field has clipboard button
|
|
51
|
+
* @attr {Boolean} [autofocus=false] - true to put the focus on the input
|
|
52
|
+
* @attr {Boolean} [readonly=false] - true if field is readonly mode
|
|
53
|
+
*/
|
|
54
|
+
export class GvCode extends GvInput {
|
|
55
|
+
static get properties() {
|
|
56
|
+
return {
|
|
57
|
+
...super.properties,
|
|
58
|
+
options: { type: Object },
|
|
59
|
+
rows: { type: Number },
|
|
60
|
+
_error: { type: String, attribute: false },
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
constructor() {
|
|
64
|
+
super();
|
|
65
|
+
this._id = `gv-code-${uuid()}`;
|
|
66
|
+
this.value = '';
|
|
67
|
+
this.readonly = false;
|
|
68
|
+
this.autofocus = false;
|
|
69
|
+
this.clipboard = false;
|
|
70
|
+
this._clipboardIcon = shapeClipboard;
|
|
71
|
+
this.languageCompartment = new Compartment();
|
|
72
|
+
this.readonlyCompartment = new Compartment();
|
|
73
|
+
this.placeholderCompartment = new Compartment();
|
|
74
|
+
}
|
|
75
|
+
render() {
|
|
76
|
+
const classes = {
|
|
77
|
+
box: true,
|
|
78
|
+
'box-invisible': this.skeleton,
|
|
79
|
+
large: this.large,
|
|
80
|
+
medium: this.medium || (!this.large && !this.small),
|
|
81
|
+
small: this.small,
|
|
82
|
+
copied: this.hasClipboard && this._copied,
|
|
83
|
+
};
|
|
84
|
+
const inputClasses = {
|
|
85
|
+
content: true,
|
|
86
|
+
code: !this.hasInputStyle,
|
|
87
|
+
input: this.hasInputStyle,
|
|
88
|
+
};
|
|
89
|
+
return html `
|
|
90
|
+
<div class="${classMap(classes)}">
|
|
91
|
+
${this.label ? html `<label for="code">${this.label}</label>` : ''}
|
|
92
|
+
<div id="${this._id}" class="${classMap(inputClasses)}">
|
|
93
|
+
<!-- No format please -->
|
|
94
|
+
${this.renderIcon()}
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
${this.description != null ? html `<div class="description" .innerHTML="${this.description}"></div>` : ''}
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
bindInputEvents() {
|
|
101
|
+
dispatchCustomEvent(this, 'ready', { currentTarget: this });
|
|
102
|
+
}
|
|
103
|
+
get hasInputStyle() {
|
|
104
|
+
return this.rows === 1;
|
|
105
|
+
}
|
|
106
|
+
_autocomplete(completionContext) {
|
|
107
|
+
const { handler, match } = this.findBestAutocompleteHandler(completionContext);
|
|
108
|
+
return handler.run.call(this, completionContext, match);
|
|
109
|
+
}
|
|
110
|
+
findBestAutocompleteHandler(completionContext) {
|
|
111
|
+
return { handler: this.defaultCompletionHandler, match: true };
|
|
112
|
+
}
|
|
113
|
+
get defaultCompletionHandler() {
|
|
114
|
+
return {
|
|
115
|
+
run(completionContext) {
|
|
116
|
+
const language = completionContext.state.languageDataAt('autocomplete', completionContext.pos);
|
|
117
|
+
if (language.length > 0) {
|
|
118
|
+
return language[0](completionContext);
|
|
119
|
+
}
|
|
120
|
+
return { from: completionContext.pos, options: [] };
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
_getExtensions() {
|
|
125
|
+
return [
|
|
126
|
+
basicSetup,
|
|
127
|
+
GvCode.codemirrorTheme,
|
|
128
|
+
this.languageCompartment.of(json()),
|
|
129
|
+
this.placeholderCompartment.of(placeholder(this.placeholder || '')),
|
|
130
|
+
EditorState.transactionFilter.of((tr) => (this.hasInputStyle && tr.newDoc.lines > 1 ? [] : tr)),
|
|
131
|
+
this.readonlyCompartment.of(EditorView.editable.of(!this.readonly && !this.disabled)),
|
|
132
|
+
EditorView.updateListener.of((viewUpdate) => {
|
|
133
|
+
if (viewUpdate.docChanged) {
|
|
134
|
+
this.value = this._editorView.state.doc.toString();
|
|
135
|
+
dispatchCustomEvent(this, 'input', this.value);
|
|
136
|
+
}
|
|
137
|
+
}),
|
|
138
|
+
autocompletion({
|
|
139
|
+
activateOnTyping: true,
|
|
140
|
+
override: [this._autocomplete.bind(this)],
|
|
141
|
+
}),
|
|
142
|
+
...this.getExtensions(),
|
|
143
|
+
];
|
|
144
|
+
}
|
|
145
|
+
getExtensions() {
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
getInputElement() {
|
|
149
|
+
return this.shadowRoot.querySelector(`[id=${this._id}]`);
|
|
150
|
+
}
|
|
151
|
+
firstUpdated() {
|
|
152
|
+
super.firstUpdated();
|
|
153
|
+
this._editorState = EditorState.create({
|
|
154
|
+
doc: this.value,
|
|
155
|
+
extensions: this._getExtensions(),
|
|
156
|
+
});
|
|
157
|
+
const parent = this.getInputElement();
|
|
158
|
+
this._editorView = new EditorView({
|
|
159
|
+
root: this.shadowRoot,
|
|
160
|
+
parent,
|
|
161
|
+
state: this._editorState,
|
|
162
|
+
dispatch: (transaction) => {
|
|
163
|
+
try {
|
|
164
|
+
this._editorView.update([transaction]);
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
// Sometimes the default dispatch fn throws an NS_ERROR_FAILURE at runtime.
|
|
168
|
+
// It's so strange but with this catch everything is okay
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
parent.appendChild(this._editorView.dom);
|
|
173
|
+
}
|
|
174
|
+
async updated(properties) {
|
|
175
|
+
super.updated(properties);
|
|
176
|
+
if (properties.has('placeholder')) {
|
|
177
|
+
this._reflectPlaceholder();
|
|
178
|
+
}
|
|
179
|
+
if (properties.has('value')) {
|
|
180
|
+
this._reflectValue();
|
|
181
|
+
}
|
|
182
|
+
if (properties.has('readonly') || properties.has('disabled')) {
|
|
183
|
+
this._reflectReadonlyDisabled();
|
|
184
|
+
}
|
|
185
|
+
if (properties.has('options') && this.options) {
|
|
186
|
+
await this._reflectOptions();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
_reflectPlaceholder() {
|
|
190
|
+
this._editorView.dispatch({
|
|
191
|
+
effects: this.placeholderCompartment.reconfigure(placeholder(this.placeholder)),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
_reflectValue() {
|
|
195
|
+
const transaction = this._editorState.update({
|
|
196
|
+
changes: {
|
|
197
|
+
from: 0,
|
|
198
|
+
to: this._editorState.doc.length,
|
|
199
|
+
insert: this.value,
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
this._editorState = transaction.state;
|
|
203
|
+
}
|
|
204
|
+
_reflectReadonlyDisabled() {
|
|
205
|
+
this._editorView.dispatch({
|
|
206
|
+
effects: this.readonlyCompartment.reconfigure(EditorView.editable.of(!this.readonly && !this.disabled)),
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
static async findLanguage(mode) {
|
|
210
|
+
if (mode) {
|
|
211
|
+
const modeOnly = mode.split('/').pop();
|
|
212
|
+
if (modeOnly === 'asciidoc') {
|
|
213
|
+
const [{ asciidoc }, { StreamLanguage }] = await Promise.all([
|
|
214
|
+
import('codemirror-asciidoc/lib/asciidoc'),
|
|
215
|
+
import('@codemirror/stream-parser'),
|
|
216
|
+
]);
|
|
217
|
+
return {
|
|
218
|
+
name: 'asciidoc',
|
|
219
|
+
support: {
|
|
220
|
+
extension: StreamLanguage.define(asciidoc),
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
const language = languages.find((languageDescription) => {
|
|
226
|
+
return languageDescription.name.toUpperCase() === modeOnly.toUpperCase() || languageDescription.alias.includes(modeOnly);
|
|
227
|
+
});
|
|
228
|
+
if (language == null) {
|
|
229
|
+
console.warn(`Cannot find language ${mode}, please use language supported by CodeMirror 6`, languages.map((l) => l.name));
|
|
230
|
+
}
|
|
231
|
+
return language;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
async _reflectOptions() {
|
|
237
|
+
const language = await GvCode.findLanguage(this.options.mode);
|
|
238
|
+
if (language != null) {
|
|
239
|
+
if (language.support == null) {
|
|
240
|
+
await language.load();
|
|
241
|
+
}
|
|
242
|
+
this._editorView.dispatch({
|
|
243
|
+
effects: this.languageCompartment.reconfigure(language.support.extension),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
static get codemirrorTheme() {
|
|
248
|
+
return EditorView.theme({
|
|
249
|
+
'&.cm-editor.cm-focused': {
|
|
250
|
+
outline: 'none',
|
|
251
|
+
},
|
|
252
|
+
'.cm-gutters': {
|
|
253
|
+
backgroundColor: 'var(--gv-input-icon--bgc, var(--gv-theme-neutral-color, #f5f5f5))',
|
|
254
|
+
color: 'var(--gv-theme-font-color-dark, #262626)',
|
|
255
|
+
borderLeft: '5px solid',
|
|
256
|
+
borderColor: 'var(--gv-input--bdc, var(--gv-theme-neutral-color-dark, #d9d9d9))',
|
|
257
|
+
},
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
static get styles() {
|
|
261
|
+
return [
|
|
262
|
+
...super.styles,
|
|
263
|
+
skeleton,
|
|
264
|
+
empty,
|
|
265
|
+
input,
|
|
266
|
+
// language=CSS
|
|
267
|
+
css `
|
|
268
|
+
:host {
|
|
269
|
+
box-sizing: border-box;
|
|
270
|
+
display: block;
|
|
271
|
+
margin: 0 0.2rem 0.2rem 0.2rem;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.content {
|
|
275
|
+
position: relative;
|
|
276
|
+
border: var(--gv-input--bdw, 1px) var(--gv-input--bds, solid) var(--gv-input--bdc, var(--gv-theme-neutral-color-dark, #d9d9d9));
|
|
277
|
+
box-sizing: border-box;
|
|
278
|
+
border-radius: 4px;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.btn_copy {
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.box-icon {
|
|
285
|
+
bottom: -1px;
|
|
286
|
+
right: -1px;
|
|
287
|
+
z-index: 1;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.code .box-icon {
|
|
291
|
+
border-radius: 3px;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.code .cm-content,
|
|
295
|
+
.code .cm-gutters {
|
|
296
|
+
height: var(--input-medium--h);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.large .code .cm-content,
|
|
300
|
+
.large .code .cm-gutters {
|
|
301
|
+
height: var(--input-large--h);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.small .code .cm-content,
|
|
305
|
+
.small .code .cm-gutters {
|
|
306
|
+
height: var(--input-small--h);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/** Override Codemirror theme */
|
|
310
|
+
.input .cm-gutters {
|
|
311
|
+
display: none;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.input .cm-scroller {
|
|
315
|
+
overflow: hidden;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.input .cm-activeLine,
|
|
319
|
+
:host([readonly]) .cm-activeLine {
|
|
320
|
+
background-color: transparent;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.input .cm-content {
|
|
324
|
+
padding: 0;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
:host([invalid]) .cm-gutters {
|
|
328
|
+
border-color: var(--gv-theme-color-error, #da1a1b);
|
|
329
|
+
}
|
|
330
|
+
`,
|
|
331
|
+
];
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
window.customElements.define('gv-code', GvCode);
|
|
@@ -1 +1,175 @@
|
|
|
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 } from 'lit';
|
|
17
|
+
import '../atoms/gv-button';
|
|
18
|
+
import '../atoms/gv-icon';
|
|
19
|
+
import { i18n } from '../lib/i18n';
|
|
20
|
+
import { GvPopover } from './gv-popover';
|
|
21
|
+
import { dispatchCustomEvent } from '../lib/events';
|
|
22
|
+
/**
|
|
23
|
+
* Confirm component
|
|
24
|
+
*
|
|
25
|
+
* ## Details
|
|
26
|
+
* * has @theme facet
|
|
27
|
+
*
|
|
28
|
+
* @extends GvPopover
|
|
29
|
+
*
|
|
30
|
+
* @attr {String} event - the event that triggers the opening
|
|
31
|
+
* @attr {String} okLabel - the label of ok btn
|
|
32
|
+
* @attr {String} cancelLabel - the label of cancel btn
|
|
33
|
+
* @attr {String} icon - the icon before message
|
|
34
|
+
* @attr {String} message - the message
|
|
35
|
+
* @attr {Boolean} disabled - same as native button element `disabled` attribute
|
|
36
|
+
*
|
|
37
|
+
* @cssprop {Color} [--gv-confirm--bgc=var(--gv-theme-neutral-color-lighter, #fafafa)] - Background color
|
|
38
|
+
* @cssprop {Length} [--gv-confirm--maw=350px] - Max width
|
|
39
|
+
*/
|
|
40
|
+
export class GvConfirm extends GvPopover {
|
|
41
|
+
static get properties() {
|
|
42
|
+
return {
|
|
43
|
+
/**
|
|
44
|
+
* @default i18n: gv-confirm.cancel
|
|
45
|
+
*/
|
|
46
|
+
cancelLabel: { type: String },
|
|
47
|
+
/**
|
|
48
|
+
* @default i18n: gv-confirm.ok
|
|
49
|
+
*/
|
|
50
|
+
okLabel: { type: String },
|
|
51
|
+
message: { type: String },
|
|
52
|
+
icon: { type: String },
|
|
53
|
+
danger: { type: Boolean, reflect: true },
|
|
54
|
+
disabled: { type: Boolean },
|
|
55
|
+
_disabled: { type: Boolean },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
static get styles() {
|
|
59
|
+
return [
|
|
60
|
+
GvPopover.styles,
|
|
61
|
+
// language=CSS
|
|
62
|
+
css `
|
|
63
|
+
:host {
|
|
64
|
+
--gv-icon--s: 24px;
|
|
65
|
+
margin: 0.2rem;
|
|
66
|
+
box-sizing: border-box;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
:host([danger]) .message gv-icon {
|
|
70
|
+
--gv-icon--c: var(--gv-theme-color-danger, #ff5722);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.popover {
|
|
74
|
+
--bgc: var(--gv-confirm--bgc, var(--gv-theme-neutral-color-lighter, #fafafa));
|
|
75
|
+
--maw: var(--gv-confirm--maw, 350px);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.message {
|
|
79
|
+
display: flex;
|
|
80
|
+
align-items: center;
|
|
81
|
+
margin: 1rem 0.5rem;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.message gv-icon {
|
|
85
|
+
margin-right: 0.5rem;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.text {
|
|
89
|
+
text-align: center;
|
|
90
|
+
line-height: 24px;
|
|
91
|
+
width: 100%;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.actions {
|
|
95
|
+
text-align: right;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
::slotted(*) {
|
|
99
|
+
margin: 0;
|
|
100
|
+
width: 100%;
|
|
101
|
+
}
|
|
102
|
+
`,
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
constructor() {
|
|
106
|
+
super();
|
|
107
|
+
this.event = 'click';
|
|
108
|
+
this.arrow = true;
|
|
109
|
+
this.auto = true;
|
|
110
|
+
this.icon = 'code:info';
|
|
111
|
+
this.cancelLabel = i18n('gv-confirm.cancel');
|
|
112
|
+
this.okLabel = i18n('gv-confirm.ok');
|
|
113
|
+
}
|
|
114
|
+
connectedCallback() {
|
|
115
|
+
super.connectedCallback();
|
|
116
|
+
window.addEventListener('resize', this._closeHandler);
|
|
117
|
+
window.addEventListener('scroll', this._closeHandler);
|
|
118
|
+
}
|
|
119
|
+
disconnectedCallback() {
|
|
120
|
+
window.removeEventListener('resize', this._closeHandler);
|
|
121
|
+
window.removeEventListener('scroll', this._closeHandler);
|
|
122
|
+
super.disconnectedCallback();
|
|
123
|
+
}
|
|
124
|
+
_onCancel() {
|
|
125
|
+
this.close();
|
|
126
|
+
dispatchCustomEvent(this, 'cancel');
|
|
127
|
+
}
|
|
128
|
+
_onOk() {
|
|
129
|
+
this.close();
|
|
130
|
+
dispatchCustomEvent(this, 'ok');
|
|
131
|
+
}
|
|
132
|
+
_open(e) {
|
|
133
|
+
if (!this._disabled) {
|
|
134
|
+
super._open(e);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
renderContent() {
|
|
138
|
+
return html `
|
|
139
|
+
<div class="message">
|
|
140
|
+
${this.icon ? html `<gv-icon shape="${this.icon}"></gv-icon>` : ''}
|
|
141
|
+
<div class="text" .innerHTML="${this.message}"></div>
|
|
142
|
+
</div>
|
|
143
|
+
<div class="actions">
|
|
144
|
+
<gv-button primary small outlined @click="${this._onCancel}">${this.cancelLabel}</gv-button>
|
|
145
|
+
<gv-button primary small @click="${this._onOk}">${this.okLabel}</gv-button>
|
|
146
|
+
</div>
|
|
147
|
+
`;
|
|
148
|
+
}
|
|
149
|
+
firstUpdated(changedProperties) {
|
|
150
|
+
super.firstUpdated(changedProperties);
|
|
151
|
+
if (this.danger) {
|
|
152
|
+
this.shadowRoot.querySelectorAll('gv-button').forEach((btn) => btn.setAttribute('danger', ''));
|
|
153
|
+
}
|
|
154
|
+
this._disabled = this._calculateIsDisabled();
|
|
155
|
+
if (this.disabled) {
|
|
156
|
+
this._reflectDisabledOnSlot();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
_reflectDisabledOnSlot() {
|
|
160
|
+
const slot = this.shadowRoot.querySelector('slot');
|
|
161
|
+
const childNodes = slot.assignedNodes({ flatten: true });
|
|
162
|
+
childNodes.forEach((node) => {
|
|
163
|
+
node.disabled = true;
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
_calculateIsDisabled() {
|
|
167
|
+
const slot = this.shadowRoot.querySelector('slot');
|
|
168
|
+
const childNodes = slot.assignedNodes({ flatten: true });
|
|
169
|
+
const isSlotButtonDisabled = childNodes
|
|
170
|
+
.filter((node) => node.nodeType === Node.ELEMENT_NODE)
|
|
171
|
+
.some((node) => Boolean(node.getAttribute('disabled')) === true);
|
|
172
|
+
return this.disabled || isSlotButtonDisabled;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
window.customElements.define('gv-confirm', GvConfirm);
|