@shiftengineering/folio 0.1.4 → 0.1.5
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/README.md
CHANGED
|
@@ -117,10 +117,11 @@ function FolioProjectManager() {
|
|
|
117
117
|
};
|
|
118
118
|
|
|
119
119
|
const handleAddSingleDirectory = () => {
|
|
120
|
-
// Create a
|
|
121
|
-
const metadata =
|
|
122
|
-
|
|
123
|
-
|
|
120
|
+
// Create metadata as a simple object
|
|
121
|
+
const metadata = {
|
|
122
|
+
category: "reports",
|
|
123
|
+
owner: "John Doe"
|
|
124
|
+
};
|
|
124
125
|
|
|
125
126
|
const directoryEntry: DirectoryEntry = {
|
|
126
127
|
directoryName: "My Documents",
|
|
@@ -135,12 +136,14 @@ function FolioProjectManager() {
|
|
|
135
136
|
};
|
|
136
137
|
|
|
137
138
|
const handleAddMultipleDirectories = () => {
|
|
138
|
-
// Create metadata
|
|
139
|
-
const metadata1 =
|
|
140
|
-
|
|
139
|
+
// Create metadata for each directory as simple objects
|
|
140
|
+
const metadata1 = {
|
|
141
|
+
category: "reports"
|
|
142
|
+
};
|
|
141
143
|
|
|
142
|
-
const metadata2 =
|
|
143
|
-
|
|
144
|
+
const metadata2 = {
|
|
145
|
+
category: "contracts"
|
|
146
|
+
};
|
|
144
147
|
|
|
145
148
|
const directories: DirectoryEntry[] = [
|
|
146
149
|
{
|
|
@@ -311,13 +314,13 @@ Hook for adding one or more directories with files to a project. Directory names
|
|
|
311
314
|
|
|
312
315
|
The library exports these TypeScript types:
|
|
313
316
|
|
|
314
|
-
| Type | Description
|
|
315
|
-
| -------------------- |
|
|
316
|
-
| `FolioFile` | Represents a file in Folio. Contains properties: `id`, `name`, `blobUrl`, `parentId` (null for root items), and `isDirectory` (boolean)
|
|
317
|
-
| `FolioProject` | Represents a project in Folio
|
|
318
|
-
| `DirectoryEntry` | Represents a directory with metadata and files to be added to Folio. Contains properties: `directoryName`, `directoryMetadata` (
|
|
319
|
-
| `FolioEmbedProps` | Props for the FolioEmbed component
|
|
320
|
-
| `FolioProviderProps` | Props for the FolioProvider component
|
|
317
|
+
| Type | Description |
|
|
318
|
+
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
319
|
+
| `FolioFile` | Represents a file in Folio. Contains properties: `id`, `name`, `blobUrl`, `parentId` (null for root items), and `isDirectory` (boolean) |
|
|
320
|
+
| `FolioProject` | Represents a project in Folio |
|
|
321
|
+
| `DirectoryEntry` | Represents a directory with metadata and files to be added to Folio. Contains properties: `directoryName`, `directoryMetadata` (Record<string, string>), and `files` |
|
|
322
|
+
| `FolioEmbedProps` | Props for the FolioEmbed component |
|
|
323
|
+
| `FolioProviderProps` | Props for the FolioProvider component |
|
|
321
324
|
|
|
322
325
|
## License
|
|
323
326
|
|
|
@@ -4258,9 +4258,7 @@ function na(t) {
|
|
|
4258
4258
|
if (!t) throw new Error("Project ID is required");
|
|
4259
4259
|
const a = Array.isArray(s) ? s : [s], u = [];
|
|
4260
4260
|
for (const l of a) {
|
|
4261
|
-
const c = JSON.stringify(
|
|
4262
|
-
Object.fromEntries(l.directoryMetadata)
|
|
4263
|
-
), d = await e.addDirectoryWithFilesToProject(
|
|
4261
|
+
const c = JSON.stringify(l.directoryMetadata), d = await e.addDirectoryWithFilesToProject(
|
|
4264
4262
|
t,
|
|
4265
4263
|
l.directoryName,
|
|
4266
4264
|
c,
|
|
@@ -4275,8 +4273,8 @@ function na(t) {
|
|
|
4275
4273
|
}
|
|
4276
4274
|
});
|
|
4277
4275
|
return {
|
|
4278
|
-
|
|
4279
|
-
|
|
4276
|
+
addDirectoriesWithFiles: n.mutate,
|
|
4277
|
+
addDirectoriesWithFilesAsync: n.mutateAsync,
|
|
4280
4278
|
isAdding: n.isPending,
|
|
4281
4279
|
isError: n.isError,
|
|
4282
4280
|
error: n.error,
|
|
@@ -4286,7 +4284,7 @@ function na(t) {
|
|
|
4286
4284
|
export {
|
|
4287
4285
|
Xo as FolioEmbed,
|
|
4288
4286
|
Jo as FolioProvider,
|
|
4289
|
-
na as
|
|
4287
|
+
na as useAddFolioDirectoriesWithFiles,
|
|
4290
4288
|
ra as useAddFolioFiles,
|
|
4291
4289
|
ta as useAddFolioProject,
|
|
4292
4290
|
ea as useFolioFiles,
|
|
@@ -31,4 +31,4 @@ React keys must be passed directly to JSX without using spread:
|
|
|
31
31
|
background-color: #${e==="up"?d:h};
|
|
32
32
|
color: ${e==="up"?"black":"white"};
|
|
33
33
|
padding: 2px;
|
|
34
|
-
`;l.push("%c",e==="up"?">>":"<<",r,`#${a}`,`%c${s}%c`,"%O"),c.push(f,`${f}; font-weight: bold;`,`${f}; font-weight: normal;`)}return e==="up"?c.push(n?{input:u,context:t.context}:{input:u}):c.push({input:u,result:t.result,elapsedMs:t.elapsedMs,...n&&{context:t.context}}),{parts:l,args:c}}const Ai=({c:t=console,colorMode:e="css",withContext:r})=>n=>{const s=n.input,a=Fi(s)?Object.fromEntries(s):s,{parts:u,args:l}=xi({...n,colorMode:e,input:a,withContext:r}),c=n.direction==="down"&&n.result&&(n.result instanceof Error||"error"in n.result.result&&n.result.result.error)?"error":"log";t[c].apply(null,[u.join(" ")].concat(l))};function Di(t={}){const{enabled:e=()=>!0}=t,r=t.colorMode??(typeof window>"u"?"ansi":"css"),n=t.withContext??r==="css",{logger:s=Ai({c:t.console,colorMode:r,withContext:n})}=t;return()=>({op:a,next:u})=>Be(l=>{e({...a,direction:"up"})&&s({...a,direction:"up"});const c=Date.now();function d(h){const f=Date.now()-c;e({...a,direction:"down",result:h})&&s({...a,direction:"down",elapsedMs:f,result:h})}return u(a).pipe(Zs({next(h){d(h)},error(h){d(h)}})).subscribe(l)})}const _i=(t,...e)=>typeof t=="function"?t(...e):t;function Ii(){let t,e;return{promise:new Promise((n,s)=>{t=n,e=s}),resolve:t,reject:e}}async function ki(t){const e=await _i(t.url);if(!t.connectionParams)return e;const n=`${e.includes("?")?"&":"?"}connectionParams=1`;return e+n}function ke(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ji(t){const{promise:e,resolve:r,reject:n}=Ii();return t.addEventListener("open",()=>{t.removeEventListener("error",n),r()}),t.addEventListener("error",n),e}function qi(t,{intervalMs:e,pongTimeoutMs:r}){let n,s;function a(){n=setTimeout(()=>{t.send("PING"),s=setTimeout(()=>{t.close()},r)},e)}function u(){clearTimeout(n),a()}function l(){clearTimeout(s),u()}t.addEventListener("open",a),t.addEventListener("message",({data:c})=>{clearTimeout(n),a(),c==="PONG"&&l()}),t.addEventListener("close",()=>{clearTimeout(n),clearTimeout(s)})}class Mt{get ws(){return this.wsObservable.get()}set ws(e){this.wsObservable.next(e)}isOpen(){return!!this.ws&&this.ws.readyState===this.WebSocketPonyfill.OPEN}isClosed(){return!!this.ws&&(this.ws.readyState===this.WebSocketPonyfill.CLOSING||this.ws.readyState===this.WebSocketPonyfill.CLOSED)}async open(){if(this.openPromise)return this.openPromise;this.id=++Mt.connectCount;const e=ki(this.urlOptions).then(r=>new this.WebSocketPonyfill(r));this.openPromise=e.then(ji),this.ws=await e,this.ws.addEventListener("message",function({data:r}){r==="PING"&&this.send("PONG")}),this.keepAliveOpts.enabled&&qi(this.ws,this.keepAliveOpts),this.ws.addEventListener("close",()=>{this.ws=null});try{await this.openPromise}finally{this.openPromise=null}}async close(){var e;try{await this.openPromise}finally{(e=this.ws)==null||e.close()}}constructor(e){if(ke(this,"id",++Mt.connectCount),ke(this,"WebSocketPonyfill",void 0),ke(this,"urlOptions",void 0),ke(this,"keepAliveOpts",void 0),ke(this,"wsObservable",ei(null)),ke(this,"openPromise",null),this.WebSocketPonyfill=e.WebSocketPonyfill??WebSocket,!this.WebSocketPonyfill)throw new Error("No WebSocket implementation found - you probably don't want to use this on the server, but if you do you need to pass a `WebSocket`-ponyfill");this.urlOptions=e.urlOptions,this.keepAliveOpts=e.keepAlive}}ke(Mt,"connectCount",0);class Ui{constructor(){this.keyToValue=new Map,this.valueToKey=new Map}set(e,r){this.keyToValue.set(e,r),this.valueToKey.set(r,e)}getByKey(e){return this.keyToValue.get(e)}getByValue(e){return this.valueToKey.get(e)}clear(){this.keyToValue.clear(),this.valueToKey.clear()}}class fn{constructor(e){this.generateIdentifier=e,this.kv=new Ui}register(e,r){this.kv.getByValue(e)||(r||(r=this.generateIdentifier(e)),this.kv.set(r,e))}clear(){this.kv.clear()}getIdentifier(e){return this.kv.getByValue(e)}getValue(e){return this.kv.getByKey(e)}}class Mi extends fn{constructor(){super(e=>e.name),this.classToAllowedProps=new Map}register(e,r){typeof r=="object"?(r.allowProps&&this.classToAllowedProps.set(e,r.allowProps),super.register(e,r.identifier)):super.register(e,r)}getAllowedProps(e){return this.classToAllowedProps.get(e)}}function Ni(t){if("values"in Object)return Object.values(t);const e=[];for(const r in t)t.hasOwnProperty(r)&&e.push(t[r]);return e}function Li(t,e){const r=Ni(t);if("find"in r)return r.find(e);const n=r;for(let s=0;s<n.length;s++){const a=n[s];if(e(a))return a}}function Ge(t,e){Object.entries(t).forEach(([r,n])=>e(n,r))}function Nt(t,e){return t.indexOf(e)!==-1}function hn(t,e){for(let r=0;r<t.length;r++){const n=t[r];if(e(n))return n}}class Qi{constructor(){this.transfomers={}}register(e){this.transfomers[e.name]=e}findApplicable(e){return Li(this.transfomers,r=>r.isApplicable(e))}findByName(e){return this.transfomers[e]}}const $i=t=>Object.prototype.toString.call(t).slice(8,-1),dn=t=>typeof t>"u",Ki=t=>t===null,wt=t=>typeof t!="object"||t===null||t===Object.prototype?!1:Object.getPrototypeOf(t)===null?!0:Object.getPrototypeOf(t)===Object.prototype,cr=t=>wt(t)&&Object.keys(t).length===0,be=t=>Array.isArray(t),Vi=t=>typeof t=="string",zi=t=>typeof t=="number"&&!isNaN(t),Hi=t=>typeof t=="boolean",Wi=t=>t instanceof RegExp,Et=t=>t instanceof Map,Ot=t=>t instanceof Set,yn=t=>$i(t)==="Symbol",Bi=t=>t instanceof Date&&!isNaN(t.valueOf()),Gi=t=>t instanceof Error,pn=t=>typeof t=="number"&&isNaN(t),Yi=t=>Hi(t)||Ki(t)||dn(t)||zi(t)||Vi(t)||yn(t),Ji=t=>typeof t=="bigint",Xi=t=>t===1/0||t===-1/0,Zi=t=>ArrayBuffer.isView(t)&&!(t instanceof DataView),eo=t=>t instanceof URL,mn=t=>t.replace(/\./g,"\\."),lr=t=>t.map(String).map(mn).join("."),Pt=t=>{const e=[];let r="";for(let s=0;s<t.length;s++){let a=t.charAt(s);if(a==="\\"&&t.charAt(s+1)==="."){r+=".",s++;continue}if(a==="."){e.push(r),r="";continue}r+=a}const n=r;return e.push(n),e};function ue(t,e,r,n){return{isApplicable:t,annotation:e,transform:r,untransform:n}}const gn=[ue(dn,"undefined",()=>null,()=>{}),ue(Ji,"bigint",t=>t.toString(),t=>typeof BigInt<"u"?BigInt(t):(console.error("Please add a BigInt polyfill."),t)),ue(Bi,"Date",t=>t.toISOString(),t=>new Date(t)),ue(Gi,"Error",(t,e)=>{const r={name:t.name,message:t.message};return e.allowedErrorProps.forEach(n=>{r[n]=t[n]}),r},(t,e)=>{const r=new Error(t.message);return r.name=t.name,r.stack=t.stack,e.allowedErrorProps.forEach(n=>{r[n]=t[n]}),r}),ue(Wi,"regexp",t=>""+t,t=>{const e=t.slice(1,t.lastIndexOf("/")),r=t.slice(t.lastIndexOf("/")+1);return new RegExp(e,r)}),ue(Ot,"set",t=>[...t.values()],t=>new Set(t)),ue(Et,"map",t=>[...t.entries()],t=>new Map(t)),ue(t=>pn(t)||Xi(t),"number",t=>pn(t)?"NaN":t>0?"Infinity":"-Infinity",Number),ue(t=>t===0&&1/t===-1/0,"number",()=>"-0",Number),ue(eo,"URL",t=>t.toString(),t=>new URL(t))];function Lt(t,e,r,n){return{isApplicable:t,annotation:e,transform:r,untransform:n}}const bn=Lt((t,e)=>yn(t)?!!e.symbolRegistry.getIdentifier(t):!1,(t,e)=>["symbol",e.symbolRegistry.getIdentifier(t)],t=>t.description,(t,e,r)=>{const n=r.symbolRegistry.getValue(e[1]);if(!n)throw new Error("Trying to deserialize unknown symbol");return n}),to=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,Uint8ClampedArray].reduce((t,e)=>(t[e.name]=e,t),{}),vn=Lt(Zi,t=>["typed-array",t.constructor.name],t=>[...t],(t,e)=>{const r=to[e[1]];if(!r)throw new Error("Trying to deserialize unknown typed array");return new r(t)});function wn(t,e){return t!=null&&t.constructor?!!e.classRegistry.getIdentifier(t.constructor):!1}const En=Lt(wn,(t,e)=>["class",e.classRegistry.getIdentifier(t.constructor)],(t,e)=>{const r=e.classRegistry.getAllowedProps(t.constructor);if(!r)return{...t};const n={};return r.forEach(s=>{n[s]=t[s]}),n},(t,e,r)=>{const n=r.classRegistry.getValue(e[1]);if(!n)throw new Error(`Trying to deserialize unknown class '${e[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`);return Object.assign(Object.create(n.prototype),t)}),On=Lt((t,e)=>!!e.customTransformerRegistry.findApplicable(t),(t,e)=>["custom",e.customTransformerRegistry.findApplicable(t).name],(t,e)=>e.customTransformerRegistry.findApplicable(t).serialize(t),(t,e,r)=>{const n=r.customTransformerRegistry.findByName(e[1]);if(!n)throw new Error("Trying to deserialize unknown custom value");return n.deserialize(t)}),ro=[En,bn,On,vn],Pn=(t,e)=>{const r=hn(ro,s=>s.isApplicable(t,e));if(r)return{value:r.transform(t,e),type:r.annotation(t,e)};const n=hn(gn,s=>s.isApplicable(t,e));if(n)return{value:n.transform(t,e),type:n.annotation}},Rn={};gn.forEach(t=>{Rn[t.annotation]=t});const no=(t,e,r)=>{if(be(e))switch(e[0]){case"symbol":return bn.untransform(t,e,r);case"class":return En.untransform(t,e,r);case"custom":return On.untransform(t,e,r);case"typed-array":return vn.untransform(t,e,r);default:throw new Error("Unknown transformation: "+e)}else{const n=Rn[e];if(!n)throw new Error("Unknown transformation: "+e);return n.untransform(t,r)}},Ye=(t,e)=>{if(e>t.size)throw new Error("index out of bounds");const r=t.keys();for(;e>0;)r.next(),e--;return r.next().value};function Sn(t){if(Nt(t,"__proto__"))throw new Error("__proto__ is not allowed as a property");if(Nt(t,"prototype"))throw new Error("prototype is not allowed as a property");if(Nt(t,"constructor"))throw new Error("constructor is not allowed as a property")}const so=(t,e)=>{Sn(e);for(let r=0;r<e.length;r++){const n=e[r];if(Ot(t))t=Ye(t,+n);else if(Et(t)){const s=+n,a=+e[++r]==0?"key":"value",u=Ye(t,s);switch(a){case"key":t=u;break;case"value":t=t.get(u);break}}else t=t[n]}return t},fr=(t,e,r)=>{if(Sn(e),e.length===0)return r(t);let n=t;for(let a=0;a<e.length-1;a++){const u=e[a];if(be(n)){const l=+u;n=n[l]}else if(wt(n))n=n[u];else if(Ot(n)){const l=+u;n=Ye(n,l)}else if(Et(n)){if(a===e.length-2)break;const c=+u,d=+e[++a]==0?"key":"value",h=Ye(n,c);switch(d){case"key":n=h;break;case"value":n=n.get(h);break}}}const s=e[e.length-1];if(be(n)?n[+s]=r(n[+s]):wt(n)&&(n[s]=r(n[s])),Ot(n)){const a=Ye(n,+s),u=r(a);a!==u&&(n.delete(a),n.add(u))}if(Et(n)){const a=+e[e.length-2],u=Ye(n,a);switch(+s==0?"key":"value"){case"key":{const c=r(u);n.set(c,n.get(u)),c!==u&&n.delete(u);break}case"value":{n.set(u,r(n.get(u)));break}}}return t};function hr(t,e,r=[]){if(!t)return;if(!be(t)){Ge(t,(a,u)=>hr(a,e,[...r,...Pt(u)]));return}const[n,s]=t;s&&Ge(s,(a,u)=>{hr(a,e,[...r,...Pt(u)])}),e(n,r)}function io(t,e,r){return hr(e,(n,s)=>{t=fr(t,s,a=>no(a,n,r))}),t}function oo(t,e){function r(n,s){const a=so(t,Pt(s));n.map(Pt).forEach(u=>{t=fr(t,u,()=>a)})}if(be(e)){const[n,s]=e;n.forEach(a=>{t=fr(t,Pt(a),()=>t)}),s&&Ge(s,r)}else Ge(e,r);return t}const ao=(t,e)=>wt(t)||be(t)||Et(t)||Ot(t)||wn(t,e);function uo(t,e,r){const n=r.get(t);n?n.push(e):r.set(t,[e])}function co(t,e){const r={};let n;return t.forEach(s=>{if(s.length<=1)return;e||(s=s.map(l=>l.map(String)).sort((l,c)=>l.length-c.length));const[a,...u]=s;a.length===0?n=u.map(lr):r[lr(a)]=u.map(lr)}),n?cr(r)?[n]:[n,r]:cr(r)?void 0:r}const Cn=(t,e,r,n,s=[],a=[],u=new Map)=>{const l=Yi(t);if(!l){uo(t,s,e);const m=u.get(t);if(m)return n?{transformedValue:null}:m}if(!ao(t,r)){const m=Pn(t,r),P=m?{transformedValue:m.value,annotations:[m.type]}:{transformedValue:t};return l||u.set(t,P),P}if(Nt(a,t))return{transformedValue:null};const c=Pn(t,r),d=(c==null?void 0:c.value)??t,h=be(d)?[]:{},f={};Ge(d,(m,P)=>{if(P==="__proto__"||P==="constructor"||P==="prototype")throw new Error(`Detected property ${P}. This is a prototype pollution risk, please remove it from your object.`);const v=Cn(m,e,r,n,[...s,P],[...a,t],u);h[P]=v.transformedValue,be(v.annotations)?f[P]=v.annotations:wt(v.annotations)&&Ge(v.annotations,(O,D)=>{f[mn(P)+"."+D]=O})});const p=cr(f)?{transformedValue:h,annotations:c?[c.type]:void 0}:{transformedValue:h,annotations:c?[c.type,f]:f};return l||u.set(t,p),p};function Tn(t){return Object.prototype.toString.call(t).slice(8,-1)}function Fn(t){return Tn(t)==="Array"}function lo(t){if(Tn(t)!=="Object")return!1;const e=Object.getPrototypeOf(t);return!!e&&e.constructor===Object&&e===Object.prototype}function fo(t,e,r,n,s){const a={}.propertyIsEnumerable.call(n,e)?"enumerable":"nonenumerable";a==="enumerable"&&(t[e]=r),s&&a==="nonenumerable"&&Object.defineProperty(t,e,{value:r,enumerable:!1,writable:!0,configurable:!0})}function dr(t,e={}){if(Fn(t))return t.map(s=>dr(s,e));if(!lo(t))return t;const r=Object.getOwnPropertyNames(t),n=Object.getOwnPropertySymbols(t);return[...r,...n].reduce((s,a)=>{if(Fn(e.props)&&!e.props.includes(a))return s;const u=t[a],l=dr(u,e);return fo(s,a,l,t,e.nonenumerable),s},{})}class C{constructor({dedupe:e=!1}={}){this.classRegistry=new Mi,this.symbolRegistry=new fn(r=>r.description??""),this.customTransformerRegistry=new Qi,this.allowedErrorProps=[],this.dedupe=e}serialize(e){const r=new Map,n=Cn(e,r,this,this.dedupe),s={json:n.transformedValue};n.annotations&&(s.meta={...s.meta,values:n.annotations});const a=co(r,this.dedupe);return a&&(s.meta={...s.meta,referentialEqualities:a}),s}deserialize(e){const{json:r,meta:n}=e;let s=dr(r);return n!=null&&n.values&&(s=io(s,n.values,this)),n!=null&&n.referentialEqualities&&(s=oo(s,n.referentialEqualities)),s}stringify(e){return JSON.stringify(this.serialize(e))}parse(e){return this.deserialize(JSON.parse(e))}registerClass(e,r){this.classRegistry.register(e,r)}registerSymbol(e,r){this.symbolRegistry.register(e,r)}registerCustom(e,r){this.customTransformerRegistry.register({name:r,...e})}allowErrorProps(...e){this.allowedErrorProps.push(...e)}}C.defaultInstance=new C,C.serialize=C.defaultInstance.serialize.bind(C.defaultInstance),C.deserialize=C.defaultInstance.deserialize.bind(C.defaultInstance),C.stringify=C.defaultInstance.stringify.bind(C.defaultInstance),C.parse=C.defaultInstance.parse.bind(C.defaultInstance),C.registerClass=C.defaultInstance.registerClass.bind(C.defaultInstance),C.registerSymbol=C.defaultInstance.registerSymbol.bind(C.defaultInstance),C.registerCustom=C.defaultInstance.registerCustom.bind(C.defaultInstance),C.allowErrorProps=C.defaultInstance.allowErrorProps.bind(C.defaultInstance),C.serialize,C.deserialize,C.stringify,C.parse,C.registerClass,C.registerCustom,C.registerSymbol,C.allowErrorProps;const xn=_.createContext(null);function ho(t,e){const r=yi({links:[Di({enabled:s=>process.env.NODE_ENV==="development"&&typeof window<"u"||s.direction==="down"&&s.result instanceof Error}),Ti({url:`${t}/trpc`,headers:()=>({Authorization:`Bearer ${e}`}),transformer:C})]}),n=async(s,a,u=null)=>{const l=a.filter(f=>f.name.toLowerCase().endsWith(".pdf"));if(l.length===0)return{filesToCreate:[]};const c=await r.fileRouter.getFilesByProject.query({projectId:s}),d=l.filter(f=>u===null?!c.some(p=>p.path===f.blobUrl):!c.some(p=>p.path===f.blobUrl&&p.parentId===u));return d.length===0?{filesToCreate:[]}:{filesToCreate:d.map(f=>({projectId:s,mimeType:Dt.PDF,path:f.blobUrl,name:f.name,size:0,metadata:null,isArtifact:!1,summary:null,chunkingStatus:Wt.NOT_CHUNKED,isDirectory:!1,parentId:u}))}};return{getProjectsForUser:async()=>{const s=await r.projectRouter.getAllProjects.query();if(s.length===0){const a=await r.projectRouter.createProject.mutate({name:"Default Project"});return[{name:a.name,id:a.id}]}return s.map(a=>({name:a.name,id:a.id}))},addProjectForUser:async s=>{const a=await r.projectRouter.createProject.mutate({name:s});return{name:a.name,id:a.id}},addFilesToProject:async(s,a)=>{const{filesToCreate:u}=await n(s,a);return u.length===0?[]:(await r.fileRouter.createFiles.mutate({files:u})).map(c=>({blobUrl:c.path,name:c.name,id:c.id,parentId:c.parentId,isDirectory:c.isDirectory}))},getFilesForProject:async s=>(await r.fileRouter.getFilesByProject.query({projectId:s})).map(u=>({blobUrl:u.path,name:u.name,id:u.id,parentId:u.parentId,isDirectory:u.isDirectory})),addDirectoryWithFilesToProject:async(s,a,u,l)=>{if((await r.fileRouter.getFilesByProject.query({projectId:s})).some(m=>m.name===a&&m.isDirectory===!0&&m.parentId===null))return console.warn(`A directory named "${a}" already exists at the root level. Skipping creation.`),{directory:null,files:[]};const h=await r.fileRouter.createFile.mutate({file:{projectId:s,mimeType:Dt.DIRECTORY,path:"",name:a,size:0,metadata:u,isArtifact:!1,isDirectory:!0,parentId:null,summary:null,chunkingStatus:Wt.NOT_CHUNKED}});if(l.length===0)return{directory:{blobUrl:h.path,name:h.name,id:h.id,parentId:h.parentId,isDirectory:h.isDirectory},files:[]};const{filesToCreate:f}=await n(s,l,h.id);if(f.length===0)return{directory:{blobUrl:h.path,name:h.name,id:h.id,parentId:h.parentId,isDirectory:h.isDirectory},files:[]};const p=await r.fileRouter.createFiles.mutate({files:f});return{directory:h?{blobUrl:h.path,name:h.name,id:h.id,parentId:h.parentId,isDirectory:h.isDirectory}:null,files:p.map(m=>({blobUrl:m.path,name:m.name,id:m.id,parentId:m.parentId,isDirectory:m.isDirectory}))}}}}function yo({children:t,host:e="http://localhost",port:r=5174,token:n}){const[s,a]=_.useState(null),u=_.useMemo(()=>new Is({defaultOptions:{queries:{staleTime:30*1e3,refetchOnWindowFocus:!1}}}),[]);return _.useEffect(()=>{const l=`${e}:${r}`,c=ho(l,n);a(c)},[e,r,n]),mt.jsx(Ms,{client:u,children:mt.jsx(xn.Provider,{value:{host:e,port:r,client:s,token:n},children:t})})}function Je(){const t=_.useContext(xn);if(!t)throw new Error("useFolioContext must be used within a FolioProvider");return t}const{useEffect:po,useRef:mo,useState:go}=M;function bo({width:t="100%",height:e="100vh",allow:r="camera; microphone; clipboard-read; clipboard-write; fullscreen",style:n,className:s="",iframeProps:a={}}){const{host:u,port:l,token:c}=Je(),d=mo(null),[h,f]=go();return po(()=>{(()=>{const P=`${`${u}:${l}`}?jwt=${encodeURIComponent(c)}`;f(P)})()},[u,l,c]),h?mt.jsx("div",{className:`folio-embed-container ${s}`,style:{width:t,height:e,overflow:"hidden",...n},children:mt.jsx("iframe",{ref:d,src:h,width:"100%",height:"100%",style:{border:"none",width:"100%",height:"100%",overflow:"auto"},allow:r,allowFullScreen:!0,...a})}):null}function vo(){const{client:t}=Je(),e=Zr({queryKey:["folioProjects"],queryFn:async()=>{if(!t)throw new Error("Folio client not initialized");return t.getProjectsForUser()},enabled:!!t});return{projects:e.data||[],isLoading:e.isLoading,isError:e.isError,error:e.error,refetch:e.refetch}}function wo(t){const{client:e}=Je(),r=Zr({queryKey:["folioFiles",t],queryFn:async()=>{if(!e)throw new Error("Folio client not initialized");if(!t)throw new Error("Project ID is required");return e.getFilesForProject(t)},enabled:!!e&&!!t});return{files:r.data||[],isLoading:r.isLoading,isError:r.isError,error:r.error,refetch:r.refetch}}function Eo(){const{client:t}=Je(),e=bt(),r=ir({mutationFn:async n=>{if(!t)throw new Error("Folio client not initialized");return t.addProjectForUser(n)},onSuccess:()=>{e.invalidateQueries({queryKey:["folioProjects"]})}});return{addProject:r.mutate,addProjectAsync:r.mutateAsync,isAdding:r.isPending,isError:r.isError,error:r.error,newProject:r.data}}function Oo(t){const{client:e}=Je(),r=bt(),n=ir({mutationFn:async s=>{if(!e)throw new Error("Folio client not initialized");if(!t)throw new Error("Project ID is required");return e.addFilesToProject(t,s)},onSuccess:()=>{r.invalidateQueries({queryKey:["folioFiles",t]})}});return{addFiles:n.mutate,addFilesAsync:n.mutateAsync,isAdding:n.isPending,isError:n.isError,error:n.error,newFiles:n.data}}function Po(t){const{client:e}=Je(),r=bt(),n=ir({mutationFn:async s=>{if(!e)throw new Error("Folio client not initialized");if(!t)throw new Error("Project ID is required");const a=Array.isArray(s)?s:[s],u=[];for(const l of a){const c=JSON.stringify(Object.fromEntries(l.directoryMetadata)),d=await e.addDirectoryWithFilesToProject(t,l.directoryName,c,l.files);u.push(d)}return Array.isArray(s)?u:u[0]},onSuccess:()=>{r.invalidateQueries({queryKey:["folioFiles",t]})}});return{addDirectoryWithFiles:n.mutate,addDirectoryWithFilesAsync:n.mutateAsync,isAdding:n.isPending,isError:n.isError,error:n.error,result:n.data}}x.FolioEmbed=bo,x.FolioProvider=yo,x.useAddFolioDirectoryWithFiles=Po,x.useAddFolioFiles=Oo,x.useAddFolioProject=Eo,x.useFolioFiles=wo,x.useFolioProjects=vo,Object.defineProperty(x,Symbol.toStringTag,{value:"Module"})});
|
|
34
|
+
`;l.push("%c",e==="up"?">>":"<<",r,`#${a}`,`%c${s}%c`,"%O"),c.push(f,`${f}; font-weight: bold;`,`${f}; font-weight: normal;`)}return e==="up"?c.push(n?{input:u,context:t.context}:{input:u}):c.push({input:u,result:t.result,elapsedMs:t.elapsedMs,...n&&{context:t.context}}),{parts:l,args:c}}const Ai=({c:t=console,colorMode:e="css",withContext:r})=>n=>{const s=n.input,a=Fi(s)?Object.fromEntries(s):s,{parts:u,args:l}=xi({...n,colorMode:e,input:a,withContext:r}),c=n.direction==="down"&&n.result&&(n.result instanceof Error||"error"in n.result.result&&n.result.result.error)?"error":"log";t[c].apply(null,[u.join(" ")].concat(l))};function Di(t={}){const{enabled:e=()=>!0}=t,r=t.colorMode??(typeof window>"u"?"ansi":"css"),n=t.withContext??r==="css",{logger:s=Ai({c:t.console,colorMode:r,withContext:n})}=t;return()=>({op:a,next:u})=>Be(l=>{e({...a,direction:"up"})&&s({...a,direction:"up"});const c=Date.now();function d(h){const f=Date.now()-c;e({...a,direction:"down",result:h})&&s({...a,direction:"down",elapsedMs:f,result:h})}return u(a).pipe(Zs({next(h){d(h)},error(h){d(h)}})).subscribe(l)})}const _i=(t,...e)=>typeof t=="function"?t(...e):t;function Ii(){let t,e;return{promise:new Promise((n,s)=>{t=n,e=s}),resolve:t,reject:e}}async function ki(t){const e=await _i(t.url);if(!t.connectionParams)return e;const n=`${e.includes("?")?"&":"?"}connectionParams=1`;return e+n}function ke(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ji(t){const{promise:e,resolve:r,reject:n}=Ii();return t.addEventListener("open",()=>{t.removeEventListener("error",n),r()}),t.addEventListener("error",n),e}function qi(t,{intervalMs:e,pongTimeoutMs:r}){let n,s;function a(){n=setTimeout(()=>{t.send("PING"),s=setTimeout(()=>{t.close()},r)},e)}function u(){clearTimeout(n),a()}function l(){clearTimeout(s),u()}t.addEventListener("open",a),t.addEventListener("message",({data:c})=>{clearTimeout(n),a(),c==="PONG"&&l()}),t.addEventListener("close",()=>{clearTimeout(n),clearTimeout(s)})}class Mt{get ws(){return this.wsObservable.get()}set ws(e){this.wsObservable.next(e)}isOpen(){return!!this.ws&&this.ws.readyState===this.WebSocketPonyfill.OPEN}isClosed(){return!!this.ws&&(this.ws.readyState===this.WebSocketPonyfill.CLOSING||this.ws.readyState===this.WebSocketPonyfill.CLOSED)}async open(){if(this.openPromise)return this.openPromise;this.id=++Mt.connectCount;const e=ki(this.urlOptions).then(r=>new this.WebSocketPonyfill(r));this.openPromise=e.then(ji),this.ws=await e,this.ws.addEventListener("message",function({data:r}){r==="PING"&&this.send("PONG")}),this.keepAliveOpts.enabled&&qi(this.ws,this.keepAliveOpts),this.ws.addEventListener("close",()=>{this.ws=null});try{await this.openPromise}finally{this.openPromise=null}}async close(){var e;try{await this.openPromise}finally{(e=this.ws)==null||e.close()}}constructor(e){if(ke(this,"id",++Mt.connectCount),ke(this,"WebSocketPonyfill",void 0),ke(this,"urlOptions",void 0),ke(this,"keepAliveOpts",void 0),ke(this,"wsObservable",ei(null)),ke(this,"openPromise",null),this.WebSocketPonyfill=e.WebSocketPonyfill??WebSocket,!this.WebSocketPonyfill)throw new Error("No WebSocket implementation found - you probably don't want to use this on the server, but if you do you need to pass a `WebSocket`-ponyfill");this.urlOptions=e.urlOptions,this.keepAliveOpts=e.keepAlive}}ke(Mt,"connectCount",0);class Ui{constructor(){this.keyToValue=new Map,this.valueToKey=new Map}set(e,r){this.keyToValue.set(e,r),this.valueToKey.set(r,e)}getByKey(e){return this.keyToValue.get(e)}getByValue(e){return this.valueToKey.get(e)}clear(){this.keyToValue.clear(),this.valueToKey.clear()}}class fn{constructor(e){this.generateIdentifier=e,this.kv=new Ui}register(e,r){this.kv.getByValue(e)||(r||(r=this.generateIdentifier(e)),this.kv.set(r,e))}clear(){this.kv.clear()}getIdentifier(e){return this.kv.getByValue(e)}getValue(e){return this.kv.getByKey(e)}}class Mi extends fn{constructor(){super(e=>e.name),this.classToAllowedProps=new Map}register(e,r){typeof r=="object"?(r.allowProps&&this.classToAllowedProps.set(e,r.allowProps),super.register(e,r.identifier)):super.register(e,r)}getAllowedProps(e){return this.classToAllowedProps.get(e)}}function Ni(t){if("values"in Object)return Object.values(t);const e=[];for(const r in t)t.hasOwnProperty(r)&&e.push(t[r]);return e}function Li(t,e){const r=Ni(t);if("find"in r)return r.find(e);const n=r;for(let s=0;s<n.length;s++){const a=n[s];if(e(a))return a}}function Ge(t,e){Object.entries(t).forEach(([r,n])=>e(n,r))}function Nt(t,e){return t.indexOf(e)!==-1}function hn(t,e){for(let r=0;r<t.length;r++){const n=t[r];if(e(n))return n}}class Qi{constructor(){this.transfomers={}}register(e){this.transfomers[e.name]=e}findApplicable(e){return Li(this.transfomers,r=>r.isApplicable(e))}findByName(e){return this.transfomers[e]}}const $i=t=>Object.prototype.toString.call(t).slice(8,-1),dn=t=>typeof t>"u",Ki=t=>t===null,wt=t=>typeof t!="object"||t===null||t===Object.prototype?!1:Object.getPrototypeOf(t)===null?!0:Object.getPrototypeOf(t)===Object.prototype,cr=t=>wt(t)&&Object.keys(t).length===0,be=t=>Array.isArray(t),Vi=t=>typeof t=="string",zi=t=>typeof t=="number"&&!isNaN(t),Hi=t=>typeof t=="boolean",Wi=t=>t instanceof RegExp,Et=t=>t instanceof Map,Ot=t=>t instanceof Set,yn=t=>$i(t)==="Symbol",Bi=t=>t instanceof Date&&!isNaN(t.valueOf()),Gi=t=>t instanceof Error,pn=t=>typeof t=="number"&&isNaN(t),Yi=t=>Hi(t)||Ki(t)||dn(t)||zi(t)||Vi(t)||yn(t),Ji=t=>typeof t=="bigint",Xi=t=>t===1/0||t===-1/0,Zi=t=>ArrayBuffer.isView(t)&&!(t instanceof DataView),eo=t=>t instanceof URL,mn=t=>t.replace(/\./g,"\\."),lr=t=>t.map(String).map(mn).join("."),Pt=t=>{const e=[];let r="";for(let s=0;s<t.length;s++){let a=t.charAt(s);if(a==="\\"&&t.charAt(s+1)==="."){r+=".",s++;continue}if(a==="."){e.push(r),r="";continue}r+=a}const n=r;return e.push(n),e};function ue(t,e,r,n){return{isApplicable:t,annotation:e,transform:r,untransform:n}}const gn=[ue(dn,"undefined",()=>null,()=>{}),ue(Ji,"bigint",t=>t.toString(),t=>typeof BigInt<"u"?BigInt(t):(console.error("Please add a BigInt polyfill."),t)),ue(Bi,"Date",t=>t.toISOString(),t=>new Date(t)),ue(Gi,"Error",(t,e)=>{const r={name:t.name,message:t.message};return e.allowedErrorProps.forEach(n=>{r[n]=t[n]}),r},(t,e)=>{const r=new Error(t.message);return r.name=t.name,r.stack=t.stack,e.allowedErrorProps.forEach(n=>{r[n]=t[n]}),r}),ue(Wi,"regexp",t=>""+t,t=>{const e=t.slice(1,t.lastIndexOf("/")),r=t.slice(t.lastIndexOf("/")+1);return new RegExp(e,r)}),ue(Ot,"set",t=>[...t.values()],t=>new Set(t)),ue(Et,"map",t=>[...t.entries()],t=>new Map(t)),ue(t=>pn(t)||Xi(t),"number",t=>pn(t)?"NaN":t>0?"Infinity":"-Infinity",Number),ue(t=>t===0&&1/t===-1/0,"number",()=>"-0",Number),ue(eo,"URL",t=>t.toString(),t=>new URL(t))];function Lt(t,e,r,n){return{isApplicable:t,annotation:e,transform:r,untransform:n}}const bn=Lt((t,e)=>yn(t)?!!e.symbolRegistry.getIdentifier(t):!1,(t,e)=>["symbol",e.symbolRegistry.getIdentifier(t)],t=>t.description,(t,e,r)=>{const n=r.symbolRegistry.getValue(e[1]);if(!n)throw new Error("Trying to deserialize unknown symbol");return n}),to=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,Uint8ClampedArray].reduce((t,e)=>(t[e.name]=e,t),{}),vn=Lt(Zi,t=>["typed-array",t.constructor.name],t=>[...t],(t,e)=>{const r=to[e[1]];if(!r)throw new Error("Trying to deserialize unknown typed array");return new r(t)});function wn(t,e){return t!=null&&t.constructor?!!e.classRegistry.getIdentifier(t.constructor):!1}const En=Lt(wn,(t,e)=>["class",e.classRegistry.getIdentifier(t.constructor)],(t,e)=>{const r=e.classRegistry.getAllowedProps(t.constructor);if(!r)return{...t};const n={};return r.forEach(s=>{n[s]=t[s]}),n},(t,e,r)=>{const n=r.classRegistry.getValue(e[1]);if(!n)throw new Error(`Trying to deserialize unknown class '${e[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`);return Object.assign(Object.create(n.prototype),t)}),On=Lt((t,e)=>!!e.customTransformerRegistry.findApplicable(t),(t,e)=>["custom",e.customTransformerRegistry.findApplicable(t).name],(t,e)=>e.customTransformerRegistry.findApplicable(t).serialize(t),(t,e,r)=>{const n=r.customTransformerRegistry.findByName(e[1]);if(!n)throw new Error("Trying to deserialize unknown custom value");return n.deserialize(t)}),ro=[En,bn,On,vn],Pn=(t,e)=>{const r=hn(ro,s=>s.isApplicable(t,e));if(r)return{value:r.transform(t,e),type:r.annotation(t,e)};const n=hn(gn,s=>s.isApplicable(t,e));if(n)return{value:n.transform(t,e),type:n.annotation}},Rn={};gn.forEach(t=>{Rn[t.annotation]=t});const no=(t,e,r)=>{if(be(e))switch(e[0]){case"symbol":return bn.untransform(t,e,r);case"class":return En.untransform(t,e,r);case"custom":return On.untransform(t,e,r);case"typed-array":return vn.untransform(t,e,r);default:throw new Error("Unknown transformation: "+e)}else{const n=Rn[e];if(!n)throw new Error("Unknown transformation: "+e);return n.untransform(t,r)}},Ye=(t,e)=>{if(e>t.size)throw new Error("index out of bounds");const r=t.keys();for(;e>0;)r.next(),e--;return r.next().value};function Sn(t){if(Nt(t,"__proto__"))throw new Error("__proto__ is not allowed as a property");if(Nt(t,"prototype"))throw new Error("prototype is not allowed as a property");if(Nt(t,"constructor"))throw new Error("constructor is not allowed as a property")}const so=(t,e)=>{Sn(e);for(let r=0;r<e.length;r++){const n=e[r];if(Ot(t))t=Ye(t,+n);else if(Et(t)){const s=+n,a=+e[++r]==0?"key":"value",u=Ye(t,s);switch(a){case"key":t=u;break;case"value":t=t.get(u);break}}else t=t[n]}return t},fr=(t,e,r)=>{if(Sn(e),e.length===0)return r(t);let n=t;for(let a=0;a<e.length-1;a++){const u=e[a];if(be(n)){const l=+u;n=n[l]}else if(wt(n))n=n[u];else if(Ot(n)){const l=+u;n=Ye(n,l)}else if(Et(n)){if(a===e.length-2)break;const c=+u,d=+e[++a]==0?"key":"value",h=Ye(n,c);switch(d){case"key":n=h;break;case"value":n=n.get(h);break}}}const s=e[e.length-1];if(be(n)?n[+s]=r(n[+s]):wt(n)&&(n[s]=r(n[s])),Ot(n)){const a=Ye(n,+s),u=r(a);a!==u&&(n.delete(a),n.add(u))}if(Et(n)){const a=+e[e.length-2],u=Ye(n,a);switch(+s==0?"key":"value"){case"key":{const c=r(u);n.set(c,n.get(u)),c!==u&&n.delete(u);break}case"value":{n.set(u,r(n.get(u)));break}}}return t};function hr(t,e,r=[]){if(!t)return;if(!be(t)){Ge(t,(a,u)=>hr(a,e,[...r,...Pt(u)]));return}const[n,s]=t;s&&Ge(s,(a,u)=>{hr(a,e,[...r,...Pt(u)])}),e(n,r)}function io(t,e,r){return hr(e,(n,s)=>{t=fr(t,s,a=>no(a,n,r))}),t}function oo(t,e){function r(n,s){const a=so(t,Pt(s));n.map(Pt).forEach(u=>{t=fr(t,u,()=>a)})}if(be(e)){const[n,s]=e;n.forEach(a=>{t=fr(t,Pt(a),()=>t)}),s&&Ge(s,r)}else Ge(e,r);return t}const ao=(t,e)=>wt(t)||be(t)||Et(t)||Ot(t)||wn(t,e);function uo(t,e,r){const n=r.get(t);n?n.push(e):r.set(t,[e])}function co(t,e){const r={};let n;return t.forEach(s=>{if(s.length<=1)return;e||(s=s.map(l=>l.map(String)).sort((l,c)=>l.length-c.length));const[a,...u]=s;a.length===0?n=u.map(lr):r[lr(a)]=u.map(lr)}),n?cr(r)?[n]:[n,r]:cr(r)?void 0:r}const Cn=(t,e,r,n,s=[],a=[],u=new Map)=>{const l=Yi(t);if(!l){uo(t,s,e);const m=u.get(t);if(m)return n?{transformedValue:null}:m}if(!ao(t,r)){const m=Pn(t,r),P=m?{transformedValue:m.value,annotations:[m.type]}:{transformedValue:t};return l||u.set(t,P),P}if(Nt(a,t))return{transformedValue:null};const c=Pn(t,r),d=(c==null?void 0:c.value)??t,h=be(d)?[]:{},f={};Ge(d,(m,P)=>{if(P==="__proto__"||P==="constructor"||P==="prototype")throw new Error(`Detected property ${P}. This is a prototype pollution risk, please remove it from your object.`);const v=Cn(m,e,r,n,[...s,P],[...a,t],u);h[P]=v.transformedValue,be(v.annotations)?f[P]=v.annotations:wt(v.annotations)&&Ge(v.annotations,(O,D)=>{f[mn(P)+"."+D]=O})});const p=cr(f)?{transformedValue:h,annotations:c?[c.type]:void 0}:{transformedValue:h,annotations:c?[c.type,f]:f};return l||u.set(t,p),p};function Tn(t){return Object.prototype.toString.call(t).slice(8,-1)}function Fn(t){return Tn(t)==="Array"}function lo(t){if(Tn(t)!=="Object")return!1;const e=Object.getPrototypeOf(t);return!!e&&e.constructor===Object&&e===Object.prototype}function fo(t,e,r,n,s){const a={}.propertyIsEnumerable.call(n,e)?"enumerable":"nonenumerable";a==="enumerable"&&(t[e]=r),s&&a==="nonenumerable"&&Object.defineProperty(t,e,{value:r,enumerable:!1,writable:!0,configurable:!0})}function dr(t,e={}){if(Fn(t))return t.map(s=>dr(s,e));if(!lo(t))return t;const r=Object.getOwnPropertyNames(t),n=Object.getOwnPropertySymbols(t);return[...r,...n].reduce((s,a)=>{if(Fn(e.props)&&!e.props.includes(a))return s;const u=t[a],l=dr(u,e);return fo(s,a,l,t,e.nonenumerable),s},{})}class C{constructor({dedupe:e=!1}={}){this.classRegistry=new Mi,this.symbolRegistry=new fn(r=>r.description??""),this.customTransformerRegistry=new Qi,this.allowedErrorProps=[],this.dedupe=e}serialize(e){const r=new Map,n=Cn(e,r,this,this.dedupe),s={json:n.transformedValue};n.annotations&&(s.meta={...s.meta,values:n.annotations});const a=co(r,this.dedupe);return a&&(s.meta={...s.meta,referentialEqualities:a}),s}deserialize(e){const{json:r,meta:n}=e;let s=dr(r);return n!=null&&n.values&&(s=io(s,n.values,this)),n!=null&&n.referentialEqualities&&(s=oo(s,n.referentialEqualities)),s}stringify(e){return JSON.stringify(this.serialize(e))}parse(e){return this.deserialize(JSON.parse(e))}registerClass(e,r){this.classRegistry.register(e,r)}registerSymbol(e,r){this.symbolRegistry.register(e,r)}registerCustom(e,r){this.customTransformerRegistry.register({name:r,...e})}allowErrorProps(...e){this.allowedErrorProps.push(...e)}}C.defaultInstance=new C,C.serialize=C.defaultInstance.serialize.bind(C.defaultInstance),C.deserialize=C.defaultInstance.deserialize.bind(C.defaultInstance),C.stringify=C.defaultInstance.stringify.bind(C.defaultInstance),C.parse=C.defaultInstance.parse.bind(C.defaultInstance),C.registerClass=C.defaultInstance.registerClass.bind(C.defaultInstance),C.registerSymbol=C.defaultInstance.registerSymbol.bind(C.defaultInstance),C.registerCustom=C.defaultInstance.registerCustom.bind(C.defaultInstance),C.allowErrorProps=C.defaultInstance.allowErrorProps.bind(C.defaultInstance),C.serialize,C.deserialize,C.stringify,C.parse,C.registerClass,C.registerCustom,C.registerSymbol,C.allowErrorProps;const xn=_.createContext(null);function ho(t,e){const r=yi({links:[Di({enabled:s=>process.env.NODE_ENV==="development"&&typeof window<"u"||s.direction==="down"&&s.result instanceof Error}),Ti({url:`${t}/trpc`,headers:()=>({Authorization:`Bearer ${e}`}),transformer:C})]}),n=async(s,a,u=null)=>{const l=a.filter(f=>f.name.toLowerCase().endsWith(".pdf"));if(l.length===0)return{filesToCreate:[]};const c=await r.fileRouter.getFilesByProject.query({projectId:s}),d=l.filter(f=>u===null?!c.some(p=>p.path===f.blobUrl):!c.some(p=>p.path===f.blobUrl&&p.parentId===u));return d.length===0?{filesToCreate:[]}:{filesToCreate:d.map(f=>({projectId:s,mimeType:Dt.PDF,path:f.blobUrl,name:f.name,size:0,metadata:null,isArtifact:!1,summary:null,chunkingStatus:Wt.NOT_CHUNKED,isDirectory:!1,parentId:u}))}};return{getProjectsForUser:async()=>{const s=await r.projectRouter.getAllProjects.query();if(s.length===0){const a=await r.projectRouter.createProject.mutate({name:"Default Project"});return[{name:a.name,id:a.id}]}return s.map(a=>({name:a.name,id:a.id}))},addProjectForUser:async s=>{const a=await r.projectRouter.createProject.mutate({name:s});return{name:a.name,id:a.id}},addFilesToProject:async(s,a)=>{const{filesToCreate:u}=await n(s,a);return u.length===0?[]:(await r.fileRouter.createFiles.mutate({files:u})).map(c=>({blobUrl:c.path,name:c.name,id:c.id,parentId:c.parentId,isDirectory:c.isDirectory}))},getFilesForProject:async s=>(await r.fileRouter.getFilesByProject.query({projectId:s})).map(u=>({blobUrl:u.path,name:u.name,id:u.id,parentId:u.parentId,isDirectory:u.isDirectory})),addDirectoryWithFilesToProject:async(s,a,u,l)=>{if((await r.fileRouter.getFilesByProject.query({projectId:s})).some(m=>m.name===a&&m.isDirectory===!0&&m.parentId===null))return console.warn(`A directory named "${a}" already exists at the root level. Skipping creation.`),{directory:null,files:[]};const h=await r.fileRouter.createFile.mutate({file:{projectId:s,mimeType:Dt.DIRECTORY,path:"",name:a,size:0,metadata:u,isArtifact:!1,isDirectory:!0,parentId:null,summary:null,chunkingStatus:Wt.NOT_CHUNKED}});if(l.length===0)return{directory:{blobUrl:h.path,name:h.name,id:h.id,parentId:h.parentId,isDirectory:h.isDirectory},files:[]};const{filesToCreate:f}=await n(s,l,h.id);if(f.length===0)return{directory:{blobUrl:h.path,name:h.name,id:h.id,parentId:h.parentId,isDirectory:h.isDirectory},files:[]};const p=await r.fileRouter.createFiles.mutate({files:f});return{directory:h?{blobUrl:h.path,name:h.name,id:h.id,parentId:h.parentId,isDirectory:h.isDirectory}:null,files:p.map(m=>({blobUrl:m.path,name:m.name,id:m.id,parentId:m.parentId,isDirectory:m.isDirectory}))}}}}function yo({children:t,host:e="http://localhost",port:r=5174,token:n}){const[s,a]=_.useState(null),u=_.useMemo(()=>new Is({defaultOptions:{queries:{staleTime:30*1e3,refetchOnWindowFocus:!1}}}),[]);return _.useEffect(()=>{const l=`${e}:${r}`,c=ho(l,n);a(c)},[e,r,n]),mt.jsx(Ms,{client:u,children:mt.jsx(xn.Provider,{value:{host:e,port:r,client:s,token:n},children:t})})}function Je(){const t=_.useContext(xn);if(!t)throw new Error("useFolioContext must be used within a FolioProvider");return t}const{useEffect:po,useRef:mo,useState:go}=M;function bo({width:t="100%",height:e="100vh",allow:r="camera; microphone; clipboard-read; clipboard-write; fullscreen",style:n,className:s="",iframeProps:a={}}){const{host:u,port:l,token:c}=Je(),d=mo(null),[h,f]=go();return po(()=>{(()=>{const P=`${`${u}:${l}`}?jwt=${encodeURIComponent(c)}`;f(P)})()},[u,l,c]),h?mt.jsx("div",{className:`folio-embed-container ${s}`,style:{width:t,height:e,overflow:"hidden",...n},children:mt.jsx("iframe",{ref:d,src:h,width:"100%",height:"100%",style:{border:"none",width:"100%",height:"100%",overflow:"auto"},allow:r,allowFullScreen:!0,...a})}):null}function vo(){const{client:t}=Je(),e=Zr({queryKey:["folioProjects"],queryFn:async()=>{if(!t)throw new Error("Folio client not initialized");return t.getProjectsForUser()},enabled:!!t});return{projects:e.data||[],isLoading:e.isLoading,isError:e.isError,error:e.error,refetch:e.refetch}}function wo(t){const{client:e}=Je(),r=Zr({queryKey:["folioFiles",t],queryFn:async()=>{if(!e)throw new Error("Folio client not initialized");if(!t)throw new Error("Project ID is required");return e.getFilesForProject(t)},enabled:!!e&&!!t});return{files:r.data||[],isLoading:r.isLoading,isError:r.isError,error:r.error,refetch:r.refetch}}function Eo(){const{client:t}=Je(),e=bt(),r=ir({mutationFn:async n=>{if(!t)throw new Error("Folio client not initialized");return t.addProjectForUser(n)},onSuccess:()=>{e.invalidateQueries({queryKey:["folioProjects"]})}});return{addProject:r.mutate,addProjectAsync:r.mutateAsync,isAdding:r.isPending,isError:r.isError,error:r.error,newProject:r.data}}function Oo(t){const{client:e}=Je(),r=bt(),n=ir({mutationFn:async s=>{if(!e)throw new Error("Folio client not initialized");if(!t)throw new Error("Project ID is required");return e.addFilesToProject(t,s)},onSuccess:()=>{r.invalidateQueries({queryKey:["folioFiles",t]})}});return{addFiles:n.mutate,addFilesAsync:n.mutateAsync,isAdding:n.isPending,isError:n.isError,error:n.error,newFiles:n.data}}function Po(t){const{client:e}=Je(),r=bt(),n=ir({mutationFn:async s=>{if(!e)throw new Error("Folio client not initialized");if(!t)throw new Error("Project ID is required");const a=Array.isArray(s)?s:[s],u=[];for(const l of a){const c=JSON.stringify(l.directoryMetadata),d=await e.addDirectoryWithFilesToProject(t,l.directoryName,c,l.files);u.push(d)}return Array.isArray(s)?u:u[0]},onSuccess:()=>{r.invalidateQueries({queryKey:["folioFiles",t]})}});return{addDirectoriesWithFiles:n.mutate,addDirectoriesWithFilesAsync:n.mutateAsync,isAdding:n.isPending,isError:n.isError,error:n.error,result:n.data}}x.FolioEmbed=bo,x.FolioProvider=yo,x.useAddFolioDirectoriesWithFiles=Po,x.useAddFolioFiles=Oo,x.useAddFolioProject=Eo,x.useFolioFiles=wo,x.useFolioProjects=vo,Object.defineProperty(x,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -11,7 +11,7 @@ import { UseMutateFunction } from '@tanstack/react-query';
|
|
|
11
11
|
*/
|
|
12
12
|
export declare type DirectoryEntry = {
|
|
13
13
|
directoryName: string;
|
|
14
|
-
directoryMetadata:
|
|
14
|
+
directoryMetadata: Record<string, string>;
|
|
15
15
|
files: Omit<FolioFile, "id" | "parentId" | "isDirectory">[];
|
|
16
16
|
};
|
|
17
17
|
|
|
@@ -102,19 +102,19 @@ export declare interface FolioProviderProps {
|
|
|
102
102
|
* - Files are checked for duplicates based on their path and parent directory.
|
|
103
103
|
* Files with the same path but in different directories are considered unique.
|
|
104
104
|
* - Only PDF files are accepted and will be filtered automatically.
|
|
105
|
-
* - Metadata is provided as a
|
|
105
|
+
* - Metadata is provided as a Record<string, string> and will be automatically
|
|
106
106
|
* converted to a JSON string before sending to the API.
|
|
107
107
|
* - Can add a single directory or multiple directories in one call.
|
|
108
108
|
*/
|
|
109
|
-
export declare function
|
|
110
|
-
|
|
109
|
+
export declare function useAddFolioDirectoriesWithFiles(projectId?: number): {
|
|
110
|
+
addDirectoriesWithFiles: UseMutateFunction< {
|
|
111
111
|
directory: FolioFile | null;
|
|
112
112
|
files: FolioFile[];
|
|
113
113
|
} | {
|
|
114
114
|
directory: FolioFile | null;
|
|
115
115
|
files: FolioFile[];
|
|
116
116
|
}[], Error, DirectoryEntry | DirectoryEntry[], unknown>;
|
|
117
|
-
|
|
117
|
+
addDirectoriesWithFilesAsync: UseMutateAsyncFunction< {
|
|
118
118
|
directory: FolioFile | null;
|
|
119
119
|
files: FolioFile[];
|
|
120
120
|
} | {
|
|
@@ -141,7 +141,7 @@ export declare function useAddFolioDirectoryWithFiles(projectId?: number): {
|
|
|
141
141
|
* @remarks
|
|
142
142
|
* Files are always created at the root level (parentId = null) and
|
|
143
143
|
* are not directories (isDirectory = false). To create directories,
|
|
144
|
-
* use the
|
|
144
|
+
* use the useAddFolioDirectoriesWithFiles hook instead.
|
|
145
145
|
*/
|
|
146
146
|
export declare function useAddFolioFiles(projectId?: number): {
|
|
147
147
|
addFiles: UseMutateFunction<FolioFile[], Error, Omit<FolioFile, "id" | "isDirectory" | "parentId">[], unknown>;
|