adminizer 4.3.0-build.73 → 4.3.0-build.74
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.
- package/assets/app.js +2 -2
- package/assets/login-CUDpGsHl.js +1 -0
- package/assets/manifest.json +1 -1
- package/helpers/inertiaAutHelper.js +19 -0
- package/interfaces/adminpanelConfig.d.ts +12 -0
- package/package.json +1 -1
- package/translations/ar.json +5 -4
- package/translations/cn.json +5 -4
- package/translations/de.json +72 -71
- package/translations/en.json +5 -4
- package/translations/es.json +5 -4
- package/translations/fr.json +5 -4
- package/translations/hi.json +5 -4
- package/translations/jp.json +5 -4
- package/translations/ko.json +5 -4
- package/translations/pt.json +5 -4
- package/translations/ru.json +2 -1
- package/translations/ua.json +5 -4
- package/translations/uz.json +73 -72
- package/translations/vi.json +5 -4
- package/assets/login-BR9cqsPn.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as Oe,r as se,q as ze,a1 as De,j as c,a as be,I as _e,B as ke,$ as ve,T as Ge,a2 as Se,L as Ke,t as Ie}from"./app.js";import{Icon as ue}from"./icon-ChQBPA5l.js";import fe from"./input-error-g1h6ps7t.js";import{i as We}from"./use-appearance-CXP5cHaQ.js";const je=(e,t,s)=>{let r=1n,n=e%s;for(;t;)t&1n&&(r=r*n%s),n=n*n%s,t=t>>1n;return r};function oe(e,t,s){return typeof e=="bigint"&&typeof t=="bigint"&&typeof s=="bigint"?je(e,t,s):Number(je(BigInt(e),BigInt(t),BigInt(s)))}const k=crypto,qe=new TextEncoder,Ve=new TextDecoder("utf-8",{ignoreBOM:!0}),Q={encode:e=>qe.encode(e),decode:e=>Ve.decode(e)},Le=(()=>{const t=[..."0123456789abcdef"],s=new Array(256);for(let r=0;r<256;r++)s[r]=`${t[r>>>4&15]}${t[r&15]}`;return s})(),Xe=(()=>{const e={};for(let t=0;t<256;t++){const s=Le[t],r=s[0],n=r.toUpperCase(),i=s[1],o=i.toUpperCase();e[s]=t,e[`${r}${o}`]=t,e[`${n}${i}`]=t,e[`${n}${o}`]=t}return e})(),Je=e=>!(e.length%2||!/^[a-fA-F0-9]*$/.test(e)),ge={encode:e=>{let t="";for(let s=0,r=e.length;s<r;s++)t+=Le[e[s]];return t},encodeStr:e=>ge.encode(Q.encode(e)),decode:e=>{const t=e.length/2,s=new Uint8Array(t);for(let r=0;r<t;r++)s[r]=Xe[e.slice(r*2,r*2+2)];return s},decodeStr:e=>Q.decode(ge.decode(e)),is:Je},Te=e=>ge.encode(e),Ce=new TextEncoder,re=e=>{const t=async o=>o instanceof Uint8Array?k.subtle.importKey("raw",o,{name:"PBKDF2"},!1,["deriveBits"]):typeof o=="string"?t(Ce.encode(o.normalize())):o,s=(o,a,l,d)=>(a=typeof a=="string"?Ce.encode(a):a,k.subtle.deriveBits({name:"PBKDF2",salt:a,iterations:l,hash:{name:e}},o,d)),r=async(o,a,l,d)=>{const p=await t(o);return await s(p,a,l,d*8)},n=async(o,a,l,d)=>new Uint8Array(await r(o,a,l,d)),i=async(o,a,l,d)=>Te(await n(o,a,l,d));return i.buffer=r,i.hex=i,i.uint8=n,i},Pe={sha1:re("SHA-1"),sha256:re("SHA-256"),sha384:re("SHA-384"),sha512:re("SHA-512")},he=e=>{const t=new Uint8Array(e);return k.getRandomValues(t),t},Ye=new TextEncoder,ie=e=>{const t=n=>(n=typeof n=="string"?Ye.encode(n):n,k.subtle.digest(e,n)),s=async n=>new Uint8Array(await t(n)),r=async n=>Te(await s(n));return r.buffer=t,r.hex=r,r.uint8=s,r};ie("SHA-1");const Ue=ie("SHA-256");ie("SHA-384");ie("SHA-512");const w={encode:e=>{if(e!==e>>0)throw new Error("Invalid 32-bit integer");const t=e>>24&255,s=e>>16&255,r=e>>8&255,n=e>>0&255;return new Uint8Array([t,s,r,n])},decode:e=>{if(e.length!==4)throw new Error("Invalid 32-bit integer");const t=e[0],s=e[1],r=e[2],n=e[3];return(t<<24)+(s<<16)+(r<<8)+(n<<0)}},Me=e=>{const t=e.reduce((r,n)=>r+n.byteLength,0),s=new Uint8Array(t);for(let r=0,n=0,i=e.length;n<i;n++)s.set(e[n],r),r+=e[n].byteLength;return s},Qe=async(e,t,s,r)=>{e=typeof e=="string"?Q.encode(e):e,s=typeof s=="string"?Q.encode(s):s||he(32),s=s.length===32?s:await Ue.uint8(s);const n=new Uint8Array([1]),i=Math.max(1,r||0),o=await Pe.sha256.uint8(t,s,i,32),a=await k.subtle.importKey("raw",o,"AES-GCM",!1,["encrypt"]),l=he(16),d=await k.subtle.encrypt({name:"AES-GCM",iv:l,length:256,tagLength:128},a,e),p=new Uint8Array(d);return Me([n,s,w.encode(i),l,p])},Ze=async(e,t)=>{if(e[0]!==1)throw new Error("Unsupported encrypted archive version");const r=e.subarray(1,33),n=w.decode(e.subarray(33,37)),i=e.subarray(37,53),o=e.subarray(53),a=await Pe.sha256.uint8(t,r,n,32),l=await k.subtle.importKey("raw",a,"AES-GCM",!1,["decrypt"]),d=await k.subtle.decrypt({name:"AES-GCM",iv:i,length:256,tagLength:128},l,o);return new Uint8Array(d)},Be=Object.freeze(Object.defineProperty({__proto__:null,decrypt:Ze,encrypt:Qe},Symbol.toStringTag,{value:"Module"}));function Y(e){let t,s=0;return()=>((!t||s===t.length)&&(t=new e(65536/(e.BYTES_PER_ELEMENT*8)),s=0,k.getRandomValues(t)),t[s++])}function en(e,t){let s=0,r=t;return()=>(r===t&&(s=e(),r=0),s&1<<r++?1:0)}const Z={get1:en(Y(Uint8Array),8),get8:Y(Uint8Array),get16:Y(Uint16Array),get32:Y(Uint32Array),get64:Y(BigUint64Array)},nn=Object.assign(()=>BigInt(Z.get1()),{BITS:1}),tn=Object.assign(()=>BigInt(Z.get8()),{BITS:8}),sn=Object.assign(()=>BigInt(Z.get16()),{BITS:16}),rn=Object.assign(()=>BigInt(Z.get32()),{BITS:32}),on=Object.assign(()=>Z.get64(),{BITS:64}),f=e=>{const t=e<=1?nn:e<=8?tn:e<=16?sn:e<=32?rn:on,s=t.BITS;if(e===s)return t();if(e===128)return t()<<64n|t();if(e===160)return f(128)<<32n|f(32);if(e===192)return f(128)<<64n|f(64);if(e===224)return f(160)<<64n|f(64);if(e===256)return f(128)<<128n|f(128);if(e===384)return f(256)<<128n|f(128);if(e===512)return f(256)<<256n|f(256);if(e===1024)return f(512)<<512n|f(512);if(e===2048)return f(1024)<<1024n|f(1024);let r=0,n=0n;for(;r<e;){const i=Math.min(s,e-r),o=2n**BigInt(i)-1n,l=t()&o;if(e===i)return l;n=r?n|l<<BigInt(r):l,r+=i}return n},Re=(e,t)=>{if(e=BigInt(e),t=BigInt(t),e<0n||t<0n)throw new Error("Negative ranges are not supported");if(t<=e)throw new Error('"max" must be at least equal to "min" plus 1');const s=t-e-1n,r=s.toString(2).length;for(;;){const n=f(r);if(!(n>s))return n+e}},Ae=[2n,3n,5n,7n,11n,13n,17n,19n,23n,29n,31n,37n,41n,43n,47n,53n,59n,61n,67n,71n,73n,79n,83n,89n,97n,101n,103n,107n,109n,113n,127n,131n,137n,139n,149n,151n,157n,163n,167n,173n,179n,181n,191n,193n,197n,199n,211n,223n,227n,229n,233n,239n,241n,251n,257n,263n,269n,271n,277n,281n,283n,293n,307n,311n,313n,317n,331n,337n,347n,349n,353n,359n,367n,373n,379n,383n,389n,397n,401n,409n,419n,421n,431n,433n,439n,443n,449n,457n,461n,463n,467n,479n,487n,491n,499n,503n,509n,521n,523n,541n,547n,557n,563n,569n,571n,577n,587n,593n,599n,601n,607n,613n,617n,619n,631n,641n,643n,647n,653n,659n,661n,673n,677n,683n,691n,701n,709n,719n,727n,733n,739n,743n,751n,757n,761n,769n,773n,787n,797n,809n,811n,821n,823n,827n,829n,839n,853n,857n,859n,863n,877n,881n,883n,887n,907n,911n,919n,929n,937n,941n,947n,953n,967n,971n,977n,983n,991n,997n],cn=(e,t=8)=>{if(e<=1n)return!1;for(let n=0,i=Ae.length;n<i;n++){const o=Ae[n];if(e%o===0n)return e===o}if(e<=1000n)return!1;let s=0n,r=e-1n;for(;(r&1n)===0n;)s+=1n,r>>=1n;for(let n=0;n<t;n++){const i=Re(2n,e-2n);let o=oe(i,r,e),a=0n;for(let l=0;l<s;l++){if(a=oe(o,2n,e),a===1n&&o!==1n&&o!==e-1n)return!1;o=a}if(a!==1n)return!1}return!0},Ne=(e,t=8)=>{let s=f(e);for((s&1n)===0n&&(s+=1n);;){if(cn(s,t))return s;s+=2n}},x={encode:e=>{let t=0n;for(let s=0,r=e.length;s<r;s++)t|=BigInt(e[s])<<(BigInt(r)-BigInt(s)-1n)*8n;return t},decode:e=>{if(e<0n)throw new Error("Negative BigInts are not supported");const t=[];for(;e;)t.push(Number(e&0xffn)),e>>=8n;return new Uint8Array(t.reverse())}},Ee={archive:e=>{const[t,s,r,n,i]=e,o=x.decode(t),a=w.encode(o.length),l=x.decode(s),d=w.encode(l.length),p=x.decode(r),h=w.encode(p.length),g=x.decode(n),m=w.encode(g.length);return Me([a,o,d,l,h,p,m,g,i])},unarchive:e=>{const s=e.slice(0,4),r=w.decode(s),n=4,i=e.slice(n,n+r),o=x.encode(i),a=n+r,l=e.slice(a,a+4),d=w.decode(l),p=a+4,h=e.slice(p,p+d),g=x.encode(h),m=p+d,y=e.slice(m,m+4),v=w.decode(y),u=m+4,E=e.slice(u,u+v),S=x.encode(E),b=u+v,I=e.slice(b,b+4),_=w.decode(I),j=b+4,C=e.slice(j,j+_),B=x.encode(C),A=j+_,N=e.slice(A);return[o,g,S,B,N]}},an=(e,t,s)=>{let r=e%s;if(t<=BigInt(Number.MAX_SAFE_INTEGER))for(let n=Number(t);n>0;n--)r=r*r%s;else for(let n=t;n>0n;n--)r=r*r%s;return r%s},ln={generate:async e=>{const t=e.primeBits??100,s=e.primeRounds??20,r=e.opsPerSecond??33e5,n=e.duration??1e3,i=e.message,o=Ne(t,s),a=Ne(t,s),l=o*a,d=(o-1n)*(a-1n),p=r,h=n,g=BigInt(Math.round(Math.max(1,p/1e3)*h)),m=await Ue.uint8(he(32)),y=i,v=await Be.encrypt(y,m),u=Re(1n,l-1n),E=oe(2n,g,d),S=oe(u,E,l),b=x.encode(m)+S;return Ee.archive([l,u,g,b,v])},solve:async e=>{const[t,s,r,n,i]=Ee.unarchive(e),o=an(s,r,t),a=x.decode(n-o),l=await Be.decrypt(i,a);return Q.decode(l)}};function yn(){const e=Oe.c(88),[t,s]=se.useState(!1);let r;e[0]===Symbol.for("react.memo_cache_sentinel")?(r=[],e[0]=r):r=e[0],se.useEffect(un,r);const n=ze(),i=Array.isArray(n.props.captchaTask)&&n.props.captchaTask.length>0,[o,a]=se.useState("I'm not a robot"),[l,d]=se.useState(!1);let p;e[1]===Symbol.for("react.memo_cache_sentinel")?(p={login:"",password:"",captchaSolution:""},e[1]=p):p=e[1];const{post:h,data:g,setData:m,processing:y,transform:v,errors:u,clearErrors:E}=De(p);let S;e[2]!==i||e[3]!==n.props.captchaTask||e[4]!==n.props.submitLink||e[5]!==h||e[6]!==v?(S=L=>{if(L.preventDefault(),!i){h(n.props.submitLink,{onError:pn});return}s(!0),a("Solving CAPTCHA..."),d(!1),(async()=>{try{await function(Fe){return new Promise(He=>setTimeout(He,Fe))}(100);const we=new Uint8Array(n.props.captchaTask),$e=await ln.solve(we);a("Verification complete!"),s(!1),d(!0),v(xe=>({...xe,captchaSolution:$e})),h(n.props.submitLink,{onError:dn})}catch(ye){console.error("Error solving CAPTCHA:",ye),a("Error solving CAPTCHA. Try again.")}})()},e[2]=i,e[3]=n.props.captchaTask,e[4]=n.props.submitLink,e[5]=h,e[6]=v,e[7]=S):S=e[7];const b=S;let I;e[8]!==E||e[9]!==m?(I=(L,me)=>{E(),m(L,me)},e[8]=E,e[9]=m,e[10]=I):I=e[10];const _=I;let j;e[11]===Symbol.for("react.memo_cache_sentinel")?(j=c.jsx(Ge,{position:"top-center",richColors:!0,closeButton:!0}),e[11]=j):j=e[11];let C;e[12]!==n.props.title?(C=c.jsx("h1",{className:"font-medium mb-6 text-xl",children:n.props.title}),e[12]=n.props.title,e[13]=C):C=e[13];let B;e[14]!==n.props.description?(B=n.props.description&&c.jsx("p",{className:"font-thin mb-6 text-xs pb-10",children:n.props.description}),e[14]=n.props.description,e[15]=B):B=e[15];let A;e[16]!==u.captchaSolution||e[17]!==i?(A=i&&c.jsx(fe,{message:u.captchaSolution}),e[16]=u.captchaSolution,e[17]=i,e[18]=A):A=e[18];let N;e[19]!==n.props.login?(N=c.jsx(be,{htmlFor:"login",children:n.props.login}),e[19]=n.props.login,e[20]=N):N=e[20];let ee;e[21]===Symbol.for("react.memo_cache_sentinel")?(ee=c.jsx(ue,{iconNode:Se,className:"size-5 absolute inset-2"}),e[21]=ee):ee=e[21];const ce=`pl-10 ${u.login?"border-red-500":""}`,ae=y||t;let T;e[22]!==_?(T=L=>{_("login",L.target.value)},e[22]=_,e[23]=T):T=e[23];let P;e[24]!==g.login||e[25]!==n.props.login||e[26]!==ce||e[27]!==ae||e[28]!==T?(P=c.jsx(_e,{id:"login",className:ce,type:"text",required:!0,tabIndex:1,autoComplete:"username",value:g.login,disabled:ae,onChange:T,placeholder:n.props.login}),e[24]=g.login,e[25]=n.props.login,e[26]=ce,e[27]=ae,e[28]=T,e[29]=P):P=e[29];let U;e[30]!==u.login?(U=c.jsx(fe,{message:u.login}),e[30]=u.login,e[31]=U):U=e[31];let M;e[32]!==P||e[33]!==U?(M=c.jsxs("div",{className:"relative",children:[ee,P,U]}),e[32]=P,e[33]=U,e[34]=M):M=e[34];let R;e[35]!==M||e[36]!==N?(R=c.jsxs("div",{className:"grid gap-4",children:[N,M]}),e[35]=M,e[36]=N,e[37]=R):R=e[37];let $;e[38]!==n.props.password?($=c.jsx(be,{htmlFor:"login",children:n.props.password}),e[38]=n.props.password,e[39]=$):$=e[39];let ne;e[40]===Symbol.for("react.memo_cache_sentinel")?(ne=c.jsx(ue,{iconNode:Se,className:"size-5 absolute inset-2"}),e[40]=ne):ne=e[40];const le=`pl-10 ${u.password?"border-red-500":""}`,de=y||t;let F;e[41]!==_?(F=L=>{_("password",L.target.value)},e[41]=_,e[42]=F):F=e[42];let H;e[43]!==g.password||e[44]!==n.props.password||e[45]!==le||e[46]!==de||e[47]!==F?(H=c.jsx(_e,{id:"password",className:le,type:"password",required:!0,disabled:de,tabIndex:1,autoComplete:"current-password",value:g.password,onChange:F,placeholder:n.props.password}),e[43]=g.password,e[44]=n.props.password,e[45]=le,e[46]=de,e[47]=F,e[48]=H):H=e[48];let O;e[49]!==u.password?(O=c.jsx(fe,{message:u.password}),e[49]=u.password,e[50]=O):O=e[50];let z;e[51]!==H||e[52]!==O?(z=c.jsxs("div",{className:"relative",children:[ne,H,O]}),e[51]=H,e[52]=O,e[53]=z):z=e[53];let D;e[54]!==$||e[55]!==z?(D=c.jsxs("div",{className:"grid gap-4",children:[$,z]}),e[54]=$,e[55]=z,e[56]=D):D=e[56];const pe=y||t;let G;e[57]!==n.props.submitButton||e[58]!==pe?(G=c.jsx(ke,{type:"submit",className:"w-fit",disabled:pe,children:n.props.submitButton}),e[57]=n.props.submitButton,e[58]=pe,e[59]=G):G=e[59];let K;e[60]!==t||e[61]!==n.props.registerLink||e[62]!==y?(K=n.props.registerLink&&c.jsx(ke,{asChild:!0,variant:"outline",children:c.jsx(ve,{href:n.props.registerLink.link,className:`${y||t} ? 'pointer-events-none opacity-50' : ''`,children:n.props.registerLink.title})}),e[60]=t,e[61]=n.props.registerLink,e[62]=y,e[63]=K):K=e[63];let W;e[64]!==G||e[65]!==K?(W=c.jsxs("div",{className:"flex gap-4",children:[G,K]}),e[64]=G,e[65]=K,e[66]=W):W=e[66];let q;e[67]!==R||e[68]!==D||e[69]!==W||e[70]!==A?(q=c.jsxs("div",{className:"grid gap-5",children:[A,R,D,W]}),e[67]=R,e[68]=D,e[69]=W,e[70]=A,e[71]=q):q=e[71];let V;e[72]!==o||e[73]!==t||e[74]!==i||e[75]!==l?(V=i&&c.jsxs("div",{className:"bg-white rounded-lg shadow-lg p-4 mt-6 flex items-center space-x-4",children:[c.jsxs("div",{className:"relative",children:[c.jsx("div",{className:"w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center",children:c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-6 w-6 text-yellow-500",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2",children:c.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 22 12 18.27 5.82 22 7 14.14l-5-4.87 6.91-1.01L12 2z"})})}),c.jsx("div",{className:`${t?"":"hidden"}`,children:c.jsx(ue,{iconNode:Ke,className:"animate-spin size-6 absolute inset-0 m-auto !text-gray-600"})})]}),c.jsx("div",{className:"text-gray-600 font-semibold",children:o}),c.jsx("div",{className:`transition-opacity ${l?"opacity-100 visible":"opacity-0 invisible"}`,children:c.jsx("svg",{id:"checkmark",xmlns:"http://www.w3.org/2000/svg",className:"h-8 w-8 text-green-500",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",children:c.jsx("path",{className:"checkmark",strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"})})})]}),e[72]=o,e[73]=t,e[74]=i,e[75]=l,e[76]=V):V=e[76];let X;e[77]!==b||e[78]!==q||e[79]!==V?(X=c.jsxs("form",{onSubmit:b,children:[q,V]}),e[77]=b,e[78]=q,e[79]=V,e[80]=X):X=e[80];let J;e[81]!==n.props.addishinalLoginPage?(J=n.props.addishinalLoginPage&&c.jsx("div",{className:"mt-6 text-center",children:c.jsx(ve,{href:n.props.addishinalLoginPage.link,className:"text-sm underline",target:n.props.addishinalLoginPage.link.startsWith("http://")||n.props.addishinalLoginPage.link.startsWith("https://")?"_blank":void 0,rel:n.props.addishinalLoginPage.link.startsWith("http://")||n.props.addishinalLoginPage.link.startsWith("https://")?"noopener noreferrer":void 0,children:n.props.addishinalLoginPage.title})}),e[81]=n.props.addishinalLoginPage,e[82]=J):J=e[82];let te;return e[83]!==X||e[84]!==J||e[85]!==C||e[86]!==B?(te=c.jsxs("div",{className:"bg-sidebar flex min-h-svh w-full justify-center",children:[j,c.jsxs("div",{className:"rounded-xl border bg-card text-card-foreground shadow p-6 max-w-sm w-full h-fit mt-[15%]",children:[C,B,X,J]})]}),e[83]=X,e[84]=J,e[85]=C,e[86]=B,e[87]=te):te=e[87],te}function dn(e){for(const t of Object.keys(e))Ie.error(e[t])}function pn(e){for(const t of Object.keys(e))Ie.error(e[t])}function un(){We()}export{yn as default};
|
package/assets/manifest.json
CHANGED
|
@@ -11,6 +11,25 @@ export function inertiaLoginHelper(req) {
|
|
|
11
11
|
link: `${req.adminizer.config.routePrefix}/model/userap/register`
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
+
// Optional additional link at the bottom of login page
|
|
15
|
+
const addPage = req.adminizer.config.auth?.addishinalLoginPage;
|
|
16
|
+
if (addPage && typeof addPage.link === 'string' && addPage.link.length > 0) {
|
|
17
|
+
const raw = addPage.link;
|
|
18
|
+
let link = raw;
|
|
19
|
+
if (/^https?:\/\//i.test(raw)) {
|
|
20
|
+
link = raw; // absolute URL
|
|
21
|
+
}
|
|
22
|
+
else if (raw.startsWith(`/${req.adminizer.config.routePrefix}`)) {
|
|
23
|
+
link = `${raw}`;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
link = `${req.adminizer.config.routePrefix}/${raw}`;
|
|
27
|
+
}
|
|
28
|
+
props.addishinalLoginPage = {
|
|
29
|
+
title: req.i18n.__(addPage.textKey || 'Additional login page'),
|
|
30
|
+
link,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
14
33
|
return props;
|
|
15
34
|
}
|
|
16
35
|
export function inertiaRegisterHelper(req) {
|
|
@@ -36,6 +36,18 @@ export interface AdminpanelConfig {
|
|
|
36
36
|
captcha?: boolean;
|
|
37
37
|
/** Description displayed on login page */
|
|
38
38
|
description?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Optional additional link at the bottom of the login page
|
|
41
|
+
* Example:
|
|
42
|
+
* addishinalLoginPage: { link: '/model/userap/register', textKey: 'Additional login page' }
|
|
43
|
+
* link can be relative to routePrefix (e.g. 'model/help' or '/model/help') or absolute (https://...)
|
|
44
|
+
*/
|
|
45
|
+
addishinalLoginPage?: {
|
|
46
|
+
/** Target URL; relative to routePrefix unless absolute */
|
|
47
|
+
link: string;
|
|
48
|
+
/** Optional i18n key for label; defaults to 'Additional login page' */
|
|
49
|
+
textKey?: string;
|
|
50
|
+
};
|
|
39
51
|
};
|
|
40
52
|
/**
|
|
41
53
|
* @alpha
|
package/package.json
CHANGED
package/translations/ar.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "ﺕﺍءﺍﺮﺟﻹﺍ",
|
|
4
4
|
"All": "ﻊﻴﻤﺠﻟﺍ",
|
|
5
5
|
"Are you sure?": "؟ﺪﻛﺄﺘﻣ ﺖﻧﺃ ﻞﻫ",
|
|
6
|
-
"Back": "ﻒﻠﺧ",
|
|
7
|
-
"Back to Login": "ﻝﻮﺧﺪﻟﺍ ﻞﻴﺠﺴﺗ ﻰﻟﺇ ﺓﺩﻮﻌﻟﺍ",
|
|
8
|
-
"
|
|
6
|
+
"Back": "ﻒﻠﺧ",
|
|
7
|
+
"Back to Login": "ﻝﻮﺧﺪﻟﺍ ﻞﻴﺠﺴﺗ ﻰﻟﺇ ﺓﺩﻮﻌﻟﺍ",
|
|
8
|
+
"Additional login page": "صفحة تسجيل دخول إضافية",
|
|
9
|
+
"Clean": "Clean",
|
|
9
10
|
"Confirm Password": "ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ ﺪﻴﻛﺄﺗ",
|
|
10
11
|
"Confirm Password*": "*ﺭﻭﺮﻤﻟﺍ ﺔﻤﻠﻛ ﺪﻴﻛﺄﺗ",
|
|
11
12
|
"Create": "ﻖﻠﺨﻳ",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": ".ﻦﻴﻤﻴﻟﺍ ﻰﻠﻋﺃ ﻲﻓ Plus ﺔﻣﻼﻋ ﻕﻮﻓ ﺮﻘﻨﻟﺎﺑ ﺎﻬﺘﻓﺎﺿﺇ ﻚﻨﻜﻤﻳ .ﻥﻵﺍ ﻰﺘﺣ ﺓﺩﺪﺤﻣ ﺓﺮﻐﺼﻣ ﻱﺃ ﻚﻳﺪ",
|
|
70
71
|
"create": "ﻖﻠﺨﻳ",
|
|
71
72
|
"create new": "ﺪﻳﺪﺟ ءﺎﺸﻧﺇ"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/cn.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "动作",
|
|
4
4
|
"All": "全部",
|
|
5
5
|
"Are you sure?": "你确定吗?",
|
|
6
|
-
"Back": "后退",
|
|
7
|
-
"Back to Login": "返回登录",
|
|
8
|
-
"
|
|
6
|
+
"Back": "后退",
|
|
7
|
+
"Back to Login": "返回登录",
|
|
8
|
+
"Additional login page": "额外的登录页面",
|
|
9
|
+
"Clean": "干净的",
|
|
9
10
|
"Confirm Password": "确认密码",
|
|
10
11
|
"Confirm Password*": "确认密码*",
|
|
11
12
|
"Create": "创造",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "您还没有选择任何小部件。您可以通过单击右上角的加号来添加它们。",
|
|
70
71
|
"create": "创造",
|
|
71
72
|
"create new": "创建新"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/de.json
CHANGED
|
@@ -1,72 +1,73 @@
|
|
|
1
1
|
{
|
|
2
|
-
"Action completed": "Aktion abgeschlossen",
|
|
3
|
-
"Actions": "Aktionen",
|
|
4
|
-
"All": "Alle",
|
|
5
|
-
"Are you sure?": "Bist du sicher?",
|
|
6
|
-
"Back": "Zurück",
|
|
7
|
-
"Back to Login": "Zurück zum Anmeldung",
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"Confirm Password
|
|
11
|
-
"
|
|
12
|
-
"Create
|
|
13
|
-
"Create
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"Full
|
|
22
|
-
"
|
|
23
|
-
"Group
|
|
24
|
-
"Group
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"Is
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"No
|
|
36
|
-
"No
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"Record was removed
|
|
49
|
-
"Record was
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"Select
|
|
57
|
-
"Select
|
|
58
|
-
"Select
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"User
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"create
|
|
72
|
-
|
|
2
|
+
"Action completed": "Aktion abgeschlossen",
|
|
3
|
+
"Actions": "Aktionen",
|
|
4
|
+
"All": "Alle",
|
|
5
|
+
"Are you sure?": "Bist du sicher?",
|
|
6
|
+
"Back": "Zurück",
|
|
7
|
+
"Back to Login": "Zurück zum Anmeldung",
|
|
8
|
+
"Additional login page": "Zusätzliche Anmeldeseite",
|
|
9
|
+
"Clean": "Sauber",
|
|
10
|
+
"Confirm Password": "Passwort bestätigen",
|
|
11
|
+
"Confirm Password*": "Passwort bestätigen*",
|
|
12
|
+
"Create": "Erstellen",
|
|
13
|
+
"Create a new administrator": "Erstellen Sie einen neuen Administrator",
|
|
14
|
+
"Create an Account": "Ein Konto erstellen",
|
|
15
|
+
"Custom": "Brauch",
|
|
16
|
+
"Delete": "Löschen",
|
|
17
|
+
"E-mail": "E-Mail",
|
|
18
|
+
"Edit": "Bearbeiten",
|
|
19
|
+
"Email": "E-Mail",
|
|
20
|
+
"Fast links": "Schnelle Links",
|
|
21
|
+
"Full Name": "Vollständiger Name",
|
|
22
|
+
"Full name": "Vollständiger Name",
|
|
23
|
+
"Group description": "Gruppenbeschreibung",
|
|
24
|
+
"Group name": "Gruppenname",
|
|
25
|
+
"Group settings": "Gruppeneinstellungen",
|
|
26
|
+
"Info": "Info",
|
|
27
|
+
"Is Administrator": "Ist Administrator",
|
|
28
|
+
"Is confirmed": "Wird bestätigt",
|
|
29
|
+
"Link": "Link",
|
|
30
|
+
"Locale": "Gebietsschema",
|
|
31
|
+
"Log in": "Einloggen",
|
|
32
|
+
"Login": "Login",
|
|
33
|
+
"Members": "Mitglieder",
|
|
34
|
+
"New record was created": "Neuer Rekord wurde erstellt",
|
|
35
|
+
"No": "NEIN",
|
|
36
|
+
"No records found !": "Keine Aufzeichnungen gefunden!",
|
|
37
|
+
"No widgets found": "Keine Widgets gefunden",
|
|
38
|
+
"Not found": "Nicht gefunden",
|
|
39
|
+
"OR": "ODER",
|
|
40
|
+
"Open in a new window": "Öffnen Sie in einem neuen Fenster",
|
|
41
|
+
"Password": "Passwort",
|
|
42
|
+
"Passwords do not match!": "Passwörter stimmen nicht überein!",
|
|
43
|
+
"Performing an action...": "Eine Aktion ausführen ...",
|
|
44
|
+
"Please fill out the fields below": "Bitte füllen Sie die folgenden Felder aus",
|
|
45
|
+
"Pretend to be a user": "Vorgeben, Benutzer zu sein",
|
|
46
|
+
"Profile expires": "Profil läuft ab",
|
|
47
|
+
"Quick actions": "Schnelle Aktionen",
|
|
48
|
+
"Record was not removed": "Rekord wurde nicht entfernt",
|
|
49
|
+
"Record was removed successfully !": "Rekord wurde erfolgreich entfernt!",
|
|
50
|
+
"Record was updated": "Der Datensatz wurde aktualisiert",
|
|
51
|
+
"Register": "Registrieren",
|
|
52
|
+
"Repeat password": "Passwort wiederholen",
|
|
53
|
+
"Reset": "Zurücksetzen",
|
|
54
|
+
"Save": "Speichern",
|
|
55
|
+
"Search": "Suchen",
|
|
56
|
+
"Select": "Wählen",
|
|
57
|
+
"Select Ids": "IDS auswählen",
|
|
58
|
+
"Select Item type": "Wählen Sie den Elementtyp",
|
|
59
|
+
"Select Items": "Elemente auswählen",
|
|
60
|
+
"Switcher": "Schalter",
|
|
61
|
+
"Timezone": "Zeitzone",
|
|
62
|
+
"Title": "Titel",
|
|
63
|
+
"Toggle to change the grid. To save the grid, turn it off.": "Umschalten, um das Netz zu ändern. Um das Netz zu retten, schalten Sie es aus.",
|
|
64
|
+
"User groups": "Benutzergruppen",
|
|
65
|
+
"User settings": "Benutzereinstellungen",
|
|
66
|
+
"Values in \"password\" and \"repeatPassword\" fields should be the same": "Werte in \"Passwort\" und \"RepeatPassword\" -Feldern sollten gleich sein",
|
|
67
|
+
"View": "Sicht",
|
|
68
|
+
"Welcome": "Willkommen",
|
|
69
|
+
"Yes": "Ja",
|
|
70
|
+
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Sie haben noch keine Widgets ausgewählt. Sie können sie hinzufügen, indem Sie oben rechts auf das Pluszeichen klicken.",
|
|
71
|
+
"create": "erstellen",
|
|
72
|
+
"create new": "neu erstellen"
|
|
73
|
+
}
|
package/translations/en.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Actions",
|
|
4
4
|
"All": "All",
|
|
5
5
|
"Are you sure?": "Are you sure?",
|
|
6
|
-
"Back": "Back",
|
|
7
|
-
"Back to Login": "Back to Login",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Back",
|
|
7
|
+
"Back to Login": "Back to Login",
|
|
8
|
+
"Additional login page": "Additional login page",
|
|
9
|
+
"Clean": "Clean",
|
|
9
10
|
"Confirm Password": "Confirm Password",
|
|
10
11
|
"Confirm Password*": "Confirm Password*",
|
|
11
12
|
"Create": "Create",
|
|
@@ -139,4 +140,4 @@
|
|
|
139
140
|
"Sizes/Ver": "Sizes/Ver",
|
|
140
141
|
"Locales": "Locales",
|
|
141
142
|
"Date": "Date"
|
|
142
|
-
}
|
|
143
|
+
}
|
package/translations/es.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Comportamiento",
|
|
4
4
|
"All": "Todo",
|
|
5
5
|
"Are you sure?": "¿Está seguro?",
|
|
6
|
-
"Back": "Atrás",
|
|
7
|
-
"Back to Login": "Volver a iniciar sesión",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Atrás",
|
|
7
|
+
"Back to Login": "Volver a iniciar sesión",
|
|
8
|
+
"Additional login page": "Página adicional de inicio de sesión",
|
|
9
|
+
"Clean": "Limpio",
|
|
9
10
|
"Confirm Password": "confirmar Contraseña",
|
|
10
11
|
"Confirm Password*": "Confirmar Contraseña*",
|
|
11
12
|
"Create": "Crear",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Todavía no tiene widgets seleccionados. Puede agregarlos haciendo clic en el signo más en la parte superior derecha.",
|
|
70
71
|
"create": "crear",
|
|
71
72
|
"create new": "crear nuevo"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/fr.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Actes",
|
|
4
4
|
"All": "Tous",
|
|
5
5
|
"Are you sure?": "Es-tu sûr?",
|
|
6
|
-
"Back": "Dos",
|
|
7
|
-
"Back to Login": "Retour à la connexion",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Dos",
|
|
7
|
+
"Back to Login": "Retour à la connexion",
|
|
8
|
+
"Additional login page": "Page de connexion supplémentaire",
|
|
9
|
+
"Clean": "Faire le ménage",
|
|
9
10
|
"Confirm Password": "Confirmez le mot de passe",
|
|
10
11
|
"Confirm Password*": "Confirmez le mot de passe*",
|
|
11
12
|
"Create": "Créer",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Vous n'avez pas encore de widgets sélectionnés. Vous pouvez les ajouter en cliquant sur le panneau Plus en haut à droite.",
|
|
70
71
|
"create": "créer",
|
|
71
72
|
"create new": "créer un nouveau"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/hi.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "कार्रवाई",
|
|
4
4
|
"All": "सभी",
|
|
5
5
|
"Are you sure?": "क्या आपको यकीन है?",
|
|
6
|
-
"Back": "पीछे",
|
|
7
|
-
"Back to Login": "लॉगिन पर वापस जाएं",
|
|
8
|
-
"
|
|
6
|
+
"Back": "पीछे",
|
|
7
|
+
"Back to Login": "लॉगिन पर वापस जाएं",
|
|
8
|
+
"Additional login page": "अतिरिक्त लॉगिन पृष्ठ",
|
|
9
|
+
"Clean": "साफ",
|
|
9
10
|
"Confirm Password": "पासवर्ड की पुष्टि कीजिये",
|
|
10
11
|
"Confirm Password*": "पासवर्ड की पुष्टि कीजिये*",
|
|
11
12
|
"Create": "बनाएं",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "आपके पास अभी तक कोई विजेट नहीं है। आप उन्हें शीर्ष दाईं ओर प्लस साइन पर क्लिक करके जोड़ सकते हैं।",
|
|
70
71
|
"create": "बनाएं",
|
|
71
72
|
"create new": "नया निर्माण"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/jp.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "アクション",
|
|
4
4
|
"All": "全て",
|
|
5
5
|
"Are you sure?": "本気ですか?",
|
|
6
|
-
"Back": "戻る",
|
|
7
|
-
"Back to Login": "ログインに戻ります",
|
|
8
|
-
"
|
|
6
|
+
"Back": "戻る",
|
|
7
|
+
"Back to Login": "ログインに戻ります",
|
|
8
|
+
"Additional login page": "追加のログインページ",
|
|
9
|
+
"Clean": "クリーン",
|
|
9
10
|
"Confirm Password": "パスワードを認証する",
|
|
10
11
|
"Confirm Password*": "パスワードを認証する*",
|
|
11
12
|
"Create": "作成する",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "まだ選択されているウィジェットはありません。右上のプラスサインをクリックして追加できます。",
|
|
70
71
|
"create": "作成する",
|
|
71
72
|
"create new": "新しいものを作成します"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/ko.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "행위",
|
|
4
4
|
"All": "모두",
|
|
5
5
|
"Are you sure?": "확실합니까?",
|
|
6
|
-
"Back": "뒤쪽에",
|
|
7
|
-
"Back to Login": "로그인으로 돌아갑니다",
|
|
8
|
-
"
|
|
6
|
+
"Back": "뒤쪽에",
|
|
7
|
+
"Back to Login": "로그인으로 돌아갑니다",
|
|
8
|
+
"Additional login page": "추가 로그인 페이지",
|
|
9
|
+
"Clean": "깨끗한",
|
|
9
10
|
"Confirm Password": "비밀번호를 확인하십시오",
|
|
10
11
|
"Confirm Password*": "비밀번호 확인*",
|
|
11
12
|
"Create": "만들다",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "아직 위젯이 선택되지 않았습니다. 오른쪽 상단의 플러스 부호를 클릭하여 추가 할 수 있습니다.",
|
|
70
71
|
"create": "만들다",
|
|
71
72
|
"create new": "새로운 창조"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/pt.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Ações",
|
|
4
4
|
"All": "Todos",
|
|
5
5
|
"Are you sure?": "Tem certeza?",
|
|
6
|
-
"Back": "Voltar",
|
|
7
|
-
"Back to Login": "De volta ao login",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Voltar",
|
|
7
|
+
"Back to Login": "De volta ao login",
|
|
8
|
+
"Additional login page": "Página adicional de login",
|
|
9
|
+
"Clean": "Limpar",
|
|
9
10
|
"Confirm Password": "Confirme sua senha",
|
|
10
11
|
"Confirm Password*": "Confirme sua senha*",
|
|
11
12
|
"Create": "Criar",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "Você ainda não tem widgets selecionados. Você pode adicioná -los clicando no sinal de mais no canto superior direito.",
|
|
70
71
|
"create": "criar",
|
|
71
72
|
"create new": "Crie novo"
|
|
72
|
-
}
|
|
73
|
+
}
|
package/translations/ru.json
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"Are you sure?": "Вы уверены?",
|
|
6
6
|
"Back": " Назад",
|
|
7
7
|
"Back to Login": "Назад ко входу",
|
|
8
|
+
"Additional login page": "Дополнительная страница входа",
|
|
8
9
|
"Clean": "Очистить",
|
|
9
10
|
"Confirm Password": "Подтвердите пароль",
|
|
10
11
|
"Confirm Password*": "Подтвердите пароль*",
|
|
@@ -118,4 +119,4 @@
|
|
|
118
119
|
"W x H (orig.)": "W x H (orig.)",
|
|
119
120
|
"Sizes/Ver": "Sizes/Ver",
|
|
120
121
|
"Locales": "Locales"
|
|
121
|
-
}
|
|
122
|
+
}
|
package/translations/ua.json
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
"Actions": "Дії",
|
|
4
4
|
"All": "Все",
|
|
5
5
|
"Are you sure?": "Ви впевнені?",
|
|
6
|
-
"Back": "Спинка",
|
|
7
|
-
"Back to Login": "Назад до входу",
|
|
8
|
-
"
|
|
6
|
+
"Back": "Спинка",
|
|
7
|
+
"Back to Login": "Назад до входу",
|
|
8
|
+
"Additional login page": "Додаткова сторінка входу",
|
|
9
|
+
"Clean": "Чистий",
|
|
9
10
|
"Confirm Password": "Підтвердити пароль",
|
|
10
11
|
"Confirm Password*": "Підтвердити пароль*",
|
|
11
12
|
"Create": "Створити",
|
|
@@ -69,4 +70,4 @@
|
|
|
69
70
|
"You don't have any widgets selected yet. You can add them by clicking on the plus sign at the top right.": "У вас ще не вибрано жодних віджетів. Ви можете додати їх, натиснувши на знак плюс у верхній частині праворуч.",
|
|
70
71
|
"create": "створити",
|
|
71
72
|
"create new": "створити нове"
|
|
72
|
-
}
|
|
73
|
+
}
|