@sbb-esta/lyne-elements-dev 5.0.0-next-dev.1776866482 → 5.0.0-next-dev.1776872994
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.js +1 -1
- package/autocomplete/autocomplete.component.js +1 -1
- package/{autocomplete-base-element-gPLexIVc.js → autocomplete-base-element-BmiLbRHZ.js} +1 -1
- package/autocomplete.js +1 -1
- package/autocomplete.pure.js +1 -1
- package/{block-link-common-CiqQc2Rs.js → block-link-common-BiM6tnUZ.js} +1 -1
- package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +1 -1
- package/{breadcrumb-group.component-Bfm4RZu7.js → breadcrumb-group.component-De3Lu3lx.js} +1 -1
- package/breadcrumb.js +1 -1
- package/breadcrumb.pure.js +1 -1
- package/button/common/button-common.js +1 -1
- package/button-common-Cu47yCSS.js +85 -0
- package/button.js +1 -1
- package/button.pure.js +1 -1
- package/calendar/calendar/calendar.component.js +1 -1
- package/{calendar.component-ZyfTrKs_.js → calendar.component-nWdtZYqg.js} +1 -1
- package/calendar.js +1 -1
- package/calendar.pure.js +1 -1
- package/card/card-badge/card-badge.component.js +1 -1
- package/{card-badge.component-CsEpGTHm.js → card-badge.component-CEqox6TU.js} +1 -1
- package/card.js +1 -1
- package/card.pure.js +1 -1
- package/checkbox/checkbox.component.js +1 -1
- package/checkbox/common/checkbox-common.js +1 -1
- package/{checkbox-common-Bo4u1RXX.js → checkbox-common-DSmxKbmR.js} +1 -1
- package/{checkbox.component-vjqZh2aC.js → checkbox.component-CR2aIgjA.js} +1 -1
- package/checkbox.js +2 -2
- package/checkbox.pure.js +2 -2
- package/chip/chip-group/chip-group.component.js +1 -1
- package/{chip-group.component-DPzfaV_H.js → chip-group.component-DbNctvjy.js} +1 -1
- package/chip.js +1 -1
- package/chip.pure.js +1 -1
- package/{compact-paginator.component-DEEhXiMm.js → compact-paginator.component-Dyu9bezr.js} +1 -1
- package/core/styles/core.scss +17 -73
- package/core/styles/mixins/typo.scss +2 -2
- package/core.css +67 -65
- package/custom-elements.json +3179 -3179
- package/development/autocomplete/autocomplete-base-element.js +1 -1
- package/development/autocomplete/autocomplete.component.js +1 -1
- package/development/autocomplete-base-element-BC3IUhrb.js +686 -0
- package/development/autocomplete.js +1 -1
- package/development/autocomplete.pure.js +1 -1
- package/development/{block-link-common-B9Vx8CTp.js → block-link-common-qMULXu4g.js} +2 -2
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +1 -1
- package/development/breadcrumb-group.component-BC1mWiQE.js +193 -0
- package/development/breadcrumb.js +1 -1
- package/development/breadcrumb.pure.js +1 -1
- package/development/button/common/button-common.js +1 -1
- package/development/{button-common-jaQVRdwS.js → button-common-ChY47M8t.js} +3 -3
- package/development/button.js +1 -1
- package/development/button.pure.js +1 -1
- package/development/calendar/calendar/calendar.component.js +1 -1
- package/development/calendar.component-B5dz7mau.js +1451 -0
- package/development/calendar.js +1 -1
- package/development/calendar.pure.js +1 -1
- package/development/card/card-badge/card-badge.component.js +1 -1
- package/development/card-badge.component-CQBLpmpo.js +83 -0
- package/development/card.js +1 -1
- package/development/card.pure.js +1 -1
- package/development/checkbox/checkbox.component.js +1 -1
- package/development/checkbox/common/checkbox-common.js +1 -1
- package/development/checkbox-common-DOoEKgML.js +84 -0
- package/development/{checkbox.component-DgrfkdyZ.js → checkbox.component-DZjhQhbB.js} +2 -2
- package/development/checkbox.js +2 -2
- package/development/checkbox.pure.js +2 -2
- package/development/chip/chip-group/chip-group.component.js +1 -1
- package/development/chip-group.component-B4Mjcep2.js +402 -0
- package/development/chip.js +1 -1
- package/development/chip.pure.js +1 -1
- package/development/compact-paginator.component-CRojCci5.js +51 -0
- package/development/error.component-TvgLhaZh.js +53 -0
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +1 -1
- package/development/expansion-panel-header.component-Ok8Qmq5K.js +82 -0
- package/development/expansion-panel.js +1 -1
- package/development/expansion-panel.pure.js +1 -1
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
- package/development/{file-selector-dropzone.component-dyv_u-Ga.js → file-selector-dropzone.component-B1Y5qOjb.js} +2 -2
- package/development/file-selector.js +1 -1
- package/development/file-selector.pure.js +1 -1
- package/development/footer/footer.component.js +1 -1
- package/development/footer.component-kFeZqO-Q.js +169 -0
- package/development/footer.js +1 -1
- package/development/footer.pure.js +1 -1
- package/development/form-field/error/error.component.js +1 -1
- package/development/form-field/form-field/form-field.component.js +1 -1
- package/development/form-field/hint/hint.component.js +1 -1
- package/development/form-field.component-CdTnOAi2.js +703 -0
- package/development/form-field.js +3 -3
- package/development/form-field.pure.js +3 -3
- package/development/header/header/header.component.js +1 -1
- package/development/header.component-BmZkCs9m.js +335 -0
- package/development/header.js +1 -1
- package/development/header.pure.js +1 -1
- package/development/hint.component-D5rTFJ-O.js +36 -0
- package/development/link/common/block-link-common.js +1 -1
- package/development/link.js +1 -1
- package/development/link.pure.js +1 -1
- package/development/message/message.component.js +1 -1
- package/development/message.component-Dzah9lXK.js +43 -0
- package/development/message.js +1 -1
- package/development/message.pure.js +1 -1
- package/development/navigation/common/navigation-action-common.js +1 -1
- package/development/navigation/navigation-marker/navigation-marker.component.js +1 -1
- package/development/navigation/navigation-section/navigation-section.component.js +1 -1
- package/development/{navigation-action-common-ZBiv0Xiw.js → navigation-action-common-B2soWZWW.js} +2 -2
- package/development/{navigation-marker.component-BsfPR_uk.js → navigation-marker.component-BRdbbjF5.js} +2 -2
- package/development/{navigation-section.component-BSvxMUxM.js → navigation-section.component-VwCJlOfE.js} +2 -2
- package/development/navigation.js +3 -3
- package/development/navigation.pure.js +3 -3
- package/development/notification/notification.component.js +1 -1
- package/development/notification.component-BgF5aGrn.js +271 -0
- package/development/notification.js +1 -1
- package/development/notification.pure.js +1 -1
- package/development/paginator/compact-paginator/compact-paginator.component.js +1 -1
- package/development/paginator/paginator/paginator.component.js +1 -1
- package/development/paginator.component-BlyTYIs0.js +261 -0
- package/development/paginator.js +2 -2
- package/development/paginator.pure.js +2 -2
- package/development/radio-button/common/radio-button-common.js +1 -1
- package/development/radio-button/radio-button.component.js +1 -1
- package/development/radio-button-common-ZMs5IFm2.js +125 -0
- package/development/{radio-button.component-DAgH41z0.js → radio-button.component-DggZ7RZD.js} +2 -2
- package/development/radio-button.js +2 -2
- package/development/radio-button.pure.js +2 -2
- package/development/select/select.component.js +1 -1
- package/development/select.component-CZI19HAK.js +804 -0
- package/development/select.js +1 -1
- package/development/select.pure.js +1 -1
- package/development/status/status.component.js +1 -1
- package/development/status.component-BtJ8ri61.js +110 -0
- package/development/status.js +1 -1
- package/development/status.pure.js +1 -1
- package/development/step-label.component-Dfx9rLcN.js +126 -0
- package/development/stepper/step-label/step-label.component.js +1 -1
- package/development/stepper.js +1 -1
- package/development/stepper.pure.js +1 -1
- package/development/styles-WppEBrlW.js +14 -0
- package/development/{tab-label.component-Du1W0dxN.js → tab-label.component-Ggx6qaIk.js} +2 -2
- package/development/tabs/common/styles.js +1 -1
- package/development/tabs/tab-label/tab-label.component.js +1 -1
- package/development/tabs.js +2 -2
- package/development/tabs.pure.js +2 -2
- package/development/tag/tag/tag.component.js +1 -1
- package/development/tag.component-Davxisfj.js +241 -0
- package/development/tag.js +1 -1
- package/development/tag.pure.js +1 -1
- package/development/teaser-hero/teaser-hero.component.js +1 -1
- package/development/teaser-hero.component-bp9IsVmY.js +100 -0
- package/development/teaser-hero.js +1 -1
- package/development/teaser-hero.pure.js +1 -1
- package/development/timetable-occupancy/timetable-occupancy.component.js +1 -1
- package/development/{timetable-occupancy.component-D6BIvkpY.js → timetable-occupancy.component-B-uVA9KC.js} +2 -2
- package/development/timetable-occupancy.js +1 -1
- package/development/timetable-occupancy.pure.js +1 -1
- package/development/title/title-base.js +1 -1
- package/development/title/title.component.js +1 -1
- package/development/{title-base-CWLTIRh_.js → title-base-DKVyL7TQ.js} +2 -2
- package/development/{title.component-TCKohHBO.js → title.component-BEEzA9cF.js} +2 -2
- package/development/title.js +2 -2
- package/development/title.pure.js +2 -2
- package/development/toast/toast.component.js +1 -1
- package/development/{toast.component-CZL72aVO.js → toast.component-1YR4wmm9.js} +2 -2
- package/development/toast.js +1 -1
- package/development/toast.pure.js +1 -1
- package/development/toggle/toggle/toggle.component.js +1 -1
- package/development/toggle.component-CQYpVyvs.js +244 -0
- package/development/toggle.js +1 -1
- package/development/toggle.pure.js +1 -1
- package/development/tooltip/tooltip.component.js +1 -1
- package/development/tooltip.component-Br7aDPFn.js +369 -0
- package/development/tooltip.js +1 -1
- package/development/tooltip.pure.js +1 -1
- package/development/train/train-wagon/train-wagon.component.js +1 -1
- package/development/{train-wagon.component-X0XSMLK_.js → train-wagon.component-B6V4dPKn.js} +2 -2
- package/development/train.js +1 -1
- package/development/train.pure.js +1 -1
- package/{error.component-BLChP2fE.js → error.component-D3JgDJfN.js} +1 -1
- package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +1 -1
- package/{expansion-panel-header.component-DdRIlyms.js → expansion-panel-header.component-DYvq-uUi.js} +1 -1
- package/expansion-panel.js +1 -1
- package/expansion-panel.pure.js +1 -1
- package/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
- package/{file-selector-dropzone.component-Bz3Wpl0X.js → file-selector-dropzone.component-BSF-kegh.js} +1 -1
- package/file-selector.js +1 -1
- package/file-selector.pure.js +1 -1
- package/footer/footer.component.js +1 -1
- package/{footer.component-Don15vOd.js → footer.component-CdTEaV6u.js} +1 -1
- package/footer.js +1 -1
- package/footer.pure.js +1 -1
- package/form-field/error/error.component.js +1 -1
- package/form-field/form-field/form-field.component.js +1 -1
- package/form-field/hint/hint.component.js +1 -1
- package/{form-field.component-DbV7fMoe.js → form-field.component-Dtzbp6-e.js} +1 -1
- package/form-field.js +3 -3
- package/form-field.pure.js +3 -3
- package/header/header/header.component.js +1 -1
- package/{header.component-D-WVEMFn.js → header.component-DoAFSXgO.js} +1 -1
- package/header.js +1 -1
- package/header.pure.js +1 -1
- package/{hint.component-CaF6CBCN.js → hint.component-BB_h0G6v.js} +1 -1
- package/link/common/block-link-common.js +1 -1
- package/link.js +1 -1
- package/link.pure.js +1 -1
- package/message/message.component.js +1 -1
- package/message.component-CF-_MD7m.js +26 -0
- package/message.js +1 -1
- package/message.pure.js +1 -1
- package/navigation/common/navigation-action-common.js +1 -1
- package/navigation/navigation-marker/navigation-marker.component.js +1 -1
- package/navigation/navigation-section/navigation-section.component.js +1 -1
- package/{navigation-action-common-Dm47M2BG.js → navigation-action-common-D2vwX-oy.js} +1 -1
- package/{navigation-marker.component-1VHe19c9.js → navigation-marker.component-BQzC4gn_.js} +1 -1
- package/{navigation-section.component-DrnbQAZX.js → navigation-section.component-CR-FanCa.js} +1 -1
- package/navigation.js +3 -3
- package/navigation.pure.js +3 -3
- package/notification/notification.component.js +1 -1
- package/{notification.component-IsSZe3Ul.js → notification.component-D9oxjMJs.js} +1 -1
- package/notification.js +1 -1
- package/notification.pure.js +1 -1
- package/off-brand-theme.css +67 -65
- package/package.json +2 -2
- package/paginator/compact-paginator/compact-paginator.component.js +1 -1
- package/paginator/paginator/paginator.component.js +1 -1
- package/{paginator.component-BkECB-iV.js → paginator.component-DA_wUypF.js} +1 -1
- package/paginator.js +2 -2
- package/paginator.pure.js +2 -2
- package/radio-button/common/radio-button-common.js +1 -1
- package/radio-button/radio-button.component.js +1 -1
- package/{radio-button-common-CQyKqDLJ.js → radio-button-common-iNYco_B8.js} +1 -1
- package/{radio-button.component-Cenb6FL5.js → radio-button.component-v5czJYC3.js} +1 -1
- package/radio-button.js +2 -2
- package/radio-button.pure.js +2 -2
- package/safety-theme.css +67 -65
- package/select/select.component.js +1 -1
- package/{select.component-BcDZm7EM.js → select.component-CCFfP21g.js} +1 -1
- package/select.js +1 -1
- package/select.pure.js +1 -1
- package/standard-theme.css +67 -65
- package/status/status.component.js +1 -1
- package/{status.component-CgMvY4Pe.js → status.component-5SKEusnj.js} +1 -1
- package/status.js +1 -1
- package/status.pure.js +1 -1
- package/step-label.component-DM7lQw8b.js +77 -0
- package/stepper/step-label/step-label.component.js +1 -1
- package/stepper.js +1 -1
- package/stepper.pure.js +1 -1
- package/styles-DisU4TWi.js +5 -0
- package/{tab-label.component-CH24fqmB.js → tab-label.component-JjktN30A.js} +1 -1
- package/tabs/common/styles.js +1 -1
- package/tabs/tab-label/tab-label.component.js +1 -1
- package/tabs.js +2 -2
- package/tabs.pure.js +2 -2
- package/tag/tag/tag.component.js +1 -1
- package/{tag.component-B7YExnbA.js → tag.component-BGYVbfUx.js} +1 -1
- package/tag.js +1 -1
- package/tag.pure.js +1 -1
- package/teaser-hero/teaser-hero.component.js +1 -1
- package/{teaser-hero.component-BUhWjc2i.js → teaser-hero.component-By1HInfz.js} +1 -1
- package/teaser-hero.js +1 -1
- package/teaser-hero.pure.js +1 -1
- package/timetable-occupancy/timetable-occupancy.component.js +1 -1
- package/{timetable-occupancy.component-CLpJ-rjI.js → timetable-occupancy.component-Dq9RM6qS.js} +1 -1
- package/timetable-occupancy.js +1 -1
- package/timetable-occupancy.pure.js +1 -1
- package/title/title-base.js +1 -1
- package/title/title.component.js +1 -1
- package/{title-base-HD0z6npS.js → title-base-B43-Q_7r.js} +1 -1
- package/{title.component-CjDkG7gT.js → title.component-DXJHJ6p6.js} +1 -1
- package/title.js +2 -2
- package/title.pure.js +2 -2
- package/toast/toast.component.js +1 -1
- package/{toast.component-DzsaWxPV.js → toast.component-D53COYeM.js} +1 -1
- package/toast.js +1 -1
- package/toast.pure.js +1 -1
- package/toggle/toggle/toggle.component.js +1 -1
- package/{toggle.component-D7X0E_hM.js → toggle.component-BGgAnHau.js} +1 -1
- package/toggle.js +1 -1
- package/toggle.pure.js +1 -1
- package/tooltip/tooltip.component.js +1 -1
- package/{tooltip.component-BCRFxBuV.js → tooltip.component-Bp-8vRoA.js} +1 -1
- package/tooltip.js +1 -1
- package/tooltip.pure.js +1 -1
- package/train/train-wagon/train-wagon.component.js +1 -1
- package/{train-wagon.component-CZiVPOaZ.js → train-wagon.component-LwKwwuta.js} +1 -1
- package/train.js +1 -1
- package/train.pure.js +1 -1
- package/button-common-C3wYY-UK.js +0 -85
- package/development/autocomplete-base-element-8hV4-ys6.js +0 -686
- package/development/breadcrumb-group.component-DP9X9qV1.js +0 -193
- package/development/calendar.component-C2WJuFrr.js +0 -1451
- package/development/card-badge.component-Be4gXazr.js +0 -83
- package/development/checkbox-common-DpE48IrV.js +0 -84
- package/development/chip-group.component-CxM8l839.js +0 -402
- package/development/compact-paginator.component-DiMeNNTc.js +0 -51
- package/development/error.component-C8JQQqSB.js +0 -53
- package/development/expansion-panel-header.component-CWojFAB-.js +0 -82
- package/development/footer.component-Dbc5xFqr.js +0 -169
- package/development/form-field.component-M0wf8ZR8.js +0 -703
- package/development/header.component-B2T2pmHs.js +0 -335
- package/development/hint.component-hKw1TLvO.js +0 -36
- package/development/message.component-CrXtMprr.js +0 -43
- package/development/notification.component-CKyNdgbx.js +0 -271
- package/development/paginator.component-Cqm7MuRD.js +0 -261
- package/development/radio-button-common-u7NYOI2p.js +0 -125
- package/development/select.component-Ibby7Q-L.js +0 -804
- package/development/status.component-p-egQ_U4.js +0 -110
- package/development/step-label.component-BTXuaONx.js +0 -126
- package/development/styles-D_8dMc_0.js +0 -14
- package/development/tag.component-CWL9jJTW.js +0 -241
- package/development/teaser-hero.component-De621iKn.js +0 -100
- package/development/toggle.component-BeHHTgRh.js +0 -244
- package/development/tooltip.component-BV0yBh9f.js +0 -369
- package/message.component-DgTPvDym.js +0 -26
- package/step-label.component-CbtQ7MvH.js +0 -77
- package/styles-DMLyYaea.js +0 -5
|
@@ -1,402 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { html, isServer, unsafeCSS } from "lit";
|
|
3
|
-
import { property } from "lit/decorators.js";
|
|
4
|
-
import { SbbDisabledMixin, SbbElement, SbbFormAssociatedMixin, SbbLanguageController, SbbNegativeMixin, SbbPropertyWatcherController, SbbRequiredMixin, boxSizingStyles, forceType, getNextElementIndex, i18nChipGroupInputDescription, i18nSelectionRequired, isArrowKeyPressed, isLean } from "./core.js";
|
|
5
|
-
import { SbbChipElement } from "./chip/chip/chip.component.js";
|
|
6
|
-
//#region src/elements/chip/chip-group/chip-group.scss?inline
|
|
7
|
-
var chip_group_default = ":host {\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n gap: var(--sbb-chip-group-gap);\n align-items: center;\n margin-block: var(--sbb-chip-group-margin-block);\n}\n\n:host(:is(:is(:state(size-s),[state--size-s]), :is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0;\n}\n\n:host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.375rem 0.3125rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.3125rem 0.1875rem;\n }\n}\n\n:host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0 0.4375rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(without-label),[state--without-label]):is(:state(size-s),[state--size-s]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0 0.3125rem;\n }\n}\n\n:host(:is(:is(:state(size-l),[state--size-l]), :is(:state(size-m),[state--size-m]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default) 0;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:is(:state(size-l),[state--size-l]), :is(:state(size-m),[state--size-m]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large) 0;\n }\n}\n\n:host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.1875rem 0.6875rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(without-label),[state--without-label]):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: 0.1875rem 0.875rem;\n }\n}\n\n:host(:is(:state(without-label),[state--without-label]):not(:is(:state(empty),[state--empty]), :is(:state(size-s),[state--size-s]), :is(:state(size-m),[state--size-m]), :is(:state(size-l),[state--size-l]))) {\n --sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-no-label-not-empty);\n}\n\n:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default)\n var(--_sbb-chip-group-margin-block-start-default-large);\n}\n@media (min-width: calc(64rem)) {\n :host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-m),[state--size-m]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large)\n var(--_sbb-chip-group-margin-block-start-default-large);\n }\n}\n\n:host(:not(:is(:state(without-label),[state--without-label]), :is(:state(empty),[state--empty]), :is(:state(size-s),[state--size-s]), :is(:state(size-m),[state--size-m]), :is(:state(size-l),[state--size-l]))) {\n --sbb-chip-group-margin-block: var(--sbb-chip-group-margin-block-with-label-not-empty);\n}\n\n:host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default)\n 1rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:is(:state(without-label),[state--without-label]):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large)\n 1.25rem;\n }\n}\n\n:host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default)\n 0.46875rem;\n}\n@media (min-width: calc(64rem)) {\n :host(:not(:is(:state(without-label),[state--without-label])):is(:state(size-l),[state--size-l]):not(:is(:state(empty),[state--empty]))) {\n --sbb-chip-group-margin-block: var(--_sbb-chip-group-margin-block-start-default-large)\n 0.46875rem;\n }\n}\n\n::slotted(input) {\n flex: 1 1 var(--sbb-chip-group-input-min-width);\n max-height: 1.5rem;\n}\n\n::slotted(sbb-chip) {\n max-width: 100%;\n}";
|
|
8
|
-
//#endregion
|
|
9
|
-
//#region src/elements/chip/chip-group/chip-group.component.ts
|
|
10
|
-
var SbbChipInputTokenEndEvent = class extends CustomEvent {
|
|
11
|
-
/**
|
|
12
|
-
* @deprecated Use event properties directly.
|
|
13
|
-
*/
|
|
14
|
-
get detail() {
|
|
15
|
-
return this;
|
|
16
|
-
}
|
|
17
|
-
constructor(options) {
|
|
18
|
-
super("chipinputtokenend", {
|
|
19
|
-
cancelable: true,
|
|
20
|
-
bubbles: true,
|
|
21
|
-
composed: true
|
|
22
|
-
});
|
|
23
|
-
this.origin = options.origin;
|
|
24
|
-
this.value = options.value;
|
|
25
|
-
this.label = options.label;
|
|
26
|
-
}
|
|
27
|
-
/** Set a new value for the chip that will be created */
|
|
28
|
-
setValue(value) {
|
|
29
|
-
this.value = value;
|
|
30
|
-
}
|
|
31
|
-
/** Set a label for the chip that will be created */
|
|
32
|
-
setLabel(label) {
|
|
33
|
-
this.label = label;
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* The `sbb-chip-group` component is used as a container for one or multiple `sbb-chip`.
|
|
38
|
-
*
|
|
39
|
-
* @slot - Use the unnamed slot to add `sbb-chip` elements.
|
|
40
|
-
* @event {SbbChipInputTokenEndEvent<T>} chipinputtokenend - Notifies that a chip is about to be created. Can be prevented.
|
|
41
|
-
* @overrideType value - (T = string[]) | null
|
|
42
|
-
*/
|
|
43
|
-
var SbbChipGroupElement = (() => {
|
|
44
|
-
let _classSuper = SbbRequiredMixin(SbbDisabledMixin(SbbNegativeMixin(SbbFormAssociatedMixin(SbbElement))));
|
|
45
|
-
let _instanceExtraInitializers = [];
|
|
46
|
-
let _set_value_decorators;
|
|
47
|
-
let _displayWith_decorators;
|
|
48
|
-
let _displayWith_initializers = [];
|
|
49
|
-
let _displayWith_extraInitializers = [];
|
|
50
|
-
let _separatorKeys_decorators;
|
|
51
|
-
let _separatorKeys_initializers = [];
|
|
52
|
-
let _separatorKeys_extraInitializers = [];
|
|
53
|
-
let _addOnBlur_decorators;
|
|
54
|
-
let _addOnBlur_initializers = [];
|
|
55
|
-
let _addOnBlur_extraInitializers = [];
|
|
56
|
-
return class SbbChipGroupElement extends _classSuper {
|
|
57
|
-
static {
|
|
58
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
59
|
-
_set_value_decorators = [property({ type: Array })];
|
|
60
|
-
_displayWith_decorators = [property({ attribute: false })];
|
|
61
|
-
_separatorKeys_decorators = [property({
|
|
62
|
-
attribute: "separator-keys",
|
|
63
|
-
type: Array
|
|
64
|
-
})];
|
|
65
|
-
_addOnBlur_decorators = [forceType(), property({
|
|
66
|
-
attribute: "add-on-blur",
|
|
67
|
-
type: Boolean
|
|
68
|
-
})];
|
|
69
|
-
__esDecorate(this, null, _set_value_decorators, {
|
|
70
|
-
kind: "setter",
|
|
71
|
-
name: "value",
|
|
72
|
-
static: false,
|
|
73
|
-
private: false,
|
|
74
|
-
access: {
|
|
75
|
-
has: (obj) => "value" in obj,
|
|
76
|
-
set: (obj, value) => {
|
|
77
|
-
obj.value = value;
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
metadata: _metadata
|
|
81
|
-
}, null, _instanceExtraInitializers);
|
|
82
|
-
__esDecorate(this, null, _displayWith_decorators, {
|
|
83
|
-
kind: "accessor",
|
|
84
|
-
name: "displayWith",
|
|
85
|
-
static: false,
|
|
86
|
-
private: false,
|
|
87
|
-
access: {
|
|
88
|
-
has: (obj) => "displayWith" in obj,
|
|
89
|
-
get: (obj) => obj.displayWith,
|
|
90
|
-
set: (obj, value) => {
|
|
91
|
-
obj.displayWith = value;
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
metadata: _metadata
|
|
95
|
-
}, _displayWith_initializers, _displayWith_extraInitializers);
|
|
96
|
-
__esDecorate(this, null, _separatorKeys_decorators, {
|
|
97
|
-
kind: "accessor",
|
|
98
|
-
name: "separatorKeys",
|
|
99
|
-
static: false,
|
|
100
|
-
private: false,
|
|
101
|
-
access: {
|
|
102
|
-
has: (obj) => "separatorKeys" in obj,
|
|
103
|
-
get: (obj) => obj.separatorKeys,
|
|
104
|
-
set: (obj, value) => {
|
|
105
|
-
obj.separatorKeys = value;
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
metadata: _metadata
|
|
109
|
-
}, _separatorKeys_initializers, _separatorKeys_extraInitializers);
|
|
110
|
-
__esDecorate(this, null, _addOnBlur_decorators, {
|
|
111
|
-
kind: "accessor",
|
|
112
|
-
name: "addOnBlur",
|
|
113
|
-
static: false,
|
|
114
|
-
private: false,
|
|
115
|
-
access: {
|
|
116
|
-
has: (obj) => "addOnBlur" in obj,
|
|
117
|
-
get: (obj) => obj.addOnBlur,
|
|
118
|
-
set: (obj, value) => {
|
|
119
|
-
obj.addOnBlur = value;
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
metadata: _metadata
|
|
123
|
-
}, _addOnBlur_initializers, _addOnBlur_extraInitializers);
|
|
124
|
-
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
125
|
-
enumerable: true,
|
|
126
|
-
configurable: true,
|
|
127
|
-
writable: true,
|
|
128
|
-
value: _metadata
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
static {
|
|
132
|
-
this.elementName = "sbb-chip-group";
|
|
133
|
-
}
|
|
134
|
-
static {
|
|
135
|
-
this.role = "listbox";
|
|
136
|
-
}
|
|
137
|
-
static {
|
|
138
|
-
this.styles = [boxSizingStyles, unsafeCSS(chip_group_default)];
|
|
139
|
-
}
|
|
140
|
-
static {
|
|
141
|
-
this.events = {
|
|
142
|
-
input: "input",
|
|
143
|
-
change: "change",
|
|
144
|
-
chipinputtokenend: "chipinputtokenend"
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
/** Value of the form element. */
|
|
148
|
-
set value(value) {
|
|
149
|
-
value = value ?? [];
|
|
150
|
-
const oldValue = this.value;
|
|
151
|
-
const toRemove = [...oldValue];
|
|
152
|
-
for (const c of value) if (toRemove.includes(c)) toRemove.splice(toRemove.indexOf(c), 1);
|
|
153
|
-
toRemove.forEach((value) => this._chipElements().find((c) => c.value === value)?.remove());
|
|
154
|
-
const toAdd = [...value];
|
|
155
|
-
for (const c of oldValue) if (toAdd.includes(c)) toAdd.splice(toAdd.indexOf(c), 1);
|
|
156
|
-
toAdd.forEach((c) => this._createChipElement(c));
|
|
157
|
-
}
|
|
158
|
-
get value() {
|
|
159
|
-
return this._chipElements().map((c) => c.value);
|
|
160
|
-
}
|
|
161
|
-
#displayWith_accessor_storage;
|
|
162
|
-
/** Function that maps a chip's value to its display value. */
|
|
163
|
-
get displayWith() {
|
|
164
|
-
return this.#displayWith_accessor_storage;
|
|
165
|
-
}
|
|
166
|
-
set displayWith(value) {
|
|
167
|
-
this.#displayWith_accessor_storage = value;
|
|
168
|
-
}
|
|
169
|
-
#separatorKeys_accessor_storage;
|
|
170
|
-
/** The array of keys that will trigger a `chipinputtokenend` event. Default `['Enter']` */
|
|
171
|
-
get separatorKeys() {
|
|
172
|
-
return this.#separatorKeys_accessor_storage;
|
|
173
|
-
}
|
|
174
|
-
set separatorKeys(value) {
|
|
175
|
-
this.#separatorKeys_accessor_storage = value;
|
|
176
|
-
}
|
|
177
|
-
#addOnBlur_accessor_storage;
|
|
178
|
-
/** Whether to automatically add a chip when the input loses focus if there's a value. */
|
|
179
|
-
get addOnBlur() {
|
|
180
|
-
return this.#addOnBlur_accessor_storage;
|
|
181
|
-
}
|
|
182
|
-
set addOnBlur(value) {
|
|
183
|
-
this.#addOnBlur_accessor_storage = value;
|
|
184
|
-
}
|
|
185
|
-
constructor() {
|
|
186
|
-
super();
|
|
187
|
-
this.#displayWith_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _displayWith_initializers, null));
|
|
188
|
-
this.#separatorKeys_accessor_storage = (__runInitializers(this, _displayWith_extraInitializers), __runInitializers(this, _separatorKeys_initializers, ["Enter"]));
|
|
189
|
-
this.#addOnBlur_accessor_storage = (__runInitializers(this, _separatorKeys_extraInitializers), __runInitializers(this, _addOnBlur_initializers, false));
|
|
190
|
-
/**
|
|
191
|
-
* Listens to the changes on `readonly` and `disabled` attributes of `<input>`.
|
|
192
|
-
*/
|
|
193
|
-
this._inputAttributeObserver = (__runInitializers(this, _addOnBlur_extraInitializers), !isServer ? new MutationObserver(() => this._reactToInputChanges()) : null);
|
|
194
|
-
this._language = new SbbLanguageController(this);
|
|
195
|
-
this.addEventListener?.(SbbChipElement.events.requestdelete, (ev) => this._deleteChip(ev.target));
|
|
196
|
-
this.addEventListener?.("keydown", (ev) => this._onChipKeyDown(ev));
|
|
197
|
-
this.addController(new SbbPropertyWatcherController(this, () => this.closest("sbb-form-field"), {
|
|
198
|
-
size: (formField) => this._updateSize(formField.size),
|
|
199
|
-
label: (formField) => this._updateLabelState(formField),
|
|
200
|
-
hiddenLabel: (formField) => this._updateLabelState(formField)
|
|
201
|
-
}));
|
|
202
|
-
}
|
|
203
|
-
_updateLabelState(formField) {
|
|
204
|
-
this.toggleState("without-label", !formField.label || formField.hiddenLabel);
|
|
205
|
-
}
|
|
206
|
-
connectedCallback() {
|
|
207
|
-
super.connectedCallback();
|
|
208
|
-
this._setupComponent();
|
|
209
|
-
}
|
|
210
|
-
willUpdate(changedProperties) {
|
|
211
|
-
super.willUpdate(changedProperties);
|
|
212
|
-
if (changedProperties.has("disabled") || changedProperties.has("formDisabled") || changedProperties.has("negative")) this._proxyStateToChips();
|
|
213
|
-
}
|
|
214
|
-
/** @internal */
|
|
215
|
-
formResetCallback() {
|
|
216
|
-
this.value = null;
|
|
217
|
-
}
|
|
218
|
-
/** @internal */
|
|
219
|
-
formStateRestoreCallback(state, _reason) {
|
|
220
|
-
if (!state) {
|
|
221
|
-
this.value = null;
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
this._readFormData(state).then((array) => this.value = array);
|
|
225
|
-
}
|
|
226
|
-
async _readFormData(formData) {
|
|
227
|
-
return Promise.all(formData.getAll(this.name).map(async (entry) => entry instanceof Blob ? JSON.parse(await entry.text()) : entry));
|
|
228
|
-
}
|
|
229
|
-
shouldValidate(name) {
|
|
230
|
-
return super.shouldValidate(name) || name === "required" || name === "value";
|
|
231
|
-
}
|
|
232
|
-
validate() {
|
|
233
|
-
super.validate();
|
|
234
|
-
if (this.required && this.value.length === 0) this.setValidityFlag("valueMissing", i18nSelectionRequired[this._language.current]);
|
|
235
|
-
else this.removeValidityFlag("valueMissing");
|
|
236
|
-
}
|
|
237
|
-
/** Return the list of chip elements **/
|
|
238
|
-
_chipElements() {
|
|
239
|
-
return Array.from(this.querySelectorAll?.("sbb-chip") ?? []);
|
|
240
|
-
}
|
|
241
|
-
/** Return the list of enabled chip elements **/
|
|
242
|
-
_enabledChipElements() {
|
|
243
|
-
return Array.from(this.querySelectorAll?.("sbb-chip:not([disabled])") ?? []);
|
|
244
|
-
}
|
|
245
|
-
_setupComponent() {
|
|
246
|
-
const input = this.querySelector("input");
|
|
247
|
-
if (input && input !== this._inputElement) {
|
|
248
|
-
this._inputAbortController?.abort();
|
|
249
|
-
this._inputAttributeObserver?.disconnect();
|
|
250
|
-
this._inputElement = input;
|
|
251
|
-
this._inputAbortController = new AbortController();
|
|
252
|
-
this._inputElement.addEventListener("keydown", (ev) => this._onInputKeyDown(ev), { signal: this._inputAbortController.signal });
|
|
253
|
-
this._inputElement.addEventListener("blur", () => this._onInputBlur(), {
|
|
254
|
-
signal: this._inputAbortController.signal,
|
|
255
|
-
capture: true
|
|
256
|
-
});
|
|
257
|
-
this._inputElement.addEventListener("inputAutocomplete", (event) => {
|
|
258
|
-
this._createChipFromInput("autocomplete", event.detail?.option.value);
|
|
259
|
-
}, { signal: this._inputAbortController.signal });
|
|
260
|
-
this._inputAttributeObserver?.observe(this._inputElement, {
|
|
261
|
-
attributes: true,
|
|
262
|
-
attributeFilter: ["readonly", "disabled"]
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
if (!this._previousSize || !this.closest("sbb-form-field")) this._updateSize(isLean() ? "s" : "m");
|
|
266
|
-
this.toggleState("empty", this.value.length === 0);
|
|
267
|
-
this._reactToInputChanges();
|
|
268
|
-
this._updateInputDescription();
|
|
269
|
-
this.updateFormValue();
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Listen for keyboard events on the chip elements
|
|
273
|
-
**/
|
|
274
|
-
_onChipKeyDown(event) {
|
|
275
|
-
const eventTarget = event.target;
|
|
276
|
-
if (eventTarget.localName !== "sbb-chip") return;
|
|
277
|
-
if (isArrowKeyPressed(event)) {
|
|
278
|
-
const focusSteps = this._enabledChipElements();
|
|
279
|
-
focusSteps[getNextElementIndex(event, focusSteps.indexOf(eventTarget), focusSteps.length)].focus();
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
switch (event.key) {
|
|
283
|
-
case "Backspace":
|
|
284
|
-
case "Delete":
|
|
285
|
-
if (!eventTarget.readOnly && !eventTarget.disabled) {
|
|
286
|
-
event.preventDefault();
|
|
287
|
-
this._deleteChip(eventTarget);
|
|
288
|
-
}
|
|
289
|
-
break;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Listen for keyboard events on the input
|
|
294
|
-
**/
|
|
295
|
-
_onInputKeyDown(event) {
|
|
296
|
-
switch (event.key) {
|
|
297
|
-
case "Backspace":
|
|
298
|
-
case "ArrowLeft":
|
|
299
|
-
if (!this._inputElement.value) this._focusChip();
|
|
300
|
-
break;
|
|
301
|
-
case "Enter":
|
|
302
|
-
event.preventDefault();
|
|
303
|
-
break;
|
|
304
|
-
}
|
|
305
|
-
if (this.separatorKeys.includes(event.key)) {
|
|
306
|
-
event.preventDefault();
|
|
307
|
-
this._createChipFromInput("input");
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Handle blur event on the input
|
|
312
|
-
**/
|
|
313
|
-
_onInputBlur() {
|
|
314
|
-
if (this.addOnBlur) this._createChipFromInput("input");
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* If the input is not empty, create a chip with its value
|
|
318
|
-
*/
|
|
319
|
-
_createChipFromInput(origin = "input", value) {
|
|
320
|
-
const inputValue = value ?? this._inputElement.value.trim();
|
|
321
|
-
if (!inputValue) return;
|
|
322
|
-
const event = new SbbChipInputTokenEndEvent({
|
|
323
|
-
origin,
|
|
324
|
-
value: inputValue,
|
|
325
|
-
label: (value ? this.displayWith?.(value) : null) ?? void 0
|
|
326
|
-
});
|
|
327
|
-
if (!this.dispatchEvent(event)) return;
|
|
328
|
-
this._createChipElement(event.value, event.label);
|
|
329
|
-
this._inputElement.value = "";
|
|
330
|
-
this._emitInputEvents();
|
|
331
|
-
}
|
|
332
|
-
_deleteChip(chip) {
|
|
333
|
-
const chips = this._enabledChipElements();
|
|
334
|
-
chip.remove();
|
|
335
|
-
this._emitInputEvents();
|
|
336
|
-
this._focusChip(chips.indexOf(chip));
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* Focus an enabled chip. If none are present, focus the input
|
|
340
|
-
* @param index The index of the enabled chip. If null, focus the last one.
|
|
341
|
-
*/
|
|
342
|
-
_focusChip(index) {
|
|
343
|
-
const enabledChips = this._enabledChipElements();
|
|
344
|
-
if (index !== void 0 && enabledChips[index]) {
|
|
345
|
-
enabledChips[index].focus();
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
if (enabledChips.length > 0) {
|
|
349
|
-
enabledChips[enabledChips.length - 1].focus();
|
|
350
|
-
return;
|
|
351
|
-
}
|
|
352
|
-
this._inputElement?.focus();
|
|
353
|
-
}
|
|
354
|
-
_emitInputEvents() {
|
|
355
|
-
/** The input event fires when the value has been changed as a direct result of a user action. */
|
|
356
|
-
this.dispatchEvent(new InputEvent("input", {
|
|
357
|
-
bubbles: true,
|
|
358
|
-
composed: true
|
|
359
|
-
}));
|
|
360
|
-
/**
|
|
361
|
-
* The change event is fired when the user modifies the element's value.
|
|
362
|
-
* Unlike the input event, the change event is not necessarily fired
|
|
363
|
-
* for each alteration to an element's value.
|
|
364
|
-
*/
|
|
365
|
-
this.dispatchEvent(new Event("change", { bubbles: true }));
|
|
366
|
-
}
|
|
367
|
-
_createChipElement(value, label) {
|
|
368
|
-
if (isServer) return;
|
|
369
|
-
const newChip = document.createElement("sbb-chip");
|
|
370
|
-
newChip.value = value;
|
|
371
|
-
newChip.innerText = label ?? (value ? this.displayWith?.(value) : null) ?? "";
|
|
372
|
-
this.insertBefore(newChip, this._inputElement ?? this.querySelector("input"));
|
|
373
|
-
}
|
|
374
|
-
_reactToInputChanges() {
|
|
375
|
-
this.disabled = this._inputElement?.disabled ?? false;
|
|
376
|
-
this._proxyStateToChips();
|
|
377
|
-
}
|
|
378
|
-
_proxyStateToChips() {
|
|
379
|
-
this._chipElements().forEach((c) => {
|
|
380
|
-
c.disabled = this.disabled || this.formDisabled;
|
|
381
|
-
c.readOnly = this._inputElement?.hasAttribute("readonly") ?? false;
|
|
382
|
-
c.negative = this.negative;
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
_updateSize(size) {
|
|
386
|
-
if (this._previousSize) this.internals.states.delete(`size-${this._previousSize}`);
|
|
387
|
-
this._previousSize = size;
|
|
388
|
-
if (this._previousSize) this.internals.states.add(`size-${this._previousSize}`);
|
|
389
|
-
}
|
|
390
|
-
_updateInputDescription() {
|
|
391
|
-
if (!this._inputElement) return;
|
|
392
|
-
this._inputElement.setAttribute("aria-description", `${i18nChipGroupInputDescription[this._language.current]} ${this.value.length}`);
|
|
393
|
-
}
|
|
394
|
-
render() {
|
|
395
|
-
return html`<slot @slotchange=${this._setupComponent}></slot>`;
|
|
396
|
-
}
|
|
397
|
-
};
|
|
398
|
-
})();
|
|
399
|
-
//#endregion
|
|
400
|
-
export { SbbChipInputTokenEndEvent as n, SbbChipGroupElement as t };
|
|
401
|
-
|
|
402
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1ncm91cC5jb21wb25lbnQtQ3hNOGw4MzkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NoaXAvY2hpcC1ncm91cC9jaGlwLWdyb3VwLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NoaXAvY2hpcC1ncm91cC9jaGlwLWdyb3VwLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogdmFyKC0tc2JiLWNoaXAtZ3JvdXAtZ2FwKTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJsb2NrOiB2YXIoLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2spO1xufVxuXG46aG9zdCg6aXMoOnN0YXRlKHNpemUtcyksIDpzdGF0ZShlbXB0eSkpKSB7XG4gIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiAwO1xufVxuXG46aG9zdCg6c3RhdGUoc2l6ZS1zKTpub3QoOnN0YXRlKGVtcHR5KSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCg2KX0gI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDUpfTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCg1KX0gI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDMpfTtcbiAgfVxufVxuXG46aG9zdCg6c3RhdGUod2l0aG91dC1sYWJlbCk6c3RhdGUoc2l6ZS1zKTpub3QoOnN0YXRlKGVtcHR5KSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IDAgI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDcpfTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IDAgI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDUpfTtcbiAgfVxufVxuXG46aG9zdCg6aXMoOnN0YXRlKHNpemUtbCksIDpzdGF0ZShzaXplLW0pKSkge1xuICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0KSAwO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0LWxhcmdlKSAwO1xuICB9XG59XG5cbjpob3N0KDpzdGF0ZSh3aXRob3V0LWxhYmVsKTpzdGF0ZShzaXplLW0pOm5vdCg6c3RhdGUoZW1wdHkpKSkge1xuICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDMpfSAje3NiYi5weC10by1yZW0tYnVpbGQoMTEpfTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgzKX0gI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDE0KX07XG4gIH1cbn1cblxuOmhvc3QoOnN0YXRlKHdpdGhvdXQtbGFiZWwpOm5vdCg6c3RhdGUoZW1wdHkpLCA6c3RhdGUoc2l6ZS1zKSwgOnN0YXRlKHNpemUtbSksIDpzdGF0ZShzaXplLWwpKSkge1xuICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLW5vLWxhYmVsLW5vdC1lbXB0eSk7XG59XG5cbjpob3N0KDpub3QoOnN0YXRlKHdpdGhvdXQtbGFiZWwpKTpzdGF0ZShzaXplLW0pOm5vdCg6c3RhdGUoZW1wdHkpKSkge1xuICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tX3NiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jay1zdGFydC1kZWZhdWx0KVxuICAgIHZhcigtLV9zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2stc3RhcnQtZGVmYXVsdC1sYXJnZSk7XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiB2YXIoLS1fc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXN0YXJ0LWRlZmF1bHQtbGFyZ2UpXG4gICAgICB2YXIoLS1fc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXN0YXJ0LWRlZmF1bHQtbGFyZ2UpO1xuICB9XG59XG5cbjpob3N0KDpub3QoOnN0YXRlKHdpdGhvdXQtbGFiZWwpLCA6c3RhdGUoZW1wdHkpLCA6c3RhdGUoc2l6ZS1zKSwgOnN0YXRlKHNpemUtbSksIDpzdGF0ZShzaXplLWwpKSkge1xuICAtLXNiYi1jaGlwLWdyb3VwLW1hcmdpbi1ibG9jazogdmFyKC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXdpdGgtbGFiZWwtbm90LWVtcHR5KTtcbn1cblxuOmhvc3QoOnN0YXRlKHdpdGhvdXQtbGFiZWwpOnN0YXRlKHNpemUtbCk6bm90KDpzdGF0ZShlbXB0eSkpKSB7XG4gIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiB2YXIoLS1fc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXN0YXJ0LWRlZmF1bHQpXG4gICAgI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDE2KX07XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiB2YXIoLS1fc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXN0YXJ0LWRlZmF1bHQtbGFyZ2UpXG4gICAgICAje3NiYi5weC10by1yZW0tYnVpbGQoMjApfTtcbiAgfVxufVxuXG46aG9zdCg6bm90KDpzdGF0ZSh3aXRob3V0LWxhYmVsKSk6c3RhdGUoc2l6ZS1sKTpub3QoOnN0YXRlKGVtcHR5KSkpIHtcbiAgLS1zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2s6IHZhcigtLV9zYmItY2hpcC1ncm91cC1tYXJnaW4tYmxvY2stc3RhcnQtZGVmYXVsdClcbiAgICAje3NiYi5weC10by1yZW0tYnVpbGQoNy41KX07XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIC0tc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrOiB2YXIoLS1fc2JiLWNoaXAtZ3JvdXAtbWFyZ2luLWJsb2NrLXN0YXJ0LWRlZmF1bHQtbGFyZ2UpXG4gICAgICAje3NiYi5weC10by1yZW0tYnVpbGQoNy41KX07XG4gIH1cbn1cblxuOjpzbG90dGVkKGlucHV0KSB7XG4gIGZsZXg6IDEgMSB2YXIoLS1zYmItY2hpcC1ncm91cC1pbnB1dC1taW4td2lkdGgpO1xuICBtYXgtaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoMjQpfTtcbn1cblxuOjpzbG90dGVkKHNiYi1jaGlwKSB7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cbiIsImltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxuICB1bnNhZmVDU1MsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHtcbiAgYm94U2l6aW5nU3R5bGVzLFxuICBmb3JjZVR5cGUsXG4gIHR5cGUgRm9ybVJlc3RvcmVSZWFzb24sXG4gIHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSxcbiAgZ2V0TmV4dEVsZW1lbnRJbmRleCxcbiAgaTE4bkNoaXBHcm91cElucHV0RGVzY3JpcHRpb24sXG4gIGkxOG5TZWxlY3Rpb25SZXF1aXJlZCxcbiAgaXNBcnJvd0tleVByZXNzZWQsXG4gIGlzTGVhbixcbiAgU2JiRGlzYWJsZWRNaXhpbixcbiAgU2JiRWxlbWVudCxcbiAgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbixcbiAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLFxuICBTYmJOZWdhdGl2ZU1peGluLFxuICBTYmJQcm9wZXJ0eVdhdGNoZXJDb250cm9sbGVyLFxuICBTYmJSZXF1aXJlZE1peGluLFxufSBmcm9tICcuLi8uLi9jb3JlLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUZpZWxkRWxlbWVudCB9IGZyb20gJy4uLy4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vb3B0aW9uL29wdGlvbi9vcHRpb24tYmFzZS1lbGVtZW50LnRzJztcbmltcG9ydCB7IFNiYkNoaXBFbGVtZW50IH0gZnJvbSAnLi4vY2hpcC9jaGlwLmNvbXBvbmVudC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2NoaXAtZ3JvdXAuc2Nzcz9pbmxpbmUnO1xuXG5sZXQgZGlzcGxheVdpdGhXYXJuaW5nTG9nZ2VkID0gZmFsc2U7XG5cbi8vIFRPRE8oYnJlYWtpbmctY2hhbmdlKTogUmVwbGFjZSBiYXNlIGNsYXNzIHdpdGggRXZlbnRcbmV4cG9ydCBjbGFzcyBTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgQ3VzdG9tRXZlbnQ8XG4gIFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnREZXRhaWxzPFQ+XG4+IHtcbiAgLyoqIFRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBjaGlwIGNyZWF0aW9uICovXG4gIHB1YmxpYyBvcmlnaW46ICdpbnB1dCcgfCAnYXV0b2NvbXBsZXRlJztcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgbmV3IGNoaXAuIEVpdGhlciB0aGUgaW5wdXQgb3IgdGhlIG9wdGlvbiB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbi5cbiAgICogRWl0aGVyIHRoZSB2YWx1ZSBmcm9tIHRoZSBpbnB1dCB3aGljaCBpcyBhbHdheXMgYHN0cmluZ2Agb3IgdGhlIHZhbHVlIGZyb20gdGhlIHNlbGVjdGVkIG9wdGlvblxuICAgKiBmcm9tIGFuIGF1dG9jb21wbGV0ZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbnkgb3RoZXIgdHlwZS5cbiAgICovXG4gIHB1YmxpYyB2YWx1ZTogVCB8IHN0cmluZztcbiAgcHVibGljIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZXZlbnQgcHJvcGVydGllcyBkaXJlY3RseS5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgZGV0YWlsKCk6IFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnREZXRhaWxzPFQ+IHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBQaWNrPFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnQsICdvcmlnaW4nIHwgJ3ZhbHVlJyB8ICdsYWJlbCc+KSB7XG4gICAgc3VwZXIoJ2NoaXBpbnB1dHRva2VuZW5kJywge1xuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLm9yaWdpbiA9IG9wdGlvbnMub3JpZ2luO1xuICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIHRoaXMubGFiZWwgPSBvcHRpb25zLmxhYmVsO1xuICB9XG5cbiAgLyoqIFNldCBhIG5ldyB2YWx1ZSBmb3IgdGhlIGNoaXAgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgKi9cbiAgcHVibGljIHNldFZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG4gIC8qKiBTZXQgYSBsYWJlbCBmb3IgdGhlIGNoaXAgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgKi9cbiAgcHVibGljIHNldExhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnRgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHM8VCA9IHN0cmluZz4ge1xuICAvKiogVGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNoaXAgY3JlYXRpb24gKi9cbiAgb3JpZ2luOiAnaW5wdXQnIHwgJ2F1dG9jb21wbGV0ZSc7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBjaGlwLiBFaXRoZXIgdGhlIGlucHV0IG9yIHRoZSBvcHRpb24gdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW4uXG4gICAqIEVpdGhlciB0aGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgd2hpY2ggaXMgYWx3YXlzIGBzdHJpbmdgIG9yIHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWxlY3RlZCBvcHRpb25cbiAgICogZnJvbSBhbiBhdXRvY29tcGxldGUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW55IG90aGVyIHR5cGUuXG4gICAqL1xuICB2YWx1ZTogVCB8IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBTZXQgYSBuZXcgdmFsdWUgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHNldFZhbHVlKHZhbHVlOiBUKTogdm9pZDtcbiAgLyoqIFNldCBhIGxhYmVsIGZvciB0aGUgY2hpcCB0aGF0IHdpbGwgYmUgY3JlYXRlZCAqL1xuICBzZXRMYWJlbCh2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgYHNiYi1jaGlwLWdyb3VwYCBjb21wb25lbnQgaXMgdXNlZCBhcyBhIGNvbnRhaW5lciBmb3Igb25lIG9yIG11bHRpcGxlIGBzYmItY2hpcGAuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgYHNiYi1jaGlwYCBlbGVtZW50cy5cbiAqIEBldmVudCB7U2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudDxUPn0gY2hpcGlucHV0dG9rZW5lbmQgLSBOb3RpZmllcyB0aGF0IGEgY2hpcCBpcyBhYm91dCB0byBiZSBjcmVhdGVkLiBDYW4gYmUgcHJldmVudGVkLlxuICogQG92ZXJyaWRlVHlwZSB2YWx1ZSAtIChUID0gc3RyaW5nW10pIHwgbnVsbFxuICovXG5leHBvcnQgY2xhc3MgU2JiQ2hpcEdyb3VwRWxlbWVudDxUID0gc3RyaW5nPiBleHRlbmRzIFNiYlJlcXVpcmVkTWl4aW4oXG4gIFNiYkRpc2FibGVkTWl4aW4oU2JiTmVnYXRpdmVNaXhpbihTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkVsZW1lbnQpKSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1jaGlwLWdyb3VwJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gJ2xpc3Rib3gnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCB1bnNhZmVDU1Moc3R5bGUpXTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgaW5wdXQ6ICdpbnB1dCcsXG4gICAgY2hhbmdlOiAnY2hhbmdlJyxcbiAgICBjaGlwaW5wdXR0b2tlbmVuZDogJ2NoaXBpbnB1dHRva2VuZW5kJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogVmFsdWUgb2YgdGhlIGZvcm0gZWxlbWVudC4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQXJyYXkgfSlcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogKFQgfCBudWxsKVtdIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdmFsdWUgPz8gW107XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgLy8gU3VidHJhY3QgZnJvbSAnb2xkVmFsdWUnIHRoZSBuZXcgJ3ZhbHVlJ1xuICAgIC8vIFRoZSByZXN1bHQgYXJlIHRoZSBjaGlwcyB0byByZW1vdmUgKGhhbmRsZSBkdXBsaWNhdGVzKVxuICAgIGNvbnN0IHRvUmVtb3ZlID0gWy4uLm9sZFZhbHVlXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdmFsdWUpIHtcbiAgICAgIGlmICh0b1JlbW92ZS5pbmNsdWRlcyhjKSkge1xuICAgICAgICB0b1JlbW92ZS5zcGxpY2UodG9SZW1vdmUuaW5kZXhPZihjKSwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRvUmVtb3ZlLmZvckVhY2goKHZhbHVlKSA9PlxuICAgICAgdGhpcy5fY2hpcEVsZW1lbnRzKClcbiAgICAgICAgLmZpbmQoKGMpID0+IGMudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICA/LnJlbW92ZSgpLFxuICAgICk7XG5cbiAgICAvLyBTdWJ0cmFjdCBmcm9tIHRoZSBuZXcgJ3ZhbHVlJyB3aGF0IHdhcyBhbHJlYWR5IHByZXNlbnRcbiAgICAvLyBUaGUgcmVzdWx0IGFyZSB0aGUgbmV3IGNoaXBzIHRvIGFkZCAoaGFuZGxlIGR1cGxpY2F0ZXMpXG4gICAgY29uc3QgdG9BZGQgPSBbLi4udmFsdWVdO1xuICAgIGZvciAoY29uc3QgYyBvZiBvbGRWYWx1ZSkge1xuICAgICAgaWYgKHRvQWRkLmluY2x1ZGVzKGMpKSB7XG4gICAgICAgIHRvQWRkLnNwbGljZSh0b0FkZC5pbmRleE9mKGMpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdG9BZGQuZm9yRWFjaCgoYykgPT4gdGhpcy5fY3JlYXRlQ2hpcEVsZW1lbnQoYykpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogKFQgfCBudWxsKVtdIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpcEVsZW1lbnRzKCkubWFwKChjKSA9PiBjLnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBGdW5jdGlvbiB0aGF0IG1hcHMgYSBjaGlwJ3MgdmFsdWUgdG8gaXRzIGRpc3BsYXkgdmFsdWUuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogZmFsc2UgfSlcbiAgcHVibGljIGFjY2Vzc29yIGRpc3BsYXlXaXRoOiAoKHZhbHVlOiBUKSA9PiBzdHJpbmcpIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBhcnJheSBvZiBrZXlzIHRoYXQgd2lsbCB0cmlnZ2VyIGEgYGNoaXBpbnB1dHRva2VuZW5kYCBldmVudC4gRGVmYXVsdCBgWydFbnRlciddYCAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdzZXBhcmF0b3Ita2V5cycsIHR5cGU6IEFycmF5IH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBzZXBhcmF0b3JLZXlzOiBzdHJpbmdbXSA9IFsnRW50ZXInXTtcblxuICAvKiogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGFkZCBhIGNoaXAgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMgaWYgdGhlcmUncyBhIHZhbHVlLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWRkLW9uLWJsdXInLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhZGRPbkJsdXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogTGlzdGVucyB0byB0aGUgY2hhbmdlcyBvbiBgcmVhZG9ubHlgIGFuZCBgZGlzYWJsZWRgIGF0dHJpYnV0ZXMgb2YgYDxpbnB1dD5gLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5wdXRBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy5fcmVhY3RUb0lucHV0Q2hhbmdlcygpKVxuICAgIDogbnVsbDtcblxuICBwcml2YXRlIF9pbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2lucHV0QWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfcHJldmlvdXNTaXplPzogU2JiRm9ybUZpZWxkRWxlbWVudFsnc2l6ZSddO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oU2JiQ2hpcEVsZW1lbnQuZXZlbnRzLnJlcXVlc3RkZWxldGUsIChldikgPT5cbiAgICAgIHRoaXMuX2RlbGV0ZUNoaXAoZXYudGFyZ2V0IGFzIFNiYkNoaXBFbGVtZW50PFQ+KSxcbiAgICApO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZXYpID0+IHRoaXMuX29uQ2hpcEtleURvd24oZXYpKTtcblxuICAgIHRoaXMuYWRkQ29udHJvbGxlcihcbiAgICAgIG5ldyBTYmJQcm9wZXJ0eVdhdGNoZXJDb250cm9sbGVyKHRoaXMsICgpID0+IHRoaXMuY2xvc2VzdCgnc2JiLWZvcm0tZmllbGQnKSwge1xuICAgICAgICBzaXplOiAoZm9ybUZpZWxkKSA9PiB0aGlzLl91cGRhdGVTaXplKGZvcm1GaWVsZC5zaXplKSxcbiAgICAgICAgbGFiZWw6IChmb3JtRmllbGQpID0+IHRoaXMuX3VwZGF0ZUxhYmVsU3RhdGUoZm9ybUZpZWxkKSxcbiAgICAgICAgaGlkZGVuTGFiZWw6IChmb3JtRmllbGQpID0+IHRoaXMuX3VwZGF0ZUxhYmVsU3RhdGUoZm9ybUZpZWxkKSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVMYWJlbFN0YXRlKGZvcm1GaWVsZDogU2JiRm9ybUZpZWxkRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ3dpdGhvdXQtbGFiZWwnLCAhZm9ybUZpZWxkLmxhYmVsIHx8IGZvcm1GaWVsZC5oaWRkZW5MYWJlbCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9zZXR1cENvbXBvbmVudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzKTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Rpc2FibGVkJykgfHxcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnZm9ybURpc2FibGVkJykgfHxcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbmVnYXRpdmUnKVxuICAgICkge1xuICAgICAgdGhpcy5fcHJveHlTdGF0ZVRvQ2hpcHMoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQge1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRGb3JtRGF0YShzdGF0ZSBhcyBGb3JtRGF0YSkudGhlbigoYXJyYXkpID0+ICh0aGlzLnZhbHVlID0gYXJyYXkpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRGb3JtRGF0YShmb3JtRGF0YTogRm9ybURhdGEpOiBQcm9taXNlPFRbXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGZvcm1EYXRhXG4gICAgICAgIC5nZXRBbGwodGhpcy5uYW1lKVxuICAgICAgICAubWFwKGFzeW5jIChlbnRyeSkgPT5cbiAgICAgICAgICBlbnRyeSBpbnN0YW5jZW9mIEJsb2IgPyBKU09OLnBhcnNlKGF3YWl0IGVudHJ5LnRleHQoKSkgOiAoZW50cnkgYXMgVCksXG4gICAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzaG91bGRWYWxpZGF0ZShuYW1lOiBQcm9wZXJ0eUtleSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5zaG91bGRWYWxpZGF0ZShuYW1lKSB8fCBuYW1lID09PSAncmVxdWlyZWQnIHx8IG5hbWUgPT09ICd2YWx1ZSc7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmFsaWRhdGUoKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGUoKTtcbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZXRWYWxpZGl0eUZsYWcoJ3ZhbHVlTWlzc2luZycsIGkxOG5TZWxlY3Rpb25SZXF1aXJlZFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlVmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmV0dXJuIHRoZSBsaXN0IG9mIGNoaXAgZWxlbWVudHMgKiovXG4gIHByaXZhdGUgX2NoaXBFbGVtZW50cygpOiBTYmJDaGlwRWxlbWVudDxUPltdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/LjxTYmJDaGlwRWxlbWVudDxUPj4oJ3NiYi1jaGlwJykgPz8gW10pO1xuICB9XG5cbiAgLyoqIFJldHVybiB0aGUgbGlzdCBvZiBlbmFibGVkIGNoaXAgZWxlbWVudHMgKiovXG4gIHByaXZhdGUgX2VuYWJsZWRDaGlwRWxlbWVudHMoKTogU2JiQ2hpcEVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NiYi1jaGlwOm5vdChbZGlzYWJsZWRdKScpID8/IFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwQ29tcG9uZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuXG4gICAgLy8gQ29ubmVjdCB0byB0aGUgaW5wdXRcbiAgICBpZiAoaW5wdXQgJiYgaW5wdXQgIT09IHRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgICB0aGlzLl9pbnB1dEF0dHJpYnV0ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQgPSBpbnB1dDtcblxuICAgICAgdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldikgPT4gdGhpcy5fb25JbnB1dEtleURvd24oZXYpLCB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHRoaXMuX29uSW5wdXRCbHVyKCksIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl9pbnB1dEFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnaW5wdXRBdXRvY29tcGxldGUnLFxuICAgICAgICAoZXZlbnQ6IEN1c3RvbUV2ZW50PHsgb3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxUPiB9PikgPT4ge1xuICAgICAgICAgIHRoaXMuX2NyZWF0ZUNoaXBGcm9tSW5wdXQoJ2F1dG9jb21wbGV0ZScsIGV2ZW50LmRldGFpbD8ub3B0aW9uLnZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpZ25hbDogdGhpcy5faW5wdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdGhpcy5faW5wdXRBdHRyaWJ1dGVPYnNlcnZlcj8ub2JzZXJ2ZSh0aGlzLl9pbnB1dEVsZW1lbnQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ3JlYWRvbmx5JywgJ2Rpc2FibGVkJ10sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJbmhlcml0IHNpemUgZnJvbSB0aGUgZm9ybS1maWVsZCBhbmQgb2JzZXJ2ZSBmb3IgY2hhbmdlc1xuICAgIGlmICghdGhpcy5fcHJldmlvdXNTaXplIHx8ICF0aGlzLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJykpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVNpemUoaXNMZWFuKCkgPyAncycgOiAnbScpO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2VtcHR5JywgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApO1xuICAgIHRoaXMuX3JlYWN0VG9JbnB1dENoYW5nZXMoKTtcbiAgICB0aGlzLl91cGRhdGVJbnB1dERlc2NyaXB0aW9uKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gZm9yIGtleWJvYXJkIGV2ZW50cyBvbiB0aGUgY2hpcCBlbGVtZW50c1xuICAgKiovXG4gIHByaXZhdGUgX29uQ2hpcEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudFRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBTYmJDaGlwRWxlbWVudDxUPjtcbiAgICBpZiAoZXZlbnRUYXJnZXQubG9jYWxOYW1lICE9PSAnc2JiLWNoaXAnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXJyb3cga2V5cyBhbGxvdyBuYXZpZ2F0aW9uIGJldHdlZW4gY2hpcHMgZm9jdXMgc3RlcHNcbiAgICBpZiAoaXNBcnJvd0tleVByZXNzZWQoZXZlbnQpKSB7XG4gICAgICBjb25zdCBmb2N1c1N0ZXBzID0gdGhpcy5fZW5hYmxlZENoaXBFbGVtZW50cygpO1xuICAgICAgY29uc3QgbmV4dCA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZlbnQsIGZvY3VzU3RlcHMuaW5kZXhPZihldmVudFRhcmdldCksIGZvY3VzU3RlcHMubGVuZ3RoKTtcbiAgICAgIGZvY3VzU3RlcHNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgIGNhc2UgJ0RlbGV0ZSc6XG4gICAgICAgIGlmICghZXZlbnRUYXJnZXQucmVhZE9ubHkgJiYgIWV2ZW50VGFyZ2V0LmRpc2FibGVkKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLl9kZWxldGVDaGlwKGV2ZW50VGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGZvciBrZXlib2FyZCBldmVudHMgb24gdGhlIGlucHV0XG4gICAqKi9cbiAgcHJpdmF0ZSBfb25JbnB1dEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmICghdGhpcy5faW5wdXRFbGVtZW50IS52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuX2ZvY3VzQ2hpcCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBQcmV2ZW50cyB0aGUgZm9ybSBzdWJtaXRcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgdHlwZWQgb25lIG9mIHRoZSBzZXBhcmF0b3Iga2V5cywgdHJpZ2dlciBhICdjaGlwaW5wdXR0b2tlbmVuZCcgZXZlbnRcbiAgICBpZiAodGhpcy5zZXBhcmF0b3JLZXlzLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgdHlwaW5nIHRoZSBzZXBhcmF0b3Iga2V5IGludG8gdGhlIGlucHV0XG4gICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdpbnB1dCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYmx1ciBldmVudCBvbiB0aGUgaW5wdXRcbiAgICoqL1xuICBwcml2YXRlIF9vbklucHV0Qmx1cigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hZGRPbkJsdXIpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZUNoaXBGcm9tSW5wdXQoJ2lucHV0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBpbnB1dCBpcyBub3QgZW1wdHksIGNyZWF0ZSBhIGNoaXAgd2l0aCBpdHMgdmFsdWVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUNoaXBGcm9tSW5wdXQob3JpZ2luOiAnaW5wdXQnIHwgJ2F1dG9jb21wbGV0ZScgPSAnaW5wdXQnLCB2YWx1ZT86IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gdmFsdWUgPz8gdGhpcy5faW5wdXRFbGVtZW50IS52YWx1ZS50cmltKCk7XG4gICAgaWYgKCFpbnB1dFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnQgPSBuZXcgU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudDxUPih7XG4gICAgICBvcmlnaW4sXG4gICAgICB2YWx1ZTogaW5wdXRWYWx1ZSBhcyBzdHJpbmcsXG4gICAgICBsYWJlbDogKHZhbHVlID8gdGhpcy5kaXNwbGF5V2l0aD8uKHZhbHVlKSA6IG51bGwpID8/IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBpZiAoIXRoaXMuZGlzcGF0Y2hFdmVudChldmVudCkpIHtcbiAgICAgIHJldHVybjsgLy8gZXZlbnQgcHJldmVudGVkOyBkbyBub3RoaW5nICh0aGUgY29uc3VtZXIgaGFzIHRvIGNyZWF0ZSB0aGUgY2hpcClcbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVDaGlwRWxlbWVudChldmVudC52YWx1ZSBhcyBULCBldmVudC5sYWJlbCk7XG4gICAgdGhpcy5faW5wdXRFbGVtZW50IS52YWx1ZSA9ICcnOyAvLyBFbXB0eSB0aGUgaW5wdXRcbiAgICB0aGlzLl9lbWl0SW5wdXRFdmVudHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlbGV0ZUNoaXAoY2hpcDogU2JiQ2hpcEVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBjb25zdCBjaGlwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcbiAgICBjaGlwLnJlbW92ZSgpO1xuICAgIHRoaXMuX2VtaXRJbnB1dEV2ZW50cygpO1xuICAgIHRoaXMuX2ZvY3VzQ2hpcChjaGlwcy5pbmRleE9mKGNoaXApKTsgLy8gRm9jdXMgdGhlIG5leHQgY2hpcFxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIGFuIGVuYWJsZWQgY2hpcC4gSWYgbm9uZSBhcmUgcHJlc2VudCwgZm9jdXMgdGhlIGlucHV0XG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGVuYWJsZWQgY2hpcC4gSWYgbnVsbCwgZm9jdXMgdGhlIGxhc3Qgb25lLlxuICAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNDaGlwKGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZW5hYmxlZENoaXBzID0gdGhpcy5fZW5hYmxlZENoaXBFbGVtZW50cygpO1xuXG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgZW5hYmxlZENoaXBzW2luZGV4XSkge1xuICAgICAgZW5hYmxlZENoaXBzW2luZGV4XS5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbmFibGVkQ2hpcHMubGVuZ3RoID4gMCkge1xuICAgICAgZW5hYmxlZENoaXBzW2VuYWJsZWRDaGlwcy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lucHV0RWxlbWVudD8uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRJbnB1dEV2ZW50cygpOiB2b2lkIHtcbiAgICAvKiogVGhlIGlucHV0IGV2ZW50IGZpcmVzIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYXMgYSBkaXJlY3QgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSkpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG1vZGlmaWVzIHRoZSBlbGVtZW50J3MgdmFsdWUuXG4gICAgICogVW5saWtlIHRoZSBpbnB1dCBldmVudCwgdGhlIGNoYW5nZSBldmVudCBpcyBub3QgbmVjZXNzYXJpbHkgZmlyZWRcbiAgICAgKiBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZS5cbiAgICAgKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlQ2hpcEVsZW1lbnQodmFsdWU6IFQgfCBudWxsLCBsYWJlbD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdDaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2JiLWNoaXAnKSBhcyBTYmJDaGlwRWxlbWVudDxUPjtcbiAgICBuZXdDaGlwLnZhbHVlID0gdmFsdWU7XG4gICAgbmV3Q2hpcC5pbm5lclRleHQgPSBsYWJlbCA/PyAodmFsdWUgPyB0aGlzLmRpc3BsYXlXaXRoPy4odmFsdWUpIDogbnVsbCkgPz8gJyc7XG4gICAgaWYgKFxuICAgICAgaW1wb3J0Lm1ldGEuZW52LkRFViAmJlxuICAgICAgIWRpc3BsYXlXaXRoV2FybmluZ0xvZ2dlZCAmJlxuICAgICAgIWxhYmVsICYmXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAhdGhpcy5kaXNwbGF5V2l0aFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgZGlzcGxheVdpdGggaGFzIG5vdCBiZWVuIHNldCB5ZXQgZm9yIHNiYi1jaGlwLWdyb3VwIGFuZCB2YWx1ZSBpcyBhbiBvYmplY3QuXG4gICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIG9iamVjdCB2YWx1ZXMsIHlvdSBuZWVkIHRvIHByb3ZpZGUgZGlzcGxheVdpZHRoIGJlZm9yZVxuICAgICAgICAgc2V0dGluZyBvciBzZWxlY3RpbmcgYW55IHZhbHVlLmAsXG4gICAgICApO1xuICAgICAgZGlzcGxheVdpdGhXYXJuaW5nTG9nZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5pbnNlcnRCZWZvcmUobmV3Q2hpcCwgdGhpcy5faW5wdXRFbGVtZW50ID8/IHRoaXMucXVlcnlTZWxlY3RvcignaW5wdXQnKSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWFjdFRvSW5wdXRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLl9pbnB1dEVsZW1lbnQ/LmRpc2FibGVkID8/IGZhbHNlO1xuICAgIHRoaXMuX3Byb3h5U3RhdGVUb0NoaXBzKCk7XG4gIH1cblxuICBwcml2YXRlIF9wcm94eVN0YXRlVG9DaGlwcygpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGlwRWxlbWVudHMoKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLmZvcm1EaXNhYmxlZDtcbiAgICAgIGMucmVhZE9ubHkgPSB0aGlzLl9pbnB1dEVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSA/PyBmYWxzZTtcbiAgICAgIGMubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU2l6ZShzaXplOiBTYmJGb3JtRmllbGRFbGVtZW50WydzaXplJ10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcHJldmlvdXNTaXplKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKGBzaXplLSR7dGhpcy5fcHJldmlvdXNTaXplfWApO1xuICAgIH1cbiAgICB0aGlzLl9wcmV2aW91c1NpemUgPSBzaXplO1xuICAgIGlmICh0aGlzLl9wcmV2aW91c1NpemUpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoYHNpemUtJHt0aGlzLl9wcmV2aW91c1NpemV9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlSW5wdXREZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgJ2FyaWEtZGVzY3JpcHRpb24nLFxuICAgICAgYCR7aTE4bkNoaXBHcm91cElucHV0RGVzY3JpcHRpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7dGhpcy52YWx1ZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9zZXR1cENvbXBvbmVudH0+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1jaGlwLWdyb3VwJzogU2JiQ2hpcEdyb3VwRWxlbWVudDtcbiAgfVxuXG4gIGludGVyZmFjZSBIVE1MRWxlbWVudEV2ZW50TWFwIHtcbiAgICBjaGlwaW5wdXR0b2tlbmVuZDogU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudDxhbnk+O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQ3FDQSxJQUFhLDRCQUFiLGNBQTJELFlBRTFEOzs7O0NBY0MsSUFBb0IsU0FBTTtBQUN4QixTQUFPOztDQUdULFlBQW1CLFNBQXNFO0FBQ3ZGLFFBQU0scUJBQXFCO0dBQ3pCLFlBQVk7R0FDWixTQUFTO0dBQ1QsVUFBVTtHQUNYLENBQUM7QUFDRixPQUFLLFNBQVMsUUFBUTtBQUN0QixPQUFLLFFBQVEsUUFBUTtBQUNyQixPQUFLLFFBQVEsUUFBUTs7O0NBSWhCLFNBQVMsT0FBUTtBQUN0QixPQUFLLFFBQVE7OztDQUdSLFNBQVMsT0FBYTtBQUMzQixPQUFLLFFBQVE7Ozs7Ozs7Ozs7SUE4QkosNkJBQW1CO21CQUFxQixpQkFDbkQsaUJBQWlCLGlCQUFpQix1QkFBdUIsV0FBVyxDQUFDLENBQUMsQ0FDdkU7Ozs7Ozs7Ozs7OztjQUZZLDRCQUF3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
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { html, unsafeCSS } from "lit";
|
|
2
|
-
import { SbbElement, SbbScreenReaderOnlyElement, boxSizingStyles, i18nPage, i18nPaginatorOf } from "./core.js";
|
|
3
|
-
import { SbbDividerElement } from "./divider.pure.js";
|
|
4
|
-
import { styleMap } from "lit/directives/style-map.js";
|
|
5
|
-
import { SbbPaginatorCommonElementMixin } from "./paginator/common/paginator-common.js";
|
|
6
|
-
//#region src/elements/paginator/compact-paginator/compact-paginator.scss?inline
|
|
7
|
-
var compact_paginator_default = ":host {\n display: flex;\n gap: var(--sbb-compact-paginator-gap);\n justify-content: var(--sbb-paginator-compact-justify-content, start);\n min-height: var(--sbb-compact-paginator-height);\n}\n\n:host([size=s]) {\n --sbb-compact-paginator-height: var(--sbb-size-element-xs);\n}\n\n:host([size=m]) {\n --sbb-compact-paginator-height: var(--sbb-size-element-m);\n}\n\n:host([negative]) {\n --sbb-compact-paginator-color: var(--sbb-color-5);\n}\n\n:host([pager-position=end]) {\n --sbb-paginator-compact-justify-content: end;\n}\n\n.sbb-paginator__pages {\n font-size: var(--sbb-compact-paginator-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--sbb-compact-paginator-pages-gap);\n color: var(--sbb-compact-paginator-color);\n}\n\n.sbb-compact-paginator__divider {\n height: 1rem;\n}";
|
|
8
|
-
//#endregion
|
|
9
|
-
//#region src/elements/paginator/compact-paginator/compact-paginator.component.ts
|
|
10
|
-
/**
|
|
11
|
-
* It displays a paginator component in compact mode.
|
|
12
|
-
*/
|
|
13
|
-
var SbbCompactPaginatorElement = class extends SbbPaginatorCommonElementMixin(SbbElement) {
|
|
14
|
-
static {
|
|
15
|
-
this.elementName = "sbb-compact-paginator";
|
|
16
|
-
}
|
|
17
|
-
static {
|
|
18
|
-
this.elementDependencies = [SbbDividerElement, SbbScreenReaderOnlyElement];
|
|
19
|
-
}
|
|
20
|
-
static {
|
|
21
|
-
this.styles = [boxSizingStyles, unsafeCSS(compact_paginator_default)];
|
|
22
|
-
}
|
|
23
|
-
static {
|
|
24
|
-
this.events = { page: "page" };
|
|
25
|
-
}
|
|
26
|
-
_renderPageNumbers() {
|
|
27
|
-
return html`
|
|
28
|
-
<span class="sbb-paginator__pages" aria-hidden="true"
|
|
29
|
-
>${this.pageIndex + 1}<sbb-divider
|
|
30
|
-
orientation="vertical"
|
|
31
|
-
class="sbb-compact-paginator__divider"
|
|
32
|
-
style=${styleMap({ "--sbb-divider-color": "currentcolor" })}
|
|
33
|
-
?negative=${this.negative}
|
|
34
|
-
></sbb-divider
|
|
35
|
-
>${this.numberOfPages()}</span
|
|
36
|
-
>
|
|
37
|
-
<sbb-screen-reader-only>
|
|
38
|
-
${`${this.accessibilityPageLabel ? this.accessibilityPageLabel : i18nPage[this.language.current]} ${this.pageIndex + 1} ${i18nPaginatorOf[this.language.current]} ${this.numberOfPages()}`}
|
|
39
|
-
</sbb-screen-reader-only>
|
|
40
|
-
`;
|
|
41
|
-
}
|
|
42
|
-
renderPaginator() {
|
|
43
|
-
return html`
|
|
44
|
-
${this.pagerPosition === "start" ? html`${this.renderPrevNextButtons()} ${this._renderPageNumbers()}` : html`${this._renderPageNumbers()} ${this.renderPrevNextButtons()}`}
|
|
45
|
-
`;
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
//#endregion
|
|
49
|
-
export { SbbCompactPaginatorElement as t };
|
|
50
|
-
|
|
51
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFjdC1wYWdpbmF0b3IuY29tcG9uZW50LURpTWVOTlRjLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9wYWdpbmF0b3IvY29tcGFjdC1wYWdpbmF0b3IvY29tcGFjdC1wYWdpbmF0b3Iuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvcGFnaW5hdG9yL2NvbXBhY3QtcGFnaW5hdG9yL2NvbXBhY3QtcGFnaW5hdG9yLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc2JiLWNvbXBhY3QtcGFnaW5hdG9yLWdhcCk7XG4gIGp1c3RpZnktY29udGVudDogdmFyKC0tc2JiLXBhZ2luYXRvci1jb21wYWN0LWp1c3RpZnktY29udGVudCwgc3RhcnQpO1xuICBtaW4taGVpZ2h0OiB2YXIoLS1zYmItY29tcGFjdC1wYWdpbmF0b3ItaGVpZ2h0KTtcbn1cblxuOmhvc3QoW3NpemU9J3MnXSkge1xuICAtLXNiYi1jb21wYWN0LXBhZ2luYXRvci1oZWlnaHQ6IHZhcigtLXNiYi1zaXplLWVsZW1lbnQteHMpO1xufVxuXG46aG9zdChbc2l6ZT0nbSddKSB7XG4gIC0tc2JiLWNvbXBhY3QtcGFnaW5hdG9yLWhlaWdodDogdmFyKC0tc2JiLXNpemUtZWxlbWVudC1tKTtcbn1cblxuOmhvc3QoW25lZ2F0aXZlXSkge1xuICAtLXNiYi1jb21wYWN0LXBhZ2luYXRvci1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLTUpO1xufVxuXG46aG9zdChbcGFnZXItcG9zaXRpb249J2VuZCddKSB7XG4gIC0tc2JiLXBhZ2luYXRvci1jb21wYWN0LWp1c3RpZnktY29udGVudDogZW5kO1xufVxuXG4uc2JiLXBhZ2luYXRvcl9fcGFnZXMge1xuICBmb250LXNpemU6IHZhcigtLXNiYi1jb21wYWN0LXBhZ2luYXRvci1mb250LXNpemUpO1xuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tc2JiLXR5cG8tbGV0dGVyLXNwYWNpbmctdGV4dCk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IHZhcigtLXNiYi1jb21wYWN0LXBhZ2luYXRvci1wYWdlcy1nYXApO1xuICBjb2xvcjogdmFyKC0tc2JiLWNvbXBhY3QtcGFnaW5hdG9yLWNvbG9yKTtcbn1cblxuLnNiYi1jb21wYWN0LXBhZ2luYXRvcl9fZGl2aWRlciB7XG4gIGhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDE2KX07XG59XG4iLCJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBodG1sLCB0eXBlIFRlbXBsYXRlUmVzdWx0LCB1bnNhZmVDU1MgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAuanMnO1xuXG5pbXBvcnQge1xuICBib3hTaXppbmdTdHlsZXMsXG4gIGkxOG5QYWdlLFxuICBpMThuUGFnaW5hdG9yT2YsXG4gIFNiYkVsZW1lbnQsXG4gIHR5cGUgU2JiRWxlbWVudFR5cGUsXG4gIFNiYlNjcmVlblJlYWRlck9ubHlFbGVtZW50LFxufSBmcm9tICcuLi8uLi9jb3JlLnRzJztcbmltcG9ydCB7IFNiYkRpdmlkZXJFbGVtZW50IH0gZnJvbSAnLi4vLi4vZGl2aWRlci5wdXJlLnRzJztcbmltcG9ydCB7IFNiYlBhZ2luYXRvckNvbW1vbkVsZW1lbnRNaXhpbiB9IGZyb20gJy4uL2NvbW1vbi9wYWdpbmF0b3ItY29tbW9uLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vY29tcGFjdC1wYWdpbmF0b3Iuc2Nzcz9pbmxpbmUnO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgcGFnaW5hdG9yIGNvbXBvbmVudCBpbiBjb21wYWN0IG1vZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJDb21wYWN0UGFnaW5hdG9yRWxlbWVudCBleHRlbmRzIFNiYlBhZ2luYXRvckNvbW1vbkVsZW1lbnRNaXhpbihTYmJFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItY29tcGFjdC1wYWdpbmF0b3InO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIGVsZW1lbnREZXBlbmRlbmNpZXM6IFNiYkVsZW1lbnRUeXBlW10gPSBbXG4gICAgU2JiRGl2aWRlckVsZW1lbnQsXG4gICAgU2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQsXG4gIF07XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBwYWdlOiAncGFnZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgcHJpdmF0ZSBfcmVuZGVyUGFnZU51bWJlcnMoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNwYW4gY2xhc3M9XCJzYmItcGFnaW5hdG9yX19wYWdlc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID4ke3RoaXMucGFnZUluZGV4ICsgMX08c2JiLWRpdmlkZXJcbiAgICAgICAgICBvcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcbiAgICAgICAgICBjbGFzcz1cInNiYi1jb21wYWN0LXBhZ2luYXRvcl9fZGl2aWRlclwiXG4gICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7ICctLXNiYi1kaXZpZGVyLWNvbG9yJzogJ2N1cnJlbnRjb2xvcicgfSl9XG4gICAgICAgICAgP25lZ2F0aXZlPSR7dGhpcy5uZWdhdGl2ZX1cbiAgICAgICAgPjwvc2JiLWRpdmlkZXJcbiAgICAgICAgPiR7dGhpcy5udW1iZXJPZlBhZ2VzKCl9PC9zcGFuXG4gICAgICA+XG4gICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgJHtgJHt0aGlzLmFjY2Vzc2liaWxpdHlQYWdlTGFiZWwgPyB0aGlzLmFjY2Vzc2liaWxpdHlQYWdlTGFiZWwgOiBpMThuUGFnZVt0aGlzLmxhbmd1YWdlLmN1cnJlbnRdfSAke3RoaXMucGFnZUluZGV4ICsgMX0gJHtpMThuUGFnaW5hdG9yT2ZbdGhpcy5sYW5ndWFnZS5jdXJyZW50XX0gJHt0aGlzLm51bWJlck9mUGFnZXMoKX1gfVxuICAgICAgPC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyUGFnaW5hdG9yKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgICR7dGhpcy5wYWdlclBvc2l0aW9uID09PSAnc3RhcnQnXG4gICAgICAgID8gaHRtbGAke3RoaXMucmVuZGVyUHJldk5leHRCdXR0b25zKCl9ICR7dGhpcy5fcmVuZGVyUGFnZU51bWJlcnMoKX1gXG4gICAgICAgIDogaHRtbGAke3RoaXMuX3JlbmRlclBhZ2VOdW1iZXJzKCl9ICR7dGhpcy5yZW5kZXJQcmV2TmV4dEJ1dHRvbnMoKX1gfVxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1jb21wYWN0LXBhZ2luYXRvcic6IFNiYkNvbXBhY3RQYWdpbmF0b3JFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQ21CQSxJQUFhLDZCQUFiLGNBQWdELCtCQUErQixXQUFXLENBQUE7O0FBQ3hELE9BQUEsY0FBc0I7OztBQUMvQixPQUFBLHNCQUF3QyxDQUM3RCxtQkFDQSwyQkFDRDs7O0FBQ3NCLE9BQUEsU0FBeUIsQ0FBQyxpQkFBaUIsVUFBVSwwQkFBTSxDQUFDOzs7QUFDNUQsT0FBQSxTQUFpQyxFQUN0RCxNQUFNLFFBQ0U7O0NBRUYscUJBQWtCO0FBQ3hCLFNBQU8sSUFBSTs7V0FFSixLQUFLLFlBQVksRUFBQzs7O2tCQUdYLFNBQVMsRUFBRSx1QkFBdUIsZ0JBQWdCLENBQUMsQ0FBQTtzQkFDL0MsS0FBSyxTQUFBOztXQUVoQixLQUFLLGVBQWUsQ0FBQTs7O1VBR3JCLEdBQUcsS0FBSyx5QkFBeUIsS0FBSyx5QkFBeUIsU0FBUyxLQUFLLFNBQVMsU0FBUSxHQUFJLEtBQUssWUFBWSxFQUFDLEdBQUksZ0JBQWdCLEtBQUssU0FBUyxTQUFRLEdBQUksS0FBSyxlQUFlLEdBQUE7Ozs7Q0FLM0ssa0JBQWU7QUFDaEMsU0FBTyxJQUFJO1FBQ1AsS0FBSyxrQkFBa0IsVUFDckIsSUFBSSxHQUFHLEtBQUssdUJBQXVCLENBQUEsR0FBSSxLQUFLLG9CQUFvQixLQUNoRSxJQUFJLEdBQUcsS0FBSyxvQkFBb0IsQ0FBQSxHQUFJLEtBQUssdUJBQXVCLEdBQUEifQ==
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { html, unsafeCSS } from "lit";
|
|
2
|
-
import { SbbElement, SbbNegativeMixin, boxSizingStyles } from "./core.js";
|
|
3
|
-
//#region src/elements/form-field/error/error.scss?inline
|
|
4
|
-
var error_default = ":host {\n --_sbb-error-height: calc(var(--sbb-typo-line-height-text) * 1em);\n --sbb-icon-svg-width: var(--sbb-error-icon-size);\n --sbb-icon-svg-height: var(--sbb-error-icon-size);\n display: flex;\n align-items: flex-start;\n color: var(--sbb-error-color);\n min-height: var(--_sbb-error-height);\n font-size: var(--sbb-error-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n}\n@media (forced-colors: active) {\n :host {\n --sbb-error-color: LinkText !important;\n }\n}\n\n:host([negative]) {\n --sbb-error-color: var(--sbb-color-red85);\n}\n\n.error__icon {\n display: flex;\n align-items: center;\n height: var(--_sbb-error-height);\n margin-inline-end: var(--sbb-spacing-fixed-1x);\n}\n\n.error-content {\n line-height: var(--sbb-typo-line-height-text);\n vertical-align: text-top;\n}\n\n.error__icon-svg {\n stroke: currentcolor;\n height: var(--_sbb-error-height);\n}";
|
|
5
|
-
//#endregion
|
|
6
|
-
//#region src/elements/form-field/error/error.component.ts
|
|
7
|
-
/**
|
|
8
|
-
* It displays an error message in the `sbb-form-field`.
|
|
9
|
-
*
|
|
10
|
-
* @slot - Use this slot to display the error message.
|
|
11
|
-
* @slot icon - Use this slot to override the default error icon.
|
|
12
|
-
*/
|
|
13
|
-
var SbbErrorElement = class extends SbbNegativeMixin(SbbElement) {
|
|
14
|
-
static {
|
|
15
|
-
this.elementName = "sbb-error";
|
|
16
|
-
}
|
|
17
|
-
static {
|
|
18
|
-
this.styles = [boxSizingStyles, unsafeCSS(error_default)];
|
|
19
|
-
}
|
|
20
|
-
connectedCallback() {
|
|
21
|
-
super.connectedCallback();
|
|
22
|
-
const formField = this.closest?.("sbb-form-field");
|
|
23
|
-
if (formField) this.negative = formField.hasAttribute("negative");
|
|
24
|
-
}
|
|
25
|
-
render() {
|
|
26
|
-
return html`
|
|
27
|
-
<span class="error__icon">
|
|
28
|
-
<slot name="icon">
|
|
29
|
-
<svg
|
|
30
|
-
class="error__icon-svg"
|
|
31
|
-
aria-hidden="true"
|
|
32
|
-
width="14"
|
|
33
|
-
height="14"
|
|
34
|
-
viewBox="0 0 14 14"
|
|
35
|
-
fill="none"
|
|
36
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
37
|
-
>
|
|
38
|
-
<line x1="7" y1="3" x2="7" y2="8.5" />
|
|
39
|
-
<line x1="7" y1="10" x2="7" y2="11" />
|
|
40
|
-
<circle cx="7" cy="7" r="6.5" />
|
|
41
|
-
</svg>
|
|
42
|
-
</slot>
|
|
43
|
-
</span>
|
|
44
|
-
<span class="error-content">
|
|
45
|
-
<slot></slot>
|
|
46
|
-
</span>
|
|
47
|
-
`;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
//#endregion
|
|
51
|
-
export { SbbErrorElement as t };
|
|
52
|
-
|
|
53
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuY29tcG9uZW50LUM4SlFRcVNCLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9mb3JtLWZpZWxkL2Vycm9yL2Vycm9yLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2Zvcm0tZmllbGQvZXJyb3IvZXJyb3IuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uLy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgLS1fc2JiLWVycm9yLWhlaWdodDogY2FsYyh2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC10ZXh0KSAqIDFlbSk7XG5cbiAgLy8gT3ZlcnJpZGVzIHNiYiBpY29uXG4gIC0tc2JiLWljb24tc3ZnLXdpZHRoOiB2YXIoLS1zYmItZXJyb3ItaWNvbi1zaXplKTtcbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiB2YXIoLS1zYmItZXJyb3ItaWNvbi1zaXplKTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6IHZhcigtLXNiYi1lcnJvci1jb2xvcik7XG4gIG1pbi1oZWlnaHQ6IHZhcigtLV9zYmItZXJyb3ItaGVpZ2h0KTtcbiAgZm9udC1zaXplOiB2YXIoLS1zYmItZXJyb3ItZm9udC1zaXplKTtcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLXNiYi10eXBvLWxldHRlci1zcGFjaW5nLXRleHQpO1xuXG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi1lcnJvci1jb2xvcjogTGlua1RleHQgIWltcG9ydGFudDtcbiAgfVxufVxuXG46aG9zdChbbmVnYXRpdmVdKSB7XG4gIC0tc2JiLWVycm9yLWNvbG9yOiB2YXIoLS1zYmItY29sb3ItcmVkODUpO1xufVxuXG4uZXJyb3JfX2ljb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IHZhcigtLV9zYmItZXJyb3ItaGVpZ2h0KTtcbiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTF4KTtcbn1cblxuLmVycm9yLWNvbnRlbnQge1xuICAvLyBGaXggZm9yIGxpbmUtaGVpZ2h0IHRha2luZyBtb3JlIHRoYW4gcmVzZXJ2ZWQgc3BhY2VcbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10eXBvLWxpbmUtaGVpZ2h0LXRleHQpO1xuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG59XG5cbi5lcnJvcl9faWNvbi1zdmcge1xuICBzdHJva2U6IGN1cnJlbnRjb2xvcjtcbiAgaGVpZ2h0OiB2YXIoLS1fc2JiLWVycm9yLWhlaWdodCk7XG59XG4iLCJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBodG1sLCB0eXBlIFRlbXBsYXRlUmVzdWx0LCB1bnNhZmVDU1MgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMsIFNiYkVsZW1lbnQsIFNiYk5lZ2F0aXZlTWl4aW4gfSBmcm9tICcuLi8uLi9jb3JlLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vZXJyb3Iuc2Nzcz9pbmxpbmUnO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGBzYmItZm9ybS1maWVsZGAuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhpcyBzbG90IHRvIGRpc3BsYXkgdGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAc2xvdCBpY29uIC0gVXNlIHRoaXMgc2xvdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBlcnJvciBpY29uLlxuICovXG5leHBvcnQgY2xhc3MgU2JiRXJyb3JFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihTYmJFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItZXJyb3InO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCB1bnNhZmVDU1Moc3R5bGUpXTtcblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLWZvcm0tZmllbGQnKTtcbiAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gZm9ybUZpZWxkLmhhc0F0dHJpYnV0ZSgnbmVnYXRpdmUnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JfX2ljb25cIj5cbiAgICAgICAgPHNsb3QgbmFtZT1cImljb25cIj5cbiAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yX19pY29uLXN2Z1wiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgd2lkdGg9XCIxNFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxNFwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE0IDE0XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsaW5lIHgxPVwiN1wiIHkxPVwiM1wiIHgyPVwiN1wiIHkyPVwiOC41XCIgLz5cbiAgICAgICAgICAgIDxsaW5lIHgxPVwiN1wiIHkxPVwiMTBcIiB4Mj1cIjdcIiB5Mj1cIjExXCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI3XCIgY3k9XCI3XCIgcj1cIjYuNVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc2xvdD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItY29udGVudFwiPlxuICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICA8L3NwYW4+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWVycm9yJzogU2JiRXJyb3JFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQ1lBLElBQWEsa0JBQWIsY0FBcUMsaUJBQWlCLFdBQVcsQ0FBQTs7QUFDL0IsT0FBQSxjQUFzQjs7O0FBQy9CLE9BQUEsU0FBeUIsQ0FBQyxpQkFBaUIsVUFBVSxjQUFNLENBQUM7O0NBRW5FLG9CQUFpQjtBQUMvQixRQUFNLG1CQUFtQjtFQUN6QixNQUFNLFlBQVksS0FBSyxVQUFVLGlCQUFpQjtBQUNsRCxNQUFJLFVBQ0YsTUFBSyxXQUFXLFVBQVUsYUFBYSxXQUFXOztDQUluQyxTQUFNO0FBQ3ZCLFNBQU8sSUFBSSJ9
|