scb-wc-test 0.1.350 → 0.1.352

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/all.js CHANGED
@@ -31,6 +31,7 @@ import './mvc/components/scb-fact-card/scb-fact-card-content.js';
31
31
  import './mvc/components/scb-fact-card/scb-fact-card.js';
32
32
  import './mvc/components/scb-footer/scb-footer-section.js';
33
33
  import './mvc/components/scb-footer/scb-footer.js';
34
+ import './mvc/components/scb-gallery-grid/scb-gallery-grid.js';
34
35
  import './mvc/components/scb-grid/scb-grid-item.js';
35
36
  import './mvc/components/scb-grid/scb-grid.js';
36
37
  import './mvc/components/scb-grid/scb-stack.js';
@@ -55,6 +56,7 @@ import './mvc/components/scb-notification-card/scb-notification-card.js';
55
56
  import './mvc/components/scb-options-menu/scb-options-menu-item.js';
56
57
  import './mvc/components/scb-options-menu/scb-options-menu.js';
57
58
  import './mvc/components/scb-options-menu/scb-options-sub-menu.js';
59
+ import './mvc/components/scb-overlay/scb-overlay.js';
58
60
  import './mvc/components/scb-pagination/scb-pagination.js';
59
61
  import './mvc/components/scb-progress-indicator/scb-progress-indicator.js';
60
62
  import './mvc/components/scb-progress-stepper/scb-progress-step.js';
@@ -83,6 +85,7 @@ import './mvc/components/scb-textfield/scb-textfield.js';
83
85
  import './mvc/components/scb-toc/scb-toc-item.js';
84
86
  import './mvc/components/scb-toc/scb-toc.js';
85
87
  import './mvc/components/scb-tooltip/scb-tooltip.js';
88
+ import './mvc/components/scb-vignette/scb-vignette.js';
86
89
  import './mvc/components/scb-viz/scb-viz-actions-runtime.js';
87
90
  import './mvc/components/scb-viz/scb-viz-print-runtime.js';
88
91
  import './mvc/components/scb-viz/scb-viz-series-differentiation-registry.js';
@@ -123,6 +126,7 @@ import './scb-fact-card/scb-fact-card-content.js';
123
126
  import './scb-fact-card/scb-fact-card.js';
124
127
  import './scb-footer/scb-footer-section.js';
125
128
  import './scb-footer/scb-footer.js';
129
+ import './scb-gallery-grid/scb-gallery-grid.js';
126
130
  import './scb-grid/scb-grid-item.js';
127
131
  import './scb-grid/scb-grid.js';
128
132
  import './scb-grid/scb-stack.js';
@@ -147,6 +151,7 @@ import './scb-notification-card/scb-notification-card.js';
147
151
  import './scb-options-menu/scb-options-menu-item.js';
148
152
  import './scb-options-menu/scb-options-menu.js';
149
153
  import './scb-options-menu/scb-options-sub-menu.js';
154
+ import './scb-overlay/scb-overlay.js';
150
155
  import './scb-pagination/scb-pagination.js';
151
156
  import './scb-progress-indicator/scb-progress-indicator.js';
152
157
  import './scb-progress-stepper/scb-progress-step.js';
@@ -175,6 +180,7 @@ import './scb-textfield/scb-textfield.js';
175
180
  import './scb-toc/scb-toc-item.js';
176
181
  import './scb-toc/scb-toc.js';
177
182
  import './scb-tooltip/scb-tooltip.js';
183
+ import './scb-vignette/scb-vignette.js';
178
184
  import './scb-viz/scb-viz-actions-runtime.js';
179
185
  import './scb-viz/scb-viz-print-runtime.js';
180
186
  import './scb-viz/scb-viz-series-differentiation-registry.js';
package/index.d.ts CHANGED
@@ -27,6 +27,7 @@ export * from './scb-fact-card/scb-fact-card-content';
27
27
  export * from './scb-fact-card/scb-fact-card';
28
28
  export * from './scb-footer/scb-footer-section';
29
29
  export * from './scb-footer/scb-footer';
30
+ export * from './scb-gallery-grid/scb-gallery-grid';
30
31
  export * from './scb-grid/scb-grid-item';
31
32
  export * from './scb-grid/scb-grid';
32
33
  export * from './scb-grid/scb-stack';
@@ -51,6 +52,7 @@ export * from './scb-notification-card/scb-notification-card';
51
52
  export * from './scb-options-menu/scb-options-menu-item';
52
53
  export * from './scb-options-menu/scb-options-menu';
53
54
  export * from './scb-options-menu/scb-options-sub-menu';
55
+ export * from './scb-overlay/scb-overlay';
54
56
  export * from './scb-pagination/scb-pagination';
55
57
  export * from './scb-progress-indicator/scb-progress-indicator';
56
58
  export * from './scb-progress-stepper/scb-progress-step';
@@ -79,6 +81,7 @@ export * from './scb-textfield/scb-textfield';
79
81
  export * from './scb-toc/scb-toc-item';
80
82
  export * from './scb-toc/scb-toc';
81
83
  export * from './scb-tooltip/scb-tooltip';
84
+ export * from './scb-vignette/scb-vignette';
82
85
  export * from './scb-viz/scb-viz-actions-runtime';
83
86
  export * from './scb-viz/scb-viz-print-runtime';
