Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@appnest/masonry-layout

Package Overview
Dependencies
Maintainers
2
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@appnest/masonry-layout - npm Package Compare versions

Comparing version 2.0.6 to 2.0.7

2

masonry-layout.d.ts

@@ -38,3 +38,3 @@ declare type ResizeObserverEntries = {

*/
set cols(v: string | number);
set cols(v: number | "auto");
get cols(): number | "auto";

@@ -41,0 +41,0 @@ /**

{
"name": "@appnest/masonry-layout",
"version": "2.0.6",
"version": "2.0.7",
"license": "MIT",

@@ -50,4 +50,4 @@ "module": "index.js",

"@appnest/readme": "^1.2.5",
"@appnest/web-config": "0.4.34"
"@appnest/web-config": "0.4.39"
}
}

@@ -1,2 +0,2 @@

declare type ResizeObserverEntries = {
type ResizeObserverEntries = {
contentRect: {

@@ -7,3 +7,18 @@ width: number;

}[];
declare global {
interface Window {
ShadyCSS?: any;
ShadyDOM?: any;
}
} /**
* Template for the masonry layout.
* Max width of each column is computed as the width in percentage of
* the column minus the total with of the gaps divided between each column.
*/
/**
* Template for the masonry layout.
* Max width of each column is computed as the width in percentage of
* the column minus the total with of the gaps divided between each column.
*/
/**
* Masonry layout web component. It places the slotted elements in the optimal position based

@@ -17,2 +32,4 @@ * on the available vertical space, just like mason fitting stones in a wall.

declare class MasonryLayout extends HTMLElement {
// The observed attributes.
// Whenever one of these changes we need to update the layout.
static get observedAttributes(): string[];

@@ -31,3 +48,3 @@ /**

*/
set cols(v: string | number);
set cols(v: number | "auto");
get cols(): number | "auto";

@@ -52,5 +69,9 @@ /**

private get $columns();
// Unique debounce ID so different masonry layouts on one page won't affect eachother
private debounceId;
// Reference to the default slot element
private $unsetElementsSlot;
// Resize observer that layouts when necessary
private ro;
// The current request animation frame callback
private currentRequestAnimationFrameCallback;

@@ -98,2 +119,7 @@ /**

}
declare global {
interface HTMLElementTagNameMap {
"masonry-layout": MasonryLayout;
}
}
export { MasonryLayout };

@@ -1,1 +0,1 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self)["masonry-layout"]={})}(this,(function(t){"use strict";const e=500,n="auto",o=300,s=24,i="--_masonry-layout-col-count",l="--_masonry-layout-gap",r=1,a=new Map;function h(t,e,n){const o=parseFloat(t.getAttribute(e)||"");return isNaN(o)?n:o}function c(t,e,n){return isNaN(e)?Math.max(1,Math.ceil(t/n)):e}function d(t){let e=0,n=1/0;return t.forEach((t,o)=>{t<n&&(n=t,e=o)}),e}const u=document.createElement("template");u.innerHTML=`\n <style>\n :host {\n display: flex;\n align-items: flex-start;\n justify-content: stretch;\n }\n\n .column {\n\t max-width: calc((100% / var(${i}, 1) - ((var(${l}, ${s}px) * (var(${i}, 1) - 1) / var(${i}, 1)))));\n\t width: 100%;\n flex: 1;\n display: flex;\n flex-direction: column;\n }\n\n .column:not(:last-child) {\n margin-right: var(${l}, ${s}px);\n }\n\n .column ::slotted(*) {\n margin-bottom: var(${l}, ${s}px);\n box-sizing: border-box;\n width: 100%;\n }\n\n /* Hide the items that has not yet found the correct slot */\n #unset-items {\n opacity: 0;\n position: absolute;\n pointer-events: none;\n }\n </style>\n <div id="unset-items">\n <slot></slot>\n </div>\n`,window.ShadyCSS&&window.ShadyCSS.prepareTemplateStyles(u,"masonry-layout");class m extends HTMLElement{constructor(){super(),this.debounceId=`layout_${Math.random()}`,this.ro=void 0,this.currentRequestAnimationFrameCallback=void 0,this.attachShadow({mode:"open"}).appendChild(u.content.cloneNode(!0)),this.onSlotChange=this.onSlotChange.bind(this),this.onResize=this.onResize.bind(this),this.layout=this.layout.bind(this),this.$unsetElementsSlot=this.shadowRoot.querySelector("#unset-items > slot")}static get observedAttributes(){return["maxcolwidth","gap","cols"]}set maxColWidth(t){this.setAttribute("maxcolwidth",t.toString())}get maxColWidth(){return h(this,"maxcolwidth",e)}set cols(t){this.setAttribute("cols",t.toString())}get cols(){return h(this,"cols",n)}set gap(t){this.setAttribute("gap",t.toString())}get gap(){return h(this,"gap",s)}set debounce(t){this.setAttribute("debounce",t.toString())}get debounce(){return h(this,"debounce",o)}get $columns(){return Array.from(this.shadowRoot.querySelectorAll(".column"))}connectedCallback(){this.$unsetElementsSlot.addEventListener("slotchange",this.onSlotChange),"ResizeObserver"in window?(this.ro=new ResizeObserver(this.onResize),this.ro.observe(this)):window.addEventListener("resize",this.onResize)}disconnectedCallback(){this.$unsetElementsSlot.removeEventListener("slotchange",this.onSlotChange),window.removeEventListener("resize",this.onResize),null!=this.ro&&this.ro.unobserve(this)}attributeChangedCallback(t){switch(t){case"gap":this.style.setProperty(l,`${this.gap}px`)}this.scheduleLayout()}onSlotChange(){(this.$unsetElementsSlot.assignedNodes()||[]).filter(t=>t.nodeType===r).length>0&&this.layout()}onResize(t){const{width:e}=null!=t&&Array.isArray(t)&&t.length>0?t[0].contentRect:{width:this.offsetWidth};c(e,this.cols,this.maxColWidth)!==this.$columns.length&&this.scheduleLayout()}renderCols(t){const e=this.$columns;if(e.length!==t){for(const t of e)t.parentNode&&t.parentNode.removeChild(t);for(let e=0;e<t;e++){const t=document.createElement("div");t.classList.add("column"),t.setAttribute("part",`column column-${e}`);const n=document.createElement("slot");n.setAttribute("name",e.toString()),t.appendChild(n),this.shadowRoot.appendChild(t)}this.style.setProperty(i,t.toString()),window.ShadyCSS&&window.ShadyCSS.styleElement(this)}}scheduleLayout(t=this.debounce){!function(t,e,n){const o=a.get(n);null!=o&&window.clearTimeout(o),a.set(n,window.setTimeout(t,e))}(this.layout,t,this.debounceId)}layout(){null!=this.currentRequestAnimationFrameCallback&&window.cancelAnimationFrame(this.currentRequestAnimationFrameCallback),this.currentRequestAnimationFrameCallback=requestAnimationFrame(()=>{const t=this.gap,e=Array.from(this.children).filter(t=>t.nodeType===r),n=c(this.offsetWidth,this.cols,this.maxColWidth),o=Array(n).fill(0),s=[];for(const n of e){const e=n.getBoundingClientRect().height;let i=d(o);o[i]+=e+t;const l=i.toString();n.slot!==l&&s.push(()=>n.slot=l)}for(const t of s)t();this.renderCols(n),window.ShadyCSS&&window.ShadyCSS.styleElement(this)})}}customElements.define("masonry-layout",m),t.MasonryLayout=m,Object.defineProperty(t,"__esModule",{value:!0})}));
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self)["masonry-layout"]={})}(this,(function(t){"use strict";const e=new Map;function n(t,e,n){const o=parseFloat(t.getAttribute(e)||"");return isNaN(o)?n:o}function o(t,e,n){return isNaN(e)?Math.max(1,Math.ceil(t/n)):e}function s(t){let e=0,n=1/0;return t.forEach((t,o)=>{t<n&&(n=t,e=o)}),e}const i=document.createElement("template");i.innerHTML='\n <style>\n :host {\n display: flex;\n align-items: flex-start;\n justify-content: stretch;\n }\n\n .column {\n\t max-width: calc((100% / var(--_masonry-layout-col-count, 1) - ((var(--_masonry-layout-gap, 24px) * (var(--_masonry-layout-col-count, 1) - 1) / var(--_masonry-layout-col-count, 1)))));\n\t width: 100%;\n flex: 1;\n display: flex;\n flex-direction: column;\n }\n\n .column:not(:last-child) {\n margin-right: var(--_masonry-layout-gap, 24px);\n }\n\n .column ::slotted(*) {\n margin-bottom: var(--_masonry-layout-gap, 24px);\n box-sizing: border-box;\n width: 100%;\n }\n\n /* Hide the items that has not yet found the correct slot */\n #unset-items {\n opacity: 0;\n position: absolute;\n pointer-events: none;\n }\n </style>\n <div id="unset-items">\n <slot></slot>\n </div>\n',window.ShadyCSS&&window.ShadyCSS.prepareTemplateStyles(i,"masonry-layout");class a extends HTMLElement{constructor(){super(),this.debounceId=`layout_${Math.random()}`,this.ro=void 0,this.currentRequestAnimationFrameCallback=void 0,this.attachShadow({mode:"open"}).appendChild(i.content.cloneNode(!0)),this.onSlotChange=this.onSlotChange.bind(this),this.onResize=this.onResize.bind(this),this.layout=this.layout.bind(this),this.$unsetElementsSlot=this.shadowRoot.querySelector("#unset-items > slot")}static get observedAttributes(){return["maxcolwidth","gap","cols"]}set maxColWidth(t){this.setAttribute("maxcolwidth",t.toString())}get maxColWidth(){return n(this,"maxcolwidth",500)}set cols(t){this.setAttribute("cols",t.toString())}get cols(){return n(this,"cols","auto")}set gap(t){this.setAttribute("gap",t.toString())}get gap(){return n(this,"gap",24)}set debounce(t){this.setAttribute("debounce",t.toString())}get debounce(){return n(this,"debounce",300)}get $columns(){return Array.from(this.shadowRoot.querySelectorAll(".column"))}connectedCallback(){this.$unsetElementsSlot.addEventListener("slotchange",this.onSlotChange),"ResizeObserver"in window?(this.ro=new ResizeObserver(this.onResize),this.ro.observe(this)):window.addEventListener("resize",this.onResize)}disconnectedCallback(){this.$unsetElementsSlot.removeEventListener("slotchange",this.onSlotChange),window.removeEventListener("resize",this.onResize),null!=this.ro&&this.ro.unobserve(this)}attributeChangedCallback(t){switch(t){case"gap":this.style.setProperty("--_masonry-layout-gap",`${this.gap}px`)}this.scheduleLayout()}onSlotChange(){(this.$unsetElementsSlot.assignedNodes()||[]).filter(t=>1===t.nodeType).length>0&&this.layout()}onResize(t){const{width:e}=null!=t&&Array.isArray(t)&&t.length>0?t[0].contentRect:{width:this.offsetWidth};o(e,this.cols,this.maxColWidth)!==this.$columns.length&&this.scheduleLayout()}renderCols(t){const e=this.$columns;if(e.length!==t){for(const t of e)t.parentNode&&t.parentNode.removeChild(t);for(let e=0;e<t;e++){const t=document.createElement("div");t.classList.add("column"),t.setAttribute("part",`column column-${e}`);const n=document.createElement("slot");n.setAttribute("name",e.toString()),t.appendChild(n),this.shadowRoot.appendChild(t)}this.style.setProperty("--_masonry-layout-col-count",t.toString()),window.ShadyCSS&&window.ShadyCSS.styleElement(this)}}scheduleLayout(t=this.debounce){!function(t,n,o){const s=e.get(o);null!=s&&window.clearTimeout(s),e.set(o,window.setTimeout(t,n))}(this.layout,t,this.debounceId)}layout(){null!=this.currentRequestAnimationFrameCallback&&window.cancelAnimationFrame(this.currentRequestAnimationFrameCallback),this.currentRequestAnimationFrameCallback=requestAnimationFrame(()=>{const t=this.gap,e=Array.from(this.children).filter(t=>1===t.nodeType),n=o(this.offsetWidth,this.cols,this.maxColWidth),i=Array(n).fill(0),a=[];for(const n of e){const e=n.getBoundingClientRect().height;let o=s(i);i[o]+=e+t;const l=o.toString();n.slot!==l&&a.push(()=>n.slot=l)}for(const t of a)t();this.renderCols(n),window.ShadyCSS&&window.ShadyCSS.styleElement(this)})}}customElements.define("masonry-layout",a),t.MasonryLayout=a,Object.defineProperty(t,"__esModule",{value:!0})}));

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc