@sbb-esta/lyne-elements-dev 5.0.0-next.1-dev.1777534945 → 5.0.0-next.1-dev.1777543026
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-CSCv_WVh.js → autocomplete-base-element-BiLyvcN-.js} +1 -1
- package/autocomplete.js +1 -1
- package/autocomplete.pure.js +1 -1
- package/core/styles/mixins/scrollbar.scss +0 -6
- package/core/styles/scrollbar.scss +19 -24
- package/core/styles/styles.js +2 -2
- package/core.css +0 -37
- package/core.js +2 -2
- package/custom-elements.json +66 -16
- package/development/autocomplete/autocomplete-base-element.js +1 -1
- package/development/autocomplete/autocomplete.component.js +1 -1
- package/development/{autocomplete-base-element-Bwkns3IL.js → autocomplete-base-element-BxBpn8_e.js} +2 -2
- package/development/autocomplete.js +1 -1
- package/development/autocomplete.pure.js +1 -1
- package/development/core/styles/styles.d.ts +1 -0
- package/development/core/styles/styles.d.ts.map +1 -1
- package/development/core/styles/styles.js +2 -2
- package/development/core.js +2 -2
- package/development/dialog/dialog-content/dialog-content.component.d.ts +1 -0
- package/development/dialog/dialog-content/dialog-content.component.d.ts.map +1 -1
- package/development/dialog/dialog-content/dialog-content.component.js +1 -1
- package/development/{dialog-content.component-B7Grxjk6.js → dialog-content.component-Bzt-PL6f.js} +10 -3
- package/development/dialog.js +1 -1
- package/development/dialog.pure.js +1 -1
- package/development/file-selector/common/file-selector-common.d.ts +1 -2
- package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
- package/development/file-selector/common/file-selector-common.js +2 -2
- package/development/file-selector/file-selector/file-selector.component.d.ts +1 -2
- package/development/file-selector/file-selector/file-selector.component.d.ts.map +1 -1
- package/development/file-selector/file-selector/file-selector.component.js +3 -6
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
- package/development/file-selector-common-BH_iIjcB.js +417 -0
- package/development/{file-selector-dropzone.component-DRUUWI1A.js → file-selector-dropzone.component-ZCanLwF-.js} +4 -8
- package/development/file-selector.js +3 -3
- package/development/file-selector.pure.js +3 -3
- package/development/map-container/map-container.component.d.ts.map +1 -1
- package/development/map-container/map-container.component.js +1 -1
- package/development/map-container.component-DoFCVBoh.js +180 -0
- package/development/map-container.js +1 -1
- package/development/map-container.pure.js +1 -1
- package/development/menu/menu/menu.component.d.ts.map +1 -1
- package/development/menu/menu/menu.component.js +1 -1
- package/development/menu.component-CDBUaD8s.js +369 -0
- package/development/menu.js +1 -1
- package/development/menu.pure.js +1 -1
- package/development/navigation/navigation/navigation.component.d.ts.map +1 -1
- package/development/navigation/navigation/navigation.component.js +1 -1
- package/development/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
- package/development/navigation/navigation-section/navigation-section.component.js +1 -1
- package/development/navigation-section.component-D3_XVwyt.js +350 -0
- package/development/navigation.component-Cco4llBt.js +319 -0
- package/development/navigation.js +2 -2
- package/development/navigation.pure.js +2 -2
- package/development/overlay/overlay.component.d.ts.map +1 -1
- package/development/overlay/overlay.component.js +1 -1
- package/development/overlay.component-DBzb0PdD.js +206 -0
- package/development/overlay.js +1 -1
- package/development/overlay.pure.js +1 -1
- package/development/popover/popover.component.d.ts +1 -0
- package/development/popover/popover.component.d.ts.map +1 -1
- package/development/popover/popover.component.js +1 -1
- package/development/popover.component-Dj0INQsI.js +564 -0
- package/development/popover.js +1 -1
- package/development/popover.pure.js +1 -1
- package/development/select/select.component.js +1 -1
- package/development/{select.component-C1Xfvvii.js → select.component-D_9pjl7T.js} +2 -2
- package/development/select.js +1 -1
- package/development/select.pure.js +1 -1
- package/development/sidebar/sidebar/sidebar.component.d.ts.map +1 -1
- package/development/sidebar/sidebar/sidebar.component.js +1 -1
- package/development/sidebar.component-CYLbI1Vp.js +356 -0
- package/development/sidebar.js +1 -1
- package/development/sidebar.pure.js +1 -1
- package/development/styles-B_IWjHc5.js +22 -0
- package/development/table/table-wrapper/table-wrapper.component.js +1 -1
- package/development/table-wrapper.component-D8IFPow6.js +119 -0
- package/development/table.js +1 -1
- package/development/table.pure.js +1 -1
- package/dialog/dialog-content/dialog-content.component.js +1 -1
- package/{dialog-content.component-are-UBx3.js → dialog-content.component-iRLHPKPb.js} +7 -2
- package/dialog.js +1 -1
- package/dialog.pure.js +1 -1
- package/file-selector/common/file-selector-common.js +2 -2
- package/file-selector/file-selector/file-selector.component.js +10 -13
- package/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
- package/{file-selector-common-jpJmVqAw.js → file-selector-common-PcqPdsnN.js} +44 -38
- package/{file-selector-dropzone.component-DDRTu6p2.js → file-selector-dropzone.component-2XUfh1NC.js} +20 -24
- package/file-selector.js +5 -5
- package/file-selector.pure.js +4 -4
- package/map-container/map-container.component.js +1 -1
- package/{map-container.component-Btnl3n9d.js → map-container.component-5I5DW5dJ.js} +23 -16
- package/map-container.js +1 -1
- package/map-container.pure.js +1 -1
- package/menu/menu/menu.component.js +1 -1
- package/{menu.component-CpNMheMG.js → menu.component-Bd37u3Ps.js} +26 -22
- package/menu.js +1 -1
- package/menu.pure.js +1 -1
- package/navigation/navigation/navigation.component.js +1 -1
- package/navigation/navigation-section/navigation-section.component.js +1 -1
- package/{navigation-section.component-219JlVIe.js → navigation-section.component-B_0xi30L.js} +24 -20
- package/{navigation.component-gLrMCbh9.js → navigation.component-CmrLIeDB.js} +24 -20
- package/navigation.js +2 -2
- package/navigation.pure.js +2 -2
- package/off-brand-theme.css +33 -134
- package/overlay/overlay.component.js +1 -1
- package/overlay.component-D2jtCeeb.js +156 -0
- package/overlay.js +1 -1
- package/overlay.pure.js +1 -1
- package/package.json +2 -2
- package/popover/popover.component.js +1 -1
- package/{popover.component-DnY9obd7.js → popover.component-CiMeNnO-.js} +27 -24
- package/popover.js +1 -1
- package/popover.pure.js +1 -1
- package/safety-theme.css +33 -134
- package/scrollbar.css +33 -97
- package/select/select.component.js +1 -1
- package/{select.component-Bhvd_sUV.js → select.component-BXPU7X_X.js} +1 -1
- package/select.js +1 -1
- package/select.pure.js +1 -1
- package/sidebar/sidebar/sidebar.component.js +1 -1
- package/{sidebar.component-Dpf9jZ1P.js → sidebar.component-CeUPJaqy.js} +28 -21
- package/sidebar.js +1 -1
- package/sidebar.pure.js +1 -1
- package/standard-theme.css +33 -134
- package/styles-Cb4jdMeE.js +5 -0
- package/table/table-wrapper/table-wrapper.component.js +1 -1
- package/{table-wrapper.component-DGL8RaxF.js → table-wrapper.component-CZ90q3pY.js} +1 -1
- package/table.js +1 -1
- package/table.pure.js +1 -1
- package/development/file-selector-common-BwkZZzA0.js +0 -409
- package/development/map-container.component-BLF21LG7.js +0 -173
- package/development/menu.component-BpKGNICN.js +0 -365
- package/development/navigation-section.component-DumXFFfg.js +0 -346
- package/development/navigation.component-CpoBEP55.js +0 -315
- package/development/overlay.component-CC_quHYI.js +0 -206
- package/development/popover.component-DT-cfDqo.js +0 -561
- package/development/sidebar.component-DR2JGwnM.js +0 -349
- package/development/styles-6T7UvhxK.js +0 -18
- package/development/table-wrapper.component-CjMOENHV.js +0 -119
- package/overlay.component-B00EoAd5.js +0 -156
- package/styles-D5okOWF1.js +0 -5
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { html, isServer, unsafeCSS } from "lit";
|
|
3
|
-
import { eventOptions, property } from "lit/decorators.js";
|
|
4
|
-
import { SbbAnimationCompleteMixin, SbbEscapableOverlayController, SbbFocusTrapController, SbbOpenCloseBaseElement, boxSizingStyles, forceType, handleDistinctChange, isZeroAnimationDuration } from "./core.js";
|
|
5
|
-
import { ResizeController } from "@lit-labs/observers/resize-controller.js";
|
|
6
|
-
//#region src/elements/sidebar/sidebar/sidebar.scss?inline
|
|
7
|
-
var sidebar_default = ":host {\n --sbb-link-text-decoration-line: none;\n --sbb-sidebar-background-color: var(--sbb-background-color-1);\n --sbb-sidebar-scrollbar-placeholder-width: var(--sbb-spacing-fixed-3x);\n --_sbb-sidebar-margin: 0;\n --_sbb-sidebar-margin-block-start: var(--sbb-sidebar-margin);\n --_sbb-sidebar-translate-x: -100%;\n --_sbb-sidebar-z-index: 2;\n --_sbb-sidebar-padding-inline-end: var(--sbb-sidebar-padding);\n --_sbb-sidebar-padding-block-start: var(--sbb-sidebar-padding);\n --_sbb-sidebar-border-radius-start: var(--sbb-sidebar-border-radius);\n --_sbb-sidebar-border-radius-end: 0;\n --_sbb-sidebar-close-button-size: var(--sbb-size-element-xs);\n --_sbb-sidebar-max-width: calc(100% - 2 * var(--_sbb-sidebar-margin));\n display: block;\n width: 20rem;\n}\n@supports (scrollbar-gutter: stable) and (not (-webkit-touch-callout: none)) {\n :host {\n --_sbb-sidebar-padding-inline-end: calc(\n var(--sbb-sidebar-padding) - var(--sbb-sidebar-scrollbar-placeholder-width)\n );\n }\n}\n\n:host([color=white]) {\n --sbb-sidebar-background-color: var(--sbb-background-color-1);\n}\n\n:host([color=milk]) {\n --sbb-sidebar-background-color: var(--sbb-background-color-3);\n}\n\n:host(:is([mode=over], :is(:state(mode-over-forced),[state--mode-over-forced]):not(:is(:state(mode-over-forced-closing),[state--mode-over-forced-closing])))) {\n --_sbb-sidebar-margin: var(--sbb-sidebar-margin);\n --_sbb-sidebar-border-radius-end: var(--sbb-sidebar-border-radius);\n --_sbb-sidebar-z-index: 3;\n}\n\n:host(:is(:dir(rtl), [position=end])) {\n --_sbb-sidebar-translate-x: 100%;\n}\n\n:host(:dir(rtl)[position=end]) {\n --_sbb-sidebar-translate-x: -100%;\n}\n\n.sbb-sidebar {\n width: inherit;\n max-width: var(--_sbb-sidebar-max-width);\n background-color: var(--sbb-sidebar-background-color);\n display: flex;\n flex-direction: column;\n position: absolute;\n overflow: hidden;\n inset-block: 0;\n z-index: var(--_sbb-sidebar-z-index);\n border-start-start-radius: var(--_sbb-sidebar-border-radius-start);\n border-start-end-radius: var(--_sbb-sidebar-border-radius-start);\n border-end-start-radius: var(--_sbb-sidebar-border-radius-end);\n border-end-end-radius: var(--_sbb-sidebar-border-radius-end);\n margin: var(--_sbb-sidebar-margin);\n margin-block-start: var(--_sbb-sidebar-margin-block-start);\n transition-duration: var(--sbb-sidebar-container-animation-duration);\n transition-timing-function: var(--sbb-sidebar-container-animation-easing);\n transition-property: width, translate;\n translate: none;\n}\n:host([position=end]) .sbb-sidebar {\n inset-inline-end: 0;\n}\n:host(:is(:state(state-closed),[state--state-closed])) .sbb-sidebar {\n visibility: hidden;\n}\n:host(:is(:is(:state(state-closing),[state--state-closing]), :is(:state(state-closed),[state--state-closed]))) .sbb-sidebar {\n translate: var(--_sbb-sidebar-translate-x) 0;\n}\n\n.sbb-sidebar-title-section {\n display: flex;\n width: 100%;\n gap: var(--sbb-sidebar-title-gap);\n background-color: var(--sbb-sidebar-background-color);\n padding-inline: var(--sbb-sidebar-padding);\n transition: box-shadow var(--sbb-animation-easing) var(--sbb-sidebar-container-animation-duration);\n box-shadow: none;\n}\n:host(:is(:state(scrolled),[state--scrolled])) .sbb-sidebar-title-section {\n box-shadow: var(--sbb-box-shadow-level-5-soft);\n}\n\n.sbb-sidebar-content-section {\n --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);\n --sbb-scrollbar-thumb-width: 0.125rem;\n --sbb-scrollbar-thumb-width-hover: 0.25rem;\n --sbb-scrollbar-width-firefox: thin;\n --sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n --sbb-scrollbar-color: light-dark(\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent),\n color-mix(in srgb, var(--sbb-color-white) 30%, transparent)\n );\n --sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-black) 60%, transparent);\n --sbb-scrollbar-color-hover: light-dark(\n color-mix(in srgb, var(--sbb-color-black) 60%, transparent),\n color-mix(in srgb, var(--sbb-color-white) 60%, transparent)\n );\n --sbb-scrollbar-track-color: transparent;\n}\n.sbb-sidebar-content-section::-webkit-scrollbar {\n width: var(--sbb-scrollbar-width);\n height: var(--sbb-scrollbar-width);\n background-color: var(--sbb-scrollbar-track-color, transparent);\n}\n.sbb-sidebar-content-section::-webkit-scrollbar-corner {\n background-color: var(--sbb-scrollbar-track-color, transparent);\n}\n.sbb-sidebar-content-section::-webkit-scrollbar-thumb {\n background-color: var(--sbb-scrollbar-color, currentcolor);\n border: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;\n border-radius: var(--sbb-border-radius-4x);\n background-clip: padding-box;\n}\n.sbb-sidebar-content-section::-webkit-scrollbar-thumb:hover {\n background-color: var(--sbb-scrollbar-color-hover, currentcolor);\n border-width: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)));\n}\n.sbb-sidebar-content-section::-webkit-scrollbar-button, .sbb-sidebar-content-section::-webkit-scrollbar-corner {\n display: none;\n}\n@supports not selector(::-webkit-scrollbar) {\n .sbb-sidebar-content-section {\n scrollbar-width: var(--sbb-scrollbar-width-firefox);\n scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);\n }\n}\n.sbb-sidebar-content-section {\n padding-block-start: var(--_sbb-sidebar-padding-block-start);\n padding-inline: var(--sbb-sidebar-padding) var(--_sbb-sidebar-padding-inline-end);\n overflow-y: auto;\n flex-grow: 1;\n outline-color: var(--sbb-focus-outline-color);\n}\n@supports (scrollbar-gutter: stable) {\n .sbb-sidebar-content-section {\n scrollbar-gutter: stable;\n }\n}\n\n::slotted(sbb-sidebar-title) {\n flex-grow: 1;\n margin-block: var(--sbb-sidebar-title-padding-block);\n}\n\n::slotted(sbb-sidebar-close-button) {\n order: 1;\n margin-inline-end: calc(-1 * (var(--sbb-sidebar-padding) - var(--sbb-sidebar-title-padding-block)));\n margin-block: var(--sbb-sidebar-title-padding-block);\n inset-inline-end: var(--sbb-sidebar-padding);\n}";
|
|
8
|
-
//#endregion
|
|
9
|
-
//#region src/elements/sidebar/sidebar/sidebar.component.ts
|
|
10
|
-
/**
|
|
11
|
-
* This component corresponds to a sidebar that can be opened on the sidebar container.
|
|
12
|
-
*
|
|
13
|
-
* @slot - Use the unnamed slot to slot any content into the sidebar.
|
|
14
|
-
* @slot title - Use the title slot to add an <sbb-title>.
|
|
15
|
-
*/
|
|
16
|
-
var SbbSidebarElement = (() => {
|
|
17
|
-
let _classSuper = SbbAnimationCompleteMixin(SbbOpenCloseBaseElement);
|
|
18
|
-
let _instanceExtraInitializers = [];
|
|
19
|
-
let _color_decorators;
|
|
20
|
-
let _color_initializers = [];
|
|
21
|
-
let _color_extraInitializers = [];
|
|
22
|
-
let _mode_decorators;
|
|
23
|
-
let _mode_initializers = [];
|
|
24
|
-
let _mode_extraInitializers = [];
|
|
25
|
-
let _position_decorators;
|
|
26
|
-
let _position_initializers = [];
|
|
27
|
-
let _position_extraInitializers = [];
|
|
28
|
-
let _opened_decorators;
|
|
29
|
-
let _opened_initializers = [];
|
|
30
|
-
let _opened_extraInitializers = [];
|
|
31
|
-
let _focusOnOpen_decorators;
|
|
32
|
-
let _focusOnOpen_initializers = [];
|
|
33
|
-
let _focusOnOpen_extraInitializers = [];
|
|
34
|
-
let __detectScrolledState_decorators;
|
|
35
|
-
return class SbbSidebarElement extends _classSuper {
|
|
36
|
-
static {
|
|
37
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
38
|
-
_color_decorators = [property({ reflect: true })];
|
|
39
|
-
_mode_decorators = [forceType((v) => v === "over" ? "over" : "side"), property({ reflect: true })];
|
|
40
|
-
_position_decorators = [
|
|
41
|
-
forceType((v) => v === "end" ? "end" : "start"),
|
|
42
|
-
handleDistinctChange((instance, _newValue, oldValue) => instance._updateSidebarWidth(oldValue)),
|
|
43
|
-
property({ reflect: true })
|
|
44
|
-
];
|
|
45
|
-
_opened_decorators = [forceType(), property({
|
|
46
|
-
type: Boolean,
|
|
47
|
-
reflect: true
|
|
48
|
-
})];
|
|
49
|
-
_focusOnOpen_decorators = [forceType(), property({
|
|
50
|
-
type: Boolean,
|
|
51
|
-
attribute: "focus-on-open"
|
|
52
|
-
})];
|
|
53
|
-
__detectScrolledState_decorators = [eventOptions({ passive: true })];
|
|
54
|
-
__esDecorate(this, null, _color_decorators, {
|
|
55
|
-
kind: "accessor",
|
|
56
|
-
name: "color",
|
|
57
|
-
static: false,
|
|
58
|
-
private: false,
|
|
59
|
-
access: {
|
|
60
|
-
has: (obj) => "color" in obj,
|
|
61
|
-
get: (obj) => obj.color,
|
|
62
|
-
set: (obj, value) => {
|
|
63
|
-
obj.color = value;
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
metadata: _metadata
|
|
67
|
-
}, _color_initializers, _color_extraInitializers);
|
|
68
|
-
__esDecorate(this, null, _mode_decorators, {
|
|
69
|
-
kind: "accessor",
|
|
70
|
-
name: "mode",
|
|
71
|
-
static: false,
|
|
72
|
-
private: false,
|
|
73
|
-
access: {
|
|
74
|
-
has: (obj) => "mode" in obj,
|
|
75
|
-
get: (obj) => obj.mode,
|
|
76
|
-
set: (obj, value) => {
|
|
77
|
-
obj.mode = value;
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
metadata: _metadata
|
|
81
|
-
}, _mode_initializers, _mode_extraInitializers);
|
|
82
|
-
__esDecorate(this, null, _position_decorators, {
|
|
83
|
-
kind: "accessor",
|
|
84
|
-
name: "position",
|
|
85
|
-
static: false,
|
|
86
|
-
private: false,
|
|
87
|
-
access: {
|
|
88
|
-
has: (obj) => "position" in obj,
|
|
89
|
-
get: (obj) => obj.position,
|
|
90
|
-
set: (obj, value) => {
|
|
91
|
-
obj.position = value;
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
metadata: _metadata
|
|
95
|
-
}, _position_initializers, _position_extraInitializers);
|
|
96
|
-
__esDecorate(this, null, _opened_decorators, {
|
|
97
|
-
kind: "accessor",
|
|
98
|
-
name: "opened",
|
|
99
|
-
static: false,
|
|
100
|
-
private: false,
|
|
101
|
-
access: {
|
|
102
|
-
has: (obj) => "opened" in obj,
|
|
103
|
-
get: (obj) => obj.opened,
|
|
104
|
-
set: (obj, value) => {
|
|
105
|
-
obj.opened = value;
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
metadata: _metadata
|
|
109
|
-
}, _opened_initializers, _opened_extraInitializers);
|
|
110
|
-
__esDecorate(this, null, _focusOnOpen_decorators, {
|
|
111
|
-
kind: "accessor",
|
|
112
|
-
name: "focusOnOpen",
|
|
113
|
-
static: false,
|
|
114
|
-
private: false,
|
|
115
|
-
access: {
|
|
116
|
-
has: (obj) => "focusOnOpen" in obj,
|
|
117
|
-
get: (obj) => obj.focusOnOpen,
|
|
118
|
-
set: (obj, value) => {
|
|
119
|
-
obj.focusOnOpen = value;
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
metadata: _metadata
|
|
123
|
-
}, _focusOnOpen_initializers, _focusOnOpen_extraInitializers);
|
|
124
|
-
__esDecorate(this, null, __detectScrolledState_decorators, {
|
|
125
|
-
kind: "method",
|
|
126
|
-
name: "_detectScrolledState",
|
|
127
|
-
static: false,
|
|
128
|
-
private: false,
|
|
129
|
-
access: {
|
|
130
|
-
has: (obj) => "_detectScrolledState" in obj,
|
|
131
|
-
get: (obj) => obj._detectScrolledState
|
|
132
|
-
},
|
|
133
|
-
metadata: _metadata
|
|
134
|
-
}, null, _instanceExtraInitializers);
|
|
135
|
-
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
136
|
-
enumerable: true,
|
|
137
|
-
configurable: true,
|
|
138
|
-
writable: true,
|
|
139
|
-
value: _metadata
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
static {
|
|
143
|
-
this.elementName = "sbb-sidebar";
|
|
144
|
-
}
|
|
145
|
-
static {
|
|
146
|
-
this.styles = [boxSizingStyles, unsafeCSS(sidebar_default)];
|
|
147
|
-
}
|
|
148
|
-
#color_accessor_storage;
|
|
149
|
-
/** Background color of the sidebar. Either `white` or `milk`. */
|
|
150
|
-
get color() {
|
|
151
|
-
return this.#color_accessor_storage;
|
|
152
|
-
}
|
|
153
|
-
set color(value) {
|
|
154
|
-
this.#color_accessor_storage = value;
|
|
155
|
-
}
|
|
156
|
-
#mode_accessor_storage;
|
|
157
|
-
/** Mode of the sidebar; one of 'side' or 'over'. */
|
|
158
|
-
get mode() {
|
|
159
|
-
return this.#mode_accessor_storage;
|
|
160
|
-
}
|
|
161
|
-
set mode(value) {
|
|
162
|
-
this.#mode_accessor_storage = value;
|
|
163
|
-
}
|
|
164
|
-
#position_accessor_storage;
|
|
165
|
-
/** The side that the sidebar is attached to. */
|
|
166
|
-
get position() {
|
|
167
|
-
return this.#position_accessor_storage;
|
|
168
|
-
}
|
|
169
|
-
set position(value) {
|
|
170
|
-
this.#position_accessor_storage = value;
|
|
171
|
-
}
|
|
172
|
-
#opened_accessor_storage;
|
|
173
|
-
/**
|
|
174
|
-
* Whether the sidebar is opened or closed.
|
|
175
|
-
* Can be used to initially set the opened state, where
|
|
176
|
-
* the animation will be skipped.
|
|
177
|
-
*/
|
|
178
|
-
get opened() {
|
|
179
|
-
return this.#opened_accessor_storage;
|
|
180
|
-
}
|
|
181
|
-
set opened(value) {
|
|
182
|
-
this.#opened_accessor_storage = value;
|
|
183
|
-
}
|
|
184
|
-
#focusOnOpen_accessor_storage;
|
|
185
|
-
/**
|
|
186
|
-
* Whether the sidebar should focus the first focusable element automatically when opened.
|
|
187
|
-
* Defaults to false in when mode is set to `side`, otherwise defaults to true.
|
|
188
|
-
* If explicitly enabled, focus will be moved into the sidebar in `side` mode as well.
|
|
189
|
-
*/
|
|
190
|
-
get focusOnOpen() {
|
|
191
|
-
return this.#focusOnOpen_accessor_storage;
|
|
192
|
-
}
|
|
193
|
-
set focusOnOpen(value) {
|
|
194
|
-
this.#focusOnOpen_accessor_storage = value;
|
|
195
|
-
}
|
|
196
|
-
/** Returns the SbbSidebarContainerElement where this sidebar is contained. */
|
|
197
|
-
get container() {
|
|
198
|
-
return this._container;
|
|
199
|
-
}
|
|
200
|
-
constructor() {
|
|
201
|
-
super();
|
|
202
|
-
this.#color_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _color_initializers, "white"));
|
|
203
|
-
this.#mode_accessor_storage = (__runInitializers(this, _color_extraInitializers), __runInitializers(this, _mode_initializers, "side"));
|
|
204
|
-
this.#position_accessor_storage = (__runInitializers(this, _mode_extraInitializers), __runInitializers(this, _position_initializers, "start"));
|
|
205
|
-
this.#opened_accessor_storage = (__runInitializers(this, _position_extraInitializers), __runInitializers(this, _opened_initializers, false));
|
|
206
|
-
this.#focusOnOpen_accessor_storage = (__runInitializers(this, _opened_extraInitializers), __runInitializers(this, _focusOnOpen_initializers, false));
|
|
207
|
-
this._container = (__runInitializers(this, _focusOnOpen_extraInitializers), null);
|
|
208
|
-
this._lastFocusedElement = null;
|
|
209
|
-
this._focusTrapController = new SbbFocusTrapController(this);
|
|
210
|
-
this._escapableOverlayController = new SbbEscapableOverlayController(this);
|
|
211
|
-
this._closeOnNavigation = () => {
|
|
212
|
-
if (this._isModeOver() && this.isOpen) this.close();
|
|
213
|
-
};
|
|
214
|
-
this.addController(new ResizeController(this, {
|
|
215
|
-
skipInitial: true,
|
|
216
|
-
callback: () => this._updateSidebarWidth()
|
|
217
|
-
}));
|
|
218
|
-
this.addEventListener?.("click", (e) => {
|
|
219
|
-
if (e.target?.localName === "sbb-sidebar-close-button") this.close();
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
connectedCallback() {
|
|
223
|
-
super.connectedCallback();
|
|
224
|
-
this._container = this.closest?.("sbb-sidebar-container");
|
|
225
|
-
this._updateSidebarWidth();
|
|
226
|
-
if (this.isOpen && this._isModeOver()) this._takeFocus();
|
|
227
|
-
if (!isServer) if (window.navigation) window.navigation.addEventListener("navigate", this._closeOnNavigation);
|
|
228
|
-
else window.addEventListener("popstate", this._closeOnNavigation);
|
|
229
|
-
}
|
|
230
|
-
disconnectedCallback() {
|
|
231
|
-
super.disconnectedCallback();
|
|
232
|
-
this.container?.style.removeProperty(this._buildCssWidthVar());
|
|
233
|
-
this._container = null;
|
|
234
|
-
if (!isServer) if (window.navigation) window.navigation.removeEventListener("navigate", this._closeOnNavigation);
|
|
235
|
-
else window.removeEventListener("popstate", this._closeOnNavigation);
|
|
236
|
-
}
|
|
237
|
-
willUpdate(changedProperties) {
|
|
238
|
-
super.willUpdate(changedProperties);
|
|
239
|
-
if (changedProperties.has("opened")) {
|
|
240
|
-
if (this.opened) this.open();
|
|
241
|
-
else if (!this.opened) this.close();
|
|
242
|
-
}
|
|
243
|
-
if (changedProperties.has("mode")) if (this.mode === "over" && this.isOpen) this._takeFocus();
|
|
244
|
-
else this.cedeFocus();
|
|
245
|
-
}
|
|
246
|
-
firstUpdated(changedProperties) {
|
|
247
|
-
super.firstUpdated(changedProperties);
|
|
248
|
-
this._updateSidebarWidth();
|
|
249
|
-
}
|
|
250
|
-
/** Toggles the sidebar visibility. */
|
|
251
|
-
toggle() {
|
|
252
|
-
if (this.state === "opening" || this.state === "opened") this.close();
|
|
253
|
-
else this.open();
|
|
254
|
-
}
|
|
255
|
-
/** Opens the sidebar. */
|
|
256
|
-
open() {
|
|
257
|
-
if (this.state === "opening" || this.state === "opened" || !this.dispatchBeforeOpenEvent()) return;
|
|
258
|
-
this.startAnimation();
|
|
259
|
-
if (!isServer && document.activeElement?.localName !== "body") this._lastFocusedElement = document.activeElement;
|
|
260
|
-
this.opened = true;
|
|
261
|
-
this.state = "opening";
|
|
262
|
-
const isZeroAnimationDuration = this._isZeroAnimationDuration() || !this.isConnected;
|
|
263
|
-
const isDuringInitialization = !this.hasUpdated;
|
|
264
|
-
if (!(isDuringInitialization || isZeroAnimationDuration)) return;
|
|
265
|
-
this.internals.states.add("skip-animation");
|
|
266
|
-
if (isDuringInitialization) this.updateComplete.then(() => this._handleOpening());
|
|
267
|
-
else this._handleOpening();
|
|
268
|
-
}
|
|
269
|
-
_isZeroAnimationDuration() {
|
|
270
|
-
return isZeroAnimationDuration(this, "--sbb-sidebar-container-animation-duration");
|
|
271
|
-
}
|
|
272
|
-
_handleOpening() {
|
|
273
|
-
this.state = "opened";
|
|
274
|
-
setTimeout(() => this.internals.states.delete("skip-animation"));
|
|
275
|
-
this._takeFocus();
|
|
276
|
-
this.stopAnimation();
|
|
277
|
-
this.dispatchOpenEvent();
|
|
278
|
-
}
|
|
279
|
-
/** Closes the sidebar. */
|
|
280
|
-
close() {
|
|
281
|
-
if (this.state === "closing" || this.state === "closed" || !this.dispatchBeforeCloseEvent()) return;
|
|
282
|
-
this.startAnimation();
|
|
283
|
-
const isZeroAnimationDuration = this._isZeroAnimationDuration();
|
|
284
|
-
if (!this.hasUpdated || isZeroAnimationDuration) this.internals.states.add("skip-animation");
|
|
285
|
-
else this.state = "closing";
|
|
286
|
-
this.opened = false;
|
|
287
|
-
if (!this.hasUpdated || isZeroAnimationDuration) this._handleClosing();
|
|
288
|
-
}
|
|
289
|
-
_handleClosing() {
|
|
290
|
-
this.state = "closed";
|
|
291
|
-
setTimeout(() => this.internals.states.delete("skip-animation"));
|
|
292
|
-
this.cedeFocus();
|
|
293
|
-
if (!isServer && (this.contains(document.activeElement) || this._isModeOver())) if (this._lastFocusedElement) this._lastFocusedElement?.focus();
|
|
294
|
-
else document.activeElement.blur();
|
|
295
|
-
this._lastFocusedElement = null;
|
|
296
|
-
this.stopAnimation();
|
|
297
|
-
this.dispatchCloseEvent();
|
|
298
|
-
}
|
|
299
|
-
_takeFocus() {
|
|
300
|
-
if (!this.isConnected) return;
|
|
301
|
-
const isModeOver = this._isModeOver();
|
|
302
|
-
if (isModeOver || this.focusOnOpen) this._focusTrapController.focusInitialElement();
|
|
303
|
-
if (isModeOver) {
|
|
304
|
-
this._escapableOverlayController.connect();
|
|
305
|
-
this._focusTrapController.enabled = true;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
cedeFocus() {
|
|
309
|
-
this._focusTrapController.enabled = false;
|
|
310
|
-
this._escapableOverlayController.disconnect();
|
|
311
|
-
}
|
|
312
|
-
_updateSidebarWidth(oldPosition) {
|
|
313
|
-
const container = this.container;
|
|
314
|
-
if (!container) return;
|
|
315
|
-
if (oldPosition) container.style.removeProperty(this._buildCssWidthVar(oldPosition));
|
|
316
|
-
const width = this.offsetWidth;
|
|
317
|
-
if (!width) return;
|
|
318
|
-
const newValue = `${width}px`;
|
|
319
|
-
if (container.style.getPropertyValue(this._buildCssWidthVar()) === newValue) return;
|
|
320
|
-
container.style.setProperty(this._buildCssWidthVar(), newValue);
|
|
321
|
-
}
|
|
322
|
-
_buildCssWidthVar(position = this.position) {
|
|
323
|
-
return `--_sbb-sidebar-container-${position}-width`;
|
|
324
|
-
}
|
|
325
|
-
_isModeOver() {
|
|
326
|
-
return this.mode === "over" || this.matches(":is(:state(mode-over-forced),[state--mode-over-forced])");
|
|
327
|
-
}
|
|
328
|
-
_onTransitionEnd(event) {
|
|
329
|
-
if (event.propertyName !== "translate" || event.target !== event.currentTarget) return;
|
|
330
|
-
if (this.state === "opening") this._handleOpening();
|
|
331
|
-
else if (this.state === "closing") this._handleClosing();
|
|
332
|
-
}
|
|
333
|
-
_detectScrolledState() {
|
|
334
|
-
this.toggleState("scrolled", (this.shadowRoot?.querySelector(".sbb-sidebar-content-section")?.scrollTop ?? 0) > 0);
|
|
335
|
-
}
|
|
336
|
-
render() {
|
|
337
|
-
return html`<div class="sbb-sidebar" @transitionend=${this._onTransitionEnd}>
|
|
338
|
-
<div class="sbb-sidebar-title-section"><slot name="title-section"></slot></div>
|
|
339
|
-
<div class="sbb-sidebar-content-section" @scroll=${() => this._detectScrolledState()}>
|
|
340
|
-
<slot></slot>
|
|
341
|
-
</div>
|
|
342
|
-
</div>`;
|
|
343
|
-
}
|
|
344
|
-
};
|
|
345
|
-
})();
|
|
346
|
-
//#endregion
|
|
347
|
-
export { SbbSidebarElement as t };
|
|
348
|
-
|
|
349
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQtRFIySkd3bk0uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3NpZGViYXIvc2lkZWJhci9zaWRlYmFyLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3NpZGViYXIvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIC0tc2JiLWxpbmstdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7XG4gIC0tc2JiLXNpZGViYXItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMSk7XG4gIC0tc2JiLXNpZGViYXItc2Nyb2xsYmFyLXBsYWNlaG9sZGVyLXdpZHRoOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0zeCk7XG4gIC0tX3NiYi1zaWRlYmFyLW1hcmdpbjogMDtcbiAgLS1fc2JiLXNpZGViYXItbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1zYmItc2lkZWJhci1tYXJnaW4pO1xuICAtLV9zYmItc2lkZWJhci10cmFuc2xhdGUteDogLTEwMCU7XG4gIC0tX3NiYi1zaWRlYmFyLXotaW5kZXg6IDI7XG4gIC0tX3NiYi1zaWRlYmFyLXBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0tc2JiLXNpZGViYXItcGFkZGluZyk7XG4gIC0tX3NiYi1zaWRlYmFyLXBhZGRpbmctYmxvY2stc3RhcnQ6IHZhcigtLXNiYi1zaWRlYmFyLXBhZGRpbmcpO1xuICAtLV9zYmItc2lkZWJhci1ib3JkZXItcmFkaXVzLXN0YXJ0OiB2YXIoLS1zYmItc2lkZWJhci1ib3JkZXItcmFkaXVzKTtcbiAgLS1fc2JiLXNpZGViYXItYm9yZGVyLXJhZGl1cy1lbmQ6IDA7XG4gIC0tX3NiYi1zaWRlYmFyLWNsb3NlLWJ1dHRvbi1zaXplOiB2YXIoLS1zYmItc2l6ZS1lbGVtZW50LXhzKTtcbiAgLS1fc2JiLXNpZGViYXItbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAyICogdmFyKC0tX3NiYi1zaWRlYmFyLW1hcmdpbikpO1xuXG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDMyMCl9O1xuXG4gIC8vIFN1YnRyYWN0IHRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsYmFyIGZyb20gdGhlIHBhZGRpbmcgKEV4Y2x1ZGUgaU9TIGJyb3dzZXJzIGJlY2F1c2UgdGhleSB1c2Ugb3ZlcmxheSBzY3JvbGxiYXJzKVxuICBAc3VwcG9ydHMgKHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZSkgYW5kIChub3QgKC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZSkpIHtcbiAgICAtLV9zYmItc2lkZWJhci1wYWRkaW5nLWlubGluZS1lbmQ6IGNhbGMoXG4gICAgICB2YXIoLS1zYmItc2lkZWJhci1wYWRkaW5nKSAtIHZhcigtLXNiYi1zaWRlYmFyLXNjcm9sbGJhci1wbGFjZWhvbGRlci13aWR0aClcbiAgICApO1xuICB9XG59XG5cbjpob3N0KFtjb2xvcj0nd2hpdGUnXSkge1xuICAtLXNiYi1zaWRlYmFyLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTEpO1xufVxuXG46aG9zdChbY29sb3I9J21pbGsnXSkge1xuICAtLXNiYi1zaWRlYmFyLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTMpO1xufVxuXG46aG9zdCg6aXMoW21vZGU9J292ZXInXSwgOnN0YXRlKG1vZGUtb3Zlci1mb3JjZWQpOm5vdCg6c3RhdGUobW9kZS1vdmVyLWZvcmNlZC1jbG9zaW5nKSkpKSB7XG4gIC0tX3NiYi1zaWRlYmFyLW1hcmdpbjogdmFyKC0tc2JiLXNpZGViYXItbWFyZ2luKTtcbiAgLS1fc2JiLXNpZGViYXItYm9yZGVyLXJhZGl1cy1lbmQ6IHZhcigtLXNiYi1zaWRlYmFyLWJvcmRlci1yYWRpdXMpO1xuICAtLV9zYmItc2lkZWJhci16LWluZGV4OiAzO1xufVxuXG46aG9zdCg6aXMoOmRpcihydGwpLCBbcG9zaXRpb249J2VuZCddKSkge1xuICAtLV9zYmItc2lkZWJhci10cmFuc2xhdGUteDogMTAwJTtcbn1cblxuOmhvc3QoOmRpcihydGwpW3Bvc2l0aW9uPSdlbmQnXSkge1xuICAtLV9zYmItc2lkZWJhci10cmFuc2xhdGUteDogLTEwMCU7XG59XG5cbi5zYmItc2lkZWJhciB7XG4gIHdpZHRoOiBpbmhlcml0O1xuICBtYXgtd2lkdGg6IHZhcigtLV9zYmItc2lkZWJhci1tYXgtd2lkdGgpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItc2lkZWJhci1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBpbnNldC1ibG9jazogMDtcbiAgei1pbmRleDogdmFyKC0tX3NiYi1zaWRlYmFyLXotaW5kZXgpO1xuICBib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzOiB2YXIoLS1fc2JiLXNpZGViYXItYm9yZGVyLXJhZGl1cy1zdGFydCk7XG4gIGJvcmRlci1zdGFydC1lbmQtcmFkaXVzOiB2YXIoLS1fc2JiLXNpZGViYXItYm9yZGVyLXJhZGl1cy1zdGFydCk7XG4gIGJvcmRlci1lbmQtc3RhcnQtcmFkaXVzOiB2YXIoLS1fc2JiLXNpZGViYXItYm9yZGVyLXJhZGl1cy1lbmQpO1xuICBib3JkZXItZW5kLWVuZC1yYWRpdXM6IHZhcigtLV9zYmItc2lkZWJhci1ib3JkZXItcmFkaXVzLWVuZCk7XG4gIG1hcmdpbjogdmFyKC0tX3NiYi1zaWRlYmFyLW1hcmdpbik7XG4gIG1hcmdpbi1ibG9jay1zdGFydDogdmFyKC0tX3NiYi1zaWRlYmFyLW1hcmdpbi1ibG9jay1zdGFydCk7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXNiYi1zaWRlYmFyLWNvbnRhaW5lci1hbmltYXRpb24tZHVyYXRpb24pO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tc2JiLXNpZGViYXItY29udGFpbmVyLWFuaW1hdGlvbi1lYXNpbmcpO1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB3aWR0aCwgdHJhbnNsYXRlO1xuICB0cmFuc2xhdGU6IG5vbmU7XG5cbiAgOmhvc3QoW3Bvc2l0aW9uPSdlbmQnXSkgJiB7XG4gICAgaW5zZXQtaW5saW5lLWVuZDogMDtcbiAgfVxuXG4gIDpob3N0KDpzdGF0ZShzdGF0ZS1jbG9zZWQpKSAmIHtcbiAgICAvLyBTdG9wcyB0aGUgc2lkZW5hdiBmcm9tIHBva2luZyBvdXQgKGUuZy4gd2l0aCB0aGUgYm94IHNoYWRvdykgd2hpbGUgaXQncyBvZmYtc2NyZWVuLlxuICAgIC8vIFdlIGNhbid0IHVzZSBgZGlzcGxheWAgYmVjYXVzZSBpdCBpbnRlcnJ1cHRzIHRoZSB0cmFuc2l0aW9uIGFuZCBgdHJhbnNpdGlvbi1iZWhhdmlvcmBcbiAgICAvLyBpc24ndCBhdmFpbGFibGUgaW4gYWxsIGJyb3dzZXJzLlxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgfVxuXG4gIDpob3N0KDppcyg6c3RhdGUoc3RhdGUtY2xvc2luZyksIDpzdGF0ZShzdGF0ZS1jbG9zZWQpKSkgJiB7XG4gICAgdHJhbnNsYXRlOiB2YXIoLS1fc2JiLXNpZGViYXItdHJhbnNsYXRlLXgpIDA7XG4gIH1cbn1cblxuLnNiYi1zaWRlYmFyLXRpdGxlLXNlY3Rpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbiAgZ2FwOiB2YXIoLS1zYmItc2lkZWJhci10aXRsZS1nYXApO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItc2lkZWJhci1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1zaWRlYmFyLXBhZGRpbmcpO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IHZhcigtLXNiYi1hbmltYXRpb24tZWFzaW5nKSB2YXIoLS1zYmItc2lkZWJhci1jb250YWluZXItYW5pbWF0aW9uLWR1cmF0aW9uKTtcbiAgYm94LXNoYWRvdzogbm9uZTtcblxuICA6aG9zdCg6c3RhdGUoc2Nyb2xsZWQpKSAmIHtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zYmItYm94LXNoYWRvdy1sZXZlbC01LXNvZnQpO1xuICB9XG59XG5cbi5zYmItc2lkZWJhci1jb250ZW50LXNlY3Rpb24ge1xuICBAaW5jbHVkZSBzYmIuc2Nyb2xsYmFyO1xuXG4gIHBhZGRpbmctYmxvY2stc3RhcnQ6IHZhcigtLV9zYmItc2lkZWJhci1wYWRkaW5nLWJsb2NrLXN0YXJ0KTtcbiAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1zaWRlYmFyLXBhZGRpbmcpIHZhcigtLV9zYmItc2lkZWJhci1wYWRkaW5nLWlubGluZS1lbmQpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBmbGV4LWdyb3c6IDE7XG5cbiAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgc2Nyb2xsYWJsZSBhbmQgaGFzIG5vIGZvY3VzYWJsZSBjb250ZW50LCBpdCBnZXRzIGZvY3VzZWQuXG4gIC8vIFRvIGFkYXB0IHRvIGx5bmUgc3R5bGVzIHdlIGNvbG9yaXplIGl0XG4gIG91dGxpbmUtY29sb3I6IHZhcigtLXNiYi1mb2N1cy1vdXRsaW5lLWNvbG9yKTtcblxuICBAc3VwcG9ydHMgKHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZSkge1xuICAgIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTtcbiAgfVxufVxuXG46OnNsb3R0ZWQoc2JiLXNpZGViYXItdGl0bGUpIHtcbiAgZmxleC1ncm93OiAxO1xuICBtYXJnaW4tYmxvY2s6IHZhcigtLXNiYi1zaWRlYmFyLXRpdGxlLXBhZGRpbmctYmxvY2spO1xufVxuXG46OnNsb3R0ZWQoc2JiLXNpZGViYXItY2xvc2UtYnV0dG9uKSB7XG4gIG9yZGVyOiAxO1xuXG4gIC8vIER1ZSB0byBkZXNpZ24gbmVlZHMsIHdlIGhhdmUgdG8gdHJhbnNsYXRlIHRoZSBjbG9zZSBidXR0b24gdG8gdGhlIHJpZ2h0XG4gIG1hcmdpbi1pbmxpbmUtZW5kOiBjYWxjKFxuICAgIC0xICogKHZhcigtLXNiYi1zaWRlYmFyLXBhZGRpbmcpIC0gdmFyKC0tc2JiLXNpZGViYXItdGl0bGUtcGFkZGluZy1ibG9jaykpXG4gICk7XG4gIG1hcmdpbi1ibG9jazogdmFyKC0tc2JiLXNpZGViYXItdGl0bGUtcGFkZGluZy1ibG9jayk7XG4gIGluc2V0LWlubGluZS1lbmQ6IHZhcigtLXNiYi1zaWRlYmFyLXBhZGRpbmcpO1xufVxuIiwiaW1wb3J0IHsgUmVzaXplQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvcmVzaXplLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGV2ZW50T3B0aW9ucywgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7XG4gIGJveFNpemluZ1N0eWxlcyxcbiAgZm9yY2VUeXBlLFxuICBoYW5kbGVEaXN0aW5jdENoYW5nZSxcbiAgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24sXG4gIFNiYkFuaW1hdGlvbkNvbXBsZXRlTWl4aW4sXG4gIFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLFxuICBTYmJGb2N1c1RyYXBDb250cm9sbGVyLFxuICBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCxcbn0gZnJvbSAnLi4vLi4vY29yZS50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYlNpZGViYXJDb250YWluZXJFbGVtZW50IH0gZnJvbSAnLi4vc2lkZWJhci1jb250YWluZXIvc2lkZWJhci1jb250YWluZXIuY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vc2lkZWJhci5zY3NzP2lubGluZSc7XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgY29ycmVzcG9uZHMgdG8gYSBzaWRlYmFyIHRoYXQgY2FuIGJlIG9wZW5lZCBvbiB0aGUgc2lkZWJhciBjb250YWluZXIuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBzbG90IGFueSBjb250ZW50IGludG8gdGhlIHNpZGViYXIuXG4gKiBAc2xvdCB0aXRsZSAtIFVzZSB0aGUgdGl0bGUgc2xvdCB0byBhZGQgYW4gPHNiYi10aXRsZT4uXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJTaWRlYmFyRWxlbWVudCBleHRlbmRzIFNiYkFuaW1hdGlvbkNvbXBsZXRlTWl4aW4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1zaWRlYmFyJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG5cbiAgLyoqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHNpZGViYXIuIEVpdGhlciBgd2hpdGVgIG9yIGBtaWxrYC4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgY29sb3I6ICd3aGl0ZScgfCAnbWlsaycgPSAnd2hpdGUnO1xuXG4gIC8qKiBNb2RlIG9mIHRoZSBzaWRlYmFyOyBvbmUgb2YgJ3NpZGUnIG9yICdvdmVyJy4gKi9cbiAgQGZvcmNlVHlwZSgodikgPT4gKHYgPT09ICdvdmVyJyA/ICdvdmVyJyA6ICdzaWRlJykpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIG1vZGU6ICdzaWRlJyB8ICdvdmVyJyA9ICdzaWRlJztcblxuICAvKiogVGhlIHNpZGUgdGhhdCB0aGUgc2lkZWJhciBpcyBhdHRhY2hlZCB0by4gKi9cbiAgQGZvcmNlVHlwZSgodikgPT4gKHYgPT09ICdlbmQnID8gJ2VuZCcgOiAnc3RhcnQnKSlcbiAgQGhhbmRsZURpc3RpbmN0Q2hhbmdlKChpbnN0YW5jZSwgX25ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4gaW5zdGFuY2UuX3VwZGF0ZVNpZGViYXJXaWR0aChvbGRWYWx1ZSkpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCcgPSAnc3RhcnQnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzaWRlYmFyIGlzIG9wZW5lZCBvciBjbG9zZWQuXG4gICAqIENhbiBiZSB1c2VkIHRvIGluaXRpYWxseSBzZXQgdGhlIG9wZW5lZCBzdGF0ZSwgd2hlcmVcbiAgICogdGhlIGFuaW1hdGlvbiB3aWxsIGJlIHNraXBwZWQuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KVxuICBwdWJsaWMgYWNjZXNzb3Igb3BlbmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNpZGViYXIgc2hvdWxkIGZvY3VzIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBhdXRvbWF0aWNhbGx5IHdoZW4gb3BlbmVkLlxuICAgKiBEZWZhdWx0cyB0byBmYWxzZSBpbiB3aGVuIG1vZGUgaXMgc2V0IHRvIGBzaWRlYCwgb3RoZXJ3aXNlIGRlZmF1bHRzIHRvIHRydWUuXG4gICAqIElmIGV4cGxpY2l0bHkgZW5hYmxlZCwgZm9jdXMgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoZSBzaWRlYmFyIGluIGBzaWRlYCBtb2RlIGFzIHdlbGwuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnZm9jdXMtb24tb3BlbicgfSlcbiAgcHVibGljIGFjY2Vzc29yIGZvY3VzT25PcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFJldHVybnMgdGhlIFNiYlNpZGViYXJDb250YWluZXJFbGVtZW50IHdoZXJlIHRoaXMgc2lkZWJhciBpcyBjb250YWluZWQuICovXG4gIHB1YmxpYyBnZXQgY29udGFpbmVyKCk6IFNiYlNpZGViYXJDb250YWluZXJFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgfVxuICBwcml2YXRlIF9jb250YWluZXI6IFNiYlNpZGViYXJDb250YWluZXJFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfbGFzdEZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9mb2N1c1RyYXBDb250cm9sbGVyID0gbmV3IFNiYkZvY3VzVHJhcENvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyID0gbmV3IFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyKHRoaXMpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkQ29udHJvbGxlcihcbiAgICAgIG5ldyBSZXNpemVDb250cm9sbGVyKHRoaXMsIHtcbiAgICAgICAgc2tpcEluaXRpYWw6IHRydWUsXG4gICAgICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLl91cGRhdGVTaWRlYmFyV2lkdGgoKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgaWYgKChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCk/LmxvY2FsTmFtZSA9PT0gJ3NiYi1zaWRlYmFyLWNsb3NlLWJ1dHRvbicpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICB0aGlzLl9jb250YWluZXIgPSB0aGlzLmNsb3Nlc3Q/Lignc2JiLXNpZGViYXItY29udGFpbmVyJyk7XG4gICAgdGhpcy5fdXBkYXRlU2lkZWJhcldpZHRoKCk7XG5cbiAgICBpZiAodGhpcy5pc09wZW4gJiYgdGhpcy5faXNNb2RlT3ZlcigpKSB7XG4gICAgICB0aGlzLl90YWtlRm9jdXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzU2VydmVyKSB7XG4gICAgICBpZiAod2luZG93Lm5hdmlnYXRpb24pIHtcbiAgICAgICAgd2luZG93Lm5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcignbmF2aWdhdGUnLCB0aGlzLl9jbG9zZU9uTmF2aWdhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLl9jbG9zZU9uTmF2aWdhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5jb250YWluZXI/LnN0eWxlLnJlbW92ZVByb3BlcnR5KHRoaXMuX2J1aWxkQ3NzV2lkdGhWYXIoKSk7XG4gICAgdGhpcy5fY29udGFpbmVyID0gbnVsbDtcblxuICAgIGlmICghaXNTZXJ2ZXIpIHtcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdGlvbikge1xuICAgICAgICB3aW5kb3cubmF2aWdhdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCduYXZpZ2F0ZScsIHRoaXMuX2Nsb3NlT25OYXZpZ2F0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHRoaXMuX2Nsb3NlT25OYXZpZ2F0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZU9uTmF2aWdhdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5faXNNb2RlT3ZlcigpICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnb3BlbmVkJykpIHtcbiAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3BlbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdtb2RlJykpIHtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdvdmVyJyAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgICB0aGlzLl90YWtlRm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2VkZUZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgdGhpcy5fdXBkYXRlU2lkZWJhcldpZHRoKCk7XG4gIH1cblxuICAvKiogVG9nZ2xlcyB0aGUgc2lkZWJhciB2aXNpYmlsaXR5LiAqL1xuICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnb3BlbmluZycgfHwgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE9wZW5zIHRoZSBzaWRlYmFyLiAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnIHx8IHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnIHx8ICF0aGlzLmRpc3BhdGNoQmVmb3JlT3BlbkV2ZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uKCk7XG5cbiAgICBpZiAoIWlzU2VydmVyICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LmxvY2FsTmFtZSAhPT0gJ2JvZHknKSB7XG4gICAgICB0aGlzLl9sYXN0Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuXG4gICAgY29uc3QgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24gPSB0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpIHx8ICF0aGlzLmlzQ29ubmVjdGVkO1xuICAgIGNvbnN0IGlzRHVyaW5nSW5pdGlhbGl6YXRpb24gPSAhdGhpcy5oYXNVcGRhdGVkO1xuXG4gICAgaWYgKCEoaXNEdXJpbmdJbml0aWFsaXphdGlvbiB8fCBpc1plcm9BbmltYXRpb25EdXJhdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnc2tpcC1hbmltYXRpb24nKTtcblxuICAgIC8vIFdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IHVwZGF0ZSB0byBiZSBjb21wbGV0ZWRcbiAgICAvLyBpbiBvcmRlciB0byBoYXZlIHRoZSBzaXplIG9mIHRoZSBzaWRlYmFyIHJlYWR5IGZvciB0aGUgYW5pbWF0aW9uLlxuICAgIGlmIChpc0R1cmluZ0luaXRpYWxpemF0aW9uKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5faGFuZGxlT3BlbmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLXNpZGViYXItY29udGFpbmVyLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG5cbiAgICAvLyBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZSBhbmltYXRpb24gc2tpcCBpbnN0cnVjdGlvbiBpcyBkb25lIGEgdGljayBsYXRlci5cbiAgICAvLyBPdGhlcndpc2UsIGl0J3MgcmVtb3ZlZCB0b28gZWFybHkgYW5kIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0LlxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnc2tpcC1hbmltYXRpb24nKSk7XG5cbiAgICB0aGlzLl90YWtlRm9jdXMoKTtcbiAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICB0aGlzLmRpc3BhdGNoT3BlbkV2ZW50KCk7XG4gIH1cblxuICAvKiogQ2xvc2VzIHRoZSBzaWRlYmFyLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnY2xvc2VkJyB8fCAhdGhpcy5kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRBbmltYXRpb24oKTtcblxuICAgIGNvbnN0IGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uID0gdGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTtcblxuICAgIGlmICghdGhpcy5oYXNVcGRhdGVkIHx8IGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdza2lwLWFuaW1hdGlvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIH1cblxuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAoIXRoaXMuaGFzVXBkYXRlZCB8fCBpc1plcm9BbmltYXRpb25EdXJhdGlvbikge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIC8vIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIGFuaW1hdGlvbiBza2lwIGluc3RydWN0aW9uIGlzIGRvbmUgYSB0aWNrIGxhdGVyLlxuICAgIC8vIE90aGVyd2lzZSwgaXQncyByZW1vdmVkIHRvbyBlYXJseSBhbmQgaXQgZG9lc24ndCBoYXZlIGFueSBlZmZlY3QuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdza2lwLWFuaW1hdGlvbicpKTtcbiAgICB0aGlzLmNlZGVGb2N1cygpO1xuXG4gICAgaWYgKCFpc1NlcnZlciAmJiAodGhpcy5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB8fCB0aGlzLl9pc01vZGVPdmVyKCkpKSB7XG4gICAgICBpZiAodGhpcy5fbGFzdEZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX2xhc3RGb2N1c2VkRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hlcmUgdG8gc2V0IHRoZSBmb2N1cywgYnV0IGhhdmUgdG8gcmVtb3ZlIGl0LCBzbyB3ZSBjYWxsIGJsdXJcbiAgICAgICAgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmJsdXIoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fbGFzdEZvY3VzZWRFbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgIHRoaXMuZGlzcGF0Y2hDbG9zZUV2ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIF90YWtlRm9jdXMoKTogdm9pZCB7XG4gICAgLy8gV2UgcHJldmVudCBjYWxsaW5nIHRoZSBmb2N1cyBzdHVmZiB3aGVuIG5vdCBuZWVkZWRcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNNb2RlT3ZlciA9IHRoaXMuX2lzTW9kZU92ZXIoKTtcblxuICAgIGlmIChpc01vZGVPdmVyIHx8IHRoaXMuZm9jdXNPbk9wZW4pIHtcbiAgICAgIHRoaXMuX2ZvY3VzVHJhcENvbnRyb2xsZXIuZm9jdXNJbml0aWFsRWxlbWVudCgpO1xuICAgIH1cblxuICAgIGlmIChpc01vZGVPdmVyKSB7XG4gICAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5jb25uZWN0KCk7XG4gICAgICB0aGlzLl9mb2N1c1RyYXBDb250cm9sbGVyLmVuYWJsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEludGVybmFsIG1ldGhvZCB0aGF0IHdlIHVzZSBleHRlcm5hbGx5LiBgcHJvdGVjdGVkYCBwcmVzZXJ2ZXMgdHlwZSBpbmZvcm1hdGlvbiBmb3IgdHlwZSBzYWZlIGFjY2Vzcy5cbiAgcHJvdGVjdGVkIGNlZGVGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9mb2N1c1RyYXBDb250cm9sbGVyLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTaWRlYmFyV2lkdGgob2xkUG9zaXRpb24/OiB0aGlzWydwb3NpdGlvbiddKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXI7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob2xkUG9zaXRpb24pIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0aGlzLl9idWlsZENzc1dpZHRoVmFyKG9sZFBvc2l0aW9uKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLm9mZnNldFdpZHRoO1xuICAgIGlmICghd2lkdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdWYWx1ZSA9IGAke3dpZHRofXB4YDtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGNvbnRhaW5lci5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRoaXMuX2J1aWxkQ3NzV2lkdGhWYXIoKSk7XG5cbiAgICBpZiAoYWN0dWFsVmFsdWUgPT09IG5ld1ZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KHRoaXMuX2J1aWxkQ3NzV2lkdGhWYXIoKSwgbmV3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYnVpbGRDc3NXaWR0aFZhcihwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBgLS1fc2JiLXNpZGViYXItY29udGFpbmVyLSR7cG9zaXRpb259LXdpZHRoYDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzTW9kZU92ZXIoKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgdGhlIG1pbmltdW0gc3BhY2UgYXR0cmlidXRlIGlzIHNldCwgdGhlIHNpZGViYXIgc2hvdWxkIGJlaGF2ZSBsaWtlIGluIG1vZGUgb3Zlci5cbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnb3ZlcicgfHwgdGhpcy5tYXRjaGVzKCc6c3RhdGUobW9kZS1vdmVyLWZvcmNlZCknKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uVHJhbnNpdGlvbkVuZChldmVudDogVHJhbnNpdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgLy8gV2UgZW5zdXJlIHRoYXQgd2UgcmVhY3QgdG8gdGhlIGZhZGUgaW4gdHJhbnNpdGlvbiBvbiB0aGUgc2JiLXNpZGViYXIgZGl2XG4gICAgaWYgKGV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3RyYW5zbGF0ZScgfHwgZXZlbnQudGFyZ2V0ICE9PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgQGV2ZW50T3B0aW9ucyh7IHBhc3NpdmU6IHRydWUgfSlcbiAgcHJpdmF0ZSBfZGV0ZWN0U2Nyb2xsZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKFxuICAgICAgJ3Njcm9sbGVkJyxcbiAgICAgICh0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoJy5zYmItc2lkZWJhci1jb250ZW50LXNlY3Rpb24nKT8uc2Nyb2xsVG9wID8/IDApID4gMCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cInNiYi1zaWRlYmFyXCIgQHRyYW5zaXRpb25lbmQ9JHt0aGlzLl9vblRyYW5zaXRpb25FbmR9PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zaWRlYmFyLXRpdGxlLXNlY3Rpb25cIj48c2xvdCBuYW1lPVwidGl0bGUtc2VjdGlvblwiPjwvc2xvdD48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2lkZWJhci1jb250ZW50LXNlY3Rpb25cIiBAc2Nyb2xsPSR7KCkgPT4gdGhpcy5fZGV0ZWN0U2Nyb2xsZWRTdGF0ZSgpfT5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNpZGViYXInOiBTYmJTaWRlYmFyRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7SUMrQmEsMkJBQWlCO21CQUFTLDBCQUEwQix3QkFBd0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztjQUE1RSwwQkFBMEIsWUFBa0Q7Ozt3QkFLdEYsU0FBUyxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUE7dUJBSTNCLFdBQVcsTUFBTyxNQUFN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
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { unsafeCSS } from "lit";
|
|
2
|
-
//#region src/elements/core/styles/box-sizing.scss?inline
|
|
3
|
-
var box_sizing_default = "*,\n::before,\n::after {\n box-sizing: border-box;\n}";
|
|
4
|
-
//#endregion
|
|
5
|
-
//#region src/elements/core/styles/host-scrollbar.scss?inline
|
|
6
|
-
var host_scrollbar_default = ":host {\n --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);\n --sbb-scrollbar-thumb-width: 0.125rem;\n --sbb-scrollbar-thumb-width-hover: 0.25rem;\n --sbb-scrollbar-width-firefox: thin;\n --sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n --sbb-scrollbar-color: light-dark(\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent),\n color-mix(in srgb, var(--sbb-color-white) 30%, transparent)\n );\n --sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-black) 60%, transparent);\n --sbb-scrollbar-color-hover: light-dark(\n color-mix(in srgb, var(--sbb-color-black) 60%, transparent),\n color-mix(in srgb, var(--sbb-color-white) 60%, transparent)\n );\n --sbb-scrollbar-track-color: transparent;\n}\n:host::-webkit-scrollbar {\n width: var(--sbb-scrollbar-width);\n height: var(--sbb-scrollbar-width);\n background-color: var(--sbb-scrollbar-track-color, transparent);\n}\n:host::-webkit-scrollbar-corner {\n background-color: var(--sbb-scrollbar-track-color, transparent);\n}\n:host::-webkit-scrollbar-thumb {\n background-color: var(--sbb-scrollbar-color, currentcolor);\n border: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;\n border-radius: var(--sbb-border-radius-4x);\n background-clip: padding-box;\n}\n:host::-webkit-scrollbar-thumb:hover {\n background-color: var(--sbb-scrollbar-color-hover, currentcolor);\n border-width: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)));\n}\n:host::-webkit-scrollbar-button, :host::-webkit-scrollbar-corner {\n display: none;\n}\n@supports not selector(::-webkit-scrollbar) {\n :host {\n scrollbar-width: var(--sbb-scrollbar-width-firefox);\n scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);\n }\n}";
|
|
7
|
-
//#endregion
|
|
8
|
-
//#region src/elements/core/styles/screen-reader-only.scss?inline
|
|
9
|
-
var screen_reader_only_default = ".sbb-screen-reader-only {\n border: 0;\n clip-path: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}";
|
|
10
|
-
//#endregion
|
|
11
|
-
//#region src/elements/core/styles/styles.ts
|
|
12
|
-
var boxSizingStyles = unsafeCSS(box_sizing_default);
|
|
13
|
-
var hostScrollbarStyles = unsafeCSS(host_scrollbar_default);
|
|
14
|
-
var screenReaderOnlyStyles = unsafeCSS(screen_reader_only_default);
|
|
15
|
-
//#endregion
|
|
16
|
-
export { hostScrollbarStyles as n, screenReaderOnlyStyles as r, boxSizingStyles as t };
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzLTZUN1V2aHhLLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL3N0eWxlcy9ib3gtc2l6aW5nLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvc3R5bGVzL2hvc3Qtc2Nyb2xsYmFyLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NvcmUvc3R5bGVzL3NjcmVlbi1yZWFkZXItb25seS5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jb3JlL3N0eWxlcy9zdHlsZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi9taXhpbnMvaGVscGVycyc7XG5cbkBpbmNsdWRlIGhlbHBlcnMuYm94LXNpemluZztcbiIsIkB1c2UgJy4vbWl4aW5zL3Njcm9sbGJhcic7XG5cbjpob3N0IHtcbiAgQGluY2x1ZGUgc2Nyb2xsYmFyLnNjcm9sbGJhci12YXJpYWJsZXM7XG4gIEBpbmNsdWRlIHNjcm9sbGJhci5zY3JvbGxiYXItcnVsZXM7XG59XG4iLCJAdXNlICcuL21peGlucy9hMTF5JztcblxuLnNiYi1zY3JlZW4tcmVhZGVyLW9ubHkge1xuICBAaW5jbHVkZSBhMTF5LnNjcmVlbi1yZWFkZXItb25seTtcbn1cbiIsImltcG9ydCB7IHVuc2FmZUNTUyB9IGZyb20gJ2xpdCc7XG5cbmltcG9ydCBib3hTaXppbmdTdHlsZXNTdHJpbmcgZnJvbSAnLi9ib3gtc2l6aW5nLnNjc3M/aW5saW5lJztcbmltcG9ydCBob3N0U2Nyb2xsYmFyU3RyaW5nIGZyb20gJy4vaG9zdC1zY3JvbGxiYXIuc2Nzcz9pbmxpbmUnO1xuaW1wb3J0IHNjcmVlblJlYWRlck9ubHlTdHJpbmcgZnJvbSAnLi9zY3JlZW4tcmVhZGVyLW9ubHkuc2Nzcz9pbmxpbmUnO1xuXG5leHBvcnQgY29uc3QgYm94U2l6aW5nU3R5bGVzID0gdW5zYWZlQ1NTKGJveFNpemluZ1N0eWxlc1N0cmluZyk7XG5leHBvcnQgY29uc3QgaG9zdFNjcm9sbGJhclN0eWxlcyA9IHVuc2FmZUNTUyhob3N0U2Nyb2xsYmFyU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBzY3JlZW5SZWFkZXJPbmx5U3R5bGVzID0gdW5zYWZlQ1NTKHNjcmVlblJlYWRlck9ubHlTdHJpbmcpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBR01BLElBQWEsa0JBQWtCLFVBQVUsbUJBQXNCO0FBQy9ELElBQWEsc0JBQXNCLFVBQVUsdUJBQW9CO0FBQ2pFLElBQWEseUJBQXlCLFVBQVUsMkJBQXVCIn0=
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { html, isServer, unsafeCSS } from "lit";
|
|
3
|
-
import { property } from "lit/decorators.js";
|
|
4
|
-
import { SbbElement, SbbNegativeMixin, forceType, hostScrollbarStyles } from "./core.js";
|
|
5
|
-
import { ResizeController } from "@lit-labs/observers/resize-controller.js";
|
|
6
|
-
//#region src/elements/table/table-wrapper/table-wrapper.scss?inline
|
|
7
|
-
var table_wrapper_default = ":host {\n display: block;\n overflow: auto;\n --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);\n --sbb-scrollbar-thumb-width: 0.5rem;\n --sbb-scrollbar-thumb-width-hover: var(--sbb-scrollbar-thumb-width);\n --sbb-scrollbar-width-firefox: auto;\n --sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n --sbb-scrollbar-color: light-dark(\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent),\n color-mix(in srgb, var(--sbb-color-white) 30%, transparent)\n );\n --sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-black) 60%, transparent);\n --sbb-scrollbar-color-hover: light-dark(\n color-mix(in srgb, var(--sbb-color-black) 60%, transparent),\n color-mix(in srgb, var(--sbb-color-white) 60%, transparent)\n );\n --sbb-scrollbar-track-color: var(--sbb-background-color-4);\n}\n\n:host(:focus-visible) {\n outline-offset: var(--sbb-focus-outline-offset);\n outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);\n}\n\n::slotted(.sbb-table) {\n width: 100%;\n}\n\n:host([negative]) {\n --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);\n --sbb-scrollbar-thumb-width: 0.5rem;\n --sbb-scrollbar-thumb-width-hover: var(--sbb-scrollbar-thumb-width);\n --sbb-scrollbar-width-firefox: auto;\n --sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-white) 30%, transparent);\n --sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-white) 60%, transparent);\n --sbb-scrollbar-track-color: var(--sbb-background-color-4-negative);\n}";
|
|
8
|
-
//#endregion
|
|
9
|
-
//#region src/elements/table/table-wrapper/table-wrapper.component.ts
|
|
10
|
-
/**
|
|
11
|
-
* Wraps a table to enhance its functionality.
|
|
12
|
-
*
|
|
13
|
-
* @slot - Use the unnamed slot to add the table.
|
|
14
|
-
*/
|
|
15
|
-
var SbbTableWrapperElement = (() => {
|
|
16
|
-
let _classSuper = SbbNegativeMixin(SbbElement);
|
|
17
|
-
let _focusable_decorators;
|
|
18
|
-
let _focusable_initializers = [];
|
|
19
|
-
let _focusable_extraInitializers = [];
|
|
20
|
-
return class SbbTableWrapperElement extends _classSuper {
|
|
21
|
-
static {
|
|
22
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
23
|
-
_focusable_decorators = [forceType(), property({
|
|
24
|
-
reflect: true,
|
|
25
|
-
type: Boolean
|
|
26
|
-
})];
|
|
27
|
-
__esDecorate(this, null, _focusable_decorators, {
|
|
28
|
-
kind: "accessor",
|
|
29
|
-
name: "focusable",
|
|
30
|
-
static: false,
|
|
31
|
-
private: false,
|
|
32
|
-
access: {
|
|
33
|
-
has: (obj) => "focusable" in obj,
|
|
34
|
-
get: (obj) => obj.focusable,
|
|
35
|
-
set: (obj, value) => {
|
|
36
|
-
obj.focusable = value;
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
metadata: _metadata
|
|
40
|
-
}, _focusable_initializers, _focusable_extraInitializers);
|
|
41
|
-
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
42
|
-
enumerable: true,
|
|
43
|
-
configurable: true,
|
|
44
|
-
writable: true,
|
|
45
|
-
value: _metadata
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
static {
|
|
49
|
-
this.elementName = "sbb-table-wrapper";
|
|
50
|
-
}
|
|
51
|
-
static {
|
|
52
|
-
this.role = "section";
|
|
53
|
-
}
|
|
54
|
-
static {
|
|
55
|
-
this.styles = [hostScrollbarStyles, unsafeCSS(table_wrapper_default)];
|
|
56
|
-
}
|
|
57
|
-
#focusable_accessor_storage = __runInitializers(this, _focusable_initializers, false);
|
|
58
|
-
/** Whether the table wrapper is focusable. */
|
|
59
|
-
get focusable() {
|
|
60
|
-
return this.#focusable_accessor_storage;
|
|
61
|
-
}
|
|
62
|
-
set focusable(value) {
|
|
63
|
-
this.#focusable_accessor_storage = value;
|
|
64
|
-
}
|
|
65
|
-
constructor() {
|
|
66
|
-
super();
|
|
67
|
-
__runInitializers(this, _focusable_extraInitializers);
|
|
68
|
-
this.addController(new ResizeController(this, {
|
|
69
|
-
skipInitial: true,
|
|
70
|
-
callback: () => this._checkHorizontalScrollbarOffset()
|
|
71
|
-
}));
|
|
72
|
-
this.addEventListener?.("scroll", () => this._checkHorizontalScrollbarOffset(), { passive: true });
|
|
73
|
-
}
|
|
74
|
-
connectedCallback() {
|
|
75
|
-
super.connectedCallback();
|
|
76
|
-
this._updateScrollbarClass();
|
|
77
|
-
}
|
|
78
|
-
willUpdate(changedProperties) {
|
|
79
|
-
super.willUpdate(changedProperties);
|
|
80
|
-
if (changedProperties.has("focusable")) if (this.focusable) {
|
|
81
|
-
if (!this.hasAttribute("tabindex")) this.setAttribute("tabindex", "0");
|
|
82
|
-
} else this.removeAttribute("tabindex");
|
|
83
|
-
if (changedProperties.has("negative")) this._updateScrollbarClass();
|
|
84
|
-
}
|
|
85
|
-
_updateScrollbarClass() {
|
|
86
|
-
if (isServer) return;
|
|
87
|
-
if (this.negative) {
|
|
88
|
-
this.classList.remove("sbb-scrollbar-thick-track-visible");
|
|
89
|
-
this.classList.add("sbb-scrollbar-thick-negative-track-visible");
|
|
90
|
-
} else {
|
|
91
|
-
this.classList.remove("sbb-scrollbar-thick-negative-track-visible");
|
|
92
|
-
this.classList.add("sbb-scrollbar-thick-track-visible");
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Calculates whether the table is horizontally scrolled and adds the
|
|
97
|
-
* corresponding class `sbb-table-wrapper-offset-${none | left | right | both}`
|
|
98
|
-
*/
|
|
99
|
-
_checkHorizontalScrollbarOffset() {
|
|
100
|
-
const state = this._calculateScrollOffset();
|
|
101
|
-
this.classList.remove(`sbb-table-wrapper-offset-none`, `sbb-table-wrapper-offset-left`, `sbb-table-wrapper-offset-right`, `sbb-table-wrapper-offset-both`);
|
|
102
|
-
this.classList.add(`sbb-table-wrapper-offset-${state}`);
|
|
103
|
-
}
|
|
104
|
-
_calculateScrollOffset() {
|
|
105
|
-
if (this.scrollWidth === this.offsetWidth) return "none";
|
|
106
|
-
const isAtStart = this.scrollLeft === 0;
|
|
107
|
-
const isAtEnd = this.scrollWidth - this.scrollLeft - this.offsetWidth <= 1;
|
|
108
|
-
if (isAtStart) return isAtEnd ? "none" : "right";
|
|
109
|
-
return isAtEnd ? "left" : "both";
|
|
110
|
-
}
|
|
111
|
-
render() {
|
|
112
|
-
return html`<slot></slot>`;
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
})();
|
|
116
|
-
//#endregion
|
|
117
|
-
export { SbbTableWrapperElement as t };
|
|
118
|
-
|
|
119
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtd3JhcHBlci5jb21wb25lbnQtQ2pNT0VOSFYuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RhYmxlL3RhYmxlLXdyYXBwZXIvdGFibGUtd3JhcHBlci5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy90YWJsZS90YWJsZS13cmFwcGVyL3RhYmxlLXdyYXBwZXIuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uLy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBhdXRvO1xuXG4gIEBpbmNsdWRlIHNiYi5zY3JvbGxiYXItdmFyaWFibGVzKCRzaXplOiB0aGljaywgJG5lZ2F0aXZlOiBmYWxzZSwgJHRyYWNrLXZpc2libGU6IHRydWUpO1xufVxuXG46aG9zdCg6Zm9jdXMtdmlzaWJsZSkge1xuICBAaW5jbHVkZSBzYmIuZm9jdXMtb3V0bGluZTtcbn1cblxuOjpzbG90dGVkKC5zYmItdGFibGUpIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbjpob3N0KFtuZWdhdGl2ZV0pIHtcbiAgQGluY2x1ZGUgc2JiLnNjcm9sbGJhci12YXJpYWJsZXMoJHNpemU6IHRoaWNrLCAkbmVnYXRpdmU6IHRydWUsICR0cmFjay12aXNpYmxlOiB0cnVlKTtcbn1cbiIsImltcG9ydCB7IFJlc2l6ZUNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL3Jlc2l6ZS1jb250cm9sbGVyLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxuICB1bnNhZmVDU1MsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZm9yY2VUeXBlLCBob3N0U2Nyb2xsYmFyU3R5bGVzLCBTYmJFbGVtZW50LCBTYmJOZWdhdGl2ZU1peGluIH0gZnJvbSAnLi4vLi4vY29yZS50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3RhYmxlLXdyYXBwZXIuc2Nzcz9pbmxpbmUnO1xuXG4vKipcbiAqIFdyYXBzIGEgdGFibGUgdG8gZW5oYW5jZSBpdHMgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCB0aGUgdGFibGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJUYWJsZVdyYXBwZXJFbGVtZW50IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihTYmJFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItdGFibGUtd3JhcHBlcic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgcm9sZSA9ICdzZWN0aW9uJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2hvc3RTY3JvbGxiYXJTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSB0YWJsZSB3cmFwcGVyIGlzIGZvY3VzYWJsZS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGZvY3VzYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkQ29udHJvbGxlcihcbiAgICAgIG5ldyBSZXNpemVDb250cm9sbGVyKHRoaXMsIHtcbiAgICAgICAgc2tpcEluaXRpYWw6IHRydWUsXG4gICAgICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLl9jaGVja0hvcml6b250YWxTY3JvbGxiYXJPZmZzZXQoKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Lignc2Nyb2xsJywgKCkgPT4gdGhpcy5fY2hlY2tIb3Jpem9udGFsU2Nyb2xsYmFyT2Zmc2V0KCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIC8vIFdoZW4gaW5jbHVkaW5nIHRoZSBzY3JvbGxiYXIgc3R5bGVzIG9uIHRoZSBob3N0LCB0aGVyZSBpcyBubyBob3ZlciBlZmZlY3Qgb2YgdGhlIHNjcm9sbGJhciBwb3NzaWJsZS5cbiAgICAvLyBJbiBtb3N0IGNhc2VzLCB0aGUgY29tcG9uZW50IHdpbGwgYmUgdXNlZCBpbiBMaWdodCBET00uIFRvIGFsc28gc3VwcG9ydCB0aGUgaG92ZXIgZWZmZWN0LFxuICAgIC8vIHdlIGFkZGl0aW9uYWxseSBhZGQgdGhlIHNjcm9sbGJhciBDU1MgY2xhc3NlcyB0byB0aGUgaG9zdC5cbiAgICAvLyBUaGlzIGlzIGFuIGV4Y2VwdGlvbiBhcyB3ZSBub3JtYWxseSBkb24ndCBhbHRlciB0aGUgY2xhc3NMaXN0IG9mIHRoZSBob3N0LlxuICAgIHRoaXMuX3VwZGF0ZVNjcm9sbGJhckNsYXNzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2ZvY3VzYWJsZScpKSB7XG4gICAgICBpZiAodGhpcy5mb2N1c2FibGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSkge1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJykpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVNjcm9sbGJhckNsYXNzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU2Nyb2xsYmFyQ2xhc3MoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm5lZ2F0aXZlKSB7XG4gICAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYi1zY3JvbGxiYXItdGhpY2stdHJhY2stdmlzaWJsZScpO1xuICAgICAgdGhpcy5jbGFzc0xpc3QuYWRkKCdzYmItc2Nyb2xsYmFyLXRoaWNrLW5lZ2F0aXZlLXRyYWNrLXZpc2libGUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKCdzYmItc2Nyb2xsYmFyLXRoaWNrLW5lZ2F0aXZlLXRyYWNrLXZpc2libGUnKTtcbiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnc2JiLXNjcm9sbGJhci10aGljay10cmFjay12aXNpYmxlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBDYWxjdWxhdGVzIHdoZXRoZXIgdGhlIHRhYmxlIGlzIGhvcml6b250YWxseSBzY3JvbGxlZCBhbmQgYWRkcyB0aGVcbiAgICogIGNvcnJlc3BvbmRpbmcgY2xhc3MgYHNiYi10YWJsZS13cmFwcGVyLW9mZnNldC0ke25vbmUgfCBsZWZ0IHwgcmlnaHQgfCBib3RofWBcbiAgICovXG4gIHByaXZhdGUgX2NoZWNrSG9yaXpvbnRhbFNjcm9sbGJhck9mZnNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2NhbGN1bGF0ZVNjcm9sbE9mZnNldCgpO1xuICAgIHRoaXMuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgIGBzYmItdGFibGUtd3JhcHBlci1vZmZzZXQtbm9uZWAsXG4gICAgICBgc2JiLXRhYmxlLXdyYXBwZXItb2Zmc2V0LWxlZnRgLFxuICAgICAgYHNiYi10YWJsZS13cmFwcGVyLW9mZnNldC1yaWdodGAsXG4gICAgICBgc2JiLXRhYmxlLXdyYXBwZXItb2Zmc2V0LWJvdGhgLFxuICAgICk7XG4gICAgdGhpcy5jbGFzc0xpc3QuYWRkKGBzYmItdGFibGUtd3JhcHBlci1vZmZzZXQtJHtzdGF0ZX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVNjcm9sbE9mZnNldCgpOiAnbm9uZScgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdGgnIHtcbiAgICBpZiAodGhpcy5zY3JvbGxXaWR0aCA9PT0gdGhpcy5vZmZzZXRXaWR0aCkge1xuICAgICAgcmV0dXJuICdub25lJztcbiAgICB9XG4gICAgY29uc3QgaXNBdFN0YXJ0ID0gdGhpcy5zY3JvbGxMZWZ0ID09PSAwO1xuICAgIC8vIEluIHNvbWUgY2FzZXMgdGhlIGNvbWJpbmVkIHZhbHVlIG9mIHNjcm9sbExlZnQgYW5kIG9mZnNldFdpZHRoIGlzIG9mZiBieVxuICAgIC8vIDEgcGl4ZWwgZnJvbSB0aGUgc2Nyb2xsV2lkdGguXG4gICAgY29uc3QgaXNBdEVuZCA9IHRoaXMuc2Nyb2xsV2lkdGggLSB0aGlzLnNjcm9sbExlZnQgLSB0aGlzLm9mZnNldFdpZHRoIDw9IDE7XG5cbiAgICBpZiAoaXNBdFN0YXJ0KSB7XG4gICAgICByZXR1cm4gaXNBdEVuZCA/ICdub25lJyA6ICdyaWdodCc7XG4gICAgfVxuICAgIHJldHVybiBpc0F0RW5kID8gJ2xlZnQnIDogJ2JvdGgnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi10YWJsZS13cmFwcGVyJzogU2JiVGFibGVXcmFwcGVyRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztJQ29CYSxnQ0FBc0I7bUJBQVMsaUJBQWlCLFdBQVc7Ozs7Y0FBM0QsK0JBQStCLFlBQTRCOzs7NEJBTXJFLFdBQVcsRUFDWCxTQUFTO0lBQUUsU0FBUztJQUFNLE1BQU07SUFBUyxDQUFDLENBQUE7QUFDM0MsZ0JBQUEsTUFBQSxNQUFBLHVCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsZUFBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFTLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBVCxZQUFTOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEseUJBQUEsNkJBQUE7Ozs7Ozs7OztBQVBPLFFBQUEsY0FBc0I7OztBQUN0QixRQUFBLE9BQU87OztBQUNoQixRQUFBLFNBQXlCLENBQUMscUJBQXFCLFVBQVUsc0JBQU0sQ0FBQzs7RUFLdkYsOEJBQUEsa0JBQUEsTUFBQSx5QkFBcUMsTUFBSzs7RUFBMUMsSUFBZ0IsWUFBUztBQUFBLFVBQUEsTUFBQTs7RUFBekIsSUFBZ0IsVUFBUyxPQUFBO0FBQUEsU0FBQSw2QkFBQTs7RUFFekIsY0FBQTtBQUNFLFVBQU87O0FBQ1AsUUFBSyxjQUNILElBQUksaUJBQWlCLE1BQU07SUFDekIsYUFBYTtJQUNiLGdCQUFnQixLQUFLLGlDQUFBO0lBQ3RCLENBQUMsQ0FDSDtBQUVELFFBQUssbUJBQW1CLGdCQUFnQixLQUFLLGlDQUFpQyxFQUFFLEVBQzlFLFNBQVMsTUFDVixDQUFDOztFQUdZLG9CQUFpQjtBQUMvQixTQUFNLG1CQUFtQjtBQU16QixRQUFLLHVCQUF1Qjs7RUFHWCxXQUFXLG1CQUF1QztBQUNuRSxTQUFNLFdBQVcsa0JBQWtCO0FBRW5DLE9BQUksa0JBQWtCLElBQUksWUFBWSxDQUNwQyxLQUFJLEtBQUs7UUFDSCxDQUFDLEtBQUssYUFBYSxXQUFXLENBQ2hDLE1BQUssYUFBYSxZQUFZLElBQUk7U0FHcEMsTUFBSyxnQkFBZ0IsV0FBVztBQUlwQyxPQUFJLGtCQUFrQixJQUFJLFdBQVcsQ0FDbkMsTUFBSyx1QkFBdUI7O0VBSXhCLHdCQUFxQjtBQUMzQixPQUFJLFNBQ0Y7QUFFRixPQUFJLEtBQUssVUFBVTtBQUNqQixTQUFLLFVBQVUsT0FBTyxvQ0FBb0M7QUFDMUQsU0FBSyxVQUFVLElBQUksNkNBQTZDO1VBQzNEO0FBQ0wsU0FBSyxVQUFVLE9BQU8sNkNBQTZDO0FBQ25FLFNBQUssVUFBVSxJQUFJLG9DQUFvQzs7Ozs7OztFQVFuRCxrQ0FBK0I7R0FDckMsTUFBTSxRQUFRLEtBQUssd0JBQXdCO0FBQzNDLFFBQUssVUFBVSxPQUNiLGlDQUNBLGlDQUNBLGtDQUNBLGdDQUNEO0FBQ0QsUUFBSyxVQUFVLElBQUksNEJBQTRCLFFBQVE7O0VBR2pELHlCQUFzQjtBQUM1QixPQUFJLEtBQUssZ0JBQWdCLEtBQUssWUFDNUIsUUFBTztHQUVULE1BQU0sWUFBWSxLQUFLLGVBQWU7R0FHdEMsTUFBTSxVQUFVLEtBQUssY0FBYyxLQUFLLGFBQWEsS0FBSyxlQUFlO0FBRXpFLE9BQUksVUFDRixRQUFPLFVBQVUsU0FBUztBQUU1QixVQUFPLFVBQVUsU0FBUzs7RUFHVCxTQUFNO0FBQ3ZCLFVBQU8sSUFBSSJ9
|