84
87
  export * from './scb-viz/scb-viz-series-differentiation-registry';
package/index.js CHANGED
@@ -27,6 +27,7 @@ import "./scb-fact-card/scb-fact-card-content.js";
27
27
  import "./scb-fact-card/scb-fact-card.js";
28
28
  import "./scb-footer/scb-footer-section.js";
29
29
  import "./scb-footer/scb-footer.js";
30
+ import "./scb-gallery-grid/scb-gallery-grid.js";
30
31
  import "./scb-grid/scb-grid-item.js";
31
32
  import "./scb-grid/scb-grid.js";
32
33
  import "./scb-grid/scb-stack.js";
@@ -51,6 +52,7 @@ import "./scb-notification-card/scb-notification-card.js";
51
52
  import "./scb-options-menu/scb-options-menu-item.js";
52
53
  import "./scb-options-menu/scb-options-menu.js";
53
54
  import "./scb-options-menu/scb-options-sub-menu.js";
55
+ import "./scb-overlay/scb-overlay.js";
54
56
  import "./scb-pagination/scb-pagination.js";
55
57
  import "./scb-progress-indicator/scb-progress-indicator.js";
56
58
  import "./scb-progress-stepper/scb-progress-step.js";
@@ -79,4 +81,5 @@ import "./scb-textfield/scb-textfield.js";
79
81
  import "./scb-toc/scb-toc-item.js";
80
82
  import "./scb-toc/scb-toc.js";
81
83
  import "./scb-tooltip/scb-tooltip.js";
84
+ import "./scb-vignette/scb-vignette.js";
82
85
  import "./scb-viz/scb-viz.js";
@@ -27,6 +27,7 @@ import './scb-fact-card/scb-fact-card.js';
27
27
  import './scb-fact-card/scb-fact-card-content.js';
28
28
  import './scb-footer/scb-footer.js';
29
29
  import './scb-footer/scb-footer-section.js';
30
+ import './scb-gallery-grid/scb-gallery-grid.js';
30
31
  import './scb-grid/scb-grid.js';
31
32
  import './scb-grid/scb-grid-item.js';
32
33
  import './scb-grid/scb-stack.js';
@@ -51,6 +52,7 @@ import './scb-notification-card/scb-notification-card.js';
51
52
  import './scb-options-menu/scb-options-menu.js';
52
53
  import './scb-options-menu/scb-options-menu-item.js';
53
54
  import './scb-options-menu/scb-options-sub-menu.js';
55
+ import './scb-overlay/scb-overlay.js';
54
56
  import './scb-pagination/scb-pagination.js';
55
57
  import './scb-progress-indicator/scb-progress-indicator.js';
56
58
  import './scb-progress-stepper/scb-progress-step.js';
@@ -79,6 +81,7 @@ import './scb-textfield/scb-textfield.js';
79
81
  import './scb-toc/scb-toc.js';
80
82
  import './scb-toc/scb-toc-item.js';
81
83
  import './scb-tooltip/scb-tooltip.js';
84
+ import './scb-vignette/scb-vignette.js';
82
85
  import './scb-viz/scb-viz.js';
83
86
  import './scb-viz/scb-viz-actions-runtime.js';
84
87
  import './scb-viz/scb-viz-print-runtime.js';
