@sbb-esta/lyne-elements 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/autocomplete/autocomplete-base-element.d.ts +19 -21
- package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-button.js +7 -7
- package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
- package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
- package/autocomplete.js +145 -136
- package/chip/chip/chip.d.ts +32 -0
- package/chip/chip/chip.d.ts.map +1 -0
- package/chip/chip-group/chip-group.d.ts +100 -0
- package/chip/chip-group/chip-group.d.ts.map +1 -0
- package/chip/chip-group.d.ts +2 -0
- package/chip/chip-group.d.ts.map +1 -0
- package/chip/chip-group.js +225 -0
- package/chip/chip.d.ts +2 -0
- package/chip/chip.d.ts.map +1 -0
- package/chip/chip.js +85 -0
- package/chip.d.ts +3 -0
- package/chip.d.ts.map +1 -0
- package/chip.js +2 -0
- package/clock/clock.d.ts.map +1 -1
- package/clock.js +1 -1
- package/core/base-elements/button-base-element.d.ts +5 -0
- package/core/base-elements/button-base-element.d.ts.map +1 -1
- package/core/base-elements.js +94 -79
- package/core/controllers/id-observer-controller.d.ts +21 -0
- package/core/controllers/id-observer-controller.d.ts.map +1 -0
- package/core/controllers/media-matchers-controller.d.ts.map +1 -1
- package/core/controllers.d.ts +2 -1
- package/core/controllers.d.ts.map +1 -1
- package/core/controllers.js +135 -80
- package/core/datetime/native-date-adapter.d.ts.map +1 -1
- package/core/datetime.js +8 -3
- package/core/dom/find-referenced-element.d.ts +1 -0
- package/core/dom/find-referenced-element.d.ts.map +1 -1
- package/core/dom/input-element.d.ts +3 -1
- package/core/dom/input-element.d.ts.map +1 -1
- package/core/dom/platform.d.ts +5 -0
- package/core/dom/platform.d.ts.map +1 -1
- package/core/dom.js +10 -9
- package/core/i18n/i18n.d.ts +3 -0
- package/core/i18n/i18n.d.ts.map +1 -1
- package/core/i18n.js +135 -117
- package/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
- package/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
- package/core/mixins.js +71 -63
- package/core/overlay/overlay-trigger-attributes.d.ts +1 -1
- package/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
- package/core/overlay/position.d.ts +1 -1
- package/core/overlay/position.d.ts.map +1 -1
- package/core/styles/core.scss +89 -24
- package/core/styles/image.scss +1 -1
- package/core/styles/mixins/table.scss +63 -26
- package/core/styles/table.scss +16 -0
- package/core/testing/scroll.d.ts +1 -0
- package/core/testing/scroll.d.ts.map +1 -1
- package/core/testing/wait-for-image-ready.d.ts.map +1 -1
- package/core/testing.js +8 -5
- package/core.css +90 -34
- package/custom-elements.json +2568 -740
- package/datepicker/datepicker/datepicker.d.ts +4 -4
- package/datepicker/datepicker/datepicker.d.ts.map +1 -1
- package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
- package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
- package/datepicker/datepicker-toggle.js +30 -34
- package/datepicker/datepicker.js +103 -105
- package/development/autocomplete/autocomplete-base-element.d.ts +19 -21
- package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button.js +3 -3
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-optgroup.js +1 -1
- package/development/autocomplete.js +104 -82
- package/development/chip/chip/chip.d.ts +32 -0
- package/development/chip/chip/chip.d.ts.map +1 -0
- package/development/chip/chip-group/chip-group.d.ts +100 -0
- package/development/chip/chip-group/chip-group.d.ts.map +1 -0
- package/development/chip/chip-group.d.ts +2 -0
- package/development/chip/chip-group.d.ts.map +1 -0
- package/development/chip/chip-group.js +349 -0
- package/development/chip/chip.d.ts +2 -0
- package/development/chip/chip.d.ts.map +1 -0
- package/development/chip/chip.js +212 -0
- package/development/chip.d.ts +3 -0
- package/development/chip.d.ts.map +1 -0
- package/development/chip.js +3 -0
- package/development/clock/clock.d.ts.map +1 -1
- package/development/clock.js +5 -2
- package/development/core/base-elements/button-base-element.d.ts +5 -0
- package/development/core/base-elements/button-base-element.d.ts.map +1 -1
- package/development/core/base-elements.js +38 -10
- package/development/core/controllers/id-observer-controller.d.ts +21 -0
- package/development/core/controllers/id-observer-controller.d.ts.map +1 -0
- package/development/core/controllers/media-matchers-controller.d.ts.map +1 -1
- package/development/core/controllers.d.ts +2 -1
- package/development/core/controllers.d.ts.map +1 -1
- package/development/core/controllers.js +116 -44
- package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
- package/development/core/datetime.js +6 -2
- package/development/core/dom/find-referenced-element.d.ts +1 -0
- package/development/core/dom/find-referenced-element.d.ts.map +1 -1
- package/development/core/dom/input-element.d.ts +3 -1
- package/development/core/dom/input-element.d.ts.map +1 -1
- package/development/core/dom/platform.d.ts +5 -0
- package/development/core/dom/platform.d.ts.map +1 -1
- package/development/core/dom.js +3 -1
- package/development/core/i18n/i18n.d.ts +3 -0
- package/development/core/i18n/i18n.d.ts.map +1 -1
- package/development/core/i18n.js +23 -2
- package/development/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
- package/development/core/mixins.js +19 -6
- package/development/core/overlay/overlay-trigger-attributes.d.ts +1 -1
- package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
- package/development/core/overlay/position.d.ts +1 -1
- package/development/core/overlay/position.d.ts.map +1 -1
- package/development/core/overlay.js +1 -1
- package/development/core/testing/scroll.d.ts +1 -0
- package/development/core/testing/scroll.d.ts.map +1 -1
- package/development/core/testing/wait-for-image-ready.d.ts.map +1 -1
- package/development/core/testing.js +6 -2
- package/development/datepicker/datepicker/datepicker.d.ts +4 -4
- package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
- package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
- package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
- package/development/datepicker/datepicker-toggle.js +4 -12
- package/development/datepicker/datepicker.js +46 -43
- package/development/dialog/dialog-title/dialog-title.d.ts +0 -1
- package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -1
- package/development/dialog/dialog-title.js +2 -5
- package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
- package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel.js +2 -7
- package/development/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
- package/development/flip-card/flip-card-details.js +3 -3
- package/development/form-field/form-field/form-field.d.ts.map +1 -1
- package/development/form-field/form-field.js +13 -146
- package/development/header/header/header.d.ts +6 -7
- package/development/header/header/header.d.ts.map +1 -1
- package/development/header/header.js +45 -34
- package/development/menu/menu/menu.d.ts +7 -8
- package/development/menu/menu/menu.d.ts.map +1 -1
- package/development/menu/menu.js +42 -41
- package/development/navigation/navigation/navigation.d.ts +7 -8
- package/development/navigation/navigation/navigation.d.ts.map +1 -1
- package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
- package/development/navigation/navigation-marker.js +3 -3
- package/development/navigation/navigation-section/navigation-section.d.ts +8 -9
- package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
- package/development/navigation/navigation-section.js +50 -47
- package/development/navigation/navigation.js +42 -40
- package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
- package/development/option/optgroup/optgroup.d.ts +2 -2
- package/development/option/optgroup/optgroup.d.ts.map +1 -1
- package/development/option/optgroup.js +3 -3
- package/development/option/option/option-base-element.d.ts.map +1 -1
- package/development/option/option.js +3 -3
- package/development/paginator/paginator.js +12 -1
- package/development/popover/popover/popover.d.ts +8 -7
- package/development/popover/popover/popover.d.ts.map +1 -1
- package/development/popover/popover.js +28 -35
- package/development/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
- package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
- package/development/radio-button/radio-button-group.js +3 -5
- package/development/select/select.d.ts +6 -3
- package/development/select/select.d.ts.map +1 -1
- package/development/select.js +20 -18
- package/development/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
- package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
- package/development/selection-expansion-panel.js +2 -7
- package/development/sidebar/sidebar/sidebar.d.ts.map +1 -1
- package/development/sidebar/sidebar.js +3 -3
- package/development/stepper/step/step.d.ts +13 -1
- package/development/stepper/step/step.d.ts.map +1 -1
- package/development/stepper/step-label.js +2 -2
- package/development/stepper/step.js +21 -6
- package/development/stepper/stepper/stepper.d.ts +1 -0
- package/development/stepper/stepper/stepper.d.ts.map +1 -1
- package/development/stepper/stepper.js +5 -1
- package/development/table/table-wrapper.js +2 -1
- package/development/time-input/time-input.d.ts +6 -8
- package/development/time-input/time-input.d.ts.map +1 -1
- package/development/time-input.js +42 -44
- package/dialog/dialog-title/dialog-title.d.ts +0 -1
- package/dialog/dialog-title/dialog-title.d.ts.map +1 -1
- package/dialog/dialog-title.js +18 -21
- package/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
- package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
- package/expansion-panel/expansion-panel.js +53 -56
- package/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
- package/flip-card/flip-card-details.js +8 -8
- package/form-field/form-field/form-field.d.ts.map +1 -1
- package/form-field/form-field.js +103 -98
- package/header/header/header.d.ts +6 -7
- package/header/header/header.d.ts.map +1 -1
- package/header/header.js +72 -70
- package/index.d.ts +4 -0
- package/index.js +4 -0
- package/menu/menu/menu.d.ts +7 -8
- package/menu/menu/menu.d.ts.map +1 -1
- package/menu/menu.js +73 -73
- package/navigation/navigation/navigation.d.ts +7 -8
- package/navigation/navigation/navigation.d.ts.map +1 -1
- package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
- package/navigation/navigation-marker.js +4 -4
- package/navigation/navigation-section/navigation-section.d.ts +8 -9
- package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
- package/navigation/navigation-section.js +75 -77
- package/navigation/navigation.js +70 -70
- package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
- package/option/optgroup/optgroup.d.ts +2 -2
- package/option/optgroup/optgroup.d.ts.map +1 -1
- package/option/optgroup.js +13 -13
- package/option/option/option-base-element.d.ts.map +1 -1
- package/option/option.js +2 -2
- package/package.json +16 -1
- package/paginator/paginator.js +44 -44
- package/popover/popover/popover.d.ts +8 -7
- package/popover/popover/popover.d.ts.map +1 -1
- package/popover/popover.js +73 -73
- package/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
- package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
- package/radio-button/radio-button-group.js +8 -8
- package/select/select.d.ts +6 -3
- package/select/select.d.ts.map +1 -1
- package/select.js +73 -73
- package/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
- package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
- package/selection-expansion-panel.js +10 -13
- package/sidebar/sidebar/sidebar.d.ts.map +1 -1
- package/sidebar/sidebar.js +2 -2
- package/standard-theme.css +166 -79
- package/stepper/step/step.d.ts +13 -1
- package/stepper/step/step.d.ts.map +1 -1
- package/stepper/step-label.js +1 -1
- package/stepper/step.js +34 -23
- package/stepper/stepper/stepper.d.ts +1 -0
- package/stepper/stepper/stepper.d.ts.map +1 -1
- package/stepper/stepper.js +19 -16
- package/table/table-wrapper.js +4 -4
- package/table.css +75 -44
- package/time-input/time-input.d.ts +6 -8
- package/time-input/time-input.d.ts.map +1 -1
- package/time-input.js +66 -73
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit';
|
|
2
|
+
import { FormRestoreReason, FormRestoreState } from '../../core/mixins.js';
|
|
3
|
+
export interface SbbChipInputTokenEndEventDetails {
|
|
4
|
+
/** The element that triggered the chip creation */
|
|
5
|
+
origin: 'input' | 'autocomplete';
|
|
6
|
+
/** The value of the new chip. Either the input or the option value depending on the origin */
|
|
7
|
+
value: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
/** Set a new value for the chip that will be created */
|
|
10
|
+
setValue(value: string): void;
|
|
11
|
+
/** Set a label for the chip that will be created */
|
|
12
|
+
setLabel(value: string): void;
|
|
13
|
+
}
|
|
14
|
+
declare const SbbChipGroupElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbRequiredMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbDisabledMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbNegativeMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbFormAssociatedMixinType<string[]>> & typeof LitElement;
|
|
15
|
+
/**
|
|
16
|
+
* The `sbb-chip-group` component is used as a container for one or multiple `sbb-chip`.
|
|
17
|
+
*
|
|
18
|
+
* @event {CustomEvent<void>} change - Notifies that the component's value has changed.
|
|
19
|
+
* @event {CustomEvent<void>} input - Notifies that the component's value has changed.
|
|
20
|
+
* @event {CustomEvent<SbbChipInputTokenEndEventDetails>} chipInputTokenEnd - Notifies that a chip is about to be created. Can be used to customize the value and the label. Can be prevented.
|
|
21
|
+
* @slot - Use the unnamed slot to add `sbb-chip` elements.
|
|
22
|
+
* @overrideType value - string[] | null
|
|
23
|
+
*/
|
|
24
|
+
export declare class SbbChipGroupElement extends SbbChipGroupElement_base {
|
|
25
|
+
static styles: CSSResultGroup;
|
|
26
|
+
static readonly events: {
|
|
27
|
+
readonly input: "input";
|
|
28
|
+
readonly change: "change";
|
|
29
|
+
readonly chipInputTokenEnd: "chipInputTokenEnd";
|
|
30
|
+
};
|
|
31
|
+
/** Value of the form element. */
|
|
32
|
+
set value(value: string[] | null);
|
|
33
|
+
get value(): string[];
|
|
34
|
+
/** The array of keys that will trigger a `chipInputTokenEnd` event. Default `['Enter']` */
|
|
35
|
+
accessor separatorKeys: string[];
|
|
36
|
+
/** Notifies that the component's value has changed. */
|
|
37
|
+
private _change;
|
|
38
|
+
/** Notifies that the component's value has changed. */
|
|
39
|
+
private _input;
|
|
40
|
+
/** Notifies that a chip is about to be created. Can be prevented. */
|
|
41
|
+
private _chipInputTokenEnd;
|
|
42
|
+
/**
|
|
43
|
+
* Listens to the changes on `readonly` and `disabled` attributes of `<input>`.
|
|
44
|
+
*/
|
|
45
|
+
private _inputAttributeObserver;
|
|
46
|
+
/**
|
|
47
|
+
* Listens to the 'size' changes on the `sbb-form-field`.
|
|
48
|
+
*/
|
|
49
|
+
private _formFieldAttributeObserver;
|
|
50
|
+
private _inputElement;
|
|
51
|
+
private _inputAbortController;
|
|
52
|
+
private _language;
|
|
53
|
+
constructor();
|
|
54
|
+
connectedCallback(): void;
|
|
55
|
+
protected willUpdate(changedProperties: PropertyValues): void;
|
|
56
|
+
/** @internal */
|
|
57
|
+
formResetCallback(): void;
|
|
58
|
+
/** @internal */
|
|
59
|
+
formStateRestoreCallback(state: FormRestoreState | null, _reason: FormRestoreReason): void;
|
|
60
|
+
protected updateFormValue(): void;
|
|
61
|
+
protected shouldValidate(name: PropertyKey | undefined): boolean;
|
|
62
|
+
protected validate(): void;
|
|
63
|
+
/** Return the list of chip elements **/
|
|
64
|
+
private _chipElements;
|
|
65
|
+
/** Return the list of enabled chip elements **/
|
|
66
|
+
private _enabledChipElements;
|
|
67
|
+
private _setupComponent;
|
|
68
|
+
/**
|
|
69
|
+
* Listen for keyboard events on the chip elements
|
|
70
|
+
**/
|
|
71
|
+
private _onChipKeyDown;
|
|
72
|
+
/**
|
|
73
|
+
* Listen for keyboard events on the input
|
|
74
|
+
**/
|
|
75
|
+
private _onInputKeyDown;
|
|
76
|
+
/**
|
|
77
|
+
* If the input is not empty, create a chip with its value
|
|
78
|
+
*/
|
|
79
|
+
private _createChipFromInput;
|
|
80
|
+
private _deleteChip;
|
|
81
|
+
/**
|
|
82
|
+
* Focus an enabled chip. If none are present, focus the input
|
|
83
|
+
* @param index The index of the enabled chip. If null, focus the last one.
|
|
84
|
+
*/
|
|
85
|
+
private _focusChip;
|
|
86
|
+
private _emitInputEvents;
|
|
87
|
+
private _createChipElement;
|
|
88
|
+
private _reactToInputChanges;
|
|
89
|
+
private _proxyStateToChips;
|
|
90
|
+
private _inheritSize;
|
|
91
|
+
private _updateInputDescription;
|
|
92
|
+
protected render(): TemplateResult;
|
|
93
|
+
}
|
|
94
|
+
declare global {
|
|
95
|
+
interface HTMLElementTagNameMap {
|
|
96
|
+
'sbb-chip-group': SbbChipGroupElement;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=chip-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip-group.d.ts","sourceRoot":"","sources":["../../../../../src/elements/chip/chip-group/chip-group.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AASb,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAKtB,MAAM,sBAAsB,CAAC;AAK9B,MAAM,WAAW,gCAAgC;IAC/C,mDAAmD;IACnD,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;IACjC,8FAA8F;IAC9F,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;;AAED;;;;;;;;GAQG;AACH,qBAEM,mBAAoB,SAAQ,wBAIjC;IACC,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM;;;;MAIlB;IAEX,iCAAiC;IACjC,IACoB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EA4B/C;IACD,IAAoB,KAAK,IAAI,MAAM,EAAE,CAEpC;IAED,2FAA2F;IAC3F,SACgB,aAAa,EAAE,MAAM,EAAE,CAAa;IAEpD,uDAAuD;IACvD,OAAO,CAAC,OAAO,CAA2E;IAE1F,uDAAuD;IACvD,OAAO,CAAC,MAAM,CAA0E;IAExF,qEAAqE;IACrE,OAAO,CAAC,kBAAkB,CAGxB;IAEF;;OAEG;IACH,OAAO,CAAC,uBAAuB,CAEtB;IAET;;OAEG;IACH,OAAO,CAAC,2BAA2B,CAE1B;IAET,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,SAAS,CAAmC;;IAepC,iBAAiB,IAAI,IAAI;cAKtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAYtE,gBAAgB;IACT,iBAAiB,IAAI,IAAI;IAIhC,gBAAgB;IACT,wBAAwB,CAC7B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,OAAO,EAAE,iBAAiB,GACzB,IAAI;IAUP,SAAS,CAAC,eAAe,IAAI,IAAI;cAQd,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO;cAItD,QAAQ,IAAI,IAAI;IASnC,wCAAwC;IACxC,OAAO,CAAC,aAAa;IAIrB,gDAAgD;IAChD,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,eAAe;IA2CvB;;QAEI;IACJ,OAAO,CAAC,cAAc;IAyBtB;;QAEI;IACJ,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,uBAAuB;cAUZ,MAAM,IAAI,cAAc;CAO5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,gBAAgB,EAAE,mBAAmB,CAAC;KACvC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip-group.d.ts","sourceRoot":"","sources":["../../../../src/elements/chip/chip-group.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
var __typeError = (msg) => {
|
|
2
|
+
throw TypeError(msg);
|
|
3
|
+
};
|
|
4
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
9
|
+
import { css, LitElement, isServer, html } from "lit";
|
|
10
|
+
import { customElement, property } from "lit/decorators.js";
|
|
11
|
+
import { inputAutocompleteEvent } from "../autocomplete.js";
|
|
12
|
+
import { isArrowKeyPressed, getNextElementIndex } from "../core/a11y.js";
|
|
13
|
+
import { SbbLanguageController } from "../core/controllers.js";
|
|
14
|
+
import { isLean } from "../core/dom.js";
|
|
15
|
+
import { EventEmitter } from "../core/eventing.js";
|
|
16
|
+
import { i18nSelectionRequired, i18nChipGroupInputDescription } from "../core/i18n.js";
|
|
17
|
+
import { SbbRequiredMixin, SbbDisabledMixin, SbbNegativeMixin, SbbFormAssociatedMixin } from "../core/mixins.js";
|
|
18
|
+
import { SbbChipElement } from "./chip.js";
|
|
19
|
+
const style = css`*,
|
|
20
|
+
::before,
|
|
21
|
+
::after {
|
|
22
|
+
box-sizing: border-box;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:host {
|
|
26
|
+
--sbb-chip-group-input-min-width: 9.375rem;
|
|
27
|
+
max-width: 100%;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
:host([data-size=s]:not([data-empty])) {
|
|
31
|
+
--sbb-chip-group-margin-block: 0.375rem 0.3125rem;
|
|
32
|
+
}
|
|
33
|
+
@media (min-width: calc(52.5rem)) {
|
|
34
|
+
:host([data-size=s]:not([data-empty])) {
|
|
35
|
+
--sbb-chip-group-margin-block: 0.3125rem 0.1875rem;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
::slotted(input) {
|
|
40
|
+
flex: 1 1 var(--sbb-chip-group-input-min-width);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
::slotted(sbb-chip) {
|
|
44
|
+
max-width: 100%;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.sbb-chip-group {
|
|
48
|
+
width: 100%;
|
|
49
|
+
display: flex;
|
|
50
|
+
flex-wrap: wrap;
|
|
51
|
+
gap: var(--sbb-spacing-fixed-1x);
|
|
52
|
+
align-items: center;
|
|
53
|
+
margin-block: var(--sbb-chip-group-margin-block);
|
|
54
|
+
}`;
|
|
55
|
+
let SbbChipGroupElement = (() => {
|
|
56
|
+
var _separatorKeys_accessor_storage, _a;
|
|
57
|
+
let _classDecorators = [customElement("sbb-chip-group")];
|
|
58
|
+
let _classDescriptor;
|
|
59
|
+
let _classExtraInitializers = [];
|
|
60
|
+
let _classThis;
|
|
61
|
+
let _classSuper = SbbRequiredMixin(SbbDisabledMixin(SbbNegativeMixin(SbbFormAssociatedMixin(LitElement))));
|
|
62
|
+
let _instanceExtraInitializers = [];
|
|
63
|
+
let _set_value_decorators;
|
|
64
|
+
let _separatorKeys_decorators;
|
|
65
|
+
let _separatorKeys_initializers = [];
|
|
66
|
+
let _separatorKeys_extraInitializers = [];
|
|
67
|
+
var SbbChipGroupElement2 = (_a = class extends _classSuper {
|
|
68
|
+
constructor() {
|
|
69
|
+
super();
|
|
70
|
+
__privateAdd(this, _separatorKeys_accessor_storage);
|
|
71
|
+
__privateSet(this, _separatorKeys_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _separatorKeys_initializers, ["Enter"])));
|
|
72
|
+
this._change = (__runInitializers(this, _separatorKeys_extraInitializers), new EventEmitter(this, SbbChipGroupElement2.events.change));
|
|
73
|
+
this._input = new EventEmitter(this, SbbChipGroupElement2.events.input);
|
|
74
|
+
this._chipInputTokenEnd = new EventEmitter(this, SbbChipGroupElement2.events.chipInputTokenEnd);
|
|
75
|
+
this._inputAttributeObserver = !isServer ? new MutationObserver(() => this._reactToInputChanges()) : null;
|
|
76
|
+
this._formFieldAttributeObserver = !isServer ? new MutationObserver(() => this._inheritSize()) : null;
|
|
77
|
+
this._language = new SbbLanguageController(this);
|
|
78
|
+
this.internals.role = "listbox";
|
|
79
|
+
this.addEventListener(SbbChipElement.events.requestDelete, (ev) => this._deleteChip(ev.target));
|
|
80
|
+
this.addEventListener("keydown", (ev) => this._onChipKeyDown(ev));
|
|
81
|
+
}
|
|
82
|
+
/** Value of the form element. */
|
|
83
|
+
set value(value) {
|
|
84
|
+
value = value ?? [];
|
|
85
|
+
super.value = value;
|
|
86
|
+
const oldValue = this.value;
|
|
87
|
+
const toRemove = [...oldValue];
|
|
88
|
+
for (const c of value) {
|
|
89
|
+
if (toRemove.includes(c)) {
|
|
90
|
+
toRemove.splice(toRemove.indexOf(c), 1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
toRemove.forEach((value2) => {
|
|
94
|
+
var _a2;
|
|
95
|
+
return (_a2 = this._chipElements().find((c) => c.value === value2)) == null ? void 0 : _a2.remove();
|
|
96
|
+
});
|
|
97
|
+
const toAdd = [...value];
|
|
98
|
+
for (const c of oldValue) {
|
|
99
|
+
if (toAdd.includes(c)) {
|
|
100
|
+
toAdd.splice(toAdd.indexOf(c), 1);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
toAdd.forEach((c) => this._createChipElement(c));
|
|
104
|
+
}
|
|
105
|
+
get value() {
|
|
106
|
+
return this._chipElements().map((c) => c.value);
|
|
107
|
+
}
|
|
108
|
+
/** The array of keys that will trigger a `chipInputTokenEnd` event. Default `['Enter']` */
|
|
109
|
+
get separatorKeys() {
|
|
110
|
+
return __privateGet(this, _separatorKeys_accessor_storage);
|
|
111
|
+
}
|
|
112
|
+
set separatorKeys(value) {
|
|
113
|
+
__privateSet(this, _separatorKeys_accessor_storage, value);
|
|
114
|
+
}
|
|
115
|
+
connectedCallback() {
|
|
116
|
+
super.connectedCallback();
|
|
117
|
+
this._setupComponent();
|
|
118
|
+
}
|
|
119
|
+
willUpdate(changedProperties) {
|
|
120
|
+
super.willUpdate(changedProperties);
|
|
121
|
+
if (changedProperties.has("disabled") || changedProperties.has("formDisabled") || changedProperties.has("negative")) {
|
|
122
|
+
this._proxyStateToChips();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** @internal */
|
|
126
|
+
formResetCallback() {
|
|
127
|
+
this.value = null;
|
|
128
|
+
}
|
|
129
|
+
/** @internal */
|
|
130
|
+
formStateRestoreCallback(state, _reason) {
|
|
131
|
+
if (!state) {
|
|
132
|
+
this.value = null;
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
this.value = state.map((entries) => entries[1]);
|
|
136
|
+
}
|
|
137
|
+
updateFormValue() {
|
|
138
|
+
const data = new FormData();
|
|
139
|
+
this.value.forEach((el) => data.append(this.name, el));
|
|
140
|
+
this.internals.setFormValue(data);
|
|
141
|
+
this.validate();
|
|
142
|
+
this._updateInputDescription();
|
|
143
|
+
}
|
|
144
|
+
shouldValidate(name) {
|
|
145
|
+
return super.shouldValidate(name) || name === "required";
|
|
146
|
+
}
|
|
147
|
+
validate() {
|
|
148
|
+
super.validate();
|
|
149
|
+
if (this.required && this.value.length === 0) {
|
|
150
|
+
this.setValidityFlag("valueMissing", i18nSelectionRequired[this._language.current]);
|
|
151
|
+
} else {
|
|
152
|
+
this.removeValidityFlag("valueMissing");
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Return the list of chip elements **/
|
|
156
|
+
_chipElements() {
|
|
157
|
+
var _a2;
|
|
158
|
+
return Array.from(((_a2 = this.querySelectorAll) == null ? void 0 : _a2.call(this, "sbb-chip")) ?? []);
|
|
159
|
+
}
|
|
160
|
+
/** Return the list of enabled chip elements **/
|
|
161
|
+
_enabledChipElements() {
|
|
162
|
+
var _a2;
|
|
163
|
+
return Array.from(((_a2 = this.querySelectorAll) == null ? void 0 : _a2.call(this, "sbb-chip:not([disabled])")) ?? []);
|
|
164
|
+
}
|
|
165
|
+
_setupComponent() {
|
|
166
|
+
var _a2, _b, _c, _d, _e;
|
|
167
|
+
const input = this.querySelector("input");
|
|
168
|
+
if (input && input !== this._inputElement) {
|
|
169
|
+
(_a2 = this._inputAbortController) == null ? void 0 : _a2.abort();
|
|
170
|
+
(_b = this._inputAttributeObserver) == null ? void 0 : _b.disconnect();
|
|
171
|
+
this._inputElement = input;
|
|
172
|
+
this._inputAbortController = new AbortController();
|
|
173
|
+
this._inputElement.addEventListener("keydown", (ev) => this._onInputKeyDown(ev), {
|
|
174
|
+
signal: this._inputAbortController.signal
|
|
175
|
+
});
|
|
176
|
+
this._inputElement.addEventListener(inputAutocompleteEvent, () => this._createChipFromInput("autocomplete"), {
|
|
177
|
+
signal: this._inputAbortController.signal
|
|
178
|
+
});
|
|
179
|
+
(_c = this._inputAttributeObserver) == null ? void 0 : _c.observe(this._inputElement, {
|
|
180
|
+
attributes: true,
|
|
181
|
+
attributeFilter: ["readonly", "disabled"]
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
this._inheritSize();
|
|
185
|
+
(_d = this._formFieldAttributeObserver) == null ? void 0 : _d.disconnect();
|
|
186
|
+
const formField = this.closest("sbb-form-field");
|
|
187
|
+
if (formField) {
|
|
188
|
+
(_e = this._formFieldAttributeObserver) == null ? void 0 : _e.observe(formField, {
|
|
189
|
+
attributes: true,
|
|
190
|
+
attributeFilter: ["size"]
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
this.toggleAttribute("data-empty", this.value.length === 0);
|
|
194
|
+
this._reactToInputChanges();
|
|
195
|
+
this.updateFormValue();
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Listen for keyboard events on the chip elements
|
|
199
|
+
**/
|
|
200
|
+
_onChipKeyDown(event) {
|
|
201
|
+
const eventTarget = event.target;
|
|
202
|
+
if (eventTarget.localName !== "sbb-chip") {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (isArrowKeyPressed(event)) {
|
|
206
|
+
const focusSteps = this._enabledChipElements();
|
|
207
|
+
const next = getNextElementIndex(event, focusSteps.indexOf(eventTarget), focusSteps.length);
|
|
208
|
+
focusSteps[next].focus();
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
switch (event.key) {
|
|
212
|
+
case "Backspace":
|
|
213
|
+
case "Delete":
|
|
214
|
+
if (!eventTarget.readonly && !eventTarget.disabled) {
|
|
215
|
+
event.preventDefault();
|
|
216
|
+
this._deleteChip(eventTarget);
|
|
217
|
+
}
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Listen for keyboard events on the input
|
|
223
|
+
**/
|
|
224
|
+
_onInputKeyDown(event) {
|
|
225
|
+
switch (event.key) {
|
|
226
|
+
case "Backspace":
|
|
227
|
+
case "ArrowLeft":
|
|
228
|
+
if (!this._inputElement.value) {
|
|
229
|
+
this._focusChip();
|
|
230
|
+
}
|
|
231
|
+
break;
|
|
232
|
+
case "Enter":
|
|
233
|
+
event.preventDefault();
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
if (this.separatorKeys.includes(event.key)) {
|
|
237
|
+
event.preventDefault();
|
|
238
|
+
this._createChipFromInput("input");
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* If the input is not empty, create a chip with its value
|
|
243
|
+
*/
|
|
244
|
+
_createChipFromInput(origin = "input") {
|
|
245
|
+
const inputValue = this._inputElement.value.trim();
|
|
246
|
+
if (!inputValue) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
const eventDetail = {
|
|
250
|
+
origin,
|
|
251
|
+
value: inputValue,
|
|
252
|
+
label: void 0,
|
|
253
|
+
setValue: (value) => eventDetail.value = value,
|
|
254
|
+
setLabel: (label) => eventDetail.label = label
|
|
255
|
+
};
|
|
256
|
+
if (!this._chipInputTokenEnd.emit(eventDetail)) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
this._createChipElement(eventDetail.value, eventDetail.label);
|
|
260
|
+
this._inputElement.value = "";
|
|
261
|
+
this._emitInputEvents();
|
|
262
|
+
}
|
|
263
|
+
_deleteChip(chip) {
|
|
264
|
+
const chips = this._enabledChipElements();
|
|
265
|
+
chip.remove();
|
|
266
|
+
this._emitInputEvents();
|
|
267
|
+
this._focusChip(chips.indexOf(chip));
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Focus an enabled chip. If none are present, focus the input
|
|
271
|
+
* @param index The index of the enabled chip. If null, focus the last one.
|
|
272
|
+
*/
|
|
273
|
+
_focusChip(index) {
|
|
274
|
+
var _a2;
|
|
275
|
+
const enabledChips = this._enabledChipElements();
|
|
276
|
+
if (index !== void 0 && enabledChips[index]) {
|
|
277
|
+
enabledChips[index].focus();
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (enabledChips.length > 0) {
|
|
281
|
+
enabledChips[enabledChips.length - 1].focus();
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
(_a2 = this._inputElement) == null ? void 0 : _a2.focus();
|
|
285
|
+
}
|
|
286
|
+
_emitInputEvents() {
|
|
287
|
+
this._input.emit();
|
|
288
|
+
this._change.emit();
|
|
289
|
+
}
|
|
290
|
+
_createChipElement(value, label) {
|
|
291
|
+
const newChip = document.createElement("sbb-chip");
|
|
292
|
+
newChip.setAttribute("value", value);
|
|
293
|
+
newChip.innerText = label ?? "";
|
|
294
|
+
this.insertBefore(newChip, this._inputElement);
|
|
295
|
+
}
|
|
296
|
+
_reactToInputChanges() {
|
|
297
|
+
var _a2;
|
|
298
|
+
this.disabled = ((_a2 = this._inputElement) == null ? void 0 : _a2.disabled) ?? false;
|
|
299
|
+
this._proxyStateToChips();
|
|
300
|
+
}
|
|
301
|
+
_proxyStateToChips() {
|
|
302
|
+
this._chipElements().forEach((c) => {
|
|
303
|
+
var _a2;
|
|
304
|
+
c.disabled = this.disabled || this.formDisabled;
|
|
305
|
+
c.readonly = ((_a2 = this._inputElement) == null ? void 0 : _a2.hasAttribute("readonly")) ?? false;
|
|
306
|
+
c.negative = this.negative;
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
_inheritSize() {
|
|
310
|
+
var _a2;
|
|
311
|
+
this.setAttribute("data-size", ((_a2 = this.closest("sbb-form-field")) == null ? void 0 : _a2.size) ?? (isLean() ? "s" : "m"));
|
|
312
|
+
}
|
|
313
|
+
_updateInputDescription() {
|
|
314
|
+
if (!this._inputElement) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
this._inputElement.setAttribute("aria-description", `${i18nChipGroupInputDescription[this._language.current]} ${this.value.length}`);
|
|
318
|
+
}
|
|
319
|
+
render() {
|
|
320
|
+
return html`
|
|
321
|
+
<div class="sbb-chip-group">
|
|
322
|
+
<slot @slotchange=${this._setupComponent}></slot>
|
|
323
|
+
</div>
|
|
324
|
+
`;
|
|
325
|
+
}
|
|
326
|
+
}, _separatorKeys_accessor_storage = new WeakMap(), _classThis = _a, (() => {
|
|
327
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
328
|
+
_set_value_decorators = [property({ type: Array })];
|
|
329
|
+
_separatorKeys_decorators = [property({ attribute: "separator-keys", type: Array })];
|
|
330
|
+
__esDecorate(_a, null, _set_value_decorators, { kind: "setter", name: "value", static: false, private: false, access: { has: (obj) => "value" in obj, set: (obj, value) => {
|
|
331
|
+
obj.value = value;
|
|
332
|
+
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
333
|
+
__esDecorate(_a, null, _separatorKeys_decorators, { kind: "accessor", name: "separatorKeys", static: false, private: false, access: { has: (obj) => "separatorKeys" in obj, get: (obj) => obj.separatorKeys, set: (obj, value) => {
|
|
334
|
+
obj.separatorKeys = value;
|
|
335
|
+
} }, metadata: _metadata }, _separatorKeys_initializers, _separatorKeys_extraInitializers);
|
|
336
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
337
|
+
SbbChipGroupElement2 = _classThis = _classDescriptor.value;
|
|
338
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
339
|
+
})(), _a.styles = style, _a.events = {
|
|
340
|
+
input: "input",
|
|
341
|
+
change: "change",
|
|
342
|
+
chipInputTokenEnd: "chipInputTokenEnd"
|
|
343
|
+
}, __runInitializers(_classThis, _classExtraInitializers), _a);
|
|
344
|
+
return SbbChipGroupElement2 = _classThis;
|
|
345
|
+
})();
|
|
346
|
+
export {
|
|
347
|
+
SbbChipGroupElement
|
|
348
|
+
};
|
|
349
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1ncm91cC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NoaXAvY2hpcC1ncm91cC9jaGlwLWdyb3VwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICBMaXRFbGVtZW50LFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGlucHV0QXV0b2NvbXBsZXRlRXZlbnQgfSBmcm9tICcuLi8uLi9hdXRvY29tcGxldGUuanMnO1xuaW1wb3J0IHsgZ2V0TmV4dEVsZW1lbnRJbmRleCwgaXNBcnJvd0tleVByZXNzZWQgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBpc0xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7IGkxOG5DaGlwR3JvdXBJbnB1dERlc2NyaXB0aW9uLCBpMThuU2VsZWN0aW9uUmVxdWlyZWQgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJEaXNhYmxlZE1peGluLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxuICBTYmJSZXF1aXJlZE1peGluLFxufSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgeyBTYmJDaGlwRWxlbWVudCB9IGZyb20gJy4uL2NoaXAuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jaGlwLWdyb3VwLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHMge1xuICAvKiogVGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNoaXAgY3JlYXRpb24gKi9cbiAgb3JpZ2luOiAnaW5wdXQnIHwgJ2F1dG9jb21wbGV0ZSc7XG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBjaGlwLiBFaXRoZXIgdGhlIGlucHV0IG9yIHRoZSBvcHRpb24gdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW4gKi9cbiAgdmFsdWU6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBTZXQgYSBuZXcgdmFsdWUgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHNldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICAvKiogU2V0IGEgbGFiZWwgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHNldExhYmVsKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBgc2JiLWNoaXAtZ3JvdXBgIGNvbXBvbmVudCBpcyB1c2VkIGFzIGEgY29udGFpbmVyIGZvciBvbmUgb3IgbXVsdGlwbGUgYHNiYi1jaGlwYC5cbiAqXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBjaGFuZ2UgLSBOb3RpZmllcyB0aGF0IHRoZSBjb21wb25lbnQncyB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGlucHV0IC0gTm90aWZpZXMgdGhhdCB0aGUgY29tcG9uZW50J3MgdmFsdWUgaGFzIGNoYW5nZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnREZXRhaWxzPn0gY2hpcElucHV0VG9rZW5FbmQgLSBOb3RpZmllcyB0aGF0IGEgY2hpcCBpcyBhYm91dCB0byBiZSBjcmVhdGVkLiBDYW4gYmUgdXNlZCB0byBjdXN0b21pemUgdGhlIHZhbHVlIGFuZCB0aGUgbGFiZWwuIENhbiBiZSBwcmV2ZW50ZWQuXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBgc2JiLWNoaXBgIGVsZW1lbnRzLlxuICogQG92ZXJyaWRlVHlwZSB2YWx1ZSAtIHN0cmluZ1tdIHwgbnVsbFxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItY2hpcC1ncm91cCcpXG5jbGFzcyBTYmJDaGlwR3JvdXBFbGVtZW50IGV4dGVuZHMgU2JiUmVxdWlyZWRNaXhpbihcbiAgU2JiRGlzYWJsZWRNaXhpbihcbiAgICBTYmJOZWdhdGl2ZU1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW48dHlwZW9mIExpdEVsZW1lbnQsIHN0cmluZ1tdPihMaXRFbGVtZW50KSksXG4gICksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIGNoYW5nZTogJ2NoYW5nZScsXG4gICAgY2hpcElucHV0VG9rZW5FbmQ6ICdjaGlwSW5wdXRUb2tlbkVuZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEFycmF5IH0pXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZ1tdIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdmFsdWUgPz8gW107XG4gICAgc3VwZXIudmFsdWUgPSB2YWx1ZTtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAvLyBTdWJ0cmFjdCBmcm9tICdvbGRWYWx1ZScgdGhlIG5ldyAndmFsdWUnXG4gICAgLy8gVGhlIHJlc3VsdCBhcmUgdGhlIGNoaXBzIHRvIHJlbW92ZSAoaGFuZGxlIGR1cGxpY2F0ZXMpXG4gICAgY29uc3QgdG9SZW1vdmUgPSBbLi4ub2xkVmFsdWVdO1xuICAgIGZvciAoY29uc3QgYyBvZiB2YWx1ZSkge1xuICAgICAgaWYgKHRvUmVtb3ZlLmluY2x1ZGVzKGMpKSB7XG4gICAgICAgIHRvUmVtb3ZlLnNwbGljZSh0b1JlbW92ZS5pbmRleE9mKGMpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdG9SZW1vdmUuZm9yRWFjaCgodmFsdWUpID0+XG4gICAgICB0aGlzLl9jaGlwRWxlbWVudHMoKVxuICAgICAgICAuZmluZCgoYykgPT4gYy52YWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgID8ucmVtb3ZlKCksXG4gICAgKTtcblxuICAgIC8vIFN1YnRyYWN0IGZyb20gdGhlIG5ldyAndmFsdWUnIHdoYXQgd2FzIGFscmVhZHkgcHJlc2VudFxuICAgIC8vIFRoZSByZXN1bHQgYXJlIHRoZSBuZXcgY2hpcHMgdG8gYWRkIChoYW5kbGUgZHVwbGljYXRlcylcbiAgICBjb25zdCB0b0FkZCA9IFsuLi52YWx1ZV07XG4gICAgZm9yIChjb25zdCBjIG9mIG9sZFZhbHVlKSB7XG4gICAgICBpZiAodG9BZGQuaW5jbHVkZXMoYykpIHtcbiAgICAgICAgdG9BZGQuc3BsaWNlKHRvQWRkLmluZGV4T2YoYyksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0b0FkZC5mb3JFYWNoKChjKSA9PiB0aGlzLl9jcmVhdGVDaGlwRWxlbWVudChjKSk7XG4gIH1cbiAgcHVibGljIG92ZXJyaWRlIGdldCB2YWx1ZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaXBFbGVtZW50cygpLm1hcCgoYykgPT4gYy52YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIGFycmF5IG9mIGtleXMgdGhhdCB3aWxsIHRyaWdnZXIgYSBgY2hpcElucHV0VG9rZW5FbmRgIGV2ZW50LiBEZWZhdWx0IGBbJ0VudGVyJ11gICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3NlcGFyYXRvci1rZXlzJywgdHlwZTogQXJyYXkgfSlcbiAgcHVibGljIGFjY2Vzc29yIHNlcGFyYXRvcktleXM6IHN0cmluZ1tdID0gWydFbnRlciddO1xuXG4gIC8qKiBOb3RpZmllcyB0aGF0IHRoZSBjb21wb25lbnQncyB2YWx1ZSBoYXMgY2hhbmdlZC4gKi9cbiAgcHJpdmF0ZSBfY2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYkNoaXBHcm91cEVsZW1lbnQuZXZlbnRzLmNoYW5nZSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLiAqL1xuICBwcml2YXRlIF9pbnB1dDogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcih0aGlzLCBTYmJDaGlwR3JvdXBFbGVtZW50LmV2ZW50cy5pbnB1dCk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgYSBjaGlwIGlzIGFib3V0IHRvIGJlIGNyZWF0ZWQuIENhbiBiZSBwcmV2ZW50ZWQuICovXG4gIHByaXZhdGUgX2NoaXBJbnB1dFRva2VuRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlscz4oXG4gICAgdGhpcyxcbiAgICBTYmJDaGlwR3JvdXBFbGVtZW50LmV2ZW50cy5jaGlwSW5wdXRUb2tlbkVuZCxcbiAgKTtcblxuICAvKipcbiAgICogTGlzdGVucyB0byB0aGUgY2hhbmdlcyBvbiBgcmVhZG9ubHlgIGFuZCBgZGlzYWJsZWRgIGF0dHJpYnV0ZXMgb2YgYDxpbnB1dD5gLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5wdXRBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy5fcmVhY3RUb0lucHV0Q2hhbmdlcygpKVxuICAgIDogbnVsbDtcblxuICAvKipcbiAgICogTGlzdGVucyB0byB0aGUgJ3NpemUnIGNoYW5nZXMgb24gdGhlIGBzYmItZm9ybS1maWVsZGAuXG4gICAqL1xuICBwcml2YXRlIF9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy5faW5oZXJpdFNpemUoKSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pbnB1dEFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5pbnRlcm5hbHMucm9sZSA9ICdsaXN0Ym94JztcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihTYmJDaGlwRWxlbWVudC5ldmVudHMucmVxdWVzdERlbGV0ZSwgKGV2KSA9PlxuICAgICAgdGhpcy5fZGVsZXRlQ2hpcChldi50YXJnZXQgYXMgU2JiQ2hpcEVsZW1lbnQpLFxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXYpID0+IHRoaXMuX29uQ2hpcEtleURvd24oZXYpKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3NldHVwQ29tcG9uZW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXMpOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnZGlzYWJsZWQnKSB8fFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdmb3JtRGlzYWJsZWQnKSB8fFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpXG4gICAgKSB7XG4gICAgICB0aGlzLl9wcm94eVN0YXRlVG9DaGlwcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGhlIHN0YXRlIGZvcm1hdCBpcyBbJ2ZpZWxkLW5hbWUnLCAndmFsdWUnXVtdXG4gICAgdGhpcy52YWx1ZSA9IChzdGF0ZSBhcyBbc3RyaW5nLCBzdHJpbmddW10pLm1hcCgoZW50cmllcykgPT4gZW50cmllc1sxXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICB0aGlzLnZhbHVlLmZvckVhY2goKGVsKSA9PiBkYXRhLmFwcGVuZCh0aGlzLm5hbWUsIGVsKSk7XG4gICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKGRhdGEpO1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLl91cGRhdGVJbnB1dERlc2NyaXB0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVmFsaWRhdGUobmFtZSkgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB2YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNldFZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJywgaTE4blNlbGVjdGlvblJlcXVpcmVkW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVWYWxpZGl0eUZsYWcoJ3ZhbHVlTWlzc2luZycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIGxpc3Qgb2YgY2hpcCBlbGVtZW50cyAqKi9cbiAgcHJpdmF0ZSBfY2hpcEVsZW1lbnRzKCk6IFNiYkNoaXBFbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItY2hpcCcpID8/IFtdKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIGxpc3Qgb2YgZW5hYmxlZCBjaGlwIGVsZW1lbnRzICoqL1xuICBwcml2YXRlIF9lbmFibGVkQ2hpcEVsZW1lbnRzKCk6IFNiYkNoaXBFbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItY2hpcDpub3QoW2Rpc2FibGVkXSknKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cENvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcblxuICAgIC8vIENvbm5lY3QgdG8gdGhlIGlucHV0XG4gICAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSB0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5faW5wdXRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50ID0gaW5wdXQ7XG5cbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXYpID0+IHRoaXMuX29uSW5wdXRLZXlEb3duKGV2KSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIGlucHV0QXV0b2NvbXBsZXRlRXZlbnQsXG4gICAgICAgICgpID0+IHRoaXMuX2NyZWF0ZUNoaXBGcm9tSW5wdXQoJ2F1dG9jb21wbGV0ZScpLFxuICAgICAgICB7XG4gICAgICAgICAgc2lnbmFsOiB0aGlzLl9pbnB1dEFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICB0aGlzLl9pbnB1dEF0dHJpYnV0ZU9ic2VydmVyPy5vYnNlcnZlKHRoaXMuX2lucHV0RWxlbWVudCwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsncmVhZG9ubHknLCAnZGlzYWJsZWQnXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEluaGVyaXQgc2l6ZSBmcm9tIHRoZSBmb3JtLWZpZWxkIGFuZCBvYnNlcnZlIGZvciBjaGFuZ2VzXG4gICAgdGhpcy5faW5oZXJpdFNpemUoKTtcbiAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdCgnc2JiLWZvcm0tZmllbGQnKTtcbiAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8ub2JzZXJ2ZShmb3JtRmllbGQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ3NpemUnXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWVtcHR5JywgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApO1xuICAgIHRoaXMuX3JlYWN0VG9JbnB1dENoYW5nZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3Iga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBjaGlwIGVsZW1lbnRzXG4gICAqKi9cbiAgcHJpdmF0ZSBfb25DaGlwS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYkNoaXBFbGVtZW50O1xuICAgIGlmIChldmVudFRhcmdldC5sb2NhbE5hbWUgIT09ICdzYmItY2hpcCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBcnJvdyBrZXlzIGFsbG93IG5hdmlnYXRpb24gYmV0d2VlbiBjaGlwcyBmb2N1cyBzdGVwc1xuICAgIGlmIChpc0Fycm93S2V5UHJlc3NlZChldmVudCkpIHtcbiAgICAgIGNvbnN0IGZvY3VzU3RlcHMgPSB0aGlzLl9lbmFibGVkQ2hpcEVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBuZXh0ID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldmVudCwgZm9jdXNTdGVwcy5pbmRleE9mKGV2ZW50VGFyZ2V0KSwgZm9jdXNTdGVwcy5sZW5ndGgpO1xuICAgICAgZm9jdXNTdGVwc1tuZXh0XS5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgY2FzZSAnRGVsZXRlJzpcbiAgICAgICAgaWYgKCFldmVudFRhcmdldC5yZWFkb25seSAmJiAhZXZlbnRUYXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuX2RlbGV0ZUNoaXAoZXZlbnRUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gZm9yIGtleWJvYXJkIGV2ZW50cyBvbiB0aGUgaW5wdXRcbiAgICoqL1xuICBwcml2YXRlIF9vbklucHV0S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dEVsZW1lbnQhLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5fZm9jdXNDaGlwKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnRzIHRoZSBmb3JtIHN1Ym1pdFxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciB0eXBlZCBvbmUgb2YgdGhlIHNlcGFyYXRvciBrZXlzLCB0cmlnZ2VyIGEgY2hpcElucHV0VG9rZW5FbmQgZXZlbnRcbiAgICBpZiAodGhpcy5zZXBhcmF0b3JLZXlzLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgdHlwaW5nIHRoZSBzZXBhcmF0b3Iga2V5IGludG8gdGhlIGlucHV0XG4gICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdpbnB1dCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgaW5wdXQgaXMgbm90IGVtcHR5LCBjcmVhdGUgYSBjaGlwIHdpdGggaXRzIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVDaGlwRnJvbUlucHV0KG9yaWdpbjogJ2lucHV0JyB8ICdhdXRvY29tcGxldGUnID0gJ2lucHV0Jyk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLl9pbnB1dEVsZW1lbnQhLnZhbHVlLnRyaW0oKTtcbiAgICBpZiAoIWlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudERldGFpbDogU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHMgPSB7XG4gICAgICBvcmlnaW46IG9yaWdpbixcbiAgICAgIHZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgIHNldFZhbHVlOiAodmFsdWU6IHN0cmluZykgPT4gKGV2ZW50RGV0YWlsLnZhbHVlID0gdmFsdWUpLFxuICAgICAgc2V0TGFiZWw6IChsYWJlbDogc3RyaW5nKSA9PiAoZXZlbnREZXRhaWwubGFiZWwgPSBsYWJlbCksXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5fY2hpcElucHV0VG9rZW5FbmQuZW1pdChldmVudERldGFpbCkpIHtcbiAgICAgIHJldHVybjsgLy8gZXZlbnQgcHJldmVudGVkOyBkbyBub3RoaW5nICh0aGUgY29uc3VtZXIgaGFzIHRvIGNyZWF0ZSB0aGUgY2hpcClcbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVDaGlwRWxlbWVudChldmVudERldGFpbC52YWx1ZSwgZXZlbnREZXRhaWwubGFiZWwpO1xuICAgIHRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUgPSAnJzsgLy8gRW1wdHkgdGhlIGlucHV0XG4gICAgdGhpcy5fZW1pdElucHV0RXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIF9kZWxldGVDaGlwKGNoaXA6IFNiYkNoaXBFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hpcHMgPSB0aGlzLl9lbmFibGVkQ2hpcEVsZW1lbnRzKCk7XG4gICAgY2hpcC5yZW1vdmUoKTtcbiAgICB0aGlzLl9lbWl0SW5wdXRFdmVudHMoKTtcbiAgICB0aGlzLl9mb2N1c0NoaXAoY2hpcHMuaW5kZXhPZihjaGlwKSk7IC8vIEZvY3VzIHRoZSBuZXh0IGNoaXBcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyBhbiBlbmFibGVkIGNoaXAuIElmIG5vbmUgYXJlIHByZXNlbnQsIGZvY3VzIHRoZSBpbnB1dFxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbmFibGVkIGNoaXAuIElmIG51bGwsIGZvY3VzIHRoZSBsYXN0IG9uZS5cbiAgICovXG4gIHByaXZhdGUgX2ZvY3VzQ2hpcChpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRDaGlwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcblxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGVuYWJsZWRDaGlwc1tpbmRleF0pIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tpbmRleF0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlZENoaXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tlbmFibGVkQ2hpcHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0SW5wdXRFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5faW5wdXQuZW1pdCgpO1xuICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVDaGlwRWxlbWVudCh2YWx1ZTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0NoaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzYmItY2hpcCcpO1xuICAgIG5ld0NoaXAuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHZhbHVlKTtcbiAgICBuZXdDaGlwLmlubmVyVGV4dCA9IGxhYmVsID8/ICcnO1xuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKG5ld0NoaXAsIHRoaXMuX2lucHV0RWxlbWVudCEpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhY3RUb0lucHV0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5faW5wdXRFbGVtZW50Py5kaXNhYmxlZCA/PyBmYWxzZTtcbiAgICB0aGlzLl9wcm94eVN0YXRlVG9DaGlwcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJveHlTdGF0ZVRvQ2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hpcEVsZW1lbnRzKCkuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgYy5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQ7XG4gICAgICBjLnJlYWRvbmx5ID0gdGhpcy5faW5wdXRFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgPz8gZmFsc2U7XG4gICAgICBjLm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaGVyaXRTaXplKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLXNpemUnLCB0aGlzLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJyk/LnNpemUgPz8gKGlzTGVhbigpID8gJ3MnIDogJ20nKSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVJbnB1dERlc2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lucHV0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAnYXJpYS1kZXNjcmlwdGlvbicsXG4gICAgICBgJHtpMThuQ2hpcEdyb3VwSW5wdXREZXNjcmlwdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHt0aGlzLnZhbHVlLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2hpcC1ncm91cFwiPlxuICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX3NldHVwQ29tcG9uZW50fT48L3Nsb3Q+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2hpcC1ncm91cCc6IFNiYkNoaXBHcm91cEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTYmJDaGlwR3JvdXBFbGVtZW50IiwidmFsdWUiLCJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBbURNLHVCQUFtQixNQUFBOzswQkFEeEIsY0FBYyxnQkFBZ0IsQ0FBQzs7OztvQkFDRSxpQkFDaEMsaUJBQ0UsaUJBQWlCLHVCQUFvRCxVQUFVLENBQUMsQ0FBQyxDQUNsRjs7Ozs7O0FBSHVCQSxNQUFBQSx3QkFBQSxtQkFBUSxZQUlqQztBQUFBLElBNkVDLGNBQUE7O0FBaENBO0FBQWdCLHlCQUFBLGtDQWpEWixrQkFBbUIsTUFBQSwwQkFBQSxHQUFBLGtCQUFBLE1BQUEsNkJBaURt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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../../src/elements/chip/chip.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|