@gsretail.com/gui-core
Version:
A skeleton to create your own React component library using Rollup, TypeScript, Sass and Storybook
2 lines (1 loc) • 2.09 kB
JavaScript
import t from"../../core/change-details.js";import{isString as s}from"../../core/utils.js";import n from"../../core/continuous-tail-details.js";import e from"../../core/holder.js";class i{constructor(t,s){void 0===t&&(t=[]),void 0===s&&(s=0),this.chunks=t,this.from=s}toString(){return this.chunks.map(String).join("")}extend(t){if(!String(t))return;t=s(t)?new n(String(t)):t;const e=this.chunks[this.chunks.length-1],o=e&&(e.stop===t.stop||null==t.stop)&&t.from===e.from+e.toString().length;if(t instanceof n)o?e.extend(t.toString()):this.chunks.push(t);else if(t instanceof i){if(null==t.stop){let s;for(;t.chunks.length&&null==t.chunks[0].stop;)s=t.chunks.shift(),s.from+=t.from,this.extend(s)}t.toString()&&(t.stop=t.blockIndex,this.chunks.push(t))}}appendTo(s){if(!(s instanceof e.MaskedPattern)){return new n(this.toString()).appendTo(s)}const o=new t;for(let t=0;t<this.chunks.length&&!o.skip;++t){const n=this.chunks[t],e=s._mapPosToBlock(s.displayValue.length),r=n.stop;let h;if(null!=r&&(!e||e.index<=r)){if(n instanceof i||s._stops.indexOf(r)>=0){const t=s._appendPlaceholder(r);o.aggregate(t)}h=n instanceof i&&s._blocks[r]}if(h){const t=h.appendTail(n);t.skip=!1,o.aggregate(t),s._value+=t.inserted;const e=n.toString().slice(t.rawInserted.length);e&&o.aggregate(s.append(e,{tail:!0}))}else o.aggregate(s.append(n.toString(),{tail:!0}))}return o}get state(){return{chunks:this.chunks.map((t=>t.state)),from:this.from,stop:this.stop,blockIndex:this.blockIndex}}set state(t){const{chunks:s,...e}=t;Object.assign(this,e),this.chunks=s.map((t=>{const s="chunks"in t?new i:new n;return s.state=t,s}))}unshift(t){if(!this.chunks.length||null!=t&&this.from>=t)return"";const s=null!=t?t-this.from:t;let n=0;for(;n<this.chunks.length;){const t=this.chunks[n],e=t.unshift(s);if(t.toString()){if(!e)break;++n}else this.chunks.splice(n,1);if(e)return e}return""}shift(){if(!this.chunks.length)return"";let t=this.chunks.length-1;for(;0<=t;){const s=this.chunks[t],n=s.shift();if(s.toString()){if(!n)break;--t}else this.chunks.splice(t,1);if(n)return n}return""}}export{i as default};