@chaibuilder/pages 0.4.6 → 0.4.7

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index-Dhwd3gtU.cjs"),t=require("@chaibuilder/sdk");exports.PermissionChecker=e.PermissionChecker;exports.default=e.ChaiBuilderPages;exports.registerChaiLoginComponent=e.registerLoginComponent;exports.useChaiUserInfo=e.useChaiUserInfo;exports.useCurrentPage=e.useCurrentPage;exports.useFetch=e.useFetch;exports.useFetchUpload=e.useFetchUpload;exports.useLanguagePages=e.useLanguagePages;exports.useUserPermissions=e.useUserRoleAndPermissions;exports.useWebsitePages=e.useWebsitePages;exports.useWebsiteSetting=e.useWebsiteSetting;Object.keys(t).forEach(s=>{s!=="default"&&!Object.prototype.hasOwnProperty.call(exports,s)&&Object.defineProperty(exports,s,{enumerable:!0,get:()=>t[s]})});
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index-Cv2dcnN-.cjs"),t=require("@chaibuilder/sdk");exports.PermissionChecker=e.PermissionChecker;exports.default=e.ChaiBuilderPages;exports.registerChaiLoginComponent=e.registerLoginComponent;exports.useChaiUserInfo=e.useChaiUserInfo;exports.useCurrentPage=e.useCurrentPage;exports.useFetch=e.useFetch;exports.useFetchUpload=e.useFetchUpload;exports.useLanguagePages=e.useLanguagePages;exports.useUserPermissions=e.useUserRoleAndPermissions;exports.useWebsitePages=e.useWebsitePages;exports.useWebsiteSetting=e.useWebsiteSetting;Object.keys(t).forEach(s=>{s!=="default"&&!Object.prototype.hasOwnProperty.call(exports,s)&&Object.defineProperty(exports,s,{enumerable:!0,get:()=>t[s]})});
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { _ as a, Z as r, a0 as t, a7 as i, a1 as o, X as u, a6 as n, a2 as g, a5 as h, a3 as m, a4 as C } from "./index-Dq_xGZ55.js";
1
+ import { a0 as a, _ as r, a1 as t, a8 as i, a2 as o, X as u, a7 as n, a3 as g, a6 as h, a4 as m, a5 as C } from "./index-CSVDtkP9.js";
2
2
  export * from "@chaibuilder/sdk";
