@gravitee/ui-components 3.25.2 → 3.25.3-typescript-5a46c7d
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 +13 -4
- package/src/atoms/gv-autocomplete.js +1 -437
- package/src/atoms/gv-button.js +1 -235
- package/src/atoms/gv-checkbox.js +1 -129
- package/src/atoms/gv-date-picker-calendar.js +1 -813
- package/src/atoms/gv-date-picker-cell.js +1 -166
- package/src/atoms/gv-date-picker.js +1 -532
- package/src/atoms/gv-file-upload.js +1 -257
- package/src/atoms/gv-icon.js +1 -82
- package/src/atoms/gv-image.js +1 -109
- package/src/atoms/gv-input-message.js +1 -59
- package/src/atoms/gv-input.js +1 -530
- package/src/atoms/gv-link.js +1 -132
- package/src/atoms/gv-message.js +1 -77
- package/src/atoms/gv-metric.js +1 -68
- package/src/atoms/gv-relative-time.js +1 -185
- package/src/atoms/gv-select-native.js +1 -269
- package/src/atoms/gv-select.js +1 -317
- package/src/atoms/gv-spinner.js +1 -36
- package/src/atoms/gv-state.js +1 -89
- package/src/atoms/gv-switch.js +1 -123
- package/src/atoms/gv-tag.js +1 -116
- package/src/atoms/gv-text.js +1 -107
- package/src/charts/gv-chart-bar.js +1 -107
- package/src/charts/gv-chart-gauge.js +1 -97
- package/src/charts/gv-chart-histogram.js +1 -91
- package/src/charts/gv-chart-line.js +1 -235
- package/src/charts/gv-chart-map.js +1 -114
- package/src/charts/gv-chart-pie.js +1 -95
- package/src/index.js +1 -78
- package/src/lib/cron-expression.js +1 -210
- package/src/lib/date.js +1 -53
- package/src/lib/events.js +1 -28
- package/src/lib/http-client-schema-form.js +1 -68
- package/src/lib/http.js +1 -238
- package/src/lib/i18n.js +1 -111
- package/src/lib/item.js +1 -119
- package/src/lib/properties.js +1 -224
- package/src/lib/schema-form.js +1 -43
- package/src/lib/studio.js +1 -94
- package/src/lib/style.js +1 -41
- package/src/lib/text-format.js +1 -76
- package/src/lib/theme.js +1 -66
- package/src/lib/utils.js +1 -110
- package/src/mixins/chart-element.js +1 -142
- package/src/mixins/input-element.js +1 -157
- package/src/mixins/item-resource.js +1 -122
- package/src/mixins/keyboard-element.js +1 -70
- package/src/mixins/update-after-browser.js +1 -33
- package/src/mixins/with-resize-observer.js +1 -78
- package/src/mixins/with-skeleton-attribute.js +1 -118
- package/src/molecules/gv-card-full.js +1 -97
- package/src/molecules/gv-card-list.js +1 -84
- package/src/molecules/gv-card.js +1 -59
- package/src/molecules/gv-category-list.js +1 -49
- package/src/molecules/gv-category.js +1 -90
- package/src/molecules/gv-code.js +1 -297
- package/src/molecules/gv-confirm.js +1 -158
- package/src/molecules/gv-cron-editor.js +1 -464
- package/src/molecules/gv-dropdown-menu.js +1 -84
- package/src/molecules/gv-expandable.js +1 -94
- package/src/molecules/gv-expression-language.js +1 -308
- package/src/molecules/gv-identity-picture.js +1 -125
- package/src/molecules/gv-list.js +1 -135
- package/src/molecules/gv-metrics.js +1 -150
- package/src/molecules/gv-modal.js +1 -146
- package/src/molecules/gv-nav.js +1 -170
- package/src/molecules/gv-option.js +1 -169
- package/src/molecules/gv-plans.js +1 -306
- package/src/molecules/gv-popover.js +1 -231
- package/src/molecules/gv-promote.js +1 -91
- package/src/molecules/gv-rating-list.js +1 -239
- package/src/molecules/gv-rating.js +1 -200
- package/src/molecules/gv-row-expandable.js +1 -39
- package/src/molecules/gv-row.js +1 -84
- package/src/molecules/gv-stats.js +1 -96
- package/src/molecules/gv-stepper.js +1 -144
- package/src/molecules/gv-table.js +1 -575
- package/src/molecules/gv-tree.js +1 -127
- package/src/organisms/gv-documentation.js +1 -132
- package/src/organisms/gv-header.js +1 -130
- package/src/organisms/gv-http-client.js +1 -139
- package/src/organisms/gv-menu.js +1 -142
- package/src/organisms/gv-newsletter-subscription.js +1 -130
- package/src/organisms/gv-pagination.js +1 -170
- package/src/organisms/gv-properties.js +1 -699
- package/src/organisms/gv-resizable-views.js +1 -178
- package/src/organisms/gv-resources.js +1 -428
- package/src/organisms/gv-schema-form-array.js +1 -140
- package/src/organisms/gv-schema-form-control-object.js +1 -140
- package/src/organisms/gv-schema-form-control.js +1 -416
- package/src/organisms/gv-schema-form.js +1 -646
- package/src/organisms/gv-tabs.js +1 -178
- package/src/organisms/gv-user-menu.js +1 -149
- package/src/organisms/gv-vertical-menu.js +1 -82
- package/src/policy-studio/gv-flow-step.js +1 -304
- package/src/policy-studio/gv-flow.js +1 -442
- package/src/policy-studio/gv-policy-studio-menu.js +1 -436
- package/src/policy-studio/gv-policy-studio.js +1 -1778
- package/src/styles/empty.js +1 -19
- package/src/styles/input.js +1 -19
- package/src/styles/link.js +1 -19
- package/src/styles/shapes.js +1 -18
- package/src/styles/skeleton.js +1 -19
- package/src/styles/zoom.js +1 -19
- package/src/theme/gv-theme.js +1 -164
- 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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gravitee/ui-components",
|
|
3
|
-
"version": "3.25.
|
|
3
|
+
"version": "3.25.3-typescript-5a46c7d",
|
|
4
4
|
"description": "Gravitee.io UI Components library, based on Web Components",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"check:i18n": "node tasks/check-i18n.js",
|
|
23
23
|
"danger": "danger ci",
|
|
24
24
|
"docs": "wca analyze src/** --outFile .docs/custom-elements.json && node tasks/generate-docs.js",
|
|
25
|
-
"generate:dist": "
|
|
25
|
+
"generate:dist": "npm run tsc && npm run rollup",
|
|
26
26
|
"generate:icons": "node tasks/generate-icons.js && npm run lint:fix",
|
|
27
27
|
"generate:theme": "node tasks/generate-theme.js && npm run lint:fix",
|
|
28
28
|
"lint": "eslint src stories tasks && npm run prettier",
|
|
@@ -35,13 +35,15 @@
|
|
|
35
35
|
"prettier": "prettier --check \"**/*.{js,html,css,json}\"",
|
|
36
36
|
"prettier:fix": "prettier --write \"**/*.{js,html,css,json}\"",
|
|
37
37
|
"release": "semantic-release",
|
|
38
|
+
"rollup": "rollup -c ",
|
|
38
39
|
"serve": "npm run docs && start-storybook -p 6006 --ci -s assets --modern",
|
|
39
40
|
"serve:prod": "npm run build && static -a 0.0.0.0 -p 8080 storybook-static --modern",
|
|
40
41
|
"size": "node tasks/size.js",
|
|
41
42
|
"size:dev": "nodemon -w src -x 'npm run generate:dist && npm run size'",
|
|
42
43
|
"test": "jest",
|
|
43
44
|
"test:coverage": "npm run test -- --collect-coverage",
|
|
44
|
-
"test:watch": "npm run test -- --watchAll"
|
|
45
|
+
"test:watch": "npm run test -- --watchAll",
|
|
46
|
+
"tsc": "tsc "
|
|
45
47
|
},
|
|
46
48
|
"lint-staged": {
|
|
47
49
|
"*": "npm run lint:license:fix",
|
|
@@ -73,6 +75,7 @@
|
|
|
73
75
|
"@commitlint/cli": "15.0.0",
|
|
74
76
|
"@commitlint/config-conventional": "15.0.0",
|
|
75
77
|
"@highcharts/map-collection": "1.1.4",
|
|
78
|
+
"@rollup/plugin-json": "^4.1.0",
|
|
76
79
|
"@semantic-release/changelog": "6.0.1",
|
|
77
80
|
"@semantic-release/git": "10.0.1",
|
|
78
81
|
"@storybook/addon-a11y": "6.4.9",
|
|
@@ -80,11 +83,11 @@
|
|
|
80
83
|
"@storybook/components": "6.4.9",
|
|
81
84
|
"@storybook/theming": "6.4.9",
|
|
82
85
|
"@storybook/web-components": "6.4.9",
|
|
86
|
+
"@web/rollup-plugin-copy": "^0.3.0",
|
|
83
87
|
"asciidoctor": "2.2.5",
|
|
84
88
|
"asciidoctor-highlight.js": "0.4.0",
|
|
85
89
|
"babel-jest": "27.4.5",
|
|
86
90
|
"babel-loader": "8.2.3",
|
|
87
|
-
"babel-plugin-template-html-minifier": "4.1.0",
|
|
88
91
|
"bundle-phobia-cli": "0.14.13",
|
|
89
92
|
"chromatic": "6.2.3",
|
|
90
93
|
"danger": "10.7.1",
|
|
@@ -118,11 +121,17 @@
|
|
|
118
121
|
"nodemon": "2.0.15",
|
|
119
122
|
"pascal-case": "3.1.2",
|
|
120
123
|
"prettier": "2.5.1",
|
|
124
|
+
"rollup": "^2.61.1",
|
|
125
|
+
"rollup-plugin-commonjs": "^10.1.0",
|
|
126
|
+
"rollup-plugin-minify-html-literals": "^1.2.6",
|
|
127
|
+
"rollup-plugin-multi-input": "^1.3.1",
|
|
128
|
+
"rollup-plugin-terser": "^7.0.2",
|
|
121
129
|
"semantic-release": "18.0.1",
|
|
122
130
|
"sort-package-json": "1.53.1",
|
|
123
131
|
"svgo": "2.8.0",
|
|
124
132
|
"svgstore": "3.0.1",
|
|
125
133
|
"text-table": "0.2.0",
|
|
134
|
+
"typescript": "^4.5.4",
|
|
126
135
|
"web-component-analyzer": "1.1.6",
|
|
127
136
|
"webpack-env": "0.8.0",
|
|
128
137
|
"webpack-merge": "5.8.0",
|
|
@@ -1,437 +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, LitElement, unsafeCSS, html } from 'lit';
|
|
17
|
-
import { dispatchCustomEvent } from '../lib/events';
|
|
18
|
-
import { repeat } from 'lit/directives/repeat';
|
|
19
|
-
import { classMap } from 'lit/directives/class-map';
|
|
20
|
-
import { styleMap } from 'lit/directives/style-map';
|
|
21
|
-
const ENTER_KEY_CODE = 13;
|
|
22
|
-
const DOWN_ARROW_KEY_CODE = 40;
|
|
23
|
-
const UP_ARROW_KEY_CODE = 38;
|
|
24
|
-
const ESCAPE_KEY_CODE = 27;
|
|
25
|
-
/**
|
|
26
|
-
* Autocomplete input wrapper
|
|
27
|
-
*
|
|
28
|
-
* ## Details
|
|
29
|
-
* * has @theme facet
|
|
30
|
-
*
|
|
31
|
-
* @fires gv-autocomplete:search - Custom event when user search value
|
|
32
|
-
* @fires gv-autocomplete:select - Custom event when user select value
|
|
33
|
-
* @fires gv-autocomplete:opened - Custom event after opened autocomplete
|
|
34
|
-
*
|
|
35
|
-
* @slot style - The options style
|
|
36
|
-
* @slot input - The input to wrap
|
|
37
|
-
* @slot noOption - What should be shown when there is no options to display
|
|
38
|
-
*
|
|
39
|
-
* @attr {Array.<{value: String, innerHTML?: String}>} options - the options for search
|
|
40
|
-
* @attr {String} value - selected value
|
|
41
|
-
* @attr {String} style - css if you want custom options rendered
|
|
42
|
-
* @attr {Number} minChars - minimum of characters for launch search and show results
|
|
43
|
-
* @attr {Number} size - results size to show before user must scroll
|
|
44
|
-
* @attr {Boolean|Function(value,option)} filter - If true, filter options by input, if function, filter options against it. The function will
|
|
45
|
-
* receive two arguments, inputValue and option, if the function returns true, the option will be included
|
|
46
|
-
* in the filtered set; Otherwise, it will be excluded.
|
|
47
|
-
* the option will be included in the filtered set; Otherwise, it will be excluded.
|
|
48
|
-
*
|
|
49
|
-
* @cssprop {Color} [--gv-autocomplete-hover--bgc=var(--gv-theme-neutral-color-lighter, #fafafa)] - Hover background color
|
|
50
|
-
* @cssprop {Color} [--gv-autocomplete--bgc=var(--gv-theme-neutral-color-lightest, #ffffff)] - Background color
|
|
51
|
-
* @cssprop {Color} [--gv-autocomplete--c=var(--gv-theme-font-color, #262626)] - Color
|
|
52
|
-
*/
|
|
53
|
-
|
|
54
|
-
export class GvAutocomplete extends LitElement {
|
|
55
|
-
static get properties() {
|
|
56
|
-
return {
|
|
57
|
-
options: {
|
|
58
|
-
type: Array,
|
|
59
|
-
reflect: true
|
|
60
|
-
},
|
|
61
|
-
value: {
|
|
62
|
-
type: String,
|
|
63
|
-
reflect: true
|
|
64
|
-
},
|
|
65
|
-
style: {
|
|
66
|
-
type: String
|
|
67
|
-
},
|
|
68
|
-
minChars: {
|
|
69
|
-
type: Number
|
|
70
|
-
},
|
|
71
|
-
filter: {
|
|
72
|
-
type: Boolean | Function
|
|
73
|
-
},
|
|
74
|
-
size: {
|
|
75
|
-
type: Number
|
|
76
|
-
},
|
|
77
|
-
_options: {
|
|
78
|
-
type: Array,
|
|
79
|
-
attribute: false
|
|
80
|
-
},
|
|
81
|
-
_forceOpen: {
|
|
82
|
-
type: Boolean,
|
|
83
|
-
attribute: false
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
static get styles() {
|
|
89
|
-
return [// language=CSS
|
|
90
|
-
css`:host{box-sizing:border-box;display:inline-block;width:100%}::slotted(*){width:100%}.container{position:relative}.container .options.open{display:block;visibility:visible;opacity:1;-webkit-transform:-webkit-translateY(0);transform:translateY(0);z-index:100}.options{background-color:var(--gv-autocomplete--bgc,var(--gv-theme-neutral-color-lightest,#fff));color:var(--gv-autocomplete--c,var(--gv-theme-font-color,#262626));margin:.2rem;position:absolute;box-shadow:0 0 0 1px var(--gv-theme-neutral-color,#f5f5f5),0 1px 3px var(--gv-theme-neutral-color-dark,#bfbfbf);border-radius:2px;display:block;width:100%;cursor:pointer;left:0;right:0;visibility:hidden;opacity:0;-webkit-transform:-webkit-translateY(-2em);transform:translateY(-2em);-webkit-transition:-webkit-transform 150ms ease-in-out,opacity 150ms ease-in-out;-moz-transition:all 150ms ease-in-out;-ms-transition:all 150ms ease-in-out;-o-transition:all 150ms ease-in-out;overflow:auto}.option{padding:.2rem;min-height:30px;word-break:break-all}.option.match~.option.match{background-color:transparent}.keyboard .option.hover:hover,.option.hover,.option:hover{background-color:var(--gv-autocomplete-hover--bgc,var(--gv-theme-neutral-color-lighter,#fafafa))}.keyboard .option:hover{background-color:transparent}.show{display:block}.hide{display:none}`];
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
constructor() {
|
|
94
|
-
super();
|
|
95
|
-
this._options = [];
|
|
96
|
-
this._candidateIndex = -1;
|
|
97
|
-
this.minChars = 1;
|
|
98
|
-
this.value = '';
|
|
99
|
-
this.style = '';
|
|
100
|
-
this.filter = false;
|
|
101
|
-
this.size = 5;
|
|
102
|
-
this._handleOpened = this._onOpened.bind(this);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
set options(options) {
|
|
106
|
-
this._options = options;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
get options() {
|
|
110
|
-
return this._options;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
reset() {
|
|
114
|
-
this._getInput().reset();
|
|
115
|
-
|
|
116
|
-
this._options = [];
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
_getFilteredOptions() {
|
|
120
|
-
if (this.filter && this.value && this.value.length >= this.minChars && this.value !== '*') {
|
|
121
|
-
if (typeof this.filter === 'function') {
|
|
122
|
-
return this._options.filter(option => {
|
|
123
|
-
return this.filter(this.value, option);
|
|
124
|
-
});
|
|
125
|
-
} else {
|
|
126
|
-
return this._options.filter(option => {
|
|
127
|
-
return option.value.indexOf(this.value) !== -1;
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
} else {
|
|
131
|
-
return this._options;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
_onInput(event) {
|
|
136
|
-
clearTimeout(this._cancellableTimeout);
|
|
137
|
-
this.value = event.target.value;
|
|
138
|
-
|
|
139
|
-
if (this.value != null && this.value.trim().length >= this.minChars) {
|
|
140
|
-
this._cancellableTimeout = setTimeout(() => {
|
|
141
|
-
this._open();
|
|
142
|
-
|
|
143
|
-
dispatchCustomEvent(this, 'search', this.value);
|
|
144
|
-
}, 200);
|
|
145
|
-
} else {
|
|
146
|
-
this.options = [];
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
_onSelect(value, option) {
|
|
151
|
-
if (option == null) {
|
|
152
|
-
option = this._options.find(option => {
|
|
153
|
-
return option.value === value;
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
this.value = this._getInput().value = value;
|
|
158
|
-
|
|
159
|
-
this._close();
|
|
160
|
-
|
|
161
|
-
dispatchCustomEvent(this, 'select', option);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
_onMouseOver() {
|
|
165
|
-
this.shadowRoot.firstElementChild.classList.remove('keyboard');
|
|
166
|
-
|
|
167
|
-
this._clearHover();
|
|
168
|
-
|
|
169
|
-
this._shouldSelect = true;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
_onMouseLeave() {
|
|
173
|
-
this._shouldSelect = false;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
_renderOption(option) {
|
|
177
|
-
if (option.element) {
|
|
178
|
-
return option.element;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
if (option.innerHTML) {
|
|
182
|
-
const wrapper = document.createElement('div');
|
|
183
|
-
wrapper.innerHTML = option.innerHTML;
|
|
184
|
-
return wrapper;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return option.value;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
_renderStyle() {
|
|
191
|
-
if (this.style) {
|
|
192
|
-
const wrapper = document.createElement('div');
|
|
193
|
-
wrapper.innerHTML = unsafeCSS(this.style);
|
|
194
|
-
return wrapper;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return '';
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
_hasNoOptionSlot() {
|
|
201
|
-
for (const node of this.childNodes) {
|
|
202
|
-
if (node.slot === 'noOption') {
|
|
203
|
-
return true;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
return false;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
render() {
|
|
211
|
-
const options = this._getFilteredOptions();
|
|
212
|
-
|
|
213
|
-
let open = false;
|
|
214
|
-
|
|
215
|
-
if (options && options.length > 0 && this._forceOpen) {
|
|
216
|
-
open = this.minChars === 0 || this.value.trim().length >= this.minChars;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
const input = this._getInput();
|
|
220
|
-
|
|
221
|
-
let top = 0;
|
|
222
|
-
|
|
223
|
-
if (input != null) {
|
|
224
|
-
top = input.offsetHeight;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
const classes = {
|
|
228
|
-
options: true,
|
|
229
|
-
open
|
|
230
|
-
};
|
|
231
|
-
return html` <div class="container"> ${this._renderStyle()} <slot></slot> ${this._hasNoOptionSlot() && this._forceOpen ? html`<div class="options open" style="${styleMap({
|
|
232
|
-
top: `${top}px`
|
|
233
|
-
})}"> <slot name="noOption" class="${!options || options.length === 0 ? 'show' : 'hide'}"></slot> </div>` : ''} <div class="${classMap(classes)}" @mouseleave="${this._onMouseLeave}" style="${styleMap({
|
|
234
|
-
top: `${top}px`
|
|
235
|
-
})}"> ${repeat(options, option => option, (option, index) => html` <div class="${classMap({
|
|
236
|
-
option: true
|
|
237
|
-
})}" data-value="${option.value}" @mouseover="${() => this._onMouseOver(option, index)}" @click="${() => this._onSelect(option.value, option)}"> ${this._renderOption(option)} </div> `)} </div> </div>`;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
_clearHover() {
|
|
241
|
-
this.shadowRoot.querySelectorAll('.option.hover').forEach(o => o.classList.remove('hover'));
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
_updateHover() {
|
|
245
|
-
this._clearHover();
|
|
246
|
-
|
|
247
|
-
if (this._candidateIndex > -1) {
|
|
248
|
-
this.shadowRoot.firstElementChild.classList.add('keyboard');
|
|
249
|
-
|
|
250
|
-
const candidate = this.shadowRoot.querySelectorAll('.option')[this._candidateIndex];
|
|
251
|
-
|
|
252
|
-
if (candidate) {
|
|
253
|
-
const options = this.shadowRoot.querySelector('.options');
|
|
254
|
-
const {
|
|
255
|
-
top,
|
|
256
|
-
left
|
|
257
|
-
} = candidate.getBoundingClientRect();
|
|
258
|
-
const container = options.getBoundingClientRect();
|
|
259
|
-
const scrollLeft = left - container.left;
|
|
260
|
-
const scrollTop = top - container.top;
|
|
261
|
-
options.scrollTo(scrollLeft, scrollTop);
|
|
262
|
-
candidate.classList.add('hover');
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
_onKeydown(e) {
|
|
268
|
-
switch (e.keyCode) {
|
|
269
|
-
case ENTER_KEY_CODE:
|
|
270
|
-
{
|
|
271
|
-
const options = this.shadowRoot.querySelectorAll('.option');
|
|
272
|
-
const candidate = options[this._candidateIndex];
|
|
273
|
-
|
|
274
|
-
if (candidate) {
|
|
275
|
-
e.preventDefault();
|
|
276
|
-
e.stopPropagation();
|
|
277
|
-
this._candidateIndex = -1;
|
|
278
|
-
|
|
279
|
-
this._onSelect(candidate.getAttribute('data-value'));
|
|
280
|
-
|
|
281
|
-
this._updateHover();
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
this._close();
|
|
285
|
-
|
|
286
|
-
break;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
case DOWN_ARROW_KEY_CODE:
|
|
290
|
-
{
|
|
291
|
-
if (this._candidateIndex < this.shadowRoot.querySelectorAll('.option').length - 1) {
|
|
292
|
-
e.preventDefault();
|
|
293
|
-
e.stopPropagation();
|
|
294
|
-
this._candidateIndex += 1;
|
|
295
|
-
|
|
296
|
-
this._updateHover();
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
case UP_ARROW_KEY_CODE:
|
|
303
|
-
{
|
|
304
|
-
if (this._candidateIndex > 0) {
|
|
305
|
-
e.preventDefault();
|
|
306
|
-
e.stopPropagation();
|
|
307
|
-
this._candidateIndex -= 1;
|
|
308
|
-
|
|
309
|
-
this._updateHover();
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
break;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
case ESCAPE_KEY_CODE:
|
|
316
|
-
{
|
|
317
|
-
e.preventDefault();
|
|
318
|
-
e.stopPropagation();
|
|
319
|
-
this._candidateIndex = -1;
|
|
320
|
-
|
|
321
|
-
this._updateHover();
|
|
322
|
-
|
|
323
|
-
break;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
default:
|
|
327
|
-
this.value = this._getInput().value;
|
|
328
|
-
this._candidateIndex = -1;
|
|
329
|
-
|
|
330
|
-
this._updateHover();
|
|
331
|
-
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
_open() {
|
|
336
|
-
this._forceOpen = true;
|
|
337
|
-
dispatchCustomEvent(this, 'opened', {
|
|
338
|
-
target: this
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
_close() {
|
|
343
|
-
this._forceOpen = false;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
_onFocus() {
|
|
347
|
-
this._open();
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
_onBlur() {
|
|
351
|
-
// Important when using custom HTML in options
|
|
352
|
-
if (this._shouldSelect === false) {
|
|
353
|
-
this._close();
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
_getInput() {
|
|
358
|
-
for (const node of this.childNodes) {
|
|
359
|
-
if (node.slot === 'input') {
|
|
360
|
-
return node;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
return this.firstElementChild;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
_onClear(event) {
|
|
368
|
-
this.value = event.target.value;
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
updated() {
|
|
372
|
-
setTimeout(() => {
|
|
373
|
-
const firstOption = this.shadowRoot.querySelector('.option');
|
|
374
|
-
|
|
375
|
-
if (firstOption) {
|
|
376
|
-
const maxHeight = firstOption.clientHeight * parseInt(this.size, 10);
|
|
377
|
-
const options = this.shadowRoot.querySelector('.options');
|
|
378
|
-
options.style.maxHeight = `${maxHeight}px`;
|
|
379
|
-
options.scrollTo(0, 0);
|
|
380
|
-
}
|
|
381
|
-
}, 0);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
firstUpdated() {
|
|
385
|
-
this._handlers = {
|
|
386
|
-
input: this._onInput.bind(this),
|
|
387
|
-
focus: this._onFocus.bind(this),
|
|
388
|
-
blur: this._onBlur.bind(this),
|
|
389
|
-
keydown: this._onKeydown.bind(this),
|
|
390
|
-
clear: this._onClear.bind(this)
|
|
391
|
-
};
|
|
392
|
-
this.shadowRoot.addEventListener('input', this._handlers.input);
|
|
393
|
-
this.shadowRoot.addEventListener('keydown', this._handlers.keydown);
|
|
394
|
-
|
|
395
|
-
const input = this._getInput();
|
|
396
|
-
|
|
397
|
-
input.addEventListener('focus', this._handlers.focus);
|
|
398
|
-
input.addEventListener('blur', this._handlers.blur);
|
|
399
|
-
input.addEventListener('gv-input:clear', this._handlers.clear);
|
|
400
|
-
|
|
401
|
-
if (input.tagName.toLowerCase() === 'gv-input') {
|
|
402
|
-
input.setAttribute('no-submit', true);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
_onOpened({
|
|
407
|
-
detail
|
|
408
|
-
}) {
|
|
409
|
-
if (detail.target !== this) {
|
|
410
|
-
this._close();
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
connectedCallback() {
|
|
415
|
-
super.connectedCallback();
|
|
416
|
-
window.addEventListener('gv-autocomplete:opened', this._handleOpened);
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
disconnectedCallback() {
|
|
420
|
-
if (this._handlers) {
|
|
421
|
-
this.shadowRoot.removeEventListener('input', this._handlers.input);
|
|
422
|
-
this.shadowRoot.removeEventListener('keydown', this._handlers.keydown);
|
|
423
|
-
|
|
424
|
-
const input = this._getInput();
|
|
425
|
-
|
|
426
|
-
input.removeEventListener('focus', this._handlers.focus);
|
|
427
|
-
input.removeEventListener('blur', this._handlers.blur);
|
|
428
|
-
input.removeEventListener('gv-input:clear', this._handlers.clear);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
window.removeEventListener('gv-autocomplete:open', this._handleOpened);
|
|
432
|
-
super.disconnectedCallback();
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
}
|
|
436
|
-
window.customElements.define('gv-autocomplete', GvAutocomplete);
|
|
437
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL2F0b21zL2d2LWF1dG9jb21wbGV0ZS5qcyJdLCJuYW1lcyI6WyJjc3MiLCJMaXRFbGVtZW50IiwidW5zYWZlQ1NTIiwiaHRtbCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJyZXBlYXQiLCJjbGFzc01hcCIsInN0eWxlTWFwIiwiRU5URVJfS0VZX0NPREUiLCJET1dOX0FSUk9XX0tFWV9DT0RFIiwiVVBfQVJST1dfS0VZX0NPREUiLCJFU0NBUEVfS0VZX0NPREUiLCJHdkF1dG9jb21wbGV0ZSIsInByb3BlcnRpZXMiLCJvcHRpb25zIiwidHlwZSIsIkFycmF5IiwicmVmbGVjdCIsInZhbHVlIiwiU3RyaW5nIiwic3R5bGUiLCJtaW5DaGFycyIsIk51bWJlciIsImZpbHRlciIsIkJvb2xlYW4iLCJGdW5jdGlvbiIsInNpemUiLCJfb3B0aW9ucyIsImF0dHJpYnV0ZSIsIl9mb3JjZU9wZW4iLCJzdHlsZXMiLCJjb25zdHJ1Y3RvciIsIl9jYW5kaWRhdGVJbmRleCIsIl9oYW5kbGVPcGVuZWQiLCJfb25PcGVuZWQiLCJiaW5kIiwicmVzZXQiLCJfZ2V0SW5wdXQiLCJfZ2V0RmlsdGVyZWRPcHRpb25zIiwibGVuZ3RoIiwib3B0aW9uIiwiaW5kZXhPZiIsIl9vbklucHV0IiwiZXZlbnQiLCJjbGVhclRpbWVvdXQiLCJfY2FuY2VsbGFibGVUaW1lb3V0IiwidGFyZ2V0IiwidHJpbSIsInNldFRpbWVvdXQiLCJfb3BlbiIsIl9vblNlbGVjdCIsImZpbmQiLCJfY2xvc2UiLCJfb25Nb3VzZU92ZXIiLCJzaGFkb3dSb290IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJfY2xlYXJIb3ZlciIsIl9zaG91bGRTZWxlY3QiLCJfb25Nb3VzZUxlYXZlIiwiX3JlbmRlck9wdGlvbiIsImVsZW1lbnQiLCJpbm5lckhUTUwiLCJ3cmFwcGVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiX3JlbmRlclN0eWxlIiwiX2hhc05vT3B0aW9uU2xvdCIsIm5vZGUiLCJjaGlsZE5vZGVzIiwic2xvdCIsInJlbmRlciIsIm9wZW4iLCJpbnB1dCIsInRvcCIsIm9mZnNldEhlaWdodCIsImNsYXNzZXMiLCJpbmRleCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwibyIsIl91cGRhdGVIb3ZlciIsImFkZCIsImNhbmRpZGF0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJsZWZ0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiY29udGFpbmVyIiwic2Nyb2xsTGVmdCIsInNjcm9sbFRvcCIsInNjcm9sbFRvIiwiX29uS2V5ZG93biIsImUiLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJnZXRBdHRyaWJ1dGUiLCJfb25Gb2N1cyIsIl9vbkJsdXIiLCJfb25DbGVhciIsInVwZGF0ZWQiLCJmaXJzdE9wdGlvbiIsIm1heEhlaWdodCIsImNsaWVudEhlaWdodCIsInBhcnNlSW50IiwiZmlyc3RVcGRhdGVkIiwiX2hhbmRsZXJzIiwiZm9jdXMiLCJibHVyIiwia2V5ZG93biIsImNsZWFyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInNldEF0dHJpYnV0ZSIsImRldGFpbCIsImNvbm5lY3RlZENhbGxiYWNrIiwid2luZG93IiwiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsVUFBZCxFQUEwQkMsU0FBMUIsRUFBcUNDLElBQXJDLFFBQWlELEtBQWpEO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFDQSxTQUFTQyxNQUFULFFBQXVCLHVCQUF2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QixVQUFNQSxpQkFBTjtBQUNBQyxJQUFBQSxNQUFNLENBQUNOLGdCQUFQLENBQXdCLHdCQUF4QixFQUFrRCxLQUFLL0UsYUFBdkQ7QUFDRDs7QUFFRHNGLEVBQUFBLG9CQUFvQixHQUFHO0FBQ3JCLFFBQUksS0FBS1osU0FBVCxFQUFvQjtBQUNsQixXQUFLckQsVUFBTCxDQUFnQmtFLG1CQUFoQixDQUFvQyxPQUFwQyxFQUE2QyxLQUFLYixTQUFMLENBQWVqQyxLQUE1RDtBQUNBLFdBQUtwQixVQUFMLENBQWdCa0UsbUJBQWhCLENBQW9DLFNBQXBDLEVBQStDLEtBQUtiLFNBQUwsQ0FBZUcsT0FBOUQ7O0FBQ0EsWUFBTXBDLEtBQUssR0FBRyxLQUFLckMsU0FBTCxFQUFkOztBQUNBcUMsTUFBQUEsS0FBSyxDQUFDOEMsbUJBQU4sQ0FBMEIsT0FBMUIsRUFBbUMsS0FBS2IsU0FBTCxDQUFlQyxLQUFsRDtBQUNBbEMsTUFBQUEsS0FBSyxDQUFDOEMsbUJBQU4sQ0FBMEIsTUFBMUIsRUFBa0MsS0FBS2IsU0FBTCxDQUFlRSxJQUFqRDtBQUNBbkMsTUFBQUEsS0FBSyxDQUFDOEMsbUJBQU4sQ0FBMEIsZ0JBQTFCLEVBQTRDLEtBQUtiLFNBQUwsQ0FBZUksS0FBM0Q7QUFDRDs7QUFDRE8sSUFBQUEsTUFBTSxDQUFDRSxtQkFBUCxDQUEyQixzQkFBM0IsRUFBbUQsS0FBS3ZGLGFBQXhEO0FBQ0EsVUFBTXNGLG9CQUFOO0FBQ0Q7O0FBblo0QztBQXNaL0NELE1BQU0sQ0FBQ0csY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsaUJBQTdCLEVBQWdEOUcsY0FBaEQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBMaXRFbGVtZW50LCB1bnNhZmVDU1MsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgZGlzcGF0Y2hDdXN0b21FdmVudCB9IGZyb20gJy4uL2xpYi9ldmVudHMnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0JztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IHN0eWxlTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvc3R5bGUtbWFwJztcblxuY29uc3QgRU5URVJfS0VZX0NPREUgPSAxMztcbmNvbnN0IERPV05fQVJST1dfS0VZX0NPREUgPSA0MDtcbmNvbnN0IFVQX0FSUk9XX0tFWV9DT0RFID0gMzg7XG5jb25zdCBFU0NBUEVfS0VZX0NPREUgPSAyNztcblxuLyoqXG4gKiBBdXRvY29tcGxldGUgaW5wdXQgd3JhcHBlclxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBmaXJlcyBndi1hdXRvY29tcGxldGU6c2VhcmNoIC0gQ3VzdG9tIGV2ZW50IHdoZW4gdXNlciBzZWFyY2ggdmFsdWVcbiAqIEBmaXJlcyBndi1hdXRvY29tcGxldGU6c2VsZWN0IC0gQ3VzdG9tIGV2ZW50IHdoZW4gdXNlciBzZWxlY3QgdmFsdWVcbiAqIEBmaXJlcyBndi1hdXRvY29tcGxldGU6b3BlbmVkIC0gQ3VzdG9tIGV2ZW50IGFmdGVyIG9wZW5lZCBhdXRvY29tcGxldGVcbiAqXG4gKiBAc2xvdCBzdHlsZSAtIFRoZSBvcHRpb25zIHN0eWxlXG4gKiBAc2xvdCBpbnB1dCAtIFRoZSBpbnB1dCB0byB3cmFwXG4gKiBAc2xvdCBub09wdGlvbiAtIFdoYXQgc2hvdWxkIGJlIHNob3duIHdoZW4gdGhlcmUgaXMgbm8gb3B0aW9ucyB0byBkaXNwbGF5XG4gKlxuICogQGF0dHIge0FycmF5Ljx7dmFsdWU6IFN0cmluZywgaW5uZXJIVE1MPzogU3RyaW5nfT59IG9wdGlvbnMgLSB0aGUgb3B0aW9ucyBmb3Igc2VhcmNoXG4gKiBAYXR0ciB7U3RyaW5nfSB2YWx1ZSAtIHNlbGVjdGVkIHZhbHVlXG4gKiBAYXR0ciB7U3RyaW5nfSBzdHlsZSAtIGNzcyBpZiB5b3Ugd2FudCBjdXN0b20gb3B0aW9ucyByZW5kZXJlZFxuICogQGF0dHIge051bWJlcn0gbWluQ2hhcnMgLSBtaW5pbXVtIG9mIGNoYXJhY3RlcnMgZm9yIGxhdW5jaCBzZWFyY2ggYW5kIHNob3cgcmVzdWx0c1xuICogQGF0dHIge051bWJlcn0gc2l6ZSAtIHJlc3VsdHMgc2l6ZSB0byBzaG93IGJlZm9yZSB1c2VyIG11c3Qgc2Nyb2xsXG4gKiBAYXR0ciB7Qm9vbGVhbnxGdW5jdGlvbih2YWx1ZSxvcHRpb24pfSBmaWx0ZXIgLSBJZiB0cnVlLCBmaWx0ZXIgb3B0aW9ucyBieSBpbnB1dCwgaWYgZnVuY3Rpb24sIGZpbHRlciBvcHRpb25zIGFnYWluc3QgaXQuIFRoZSBmdW5jdGlvbiB3aWxsXG4gKiByZWNlaXZlIHR3byBhcmd1bWVudHMsIGlucHV0VmFsdWUgYW5kIG9wdGlvbiwgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIG9wdGlvbiB3aWxsIGJlIGluY2x1ZGVkXG4gKiBpbiB0aGUgZmlsdGVyZWQgc2V0OyBPdGhlcndpc2UsIGl0IHdpbGwgYmUgZXhjbHVkZWQuXG4gKiB0aGUgb3B0aW9uIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbHRlcmVkIHNldDsgT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGV4Y2x1ZGVkLlxuICpcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtYXV0b2NvbXBsZXRlLWhvdmVyLS1iZ2M9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1saWdodGVyLCAjZmFmYWZhKV0gLSBIb3ZlciBiYWNrZ3JvdW5kIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LWF1dG9jb21wbGV0ZS0tYmdjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlc3QsICNmZmZmZmYpXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtYXV0b2NvbXBsZXRlLS1jPXZhcigtLWd2LXRoZW1lLWZvbnQtY29sb3IsICMyNjI2MjYpXSAtIENvbG9yXG4gKi9cbmV4cG9ydCBjbGFzcyBHdkF1dG9jb21wbGV0ZSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGlvbnM6IHsgdHlwZTogQXJyYXksIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIHZhbHVlOiB7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgc3R5bGU6IHsgdHlwZTogU3RyaW5nIH0sXG4gICAgICBtaW5DaGFyczogeyB0eXBlOiBOdW1iZXIgfSxcbiAgICAgIGZpbHRlcjogeyB0eXBlOiBCb29sZWFuIHwgRnVuY3Rpb24gfSxcbiAgICAgIHNpemU6IHsgdHlwZTogTnVtYmVyIH0sXG4gICAgICBfb3B0aW9uczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2ZvcmNlT3BlbjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBsYW5ndWFnZT1DU1NcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgOjpzbG90dGVkKCopIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb250YWluZXIge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb250YWluZXIgLm9wdGlvbnMub3BlbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiAtd2Via2l0LXRyYW5zbGF0ZVkoMCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XG4gICAgICAgICAgei1pbmRleDogMTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLm9wdGlvbnMge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWd2LWF1dG9jb21wbGV0ZS0tYmdjLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXN0LCAjZmZmZmZmKSk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWd2LWF1dG9jb21wbGV0ZS0tYywgdmFyKC0tZ3YtdGhlbWUtZm9udC1jb2xvciwgIzI2MjYyNikpO1xuICAgICAgICAgIG1hcmdpbjogMC4ycmVtO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggdmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvciwgI2Y1ZjVmNSksIDAgMXB4IDNweCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNiZmJmYmYpO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogLXdlYmtpdC10cmFuc2xhdGVZKC0yZW0pO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMmVtKTtcbiAgICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDE1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDE1MG1zIGVhc2UtaW4tb3V0O1xuICAgICAgICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDE1MG1zIGVhc2UtaW4tb3V0O1xuICAgICAgICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMTUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgICAgICAgLW8tdHJhbnNpdGlvbjogYWxsIDE1MG1zIGVhc2UtaW4tb3V0O1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgLm9wdGlvbiB7XG4gICAgICAgICAgcGFkZGluZzogMC4ycmVtO1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7XG4gICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLm9wdGlvbi5tYXRjaCB+IC5vcHRpb24ubWF0Y2gge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLm9wdGlvbjpob3ZlcixcbiAgICAgICAgLm9wdGlvbi5ob3ZlcixcbiAgICAgICAgLmtleWJvYXJkIC5vcHRpb24uaG92ZXI6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWd2LWF1dG9jb21wbGV0ZS1ob3Zlci0tYmdjLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXIsICNmYWZhZmEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5rZXlib2FyZCAub3B0aW9uOmhvdmVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zaG93IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIC5oaWRlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBbXTtcbiAgICB0aGlzLl9jYW5kaWRhdGVJbmRleCA9IC0xO1xuICAgIHRoaXMubWluQ2hhcnMgPSAxO1xuICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICB0aGlzLnN0eWxlID0gJyc7XG4gICAgdGhpcy5maWx0ZXIgPSBmYWxzZTtcbiAgICB0aGlzLnNpemUgPSA1O1xuICAgIHRoaXMuX2hhbmRsZU9wZW5lZCA9IHRoaXMuX29uT3BlbmVkLmJpbmQodGhpcyk7XG4gIH1cblxuICBzZXQgb3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX2dldElucHV0KCkucmVzZXQoKTtcbiAgICB0aGlzLl9vcHRpb25zID0gW107XG4gIH1cblxuICBfZ2V0RmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGlmICh0aGlzLmZpbHRlciAmJiB0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID49IHRoaXMubWluQ2hhcnMgJiYgdGhpcy52YWx1ZSAhPT0gJyonKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKHRoaXMudmFsdWUsIG9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uLnZhbHVlLmluZGV4T2YodGhpcy52YWx1ZSkgIT09IC0xO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgX29uSW5wdXQoZXZlbnQpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fY2FuY2VsbGFibGVUaW1lb3V0KTtcbiAgICB0aGlzLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGlmICh0aGlzLnZhbHVlICE9IG51bGwgJiYgdGhpcy52YWx1ZS50cmltKCkubGVuZ3RoID49IHRoaXMubWluQ2hhcnMpIHtcbiAgICAgIHRoaXMuX2NhbmNlbGxhYmxlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9vcGVuKCk7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ3NlYXJjaCcsIHRoaXMudmFsdWUpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgfVxuICB9XG5cbiAgX29uU2VsZWN0KHZhbHVlLCBvcHRpb24pIHtcbiAgICBpZiAob3B0aW9uID09IG51bGwpIHtcbiAgICAgIG9wdGlvbiA9IHRoaXMuX29wdGlvbnMuZmluZCgob3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBvcHRpb24udmFsdWUgPT09IHZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB0aGlzLl9nZXRJbnB1dCgpLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fY2xvc2UoKTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdzZWxlY3QnLCBvcHRpb24pO1xuICB9XG5cbiAgX29uTW91c2VPdmVyKCkge1xuICAgIHRoaXMuc2hhZG93Um9vdC5maXJzdEVsZW1lbnRDaGlsZC5jbGFzc0xpc3QucmVtb3ZlKCdrZXlib2FyZCcpO1xuICAgIHRoaXMuX2NsZWFySG92ZXIoKTtcbiAgICB0aGlzLl9zaG91bGRTZWxlY3QgPSB0cnVlO1xuICB9XG5cbiAgX29uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLl9zaG91bGRTZWxlY3QgPSBmYWxzZTtcbiAgfVxuXG4gIF9yZW5kZXJPcHRpb24ob3B0aW9uKSB7XG4gICAgaWYgKG9wdGlvbi5lbGVtZW50KSB7XG4gICAgICByZXR1cm4gb3B0aW9uLmVsZW1lbnQ7XG4gICAgfVxuICAgIGlmIChvcHRpb24uaW5uZXJIVE1MKSB7XG4gICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB3cmFwcGVyLmlubmVySFRNTCA9IG9wdGlvbi5pbm5lckhUTUw7XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbi52YWx1ZTtcbiAgfVxuXG4gIF9yZW5kZXJTdHlsZSgpIHtcbiAgICBpZiAodGhpcy5zdHlsZSkge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgd3JhcHBlci5pbm5lckhUTUwgPSB1bnNhZmVDU1ModGhpcy5zdHlsZSk7XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgX2hhc05vT3B0aW9uU2xvdCgpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5zbG90ID09PSAnbm9PcHRpb24nKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2dldEZpbHRlcmVkT3B0aW9ucygpO1xuICAgIGxldCBvcGVuID0gZmFsc2U7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+IDAgJiYgdGhpcy5fZm9yY2VPcGVuKSB7XG4gICAgICBvcGVuID0gdGhpcy5taW5DaGFycyA9PT0gMCB8fCB0aGlzLnZhbHVlLnRyaW0oKS5sZW5ndGggPj0gdGhpcy5taW5DaGFycztcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuX2dldElucHV0KCk7XG4gICAgbGV0IHRvcCA9IDA7XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgIHRvcCA9IGlucHV0Lm9mZnNldEhlaWdodDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgb3B0aW9uczogdHJ1ZSxcbiAgICAgIG9wZW4sXG4gICAgfTtcblxuICAgIHJldHVybiBodG1sYCA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAke3RoaXMuX3JlbmRlclN0eWxlKCl9XG4gICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAke3RoaXMuX2hhc05vT3B0aW9uU2xvdCgpICYmIHRoaXMuX2ZvcmNlT3BlblxuICAgICAgICA/IGh0bWxgPGRpdiBjbGFzcz1cIm9wdGlvbnMgb3BlblwiIHN0eWxlPVwiJHtzdHlsZU1hcCh7IHRvcDogYCR7dG9wfXB4YCB9KX1cIj5cbiAgICAgICAgICAgIDxzbG90IG5hbWU9XCJub09wdGlvblwiIGNsYXNzPVwiJHshb3B0aW9ucyB8fCBvcHRpb25zLmxlbmd0aCA9PT0gMCA/ICdzaG93JyA6ICdoaWRlJ31cIj48L3Nsb3Q+XG4gICAgICAgICAgPC9kaXY+YFxuICAgICAgICA6ICcnfVxuICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoY2xhc3Nlcyl9XCIgQG1vdXNlbGVhdmU9XCIke3RoaXMuX29uTW91c2VMZWF2ZX1cIiBzdHlsZT1cIiR7c3R5bGVNYXAoeyB0b3A6IGAke3RvcH1weGAgfSl9XCI+XG4gICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLFxuICAgICAgICAgIChvcHRpb24sIGluZGV4KSA9PiBodG1sYFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBvcHRpb246IHRydWUgfSl9XCJcbiAgICAgICAgICAgICAgZGF0YS12YWx1ZT1cIiR7b3B0aW9uLnZhbHVlfVwiXG4gICAgICAgICAgICAgIEBtb3VzZW92ZXI9XCIkeygpID0+IHRoaXMuX29uTW91c2VPdmVyKG9wdGlvbiwgaW5kZXgpfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cIiR7KCkgPT4gdGhpcy5fb25TZWxlY3Qob3B0aW9uLnZhbHVlLCBvcHRpb24pfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICR7dGhpcy5fcmVuZGVyT3B0aW9uKG9wdGlvbil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbiAgfVxuXG4gIF9jbGVhckhvdmVyKCkge1xuICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCcub3B0aW9uLmhvdmVyJykuZm9yRWFjaCgobykgPT4gby5jbGFzc0xpc3QucmVtb3ZlKCdob3ZlcicpKTtcbiAgfVxuXG4gIF91cGRhdGVIb3ZlcigpIHtcbiAgICB0aGlzLl9jbGVhckhvdmVyKCk7XG4gICAgaWYgKHRoaXMuX2NhbmRpZGF0ZUluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5maXJzdEVsZW1lbnRDaGlsZC5jbGFzc0xpc3QuYWRkKCdrZXlib2FyZCcpO1xuICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5vcHRpb24nKVt0aGlzLl9jYW5kaWRhdGVJbmRleF07XG4gICAgICBpZiAoY2FuZGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLm9wdGlvbnMnKTtcbiAgICAgICAgY29uc3QgeyB0b3AsIGxlZnQgfSA9IGNhbmRpZGF0ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gb3B0aW9ucy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGxlZnQgLSBjb250YWluZXIubGVmdDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdG9wIC0gY29udGFpbmVyLnRvcDtcbiAgICAgICAgb3B0aW9ucy5zY3JvbGxUbyhzY3JvbGxMZWZ0LCBzY3JvbGxUb3ApO1xuICAgICAgICBjYW5kaWRhdGUuY2xhc3NMaXN0LmFkZCgnaG92ZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25LZXlkb3duKGUpIHtcbiAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xuICAgICAgY2FzZSBFTlRFUl9LRVlfQ09ERToge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5vcHRpb24nKTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gb3B0aW9uc1t0aGlzLl9jYW5kaWRhdGVJbmRleF07XG4gICAgICAgIGlmIChjYW5kaWRhdGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLl9jYW5kaWRhdGVJbmRleCA9IC0xO1xuICAgICAgICAgIHRoaXMuX29uU2VsZWN0KGNhbmRpZGF0ZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSk7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlSG92ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jbG9zZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBET1dOX0FSUk9XX0tFWV9DT0RFOiB7XG4gICAgICAgIGlmICh0aGlzLl9jYW5kaWRhdGVJbmRleCA8IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCcub3B0aW9uJykubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZUluZGV4ICs9IDE7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlSG92ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBVUF9BUlJPV19LRVlfQ09ERToge1xuICAgICAgICBpZiAodGhpcy5fY2FuZGlkYXRlSW5kZXggPiAwKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5fY2FuZGlkYXRlSW5kZXggLT0gMTtcbiAgICAgICAgICB0aGlzLl91cGRhdGVIb3ZlcigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEVTQ0FQRV9LRVlfQ09ERToge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuX2NhbmRpZGF0ZUluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUhvdmVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX2dldElucHV0KCkudmFsdWU7XG4gICAgICAgIHRoaXMuX2NhbmRpZGF0ZUluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUhvdmVyKCk7XG4gICAgfVxuICB9XG5cbiAgX29wZW4oKSB7XG4gICAgdGhpcy5fZm9yY2VPcGVuID0gdHJ1ZTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdvcGVuZWQnLCB7IHRhcmdldDogdGhpcyB9KTtcbiAgfVxuXG4gIF9jbG9zZSgpIHtcbiAgICB0aGlzLl9mb3JjZU9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIF9vbkZvY3VzKCkge1xuICAgIHRoaXMuX29wZW4oKTtcbiAgfVxuXG4gIF9vbkJsdXIoKSB7XG4gICAgLy8gSW1wb3J0YW50IHdoZW4gdXNpbmcgY3VzdG9tIEhUTUwgaW4gb3B0aW9uc1xuICAgIGlmICh0aGlzLl9zaG91bGRTZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRJbnB1dCgpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5zbG90ID09PSAnaW5wdXQnKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbiAgfVxuXG4gIF9vbkNsZWFyKGV2ZW50KSB7XG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuXG4gIHVwZGF0ZWQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcub3B0aW9uJyk7XG4gICAgICBpZiAoZmlyc3RPcHRpb24pIHtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gZmlyc3RPcHRpb24uY2xpZW50SGVpZ2h0ICogcGFyc2VJbnQodGhpcy5zaXplLCAxMCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLm9wdGlvbnMnKTtcbiAgICAgICAgb3B0aW9ucy5zdHlsZS5tYXhIZWlnaHQgPSBgJHttYXhIZWlnaHR9cHhgO1xuICAgICAgICBvcHRpb25zLnNjcm9sbFRvKDAsIDApO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgZmlyc3RVcGRhdGVkKCkge1xuICAgIHRoaXMuX2hhbmRsZXJzID0ge1xuICAgICAgaW5wdXQ6IHRoaXMuX29uSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgIGZvY3VzOiB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcyksXG4gICAgICBibHVyOiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKSxcbiAgICAgIGtleWRvd246IHRoaXMuX29uS2V5ZG93bi5iaW5kKHRoaXMpLFxuICAgICAgY2xlYXI6IHRoaXMuX29uQ2xlYXIuYmluZCh0aGlzKSxcbiAgICB9O1xuICAgIHRoaXMuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX2hhbmRsZXJzLmlucHV0KTtcbiAgICB0aGlzLnNoYWRvd1Jvb3QuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX2hhbmRsZXJzLmtleWRvd24pO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fZ2V0SW5wdXQoKTtcbiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX2hhbmRsZXJzLmZvY3VzKTtcbiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5faGFuZGxlcnMuYmx1cik7XG4gICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignZ3YtaW5wdXQ6Y2xlYXInLCB0aGlzLl9oYW5kbGVycy5jbGVhcik7XG4gICAgaWYgKGlucHV0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2d2LWlucHV0Jykge1xuICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCduby1zdWJtaXQnLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBfb25PcGVuZWQoeyBkZXRhaWwgfSkge1xuICAgIGlmIChkZXRhaWwudGFyZ2V0ICE9PSB0aGlzKSB7XG4gICAgICB0aGlzLl9jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2d2LWF1dG9jb21wbGV0ZTpvcGVuZWQnLCB0aGlzLl9oYW5kbGVPcGVuZWQpO1xuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2hhbmRsZXJzKSB7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLl9oYW5kbGVycy5pbnB1dCk7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX2hhbmRsZXJzLmtleWRvd24pO1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLl9nZXRJbnB1dCgpO1xuICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9oYW5kbGVycy5mb2N1cyk7XG4gICAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5faGFuZGxlcnMuYmx1cik7XG4gICAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdndi1pbnB1dDpjbGVhcicsIHRoaXMuX2hhbmRsZXJzLmNsZWFyKTtcbiAgICB9XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2d2LWF1dG9jb21wbGV0ZTpvcGVuJywgdGhpcy5faGFuZGxlT3BlbmVkKTtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LWF1dG9jb21wbGV0ZScsIEd2QXV0b2NvbXBsZXRlKTtcbiJdfQ==
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvAutocomplete=void 0;const t=require("lit"),e=require("../lib/events"),o=require("lit/directives/repeat"),i=require("lit/directives/class-map"),s=require("lit/directives/style-map");class n extends t.LitElement{static get properties(){return{options:{type:Array,reflect:!0},value:{type:String,reflect:!0},style:{type:String},minChars:{type:Number},filter:{type:Boolean|Function},size:{type:Number},_options:{type:Array,attribute:!1},_forceOpen:{type:Boolean,attribute:!1}}}static get styles(){return[t.css`:host{box-sizing:border-box;display:inline-block;width:100%}::slotted(*){width:100%}.container{position:relative}.container .options.open{display:block;visibility:visible;opacity:1;-webkit-transform:-webkit-translateY(0);transform:translateY(0);z-index:100}.options{background-color:var(--gv-autocomplete--bgc,var(--gv-theme-neutral-color-lightest,#fff));color:var(--gv-autocomplete--c,var(--gv-theme-font-color,#262626));margin:.2rem;position:absolute;box-shadow:0 0 0 1px var(--gv-theme-neutral-color,#f5f5f5),0 1px 3px var(--gv-theme-neutral-color-dark,#bfbfbf);border-radius:2px;display:block;width:100%;cursor:pointer;left:0;right:0;visibility:hidden;opacity:0;-webkit-transform:-webkit-translateY(-2em);transform:translateY(-2em);-webkit-transition:-webkit-transform 150ms ease-in-out,opacity 150ms ease-in-out;-moz-transition:all 150ms ease-in-out;-ms-transition:all 150ms ease-in-out;-o-transition:all 150ms ease-in-out;overflow:auto}.option{padding:.2rem;min-height:30px;word-break:break-all}.option.match~.option.match{background-color:transparent}.keyboard .option.hover:hover,.option.hover,.option:hover{background-color:var(--gv-autocomplete-hover--bgc,var(--gv-theme-neutral-color-lighter,#fafafa))}.keyboard .option:hover{background-color:transparent}.show{display:block}.hide{display:none}`]}constructor(){super(),this._options=[],this._candidateIndex=-1,this.minChars=1,this.value="",this.style="",this.filter=!1,this.size=5,this._handleOpened=this._onOpened.bind(this)}set options(t){this._options=t}get options(){return this._options}reset(){this._getInput().reset(),this._options=[]}_getFilteredOptions(){return this.filter&&this.value&&this.value.length>=this.minChars&&"*"!==this.value?"function"==typeof this.filter?this._options.filter((t=>this.filter(this.value,t))):this._options.filter((t=>-1!==t.value.indexOf(this.value))):this._options}_onInput(t){clearTimeout(this._cancellableTimeout),this.value=t.target.value,null!=this.value&&this.value.trim().length>=this.minChars?this._cancellableTimeout=setTimeout((()=>{this._open(),(0,e.dispatchCustomEvent)(this,"search",this.value)}),200):this.options=[]}_onSelect(t,o){null==o&&(o=this._options.find((e=>e.value===t))),this.value=this._getInput().value=t,this._close(),(0,e.dispatchCustomEvent)(this,"select",o)}_onMouseOver(){this.shadowRoot.firstElementChild.classList.remove("keyboard"),this._clearHover(),this._shouldSelect=!0}_onMouseLeave(){this._shouldSelect=!1}_renderOption(t){if(t.element)return t.element;if(t.innerHTML){const e=document.createElement("div");return e.innerHTML=t.innerHTML,e}return t.value}_renderStyle(){if(this.style){const e=document.createElement("div");return e.innerHTML=(0,t.unsafeCSS)(this.style),e}return""}_hasNoOptionSlot(){for(const t of this.childNodes)if("noOption"===t.slot)return!0;return!1}render(){const e=this._getFilteredOptions();let n=!1;e&&e.length>0&&this._forceOpen&&(n=0===this.minChars||this.value.trim().length>=this.minChars);const r=this._getInput();let a=0;null!=r&&(a=r.offsetHeight);const l={options:!0,open:n};return t.html`<div class="container">${this._renderStyle()}<slot></slot>${this._hasNoOptionSlot()&&this._forceOpen?t.html`<div class="options open" style="${(0,s.styleMap)({top:`${a}px`})}"><slot name="noOption" class="${e&&0!==e.length?"hide":"show"}"></slot></div>`:""}<div class="${(0,i.classMap)(l)}" @mouseleave="${this._onMouseLeave}" style="${(0,s.styleMap)({top:`${a}px`})}">${(0,o.repeat)(e,(t=>t),((e,o)=>t.html`<div class="${(0,i.classMap)({option:!0})}" data-value="${e.value}" @mouseover="${()=>this._onMouseOver(e,o)}" @click="${()=>this._onSelect(e.value,e)}">${this._renderOption(e)}</div>`))}</div></div>`}_clearHover(){this.shadowRoot.querySelectorAll(".option.hover").forEach((t=>t.classList.remove("hover")))}_updateHover(){if(this._clearHover(),this._candidateIndex>-1){this.shadowRoot.firstElementChild.classList.add("keyboard");const t=this.shadowRoot.querySelectorAll(".option")[this._candidateIndex];if(t){const e=this.shadowRoot.querySelector(".options"),{top:o,left:i}=t.getBoundingClientRect(),s=e.getBoundingClientRect(),n=i-s.left,r=o-s.top;e.scrollTo(n,r),t.classList.add("hover")}}}_onKeydown(t){switch(t.keyCode){case 13:{const e=this.shadowRoot.querySelectorAll(".option")[this._candidateIndex];e&&(t.preventDefault(),t.stopPropagation(),this._candidateIndex=-1,this._onSelect(e.getAttribute("data-value")),this._updateHover()),this._close();break}case 40:this._candidateIndex<this.shadowRoot.querySelectorAll(".option").length-1&&(t.preventDefault(),t.stopPropagation(),this._candidateIndex+=1,this._updateHover());break;case 38:this._candidateIndex>0&&(t.preventDefault(),t.stopPropagation(),this._candidateIndex-=1,this._updateHover());break;case 27:t.preventDefault(),t.stopPropagation(),this._candidateIndex=-1,this._updateHover();break;default:this.value=this._getInput().value,this._candidateIndex=-1,this._updateHover()}}_open(){this._forceOpen=!0,(0,e.dispatchCustomEvent)(this,"opened",{target:this})}_close(){this._forceOpen=!1}_onFocus(){this._open()}_onBlur(){!1===this._shouldSelect&&this._close()}_getInput(){for(const t of this.childNodes)if("input"===t.slot)return t;return this.firstElementChild}_onClear(t){this.value=t.target.value}updated(){setTimeout((()=>{const t=this.shadowRoot.querySelector(".option");if(t){const e=t.clientHeight*parseInt(this.size,10),o=this.shadowRoot.querySelector(".options");o.style.maxHeight=`${e}px`,o.scrollTo(0,0)}}),0)}firstUpdated(){this._handlers={input:this._onInput.bind(this),focus:this._onFocus.bind(this),blur:this._onBlur.bind(this),keydown:this._onKeydown.bind(this),clear:this._onClear.bind(this)},this.shadowRoot.addEventListener("input",this._handlers.input),this.shadowRoot.addEventListener("keydown",this._handlers.keydown);const t=this._getInput();t.addEventListener("focus",this._handlers.focus),t.addEventListener("blur",this._handlers.blur),t.addEventListener("gv-input:clear",this._handlers.clear),"gv-input"===t.tagName.toLowerCase()&&t.setAttribute("no-submit",!0)}_onOpened({detail:t}){t.target!==this&&this._close()}connectedCallback(){super.connectedCallback(),window.addEventListener("gv-autocomplete:opened",this._handleOpened)}disconnectedCallback(){if(this._handlers){this.shadowRoot.removeEventListener("input",this._handlers.input),this.shadowRoot.removeEventListener("keydown",this._handlers.keydown);const t=this._getInput();t.removeEventListener("focus",this._handlers.focus),t.removeEventListener("blur",this._handlers.blur),t.removeEventListener("gv-input:clear",this._handlers.clear)}window.removeEventListener("gv-autocomplete:open",this._handleOpened),super.disconnectedCallback()}}exports.GvAutocomplete=n,window.customElements.define("gv-autocomplete",n);
|