UNPKG

@byloth/vuert

Version:

The headless alerts, modals, notifications & popups library for Vue.js craftsmen. ℹ

2 lines 5.65 kB
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("vue"),t=require("@byloth/core");var n={$vuert:Symbol(`[vuert]: vuert`)},r=class extends t.RuntimeException{alert;constructor(e,t,n,r=`AlertThrottledException`){t===void 0&&(t=`The alert has been throttled to prevent spamming the user with too many alerts.`),super(t,n,r),this.alert=e}},i=class e{static VERSION=`1.4.5`;static get DEFAULT_OPTS(){return{useThrottling:!0,throttlingDuration:100,transitionDuration:200}}_subscribers;_throttlers;_options;get options(){return{...this._options}}_throttle;constructor(t){this._subscribers=[],this._throttlers=new Map,this._options={...e.DEFAULT_OPTS,...t},this._options.useThrottling?this._throttle=e=>{if(!e.id)return!1;let t=Date.now();return t-(this._throttlers.get(e.id)??0)>this._options.throttlingDuration?(this._throttlers.set(e.id,t),!1):!0}:this._throttle=()=>!1}emit(e){if(this._throttle(e))throw new r(e);let n=this._subscribers.slice().map(t=>t(e)).filter(e=>!!e);if(!n.length)throw new t.RuntimeException(`Unable to handle the emitted alert properly. There wasn't found any supported subscribers.`);if(n.length>1)throw new t.RuntimeException(`Unable to handle the emitted alert properly. There were found too many supported subscribers.`);return n[0]}subscribe(e){return this._subscribers.push(e),()=>{let t=this._subscribers.indexOf(e);return this._subscribers.splice(t,1)[0]}}},a=void 0,o=e=>{a=e},s=()=>(0,e.getCurrentScope)()?(0,e.inject)(n.$vuert):a,c=t=>(0,e.markRaw)({install:({config:e,provide:r})=>{let a=new i(t);o(a),e.globalProperties.$vuert=a,r(n.$vuert,a)}}),l=()=>{let e=s();if(!e)throw new t.RuntimeException("`useVuert()` was called but there was not active Vuert. Did you forget to install `Vuert` plugin in your App?");return e},u=class{id;type;icon;label;callback;constructor(e){this.id=e.id??Symbol(),this.type=e.type??`secondary`,this.icon=e.icon,this.label=e.label,this.callback=e.callback??(()=>e.value)}},d=class{id;type;priority;icon;title;subtitle;message;payload;actions;dismissible;timeout;constructor(e){if(this.id=e.id??Symbol(),this.type=e.type??`info`,this.priority=e.priority??`normal`,this.icon=e.icon,this.title=e.title,this.subtitle=e.subtitle,e.message!==void 0&&e.component!==void 0)throw new t.ValueException("The `message` and `component` properties cannot both be valued at the same time.");if(this.message=e.message,this.payload=e.payload,this.actions=e.actions?.map(e=>new u(e))??[],this.dismissible=e.dismissible||!1,e.timeout!==void 0){if(e.timeout<=0)throw new t.ValueException("The `timeout` property must be a positive integer or -at least- `undefined`.");this.timeout=e.timeout}else this.timeout=0}},f=class extends t.DeferredPromise{_duration;_timeoutId;_publisher;_isOpen;alert;isOpen;component;constructor(n,r){let i=async()=>{if(!this._isOpen.value)throw Error(`Unable to close the alert. It has already been closed or not even opened yet.`);this._isOpen.value=!1,this._timeoutId!==void 0&&(clearTimeout(this._timeoutId),this._timeoutId=void 0),this._publisher.publish(`closing`),await(0,t.delay)(this._duration.leave),this._publisher.publish(`closed`)};if(super(e=>(i(),e instanceof u?e.callback():e instanceof Function?e():e),e=>{throw i(),e}),typeof r==`object`)this._duration={enter:Number(r.enter),leave:Number(r.leave)};else{let e=Number(r);this._duration={enter:e,leave:e}}this._publisher=new t.Publisher,this.alert=new d(n),this._isOpen=(0,e.ref)(!1),this.isOpen=(0,e.computed)(()=>this._isOpen.value),this.component=n.component}async open(){if(this._isOpen.value)throw Error(`Unable to open the alert. It has already been opened.`);this._isOpen.value=!0,this._publisher.publish(`opening`),await(0,t.delay)(this._duration.enter),this._publisher.publish(`opened`),this.alert.timeout&&(this._timeoutId=setTimeout(this.resolve,this.alert.timeout))}onOpening(e){this._publisher.subscribe(`opening`,e)}onOpened(e){this._publisher.subscribe(`opened`,e)}onClosing(e){this._publisher.subscribe(`closing`,e)}onClosed(e){this._publisher.subscribe(`closed`,e)}},p=(0,e.defineComponent)({__name:`AlertHandler`,props:{is:{default:`div`,type:[String,Object]},filter:{default:()=>!0,type:Function},transitionDuration:{default:()=>l().options.transitionDuration,type:[Number,Object],validator:e=>e instanceof Object?`enter`in e&&`leave`in e?isFinite(Number(e.enter))&&isFinite(Number(e.leave)):!1:isFinite(Number(e))}},emits:{opening:e=>e instanceof d,opened:e=>e instanceof d,closing:e=>e instanceof d,closed:e=>e instanceof d},setup(t,{emit:n}){let r=t,i=n,a=[],o=(0,e.ref)(0),s=(0,e.shallowRef)(),c=async()=>{let t=a[0];t.onOpening(()=>i(`opening`,t.alert)),t.onOpened(()=>i(`opened`,t.alert)),t.onClosing(()=>i(`closing`,t.alert)),t.onClosed(async()=>{i(`closed`,t.alert),a.shift(),s.value=void 0,--o.value,await(0,e.nextTick)(),a.length>0&&c()}),s.value=t,await t.open()},u=e=>{let t=new f(e,r.transitionDuration);return a.push(t),a.length===1&&c(),o.value+=1,t},d;return(0,e.onMounted)(()=>{d=l().subscribe(e=>{if(r.filter(e))return u(e)})}),(0,e.onBeforeUnmount)(()=>d()),(n,r)=>((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t.is),null,{default:(0,e.withCtx)(()=>[s.value?(0,e.renderSlot)(n.$slots,`default`,{key:0,alert:s.value.alert,customComponent:s.value.component,isOpen:s.value.isOpen.value,queue:o.value,resolve:s.value.resolve,reject:s.value.reject}):(0,e.createCommentVNode)(``,!0)]),_:3}))}}),m=i;exports.Action=u,exports.Alert=d,exports.AlertHandler=p,exports.AlertThrottledException=r,exports.Context=f,exports.createVuert=c,exports.default=m,exports.useVuert=l; //# sourceMappingURL=vuert.cjs.map