3
3
  export {
4
4
  a as PermissionChecker,
package/dist/server.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var _=Object.defineProperty;var U=(n,a,e)=>a in n?_(n,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[a]=e;var g=(n,a,e)=>U(n,typeof a!="symbol"?a+"":a,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("lodash-es"),d={},P=(n,a)=>{d[n]={key:n,...a,hasSlug:!0}},p=(n,a)=>{d[n]={key:n,...a,hasSlug:!1}},k=()=>Object.values(d),l=n=>d[n];let T=async n=>({...n});const G=n=>T=n,E=async n=>{try{return await T(n)}catch(a){return console.error(a),{}}};class v{constructor(a){this.backend=a}async upload({file:a,folderId:e,name:t}){return await this.backend.handleAssetsAction({action:"UPLOAD_ASSET",data:{name:t,file:a,folderId:e}})}async getAssets(a){return this.backend.handleAssetsAction({action:"GET_ASSETS",data:a})}async deleteAsset(a){return this.backend.handleAssetsAction({action:"DELETE_ASSET",data:{assetId:a}})}async updateAsset({id:a,file:e,description:t}){return this.backend.handleAssetsAction({action:"UPDATE_ASSET",data:{id:a,file:e,description:t}})}}class C{constructor(a){this.backend=a}async refreshToken(a){const e=await this.backend.handleUsersAction({action:"REFRESH_TOKEN",data:a});return e.error?{error:e.error}:e}async login({email:a,password:e}){const t=await this.backend.handleUsersAction({action:"LOGIN",data:{email:a,password:e}});return t.error?{error:t.error}:t}async logout(){await this.backend.handleUsersAction({action:"LOGOUT"})}async isUserActive(a){return(await this.backend.handleUsersAction({action:"CHECK_USER_STATUS"},a)).success}async getUserRoleAndPermissions(a){return await this.backend.handleUsersAction({action:"GET_ROLE_AND_PERMISSIONS"},a)}async getUserInfo(a,e){return await this.backend.handleUsersAction({action:"GET_CHAI_USER",data:e},a)}}const y={ab:"Abkhazian",aa:"Afar",af:"Afrikaans",ak:"Akan",sq:"Albanian",am:"Amharic",ar:"Arabic",an:"Aragonese",hy:"Armenian",as:"Assamese",av:"Avaric",ae:"Avestan",ay:"Aymara",az:"Azerbaijani",bm:"Bambara",ba:"Bashkir",eu:"Basque",be:"Belarusian",bn:"Bengali",bh:"Bihari",bi:"Bislama",bs:"Bosnian",br:"Breton",bg:"Bulgarian",my:"Burmese",ca:"Catalan",ch:"Chamorro",ce:"Chechen",ny:"Chichewa",zh:"Chinese","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cv:"Chuvash",kw:"Cornish",co:"Corsican",cr:"Cree",hr:"Croatian",cs:"Czech",da:"Danish",dv:"Maldivian",nl:"Dutch",dz:"Dzongkha",en:"English",eo:"Esperanto",et:"Estonian",ee:"Ewe",fo:"Faroese",fj:"Fijian",fi:"Finnish",fr:"French",ff:"Fula, Pular",gl:"Galician",gd:"Gaelic (Scottish)",gv:"Manx",ka:"Georgian",de:"German",el:"Greek",kl:"Kalaallisut",gn:"Guarani",gu:"Gujarati",ht:"Haitian Creole",ha:"Hausa",he:"Hebrew",hz:"Herero",hi:"Hindi",ho:"Hiri Motu",hu:"Hungarian",is:"Icelandic",io:"Ido",ig:"Igbo",id:"Indonesian",ia:"Interlingua",ie:"Interlingue",iu:"Inuktitut",ik:"Inupiak",ga:"Irish",it:"Italian",ja:"Japanese",jv:"Javanese",kn:"Kannada",kr:"Kanuri",ks:"Kashmiri",kk:"Kazakh",km:"Khmer",ki:"Kikuyu",rw:"Kinyarwanda",rn:"Kirundi",ky:"Kyrgyz",kv:"Komi",kg:"Kongo",ko:"Korean",ku:"Kurdish",kj:"Kwanyama",lo:"Lao",la:"Latin",lv:"Latvian",li:"Limburgish",ln:"Lingala",lt:"Lithuanian",lu:"Luga-Katanga",lg:"Luganda, Ganda",lb:"Luxembourgish",mk:"Macedonian",mg:"Malagasy",ms:"Malay",ml:"Malayalam",mt:"Maltese",mi:"Maori",mr:"Marathi",mh:"Marshallese",mo:"Moldavian",mn:"Mongolian",na:"Nauru",nv:"Navajo",ng:"Ndonga",nd:"Northern Ndebele",ne:"Nepali",no:"Norwegian",nb:"Norwegian bokmål",nn:"Norwegian nynorsk",ii:"Sichuan Yi",oc:"Occitan",oj:"Ojibwe",cu:"Old Church Slavonic",or:"Oriya",om:"Oromo",os:"Ossetian",pi:"Pāli",ps:"Pashto, Pushto",fa:"Persian (Farsi)",pl:"Polish",pt:"Portuguese",pa:"Punjabi (Eastern)",qu:"Quechua",rm:"Romansh",ro:"Romanian",ru:"Russian",se:"Sami",sm:"Samoan",sg:"Sango",sa:"Sanskrit",sr:"Serbian",sh:"Serbo-Croatian",st:"Sesotho",tn:"Setswana",sn:"Shona",sd:"Sindhi",si:"Sinhalese",ss:"Swati",sk:"Slovak",sl:"Slovenian",so:"Somali",nr:"Southern Ndebele",es:"Spanish",su:"Sundanese",sw:"Swahili (Kiswahili)",sv:"Swedish",tl:"Tagalog",ty:"Tahitian",tg:"Tajik",ta:"Tamil",tt:"Tatar",te:"Telugu",th:"Thai",bo:"Tibetan",ti:"Tigrinya",to:"Tonga",ts:"Tsonga",tr:"Turkish",tk:"Turkmen",tw:"Twi",ug:"Uyghur",uk:"Ukrainian",ur:"Urdu",uz:"Uzbek",ve:"Venda",vi:"Vietnamese",vo:"Volapük",wa:"Wallon",cy:"Welsh",wo:"Wolof",fy:"Western Frisian",xh:"Xhosa",yi:"Yiddish",yo:"Yoruba",za:"Zhuang, Chuang",zu:"Zulu"};class D{constructor(a,e,t){g(this,"fallbackLang","");g(this,"currentLang","");g(this,"draftMode",!1);this.backend=a,this.chaiUsers=e,this.chaiAssets=t,this._registerDefaultPageTypes(),this.chaiUsers=e??new C(this.backend),this.chaiAssets=t??new v(this.backend)}_registerDefaultPageTypes(){P("page",{name:"Static Page",icon:'<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M5 8V20H19V8H5ZM5 6H19V4H5V6ZM20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22ZM7 10H11V14H7V10ZM7 16H17V18H7V16ZM13 11H17V13H13V11Z"></path></svg>'}),p("global",{name:"Global Block",helpText:"A global block can be reused in multiple pages.",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe w-4 h-4 text-slate-500 stroke-[1]"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>'})}setFallbackLang(a){if(h.isEmpty(a))throw new Error("Fallback language cannot be empty");this.fallbackLang=a}getFallbackLang(){return this.fallbackLang}setCurrentLang(a){if(h.isEmpty(a))throw new Error("Current language cannot be empty");this.currentLang=a}getCurrentLang(){return this.currentLang}setDraftMode(a){this.draftMode=a}isDraftMode(){return this.draftMode}async handle(a,e){var s,r,o,c,u,m,S,f,b,w;switch(a.action){case"UPLOAD_ASSET":return(s=this.chaiAssets)==null?void 0:s.upload({file:a.data.file,name:a.data.name});case"GET_ASSETS":return(r=this.chaiAssets)==null?void 0:r.getAssets(a.data);case"DELETE_ASSET":return(o=this.chaiAssets)==null?void 0:o.deleteAsset(a.data.assetId);case"UPDATE_ASSET_FILE":return(c=this.chaiAssets)==null?void 0:c.updateAsset(a.data);case"REFRESH_TOKEN":return(u=this.chaiUsers)==null?void 0:u.refreshToken(a.data);case"LOGIN":return(m=this.chaiUsers)==null?void 0:m.login(a.data);case"LOGOUT":return(S=this.chaiUsers)==null?void 0:S.logout();case"CHECK_USER_STATUS":return(f=this.chaiUsers)==null?void 0:f.isUserActive(e);case"GET_ROLE_AND_PERMISSIONS":return(b=this.chaiUsers)==null?void 0:b.getUserRoleAndPermissions(e);case"GET_CHAI_USER":return(w=this.chaiUsers)==null?void 0:w.getUserInfo(e,a.data)}if(a.action==="GET_BUILDER_PAGE_DATA"){const i=await E({lang:a.data.lang,draft:!0,inBuilder:!0}),A=l(a.data.pageType);return A?{...A.dataProvider?await A.dataProvider({lang:a.data.lang,draft:!0,inBuilder:!0,pageProps:a.data.pageProps??{}}):{},global:i}:{global:i}}if(a.action==="GET_PAGE_TYPES")return Promise.all(k().map(async i=>({key:i.key,helpText:i.helpText??"",icon:i.icon??"",dynamicSegments:i.dynamicSegments??"",dynamicSlug:i.dynamicSlug??"",hasSlug:i.hasSlug??!0,name:typeof i.name=="function"?await i.name():i.name})));if(a.action==="SEARCH_PAGE_TYPE_ITEMS"){const i=l(a.data.pageType);return i?i.search?await i.search(a.data.query):this.backend.handleAction(a,e):{error:"Page type not found"}}const t=await this.backend.handleAction(a,e);return this.emit(a.action,t),t}emit(a,e){var r,o,c;if(!["CREATE_PAGE","UPDATE_PAGE","DELETE_PAGE"].includes(a))return;const t=h.get(e,"page");if(!t)return;const s=l(t.pageType);if(s)switch(a){case"CREATE_PAGE":return(r=s.onCreate)==null?void 0:r.call(s,t);case"UPDATE_PAGE":return(o=s.onUpdate)==null?void 0:o.call(s,t);case"DELETE_PAGE":return(c=s.onDelete)==null?void 0:c.call(s,t)}}setLanguageFromSlug(a){if(!this.getFallbackLang())throw new Error("Please set a fallback language using setFallbackLang(lang: string)");const e=h.first(a||[""]);Object.keys(y).includes(e)?this.setCurrentLang(e):this.setCurrentLang(this.getFallbackLang())}async resolveLink(a,e){const t=l(a);if(!t)return"/not-found";const s=this.isDraftMode(),r=this.getCurrentLang()===this.getFallbackLang()?"":this.getCurrentLang();return t.resolveLink?await t.resolveLink(e,s,r):await this.backend.handleAction({action:"GET_LINK",data:{pageType:a,id:e,draft:s,lang:r}})}async getPageBySlug(a){const e=this.isDraftMode(),t={};return k().forEach(s=>{h.has(s,"dynamicSegments")&&s.dynamicSegments&&(t[s.key]=s.dynamicSegments)}),await this.backend.handleAction({action:"GET_PAGE_META",data:{slug:a,draft:e,dynamicSegments:t}})}async getFullPage(a){const e=this.isDraftMode(),t=this.getCurrentLang(),s=this.getFallbackLang();return await this.backend.handleAction({action:"GET_PAGE",data:{id:a,lang:s===t?void 0:t,draft:e,mergePartials:!0}})}async getSiteSettings(){const a=this.isDraftMode();return await this.backend.handleAction({action:"GET_WEBSITE_SETTINGS",data:{draft:a}})}async getPageData(a,e={}){var u;const t=this.isDraftMode(),s=this.getCurrentLang(),r=l(a),[o,c]=await Promise.all([this.getGlobalData(),((u=r==null?void 0:r.dataProvider)==null?void 0:u.call(r,{lang:s,draft:t,inBuilder:!1,pageProps:e}))||Promise.resolve({})]);return r?{...c,global:o}:{global:o}}async getGlobalData(){const a=this.getCurrentLang();return await E({lang:a,draft:this.isDraftMode(),inBuilder:!1})}async request(a){return await this.backend.handleAction(a)}}class M{constructor(a="",e=L){this.apiKey=a,this.apiUrl=e}async handleUsersAction(a,e){const t=await fetch(`${this.apiUrl}/v1/api/users`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":e}}),s=await t.json();return h.has(s,"error")?{...s,status:t.status}:s}async handleAction(a,e){const t=await fetch(`${this.apiUrl}/v1/api/chai`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":e}}),s=await t.json();return h.has(s,"error")?{...s,status:t.status}:s}async handleAssetsAction(a,e){return await(await fetch(`${this.apiUrl}/v1/api/assets`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-upload":"true","x-chai-auth-token":e}})).json()}}const L="https://api.chaibuilder.com";exports.API_URL=L;exports.ChaiBuilderPages=D;exports.ChaiBuilderPagesBackend=M;exports.ChaiBuilderPagesUserManagement=C;exports.LANGUAGES=y;exports.getChaiGlobalData=E;exports.getChaiPageType=l;exports.getChaiPageTypes=k;exports.registerChaiGlobalDataProvider=G;exports.registerChaiPageType=P;exports.registerChaiPartialType=p;
1
+ "use strict";var _=Object.defineProperty;var U=(i,a,e)=>a in i?_(i,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[a]=e;var g=(i,a,e)=>U(i,typeof a!="symbol"?a+"":a,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("lodash-es"),d={},P=(i,a)=>{d[i]={key:i,...a,hasSlug:!0}},p=(i,a)=>{d[i]={key:i,...a,hasSlug:!1}},k=()=>Object.values(d),h=i=>d[i];let T=async i=>({...i});const G=i=>T=i,m=async i=>{try{return await T(i)}catch(a){return console.error(a),{}}};class v{constructor(a){this.backend=a}async upload({file:a,folderId:e,name:t}){var s,o;return await((o=(s=this.backend).handleAssetsAction)==null?void 0:o.call(s,{action:"UPLOAD_ASSET",data:{name:t,file:a,folderId:e}}))}async getAssets(a){var e,t;return(t=(e=this.backend).handleAssetsAction)==null?void 0:t.call(e,{action:"GET_ASSETS",data:a})}async deleteAsset(a){var e,t;return(t=(e=this.backend).handleAssetsAction)==null?void 0:t.call(e,{action:"DELETE_ASSET",data:{assetId:a}})}async updateAsset({id:a,file:e,description:t}){var n,s;return(s=(n=this.backend).handleAssetsAction)==null?void 0:s.call(n,{action:"UPDATE_ASSET",data:{id:a,file:e,description:t}})}}class C{constructor(a){this.backend=a}async refreshToken(a){var t,n;const e=await((n=(t=this.backend).handleUsersAction)==null?void 0:n.call(t,{action:"REFRESH_TOKEN",data:a}));return e.error?{error:e.error}:e}async login({email:a,password:e}){var n,s;const t=await((s=(n=this.backend).handleUsersAction)==null?void 0:s.call(n,{action:"LOGIN",data:{email:a,password:e}}));return t.error?{error:t.error}:t}async logout(){var a,e;await((e=(a=this.backend).handleUsersAction)==null?void 0:e.call(a,{action:"LOGOUT"}))}async isUserActive(a){var t,n;return(await((n=(t=this.backend).handleUsersAction)==null?void 0:n.call(t,{action:"CHECK_USER_STATUS"},a))).success}async getUserRoleAndPermissions(a){var t,n;return await((n=(t=this.backend).handleUsersAction)==null?void 0:n.call(t,{action:"GET_ROLE_AND_PERMISSIONS"},a))}async getUserInfo(a,e){var n,s;return await((s=(n=this.backend).handleUsersAction)==null?void 0:s.call(n,{action:"GET_CHAI_USER",data:e},a))}}const y={ab:"Abkhazian",aa:"Afar",af:"Afrikaans",ak:"Akan",sq:"Albanian",am:"Amharic",ar:"Arabic",an:"Aragonese",hy:"Armenian",as:"Assamese",av:"Avaric",ae:"Avestan",ay:"Aymara",az:"Azerbaijani",bm:"Bambara",ba:"Bashkir",eu:"Basque",be:"Belarusian",bn:"Bengali",bh:"Bihari",bi:"Bislama",bs:"Bosnian",br:"Breton",bg:"Bulgarian",my:"Burmese",ca:"Catalan",ch:"Chamorro",ce:"Chechen",ny:"Chichewa",zh:"Chinese","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cv:"Chuvash",kw:"Cornish",co:"Corsican",cr:"Cree",hr:"Croatian",cs:"Czech",da:"Danish",dv:"Maldivian",nl:"Dutch",dz:"Dzongkha",en:"English",eo:"Esperanto",et:"Estonian",ee:"Ewe",fo:"Faroese",fj:"Fijian",fi:"Finnish",fr:"French",ff:"Fula, Pular",gl:"Galician",gd:"Gaelic (Scottish)",gv:"Manx",ka:"Georgian",de:"German",el:"Greek",kl:"Kalaallisut",gn:"Guarani",gu:"Gujarati",ht:"Haitian Creole",ha:"Hausa",he:"Hebrew",hz:"Herero",hi:"Hindi",ho:"Hiri Motu",hu:"Hungarian",is:"Icelandic",io:"Ido",ig:"Igbo",id:"Indonesian",ia:"Interlingua",ie:"Interlingue",iu:"Inuktitut",ik:"Inupiak",ga:"Irish",it:"Italian",ja:"Japanese",jv:"Javanese",kn:"Kannada",kr:"Kanuri",ks:"Kashmiri",kk:"Kazakh",km:"Khmer",ki:"Kikuyu",rw:"Kinyarwanda",rn:"Kirundi",ky:"Kyrgyz",kv:"Komi",kg:"Kongo",ko:"Korean",ku:"Kurdish",kj:"Kwanyama",lo:"Lao",la:"Latin",lv:"Latvian",li:"Limburgish",ln:"Lingala",lt:"Lithuanian",lu:"Luga-Katanga",lg:"Luganda, Ganda",lb:"Luxembourgish",mk:"Macedonian",mg:"Malagasy",ms:"Malay",ml:"Malayalam",mt:"Maltese",mi:"Maori",mr:"Marathi",mh:"Marshallese",mo:"Moldavian",mn:"Mongolian",na:"Nauru",nv:"Navajo",ng:"Ndonga",nd:"Northern Ndebele",ne:"Nepali",no:"Norwegian",nb:"Norwegian bokmål",nn:"Norwegian nynorsk",ii:"Sichuan Yi",oc:"Occitan",oj:"Ojibwe",cu:"Old Church Slavonic",or:"Oriya",om:"Oromo",os:"Ossetian",pi:"Pāli",ps:"Pashto, Pushto",fa:"Persian (Farsi)",pl:"Polish",pt:"Portuguese",pa:"Punjabi (Eastern)",qu:"Quechua",rm:"Romansh",ro:"Romanian",ru:"Russian",se:"Sami",sm:"Samoan",sg:"Sango",sa:"Sanskrit",sr:"Serbian",sh:"Serbo-Croatian",st:"Sesotho",tn:"Setswana",sn:"Shona",sd:"Sindhi",si:"Sinhalese",ss:"Swati",sk:"Slovak",sl:"Slovenian",so:"Somali",nr:"Southern Ndebele",es:"Spanish",su:"Sundanese",sw:"Swahili (Kiswahili)",sv:"Swedish",tl:"Tagalog",ty:"Tahitian",tg:"Tajik",ta:"Tamil",tt:"Tatar",te:"Telugu",th:"Thai",bo:"Tibetan",ti:"Tigrinya",to:"Tonga",ts:"Tsonga",tr:"Turkish",tk:"Turkmen",tw:"Twi",ug:"Uyghur",uk:"Ukrainian",ur:"Urdu",uz:"Uzbek",ve:"Venda",vi:"Vietnamese",vo:"Volapük",wa:"Wallon",cy:"Welsh",wo:"Wolof",fy:"Western Frisian",xh:"Xhosa",yi:"Yiddish",yo:"Yoruba",za:"Zhuang, Chuang",zu:"Zulu"};class D{constructor(a,e,t){g(this,"fallbackLang","");g(this,"currentLang","");g(this,"draftMode",!1);this.backend=a,this.chaiUsers=e,this.chaiAssets=t,this._registerDefaultPageTypes(),this.chaiUsers=e??new C(this.backend),this.chaiAssets=t??new v(this.backend)}_registerDefaultPageTypes(){P("page",{name:"Static Page",icon:'<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M5 8V20H19V8H5ZM5 6H19V4H5V6ZM20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22ZM7 10H11V14H7V10ZM7 16H17V18H7V16ZM13 11H17V13H13V11Z"></path></svg>'}),p("global",{name:"Global Block",helpText:"A global block can be reused in multiple pages.",icon:'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe w-4 h-4 text-slate-500 stroke-[1]"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>'})}setFallbackLang(a){if(l.isEmpty(a))throw new Error("Fallback language cannot be empty");this.fallbackLang=a}getFallbackLang(){return this.fallbackLang}setCurrentLang(a){if(l.isEmpty(a))throw new Error("Current language cannot be empty");this.currentLang=a}getCurrentLang(){return this.currentLang}setDraftMode(a){this.draftMode=a}isDraftMode(){return this.draftMode}async handle(a,e){var n,s,o,c,u,E,S,f,b,w;switch(a.action){case"UPLOAD_ASSET":return(n=this.chaiAssets)==null?void 0:n.upload({file:a.data.file,name:a.data.name,folderId:a.data.folderId??null});case"GET_ASSETS":return(s=this.chaiAssets)==null?void 0:s.getAssets(a.data);case"DELETE_ASSET":return(o=this.chaiAssets)==null?void 0:o.deleteAsset(a.data.assetId);case"UPDATE_ASSET":return(c=this.chaiAssets)==null?void 0:c.updateAsset(a.data);case"REFRESH_TOKEN":return(u=this.chaiUsers)==null?void 0:u.refreshToken(a.data);case"LOGIN":return(E=this.chaiUsers)==null?void 0:E.login(a.data);case"LOGOUT":return(S=this.chaiUsers)==null?void 0:S.logout();case"CHECK_USER_STATUS":return(f=this.chaiUsers)==null?void 0:f.isUserActive(e);case"GET_ROLE_AND_PERMISSIONS":return(b=this.chaiUsers)==null?void 0:b.getUserRoleAndPermissions(e);case"GET_CHAI_USER":return(w=this.chaiUsers)==null?void 0:w.getUserInfo(e,a.data)}if(a.action==="GET_BUILDER_PAGE_DATA"){const r=await m({lang:a.data.lang,draft:!0,inBuilder:!0}),A=h(a.data.pageType);return A?{...A.dataProvider?await A.dataProvider({lang:a.data.lang,draft:!0,inBuilder:!0,pageProps:a.data.pageProps??{}}):{},global:r}:{global:r}}if(a.action==="GET_PAGE_TYPES")return Promise.all(k().map(async r=>({key:r.key,helpText:r.helpText??"",icon:r.icon??"",dynamicSegments:r.dynamicSegments??"",dynamicSlug:r.dynamicSlug??"",hasSlug:r.hasSlug??!0,name:typeof r.name=="function"?await r.name():r.name})));if(a.action==="SEARCH_PAGE_TYPE_ITEMS"){const r=h(a.data.pageType);return r?r.search?await r.search(a.data.query):this.backend.handleAction(a,e):{error:"Page type not found"}}const t=await this.backend.handleAction(a,e);return this.emit(a.action,t),t}emit(a,e){var s,o,c;if(!["CREATE_PAGE","UPDATE_PAGE","DELETE_PAGE"].includes(a))return;const t=l.get(e,"page");if(!t)return;const n=h(t.pageType);if(n)switch(a){case"CREATE_PAGE":return(s=n.onCreate)==null?void 0:s.call(n,t);case"UPDATE_PAGE":return(o=n.onUpdate)==null?void 0:o.call(n,t);case"DELETE_PAGE":return(c=n.onDelete)==null?void 0:c.call(n,t)}}setLanguageFromSlug(a){if(!this.getFallbackLang())throw new Error("Please set a fallback language using setFallbackLang(lang: string)");const e=l.first(a||[""]);Object.keys(y).includes(e)?this.setCurrentLang(e):this.setCurrentLang(this.getFallbackLang())}async resolveLink(a,e){const t=h(a);if(!t)return"/not-found";const n=this.isDraftMode(),s=this.getCurrentLang()===this.getFallbackLang()?"":this.getCurrentLang();return t.resolveLink?await t.resolveLink(e,n,s):await this.backend.handleAction({action:"GET_LINK",data:{pageType:a,id:e,draft:n,lang:s}})}async getPageBySlug(a){const e=this.isDraftMode(),t={};return k().forEach(n=>{l.has(n,"dynamicSegments")&&n.dynamicSegments&&(t[n.key]=n.dynamicSegments)}),await this.backend.handleAction({action:"GET_PAGE_META",data:{slug:a,draft:e,dynamicSegments:t}})}async getFullPage(a){const e=this.isDraftMode(),t=this.getCurrentLang(),n=this.getFallbackLang();return await this.backend.handleAction({action:"GET_PAGE",data:{id:a,lang:n===t?void 0:t,draft:e,mergePartials:!0}})}async getSiteSettings(){const a=this.isDraftMode();return await this.backend.handleAction({action:"GET_WEBSITE_SETTINGS",data:{draft:a}})}async getPageData(a,e={}){var u;const t=this.isDraftMode(),n=this.getCurrentLang(),s=h(a),[o,c]=await Promise.all([this.getGlobalData(),((u=s==null?void 0:s.dataProvider)==null?void 0:u.call(s,{lang:n,draft:t,inBuilder:!1,pageProps:e}))||Promise.resolve({})]);return s?{...c,global:o}:{global:o}}async getGlobalData(){const a=this.getCurrentLang();return await m({lang:a,draft:this.isDraftMode(),inBuilder:!1})}async request(a){return await this.backend.handleAction(a)}}class M{constructor(a="",e=L){this.apiKey=a,this.apiUrl=e}async handleUsersAction(a,e){const t=await fetch(`${this.apiUrl}/v1/api/users`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":e}}),n=await t.json();return l.has(n,"error")?{...n,status:t.status}:n}async handleAction(a,e){const t=await fetch(`${this.apiUrl}/v1/api/chai`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-auth-token":e}}),n=await t.json();return l.has(n,"error")?{...n,status:t.status}:n}async handleAssetsAction(a,e){return await(await fetch(`${this.apiUrl}/v1/api/assets`,{method:"POST",body:JSON.stringify(a),headers:{"x-chai-api-key":this.apiKey,"x-chai-upload":"true","x-chai-auth-token":e}})).json()}}const L="https://api.chaibuilder.com";exports.API_URL=L;exports.ChaiBuilderPages=D;exports.ChaiBuilderPagesBackend=M;exports.ChaiBuilderPagesUserManagement=C;exports.LANGUAGES=y;exports.getChaiGlobalData=m;exports.getChaiPageType=h;exports.getChaiPageTypes=k;exports.registerChaiGlobalDataProvider=G;exports.registerChaiPageType=P;exports.registerChaiPartialType=p;
package/dist/server.d.ts CHANGED
@@ -70,17 +70,28 @@ export declare interface ChaiBuilderPagesAssetsInterface {
70
70
  upload({ file, folderId, name, }: {
71
71
  name: string;
72
72
  file: Base64URLString;
73
- folderId?: string;
74
- }): Promise<ChaiAsset>;
75
- getAssets(params: AssetsParams): Promise<Partial<ChaiAsset>[]>;
73
+ folderId?: string | null;
74
+ }): Promise<ChaiAsset | {
75
+ error: string;
76
+ }>;
77
+ getAssets(params: AssetsParams): Promise<{
78
+ assets: Partial<ChaiAsset>[];
79
+ total: number;
80
+ } | {
81
+ error: string;
82
+ }>;
76
83
  deleteAsset(assetId: string): Promise<{
77
84
  success: boolean;
85
+ } | {
86
+ error: string;
78
87
  }>;
79
88
  updateAsset({ id, file, description, }: {
80
89
  id: string;
81
90
  file?: Base64URLString;
82
91
  description?: string;
83
- }): Promise<ChaiAsset>;
92
+ }): Promise<ChaiAsset | {
93
+ error: string;
94
+ }>;
84
95
  }
