@microblink/capture 1.1.1 → 1.2.1

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.
@@ -1,5 +1,5 @@
1
- var H=(o,u,m)=>{if(!u.has(o))throw TypeError("Cannot "+m)};var y=(o,u,m)=>(H(o,u,"read from private field"),m?m.call(o):u.get(o)),x=(o,u,m)=>{if(u.has(o))throw TypeError("Cannot add the same private member more than once");u instanceof WeakSet?u.add(o):u.set(o,m)},z=(o,u,m,h)=>(H(o,u,"write to private field"),h?h.call(o,m):u.set(o,m),m);(function(){var b,p,k;"use strict";/**
1
+ var H=(o,u,m)=>{if(!u.has(o))throw TypeError("Cannot "+m)};var y=(o,u,m)=>(H(o,u,"read from private field"),m?m.call(o):u.get(o)),C=(o,u,m)=>{if(u.has(o))throw TypeError("Cannot add the same private member more than once");u instanceof WeakSet?u.add(o):u.set(o,m)},z=(o,u,m,h)=>(H(o,u,"write to private field"),h?h.call(o,m):u.set(o,m),m);(function(){var b,p,k;"use strict";/**
2
2
  * @license
3
3
  * Copyright 2019 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
- */const o=Symbol("Comlink.proxy"),u=Symbol("Comlink.endpoint"),m=Symbol("Comlink.releaseProxy"),h=Symbol("Comlink.finalizer"),S=Symbol("Comlink.thrown"),L=e=>typeof e=="object"&&e!==null||typeof e=="function",V={canHandle:e=>L(e)&&e[o],serialize(e){const{port1:t,port2:r}=new MessageChannel;return M(e,t),[r,[r]]},deserialize(e){return e.start(),q(e)}},_={canHandle:e=>L(e)&&S in e,serialize({value:e}){let t;return e instanceof Error?t={isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:t={isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(new Error(e.value.message),e.value):e.value}},v=new Map([["proxy",V],["throw",_]]);function D(e,t){for(const r of e)if(t===r||r==="*"||r instanceof RegExp&&r.test(t))return!0;return!1}function M(e,t=globalThis,r=["*"]){t.addEventListener("message",function c(s){if(!s||!s.data)return;if(!D(r,s.origin)){console.warn(`Invalid origin '${s.origin}' for comlink proxy`);return}const{id:l,type:a,path:n}=Object.assign({path:[]},s.data),i=(s.data.argumentList||[]).map(A);let f;try{const d=n.slice(0,-1).reduce((g,P)=>g[P],e),w=n.reduce((g,P)=>g[P],e);switch(a){case"GET":f=w;break;case"SET":d[n.slice(-1)[0]]=A(s.data.value),f=!0;break;case"APPLY":f=w.apply(d,i);break;case"CONSTRUCT":{const g=new w(...i);f=W(g)}break;case"ENDPOINT":{const{port1:g,port2:P}=new MessageChannel;M(e,P),f=K(g,[g])}break;case"RELEASE":f=void 0;break;default:return}}catch(d){f={value:d,[S]:0}}Promise.resolve(f).catch(d=>({value:d,[S]:0})).then(d=>{const[w,g]=C(d);t.postMessage(Object.assign(Object.assign({},w),{id:l}),g),a==="RELEASE"&&(t.removeEventListener("message",c),N(t),h in e&&typeof e[h]=="function"&&e[h]())}).catch(d=>{const[w,g]=C({value:new TypeError("Unserializable return value"),[S]:0});t.postMessage(Object.assign(Object.assign({},w),{id:l}),g)})}),t.start&&t.start()}function G(e){return e.constructor.name==="MessagePort"}function N(e){G(e)&&e.close()}function q(e,t){return T(e,[],t)}function R(e){if(e)throw new Error("Proxy has been released and is not useable")}function j(e){return E(e,{type:"RELEASE"}).then(()=>{N(e)})}const O=new WeakMap,U="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{const t=(O.get(e)||0)-1;O.set(e,t),t===0&&j(e)});function Y(e,t){const r=(O.get(t)||0)+1;O.set(t,r),U&&U.register(e,t,e)}function X(e){U&&U.unregister(e)}function T(e,t=[],r=function(){}){let c=!1;const s=new Proxy(r,{get(l,a){if(R(c),a===m)return()=>{X(s),j(e),c=!0};if(a==="then"){if(t.length===0)return{then:()=>s};const n=E(e,{type:"GET",path:t.map(i=>i.toString())}).then(A);return n.then.bind(n)}return T(e,[...t,a])},set(l,a,n){R(c);const[i,f]=C(n);return E(e,{type:"SET",path:[...t,a].map(d=>d.toString()),value:i},f).then(A)},apply(l,a,n){R(c);const i=t[t.length-1];if(i===u)return E(e,{type:"ENDPOINT"}).then(A);if(i==="bind")return T(e,t.slice(0,-1));const[f,d]=$(n);return E(e,{type:"APPLY",path:t.map(w=>w.toString()),argumentList:f},d).then(A)},construct(l,a){R(c);const[n,i]=$(a);return E(e,{type:"CONSTRUCT",path:t.map(f=>f.toString()),argumentList:n},i).then(A)}});return Y(s,e),s}function J(e){return Array.prototype.concat.apply([],e)}function $(e){const t=e.map(C);return[t.map(r=>r[0]),J(t.map(r=>r[1]))]}const B=new WeakMap;function K(e,t){return B.set(e,t),e}function W(e){return Object.assign(e,{[o]:!0})}function C(e){for(const[t,r]of v)if(r.canHandle(e)){const[c,s]=r.serialize(e);return[{type:"HANDLER",name:t,value:c},s]}return[{type:"RAW",value:e},B.get(e)||[]]}function A(e){switch(e.type){case"HANDLER":return v.get(e.name).deserialize(e.value);case"RAW":return e.value}}function E(e,t,r){return new Promise(c=>{const s=Q();e.addEventListener("message",function l(a){!a.data||!a.data.id||a.data.id!==s||(e.removeEventListener("message",l),c(a.data))}),e.start&&e.start(),e.postMessage(Object.assign({id:s},t),r)})}function Q(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}const I="application/javascript",F=(e,t={})=>{const r={skipSameOrigin:!0,useBlob:!0,...t};return r.skipSameOrigin&&new URL(e).origin===self.location.origin?Promise.resolve(e):new Promise((c,s)=>void fetch(e).then(l=>l.text()).then(l=>{new URL(e).href.split("/").pop();let n="";if(r.useBlob){const i=new Blob([l],{type:I});n=URL.createObjectURL(i)}else n=`data:${I},`+encodeURIComponent(l);c(n)}).catch(s))},Z=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,3,1,0,1,10,14,1,12,0,65,0,65,0,65,0,252,10,0,0,11])),ee=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,2,8,1,1,97,1,98,3,127,1,6,6,1,127,1,65,0,11,7,5,1,1,97,3,1])),te=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,7,1,5,0,208,112,26,11])),re=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,12,1,10,0,67,0,0,0,0,252,0,26,11])),ne=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,65,0,192,26,11])),se=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])),ae=()=>(async e=>{try{return typeof MessageChannel<"u"&&new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(e)}catch{return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]));function ie(){return/iOS|iPhone|iPad|iPod/i.test(navigator.userAgent)}async function oe(){if(!await ae())return!1;if(!("importScripts"in self))throw Error("Not implemented");return ie()?!1:"Worker"in self}async function ce(){const e=[ee(),te(),Z(),re(),ne()];if(!(await Promise.all(e)).every(Boolean))throw new Error("Browser doesn't meet minimum requirements!");return await se()?await oe()?"advanced-threads":"advanced":"basic"}class le{constructor(){x(this,b,void 0);x(this,p,void 0);x(this,k,void 0)}async loadWasm(){const t=await ce();console.log(`Requesting ${t} Wasm build`);const r=`${y(this,k)}/${t}`,c=`${r}/capture-wasm.js`,s=`${r}/capture-wasm.worker.js`;let l;const a=await F(c);t==="advanced-threads"&&(l=await F(s));try{importScripts(a)}catch(n){console.error("loading scripts failed",n)}return z(this,b,await self.createModule({locateFile:n=>{let i;return n.includes(".worker.js")?i=l:i=`${y(this,k)}/${t}/${n}`,i},mainScriptUrlOrBlob:a.toString(),setStatus:n=>{}})),y(this,b)[h]=()=>{},W(y(this,b))}createAnalyzer(){if(!y(this,b)){console.error("Wasm is not initialized yet. Call loadWasm() first.");return}return z(this,p,new(y(this,b)).Analyzer),y(this,p)[h]=()=>{console.log("Comlink.finalizer called on Analyzer instance. Deleting instance."),y(this,p)&&y(this,p).delete()},W(y(this,p))}analyze(t){if(!y(this,p))throw new Error("Analyzer is not initialized yet. Call createAnalyzer() first.");const r=y(this,p).analyze(t);return self.postMessage({},[t.data.buffer]),t=null,r}terminate(){self.close()}setResourceUrl(t){z(this,k,t)}[h](){console.log("Comlink.finalizer called on proxyWorker")}}b=new WeakMap,p=new WeakMap,k=new WeakMap;const ue=new le;M(ue)})();
5
+ */const o=Symbol("Comlink.proxy"),u=Symbol("Comlink.endpoint"),m=Symbol("Comlink.releaseProxy"),h=Symbol("Comlink.finalizer"),S=Symbol("Comlink.thrown"),L=e=>typeof e=="object"&&e!==null||typeof e=="function",V={canHandle:e=>L(e)&&e[o],serialize(e){const{port1:t,port2:r}=new MessageChannel;return M(e,t),[r,[r]]},deserialize(e){return e.start(),q(e)}},_={canHandle:e=>L(e)&&S in e,serialize({value:e}){let t;return e instanceof Error?t={isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:t={isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(new Error(e.value.message),e.value):e.value}},v=new Map([["proxy",V],["throw",_]]);function D(e,t){for(const r of e)if(t===r||r==="*"||r instanceof RegExp&&r.test(t))return!0;return!1}function M(e,t=globalThis,r=["*"]){t.addEventListener("message",function c(s){if(!s||!s.data)return;if(!D(r,s.origin)){console.warn(`Invalid origin '${s.origin}' for comlink proxy`);return}const{id:l,type:a,path:n}=Object.assign({path:[]},s.data),i=(s.data.argumentList||[]).map(A);let f;try{const d=n.slice(0,-1).reduce((g,P)=>g[P],e),w=n.reduce((g,P)=>g[P],e);switch(a){case"GET":f=w;break;case"SET":d[n.slice(-1)[0]]=A(s.data.value),f=!0;break;case"APPLY":f=w.apply(d,i);break;case"CONSTRUCT":{const g=new w(...i);f=W(g)}break;case"ENDPOINT":{const{port1:g,port2:P}=new MessageChannel;M(e,P),f=K(g,[g])}break;case"RELEASE":f=void 0;break;default:return}}catch(d){f={value:d,[S]:0}}Promise.resolve(f).catch(d=>({value:d,[S]:0})).then(d=>{const[w,g]=x(d);t.postMessage(Object.assign(Object.assign({},w),{id:l}),g),a==="RELEASE"&&(t.removeEventListener("message",c),N(t),h in e&&typeof e[h]=="function"&&e[h]())}).catch(d=>{const[w,g]=x({value:new TypeError("Unserializable return value"),[S]:0});t.postMessage(Object.assign(Object.assign({},w),{id:l}),g)})}),t.start&&t.start()}function G(e){return e.constructor.name==="MessagePort"}function N(e){G(e)&&e.close()}function q(e,t){return T(e,[],t)}function R(e){if(e)throw new Error("Proxy has been released and is not useable")}function j(e){return E(e,{type:"RELEASE"}).then(()=>{N(e)})}const O=new WeakMap,U="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{const t=(O.get(e)||0)-1;O.set(e,t),t===0&&j(e)});function Y(e,t){const r=(O.get(t)||0)+1;O.set(t,r),U&&U.register(e,t,e)}function X(e){U&&U.unregister(e)}function T(e,t=[],r=function(){}){let c=!1;const s=new Proxy(r,{get(l,a){if(R(c),a===m)return()=>{X(s),j(e),c=!0};if(a==="then"){if(t.length===0)return{then:()=>s};const n=E(e,{type:"GET",path:t.map(i=>i.toString())}).then(A);return n.then.bind(n)}return T(e,[...t,a])},set(l,a,n){R(c);const[i,f]=x(n);return E(e,{type:"SET",path:[...t,a].map(d=>d.toString()),value:i},f).then(A)},apply(l,a,n){R(c);const i=t[t.length-1];if(i===u)return E(e,{type:"ENDPOINT"}).then(A);if(i==="bind")return T(e,t.slice(0,-1));const[f,d]=$(n);return E(e,{type:"APPLY",path:t.map(w=>w.toString()),argumentList:f},d).then(A)},construct(l,a){R(c);const[n,i]=$(a);return E(e,{type:"CONSTRUCT",path:t.map(f=>f.toString()),argumentList:n},i).then(A)}});return Y(s,e),s}function J(e){return Array.prototype.concat.apply([],e)}function $(e){const t=e.map(x);return[t.map(r=>r[0]),J(t.map(r=>r[1]))]}const B=new WeakMap;function K(e,t){return B.set(e,t),e}function W(e){return Object.assign(e,{[o]:!0})}function x(e){for(const[t,r]of v)if(r.canHandle(e)){const[c,s]=r.serialize(e);return[{type:"HANDLER",name:t,value:c},s]}return[{type:"RAW",value:e},B.get(e)||[]]}function A(e){switch(e.type){case"HANDLER":return v.get(e.name).deserialize(e.value);case"RAW":return e.value}}function E(e,t,r){return new Promise(c=>{const s=Q();e.addEventListener("message",function l(a){!a.data||!a.data.id||a.data.id!==s||(e.removeEventListener("message",l),c(a.data))}),e.start&&e.start(),e.postMessage(Object.assign({id:s},t),r)})}function Q(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}const I="application/javascript",F=(e,t={})=>{const r={skipSameOrigin:!0,useBlob:!0,...t};return r.skipSameOrigin&&new URL(e).origin===self.location.origin?Promise.resolve(e):new Promise((c,s)=>void fetch(e).then(l=>l.text()).then(l=>{new URL(e).href.split("/").pop();let n="";if(r.useBlob){const i=new Blob([l],{type:I});n=URL.createObjectURL(i)}else n=`data:${I},`+encodeURIComponent(l);c(n)}).catch(s))},Z=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,3,1,0,1,10,14,1,12,0,65,0,65,0,65,0,252,10,0,0,11])),ee=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,2,8,1,1,97,1,98,3,127,1,6,6,1,127,1,65,0,11,7,5,1,1,97,3,1])),te=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,7,1,5,0,208,112,26,11])),re=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,12,1,10,0,67,0,0,0,0,252,0,26,11])),ne=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,65,0,192,26,11])),se=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])),ae=()=>(async e=>{try{return typeof MessageChannel<"u"&&new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(e)}catch{return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]));function ie(){return/iOS|iPhone|iPad|iPod/i.test(navigator.userAgent)}async function oe(){if(!await ae())return!1;if(!("importScripts"in self))throw Error("Not implemented");return ie()?!1:"Worker"in self}async function ce(){const e=[ee(),te(),Z(),re(),ne()];if(!(await Promise.all(e)).every(Boolean))throw new Error("Browser doesn't meet minimum requirements!");return await se()?await oe()?"advanced-threads":"advanced":"basic"}class le{constructor(){C(this,b,void 0);C(this,p,void 0);C(this,k,void 0)}async loadWasm(){const t=await ce();console.log(`Requesting ${t} Wasm build`);const r=`${y(this,k)}/${t}`,c=`${r}/capture-wasm.js`,s=`${r}/capture-wasm.worker.js`;let l;const a=await F(c);t==="advanced-threads"&&(l=await F(s));try{importScripts(a)}catch(n){console.error("loading scripts failed",n)}return z(this,b,await self.createModule({locateFile:n=>{let i;return n.includes(".worker.js")?i=l:i=`${y(this,k)}/${t}/${n}`,i},mainScriptUrlOrBlob:a.toString(),setStatus:n=>{},noExitRuntime:!0})),y(this,b)[h]=()=>{},W(y(this,b))}createAnalyzer(){if(!y(this,b)){console.error("Wasm is not initialized yet. Call loadWasm() first.");return}return z(this,p,new(y(this,b)).Analyzer),y(this,p)[h]=()=>{console.log("Comlink.finalizer called on Analyzer instance. Deleting instance."),y(this,p)&&y(this,p).delete()},W(y(this,p))}analyze(t){if(!y(this,p))throw new Error("Analyzer is not initialized yet. Call createAnalyzer() first.");const r=y(this,p).analyze(t);return self.postMessage({},[t.data.buffer]),t=null,r}terminate(){self.close()}setResourceUrl(t){z(this,k,t)}[h](){console.log("Comlink.finalizer called on proxyWorker")}}b=new WeakMap,p=new WeakMap,k=new WeakMap;const ue=new le;M(ue)})();
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .mb-19vyq8p{display:flex;padding:12px 48px 12px 16px;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative;gap:1px;color:var(--mb-color-white)}.mb-19vyq8p+*:before{content:"";position:absolute;height:1px;left:16px;right:16px;top:-1px;background-color:var(--mb-color-white)}.mb-1v5y2d4{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mb-1my8n64{position:absolute;right:16px}.mb-gliefk{width:20px;height:20px}.mb-gliefk path{fill:none}.mb-16knymi{all:unset;display:flex;padding:8px 16px;align-items:center;gap:4px;border-radius:50px;background:var(--mb-camera-picker-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);white-space:nowrap;font-size:16px;font-weight:500;cursor:pointer}.mb-1v0j9xg{width:20px;height:20px;flex-shrink:0}.mb-1vhx4rq{overflow:hidden;text-overflow:ellipsis}.mb-16n64rq{flex-shrink:0}.mb-16n64rq[data-expanded]{transform:scaleY(-1)}.mb-1pgdg8r{width:20px;height:20px}.mb-qbe87e{border-radius:20px;background:var(--mb-camera-picker-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);overflow:hidden;font-size:16px;font-weight:500}.mb-1woc7wg{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.mb-15a7aro{grid-column:2;display:flex;place-content:center}.mb-1fovbrr{grid-column:3;display:flex;justify-content:flex-end}.mb-1kkaye{all:unset;cursor:pointer;width:32px;height:32px;display:grid;place-items:center}.mb-sihyjw{display:grid;grid-template-columns:32px 1fr 32px;align-items:center;padding:18px 12px;position:relative;z-index:5;gap:24px}.mb-1pqj4ih{background:linear-gradient(to bottom,hsla(0,0%,0%,.56) 0%,hsla(0,0%,0%,.553) 8.1%,hsla(0,0%,0%,.533) 15.5%,hsla(0,0%,0%,.502) 22.5%,hsla(0,0%,0%,.462) 29%,hsla(0,0%,0%,.415) 35.3%,hsla(0,0%,0%,.363) 41.2%,hsla(0,0%,0%,.308) 47.1%,hsla(0,0%,0%,.252) 52.9%,hsla(0,0%,0%,.197) 58.8%,hsla(0,0%,0%,.145) 64.7%,hsla(0,0%,0%,.098) 71%,hsla(0,0%,0%,.058) 77.5%,hsla(0,0%,0%,.027) 84.5%,hsla(0,0%,0%,.007) 91.9%,hsla(0,0%,0%,0) 100%)}.mb-79tnxm{position:absolute;top:0;left:0;width:100%;height:100%;display:grid;place-items:center;z-index:1;-webkit-user-select:none;user-select:none}.mb-1kst2vr{width:96px;height:96px}.mb-qaqzbh{position:absolute}.mb-oegy9h{width:96px;height:96px;filter:drop-shadow(0px 0px 15px rgba(0,0,0,.1))}.mb-oegy9h path{fill:initial}.mb-72esi9{position:relative;left:-28px;top:-28px;perspective:300px}.mb-ah9it3{position:relative;left:-28px;perspective:300px}.mb-pcpdyq{transform-style:preserve-3d;position:relative}.mb-12tdqjq{position:absolute;top:0;left:0;width:100%;transform:rotateY(180deg)}.mb-3q2rd5{width:150px;backface-visibility:hidden;filter:drop-shadow(0px 0px 15px rgba(0,0,0,.1))}.mb-1v17koz{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:50%;width:96px;height:96px;display:grid;place-items:center}.mb-5pevkr{will-change:transform}.mb-1i7l9ps,.mb-1omzjeg{width:48px;height:48px}.mb-dcm5x3{position:absolute;left:0;width:100%;display:flex;justify-content:center;margin-top:8px}.mb-j1awg8{will-change:transform,opacity;padding:8px 12px;text-align:center;gap:4px;border-radius:8px;color:var(--mb-color-white);background:var(--mb-feedback-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);max-width:180px;font-weight:700;line-height:24px;text-shadow:0px 1px 4px rgba(0,0,0,.1);text-wrap:balance}.mb-1slvbtw{width:100%;height:100%}.mb-1slvbtw path{fill:currentColor}.mb-posxld{color:var(--mb-color-primary);background-color:var(--mb-gray-100);border-radius:50%;appearance:none;border:none;stroke-width:1px;width:32px;height:32px;display:grid;place-items:center;position:absolute;bottom:40px;right:40px;z-index:10;stroke:var(--mb-color-cobalt-4);filter:drop-shadow(0px 4px 6px rgba(31,41,55,.1)) drop-shadow(0px 2px 4px rgba(31,41,55,.06))}.mb-1yc0yna{z-index:var(--mb-z-index-root);max-width:min(calc(100vw - 16px),380px);border-radius:6px;padding:8px;background-color:var(--mb-color-primary);color:var(---mb-color-white);font-size:14px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;transform-origin:var(--kb-tooltip-content-transform-origin)}.keen-slider:not([data-keen-slider-disabled]){align-content:flex-start;display:flex;overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;touch-action:pan-y;-webkit-tap-highlight-color:transparent;width:100%}.keen-slider:not([data-keen-slider-disabled]) .keen-slider__slide{position:relative;overflow:hidden;width:100%;min-height:100%}.keen-slider:not([data-keen-slider-disabled])[data-keen-slider-reverse]{flex-direction:row-reverse}.keen-slider:not([data-keen-slider-disabled])[data-keen-slider-v]{flex-wrap:wrap}.keen-slider:not([data-keen-slider-disabled])[data-keen-slider-moves] *{pointer-events:none}.mb-1epo54l{border:none;appearance:none;display:flex;padding:8px 16px;justify-content:center;align-items:center;font-size:calc(1em - 2px);border-radius:40px;background:var(--mb-color-primary);color:var(--mb-color-white);font-weight:700;-webkit-user-select:none;user-select:none}.mb-1epo54l:disabled{pointer-events:none;background:var(--mb-gray-100);color:var(-mb-gray-400);outline:none}.mb-1ohbwoy{outline:1px solid var(--mb-gray-400);background:var(--mb-color-white);color:var(--mb-gray-700)}.mb-zjxyoc{position:fixed;height:100vh;width:100vw;height:100dvh;width:100dvw;top:0;left:0;z-index:var(--mb-z-index-root);display:flex;align-items:center;justify-content:center}.mb-1mieit8{height:100vh;width:100vw;height:100dvh;width:100dvw;top:0;left:0;position:fixed;background-color:#11182780}.mb-1ogpkgw{max-width:min(calc(100vw - 100px),500px);max-height:calc(100dvh - 100px);border:1px solid hsl(240 5% 84%);border-radius:8px;padding:60px 24px 24px;background-color:#fff;color:#000;overflow:hidden;overflow-y:auto;position:relative;box-shadow:0 11px 15px #0003,0 9px 46px #0000001f,0 24px 38px #00000024}@media (max-width: 480px){.mb-1ogpkgw{font-size:14px}}.mb-d1kpoi{display:grid;gap:1.5em;align-items:center;text-align:center;overflow-y:auto;overscroll-behavior:none;padding:2px}.mb-d1kpoi h2{color:var(--mb-color-darkblue);font-size:1.5em;font-style:normal;font-weight:700;line-height:1.3}.mb-d1kpoi p{color:var(--mb-gray-600);line-height:1.5}.mb-d1kpoi img{margin:0 auto}.mb-slxsc0{display:flex;padding:12px 0;gap:12px;justify-content:center}.mb-1777uja{width:9px;height:9px;border-radius:50%;background:var(--mb-dot-inactive)}.mb-rp0tll{background:var(--mb-color-primary)}.mb-4sy7j9{display:flex;gap:8px}.mb-4sy7j9>*{flex:1}.mb-8u3v3h{border:none;background:none;appearance:none;position:absolute;top:8px;right:8px;width:48px;height:48px;display:grid;place-items:center}.mb-h83tsy{width:18px;height:18px}.mb-h83tsy path{fill:var(--mb-color-black)}.mb-zjp32o{margin:auto;display:flex;flex-direction:column;align-items:center;gap:1.5em;text-align:center}.mb-zjp32o h2{color:var(--mb-color-darkblue);font-size:1.5em;font-style:normal;font-weight:700;line-height:1.3}.mb-zjp32o p{color:var(--mb-gray-600);line-height:1.5}.mb-zgw7tn{margin:0 auto}.mb-1r8ti85{padding:16px 24px}.mb-1lz2sq8{background-color:var(--mb-gray-overlay-bg);color:var(--mb-color-white);width:100%;height:100%;position:relative;min-height:300px}.mb-1v96fqo{height:100vh;width:100vw;height:100dvh;width:100dvw;position:fixed;top:0;left:0}.mb-1v96fqo:focus-visible{outline:none}.mb-191sfs5{width:115px;height:53px;margin:auto;filter:drop-shadow(0px 0px 3px rgba(0,0,0,.1)) drop-shadow(0px 0px 15px rgba(0,0,0,1))}.mb-o9aq4l{position:absolute;bottom:10%;left:0;width:100%;pointer-events:none}.mb-1f2d6cn{display:block;max-width:100%;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;object-fit:contain}.mb-rjcpop{font-size:12px;overflow:auto;display:flex}.alert-dialog__trigger{appearance:none;display:inline-flex;justify-content:center;align-items:center;height:40px;width:auto;outline:none;border-radius:6px;padding:0 16px;background-color:#0284c5;color:#fff;font-size:16px;line-height:0;transition:.25s background-color}.alert-dialog__trigger:hover{background-color:#0369a0}.alert-dialog__trigger:focus-visible{outline:2px solid hsl(200 98% 39%);outline-offset:2px}.alert-dialog__trigger:active{background-color:#075783}.alert-dialog__overlay{position:fixed;inset:0;z-index:var(--mb-z-index-root);background-color:#0003;animation:overlayHide .25s ease .1s forwards;pointer-events:none}.alert-dialog__overlay[data-expanded]{animation:overlayShow .25s ease}.alert-dialog__positioner{position:fixed;inset:0;z-index:var(--mb-z-index-root);display:flex;align-items:center;justify-content:center}.alert-dialog__content{z-index:var(--mb-z-index-root);max-width:min(calc(100vw - 16px),500px);border:1px solid hsl(240 5% 84%);border-radius:6px;padding:16px;background-color:#fff;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;animation:contentHide .3s ease-in forwards}.alert-dialog__content[data-expanded]{animation:contentShow .3s ease-out}.alert-dialog__header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:12px}.alert-dialog__close-button{all:unset;color:#52525b}.alert-dialog__title{font-size:20px;font-weight:500;color:#18181b}.alert-dialog__description{font-size:16px;color:#3f3f46}@keyframes overlayShow{0%{opacity:0}to{opacity:1}}@keyframes overlayHide{0%{opacity:1}to{opacity:0}}@keyframes contentShow{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes contentHide{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}:root{--mb-system-font-stack: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--mb-monospace-font-stack: Menlo, Consolas, "Ubuntu Mono", "Roboto Mono", "DejaVu Sans Mono", monospace;--mb-ui-font: var(--mb-system-font-stack);--mb-color-cobalt-1: #0062f2;--mb-color-cobalt-2: #3a89fd;--mb-color-cobalt-3: #6fa9ff;--mb-color-cobalt-4: #e7f0ff;--mb-color-white: #fff;--mb-color-black: #000;--mb-color-darkblue: #142641;--mb-color-primary: var(--mb-color-cobalt-1);--mb-color-primary-light: var(--mb-color-cobalt-2);--mb-color-primary-lighter: var(--mb-color-cobalt-3);--mb-color-primary-lightest: var(--mb-color-cobalt-4);--mb-gray-100: #f3f4f6;--mb-gray-400: #9ca3af;--mb-gray-600: #4b5563;--mb-gray-700: #374151;--mb-gray-overlay-bg: #282c34;--mb-dot-inactive: #c6c6c8;--mb-feedback-bg: rgba(102, 102, 102, .5);--mb-reticle-ok: rgba(102, 102, 102, .5);--mb-reticle-error: rgba(251, 113, 133, .6);--mb-camera-picker-bg: rgba(102, 102, 102, .5);--mb-z-index-root: 50}.mb-style-scope{font-family:var(--mb-ui-font);line-height:1.15;isolation:isolate;box-sizing:border-box}:where(.mb-style-scope *,.mb-style-scope *:before,.mb-style-scope *:after){box-sizing:border-box;margin:0;padding:0}:where(.mb-style-scope *:focus){outline:none}:where(.mb-style-scope :focus-visible){outline:none}:where(.mb-style-scope code){font-family:var(--mb-monospace-font-stack)}:where(.mb-style-scope pre){font-family:var(--mb-monospace-font-stack)}:where(.mb-style-scope svg) path{pointer-events:none}:where(.mb-style-scope img,.mb-style-scope picture,.mb-style-scope video,.mb-style-scope canvas,.mb-style-scope svg){display:block;max-width:100%}:where(.mb-style-scope img){pointer-events:none;user-select:none}:where(.mb-style-scope input,.mb-style-scope button,.mb-style-scope textarea,.mb-style-scope select){font:inherit}:where(.mb-style-scope button,.mb-style-scope select){cursor:pointer}:where(.mb-style-scope p,.mb-style-scope h1,.mb-style-scope h2,.mb-style-scope h3,.mb-style-scope h4,.mb-style-scope h5,.mb-style-scope h6){overflow-wrap:break-word}
1
+ .mb-19vyq8p{display:flex;padding:12px 48px 12px 16px;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative;gap:1px;color:var(--mb-color-white)}.mb-19vyq8p+*:before{content:"";position:absolute;height:1px;left:16px;right:16px;top:-1px;background-color:var(--mb-color-white)}.mb-1v5y2d4{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mb-1my8n64{position:absolute;right:16px}.mb-gliefk{width:20px;height:20px}.mb-gliefk path{fill:none}.mb-16knymi{all:unset;display:flex;padding:8px 16px;align-items:center;gap:4px;border-radius:50px;background:var(--mb-camera-picker-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);white-space:nowrap;font-size:16px;font-weight:500;cursor:pointer}.mb-1v0j9xg{width:20px;height:20px;flex-shrink:0}.mb-1vhx4rq{overflow:hidden;text-overflow:ellipsis}.mb-16n64rq{flex-shrink:0}.mb-16n64rq[data-expanded]{transform:scaleY(-1)}.mb-1pgdg8r{width:20px;height:20px}.mb-1hockg5{border-radius:20px;background:var(--mb-camera-picker-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);overflow:hidden;font-size:16px;font-weight:500;z-index:calc(Infinity)}.mb-1woc7wg{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.mb-15a7aro{grid-column:2;display:flex;place-content:center}.mb-1fovbrr{grid-column:3;display:flex;justify-content:flex-end}.mb-1kkaye{all:unset;cursor:pointer;width:32px;height:32px;display:grid;place-items:center}.mb-sihyjw{display:grid;grid-template-columns:32px 1fr 32px;align-items:center;padding:18px 12px;position:relative;z-index:5;gap:24px}.mb-1pqj4ih{background:linear-gradient(to bottom,hsla(0,0%,0%,.56) 0%,hsla(0,0%,0%,.553) 8.1%,hsla(0,0%,0%,.533) 15.5%,hsla(0,0%,0%,.502) 22.5%,hsla(0,0%,0%,.462) 29%,hsla(0,0%,0%,.415) 35.3%,hsla(0,0%,0%,.363) 41.2%,hsla(0,0%,0%,.308) 47.1%,hsla(0,0%,0%,.252) 52.9%,hsla(0,0%,0%,.197) 58.8%,hsla(0,0%,0%,.145) 64.7%,hsla(0,0%,0%,.098) 71%,hsla(0,0%,0%,.058) 77.5%,hsla(0,0%,0%,.027) 84.5%,hsla(0,0%,0%,.007) 91.9%,hsla(0,0%,0%,0) 100%)}.mb-79tnxm{position:absolute;top:0;left:0;width:100%;height:100%;display:grid;place-items:center;z-index:1;-webkit-user-select:none;user-select:none}.mb-1kst2vr{width:96px;height:96px}.mb-qaqzbh{position:absolute}.mb-oegy9h{width:96px;height:96px;filter:drop-shadow(0px 0px 15px rgba(0,0,0,.1))}.mb-oegy9h path{fill:initial}.mb-72esi9{position:relative;left:-28px;top:-28px;perspective:300px}.mb-ah9it3{position:relative;left:-28px;perspective:300px}.mb-pcpdyq{transform-style:preserve-3d;position:relative}.mb-12tdqjq{position:absolute;top:0;left:0;width:100%;transform:rotateY(180deg)}.mb-3q2rd5{width:150px;backface-visibility:hidden;filter:drop-shadow(0px 0px 15px rgba(0,0,0,.1))}.mb-1v17koz{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:50%;width:96px;height:96px;display:grid;place-items:center}.mb-5pevkr{will-change:transform}.mb-1i7l9ps,.mb-1omzjeg{width:48px;height:48px}.mb-dcm5x3{position:absolute;left:0;width:100%;display:flex;justify-content:center;margin-top:8px}.mb-j1awg8{will-change:transform,opacity;padding:8px 12px;text-align:center;gap:4px;border-radius:8px;color:var(--mb-color-white);background:var(--mb-feedback-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);max-width:180px;font-weight:700;line-height:24px;text-shadow:0px 1px 4px rgba(0,0,0,.1);text-wrap:balance}.mb-1slvbtw{width:100%;height:100%}.mb-1slvbtw path{fill:currentColor}.mb-posxld{color:var(--mb-color-primary);background-color:var(--mb-gray-100);border-radius:50%;appearance:none;border:none;stroke-width:1px;width:32px;height:32px;display:grid;place-items:center;position:absolute;bottom:40px;right:40px;z-index:10;stroke:var(--mb-color-cobalt-4);filter:drop-shadow(0px 4px 6px rgba(31,41,55,.1)) drop-shadow(0px 2px 4px rgba(31,41,55,.06))}.mb-1yc0yna{z-index:var(--mb-z-index-root);max-width:min(calc(100vw - 16px),380px);border-radius:6px;padding:8px;background-color:var(--mb-color-primary);color:var(---mb-color-white);font-size:14px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;transform-origin:var(--kb-tooltip-content-transform-origin)}.keen-slider:not([data-keen-slider-disabled]){align-content:flex-start;display:flex;overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;touch-action:pan-y;-webkit-tap-highlight-color:transparent;width:100%}.keen-slider:not([data-keen-slider-disabled]) .keen-slider__slide{position:relative;overflow:hidden;width:100%;min-height:100%}.keen-slider:not([data-keen-slider-disabled])[data-keen-slider-reverse]{flex-direction:row-reverse}.keen-slider:not([data-keen-slider-disabled])[data-keen-slider-v]{flex-wrap:wrap}.keen-slider:not([data-keen-slider-disabled])[data-keen-slider-moves] *{pointer-events:none}.mb-1epo54l{border:none;appearance:none;display:flex;padding:8px 16px;justify-content:center;align-items:center;font-size:calc(1em - 2px);border-radius:40px;background:var(--mb-color-primary);color:var(--mb-color-white);font-weight:700;-webkit-user-select:none;user-select:none}.mb-1epo54l:disabled{pointer-events:none;background:var(--mb-gray-100);color:var(-mb-gray-400);outline:none}.mb-1ohbwoy{outline:1px solid var(--mb-gray-400);background:var(--mb-color-white);color:var(--mb-gray-700)}.mb-zjxyoc{position:fixed;height:100vh;width:100vw;height:100dvh;width:100dvw;top:0;left:0;z-index:var(--mb-z-index-root);display:flex;align-items:center;justify-content:center}.mb-1mieit8{height:100vh;width:100vw;height:100dvh;width:100dvw;top:0;left:0;position:fixed;background-color:#11182780}.mb-1ogpkgw{max-width:min(calc(100vw - 100px),500px);max-height:calc(100dvh - 100px);border:1px solid hsl(240 5% 84%);border-radius:8px;padding:60px 24px 24px;background-color:#fff;color:#000;overflow:hidden;overflow-y:auto;position:relative;box-shadow:0 11px 15px #0003,0 9px 46px #0000001f,0 24px 38px #00000024}@media (max-width: 480px){.mb-1ogpkgw{font-size:14px}}.mb-d1kpoi{display:grid;gap:1.5em;align-items:center;text-align:center;overflow-y:auto;overscroll-behavior:none;padding:2px}.mb-d1kpoi h2{color:var(--mb-color-darkblue);font-size:1.5em;font-style:normal;font-weight:700;line-height:1.3}.mb-d1kpoi p{color:var(--mb-gray-600);line-height:1.5}.mb-d1kpoi img{margin:0 auto}.mb-slxsc0{display:flex;padding:12px 0;gap:12px;justify-content:center}.mb-1777uja{width:9px;height:9px;border-radius:50%;background:var(--mb-dot-inactive)}.mb-rp0tll{background:var(--mb-color-primary)}.mb-4sy7j9{display:flex;gap:8px}.mb-4sy7j9>*{flex:1}.mb-8u3v3h{border:none;background:none;appearance:none;position:absolute;top:8px;right:8px;width:48px;height:48px;display:grid;place-items:center}.mb-h83tsy{width:18px;height:18px}.mb-h83tsy path{fill:var(--mb-color-black)}.mb-zjp32o{margin:auto;display:flex;flex-direction:column;align-items:center;gap:1.5em;text-align:center}.mb-zjp32o h2{color:var(--mb-color-darkblue);font-size:1.5em;font-style:normal;font-weight:700;line-height:1.3}.mb-zjp32o p{color:var(--mb-gray-600);line-height:1.5}.mb-zgw7tn{margin:0 auto}.mb-1r8ti85{padding:16px 24px}.mb-1lz2sq8{background-color:var(--mb-gray-overlay-bg);color:var(--mb-color-white);width:100%;height:100%;position:relative;min-height:300px}.mb-1v96fqo{height:100vh;width:100vw;height:100dvh;width:100dvw;position:fixed;top:0;left:0}.mb-1v96fqo:focus-visible{outline:none}.mb-191sfs5{width:115px;height:53px;margin:auto;filter:drop-shadow(0px 0px 3px rgba(0,0,0,.1)) drop-shadow(0px 0px 15px rgba(0,0,0,1))}.mb-o9aq4l{position:absolute;bottom:10%;left:0;width:100%;pointer-events:none}.mb-1f2d6cn{display:block;max-width:100%;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;object-fit:contain}.mb-rjcpop{font-size:12px;overflow:auto;display:flex}.alert-dialog__trigger{appearance:none;display:inline-flex;justify-content:center;align-items:center;height:40px;width:auto;outline:none;border-radius:6px;padding:0 16px;background-color:#0284c5;color:#fff;font-size:16px;line-height:0;transition:.25s background-color}.alert-dialog__trigger:hover{background-color:#0369a0}.alert-dialog__trigger:focus-visible{outline:2px solid hsl(200 98% 39%);outline-offset:2px}.alert-dialog__trigger:active{background-color:#075783}.alert-dialog__overlay{position:fixed;inset:0;z-index:var(--mb-z-index-root);background-color:#0003;animation:overlayHide .25s ease .1s forwards;pointer-events:none}.alert-dialog__overlay[data-expanded]{animation:overlayShow .25s ease}.alert-dialog__positioner{position:fixed;inset:0;z-index:var(--mb-z-index-root);display:flex;align-items:center;justify-content:center}.alert-dialog__content{z-index:var(--mb-z-index-root);max-width:min(calc(100vw - 16px),500px);border:1px solid hsl(240 5% 84%);border-radius:6px;padding:16px;background-color:#fff;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;animation:contentHide .3s ease-in forwards}.alert-dialog__content[data-expanded]{animation:contentShow .3s ease-out}.alert-dialog__header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:12px}.alert-dialog__close-button{all:unset;color:#52525b}.alert-dialog__title{font-size:20px;font-weight:500;color:#18181b}.alert-dialog__description{font-size:16px;color:#3f3f46}@keyframes overlayShow{0%{opacity:0}to{opacity:1}}@keyframes overlayHide{0%{opacity:1}to{opacity:0}}@keyframes contentShow{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes contentHide{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.96)}}:root{--mb-system-font-stack: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--mb-monospace-font-stack: Menlo, Consolas, "Ubuntu Mono", "Roboto Mono", "DejaVu Sans Mono", monospace;--mb-ui-font: var(--mb-system-font-stack);--mb-color-cobalt-1: #0062f2;--mb-color-cobalt-2: #3a89fd;--mb-color-cobalt-3: #6fa9ff;--mb-color-cobalt-4: #e7f0ff;--mb-color-white: #fff;--mb-color-black: #000;--mb-color-darkblue: #142641;--mb-color-primary: var(--mb-color-cobalt-1);--mb-color-primary-light: var(--mb-color-cobalt-2);--mb-color-primary-lighter: var(--mb-color-cobalt-3);--mb-color-primary-lightest: var(--mb-color-cobalt-4);--mb-gray-100: #f3f4f6;--mb-gray-400: #9ca3af;--mb-gray-600: #4b5563;--mb-gray-700: #374151;--mb-gray-overlay-bg: #282c34;--mb-dot-inactive: #c6c6c8;--mb-feedback-bg: rgba(102, 102, 102, .5);--mb-reticle-ok: rgba(102, 102, 102, .5);--mb-reticle-error: rgba(251, 113, 133, .6);--mb-camera-picker-bg: rgba(102, 102, 102, .5);--mb-z-index-root: 50}.mb-style-scope{font-family:var(--mb-ui-font);line-height:1.15;isolation:isolate;box-sizing:border-box}:where(.mb-style-scope *,.mb-style-scope *:before,.mb-style-scope *:after){box-sizing:border-box;margin:0;padding:0}:where(.mb-style-scope *:focus){outline:none}:where(.mb-style-scope :focus-visible){outline:none}:where(.mb-style-scope code){font-family:var(--mb-monospace-font-stack)}:where(.mb-style-scope pre){font-family:var(--mb-monospace-font-stack)}:where(.mb-style-scope svg) path{pointer-events:none}:where(.mb-style-scope img,.mb-style-scope picture,.mb-style-scope video,.mb-style-scope canvas,.mb-style-scope svg){display:block;max-width:100%}:where(.mb-style-scope img){pointer-events:none;user-select:none}:where(.mb-style-scope input,.mb-style-scope button,.mb-style-scope textarea,.mb-style-scope select){font:inherit}:where(.mb-style-scope button,.mb-style-scope select){cursor:pointer}:where(.mb-style-scope p,.mb-style-scope h1,.mb-style-scope h2,.mb-style-scope h3,.mb-style-scope h4,.mb-style-scope h5,.mb-style-scope h6){overflow-wrap:break-word}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microblink/capture",
3
- "version": "1.1.1",
3
+ "version": "1.2.1",
4
4
  "homepage": "https://microblink.com/",
5
5
  "repository": "github:BlinkID/capture-browser",
6
6
  "description": "A smart image capturing library for WebAssembly-enabled browsers",
package/types/index.d.cts CHANGED
@@ -40,7 +40,7 @@ export declare class Analyzer extends EmbindObject {
40
40
  }
41
41
 
42
42
  /**
43
- * Copyright (c) 2023 Microblink Ltd. All rights reserved.
43
+ * Copyright (c) 2024 Microblink Ltd. All rights reserved.
44
44
  *
45
45
  * ANY UNAUTHORIZED USE OR SALE, DUPLICATION, OR DISTRIBUTION
46
46
  * OF THIS PROGRAM OR ANY OF ITS PARTS, IN SOURCE OR BINARY FORMS,
@@ -64,7 +64,7 @@ export declare type AnalyzerResult = {
64
64
  };
65
65
 
66
66
  /**
67
- * Copyright (c) 2023 Microblink Ltd. All rights reserved.
67
+ * Copyright (c) 2024 Microblink Ltd. All rights reserved.
68
68
  *
69
69
  * ANY UNAUTHORIZED USE OR SALE, DUPLICATION, OR DISTRIBUTION
70
70
  * OF THIS PROGRAM OR ANY OF ITS PARTS, IN SOURCE OR BINARY FORMS,
@@ -78,12 +78,13 @@ export declare type AnalyzerResult = {
78
78
  */
79
79
  export declare type AnalyzerSettings = {
80
80
  /**
81
- * Whether to capture a single side or capture both sides
81
+ * Whether to capture a single side or capture all possible sides
82
+ * Determines whether to capture a single side or capture all possible sides
82
83
  * of a document with automatic side detection.
83
84
  */
84
85
  captureSingleSide: boolean;
85
86
  /**
86
- * Whether to return an image of a cropped and perspective-corrected document.
87
+ * Determines whether to return an image of a cropped and perspective-corrected document.
87
88
  */
88
89
  returnTransformedDocumentImage: boolean;
89
90
  /**
@@ -110,10 +111,15 @@ export declare type AnalyzerSettings = {
110
111
  */
111
112
  documentFramingMargin: number;
112
113
  /**
113
- * Whether to return an image of the transformed document with applied margin
114
+ * Determines whether to return an image of the transformed document with applied margin
114
115
  * used during document framing.
115
116
  */
116
117
  keepMarginOnTransformedDocumentImage: boolean;
118
+ /**
119
+ * Determines whether to preserve the captured document DPI in transformed document image.
120
+ * If disabled, the document DPI is downscaled to 400 DPI.
121
+ */
122
+ keepDpiOnTransformedDocumentImage: boolean;
117
123
  /**
118
124
  * Parameters for lighting estimation.
119
125
  *
@@ -131,32 +137,45 @@ export declare type AnalyzerSettings = {
131
137
  */
132
138
  lightingThresholds: LightingThresholds;
133
139
  /**
134
- * Whether to discard frames with blurred documents.
140
+ * Defines percentage of the document area that is allowed to be occluded by hand.
135
141
  *
136
- * If it is enabled, the capture process is allowed to finish with blur on the
137
- * document.
142
+ * Allowed values are from 0 to 1.
138
143
  */
139
- ignoreBlur: boolean;
144
+ handOcclusionThreshold: number;
140
145
  /**
141
- * Whether to discard frames with glare detected on the document.
146
+ * Defines the tolerance for discarding overly tilted frames.
147
+ * The following values are possible:
142
148
  *
143
- * If it is enabled, the capture process is allowed to finish with glare on
144
- * the document.
149
+ * - `"disabled"` - Disables tilt detection.
150
+ * - `"strict"` - The policy is strict, resulting in more frames being discarded.
151
+ * - `"normal"` - Trade-off between `"strict"` and `"relaxed"`.
152
+ * - `"relaxed"` - The policy is relaxed, resulting in fewer frames being discarded.
153
+ *
154
+ * @defaultValue `"normal"`
145
155
  */
146
- ignoreGlare: boolean;
156
+ tiltPolicy: StrictnessLevel;
147
157
  /**
148
- * Defines percentage of the document area that is allowed to be occluded by hand.
158
+ * Defines the tolerance for discarding overly blurred frames.
159
+ * The following values are possible:
149
160
  *
150
- * Allowed values are from 0 to 1.
161
+ * - `"disabled"` - Disables blur detection.
162
+ * - `"strict"` - The policy is strict, resulting in more frames being discarded.
163
+ * - `"normal"` - Trade-off between `"strict"` and `"relaxed"`.
164
+ * - `"relaxed"` - The policy is relaxed, resulting in fewer frames being discarded.
165
+ *
166
+ * @defaultValue `"normal"`
151
167
  */
152
- handOcclusionThreshold: number;
168
+ blurPolicy: StrictnessLevel;
153
169
  /**
154
- * Threshold for detecting tilted documents. Frames with documents tilted more
155
- * than defined by this threshold are discarded.
170
+ * Defines the tolerance for discarding frames with excessive glare.
171
+ * - `"disabled"` - Disables glare detection.
172
+ * - `"strict"` - The policy is strict, resulting in more frames being discarded.
173
+ * - `"normal"` - Trade-off between `"strict"` and `"relaxed"`.
174
+ * - `"relaxed"` - The policy is relaxed, resulting in fewer frames being discarded.
156
175
  *
157
- * Allowed values are from 0 to 1.
176
+ * @defaultValue `"normal"`
158
177
  */
159
- tiltThreshold: number;
178
+ glarePolicy: StrictnessLevel;
160
179
  /**
161
180
  * Required minimum DPI of the captured document on transformed image.
162
181
  *
@@ -167,9 +186,9 @@ export declare type AnalyzerSettings = {
167
186
  */
168
187
  minimumDocumentDpi: number;
169
188
  /**
170
- * Whether to automatically adjust minimum document dpi.
189
+ * Determines whether to automatically adjust minimum document DPI.
171
190
  *
172
- * If it is enabled, the minimum dpi is adjusted to optimal value for the
191
+ * If it is enabled, the minimum DPI is adjusted to optimal value for the
173
192
  * provided input resolution to enable capture of all document groups.
174
193
  */
175
194
  adjustMinimumDocumentDpi: boolean;
@@ -178,6 +197,7 @@ export declare type AnalyzerSettings = {
178
197
  export declare type BaltazarRequest = Readonly<{
179
198
  licenseId: string;
180
199
  licensee: string;
200
+ applicationIds: Array<string>;
181
201
  packageName: string;
182
202
  platform: string;
183
203
  sdkName: string;
@@ -219,10 +239,17 @@ export declare type CaptureCallbacks = Partial<{
219
239
  onCaptureResult: (result: AnalyzerResult) => void;
220
240
  }>;
221
241
 
242
+ /**
243
+ * The Capture UI component. Provides methods for controlling the Capture SDK and the UI
244
+ */
222
245
  export declare type CaptureComponent = {
246
+ /** The instance of the Capture SDK wrapped by the UI */
247
+ captureSdk: CaptureSdk;
248
+ /** Updates the localization strings */
249
+ updateLocalization: SetStoreFunction<LocalizationStrings>;
223
250
  /** Dismounts the component from the DOM and unloads the SDK */
224
251
  dismount: () => void;
225
- } & ExposedComponentApi;
252
+ };
226
253
 
227
254
  /**
228
255
  * Singleton that represents the Capture SDK
@@ -443,6 +470,13 @@ declare type CreateCaptureUiSettings = {
443
470
  uiSettings?: UiSettings;
444
471
  };
445
472
 
473
+ /**
474
+ * Creates the capture UI with an existing instance of the Capture SDK
475
+ * @param captureSdk
476
+ * @param uiSettings
477
+ */
478
+ export declare function createCaptureUiWithInstance(captureSdk: CaptureSdk, uiSettings?: UiSettings): CaptureComponent;
479
+
446
480
  /**
447
481
  * Creates a new `DirectApi` instance.
448
482
  * @param settings - The settings for the `DirectApi` instance.
@@ -453,7 +487,7 @@ export declare function createDirectApi(settings: DirectApiSettings): Promise<Di
453
487
  declare const createEndpoint: unique symbol;
454
488
 
455
489
  /**
456
- * Copyright (c) 2023 Microblink Ltd. All rights reserved.
490
+ * Copyright (c) 2024 Microblink Ltd. All rights reserved.
457
491
  *
458
492
  * ANY UNAUTHORIZED USE OR SALE, DUPLICATION, OR DISTRIBUTION
459
493
  * OF THIS PROGRAM OR ANY OF ITS PARTS, IN SOURCE OR BINARY FORMS,
@@ -463,43 +497,43 @@ declare const createEndpoint: unique symbol;
463
497
  * REVERSE ENGINEER, DECOMPILE, OR DISASSEMBLE IT.
464
498
  */
465
499
  declare const _default: {
466
- scan_the_front_side: string;
467
- flip_document: string;
468
- scan_the_back_side: string;
469
- scanning_wrong_side: string;
470
- move_closer: string;
471
- move_farther: string;
472
- camera_angle_too_steep: string;
473
- document_too_close_to_edge: string;
474
- rotate_phone_animation: string;
475
- rotate_phone: string;
476
- lightning_too_bright: string;
477
- lightning_too_dark: string;
478
- blur_detected: string;
479
- glare_detected: string;
480
- occluded: string;
481
- need_help_tooltip: string;
482
- onboarding_field_visible_title: string;
483
- onboarding_field_visible_details: string;
484
- tutorial_fields_visible_title: string;
485
- tutorial_fields_visible_start: string;
486
- tutorial_fields_visible_details: string;
487
- tutorial_harsh_light_title: string;
488
- tutorial_harsh_light_details: string;
489
- tutorial_keep_still_title: string;
490
- tutorial_keep_still_details: string;
491
- camera_unavailable: string;
492
- camera_permission_error: string;
493
- settings: string;
494
- camera_media_capture_error: string;
495
- camera_unable_to_resume_session: string;
496
- camera_query_in_progress: string;
497
- done: string;
498
- cancel: string;
499
- back: string;
500
- next: string;
501
- ok: string;
502
- dismiss: string;
500
+ readonly scan_the_front_side: "Scan the front side of the document";
501
+ readonly flip_document: "Flip the document";
502
+ readonly scan_the_back_side: "Scan the back side of the document";
503
+ readonly scanning_wrong_side: "Scanning wrong side";
504
+ readonly move_closer: "Move closer";
505
+ readonly move_farther: "Move farther";
506
+ readonly camera_angle_too_steep: "Keep document parallel to phone";
507
+ readonly document_too_close_to_edge: "Move farther";
508
+ readonly rotate_phone_animation: "Rotate card or turn phone to landscape";
509
+ readonly rotate_phone: "Rotate phone or card";
510
+ readonly lightning_too_bright: "Move to spot with less lighting";
511
+ readonly lightning_too_dark: "Move to brighter spot";
512
+ readonly blur_detected: "Keep document and phone still";
513
+ readonly glare_detected: "Tilt or move document to remove reflection";
514
+ readonly occluded: "Keep the document fully visible";
515
+ readonly need_help_tooltip: "Need help?";
516
+ readonly onboarding_field_visible_title: "Keep all the details visible";
517
+ readonly onboarding_field_visible_details: "Make sure you keep the document well lit. All document fields should be visible on the camera screen.";
518
+ readonly tutorial_fields_visible_title: "Keep all the fields visible";
519
+ readonly tutorial_fields_visible_start: "Start scanning";
520
+ readonly tutorial_fields_visible_details: "Make sure you aren’t covering parts of the document with a finger, including the bottom lines. Also, watch out for hologram reflections that go over the document fields.";
521
+ readonly tutorial_harsh_light_title: "Watch out for harsh light";
522
+ readonly tutorial_harsh_light_details: "Avoid direct harsh light because it reflects from the document and can make parts of the document unreadable. If you can’t read data on the document, it won’t be visible to the camera either.";
523
+ readonly tutorial_keep_still_title: "Keep still while scanning";
524
+ readonly tutorial_keep_still_details: "Try to keep the phone and document still while scanning. Moving either can blur the image and make data on the document unreadable.";
525
+ readonly camera_unavailable: "Camera Unavailable";
526
+ readonly camera_permission_error: "App doesn't have permission to use the camera, please change privacy settings";
527
+ readonly settings: "Settings";
528
+ readonly camera_media_capture_error: "Unable to capture media";
529
+ readonly camera_unable_to_resume_session: "Unable to resume";
530
+ readonly camera_query_in_progress: "Selecting best camera, please wait";
531
+ readonly done: "Done";
532
+ readonly cancel: "Cancel";
533
+ readonly back: "Back";
534
+ readonly next: "Next";
535
+ readonly ok: "OK";
536
+ readonly dismiss: "Dismiss";
503
537
  };
504
538
 
505
539
  /**
@@ -625,7 +659,7 @@ export declare type DocumentOcclusionStatus = "not-available" | "occluded" | "no
625
659
  export declare type DocumentSideAnalysisStatus = "not-available" | "side-already-captured" | "side-not-captured";
626
660
 
627
661
  /**
628
- * Copyright (c) 2023 Microblink Ltd. All rights reserved.
662
+ * Copyright (c) 2024 Microblink Ltd. All rights reserved.
629
663
  *
630
664
  * ANY UNAUTHORIZED USE OR SALE, DUPLICATION, OR DISTRIBUTION
631
665
  * OF THIS PROGRAM OR ANY OF ITS PARTS, IN SOURCE OR BINARY FORMS,
@@ -649,14 +683,6 @@ declare abstract class EmbindObject {
649
683
  delete(): Promise<void>;
650
684
  }
651
685
 
652
- export declare type ExposedComponentApi = {
653
- /** Can return undefined if called after the SDK has been
654
- * destroyed
655
- */
656
- captureSdk: CaptureSdk | undefined;
657
- updateLocalization: SetStoreFunction<LocalizationStrings>;
658
- };
659
-
660
686
  declare class FeedbackParser {
661
687
  private timeWindow;
662
688
  private decayRate;
@@ -695,7 +721,7 @@ export declare type FrameAnalysisError = {
695
721
  export declare type FrameAnalysisErrorType = "analyzer-settings-unsuitable-error" | "unknown-error";
696
722
 
697
723
  /**
698
- * Copyright (c) 2023 Microblink Ltd. All rights reserved.
724
+ * Copyright (c) 2024 Microblink Ltd. All rights reserved.
699
725
  *
700
726
  * ANY UNAUTHORIZED USE OR SALE, DUPLICATION, OR DISTRIBUTION
701
727
  * OF THIS PROGRAM OR ANY OF ITS PARTS, IN SOURCE OR BINARY FORMS,
@@ -729,7 +755,7 @@ export declare type FrameAnalysisStatus = {
729
755
  export declare const getBase64StringFromDataURL: (dataURL: string) => string;
730
756
 
731
757
  /**
732
- * Copyright (c) 2023 Microblink Ltd. All rights reserved.
758
+ * Copyright (c) 2024 Microblink Ltd. All rights reserved.
733
759
  *
734
760
  * ANY UNAUTHORIZED USE OR SALE, DUPLICATION, OR DISTRIBUTION
735
761
  * OF THIS PROGRAM OR ANY OF ITS PARTS, IN SOURCE OR BINARY FORMS,
@@ -747,7 +773,7 @@ export declare enum LicenseTokenState {
747
773
  }
748
774
 
749
775
  /**
750
- * Copyright (c) 2023 Microblink Ltd. All rights reserved.
776
+ * Copyright (c) 2024 Microblink Ltd. All rights reserved.
751
777
  *
752
778
  * ANY UNAUTHORIZED USE OR SALE, DUPLICATION, OR DISTRIBUTION
753
779
  * OF THIS PROGRAM OR ANY OF ITS PARTS, IN SOURCE OR BINARY FORMS,
@@ -758,8 +784,10 @@ export declare enum LicenseTokenState {
758
784
  */
759
785
  export declare type LicenseUnlockResult = Readonly<{
760
786
  isTrial: boolean;
787
+ hasPing: boolean;
761
788
  licenseId: string;
762
789
  licensee: string;
790
+ applicationIds: Array<string>;
763
791
  packageName: string;
764
792
  sdkName: string;
765
793
  sdkVersion: string;
@@ -796,7 +824,11 @@ declare type Local<T> = Omit<LocalObject<T>, keyof ProxyMethods> & (T extends (.
796
824
  }): MaybePromise<Local<Unpromisify<TInstance>>>;
797
825
  } : unknown);
798
826
 
799
- declare type LocalizationStrings = typeof _default;
827
+ declare type LocaleRecord = typeof _default;
828
+
829
+ declare type LocalizationStrings = {
830
+ [K in keyof LocaleRecord]: LocaleRecord[K] | (string & {});
831
+ };
800
832
 
801
833
  /**
802
834
  * Takes the type of an object as a remote thread would see it through a proxy (e.g. when passed in as a function
@@ -1033,6 +1065,8 @@ declare interface StoreApi<T> {
1033
1065
  destroy: () => void;
1034
1066
  }
1035
1067
 
1068
+ export declare type StrictnessLevel = "disabled" | "strict" | "normal" | "relaxed";
1069
+
1036
1070
  /**
1037
1071
  * Branded type for type safety. Requires casting where required.
1038
1072
  */
@@ -1058,7 +1092,15 @@ declare type UiSettings = {
1058
1092
  /**
1059
1093
  * User provided localization keys
1060
1094
  */
1061
- localization?: Partial<Record<keyof LocalizationStrings, string>>;
1095
+ localization?: Partial<LocalizationStrings>;
1096
+ /**
1097
+ * If `true`, the SDK will be destroyed when the component is dismounted.
1098
+ * This is useful if you want to re-initialize the SDK on the same page.
1099
+ *
1100
+ * Defaults to `true` when using `createCaptureUi` and `false` when using
1101
+ * `createCaptureUiWithInstance`.
1102
+ */
1103
+ destroyInstanceOnDismount?: boolean;
1062
1104
  };
1063
1105
 
1064
1106
  export declare type UiState = Readonly<{