@sbb-esta/lyne-elements 5.1.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_index.scss +1 -0
- package/action-group.pure.js +1 -1
- package/alert.pure.js +14 -14
- package/breadcrumb.pure.js +3 -3
- package/calendar.pure.js +68 -68
- package/carousel/_carousel.global.scss +6 -0
- package/carousel.pure.js +1 -1
- package/chip.pure.js +1 -1
- package/clock.pure.js +1 -1
- package/core/styles/_theme.scss +6 -0
- package/core.js +17 -17
- package/custom-elements.json +1626 -221
- package/date-input.pure.js +1 -1
- package/development/action-group.pure.js +1 -1
- package/development/alert.pure.js +14 -14
- package/development/breadcrumb.pure.js +3 -3
- package/development/calendar.pure.js +67 -67
- package/development/carousel.pure.js +1 -1
- package/development/chip/chip-group/chip-group.component.d.ts +2 -1
- package/development/chip.pure.js +3 -0
- package/development/clock.pure.js +15 -17
- package/development/core/i18n/i18n.d.ts +2 -0
- package/development/core.js +15 -3
- package/development/date-input.pure.js +15 -7
- package/development/download/download/download.component.d.ts +51 -0
- package/development/download/download-info/download-info.component.d.ts +59 -0
- package/development/download.d.ts +1 -0
- package/development/download.js +10 -0
- package/development/download.pure.d.ts +3 -0
- package/development/download.pure.js +436 -0
- package/development/expansion-panel.pure.js +6 -6
- package/development/file-selector.pure.js +7 -3
- package/development/flip-card.pure.js +5 -4
- package/development/image.pure.js +8 -8
- package/development/map-container.pure.js +8 -8
- package/development/mini-calendar.pure.js +1 -1
- package/development/notification.pure.js +12 -9
- package/development/option.pure.js +11 -11
- package/development/overlay.pure.js +1 -1
- package/development/paginator.pure.js +18 -18
- package/development/popover.pure.js +1 -1
- package/development/signet.pure.js +17 -17
- package/development/stepper/step/step.component.d.ts +0 -2
- package/development/stepper/stepper/stepper.component.d.ts +2 -2
- package/development/stepper.pure.js +24 -17
- package/development/tabs.pure.js +4 -4
- package/development/teaser.pure.js +1 -1
- package/development/time-input.pure.js +10 -6
- package/development/timetable-form.pure.js +3 -3
- package/development/timetable-occupancy.pure.js +22 -22
- package/development/toast.pure.js +6 -6
- package/development/tooltip.pure.js +4 -2
- package/development/train.pure.js +29 -29
- package/development/visual-checkbox.pure.js +13 -13
- package/download/_download.global.scss +12 -0
- package/download.js +1 -0
- package/download.pure.js +21 -0
- package/expansion-panel.pure.js +6 -6
- package/file-selector.pure.js +2 -2
- package/flip-card.pure.js +1 -1
- package/image.pure.js +8 -8
- package/index.d.ts +3 -0
- package/index.js +3 -0
- package/lean-off-brand-theme.css +45 -5
- package/lean-safety-theme.css +45 -5
- package/lean-theme.css +45 -5
- package/map-container.pure.js +8 -8
- package/mini-calendar.pure.js +1 -1
- package/notification.pure.js +12 -9
- package/off-brand-theme.css +45 -5
- package/option.pure.js +11 -11
- package/overlay/_overlay.global.scss +0 -4
- package/overlay.pure.js +1 -1
- package/package.json +11 -1
- package/paginator.pure.js +18 -18
- package/popover.pure.js +2 -2
- package/safety-theme.css +45 -5
- package/signet.pure.js +17 -17
- package/standard-theme.css +45 -5
- package/stepper.pure.js +3 -3
- package/table/_table.global.scss +46 -1
- package/tabs.pure.js +4 -4
- package/teaser/_teaser.global.scss +4 -0
- package/teaser.pure.js +1 -1
- package/time-input.pure.js +1 -1
- package/timetable-form.pure.js +3 -3
- package/timetable-occupancy.pure.js +22 -22
- package/toast.pure.js +6 -6
- package/tooltip.pure.js +3 -3
- package/train.pure.js +29 -29
- package/visual-checkbox.pure.js +13 -13
|
@@ -240,7 +240,7 @@ let SbbOverlayBaseElement = (() => {
|
|
|
240
240
|
|
|
241
241
|
//#endregion
|
|
242
242
|
//#region src/elements/overlay/overlay.scss?inline
|
|
243
|
-
var overlay_default = ":host {\n --_sbb-overlay-padding-block: calc(\n var(--sbb-spacing-fixed-14x) + var(--sbb-spacing-responsive-l)\n );\n --sbb-overlay-animation-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-6x)\n );\n display: var(--sbb-overlay-display);\n position: fixed;\n inset: var(--sbb-overlay-inset);\n z-index: var(--sbb-overlay-z-index, var(--sbb-overlay-default-z-index));\n}\n\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) {\n --sbb-overlay-display: block;\n --sbb-overlay-container-display: flex;\n}\n\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]))) {\n --sbb-overlay-pointer-events: all;\n}\n\n:host([negative]) {\n --sbb-
|
|
243
|
+
var overlay_default = ":host {\n --sbb-overlay-display: none;\n --sbb-overlay-inset: 0 auto auto 0;\n --sbb-overlay-pointer-events: none;\n --sbb-overlay-container-display: none;\n --_sbb-overlay-padding-block: calc(\n var(--sbb-spacing-fixed-14x) + var(--sbb-spacing-responsive-l)\n );\n --sbb-overlay-animation-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-6x)\n );\n display: var(--sbb-overlay-display);\n position: fixed;\n inset: var(--sbb-overlay-inset);\n z-index: var(--sbb-overlay-z-index, var(--sbb-overlay-default-z-index));\n}\n\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) {\n --sbb-overlay-display: block;\n --sbb-overlay-container-display: flex;\n}\n\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]))) {\n --sbb-overlay-pointer-events: all;\n}\n\n:host(:not([negative])) {\n --sbb-overlay-color: var(--sbb-color-1);\n --sbb-overlay-background-color: var(--sbb-background-color-3);\n}\n\n:host([negative]) {\n --sbb-overlay-color: var(--sbb-color-1-negative);\n --sbb-overlay-background-color: var(--sbb-background-color-3-negative);\n --sbb-focus-outline-color: var(--sbb-focus-outline-color-dark);\n}\n\n:host(:not(:is(:state(state-closed),[state--state-closed]))) {\n --sbb-overlay-inset: 0;\n}\n\n.sbb-overlay__container {\n background-color: var(--sbb-overlay-background-color);\n pointer-events: var(--sbb-overlay-pointer-events);\n display: var(--sbb-overlay-container-display);\n align-items: center;\n position: fixed;\n inset: var(--sbb-overlay-inset);\n}\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) .sbb-overlay__container {\n animation-name: open;\n animation-duration: var(--sbb-overlay-animation-duration);\n animation-timing-function: var(--sbb-overlay-animation-easing);\n}\n:host(:is(:state(state-closing),[state--state-closing])) .sbb-overlay__container {\n pointer-events: none;\n animation-name: close;\n}\n\n.sbb-overlay {\n position: absolute;\n inset-inline: 0;\n margin: auto;\n padding: 0;\n border: none;\n height: var(--sbb-overlay-height);\n color: var(--sbb-overlay-color);\n}\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) .sbb-overlay {\n animation-name: open-move-in;\n animation-duration: var(--sbb-overlay-animation-duration);\n animation-timing-function: var(--sbb-overlay-animation-easing);\n}\n:host(:is(:state(state-closing),[state--state-closing])) .sbb-overlay {\n animation-name: close-move-out;\n}\n\n.sbb-overlay__wrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: var(--sbb-overlay-height);\n outline: none;\n position: fixed;\n}\n@media (min-width: calc(64rem)) {\n .sbb-overlay__wrapper {\n position: sticky;\n inset-block-start: 0;\n height: auto;\n }\n}\n\n.sbb-overlay__header {\n position: absolute;\n inset-inline-start: 0;\n display: flex;\n pointer-events: none;\n align-items: start;\n justify-content: space-between;\n width: 100%;\n padding: var(--sbb-spacing-responsive-xs);\n padding-block-end: 0;\n z-index: 1;\n}\n.sbb-overlay__header * {\n pointer-events: all;\n}\n\n.sbb-overlay__close {\n margin-inline-start: auto;\n}\n\n.sbb-overlay__content {\n height: 100vh;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.sbb-overlay__content-container {\n padding-block: var(--_sbb-overlay-padding-block);\n}\n\n@keyframes open {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes open-move-in {\n from {\n transform: translateY(var(--sbb-spacing-fixed-4x));\n }\n to {\n transform: translateY(0%);\n }\n}\n@keyframes close {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes close-move-out {\n from {\n transform: translateY(0%);\n }\n to {\n transform: translateY(var(--sbb-spacing-fixed-4x));\n }\n}\n";
|
|
244
244
|
|
|
245
245
|
//#endregion
|
|
246
246
|
//#region src/elements/overlay/overlay.component.ts
|
|
@@ -695,24 +695,24 @@ let SbbPaginatorElement = (() => {
|
|
|
695
695
|
return html`
|
|
696
696
|
<ul class="sbb-paginator__pages">
|
|
697
697
|
${repeat(this._getVisiblePagesIndex(), (item) => item === "ellipsis" ? html`
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
698
|
+
<li class="sbb-paginator__page--ellipsis">
|
|
699
|
+
<span class="sbb-paginator__page--ellipsis-item">…</span>
|
|
700
|
+
</li>
|
|
701
|
+
` : html`
|
|
702
|
+
<li class="sbb-paginator__page--number">
|
|
703
|
+
<button
|
|
704
|
+
?data-selected=${this.pageIndex === item}
|
|
705
|
+
?disabled=${this.disabled}
|
|
706
|
+
class="sbb-paginator__page--number-item"
|
|
707
|
+
data-index=${item}
|
|
708
|
+
aria-label="${this.accessibilityPageLabel ? this.accessibilityPageLabel : i18nPage[this.language.current]} ${item + 1}"
|
|
709
|
+
aria-current=${this.pageIndex === item ? "true" : nothing}
|
|
710
|
+
@click=${() => this._onPageNumberClick(item)}
|
|
711
|
+
>
|
|
712
|
+
<span class="sbb-paginator__page--number-item-label">${item + 1}</span>
|
|
713
|
+
</button>
|
|
714
|
+
</li>
|
|
715
|
+
`)}
|
|
716
716
|
</ul>
|
|
717
717
|
`;
|
|
718
718
|
}
|
|
@@ -213,7 +213,7 @@ let SbbPopoverBaseElement = (() => {
|
|
|
213
213
|
_setPopoverFocus() {
|
|
214
214
|
if (!this._focusTrapController.focusInitialElement() && this._openStateController) {
|
|
215
215
|
this.setAttribute("tabindex", "0");
|
|
216
|
-
this.focus();
|
|
216
|
+
this.focus({ preventScroll: true });
|
|
217
217
|
this.addEventListener("blur", (e) => {
|
|
218
218
|
this._blurTimeout = setTimeout(() => {
|
|
219
219
|
if (document.visibilityState !== "hidden") {
|
|
@@ -90,23 +90,23 @@ let SbbSignetElement = (() => {
|
|
|
90
90
|
return html`
|
|
91
91
|
<span class="sbb-signet__svg-container">
|
|
92
92
|
${this.protectiveRoom === "panel" ? html`
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
93
|
+
<svg focusable="false" viewBox="0 0 143 48" xmlns="http://www.w3.org/2000/svg">
|
|
94
|
+
<title .textContent=${this.accessibilityLabel}></title>
|
|
95
|
+
<path id="sbb-signet__panel" stroke-width="1" d="M1 47h141V1H1v46z"></path>
|
|
96
|
+
<path
|
|
97
|
+
id="sbb-signet__icon"
|
|
98
|
+
d="M87 40h9.3L83.8 27.7h15.5V40h7.4V27.7h15.6L109.7 40h9.3l16-16-15.9-16h-9.3l12.5 12.3h-15.6V8h-7.4v12.3H83.8L96.3 8H87L71 24l16 16z"
|
|
99
|
+
></path>
|
|
100
|
+
</svg>
|
|
101
|
+
` : html`
|
|
102
|
+
<svg focusable="false" viewBox="0 0 80 40" xmlns="http://www.w3.org/2000/svg">
|
|
103
|
+
<title .textContent=${this.accessibilityLabel}></title>
|
|
104
|
+
<path
|
|
105
|
+
id="sbb-signet__icon"
|
|
106
|
+
d="M20.0265 40H31.6821L16 24.6154H35.3907V40H44.6093V24.6154H64.106L48.4238 40H60.0795L80 20.0531L60.0795 0H48.4238L64.106 15.3846H44.6093V0H35.3907V15.3846H16L31.6821 0H20.0265L0 20.0531L20.0265 40Z"
|
|
107
|
+
></path>
|
|
108
|
+
</svg>
|
|
109
|
+
`}
|
|
110
110
|
</span>
|
|
111
111
|
`;
|
|
112
112
|
}
|
|
@@ -58,8 +58,6 @@ export declare class SbbStepElement extends SbbElement {
|
|
|
58
58
|
protected configure(stepperLoaded: boolean): void;
|
|
59
59
|
/** Watches for clicked elements with `sbb-stepper-next` or `sbb-stepper-previous` attributes. */
|
|
60
60
|
private _handleClick;
|
|
61
|
-
private _isGoNextElement;
|
|
62
|
-
private _isGoPreviousElement;
|
|
63
61
|
private _onStepElementResize;
|
|
64
62
|
connectedCallback(): void;
|
|
65
63
|
protected firstUpdated(changedProperties: PropertyValues<this>): void;
|
|
@@ -64,9 +64,9 @@ export declare class SbbStepperElement extends SbbElement {
|
|
|
64
64
|
private _resizeObserverTimeout;
|
|
65
65
|
private _mediaMatcher;
|
|
66
66
|
constructor();
|
|
67
|
-
/** Selects the next step. */
|
|
67
|
+
/** Selects the next enabled step. If no available step is found, it simply exits. */
|
|
68
68
|
next(): void;
|
|
69
|
-
/** Selects the previous step. */
|
|
69
|
+
/** Selects the previous enabled step. If no available step is found, it simply exits. */
|
|
70
70
|
previous(): void;
|
|
71
71
|
/** Resets the form in which the stepper is nested or every form of each step, if any. */
|
|
72
72
|
reset(): void;
|
|
@@ -47,7 +47,7 @@ var SbbStepLabelElement = class extends SbbIconNameMixin(SbbDisabledMixin(SbbBut
|
|
|
47
47
|
this._previousSize = null;
|
|
48
48
|
this.addEventListener?.("click", () => {
|
|
49
49
|
const stepper = this.stepper;
|
|
50
|
-
if (stepper && this.step && this._isNotDeactivatedByLinearMode(this.step)) stepper.selected = this.step;
|
|
50
|
+
if (stepper && this.step && this._isNotDeactivatedByLinearMode(this.step) && !this.disabled) stepper.selected = this.step;
|
|
51
51
|
});
|
|
52
52
|
this.addController(new SbbPropertyWatcherController(this, () => this.stepper, {
|
|
53
53
|
orientation: (s) => {
|
|
@@ -246,14 +246,8 @@ var SbbStepElement = class extends SbbElement {
|
|
|
246
246
|
/** Watches for clicked elements with `sbb-stepper-next` or `sbb-stepper-previous` attributes. */
|
|
247
247
|
_handleClick(event) {
|
|
248
248
|
const composedPathElements = event.composedPath().filter((el) => el instanceof window.HTMLElement);
|
|
249
|
-
if (composedPathElements.some((el) =>
|
|
250
|
-
else if (composedPathElements.some((el) =>
|
|
251
|
-
}
|
|
252
|
-
_isGoNextElement(element) {
|
|
253
|
-
return element.hasAttribute("sbb-stepper-next") && !element.hasAttribute("disabled");
|
|
254
|
-
}
|
|
255
|
-
_isGoPreviousElement(element) {
|
|
256
|
-
return element.hasAttribute("sbb-stepper-previous") && !element.hasAttribute("disabled");
|
|
249
|
+
if (composedPathElements.some((el) => el.hasAttribute("sbb-stepper-next"))) this.stepper?.next();
|
|
250
|
+
else if (composedPathElements.some((el) => el.hasAttribute("sbb-stepper-previous"))) this.stepper?.previous();
|
|
257
251
|
}
|
|
258
252
|
_onStepElementResize() {
|
|
259
253
|
if (!this.matches(":is(:state(selected),[state--selected])")) return;
|
|
@@ -572,13 +566,25 @@ let SbbStepperElement = (() => {
|
|
|
572
566
|
this.addEventListener?.("keydown", (e) => this._handleKeyDown(e));
|
|
573
567
|
this.addEventListener?.("resizechange", (e) => this._onSelectedStepResize(e));
|
|
574
568
|
}
|
|
575
|
-
/** Selects the next step. */
|
|
569
|
+
/** Selects the next enabled step. If no available step is found, it simply exits. */
|
|
576
570
|
next() {
|
|
577
|
-
if (this.selectedIndex !== null)
|
|
571
|
+
if (this.selectedIndex !== null) for (let i = this.selectedIndex + 1; i < this.steps.length; i++) {
|
|
572
|
+
const step = this.steps[i];
|
|
573
|
+
if (this._isSelectable(step)) {
|
|
574
|
+
this._select(step);
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
578
|
}
|
|
579
|
-
/** Selects the previous step. */
|
|
579
|
+
/** Selects the previous enabled step. If no available step is found, it simply exits. */
|
|
580
580
|
previous() {
|
|
581
|
-
if (this.selectedIndex !== null)
|
|
581
|
+
if (this.selectedIndex !== null) for (let i = this.selectedIndex - 1; i >= 0; i--) {
|
|
582
|
+
const step = this.steps[i];
|
|
583
|
+
if (this._isSelectable(step)) {
|
|
584
|
+
this._select(step);
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
582
588
|
}
|
|
583
589
|
/** Resets the form in which the stepper is nested or every form of each step, if any. */
|
|
584
590
|
reset() {
|
|
@@ -599,17 +605,18 @@ let SbbStepperElement = (() => {
|
|
|
599
605
|
} else return false;
|
|
600
606
|
}
|
|
601
607
|
_select(step) {
|
|
602
|
-
if (!
|
|
608
|
+
if (!step || step === this.selected) return;
|
|
603
609
|
const currentIndex = this.selectedIndex;
|
|
604
610
|
const currentStep = this.selected;
|
|
611
|
+
const stepIndex = this.steps.indexOf(step);
|
|
605
612
|
const validatePayload = {
|
|
606
613
|
currentIndex,
|
|
607
614
|
currentStep,
|
|
608
|
-
nextIndex:
|
|
609
|
-
nextStep:
|
|
615
|
+
nextIndex: stepIndex >= 0 ? stepIndex : null,
|
|
616
|
+
nextStep: step
|
|
610
617
|
};
|
|
611
618
|
if (this.selected && !this.selected["validate"](validatePayload)) return;
|
|
612
|
-
|
|
619
|
+
currentStep?.["deselect"]();
|
|
613
620
|
step["select"]();
|
|
614
621
|
/** @internal only to provide double entry in docs. It is a public event! */
|
|
615
622
|
this.dispatchEvent(new SbbStepChangeEvent({
|
package/development/tabs.pure.js
CHANGED
|
@@ -299,10 +299,10 @@ let SbbTabGroupElement = (() => {
|
|
|
299
299
|
<slot name="tab-bar" @slotchange=${this._onLabelSlotChange}></slot>
|
|
300
300
|
</div>
|
|
301
301
|
${!this.fixedHeight ? html`
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
302
|
+
<div class="sbb-tab-group-content">
|
|
303
|
+
<slot @slotchange=${this._onContentSlotChange}></slot>
|
|
304
|
+
</div>
|
|
305
|
+
` : html`<slot @slotchange=${this._onContentSlotChange}></slot>`}
|
|
306
306
|
`;
|
|
307
307
|
}
|
|
308
308
|
};
|
|
@@ -5,7 +5,7 @@ import { html } from "lit/static-html.js";
|
|
|
5
5
|
import { SbbLinkBaseElement, screenReaderOnlyStyles } from "./core.js";
|
|
6
6
|
|
|
7
7
|
//#region src/elements/teaser/teaser.scss?inline
|
|
8
|
-
var teaser_default = "@charset \"UTF-8\";\n:host {\n --_sbb-teaser-forced-colors-inset: calc(-1 * var(--sbb-focus-outline-offset));\n --_sbb-teaser-forced-colors-outline-offset: calc(2 * var(--sbb-focus-outline-offset));\n --_sbb-teaser-forced-colors-border-radius: calc(\n var(--sbb-teaser-border-radius) + var(--sbb-focus-outline-offset)\n );\n display: inline-block;\n outline: none !important;\n}\n@media (forced-colors: active) {\n :host {\n --sbb-teaser-description-color: LinkText;\n --sbb-title-color: LinkText !important;\n }\n}\n\n:host([alignment=after]) {\n --sbb-teaser-align-items: start;\n}\n\n:host([alignment=below]) {\n --sbb-teaser-flex-direction: column;\n --sbb-teaser-align-items: baseline;\n --sbb-teaser-gap: var(--sbb-spacing-fixed-3x);\n}\n\n@media (any-hover: hover) {\n :host(:hover) {\n --sbb-teaser-scale: var(--sbb-teaser-scale-hover);\n }\n}\n.sbb-teaser__wrapper {\n display: flex;\n position: relative;\n cursor: var(--sbb-cursor-pointer);\n}\n.sbb-teaser__wrapper::before {\n content: \"\";\n user-select: none;\n width: 0;\n height: 0;\n}\n\n.sbb-teaser {\n text-decoration: none;\n position: absolute;\n inset: 0;\n}\n.sbb-teaser: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 border-radius: var(--sbb-teaser-border-radius);\n}\n@media (forced-colors: active) {\n .sbb-teaser:focus-visible {\n outline-offset: var(--_sbb-teaser-forced-colors-outline-offset);\n }\n}\n@media (forced-colors: active) {\n .sbb-teaser::before {\n content: \"\";\n position: absolute;\n inset: var(--_sbb-teaser-forced-colors-inset);\n pointer-events: none;\n border-radius: var(--_sbb-teaser-forced-colors-border-radius);\n border: var(--sbb-border-width-1x) solid CanvasText;\n }\n}\n\n.sbb-teaser__container {\n display: flex;\n flex-flow: var(--sbb-teaser-flex-direction) nowrap;\n align-items: var(--sbb-teaser-align-items);\n gap: var(--sbb-teaser-gap);\n max-width: 100%;\n width: 100%;\n pointer-events: none;\n}\n\n.sbb-teaser__text {\n color: var(--sbb-teaser-description-color);\n font-size: var(--sbb-teaser-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n overflow: hidden;\n max-width: 100%;\n}\n\n::slotted([slot=image]) {\n display: block;\n width: var(--sbb-teaser-image-width);\n}\n\n.sbb-teaser__image-wrapper {\n flex-shrink: 0;\n overflow: hidden;\n border-radius: var(--sbb-teaser-border-radius);\n transition: box-shadow var(--sbb-teaser-image-animation-duration) var(--sbb-animation-easing);\n}\n:host(:not(:is(:state(slotted-image),[state--slotted-image]))) .sbb-teaser__image-wrapper {\n display: none;\n}\n@media (any-hover: hover) {\n :host(:hover) .sbb-teaser__image-wrapper {\n box-shadow: var(--sbb-box-shadow-level-9-hard);\n }\n}\n\n.sbb-teaser__description {\n display: inline-block;\n margin: 0;\n padding: 0;\n}\n\n::slotted(sbb-chip-label) {\n display: flex;\n width: fit-content;\n max-width: 100%;\n margin-block-end: var(--sbb-spacing-fixed-1x);\n}\n\n::slotted(sbb-title) {\n margin-block: 0;\n}\n";
|
|
8
|
+
var teaser_default = "@charset \"UTF-8\";\n:host {\n --_sbb-teaser-forced-colors-inset: calc(-1 * var(--sbb-focus-outline-offset));\n --_sbb-teaser-forced-colors-outline-offset: calc(2 * var(--sbb-focus-outline-offset));\n --_sbb-teaser-forced-colors-border-radius: calc(\n var(--sbb-teaser-border-radius) + var(--sbb-focus-outline-offset)\n );\n display: inline-block;\n outline: none !important;\n}\n@media (forced-colors: active) {\n :host {\n --sbb-teaser-description-color: LinkText;\n --sbb-title-color: LinkText !important;\n }\n}\n\n:host([alignment=after]) {\n --sbb-teaser-align-items: start;\n}\n\n:host([alignment=below]) {\n --sbb-teaser-flex-direction: column;\n --sbb-teaser-align-items: baseline;\n --sbb-teaser-gap: var(--sbb-spacing-fixed-3x);\n}\n\n@media (any-hover: hover) {\n :host(:hover) {\n --sbb-teaser-scale: var(--sbb-teaser-scale-hover);\n }\n}\n.sbb-teaser__wrapper {\n display: flex;\n position: relative;\n cursor: var(--sbb-cursor-pointer);\n}\n.sbb-teaser__wrapper::before {\n content: \"\";\n user-select: none;\n width: 0;\n height: 0;\n}\n\n.sbb-teaser {\n text-decoration: none;\n position: absolute;\n inset: 0;\n}\n.sbb-teaser: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 border-radius: var(--sbb-teaser-border-radius);\n}\n@media (forced-colors: active) {\n .sbb-teaser:focus-visible {\n outline-offset: var(--_sbb-teaser-forced-colors-outline-offset);\n }\n}\n@media (forced-colors: active) {\n .sbb-teaser::before {\n content: \"\";\n position: absolute;\n inset: var(--_sbb-teaser-forced-colors-inset);\n pointer-events: none;\n border-radius: var(--_sbb-teaser-forced-colors-border-radius);\n border: var(--sbb-border-width-1x) solid CanvasText;\n }\n}\n\n.sbb-teaser__container {\n display: flex;\n flex-flow: var(--sbb-teaser-flex-direction) nowrap;\n align-items: var(--sbb-teaser-align-items);\n gap: var(--sbb-teaser-gap);\n max-width: 100%;\n width: 100%;\n pointer-events: none;\n}\n\n.sbb-teaser__text {\n color: var(--sbb-teaser-description-color);\n font-size: var(--sbb-teaser-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n overflow: hidden;\n max-width: 100%;\n}\n\n::slotted([slot=image]) {\n display: block;\n width: var(--sbb-teaser-image-width);\n}\n\n.sbb-teaser__image-wrapper {\n flex-shrink: 0;\n overflow: hidden;\n border-radius: var(--sbb-teaser-border-radius);\n transition: box-shadow var(--sbb-teaser-image-animation-duration) var(--sbb-animation-easing);\n max-width: 100%;\n}\n:host(:not(:is(:state(slotted-image),[state--slotted-image]))) .sbb-teaser__image-wrapper {\n display: none;\n}\n@media (any-hover: hover) {\n :host(:hover) .sbb-teaser__image-wrapper {\n box-shadow: var(--sbb-box-shadow-level-9-hard);\n }\n}\n\n.sbb-teaser__description {\n display: inline-block;\n margin: 0;\n padding: 0;\n}\n\n::slotted(sbb-chip-label) {\n display: flex;\n width: fit-content;\n max-width: 100%;\n margin-block-end: var(--sbb-spacing-fixed-1x);\n}\n\n::slotted(sbb-title) {\n margin-block: 0;\n}\n";
|
|
9
9
|
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/elements/teaser/teaser.component.ts
|
|
@@ -154,12 +154,16 @@ let SbbTimeInputElement = (() => {
|
|
|
154
154
|
validate() {
|
|
155
155
|
super.validate();
|
|
156
156
|
if (!this.value) this._removeValidityErrors();
|
|
157
|
-
else if (!this._valueAsTime)
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
157
|
+
else if (!this._valueAsTime) {
|
|
158
|
+
this._removeValidityErrors("badInput");
|
|
159
|
+
this.setValidityFlag("badInput", i18nTimeInvalid[this.language.current]);
|
|
160
|
+
} else if (!this._isTimeValid(this._valueAsTime)) {
|
|
161
|
+
this._removeValidityErrors("rangeOverflow");
|
|
162
|
+
this.setValidityFlag("rangeOverflow", i18nTimeMax[this.language.current]);
|
|
163
|
+
} else this._removeValidityErrors();
|
|
164
|
+
}
|
|
165
|
+
_removeValidityErrors(except) {
|
|
166
|
+
["badInput", "rangeOverflow"].filter((v) => v !== except).forEach((f) => this.removeValidityFlag(f));
|
|
163
167
|
}
|
|
164
168
|
/** Checks if values of hours and minutes are possible, to avoid non-existent times. */
|
|
165
169
|
_isTimeValid(time) {
|
|
@@ -60,9 +60,9 @@ var SbbTimetableFormFieldElement = class extends SbbFormFieldElement {
|
|
|
60
60
|
render() {
|
|
61
61
|
return html`
|
|
62
62
|
${this._routeIcon ? html` <sbb-icon
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
name="route-circle-start-small"
|
|
64
|
+
class="sbb-timetable-form-field__start-route-icon"
|
|
65
|
+
></sbb-icon>` : html` <span class="sbb-timetable-form-field__via-route-icon"></span> `}
|
|
66
66
|
${super.render()}
|
|
67
67
|
`;
|
|
68
68
|
}
|
|
@@ -97,28 +97,28 @@ let SbbTimetableOccupancyElement = (() => {
|
|
|
97
97
|
}
|
|
98
98
|
render() {
|
|
99
99
|
return html` ${(this.firstClassOccupancy || this.secondClassOccupancy) && html`
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
100
|
+
<ul
|
|
101
|
+
class="sbb-timetable-occupancy__list"
|
|
102
|
+
role=${!this.firstClassOccupancy || !this.secondClassOccupancy ? "presentation" : nothing}
|
|
103
|
+
>
|
|
104
|
+
${[this.firstClassOccupancy, this.secondClassOccupancy].map((occupancy, index) => occupancy && html`
|
|
105
|
+
<li class="sbb-timetable-occupancy__list-item">
|
|
106
|
+
<span class="sbb-timetable-occupancy__list-item-class" aria-hidden="true">
|
|
107
|
+
${this.firstClassOccupancy && index === 0 ? "1" : "2"}.
|
|
108
|
+
</span>
|
|
109
|
+
<span class="sbb-screen-reader-only">
|
|
110
|
+
${`${i18nClass[this.firstClassOccupancy && index === 0 ? "first" : "second"][this._language.current]}.`}
|
|
111
|
+
</span>
|
|
112
|
+
<sbb-timetable-occupancy-icon
|
|
113
|
+
class="sbb-timetable-occupancy__list-item-icon"
|
|
114
|
+
?negative=${this.negative}
|
|
115
|
+
.occupancy=${occupancy}
|
|
116
|
+
>
|
|
117
|
+
</sbb-timetable-occupancy-icon>
|
|
118
|
+
</li>
|
|
119
|
+
`)}
|
|
120
|
+
</ul>
|
|
121
|
+
`}`;
|
|
122
122
|
}
|
|
123
123
|
};
|
|
124
124
|
})();
|
|
@@ -250,12 +250,12 @@ let SbbToastElement = (() => {
|
|
|
250
250
|
?negative=${this._isLightMode()}
|
|
251
251
|
></sbb-divider>
|
|
252
252
|
${!this.readOnly ? html`<sbb-transparent-button
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
253
|
+
class="sbb-toast__close-button"
|
|
254
|
+
icon-name="cross-small"
|
|
255
|
+
?negative=${this._isLightMode()}
|
|
256
|
+
aria-label=${i18nCloseAlert[this._language.current]}
|
|
257
|
+
sbb-toast-close
|
|
258
|
+
></sbb-transparent-button>` : nothing}
|
|
259
259
|
</div>
|
|
260
260
|
</div>
|
|
261
261
|
</div>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
2
|
import { html, isServer, unsafeCSS } from "lit";
|
|
3
3
|
import { property } from "lit/decorators.js";
|
|
4
|
-
import { SbbDisabledMixin, SbbEscapableOverlayController, SbbOpenCloseBaseElement, SbbOverlayPositionController, appendAriaElements, idReference, isAndroid, isIOS, isZeroAnimationDuration, popoverResetStyles, queueDomContentLoaded, readConfig, removeAriaElements, sbbOverlayOutsidePointerEventListener } from "./core.js";
|
|
4
|
+
import { SbbDisabledMixin, SbbEscapableOverlayController, SbbOpenCloseBaseElement, SbbOverlayPositionController, appendAriaElements, idReference, isAndroid, isIOS, isZeroAnimationDuration, popoverResetStyles, queueDomContentLoaded, readConfig, removeAriaElements, sbbInputModalityDetector, sbbOverlayOutsidePointerEventListener } from "./core.js";
|
|
5
5
|
|
|
6
6
|
//#region src/elements/tooltip/tooltip.scss?inline
|
|
7
7
|
var tooltip_default = ":host {\n --sbb-tooltip-max-width: min(\n 25rem,\n calc(100vw - var(--sbb-spacing-fixed-2x))\n );\n --sbb-tooltip-animation-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-4x)\n );\n position-area: var(--sbb-overlay-position-area);\n position-try-fallbacks: var(--sbb-overlay-position-try-fallbacks);\n display: none;\n position: fixed;\n pointer-events: var(--sbb-tooltip-pointer-events, all);\n z-index: var(--sbb-tooltip-z-index, var(--sbb-overlay-default-z-index));\n animation-name: var(--sbb-tooltip-animation-name);\n animation-duration: var(--sbb-tooltip-animation-duration);\n animation-timing-function: var(--sbb-tooltip-animation-easing);\n font-size: var(--sbb-tooltip-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n line-height: var(--sbb-typo-line-height-text);\n}\n\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) {\n --sbb-tooltip-animation-name: open;\n display: block;\n}\n\n:host(:is(:state(state-closing),[state--state-closing])) {\n --sbb-tooltip-animation-name: close;\n --sbb-tooltip-pointer-events: none;\n}\n\n:host(:is([data-position~=block-end], [data-position~=bottom], [data-position^=end])) {\n padding-block-start: var(--sbb-tooltip-gap);\n}\n\n:host(:is([data-position~=block-start], [data-position~=top], [data-position^=start])) {\n padding-block-end: var(--sbb-tooltip-gap);\n}\n\n:host(:is([data-position~=inline-start],\n[data-position~=inline-end],\n[data-position~=left],\n[data-position~=right],\n[data-position$=\" start\"],\n[data-position$=\" end\"])) {\n padding-inline: var(--sbb-tooltip-gap);\n}\n\n.sbb-tooltip {\n box-shadow: var(--sbb-box-shadow-level-5-soft);\n border: var(--sbb-border-width-1x) solid var(--sbb-tooltip-border-color);\n border-radius: var(--sbb-tooltip-border-radius);\n padding: var(--sbb-tooltip-padding);\n color: var(--sbb-tooltip-color);\n background-color: var(--sbb-tooltip-background-color);\n min-width: var(--sbb-tooltip-min-width);\n max-width: var(--sbb-tooltip-max-width);\n}\n\n@keyframes open {\n from {\n opacity: 0;\n translate: var(--sbb-tooltip-animation-translate);\n }\n to {\n opacity: 1;\n translate: 0;\n }\n}\n@keyframes close {\n from {\n opacity: 1;\n translate: 0;\n }\n to {\n opacity: 0;\n translate: var(--sbb-tooltip-animation-translate);\n }\n}\n";
|
|
@@ -334,7 +334,9 @@ let SbbTooltipElement = (() => {
|
|
|
334
334
|
if (!newTarget || newTarget !== this) this._delayedClose();
|
|
335
335
|
}, options);
|
|
336
336
|
trigger.addEventListener("blur", () => this.close(), options);
|
|
337
|
-
trigger.addEventListener("focus", () =>
|
|
337
|
+
trigger.addEventListener("focus", () => {
|
|
338
|
+
if (sbbInputModalityDetector.mostRecentModality === "keyboard") this._delayedOpen();
|
|
339
|
+
}, options);
|
|
338
340
|
}
|
|
339
341
|
trigger.addEventListener("touchstart", () => {
|
|
340
342
|
clearTimeout(this._longPressOpenTimeout);
|
|
@@ -243,18 +243,18 @@ let SbbTrainFormationElement = (() => {
|
|
|
243
243
|
render() {
|
|
244
244
|
return html`
|
|
245
245
|
${this._sectors.length && this._sectors[0].label !== void 0 ? html`<div class="sbb-train-formation__sectors" aria-hidden="true">
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
246
|
+
${this._sectors.map((aggregatedSector) => html`<span
|
|
247
|
+
class="sbb-train-formation__sector"
|
|
248
|
+
style=${styleMap({
|
|
249
249
|
"--sbb-train-formation-wagon-count": aggregatedSector.wagonCount,
|
|
250
250
|
"--sbb-train-formation-wagon-blocked-passage-count": aggregatedSector.blockedPassageCount
|
|
251
251
|
})}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
252
|
+
>
|
|
253
|
+
<span class="sbb-train-formation__sector-sticky-wrapper">
|
|
254
|
+
${`${aggregatedSector.wagonCount === 1 && aggregatedSector.label ? i18nSectorShort[this._language.current] : i18nSector[this._language.current]} ${aggregatedSector.label ? aggregatedSector.label : ""}`}
|
|
255
|
+
</span>
|
|
256
|
+
</span>`)}
|
|
257
|
+
</div>` : nothing}
|
|
258
258
|
|
|
259
259
|
<div class="sbb-train-formation__trains">
|
|
260
260
|
${this.renderList({
|
|
@@ -636,13 +636,13 @@ const SbbTrainWagonMixin = (superClass) => {
|
|
|
636
636
|
${this.label ? html$1`<li class="sbb-screen-reader-only">${labelString}</li>` : nothing}
|
|
637
637
|
${this.wagonClass && this.wagonType !== "closed" ? html$1`<li class="sbb-train-wagon__class">${wagonClassContent}</li>` : nothing}
|
|
638
638
|
${this.occupancy && this.wagonType !== "closed" ? html$1`<sbb-timetable-occupancy-icon
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
639
|
+
class="sbb-train-wagon__occupancy"
|
|
640
|
+
role="listitem"
|
|
641
|
+
occupancy=${this.occupancy}
|
|
642
|
+
></sbb-timetable-occupancy-icon>` : nothing}
|
|
643
643
|
${hasBlockedPassageEntry ? html$1`<li class="sbb-screen-reader-only">
|
|
644
|
-
|
|
645
|
-
|
|
644
|
+
${i18nBlockedPassage[blockedPassage][this._language.current]}
|
|
645
|
+
</li>` : nothing}
|
|
646
646
|
</ul>`, () => html$1`<div class="sbb-train-wagon__compartment">
|
|
647
647
|
<span class="sbb-screen-reader-only">
|
|
648
648
|
${`${this._wagonTypeLabel()}${this.sector ? `, ${sectorString}` : ""}`}
|
|
@@ -650,17 +650,17 @@ const SbbTrainWagonMixin = (superClass) => {
|
|
|
650
650
|
${this.label ? html$1`<span class="sbb-screen-reader-only">${labelString}</span>` : nothing}
|
|
651
651
|
${this.wagonClass && this.wagonType !== "closed" ? html$1`<span class="sbb-train-wagon__class">${wagonClassContent}</span>` : nothing}
|
|
652
652
|
${this.occupancy && this.wagonType !== "closed" ? html$1`<sbb-timetable-occupancy-icon
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
653
|
+
class="sbb-train-wagon__occupancy"
|
|
654
|
+
occupancy=${this.occupancy}
|
|
655
|
+
></sbb-timetable-occupancy-icon>` : nothing}
|
|
656
656
|
${hasBlockedPassageEntry ? html$1`<span class="sbb-screen-reader-only">
|
|
657
|
-
|
|
658
|
-
|
|
657
|
+
${i18nBlockedPassage[blockedPassage][this._language.current]}
|
|
658
|
+
</span>` : nothing}
|
|
659
659
|
</div> `)}
|
|
660
660
|
${wagonTypeToIconMap[this.wagonType] ? html$1`<sbb-icon
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
661
|
+
name=${wagonTypeToIconMap[this.wagonType]}
|
|
662
|
+
class="sbb-train-wagon__main-icon"
|
|
663
|
+
></sbb-icon>` : nothing}
|
|
664
664
|
<svg class="sbb-train-wagon__shape" viewBox="0 0 84 36" aria-hidden="true">
|
|
665
665
|
<path d=${path}></path>
|
|
666
666
|
<path
|
|
@@ -673,18 +673,18 @@ const SbbTrainWagonMixin = (superClass) => {
|
|
|
673
673
|
></path>
|
|
674
674
|
</svg>
|
|
675
675
|
${this.additionalAccessibilityText ? html$1`<span class="sbb-screen-reader-only"
|
|
676
|
-
|
|
677
|
-
|
|
676
|
+
>, ${this.additionalAccessibilityText}</span
|
|
677
|
+
>` : nothing}
|
|
678
678
|
<span
|
|
679
679
|
class="sbb-train-wagon__information-wrapper"
|
|
680
680
|
?hidden=${!this.listChildren.length && !this.label}
|
|
681
681
|
>
|
|
682
682
|
${this.label ? html$1`<span aria-hidden="true" class="sbb-train-wagon__label">${this.label}</span>` : nothing}
|
|
683
683
|
${this.label && this.listChildren.length ? html$1`<sbb-divider
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
684
|
+
orientation=${this.orientation === "vertical" ? "horizontal" : "vertical"}
|
|
685
|
+
aria-hidden="true"
|
|
686
|
+
class="sbb-train-wagon__label-divider"
|
|
687
|
+
></sbb-divider>` : nothing}
|
|
688
688
|
${this.renderList({
|
|
689
689
|
class: "sbb-train-wagon__attribute-icon-list",
|
|
690
690
|
ariaLabel: i18nAdditionalWagonInformationHeading[this._language.current]
|
|
@@ -118,19 +118,19 @@ let SbbVisualCheckboxElement = (() => {
|
|
|
118
118
|
render() {
|
|
119
119
|
return html`
|
|
120
120
|
${this.checked || this.indeterminate ? html`<svg
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
121
|
+
viewBox="0 0 24 24"
|
|
122
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
123
|
+
width="100%"
|
|
124
|
+
height="100%"
|
|
125
|
+
>
|
|
126
|
+
<path
|
|
127
|
+
fill="none"
|
|
128
|
+
d=${this.indeterminate ? "M9 12H15" : "M8 12.3304L10.4615 15L16 9"}
|
|
129
|
+
stroke-width="2"
|
|
130
|
+
stroke-linecap="round"
|
|
131
|
+
stroke-linejoin="round"
|
|
132
|
+
/>
|
|
133
|
+
</svg>` : nothing}
|
|
134
134
|
`;
|
|
135
135
|
}
|
|
136
136
|
constructor() {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
$theme: 'standard' !default;
|
|
2
|
+
|
|
3
|
+
@mixin base {
|
|
4
|
+
--sbb-download-gap: var(--sbb-spacing-fixed-3x);
|
|
5
|
+
--sbb-download-label-color: var(--sbb-color-3);
|
|
6
|
+
--sbb-download-info-color: light-dark(var(--sbb-color-granite), var(--sbb-color-aluminium));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
@mixin forced-colors {
|
|
10
|
+
--sbb-download-label-color: CanvasText;
|
|
11
|
+
--sbb-download-info-color: CanvasText;
|
|
12
|
+
}
|
package/download.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{SbbDownloadElement as e,SbbDownloadInfoElement as t}from"./download.pure.js";export*from"./download.pure.js";e.define(),t.define();
|
package/download.pure.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{__esDecorate as e,__runInitializers as t}from"tslib";import{html as n,nothing as r,unsafeCSS as i}from"lit";import{property as a}from"lit/decorators.js";import{SbbSecondaryButtonStaticElement as o}from"./button.pure.js";import{SbbElement as s,SbbLanguageController as c,SbbLinkBaseElement as l,SbbPropertyWatcherController as u,defaultDateAdapter as d,forceType as f,i18nDownload as p,i18nNonAccessible as m,omitEmptyConverter as h,readConfig as g,screenReaderOnlyStyles as _}from"./core.js";import{SbbIconNameMixin as v}from"./icon.pure.js";var y=`:host{--sbb-card-background-color:var(--sbb-background-color-1);--sbb-card-border-color:transparent;--sbb-card-border-radius:var(--sbb-border-radius-4x);--sbb-card-animation-easing:var(--sbb-animation-easing);--sbb-card-border-style:solid;--sbb-card-padding-inline-default:var(--sbb-spacing-responsive-s);--sbb-card-padding-block-default:var(--sbb-spacing-responsive-xxxs);--sbb-card-with-badge-padding-block-default:var(--sbb-spacing-fixed-6x) var(--sbb-spacing-responsive-xxxs);--sbb-card-padding-block:var(--sbb-card-padding-block-default);--sbb-card-with-badge-padding-block:var(--sbb-card-with-badge-padding-block-default);--sbb-card-padding-inline:var(--sbb-card-padding-inline-default);display:block}:host(:where([color=white])){--sbb-card-background-color:var(--sbb-background-color-1);--sbb-card-border-color:transparent}:host(:where([color=milk])){--sbb-card-background-color:var(--sbb-background-color-3);--sbb-card-border-color:transparent}.sbb-download{--sbb-focus-outline-color:light-dark(var(--sbb-focus-outline-color-default),var(--sbb-focus-outline-color-dark));--sbb-card-animation-duration:var(--sbb-disable-animation-duration,var(--sbb-animation-duration-1x));padding-inline:var(--sbb-card-padding-inline);padding-block:var(--sbb-card-padding-block);border-radius:var(--sbb-card-border-radius);background-color:var(--sbb-card-background-color);box-shadow:none;transition:box-shadow var(--sbb-card-animation-duration) var(--sbb-card-animation-easing);color:var(--sbb-card-color);display:block;position:relative}.sbb-download:after{content:"";border:var(--sbb-card-border-width) var(--sbb-card-border-style) var(--sbb-card-border-color);border-radius:var(--sbb-card-border-radius);pointer-events:none;background-color:#0000;position:absolute;inset:0}@media (forced-colors:active){.sbb-download{--sbb-title-color:var(--sbb-card-color)}}.sbb-download{align-items:center;gap:var(--sbb-download-gap);translate:0 var(--sbb-card-hover-shift,0);transition:box-shadow var(--sbb-card-animation-duration) var(--sbb-card-animation-easing), translate var(--sbb-card-animation-duration) var(--sbb-card-animation-easing);text-decoration:none;display:flex}.sbb-download:focus-visible{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) var(--sbb-focus-outline-style,solid) var(--sbb-focus-outline-width)}@media (any-hover:hover){:host(:hover) .sbb-download{--sbb-card-hover-shift:-.125rem;box-shadow:var(--sbb-box-shadow-level-9-hard)}}@media (any-hover:hover) and (forced-colors:active){:host(:hover) .sbb-download{--sbb-card-border-color:Highlight}}.sbb-download__icon{flex:none}.sbb-download__content{flex-direction:column;flex:auto;min-width:0;display:flex}.sbb-download__label{overflow-wrap:break-word;color:var(--sbb-download-label-color);font-weight:700}.sbb-download__custom-content,.sbb-download__info{line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size-xxs);color:var(--sbb-download-info-color)}.sbb-download__button{flex:none;margin-inline-start:auto}
|
|
2
|
+
`;const b=new Map([[`pdf`,`document-pdf-small`],[`xls`,`document-xls-small`],[`xlsx`,`document-xls-small`],[`ppt`,`document-ppt-small`],[`pptx`,`document-ppt-small`],[`doc`,`document-doc-small`],[`docx`,`document-doc-small`],[`zip`,`document-zip-small`],[`jpg`,`document-image-small`],[`jpeg`,`document-image-small`],[`png`,`document-image-small`],[`gif`,`document-image-small`],[`svg`,`document-image-small`],[`webp`,`document-image-small`]]);let x=(()=>{let s=v(l),u=[],d,m=[],g=[],x,S=[],C=[],w;return class extends s{constructor(){super(...arguments),this.#e=(t(this,u),t(this,m,`white`)),this.#t=(t(this,g),t(this,S,``)),this._languageController=(t(this,C),new c(this))}static{let t=typeof Symbol==`function`&&Symbol.metadata?Object.create(s[Symbol.metadata]??null):void 0;d=[a({reflect:!0})],x=[f(),a({converter:h})],w=[a({type:Boolean,reflect:!1})],e(this,null,d,{kind:`accessor`,name:`color`,static:!1,private:!1,access:{has:e=>`color`in e,get:e=>e.color,set:(e,t)=>{e.color=t}},metadata:t},m,g),e(this,null,x,{kind:`accessor`,name:`label`,static:!1,private:!1,access:{has:e=>`label`in e,get:e=>e.label,set:(e,t)=>{e.label=t}},metadata:t},S,C),e(this,null,w,{kind:`setter`,name:`download`,static:!1,private:!1,access:{has:e=>`download`in e,set:(e,t)=>{e.download=t}},metadata:t},null,u),t&&Object.defineProperty(this,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:t})}static{this.elementName=`sbb-download`}static{this.elementDependencies=[o]}static{this.styles=[_,i(y)]}#e;get color(){return this.#e}set color(e){this.#e=e}#t;get label(){return this.#t}set label(e){this.#t=e}set download(e){}get download(){return!0}get fileName(){return this.href.split(/[?#]/)[0].split(`/`).filter(Boolean).at(-1)??``}get fileExtension(){let e=this.fileName;return e.includes(`.`)?e.split(`.`).at(-1)?.toLowerCase()??``:``}renderIconName(){if(this.iconName)return this.iconName;if(!this.href)return``;let e=this.fileExtension;return e&&b.get(e)||`document-standard-small`}firstUpdated(e){super.firstUpdated(e),this._updateDescribedByElements()}_updateDescribedByElements(){let e=this.shadowRoot?.querySelector?.(`a`);if(e){let t=this.shadowRoot?.querySelector?.(`.sbb-download__custom-content`);e.ariaDescribedByElements=[...t?[t]:[],...this._downloadInfoElements()]}}_downloadInfoElements(){return this.querySelectorAll?.(`sbb-download-info`)??[]}renderTemplate(){return n`
|
|
3
|
+
${this.renderIconSlot(`sbb-download__icon`)}
|
|
4
|
+
<span class="sbb-download__content">
|
|
5
|
+
<span class="sbb-download__label">${this.label||this.fileName}</span>
|
|
6
|
+
<span class="sbb-screen-reader-only">
|
|
7
|
+
${this._downloadInfoElements().length?r:n` ${this.fileExtension}`} ${p[this._languageController.current]}
|
|
8
|
+
</span>
|
|
9
|
+
<span class="sbb-download__custom-content" aria-hidden="true">
|
|
10
|
+
<slot></slot>
|
|
11
|
+
</span>
|
|
12
|
+
<span class="sbb-download__info">
|
|
13
|
+
<slot name="info" @slotchange="${()=>this._updateDescribedByElements()}"></slot>
|
|
14
|
+
</span>
|
|
15
|
+
</span>
|
|
16
|
+
<sbb-secondary-button-static
|
|
17
|
+
class="sbb-download__button"
|
|
18
|
+
icon-name="download-small"
|
|
19
|
+
></sbb-secondary-button-static>
|
|
20
|
+
`}}})();var S=`:host{display:block}
|
|
21
|
+
`;const C=[`B`,`KB`,`MB`,`GB`,`TB`];let w=(()=>{let r=s,o,l=[],p=[],_,v=[],y=[],b,x=[],w=[],T,E=[],D=[];return class extends r{static{let t=typeof Symbol==`function`&&Symbol.metadata?Object.create(r[Symbol.metadata]??null):void 0;o=[f(),a({converter:h})],_=[f(),a({converter:h})],b=[f(),a({converter:h})],T=[f(),a({attribute:`non-accessible`,type:Boolean})],e(this,null,o,{kind:`accessor`,name:`type`,static:!1,private:!1,access:{has:e=>`type`in e,get:e=>e.type,set:(e,t)=>{e.type=t}},metadata:t},l,p),e(this,null,_,{kind:`accessor`,name:`size`,static:!1,private:!1,access:{has:e=>`size`in e,get:e=>e.size,set:(e,t)=>{e.size=t}},metadata:t},v,y),e(this,null,b,{kind:`accessor`,name:`changed`,static:!1,private:!1,access:{has:e=>`changed`in e,get:e=>e.changed,set:(e,t)=>{e.changed=t}},metadata:t},x,w),e(this,null,T,{kind:`accessor`,name:`nonAccessible`,static:!1,private:!1,access:{has:e=>`nonAccessible`in e,get:e=>e.nonAccessible,set:(e,t)=>{e.nonAccessible=t}},metadata:t},E,D),t&&Object.defineProperty(this,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:t})}static{this.elementName=`sbb-download-info`}static{this.styles=[i(S)]}#e;get type(){return this.#e}set type(e){this.#e=e}#t;get size(){return this.#t}set size(e){this.#t=e}#n;get changed(){return this.#n}set changed(e){this.#n=e}#r;get nonAccessible(){return this.#r}set nonAccessible(e){this.#r=e}constructor(){super(),this.#e=t(this,l,``),this.#t=(t(this,p),t(this,v,``)),this.#n=(t(this,y),t(this,x,``)),this.#r=(t(this,w),t(this,E,!1)),this._language=(t(this,D),new c(this)),this._dateAdapter=g().datetime?.dateAdapter??d,this._resolvedType=``,this._typeRedundant=!1,this._resolvedSize=``,this._resolvedChanged=``,this.internals.ariaHidden=`true`,this.addController(new u(this,()=>this.closest(`sbb-download`),{href:()=>this.requestUpdate(),label:()=>this.requestUpdate()}))}connectedCallback(){super.connectedCallback(),this.slot||=`info`,this.requestUpdate()}willUpdate(e){super.willUpdate(e),this._resolvedType=this._resolveType(),this._typeRedundant=this._isTypeRedundant(),e.has(`size`)&&(this._resolvedSize=this._resolveSize()),e.has(`changed`)&&(this._resolvedChanged=this._resolveChanged())}_resolveType(){return this.type||(this.closest?.(`sbb-download`)?.fileExtension.toUpperCase()??``)}_isTypeRedundant(){let e=this.closest?.(`sbb-download`);return!!e&&!e.label&&!!e.fileExtension}_resolveSize(){let e=this.size.trim();if(!e||!/^\d+$/.test(e))return e;let t=Number(e);if(t<=0)return`0 ${C[0]}`;let n=Math.min(Math.floor(Math.log(t)/Math.log(1024)),C.length-1);return`${(t/1024**n).toFixed(0)} ${C[n]}`}_resolveChanged(){if(!this.changed)return``;let e=this._dateAdapter.deserialize(this.changed);return this._dateAdapter.isValid(e)?this._dateAdapter.format(e,{weekdayStyle:`none`}):this.changed}render(){let e=[this._resolvedType,this._resolvedSize,this.nonAccessible?m[this._language.current]:``,this._resolvedChanged].filter(Boolean);return this.internals.ariaLabel=e.slice(this._typeRedundant&&this._resolvedType?1:0).join(`, `),n`${e.join(`, `)}`}}})();export{x as SbbDownloadElement,w as SbbDownloadInfoElement};
|