85
96
 
86
97
  export declare class ChaiBuilderPagesBackend implements ChaiBuilderPagesBackendInterface {
@@ -94,8 +105,8 @@ export declare class ChaiBuilderPagesBackend implements ChaiBuilderPagesBackendI
94
105
 
95
106
  export declare interface ChaiBuilderPagesBackendInterface {
96
107
  handleAction(body: any, authToken?: string): Promise<any>;
97
- handleUsersAction(body: any, authToken?: string): Promise<any>;
98
- handleAssetsAction(body: any, authToken?: string): Promise<any>;
108
+ handleUsersAction?(body: any, authToken?: string): Promise<any>;
109
+ handleAssetsAction?(body: any, authToken?: string): Promise<any>;
99
110
  }
100
111
 
101
112
  export declare interface ChaiBuilderPagesInterface {
package/dist/server.js CHANGED
@@ -1,18 +1,18 @@
1
1
  var T = Object.defineProperty;
2
- var C = (s, a, e) => a in s ? T(s, a, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[a] = e;
3
- var u = (s, a, e) => C(s, typeof a != "symbol" ? a + "" : a, e);
2
+ var C = (i, a, e) => a in i ? T(i, a, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[a] = e;
3
+ var u = (i, a, e) => C(i, typeof a != "symbol" ? a + "" : a, e);
4
4
  import { isEmpty as w, get as L, first as _, has as A } from "lodash-es";
5
- const g = {}, y = (s, a) => {
6
- g[s] = { key: s, ...a, hasSlug: !0 };
7
- }, U = (s, a) => {
8
- g[s] = { key: s, ...a, hasSlug: !1 };
9
- }, b = () => Object.values(g), l = (s) => g[s];
10
- let p = async (s) => ({
11
- ...s
5
+ const g = {}, y = (i, a) => {
6
+ g[i] = { key: i, ...a, hasSlug: !0 };
7
+ }, U = (i, a) => {
8
+ g[i] = { key: i, ...a, hasSlug: !1 };
9
+ }, b = () => Object.values(g), h = (i) => g[i];
10
+ let p = async (i) => ({
11
+ ...i
12
12
  });
13
- const H = (s) => p = s, P = async (s) => {
13
+ const H = (i) => p = i, P = async (i) => {
14
14
  try {
15
- return await p(s);
15
+ return await p(i);
16
16
  } catch (a) {
17
17
  return console.error(a), {};
18
18
  }
@@ -26,23 +26,26 @@ class v {
26
26
  folderId: e,
27
27
  name: t
28
28
  }) {
29
- return await this.backend.handleAssetsAction({
29
+ var s, o;
30
+ return await ((o = (s = this.backend).handleAssetsAction) == null ? void 0 : o.call(s, {
30
31
  action: "UPLOAD_ASSET",
31
32
  data: {
32
33
  name: t,
33
34
  file: a,
34
35
  folderId: e
35
36
  }
36
- });
37
+ }));
37
38
  }
38
39
  async getAssets(a) {
39
- return this.backend.handleAssetsAction({
40
+ var e, t;
41
+ return (t = (e = this.backend).handleAssetsAction) == null ? void 0 : t.call(e, {
40
42
  action: "GET_ASSETS",
41
43
  data: a
42
44
  });
43
45
  }
44
46
  async deleteAsset(a) {
45
- return this.backend.handleAssetsAction({
47
+ var e, t;
48
+ return (t = (e = this.backend).handleAssetsAction) == null ? void 0 : t.call(e, {
46
49
  action: "DELETE_ASSET",
47
50
  data: { assetId: a }
48
51
  });
@@ -52,7 +55,8 @@ class v {
52
55
  file: e,
53
56
  description: t
54
57
  }) {
55
- return this.backend.handleAssetsAction({
58
+ var n, s;
59
+ return (s = (n = this.backend).handleAssetsAction) == null ? void 0 : s.call(n, {
56
60
  action: "UPDATE_ASSET",
57
61
  data: { id: a, file: e, description: t }
58
62
  });
@@ -63,44 +67,60 @@ class G {
63
67
  this.backend = a;
64
68
  }
65
69
  async refreshToken(a) {
66
- const e = await this.backend.handleUsersAction({
70
+ var t, n;
71
+ const e = await ((n = (t = this.backend).handleUsersAction) == null ? void 0 : n.call(t, {
67
72
  action: "REFRESH_TOKEN",
68
73
  data: a
69
- });
74
+ }));
70
75
  return e.error ? { error: e.error } : e;
71
76
  }
72
77
  async login({
73
78
  email: a,
74
79
  password: e
75
80
  }) {
76
- const t = await this.backend.handleUsersAction({
81
+ var n, s;
82
+ const t = await ((s = (n = this.backend).handleUsersAction) == null ? void 0 : s.call(n, {
77
83
  action: "LOGIN",
78
84
  data: { email: a, password: e }
79
- });
85
+ }));
80
86
  return t.error ? { error: t.error } : t;
81
87
  }
82
88
  async logout() {
83
- await this.backend.handleUsersAction({
89
+ var a, e;
90
+ await ((e = (a = this.backend).handleUsersAction) == null ? void 0 : e.call(a, {
84
91
  action: "LOGOUT"
85
- });
92
+ }));
86
93
  }
87
94
  async isUserActive(a) {
88
- return (await this.backend.handleUsersAction(
89
- { action: "CHECK_USER_STATUS" },
95
+ var t, n;
96
+ return (await ((n = (t = this.backend).handleUsersAction) == null ? void 0 : n.call(
97
+ t,
98
+ {
99
+ action: "CHECK_USER_STATUS"
100
+ },
90
101
  a
91
- )).success;
102
+ ))).success;
92
103
  }
93
104
  async getUserRoleAndPermissions(a) {
94
- return await this.backend.handleUsersAction(
95
- { action: "GET_ROLE_AND_PERMISSIONS" },
105
+ var t, n;
106
+ return await ((n = (t = this.backend).handleUsersAction) == null ? void 0 : n.call(
107
+ t,
108
+ {
109
+ action: "GET_ROLE_AND_PERMISSIONS"
110
+ },
96
111
  a
97
- );
112
+ ));
98
113
  }
99
114
  async getUserInfo(a, e) {
100
- return await this.backend.handleUsersAction(
101
- { action: "GET_CHAI_USER", data: e },
115
+ var n, s;
116
+ return await ((s = (n = this.backend).handleUsersAction) == null ? void 0 : s.call(
117
+ n,
118
+ {
119
+ action: "GET_CHAI_USER",
120
+ data: e
121
+ },
102
122
  a
103
- );
123
+ ));
104
124
  }
105
125
  }
106
126
  const D = {
@@ -332,25 +352,24 @@ class B {
332
352
  return this.draftMode;
333
353
  }
334
354
  async handle(a, e) {
335
- var n, r, o, c, h, k, m, E, S, f;
355
+ var n, s, o, c, l, k, m, E, S, f;
336
356
  switch (a.action) {
337
357
  // Media
338
358
  case "UPLOAD_ASSET":
339
359
  return (n = this.chaiAssets) == null ? void 0 : n.upload({
340
360
  file: a.data.file,
341
- name: a.data.name
361
+ name: a.data.name,
362
+ folderId: a.data.folderId ?? null
342
363
  });
343
364
  case "GET_ASSETS":
344
- return (r = this.chaiAssets) == null ? void 0 : r.getAssets(a.data);
365
+ return (s = this.chaiAssets) == null ? void 0 : s.getAssets(a.data);
345
366
  case "DELETE_ASSET":
346
367
  return (o = this.chaiAssets) == null ? void 0 : o.deleteAsset(a.data.assetId);
347
- case "UPDATE_ASSET_FILE":
348
- return (c = this.chaiAssets) == null ? void 0 : c.updateAsset(
349
- a.data
350
- );
368
+ case "UPDATE_ASSET":
369
+ return (c = this.chaiAssets) == null ? void 0 : c.updateAsset(a.data);
351
370
  // Users
352
371
  case "REFRESH_TOKEN":
353
- return (h = this.chaiUsers) == null ? void 0 : h.refreshToken(
372
+ return (l = this.chaiUsers) == null ? void 0 : l.refreshToken(
354
373
  a.data
355
374
  );
356
375
  case "LOGIN":
@@ -370,11 +389,11 @@ class B {
370
389
  );
371
390
  }
372
391
  if (a.action === "GET_BUILDER_PAGE_DATA") {
373
- const i = await P({
392
+ const r = await P({
374
393
  lang: a.data.lang,
375
394
  draft: !0,
376
395
  inBuilder: !0
377
- }), d = l(
396
+ }), d = h(
378
397
  a.data.pageType
379
398
  );
380
399
  return d ? {
@@ -384,40 +403,40 @@ class B {
384
403
  inBuilder: !0,
385
404
  pageProps: a.data.pageProps ?? {}
386
405
  }) : {},
387
- global: i
388
- } : { global: i };
406
+ global: r
407
+ } : { global: r };
389
408
  }
390
409
  if (a.action === "GET_PAGE_TYPES")
391
410
  return Promise.all(
392
- b().map(async (i) => ({
393
- key: i.key,
394
- helpText: i.helpText ?? "",
395
- icon: i.icon ?? "",
396
- dynamicSegments: i.dynamicSegments ?? "",
397
- dynamicSlug: i.dynamicSlug ?? "",
398
- hasSlug: i.hasSlug ?? !0,
399
- name: typeof i.name == "function" ? await i.name() : i.name
411
+ b().map(async (r) => ({
412
+ key: r.key,
413
+ helpText: r.helpText ?? "",
414
+ icon: r.icon ?? "",
415
+ dynamicSegments: r.dynamicSegments ?? "",
416
+ dynamicSlug: r.dynamicSlug ?? "",
417
+ hasSlug: r.hasSlug ?? !0,
418
+ name: typeof r.name == "function" ? await r.name() : r.name
400
419
  }))
401
420
  );
402
421
  if (a.action === "SEARCH_PAGE_TYPE_ITEMS") {
403
- const i = l(
422
+ const r = h(
404
423
  a.data.pageType
405
424
  );
406
- return i ? i.search ? await i.search(a.data.query) : this.backend.handleAction(a, e) : { error: "Page type not found" };
425
+ return r ? r.search ? await r.search(a.data.query) : this.backend.handleAction(a, e) : { error: "Page type not found" };
407
426
  }
408
427
  const t = await this.backend.handleAction(a, e);
409
428
  return this.emit(a.action, t), t;
410
429
  }
411
430
  emit(a, e) {
412
- var r, o, c;
431
+ var s, o, c;
413
432
  if (!["CREATE_PAGE", "UPDATE_PAGE", "DELETE_PAGE"].includes(a)) return;
414
433
  const t = L(e, "page");
415
434
  if (!t) return;
416
- const n = l(t.pageType);
435
+ const n = h(t.pageType);
417
436
  if (n)
418
437
  switch (a) {
419
438
  case "CREATE_PAGE":
420
- return (r = n.onCreate) == null ? void 0 : r.call(n, t);
439
+ return (s = n.onCreate) == null ? void 0 : s.call(n, t);
421
440
  case "UPDATE_PAGE":
422
441
  return (o = n.onUpdate) == null ? void 0 : o.call(n, t);
423
442
  case "DELETE_PAGE":
@@ -434,17 +453,17 @@ class B {
434
453
  Object.keys(D).includes(e) ? this.setCurrentLang(e) : this.setCurrentLang(this.getFallbackLang());
435
454
  }
436
455
  async resolveLink(a, e) {
437
- const t = l(a);
456
+ const t = h(a);
438
457
  if (!t)
439
458
  return "/not-found";
440
- const n = this.isDraftMode(), r = this.getCurrentLang() === this.getFallbackLang() ? "" : this.getCurrentLang();
441
- return t.resolveLink ? await t.resolveLink(e, n, r) : await this.backend.handleAction({
459
+ const n = this.isDraftMode(), s = this.getCurrentLang() === this.getFallbackLang() ? "" : this.getCurrentLang();
460
+ return t.resolveLink ? await t.resolveLink(e, n, s) : await this.backend.handleAction({
442
461
  action: "GET_LINK",
443
462
  data: {
444
463
  pageType: a,
445
464
  id: e,
446
465
  draft: n,
447
- lang: r
466
+ lang: s
448
467
  }
449
468
  });
450
469
  }
@@ -477,17 +496,17 @@ class B {
477
496
  });
478
497
  }
479
498
  async getPageData(a, e = {}) {
480
- var h;
481
- const t = this.isDraftMode(), n = this.getCurrentLang(), r = l(a), [o, c] = await Promise.all([
499
+ var l;
500
+ const t = this.isDraftMode(), n = this.getCurrentLang(), s = h(a), [o, c] = await Promise.all([
482
501
  this.getGlobalData(),
483
- ((h = r == null ? void 0 : r.dataProvider) == null ? void 0 : h.call(r, {
502
+ ((l = s == null ? void 0 : s.dataProvider) == null ? void 0 : l.call(s, {
484
503
  lang: n,
485
504
  draft: t,
486
505
  inBuilder: !1,
487
506
  pageProps: e
488
507
  })) || Promise.resolve({})
489
508
  ]);
490
- return r ? {
509
+ return s ? {
491
510
  ...c,
492
511
  global: o
493
512
  } : { global: o };
@@ -550,7 +569,7 @@ export {
550
569
  G as ChaiBuilderPagesUserManagement,
551
570
  D as LANGUAGES,
552
571
  P as getChaiGlobalData,
553
- l as getChaiPageType,
572
+ h as getChaiPageType,
554
573
  b as getChaiPageTypes,
555
574
  H as registerChaiGlobalDataProvider,
556
575
  y as registerChaiPageType,
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "author": "Suraj Air",
4
4
  "license": "Private",
5
5
  "homepage": "https://chaibuilder.com",
6
- "version": "0.4.6",
6
+ "version": "0.4.7",
7
7
  "type": "module",
8
8
  "files": [
9
9
  "dist"
@@ -59,8 +59,8 @@
59
59
  "test": "vitest"
60
60
  },
61
61
  "peerDependencies": {
62
- "@chaibuilder/sdk": "2.2.5",
63
62
  "@chaibuilder/runtime": "2.1.2",
63
+ "@chaibuilder/sdk": "2.2.5",
64
64
  "@types/react": "*",
65
65
  "@types/react-dom": "*",
66
66
  "react": "^18.0 || ^19.0",
@@ -86,6 +86,7 @@
86
86
  "@tailwindcss/typography": "^0.5.16",
87
87
  "@tanstack/react-query": "^5.64.2",
88
88
  "@types/express-fileupload": "^1.5.1",
89
+ "canvas": "^3.1.0",
89
90
  "canvas-confetti": "^1.9.3",
90
91
  "cssnano": "^7.0.6",
91
92
  "date-fns": "^4.1.0",
@@ -1,91 +0,0 @@
1
- import { jsx as a, jsxs as t } from "react/jsx-runtime";
2
- import { useState as l } from "react";
3
- import { Dialog as b, DialogContent as w, DialogHeader as F, DialogTitle as C, Label as d, Input as S, Textarea as y, DialogFooter as A, Button as g } from "@chaibuilder/sdk/ui";
4
- function E({
5
- asset: e,
6
- onSave: r,
7
- onCancel: o
8
- }) {
9
- const i = e.name.lastIndexOf("."), f = i > 0 ? e.name.substring(0, i) : e.name, c = i > 0 ? e.name.substring(i) : "", [m, x] = l(f), [s, v] = l(e.description || ""), [u, h] = l(!1), N = async () => {
10
- h(!0);
11
- try {
12
- const D = {
13
- name: m + c,
14
- description: s || void 0
15
- };
16
- await r(D);
17
- } finally {
18
- h(!1);
19
- }
20
- };
21
- return /* @__PURE__ */ a(b, { open: !0, onOpenChange: () => o(), children: /* @__PURE__ */ t(w, { className: "sm:max-w-[500px]", children: [
22
- /* @__PURE__ */ a(F, { children: /* @__PURE__ */ a(C, { children: "Edit Asset Details" }) }),
23
- /* @__PURE__ */ t("div", { className: "grid gap-3 py-2", children: [
24
- /* @__PURE__ */ t("div", { className: "grid gap-2", children: [
25
- /* @__PURE__ */ a(d, { htmlFor: "name", children: "Name" }),
26
- /* @__PURE__ */ t("div", { className: "flex", children: [
27
- /* @__PURE__ */ a(
28
- S,
29
- {
30
- id: "name",
31
- value: m,
32
- onChange: (n) => x(n.target.value),
33
- className: "rounded-r-none"
34
- }
35
- ),
36
- /* @__PURE__ */ a("div", { className: "px-3 py-1 text-sm font-medium bg-muted text-muted-foreground rounded-r-md border border-l-0 flex items-center", children: c || "" })
37
- ] }),
38
- /* @__PURE__ */ a("p", { className: "text-xs text-muted-foreground", children: "Only the file name can be changed, not the extension." })
39
- ] }),
40
- /* @__PURE__ */ t("div", { className: "grid gap-2", children: [
41
- /* @__PURE__ */ a(d, { htmlFor: "description", children: "Description" }),
42
- /* @__PURE__ */ a(
43
- y,
44
- {
45
- id: "description",
46
- value: s,
47
- placeholder: "Enter a description for the asset",
48
- onChange: (n) => v(n.target.value),
49
- rows: 3
50
- }
51
- )
52
- ] }),
53
- /* @__PURE__ */ a("div", { className: "grid grid-cols-1 gap-2 text-sm border rounded-md p-2", children: [
54
- { label: "Type", value: e.type },
55
- { label: "Format", value: e.format },
56
- { label: "Size", value: B(e.size) },
57
- {
58
- label: "Dimensions",
59
- value: `${e.width} × ${e.height}`
60
- },
61
- { label: "Created", value: p(e.createdAt) },
62
- { label: "Updated", value: p((e == null ? void 0 : e.updatedAt) || "") }
63
- ].map((n) => /* @__PURE__ */ t("div", { className: "flex items-center gap-2", children: [
64
- /* @__PURE__ */ a(d, { className: "w-max text-left px-2 w-1/4 font-normal text-gray-700", children: n.label }),
65
- ":",
66
- /* @__PURE__ */ a("div", { className: "w-max text-left font-medium text-gray-900 capitalize", children: n.value })
67
- ] })) })
68
- ] }),
69
- /* @__PURE__ */ t(A, { children: [
70
- /* @__PURE__ */ a(g, { variant: "outline", onClick: o, children: "Cancel" }),
71
- /* @__PURE__ */ a(g, { onClick: N, disabled: u, children: u ? "Saving..." : "Save Changes" })
72
- ] })
73
- ] }) });
74
- }
75
- function B(e) {
76
- return e < 1024 ? e + " B" : e < 1024 * 1024 ? (e / 1024).toFixed(1) + " KB" : e < 1024 * 1024 * 1024 ? (e / (1024 * 1024)).toFixed(1) + " MB" : (e / (1024 * 1024 * 1024)).toFixed(1) + " GB";
77
- }
78
- function p(e) {
79
- if (!e) return "N/A";
80
- const r = new Date(e);
81
- return new Intl.DateTimeFormat("en-US", {
82
- month: "short",
83
- day: "numeric",
84
- year: "numeric",
85
- hour: "2-digit",
86
- minute: "2-digit"
87
- }).format(r);
88
- }
89
- export {
90
- E as default
91
- };
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),l=require("react"),a=require("@chaibuilder/sdk/ui");function j({asset:e,onSave:r,onCancel:d}){const i=e.name.lastIndexOf("."),h=i>0?e.name.substring(0,i):e.name,o=i>0?e.name.substring(i):"",[s,g]=l.useState(h),[c,f]=l.useState(e.description||""),[m,u]=l.useState(!1),p=async()=>{u(!0);try{const v={name:s+o,description:c||void 0};await r(v)}finally{u(!1)}};return t.jsx(a.Dialog,{open:!0,onOpenChange:()=>d(),children:t.jsxs(a.DialogContent,{className:"sm:max-w-[500px]",children:[t.jsx(a.DialogHeader,{children:t.jsx(a.DialogTitle,{children:"Edit Asset Details"})}),t.jsxs("div",{className:"grid gap-3 py-2",children:[t.jsxs("div",{className:"grid gap-2",children:[t.jsx(a.Label,{htmlFor:"name",children:"Name"}),t.jsxs("div",{className:"flex",children:[t.jsx(a.Input,{id:"name",value:s,onChange:n=>g(n.target.value),className:"rounded-r-none"}),t.jsx("div",{className:"px-3 py-1 text-sm font-medium bg-muted text-muted-foreground rounded-r-md border border-l-0 flex items-center",children:o||""})]}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Only the file name can be changed, not the extension."})]}),t.jsxs("div",{className:"grid gap-2",children:[t.jsx(a.Label,{htmlFor:"description",children:"Description"}),t.jsx(a.Textarea,{id:"description",value:c,placeholder:"Enter a description for the asset",onChange:n=>f(n.target.value),rows:3})]}),t.jsx("div",{className:"grid grid-cols-1 gap-2 text-sm border rounded-md p-2",children:[{label:"Type",value:e.type},{label:"Format",value:e.format},{label:"Size",value:N(e.size)},{label:"Dimensions",value:`${e.width} × ${e.height}`},{label:"Created",value:x(e.createdAt)},{label:"Updated",value:x((e==null?void 0:e.updatedAt)||"")}].map(n=>t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(a.Label,{className:"w-max text-left px-2 w-1/4 font-normal text-gray-700",children:n.label}),":",t.jsx("div",{className:"w-max text-left font-medium text-gray-900 capitalize",children:n.value})]}))})]}),t.jsxs(a.DialogFooter,{children:[t.jsx(a.Button,{variant:"outline",onClick:d,children:"Cancel"}),t.jsx(a.Button,{onClick:p,disabled:m,children:m?"Saving...":"Save Changes"})]})]})})}function N(e){return e<1024?e+" B":e<1024*1024?(e/1024).toFixed(1)+" KB":e<1024*1024*1024?(e/(1024*1024)).toFixed(1)+" MB":(e/(1024*1024*1024)).toFixed(1)+" GB"}function x(e){if(!e)return"N/A";const r=new Date(e);return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"}).format(r)}exports.default=j;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("react"),W=require("react-dropzone"),g=require("lucide-react"),i=require("@chaibuilder/sdk/ui"),z=require("lodash-es"),D=require("@chaibuilder/sdk"),x=require("@tanstack/react-query"),c=require("./index-Dhwd3gtU.cjs"),j=require("sonner"),X=(t={})=>{c.useApiUrl(),c.useFetch();const{search:n,page:o=1,limit:l=10}=t;return x.useQuery({queryKey:[c.ACTIONS.GET_ASSETS,{search:n,page:o,limit:l}],queryFn:async()=>{const u=localStorage.getItem("assets")||"[]";return JSON.parse(u)},retry:1})},Z=()=>{c.useApiUrl();const t=x.useQueryClient();return c.useFetch(),x.useMutation({mutationFn:async n=>{const o=localStorage.getItem("assets")||"[]";return localStorage.setItem("assets",JSON.stringify([...JSON.parse(o)||[],{id:Math.random().toString(36).substring(2,15),name:"123",url:n,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),type:"image",size:Math.random()*1e3}])),!0},onSuccess:()=>{t.invalidateQueries({queryKey:[c.ACTIONS.GET_ASSETS]}),j.toast.success("Asset uploaded successfully")},onError:()=>{j.toast.error("Failed to upload asset")}})},$=()=>{c.useApiUrl();const t=x.useQueryClient();return c.useFetch(),x.useMutation({mutationFn:async n=>{const o=localStorage.getItem("assets")||"[]";return localStorage.setItem("assets",JSON.stringify((JSON.parse(o)||[]).filter(l=>l.id!==n))),!0},onSuccess:()=>{t.invalidateQueries({queryKey:[c.ACTIONS.GET_ASSETS]}),j.toast.success("Asset deleted successfully")},onError:()=>{j.toast.error("Failed to delete asset")}})},ee=()=>{c.useApiUrl();const t=x.useQueryClient();return c.useFetch(),x.useMutation({mutationFn:async n=>{const o=localStorage.getItem("assets")||"[]";return localStorage.setItem("assets",JSON.stringify((JSON.parse(o)||[]).map(l=>l.id===n.id?{...l,url:n.file}:l))),!0},onSuccess:()=>{t.invalidateQueries({queryKey:[c.ACTIONS.GET_ASSETS]}),j.toast.success("Asset updated successfully")},onError:()=>{j.toast.error("Failed to update asset")}})};function se(){const[n,o]=r.useState([]),[l,u]=r.useState({query:"",page:1,pageSize:10}),y=z.debounce(()=>l.query,300)(),{data:p,isLoading:v}=X({search:(y==null?void 0:y.toLowerCase().trim())||"",page:l.page,limit:l.pageSize}),{mutate:w,isPaused:h}=ee(),{mutate:S,isPending:E}=Z(),{mutate:f,isPending:m}=$(),N=r.useCallback(()=>{u(d=>({...d,page:d.page+1}))},[]),A=r.useCallback(d=>{u(b=>({...b,query:d}))},[]),F=r.useCallback(d=>{o(b=>z.find(b,{id:d.id})?[]:[d])},[!1]),C=r.useCallback(()=>{o([])},[]);return{query:(l==null?void 0:l.query)||"",selectedAssets:n,assets:p||[],uploadAsset:S,updateAsset:w,deleteAsset:f,loadMoreAssets:N,updateSearchQuery:A,clearSelectedAssets:C,updateSelectedAssets:F,isLoadingAssets:v,isUploadingAsset:E,isUpdatingAsset:h,isDeletingAsset:m}}const te=r.lazy(()=>Promise.resolve().then(()=>require("./asset-metadata-editor-YXDey62L.cjs"))),ae=r.lazy(()=>Promise.resolve().then(()=>require("./image-editor-D8wu5UNM.cjs")));function re({close:t,onSelect:n,mode:o="image"}){const u=r.useMemo(()=>[o],[o]),[y,p]=r.useState("browse"),[v,w]=r.useState(null),[h,S]=r.useState({show:!1,file:""}),{query:E,assets:f,selectedAssets:m,uploadAsset:N,updateAsset:A,deleteAsset:F,loadMoreAssets:C,updateSearchQuery:d,clearSelectedAssets:b,updateSelectedAssets:k,isLoadingAssets:T,isUploadingAsset:O,isUpdatingAsset:B}=se(),U=r.useRef(null);r.useEffect(()=>{const s=U.current;if(!s)return;const a=()=>{s.scrollHeight-s.scrollTop<=s.clientHeight*1.5&&!T&&C()};return s.addEventListener("scroll",a),()=>s.removeEventListener("scroll",a)},[T,C]);const P=r.useCallback(async s=>new Promise((a,M)=>{const Y=s[0],q=new FileReader;q.readAsDataURL(Y),q.onload=async()=>{const I=await N(q.result);p("browse"),a(I)},q.onerror=I=>M(I)}),[N]),{getRootProps:L,getInputProps:Q,isDragActive:R}=W.useDropzone({onDrop:P,accept:{"image/*":u.includes("image")?[]:[],"video/*":u.includes("video")?[]:[]},maxSize:10*1024*1024}),J=()=>{n([m[0].url]),t()},G=async s=>{await F(s.id)},K=s=>{w(s)},_=async(s,a)=>{await A(z.merge(s,a)),t()},H=s=>{d(s.target.value)},V=async(s,a)=>{try{a?await N(s):await A({id:h.id,file:s}),S({show:!1,file:""}),p("browse")}catch(M){console.error("Error saving edited image:",M)}};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"min-w-[700px] min-h-[600px] w-[900px] max-w-[900px]",children:[e.jsx("h1",{className:"text-lg font-medium pb-4",children:"Digital Asset Manager"}),e.jsxs(i.Tabs,{value:y,onValueChange:s=>p(s),className:"flex-1 flex flex-col h-full",children:[e.jsxs("div",{className:"flex justify-between items-center mb-2",children:[e.jsxs(i.TabsList,{children:[e.jsx(i.TabsTrigger,{value:"browse",children:"Browse Assets"}),e.jsx(i.TabsTrigger,{value:"upload",children:"Upload"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[m.length>0&&e.jsx(e.Fragment,{children:e.jsx(i.Button,{variant:"outline",size:"sm",onClick:()=>b(),title:"Clear selection",children:"Clear"})}),e.jsx(i.Button,{size:"sm",onClick:J,disabled:m.length===0,children:"Select Asset"})]})]}),e.jsxs(i.TabsContent,{value:"browse",className:"flex-1 flex flex-col",children:[e.jsx("div",{className:"flex items-center gap-2 mb-2",children:e.jsxs("div",{className:"relative w-full",children:[e.jsx(g.Search,{className:"absolute left-2 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx(i.Input,{placeholder:"Search assets...",value:E,onChange:H,className:"pl-8"})]})}),T&&f.length===0?e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-2 overflow-y-auto max-h-[550px] p-1",children:[e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"}),e.jsx("div",{className:"bg-gray-200 h-64 w-full animate-pulse rounded"})]}):f.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center p-12 h-[380px]",children:[e.jsxs("div",{className:"text-muted-foreground mb-2",children:[e.jsx("h3",{className:"text-gray-800 font-medium",children:"No assets to display"}),e.jsx("p",{className:"text-sm",children:"You haven't uploaded any assets yet. Start by uploading your first asset."})]}),e.jsx("div",{className:"flex gap-2 pt-4",children:e.jsx(i.Button,{size:"lg",onClick:()=>p("upload"),children:"Upload Assets"})})]}):e.jsxs("div",{ref:U,className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-2 overflow-y-auto max-h-[550px] p-1",children:[f.map(s=>e.jsx(i.Card,{className:D.mergeClasses("cursor-pointer overflow-hidden transition-all",m.some(a=>a.id===s.id)?"ring-2 ring-primary":"hover:ring-2 hover:ring-primary/20"),onClick:()=>k(s),children:e.jsxs(i.CardContent,{className:"p-0 relative group",children:[e.jsxs("div",{className:"aspect-square relative overflow-hidden bg-muted",children:[s.type==="image"?e.jsx("img",{src:s.url||"/placeholder.svg",alt:s.name,className:"object-cover w-full h-full"}):e.jsxs("div",{className:"flex items-center justify-center h-full",children:[e.jsx(g.Film,{className:"h-12 w-12 text-muted-foreground"}),s.thumbnailUrl&&e.jsx("img",{src:s.thumbnailUrl||"/placeholder.svg",alt:s.name,className:"absolute inset-0 object-cover w-full h-full"})]}),e.jsxs("div",{className:"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2",children:[e.jsx(i.Button,{variant:"secondary",size:"icon",className:"h-8 w-8",onClick:a=>{a.stopPropagation(),K(s)},children:e.jsx(g.ImageIcon,{className:"h-4 w-4"})}),e.jsx(i.Button,{variant:"secondary",size:"icon",className:"h-8 w-8",onClick:a=>{a.stopPropagation(),S({id:s.id,show:!0,file:s.url,name:s.name})},children:e.jsx(g.Edit,{className:"h-4 w-4"})}),e.jsx(i.Button,{variant:"destructive",size:"icon",className:"h-8 w-8",onClick:a=>{a.stopPropagation(),G(s)},children:e.jsx(g.Trash2,{className:"h-4 w-4"})})]}),m.some(a=>a.id===s.id)&&e.jsx("div",{className:"absolute top-2 left-2",children:e.jsx("input",{type:"checkbox",checked:m.some(a=>a.id===s.id),readOnly:!0,className:"rounded-full"})})]}),e.jsxs("div",{className:"p-2",children:[e.jsx("div",{className:"text-sm font-medium truncate",title:s.name,children:s.name}),e.jsxs("div",{className:"text-xs text-muted-foreground flex items-center justify-between",children:[e.jsx("span",{children:le((s==null?void 0:s.size)||0)}),e.jsx("span",{children:ie(s.createdAt)})]})]})]})},s.id)),T&&f.length>0&&e.jsx("div",{className:"col-span-full flex justify-center py-4",children:e.jsx(g.Loader2,{className:"h-6 w-6 animate-spin text-muted-foreground"})})]})]}),e.jsx(i.TabsContent,{value:"upload",className:"flex-1 ",children:e.jsxs("div",{...L(),className:D.mergeClasses("border-2 border-dashed rounded-lg h-[380px] flex flex-col items-center justify-center text-center cursor-pointer hover:bg-gray-50",R?"border-primary bg-primary/5":"border-muted-foreground/20"),children:[e.jsx("input",{...Q()}),B||O?e.jsxs("div",{className:"flex flex-col items-center",children:[e.jsx(g.Loader2,{className:"h-12 w-12 text-primary animate-spin mb-4"}),e.jsx("h3",{className:"text-lg font-medium mb-1",children:"Uploading files..."}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Please wait while your files are being processed."})]}):e.jsxs(e.Fragment,{children:[e.jsx(g.Upload,{className:"h-12 w-12 text-muted-foreground mb-4"}),e.jsx("h3",{className:"text-lg font-medium mb-1",children:"Drag & drop files here"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"or click to browse your files"}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[e.jsxs("p",{children:["Accepted file types: ",u.join(", ")]}),e.jsxs("p",{children:["Maximum file size: ",10,"MB"]})]})]})]})})]})]}),v&&e.jsx(r.Suspense,{fallback:e.jsx("div",{children:"Loading..."}),children:e.jsx(te,{asset:v,onSave:s=>_(v,s),onCancel:()=>{w(null)}})}),h.show&&e.jsx(r.Suspense,{fallback:e.jsx("div",{children:"Loading..."}),children:e.jsx(ae,{imageUrl:h.file,onSave:V,onClose:()=>S({show:!1,file:""}),defaultSavedImageName:h.name,isEditing:!!h.id})})]})}function le(t){return t<1024?t+" B":t<1024*1024?(t/1024).toFixed(1)+" KB":t<1024*1024*1024?(t/(1024*1024)).toFixed(1)+" MB":(t/(1024*1024*1024)).toFixed(1)+" GB"}function ie(t){const n=new Date(t);return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric"}).format(n)}exports.default=re;