@base-framework/organisms
Version:
This will add default organisms to the base framework.
3 lines (2 loc) • 8.74 kB
JavaScript
import{Div as R}from"@base-framework/atoms";import{Data as N,Jot as V}from"@base-framework/base";import{Builder as C,Html as A}from"@base-framework/base";var l=class{static first(t){return this.get(t,0)}static last(t){let s=t.childNodes.length-1;return this.get(t,s)}static get(t,s){return t?.childNodes[s]??null}static next(t){return t?.nextSibling??null}static previous(t){return t?.previousSibling??null}static index(t){if(!t||!t.parentNode)return-1;let s=t.parentNode.children;return Array.from(s).indexOf(t)}static getPreviousIndex(t){let s=this.index(t);return s>0?s-1:0}static replace(t,s,r){if(!s)return;A.removeElementData(s);let i=C.build(t,null,r);s.replaceWith(i)}static remove(t){t&&A.removeChild(t)}static append(t,s,r){t&&C.build(t,s,r)}static prepend(t,s,r){if(!t)return;let i=C.build(t,null,r);s.insertBefore(i,s.firstChild)}};var b=(e,t,s)=>({index:e,item:t,status:s}),g=class{static diff(t,s,r){let i=this.arrayToMap(t,r),a=[],n=[];return s.forEach((o,h)=>{let d=o[r];if(!i.has(d)){a.push(b(h,o,"added"));return}let{item:L}=i.get(d);if(!this.deepEqual(L,o)){a.push(b(h,o,"updated"));return}a.push(b(h,o,"unchanged")),i.delete(d)}),i.forEach(({item:o})=>{n.push(o)}),{changes:a,deletedItems:n}}static arrayToMap(t,s){let r=new Map;return t.forEach((i,a)=>{r.set(i[s],{item:i,index:a})}),r}static deepEqual(t,s){if(t===s)return!0;if(typeof t!="object"||t===null||typeof s!="object"||s===null)return!1;let r=Object.keys(t),i=Object.keys(s);if(r.length!==i.length)return!1;for(let a of r)if(!i.includes(a)||!this.deepEqual(t[a],s[a]))return!1;return!0}};var w=class{constructor({layout:t,itemProperty:s,customCompare:r}){this.layout=t,this.itemProperty=s,this.customCompare=r,this.lastAppend=null,this.lastPrepend=null}reset(){this.lastAppend=null,this.lastPrepend=null}setFirstValues(t){let s=this.lastAppend;return s||(this.lastAppend=t),!s}append(t,s){let r=this.getValue(t);this.setFirstValues(r)&&this.addDivider(r,s),this.compare(this.lastAppend,r)&&(this.addDivider(r,s),this.lastAppend=r)}getValue(t){return t[this.itemProperty]??null}prepend(t,s){let r=this.getValue(t);this.setFirstValues(r)&&this.addDivider(r,s),this.compare(this.lastPrepend,r)&&(this.addDivider(this.lastPrepend,s),this.lastPrepend=r)}compare(t,s){return this.customCompare?this.customCompare(t,s):t!==s}addDivider(t,s){if(!this.layout||!s)return;let r=this.layout(t);s.push(r)}};var x=e=>JSON.parse(JSON.stringify(e)),f=V({onCreated(){this.divider&&(this.rowDivider=new w({...this.divider}))},setData(){let e=this.items?x(this.items):[];return new N({items:e})},render(){let e=this.row.bind(this);return R({class:`list ${this.class||""}`,for:["items",e]})},row(e,t,s,r){return typeof this.rowItem!="function"?null:(this.rowDivider&&r&&this.rowDivider.append(e,r),this.rowItem(e))},delete(e){let t=this.findIndexByKey(e);if(t===-1)return;this.data.delete(`items[${t}]`);let s=l.get(this.panel,t);l.remove(s)},replace(e){if(e.status==="unchanged")return;let t=e.item;if(e.status==="added"){this.append(t);return}let s=t[this.key],r=this.findIndexByKey(s);if(r===-1)return;this.data.set(`items[${r}]`,t);let i=l.get(this.panel,r),a=this.row(t,r);l.replace(a,i,this)},remove(e){e.forEach(t=>{this.delete(t[this.key])})},setRows(e){this.data.set("items",e)},getRows(){return this.data.get("items")},reset(){this.data.set("items",[]),this.rowDivider&&this.rowDivider.reset()},append(e){Array.isArray(e)||(e=[e]),e=x(e);let t=[],s=this.data.items.length-1;e.forEach(r=>{this.rowDivider&&this.rowDivider.append(r,t),t.push(this.row(r)),this.data.set(`items[${++s}]`,r)}),l.append(t,this.panel,this)},mingle(e,t=!1){e=x(e);let s=this.data.get("items"),r=g.diff(s,e,this.key);t&&r.deletedItems.length>0&&this.remove(r.deletedItems),r.changes.forEach(i=>{this.replace(i)})},prepend(e){Array.isArray(e)||(e=[e]),e=x(e);let t=[],s=e.reverse();s.forEach(i=>{this.rowDivider&&this.rowDivider.prepend(i,t),t.push(this.row(i))});let r=s.concat(this.data.get("items"));this.data.attributes.items=r,this.data.stage.items=r,l.prepend(t,this.panel,this)},findIndexByKey(e){return this.data.items.findIndex(s=>s[this.key]===e)}});import{Atom as _}from"@base-framework/base";import{Div as W}from"@base-framework/atoms";import{Atom as q}from"@base-framework/base";var c=class{constructor(t=0,s=20){this.currentOffset=t,this.limit=s,this.hasMoreData=!0,this.loading=!1}canLoadMore(){return this.hasMoreData}update(t){t<this.limit&&(this.hasMoreData=!1),this.currentOffset+=t}reset(){this.currentOffset=0,this.hasMoreData=!0,this.loading=!1}};var $=50;function E(e){let t=e===window?window.pageYOffset:e.scrollTop,s=e===window?window.innerHeight:e.clientHeight,r=e===window?document.documentElement.scrollHeight:e.scrollHeight;return{scrollTop:t,clientHeight:s,scrollHeight:r}}function F(e,t=$){return e.scrollTop+e.clientHeight>=e.scrollHeight-t}var I=(e,t)=>F(e)&&t.canLoadMore(),S=(e,t,s)=>{e&&e.length>0?(s.append(e),t.update(e.length)):t.hasMoreData=!1},y=e=>(t,s,r)=>{let i=a=>{let n=[];a&&(n=a.rows||a.items||[]),r(n)};e.xhr.all("",i,t,s)};var v=(e,t,s)=>{t.reset(),e(t.currentOffset,t.limit,r=>{s.reset(),S(r,t,s)})},M=(e,t,s)=>(r,{list:i})=>{let a=E(e);if(I(a,t)){if(t.loading)return;t.loading=!0,s(t.currentOffset,t.limit,n=>{S(n,t,i),t.loading=!1})}},H=(e,t,s)=>(r,i)=>{let a=E(e);if(I(a,t)){if(t.loading)return;t.loading=!0,s(t.currentOffset,t.limit,n=>{S(n,t,i),t.loading=!1})}};var J=(e,t,s)=>()=>{v(e,t,s)},K=(e,t,s)=>{s.list.refresh=J(e,t,s.list)},U=q((e,t)=>{let s=new c(e.offset,e.limit),r=e.scrollContainer||window,i=e.loadMoreItems||y(e.data),a=M(r,s,i);return W({class:e.containerClass??"",onCreated(n,o){K(i,s,o),a(null,o)},addEvent:["scroll",r,a,{passive:!0}]},t)}),B=U;var Y=_(e=>B({scrollContainer:e.scrollContainer,loadMoreItems:e.loadMoreItems,offset:e.offset,limit:e.limit,containerClass:e.containerClass??"",data:e.data},[new f({cache:e.cache??"list",key:e.key,items:e.items||[],divider:e.divider,role:"list",class:e.class,rowItem:e.rowItem})]));import{A as z}from"@base-framework/atoms";import{Component as G,router as Q}from"@base-framework/base";var O=(e,t)=>({attr:e,value:t}),X=(e,t)=>new RegExp("^"+e+"($|#|/|\\.).*").test(t),T=class extends G{beforeSetup(){this.selectedClass=this.activeClass||"active"}render(){let t=this.href,s=this.text,r=this.setupWatchers(t,s);return z({cache:"link",class:this.class||this.className||null,onState:["selected",{[this.selectedClass]:!0}],href:this.getString(t),text:this.getString(s),nest:this.nest||this.children,watch:r})}getLinkPath(){return this?.link?.pathname||null}getString(t){let s=typeof t;return s!=="object"&&s!=="undefined"?t:null}setupWatchers(t,s){let r=this.exact!==!1,i=Q.data,a=[];return t&&typeof t=="object"&&a.push(O("href",t)),s&&typeof s=="object"&&a.push(O("text",s)),a.push({value:["[[path]]",i],callBack:(n,o)=>{let h=o.pathname+o.hash,d=r?n===h:X(o.pathname,n);this.update(d)}}),a}setupStates(){return{selected:!1}}update(t){this.state.selected=t}};import{Tbody as j}from"@base-framework/atoms";import{Tbody as Z}from"@base-framework/atoms";var u=class extends f{render(){let t=this.row.bind(this);return Z({class:`tbody ${this.class||""}`,for:["items",t]})}};var D=class extends u{declareProps(){this.tracker=null,this.scrollContainer=null,this.fetchCallback=null}setupPageTracker(){return this.tracker=new c(this.offset,this.limit)}setupScrollHandler(t){let s=this.setupPageTracker();return this.fetchCallback=this.loadMoreItems||y(this.tableData),H(t,s,this.fetchCallback)}refresh(){v(this.fetchCallback,this.tracker,this)}render(){let t=this.row.bind(this),s=this.scrollContainer||window,r=this.setupScrollHandler(s);return j({class:`tbody ${this.class||""}`,onCreated(i,a){r(null,a)},addEvent:["scroll",s,r,{passive:!0}],for:["items",t]})}};import{Span as tt}from"@base-framework/atoms";import{Component as et,SimpleData as st}from"@base-framework/base";var p=class{constructor(t,s){this.timer=null,this.callBack=s,this.duration=t||1e3}createTimer(t){this.timer=window.setTimeout(t,this.duration)}start(){this.stop();let t=this.returnCallBack.bind(this);this.createTimer(t)}stop(){window.clearTimeout(this.timer)}returnCallBack(){let t=this.callBack;typeof t=="function"&&t.call()}};var m=class extends p{createTimer(t){this.timer=window.setInterval(t,this.duration)}stop(){window.clearInterval(this.timer)}};var P=new st({date:0}),rt=6e4,it=new m(rt,()=>{P.increment("date")});it.start();var k=class extends et{setData(){return P}render(){return tt({class:this.class,text:this.getTime(),onSet:["date",()=>this.getTime()]})}getTime(){let t=this.dateTime;return this.filter?this.filter(t):t}};export{k as DynamicTime,m as IntervalTimer,f as List,T as NavLink,Y as ScrollableList,D as ScrollableTableBody,u as TableBody,p as Timer};
//# sourceMappingURL=organisms.js.map