@@ -0,0 +1,131 @@
1
+ import{a as S,n as E,r as k,i as T,x,t as A}from"../../vendor/vendor.js";import"../scb-horizontal-scroller/scb-horizontal-scroller.js";import"../scb-overlay/scb-overlay.js";import"../scb-icon-button/scb-icon-button.js";import"../../vendor/preload-helper.js";import"../../vendor/vendor-material.js";import"../scb-button/scb-button.js";(function(){try{var e=typeof globalThis<"u"?globalThis:window;if(!e.__scb_ce_guard_installed__){e.__scb_ce_guard_installed__=!0;var t=customElements.define.bind(customElements);customElements.define=function(a,r,l){try{customElements.get(a)||t(a,r,l)}catch(h){var n=String(h||"");if(n.indexOf("already been used")===-1&&n.indexOf("NotSupportedError")===-1)throw h}}}}catch{}})();var W=Object.defineProperty,$=Object.getOwnPropertyDescriptor,I=e=>{throw TypeError(e)},v=(e,t,a,r)=>{for(var l=r>1?void 0:r?$(t,a):t,n=e.length-1,h;n>=0;n--)(h=e[n])&&(l=(r?h(t,a,l):h(l))||l);return r&&l&&W(t,a,l),l},w=(e,t,a)=>t.has(e)||I("Cannot "+a),s=(e,t,a)=>(w(e,t,"read from private field"),t.get(e)),o=(e,t,a)=>t.has(e)?I("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,a),M=(e,t,a,r)=>(w(e,t,"write to private field"),t.set(e,a),a),c=(e,t,a)=>(w(e,t,"access private method"),a),y,u,_,m,b,f,i,C,z,p,O,L,g;let d=class extends T{constructor(){super(...arguments),o(this,i),this.variant="default",this.enableClickCarousel=!0,this.overlayOpen=!1,this.overlayIndex=0,this.overlayImages=[],o(this,y,[]),o(this,u,e=>{e.key==="Escape"&&this.overlayOpen&&s(this,g).call(this)}),o(this,_,()=>{c(this,i,p).call(this)}),o(this,m,e=>{if(!this.enableClickCarousel)return;const t=e.currentTarget;t instanceof HTMLElement&&t.setAttribute("data-scb-gallery-hover","")}),o(this,b,e=>{if(!this.enableClickCarousel)return;const t=e.currentTarget;t instanceof HTMLElement&&t.removeAttribute("data-scb-gallery-hover")}),o(this,f,e=>{if(!this.enableClickCarousel)return;const t=e.currentTarget;if(!(t instanceof HTMLElement))return;const a=t.getAttribute("data-scb-gallery-slide-index");if(a==null)return;const r=Number(a);Number.isFinite(r)&&c(this,i,L).call(this,r)}),o(this,g,()=>{this.overlayOpen=!1})}connectedCallback(){super.connectedCallback(),window.addEventListener("keydown",s(this,u))}disconnectedCallback(){window.removeEventListener("keydown",s(this,u)),c(this,i,C).call(this),super.disconnectedCallback()}firstUpdated(){c(this,i,p).call(this)}updated(e){e.has("enableClickCarousel")&&(this.enableClickCarousel||s(this,g).call(this),c(this,i,p).call(this))}render(){return x`
2
+ <div class="gallery">
3
+ <slot @slotchange=${s(this,_)}></slot>
4
+ </div>
5
+ ${this.overlayOpen&&this.enableClickCarousel?x`
6
+ <scb-overlay open aria-label="Bildkarusell" @scb-overlay-dismiss=${s(this,g)}>
7
+ <div class="overlay-dialog">
8
+ <scb-horizontal-scroller show-scrollbar class="overlay-carousel" variant="standard" width="100%" content-flex internal-gap="0">
9
+ ${c(this,i,O).call(this).map((e,t)=>x`
10
+ <div
11
+ class="overlay-slide ${t===0?"is-active":""}"
12
+ data-overlay-slide-index="${t}"
13
+ >
14
+ <img src="${e.src}" alt="${e.alt}" />
15
+ </div>
16
+ `)}
17
+ </scb-horizontal-scroller>
18
+ </div>
19
+ </scb-overlay>
20
+ `:""}
21
+ `}};y=new WeakMap;u=new WeakMap;_=new WeakMap;m=new WeakMap;b=new WeakMap;f=new WeakMap;i=new WeakSet;C=function(){s(this,y).forEach(e=>{e.removeEventListener("pointerenter",s(this,m)),e.removeEventListener("pointerleave",s(this,b)),e.removeEventListener("click",s(this,f)),e.removeAttribute("data-scb-gallery-hover"),e.removeAttribute("data-scb-gallery-clickable"),e.removeAttribute("data-scb-gallery-slide-index")}),M(this,y,[])};z=function(e){if(e instanceof HTMLImageElement){const t=e.currentSrc||e.src;return t?{src:t,alt:e.alt||"Galleri-bild"}:null}return null};p=function(){c(this,i,C).call(this);const e=this.renderRoot.querySelector("slot");if(!(e instanceof HTMLSlotElement)){this.overlayImages=[];return}const t=e.assignedElements({flatten:!0}).filter(r=>r instanceof HTMLElement);M(this,y,t);const a=[];t.forEach(r=>{if(!this.enableClickCarousel)return;const l=c(this,i,z).call(this,r);if(!l)return;r.addEventListener("pointerenter",s(this,m)),r.addEventListener("pointerleave",s(this,b));const n=a.length;a.push(l),r.setAttribute("data-scb-gallery-clickable",""),r.setAttribute("data-scb-gallery-slide-index",String(n)),r.addEventListener("click",s(this,f))}),this.overlayImages=a};O=function(){if(this.overlayImages.length===0)return[];const e=Math.max(0,Math.min(this.overlayIndex,this.overlayImages.length-1));return[...this.overlayImages.slice(e),...this.overlayImages.slice(0,e)]};L=function(e){if(!this.enableClickCarousel||this.overlayImages.length===0)return;const t=Math.max(0,Math.min(e,this.overlayImages.length-1));this.overlayIndex=t,this.overlayOpen=!0};g=new WeakMap;d.styles=S`
22
+ :host {
23
+ display: block;
24
+ --scb-gallery-grid-gap: var(--spacing-4, 12px);
25
+ --scb-gallery-grid-item-min: 180px;
26
+ --scb-gallery-grid-item-height: 220px;
27
+ --scb-gallery-grid-masonry-columns: 3;
28
+ --scb-gallery-overlay-max-width: 980px;
29
+ --scb-gallery-overlay-slide-height: min(68vh, 620px);
30
+ }
31
+
32
+ .gallery {
33
+ display: grid;
34
+ grid-template-columns: repeat(auto-fill, minmax(var(--scb-gallery-grid-item-min), 1fr));
35
+ gap: var(--scb-gallery-grid-gap);
36
+ align-items: start;
37
+ }
38
+
39
+ .gallery > slot {
40
+ display: contents;
41
+ }
42
+
43
+ .gallery ::slotted(*) {
44
+ box-sizing: border-box;
45
+ inline-size: 100%;
46
+ min-inline-size: 0;
47
+ block-size: var(--scb-gallery-grid-item-height);
48
+ overflow: hidden;
49
+ transition:
50
+ transform 160ms ease,
51
+ box-shadow 160ms ease;
52
+ will-change: transform;
53
+ }
54
+
55
+ .gallery ::slotted([data-scb-gallery-hover]) {
56
+ transform: translateY(-6px);
57
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
58
+ }
59
+
60
+ .gallery ::slotted([data-scb-gallery-clickable]) {
61
+ cursor: pointer;
62
+ }
63
+
64
+ .gallery ::slotted(img),
65
+ .gallery ::slotted(picture),
66
+ .gallery ::slotted(video) {
67
+ inline-size: 100%;
68
+ block-size: 100%;
69
+ object-fit: cover;
70
+ display: block;
71
+ border-radius: var(--md-sys-shape-corner-medium, 12px);
72
+ }
73
+
74
+ :host([variant='masonry']) .gallery {
75
+ display: block;
76
+ column-count: var(--scb-gallery-grid-masonry-columns);
77
+ column-gap: var(--scb-gallery-grid-gap);
78
+ }
79
+
80
+ :host([variant='masonry']) .gallery ::slotted(*) {
81
+ break-inside: avoid;
82
+ -webkit-column-break-inside: avoid;
83
+ margin-block-end: var(--scb-gallery-grid-gap);
84
+ block-size: auto;
85
+ }
86
+
87
+ :host([variant='masonry']) .gallery ::slotted(img),
88
+ :host([variant='masonry']) .gallery ::slotted(picture),
89
+ :host([variant='masonry']) .gallery ::slotted(video) {
90
+ block-size: auto;
91
+ }
92
+
93
+ @media (max-width: 960px) {
94
+ :host([variant='masonry']) .gallery {
95
+ column-count: 2;
96
+ }
97
+ }
98
+
99
+ @media (max-width: 640px) {
100
+ :host([variant='masonry']) .gallery {
101
+ column-count: 1;
102
+ }
103
+ }
104
+
105
+ .overlay-dialog {
106
+ position: relative;
107
+ inline-size: min(var(--scb-gallery-overlay-max-width), 100%);
108
+ max-block-size: 100%;
109
+ border-radius: var(--md-sys-shape-corner-extra-large, 28px);
110
+ background: var(--md-sys-color-surface-container-low, #1f1f1f);
111
+ padding: var(--spacing-4, 12px);
112
+ overflow: hidden;
113
+ }
114
+
115
+ .overlay-slide {
116
+ inline-size: 100%;
117
+ flex: 0 0 100%;
118
+ block-size: var(--scb-gallery-overlay-slide-height);
119
+ border-radius: var(--md-sys-shape-corner-large, 16px);
120
+ overflow: hidden;
121
+ box-shadow: inset 0 0 0 2px transparent;
122
+ transition: box-shadow 160ms ease;
123
+ }
124
+
125
+ .overlay-slide img {
126
+ inline-size: 100%;
127
+ block-size: 100%;
128
+ object-fit: contain;
129
+ display: block;
130
+ }
131
+ `;v([E({type:String,reflect:!0})],d.prototype,"variant",2);v([E({type:Boolean,reflect:!0,attribute:"enable-carousel"})],d.prototype,"enableClickCarousel",2);v([k()],d.prototype,"overlayOpen",2);v([k()],d.prototype,"overlayIndex",2);v([k()],d.prototype,"overlayImages",2);d=v([A("scb-gallery-grid")],d);
@@ -0,0 +1,42 @@
1
+ import{a as x,n as _,i as w,E as f,x as k,t as E}from"../../vendor/vendor.js";(function(){try{var e=typeof globalThis<"u"?globalThis:window;if(!e.__scb_ce_guard_installed__){e.__scb_ce_guard_installed__=!0;var t=customElements.define.bind(customElements);customElements.define=function(s,n,i){try{customElements.get(s)||t(s,n,i)}catch(r){var a=String(r||"");if(a.indexOf("already been used")===-1&&a.indexOf("NotSupportedError")===-1)throw r}}}}catch{}})();var C=Object.defineProperty,z=Object.getOwnPropertyDescriptor,y=e=>{throw TypeError(e)},b=(e,t,s,n)=>{for(var i=n>1?void 0:n?z(t,s):t,a=e.length-1,r;a>=0;a--)(r=e[a])&&(i=(n?r(t,s,i):r(i))||i);return n&&i&&C(t,s,i),i},m=(e,t,s)=>t.has(e)||y("Cannot "+s),d=(e,t,s)=>(m(e,t,"read from private field"),s?s.call(e):t.get(e)),p=(e,t,s)=>t.has(e)?y("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,s),v=(e,t,s)=>(m(e,t,"access private method"),s),o,u,g,h,c;let l=class extends w{constructor(){super(...arguments),p(this,o),this.open=!1,this.ariaLabel="",p(this,h,e=>{v(this,o,g).call(this,e)||v(this,o,u).call(this)}),p(this,c,e=>{this.open&&e.key==="Escape"&&v(this,o,u).call(this)})}render(){return this.open?k`
2
+ <div class="scrim" @click=${d(this,h)}>
3
+ <div class="content" role="dialog" aria-modal="true" aria-label="${this.ariaLabel||f}">
4
+ <slot></slot>
5
+ </div>
6
+ </div>
7
+ `:f}connectedCallback(){super.connectedCallback(),window.addEventListener("keydown",d(this,c))}disconnectedCallback(){window.removeEventListener("keydown",d(this,c)),super.disconnectedCallback()}};o=new WeakSet;u=function(){this.open&&(this.open=!1,this.dispatchEvent(new CustomEvent("scb-overlay-dismiss",{bubbles:!0,composed:!0})))};g=function(e){const t=this.renderRoot.querySelector("slot");if(!(t instanceof HTMLSlotElement))return!1;const s=e.composedPath();return t.assignedNodes({flatten:!0}).some(i=>s.includes(i))};h=new WeakMap;c=new WeakMap;l.styles=x`
8
+ :host {
9
+ position: fixed;
10
+ inset: 0;
11
+ z-index: var(--scb-overlay-z-index, 1000);
12
+ display: none;
13
+ box-sizing: border-box;
14
+ }
15
+
16
+ :host([open]) {
17
+ display: block;
18
+ }
19
+
20
+ .scrim {
21
+ display: grid;
22
+ place-items: center;
23
+ inline-size: 100%;
24
+ block-size: 100%;
25
+ padding: var(--scb-overlay-padding, var(--spacing-6, 24px));
26
+ background: var(--scb-overlay-backdrop, color-mix(in srgb, var(--md-sys-color-scrim) 32%, transparent));
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ .content {
31
+ position: relative;
32
+ max-inline-size: 100%;
33
+ max-block-size: 100%;
34
+ box-sizing: border-box;
35
+ }
36
+
37
+ .content ::slotted(*) {
38
+ margin: auto;
39
+ max-inline-size: 100%;
40
+ max-block-size: 100%;
41
+ }
42
+ `;b([_({type:Boolean,reflect:!0})],l.prototype,"open",2);b([_({type:String,attribute:"aria-label"})],l.prototype,"ariaLabel",2);l=b([E("scb-overlay")],l);
@@ -0,0 +1,30 @@
1
+ import{a as g,n as c,i as l,x as h,t as b}from"../../vendor/vendor.js";(function(){try{var t=typeof globalThis<"u"?globalThis:window;if(!t.__scb_ce_guard_installed__){t.__scb_ce_guard_installed__=!0;var e=customElements.define.bind(customElements);customElements.define=function(s,n,i){try{customElements.get(s)||e(s,n,i)}catch(o){var a=String(o||"");if(a.indexOf("already been used")===-1&&a.indexOf("NotSupportedError")===-1)throw o}}}}catch{}})();var v=Object.defineProperty,d=Object.getOwnPropertyDescriptor,p=(t,e,s,n)=>{for(var i=n>1?void 0:n?d(e,s):e,a=t.length-1,o;a>=0;a--)(o=t[a])&&(i=(n?o(e,s,i):o(i))||i);return n&&i&&v(e,s,i),i};let r=class extends l{constructor(){super(...arguments),this.label="",this.spacing=void 0,this.spacingTop=void 0,this.spacingBottom=void 0,this.spacingLeft=void 0,this.spacingRight=void 0}updated(t){super.updated(t),(t.has("spacing")||t.has("spacingTop")||t.has("spacingBottom")||t.has("spacingLeft")||t.has("spacingRight"))&&this.applySpacing()}mapSpacingToken(t){if(!t)return;const e=String(t).trim();if(e)return/^\d+$/.test(e)?`var(--spacing-${Math.max(0,Math.min(14,parseInt(e,10)))})`:e}applySpacing(){const t=this.mapSpacingToken(this.spacing),e=this.mapSpacingToken(this.spacingTop)??t,s=this.mapSpacingToken(this.spacingBottom)??t,n=this.mapSpacingToken(this.spacingLeft),i=this.mapSpacingToken(this.spacingRight);e?this.style.setProperty("--scb-vignette-spacing-block-start",e):this.style.removeProperty("--scb-vignette-spacing-block-start"),s?this.style.setProperty("--scb-vignette-spacing-block-end",s):this.style.removeProperty("--scb-vignette-spacing-block-end"),n?this.style.setProperty("--scb-vignette-spacing-inline-start",n):this.style.removeProperty("--scb-vignette-spacing-inline-start"),i?this.style.setProperty("--scb-vignette-spacing-inline-end",i):this.style.removeProperty("--scb-vignette-spacing-inline-end")}render(){return h`
2
+ <div class="vignette">
3
+ <p>${this.label}</p>
4
+ </div>
5
+ `}};r.styles=g`
6
+ :host {
7
+ display: block;
8
+ margin-block-start: var(--scb-vignette-spacing-block-start, 0);
9
+ margin-block-end: var(--scb-vignette-spacing-block-end, 0);
10
+ margin-inline-start: var(--scb-vignette-spacing-inline-start, 0);
11
+ margin-inline-end: var(--scb-vignette-spacing-inline-end, 0);
12
+ }
13
+
14
+ .vignette {
15
+ padding: 4px 8px;
16
+ border-radius: 8px;
17
+ border: 1px solid #484473;
18
+ width: fit-content;
19
+ color: #484473;
20
+ }
21
+
22
+ .vignette p {
23
+ font-size: 14px;
24
+ font-style: normal;
25
+ font-weight: 550;
26
+ line-height: 22px;
27
+ margin: 0;
28
+ color: var(--md-sys-color-on-surface);
29
+ }
30
+ `;p([c({type:String})],r.prototype,"label",2);p([c({type:String,reflect:!0})],r.prototype,"spacing",2);p([c({type:String,attribute:"spacing-top",reflect:!0})],r.prototype,"spacingTop",2);p([c({type:String,attribute:"spacing-bottom",reflect:!0})],r.prototype,"spacingBottom",2);p([c({type:String,attribute:"spacing-left",reflect:!0})],r.prototype,"spacingLeft",2);p([c({type:String,attribute:"spacing-right",reflect:!0})],r.prototype,"spacingRight",2);r=p([b("scb-vignette")],r);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scb-wc-test",
3
- "version": "0.1.350",
3
+ "version": "0.1.352",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "module": "index.js",
@@ -180,6 +180,10 @@
180
180
  "import": "./scb-footer/scb-footer-section.js",
181
181
  "require": "./scb-footer/scb-footer-section.js"
182
182
  },
183
+ "./scb-gallery-grid": {
184
+ "import": "./scb-gallery-grid/scb-gallery-grid.js",
185
+ "require": "./scb-gallery-grid/scb-gallery-grid.js"
186
+ },
183
187
  "./scb-grid": {
184
188
  "import": "./scb-grid/scb-grid.js",
185
189
  "require": "./scb-grid/scb-grid.js"
@@ -276,6 +280,10 @@
276
280
  "import": "./scb-options-menu/scb-options-sub-menu.js",
277
281
  "require": "./scb-options-menu/scb-options-sub-menu.js"
278
282
  },
283
+ "./scb-overlay": {
284
+ "import": "./scb-overlay/scb-overlay.js",
285
+ "require": "./scb-overlay/scb-overlay.js"
286
+ },
279
287
  "./scb-pagination": {
280
288
  "import": "./scb-pagination/scb-pagination.js",
281
289
  "require": "./scb-pagination/scb-pagination.js"
@@ -388,6 +396,10 @@
388
396
  "import": "./scb-tooltip/scb-tooltip.js",
389
397
  "require": "./scb-tooltip/scb-tooltip.js"
390
398
  },
399
+ "./scb-vignette": {
400
+ "import": "./scb-vignette/scb-vignette.js",
401
+ "require": "./scb-vignette/scb-vignette.js"
402
+ },
391
403
  "./scb-viz": {
392
404
  "import": "./scb-viz/scb-viz.js",
393
405
  "require": "./scb-viz/scb-viz.js"
@@ -414,5 +426,5 @@
414
426
  },
415
427
  "./mvc/*": "./mvc/*"
416
428
  },
417
- "buildHash": "05102215406A454D0DADF69752C8A9BEB1E891DB5FB7585282AA83071E8736B3"
429
+ "buildHash": "B73507616BFC413BD85E78BCEEAD144DF989B1B457AD9F6AD678E76661A0D5A1"
418
430
  }
@@ -0,0 +1,20 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class ScbGalleryGrid extends LitElement {
3
+ #private;
4
+ variant: 'default' | 'masonry';
5
+ enableClickCarousel: boolean;
6
+ private overlayOpen;
7
+ private overlayIndex;
8
+ private overlayImages;
9
+ static styles: import('lit').CSSResult;
10
+ connectedCallback(): void;
11
+ disconnectedCallback(): void;
12
+ protected firstUpdated(): void;
13
+ protected updated(changed: Map<string, unknown>): void;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ }
16
+ declare global {
17
+ interface HTMLElementTagNameMap {
18
+ 'scb-gallery-grid': ScbGalleryGrid;
19
+ }
20
+ }
@@ -0,0 +1,263 @@
1
+ import { css as S, LitElement as A, html as k } from "lit";
2
+ import { property as E, state as w, customElement as T } from "lit/decorators.js";
3
+ import "../scb-horizontal-scroller/scb-horizontal-scroller.js";
4
+ import "../scb-overlay/scb-overlay.js";
5
+ var W = Object.defineProperty, $ = Object.getOwnPropertyDescriptor, I = (e) => {
6
+ throw TypeError(e);
7
+ }, d = (e, t, a, r) => {
8
+ for (var s = r > 1 ? void 0 : r ? $(t, a) : t, h = e.length - 1, f; h >= 0; h--)
9
+ (f = e[h]) && (s = (r ? f(t, a, s) : f(s)) || s);
10
+ return r && s && W(t, a, s), s;
11
+ }, _ = (e, t, a) => t.has(e) || I("Cannot " + a), l = (e, t, a) => (_(e, t, "read from private field"), t.get(e)), n = (e, t, a) => t.has(e) ? I("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(e) : t.set(e, a), M = (e, t, a, r) => (_(e, t, "write to private field"), t.set(e, a), a), o = (e, t, a) => (_(e, t, "access private method"), a), g, y, x, u, m, b, i, C, z, p, L, O, v;
12
+ let c = class extends A {
13
+ constructor() {
14
+ super(...arguments), n(this, i), this.variant = "default", this.enableClickCarousel = !0, this.overlayOpen = !1, this.overlayIndex = 0, this.overlayImages = [], n(this, g, []), n(this, y, (e) => {
15
+ e.key === "Escape" && this.overlayOpen && l(this, v).call(this);
16
+ }), n(this, x, () => {
17
+ o(this, i, p).call(this);
18
+ }), n(this, u, (e) => {
19
+ if (!this.enableClickCarousel) return;
20
+ const t = e.currentTarget;
21
+ t instanceof HTMLElement && t.setAttribute("data-scb-gallery-hover", "");
22
+ }), n(this, m, (e) => {
23
+ if (!this.enableClickCarousel) return;
24
+ const t = e.currentTarget;
25
+ t instanceof HTMLElement && t.removeAttribute("data-scb-gallery-hover");
26
+ }), n(this, b, (e) => {
27
+ if (!this.enableClickCarousel) return;
28
+ const t = e.currentTarget;
29
+ if (!(t instanceof HTMLElement)) return;
30
+ const a = t.getAttribute("data-scb-gallery-slide-index");
31
+ if (a == null) return;
32
+ const r = Number(a);
33
+ Number.isFinite(r) && o(this, i, O).call(this, r);
34
+ }), n(this, v, () => {
35
+ this.overlayOpen = !1;
36
+ });
37
+ }
38
+ connectedCallback() {
39
+ super.connectedCallback(), window.addEventListener("keydown", l(this, y));
40
+ }
41
+ disconnectedCallback() {
42
+ window.removeEventListener("keydown", l(this, y)), o(this, i, C).call(this), super.disconnectedCallback();
43
+ }
44
+ firstUpdated() {
45
+ o(this, i, p).call(this);
46
+ }
47
+ updated(e) {
48
+ e.has("enableClickCarousel") && (this.enableClickCarousel || l(this, v).call(this), o(this, i, p).call(this));
49
+ }
50
+ render() {
51
+ return k`
52
+ <div class="gallery">
53
+ <slot @slotchange=${l(this, x)}></slot>
54
+ </div>
55
+ ${this.overlayOpen && this.enableClickCarousel ? k`
56
+ <scb-overlay open aria-label="Bildkarusell" @scb-overlay-dismiss=${l(this, v)}>
57
+ <div class="overlay-dialog">
58
+ <scb-horizontal-scroller show-scrollbar class="overlay-carousel" variant="standard" width="100%" content-flex internal-gap="0">
59
+ ${o(this, i, L).call(this).map(
60
+ (e, t) => k`
61
+ <div
62
+ class="overlay-slide ${t === 0 ? "is-active" : ""}"
63
+ data-overlay-slide-index="${t}"
64
+ >
65
+ <img src="${e.src}" alt="${e.alt}" />
66
+ </div>
67
+ `
68
+ )}
69
+ </scb-horizontal-scroller>
70
+ </div>
71
+ </scb-overlay>
72
+ ` : ""}
73
+ `;
74
+ }
75
+ };
76
+ g = /* @__PURE__ */ new WeakMap();
77
+ y = /* @__PURE__ */ new WeakMap();
78
+ x = /* @__PURE__ */ new WeakMap();
79
+ u = /* @__PURE__ */ new WeakMap();
80
+ m = /* @__PURE__ */ new WeakMap();
81
+ b = /* @__PURE__ */ new WeakMap();
82
+ i = /* @__PURE__ */ new WeakSet();
83
+ C = function() {
84
+ l(this, g).forEach((e) => {
85
+ e.removeEventListener("pointerenter", l(this, u)), e.removeEventListener("pointerleave", l(this, m)), e.removeEventListener("click", l(this, b)), e.removeAttribute("data-scb-gallery-hover"), e.removeAttribute("data-scb-gallery-clickable"), e.removeAttribute("data-scb-gallery-slide-index");
86
+ }), M(this, g, []);
87
+ };
88
+ z = function(e) {
89
+ if (e instanceof HTMLImageElement) {
90
+ const t = e.currentSrc || e.src;
91
+ return t ? { src: t, alt: e.alt || "Galleri-bild" } : null;
92
+ }
93
+ return null;
94
+ };
95
+ p = function() {
96
+ o(this, i, C).call(this);
97
+ const e = this.renderRoot.querySelector("slot");
98
+ if (!(e instanceof HTMLSlotElement)) {
99
+ this.overlayImages = [];
100
+ return;
101
+ }
102
+ const t = e.assignedElements({ flatten: !0 }).filter(
103
+ (r) => r instanceof HTMLElement
104
+ );
105
+ M(this, g, t);
106
+ const a = [];
107
+ t.forEach((r) => {
108
+ if (!this.enableClickCarousel)
109
+ return;
110
+ const s = o(this, i, z).call(this, r);
111
+ if (!s)
112
+ return;
113
+ r.addEventListener("pointerenter", l(this, u)), r.addEventListener("pointerleave", l(this, m));
114
+ const h = a.length;
115
+ a.push(s), r.setAttribute("data-scb-gallery-clickable", ""), r.setAttribute("data-scb-gallery-slide-index", String(h)), r.addEventListener("click", l(this, b));
116
+ }), this.overlayImages = a;
117
+ };
118
+ L = function() {
119
+ if (this.overlayImages.length === 0) return [];
120
+ const e = Math.max(0, Math.min(this.overlayIndex, this.overlayImages.length - 1));
121
+ return [
122
+ ...this.overlayImages.slice(e),
123
+ ...this.overlayImages.slice(0, e)
124
+ ];
125
+ };
126
+ O = function(e) {
127
+ if (!this.enableClickCarousel || this.overlayImages.length === 0) return;
128
+ const t = Math.max(0, Math.min(e, this.overlayImages.length - 1));
129
+ this.overlayIndex = t, this.overlayOpen = !0;
130
+ };
131
+ v = /* @__PURE__ */ new WeakMap();
132
+ c.styles = S`
133
+ :host {
134
+ display: block;
135
+ --scb-gallery-grid-gap: var(--spacing-4, 12px);
136
+ --scb-gallery-grid-item-min: 180px;
137
+ --scb-gallery-grid-item-height: 220px;
138
+ --scb-gallery-grid-masonry-columns: 3;
139
+ --scb-gallery-overlay-max-width: 980px;
140
+ --scb-gallery-overlay-slide-height: min(68vh, 620px);
141
+ }
142
+
143
+ .gallery {
144
+ display: grid;
145
+ grid-template-columns: repeat(auto-fill, minmax(var(--scb-gallery-grid-item-min), 1fr));
146
+ gap: var(--scb-gallery-grid-gap);
147
+ align-items: start;
148
+ }
149
+
150
+ .gallery > slot {
151
+ display: contents;
152
+ }
153
+
154
+ .gallery ::slotted(*) {
155
+ box-sizing: border-box;
156
+ inline-size: 100%;
157
+ min-inline-size: 0;
158
+ block-size: var(--scb-gallery-grid-item-height);
159
+ overflow: hidden;
160
+ transition:
161
+ transform 160ms ease,
162
+ box-shadow 160ms ease;
163
+ will-change: transform;
164
+ }
165
+
166
+ .gallery ::slotted([data-scb-gallery-hover]) {
167
+ transform: translateY(-6px);
168
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
169
+ }
170
+
171
+ .gallery ::slotted([data-scb-gallery-clickable]) {
172
+ cursor: pointer;
173
+ }
174
+
175
+ .gallery ::slotted(img),
176
+ .gallery ::slotted(picture),
177
+ .gallery ::slotted(video) {
178
+ inline-size: 100%;
179
+ block-size: 100%;
180
+ object-fit: cover;
181
+ display: block;
182
+ border-radius: var(--md-sys-shape-corner-medium, 12px);
183
+ }
184
+
185
+ :host([variant='masonry']) .gallery {
186
+ display: block;
187
+ column-count: var(--scb-gallery-grid-masonry-columns);
188
+ column-gap: var(--scb-gallery-grid-gap);
189
+ }
190
+
191
+ :host([variant='masonry']) .gallery ::slotted(*) {
192
+ break-inside: avoid;
193
+ -webkit-column-break-inside: avoid;
194
+ margin-block-end: var(--scb-gallery-grid-gap);
195
+ block-size: auto;
196
+ }
197
+
198
+ :host([variant='masonry']) .gallery ::slotted(img),
199
+ :host([variant='masonry']) .gallery ::slotted(picture),
200
+ :host([variant='masonry']) .gallery ::slotted(video) {
201
+ block-size: auto;
202
+ }
203
+
204
+ @media (max-width: 960px) {
205
+ :host([variant='masonry']) .gallery {
206
+ column-count: 2;
207
+ }
208
+ }
209
+
210
+ @media (max-width: 640px) {
211
+ :host([variant='masonry']) .gallery {
212
+ column-count: 1;
213
+ }
214
+ }
215
+
216
+ .overlay-dialog {
217
+ position: relative;
218
+ inline-size: min(var(--scb-gallery-overlay-max-width), 100%);
219
+ max-block-size: 100%;
220
+ border-radius: var(--md-sys-shape-corner-extra-large, 28px);
221
+ background: var(--md-sys-color-surface-container-low, #1f1f1f);
222
+ padding: var(--spacing-4, 12px);
223
+ overflow: hidden;
224
+ }
225
+
226
+ .overlay-slide {
227
+ inline-size: 100%;
228
+ flex: 0 0 100%;
229
+ block-size: var(--scb-gallery-overlay-slide-height);
230
+ border-radius: var(--md-sys-shape-corner-large, 16px);
231
+ overflow: hidden;
232
+ box-shadow: inset 0 0 0 2px transparent;
233
+ transition: box-shadow 160ms ease;
234
+ }
235
+
236
+ .overlay-slide img {
237
+ inline-size: 100%;
238
+ block-size: 100%;
239
+ object-fit: contain;
240
+ display: block;
241
+ }
242
+ `;
243
+ d([
244
+ E({ type: String, reflect: !0 })
245
+ ], c.prototype, "variant", 2);
246
+ d([
247
+ E({ type: Boolean, reflect: !0, attribute: "enable-carousel" })
248
+ ], c.prototype, "enableClickCarousel", 2);
249
+ d([
250
+ w()
251
+ ], c.prototype, "overlayOpen", 2);
252
+ d([
253
+ w()
254
+ ], c.prototype, "overlayIndex", 2);
255
+ d([
256
+ w()
257
+ ], c.prototype, "overlayImages", 2);
258
+ c = d([
259
+ T("scb-gallery-grid")
260
+ ], c);
261
+ export {
262
+ c as ScbGalleryGrid
263
+ };