@flexkit/studio 0.0.24 → 0.0.25

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.
@@ -0,0 +1,2 @@
1
+ import'./index.css';export{a as Asset}from'./chunk-V2UTZEJQ.js';import'./chunk-5CKMFBWH.js';import'./chunk-ZBV4BY36.js';import'./chunk-WIUPQHZ5.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=asset-HOJ43RVO.js.map
2
+ //# sourceMappingURL=asset-HOJ43RVO.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"asset-IVSDPVJK.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"asset-HOJ43RVO.js"}
package/dist/astro.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  handleFlexkitRequest
3
- } from "./chunk-3S65434F.js";
3
+ } from "./chunk-PCZI6VXG.js";
4
4
 
5
5
  // src/auth/astro-api.ts
6
6
  function resultToResponse(result) {
@@ -1,2 +1,2 @@
1
- import'./index.css';import {d}from'./chunk-6YHHL4XI.js';import {c}from'./chunk-CHRDKNUF.js';import {createContext,useContext}from'react';import l from'swr';import {useParams}from'react-router-dom';import {jsx}from'react/jsx-runtime';function s(){let{projectId:e}=useParams(),{projects:t}=d(),o=t.find(r=>r.projectId===e)??t[0],{data:c$1,isLoading:a}=l(c(e??"").currentUser,r=>fetch(r,{mode:"cors",credentials:"include"}).then(d=>d.json()));return [a,{user:c$1,logout:async()=>{await fetch(c(e??"").logout(o?.basePath??"/"),{method:"POST",mode:"cors",credentials:"include"}),await fetch("/api/flexkit/logout",{method:"GET",credentials:"include"}),window.location.reload();}}]}var u=createContext([true,{user:null,logout:()=>Promise.resolve()}]);function L({children:e}){let[t,o]=s();return jsx(u.Provider,{value:[t,o],children:e})}function j(){return useContext(u)}export{L as a,j as b};//# sourceMappingURL=chunk-N6WEYKSZ.js.map
2
- //# sourceMappingURL=chunk-N6WEYKSZ.js.map
1
+ import'./index.css';import {d}from'./chunk-6YHHL4XI.js';import {c}from'./chunk-ZBV4BY36.js';import {createContext,useContext}from'react';import l from'swr';import {useParams}from'react-router-dom';import {jsx}from'react/jsx-runtime';function s(){let{projectId:e}=useParams(),{projects:t}=d(),o=t.find(r=>r.projectId===e)??t[0],{data:c$1,isLoading:a}=l(c(e??"").currentUser,r=>fetch(r,{mode:"cors",credentials:"include"}).then(d=>d.json()));return [a,{user:c$1,logout:async()=>{await fetch(c(e??"").logout(o?.basePath??"/"),{method:"POST",mode:"cors",credentials:"include"}),await fetch("/api/flexkit/logout",{method:"GET",credentials:"include"}),window.location.reload();}}]}var u=createContext([true,{user:null,logout:()=>Promise.resolve()}]);function L({children:e}){let[t,o]=s();return jsx(u.Provider,{value:[t,o],children:e})}function j(){return useContext(u)}export{L as a,j as b};//# sourceMappingURL=chunk-7XBIC5RC.js.map
2
+ //# sourceMappingURL=chunk-7XBIC5RC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auth/use-auth-service.ts","../src/auth/auth-context.tsx"],"names":["useAuthService","projectId","useParams","projects","useConfig","currentProject","project","user","isLoadingUser","useSWR","apiPaths","url","res","AuthContext","createContext","AuthProvider","children","isLoading","auth","jsx","useAuth","useContext"],"mappings":"yOAQe,SAARA,GAA+C,CACpD,GAAM,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAIC,SAAAA,GAChB,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAIC,CAAAA,GACfC,CAAAA,CAAiBF,CAAAA,CAAS,IAAA,CAAMG,CAAAA,EAAYA,EAAQ,SAAA,GAAcL,CAAS,GAAKE,CAAAA,CAAS,CAAC,EAC1F,CAAE,IAAA,CAAMI,GAAAA,CAAM,SAAA,CAAWC,CAAc,CAAA,CAAIC,CAAAA,CAAOC,CAAAA,CAAST,CAAAA,EAAa,EAAE,CAAA,CAAE,WAAA,CAAcU,CAAAA,EAC9F,KAAA,CAAMA,EAAK,CAAE,IAAA,CAAM,OAAQ,WAAA,CAAa,SAAU,CAAC,CAAA,CAAE,IAAA,CAAMC,CAAAA,EAAQA,CAAAA,CAAI,MAAuB,CAChG,EAGA,OAAO,CAFWJ,EAIhB,CACE,IAAA,CAAAD,GAAAA,CACA,MAAA,CAAQ,SAAY,CAElB,MAAM,MAAMG,CAAAA,CAAST,CAAAA,EAAa,EAAE,CAAA,CAAE,MAAA,CAAOI,CAAAA,EAAgB,QAAA,EAAY,GAAG,CAAA,CAAG,CAC7E,MAAA,CAAQ,MAAA,CACR,KAAM,MAAA,CACN,WAAA,CAAa,SACf,CAAC,EAGD,MAAM,KAAA,CAAM,sBAAuB,CAAE,MAAA,CAAQ,MAAO,WAAA,CAAa,SAAU,CAAC,CAAA,CAE5E,OAAO,QAAA,CAAS,MAAA,GAClB,CACF,CACF,CACF,CC9BA,IAAMQ,CAAAA,CAAcC,aAAAA,CAAc,CAChC,IAAA,CACA,CACE,KAAM,IAAA,CACN,MAAA,CAAQ,IAAM,OAAA,CAAQ,SACxB,CACF,CAAC,CAAA,CAEM,SAASC,CAAAA,CAAa,CAAE,QAAA,CAAAC,CAAS,EAA+C,CACrF,GAAM,CAACC,CAAAA,CAAWC,CAAI,EAAIlB,CAAAA,EAAe,CAEzC,OAAOmB,GAAAA,CAACN,EAAY,QAAA,CAAZ,CAAqB,MAAO,CAACI,CAAAA,CAAWC,CAAI,CAAA,CAAI,QAAA,CAAAF,CAAAA,CAAS,CACnE,CAEO,SAASI,CAAAA,EAAuB,CACrC,OAAOC,UAAAA,CAAWR,CAAW,CAC/B","file":"chunk-N6WEYKSZ.js","sourcesContent":["'use client';\n\nimport useSWR from 'swr';\nimport { useParams } from 'react-router-dom';\nimport { apiPaths } from '../core/api-paths';\nimport { useConfig } from '../core/config/config-context';\nimport type { AuthService, User } from './types';\n\nexport default function useAuthService(): AuthService {\n const { projectId } = useParams();\n const { projects } = useConfig();\n const currentProject = projects.find((project) => project.projectId === projectId) ?? projects[0];\n const { data: user, isLoading: isLoadingUser } = useSWR(apiPaths(projectId ?? '').currentUser, (url: string) =>\n fetch(url, { mode: 'cors', credentials: 'include' }).then((res) => res.json() as Promise<User>)\n );\n const isLoading = isLoadingUser;\n\n return [\n isLoading,\n {\n user,\n logout: async () => {\n // wipe remote session\n await fetch(apiPaths(projectId ?? '').logout(currentProject?.basePath ?? '/'), {\n method: 'POST',\n mode: 'cors',\n credentials: 'include',\n });\n\n // delete first-party auth cookie\n await fetch('/api/flexkit/logout', { method: 'GET', credentials: 'include' });\n\n window.location.reload();\n },\n },\n ];\n}\n","'use client';\n\nimport { createContext, JSX, useContext } from 'react';\nimport useAuthService from './use-auth-service';\nimport type { Auth, AuthService, User } from './types';\n\nconst AuthContext = createContext([\n true,\n {\n user: null as User | null,\n logout: () => Promise.resolve(),\n } as Auth,\n]);\n\nexport function AuthProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const [isLoading, auth] = useAuthService();\n\n return <AuthContext.Provider value={[isLoading, auth]}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuth(): AuthService {\n return useContext(AuthContext) as AuthService;\n}\n"]}
1
+ {"version":3,"sources":["../src/auth/use-auth-service.ts","../src/auth/auth-context.tsx"],"names":["useAuthService","projectId","useParams","projects","useConfig","currentProject","project","user","isLoadingUser","useSWR","apiPaths","url","res","AuthContext","createContext","AuthProvider","children","isLoading","auth","jsx","useAuth","useContext"],"mappings":"yOAQe,SAARA,GAA+C,CACpD,GAAM,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAIC,SAAAA,GAChB,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAIC,CAAAA,GACfC,CAAAA,CAAiBF,CAAAA,CAAS,IAAA,CAAMG,CAAAA,EAAYA,EAAQ,SAAA,GAAcL,CAAS,GAAKE,CAAAA,CAAS,CAAC,EAC1F,CAAE,IAAA,CAAMI,GAAAA,CAAM,SAAA,CAAWC,CAAc,CAAA,CAAIC,CAAAA,CAAOC,CAAAA,CAAST,CAAAA,EAAa,EAAE,CAAA,CAAE,WAAA,CAAcU,CAAAA,EAC9F,KAAA,CAAMA,EAAK,CAAE,IAAA,CAAM,OAAQ,WAAA,CAAa,SAAU,CAAC,CAAA,CAAE,IAAA,CAAMC,CAAAA,EAAQA,CAAAA,CAAI,MAAuB,CAChG,EAGA,OAAO,CAFWJ,EAIhB,CACE,IAAA,CAAAD,GAAAA,CACA,MAAA,CAAQ,SAAY,CAElB,MAAM,MAAMG,CAAAA,CAAST,CAAAA,EAAa,EAAE,CAAA,CAAE,MAAA,CAAOI,CAAAA,EAAgB,QAAA,EAAY,GAAG,CAAA,CAAG,CAC7E,MAAA,CAAQ,MAAA,CACR,KAAM,MAAA,CACN,WAAA,CAAa,SACf,CAAC,EAGD,MAAM,KAAA,CAAM,sBAAuB,CAAE,MAAA,CAAQ,MAAO,WAAA,CAAa,SAAU,CAAC,CAAA,CAE5E,OAAO,QAAA,CAAS,MAAA,GAClB,CACF,CACF,CACF,CC9BA,IAAMQ,CAAAA,CAAcC,aAAAA,CAAc,CAChC,IAAA,CACA,CACE,KAAM,IAAA,CACN,MAAA,CAAQ,IAAM,OAAA,CAAQ,SACxB,CACF,CAAC,CAAA,CAEM,SAASC,CAAAA,CAAa,CAAE,QAAA,CAAAC,CAAS,EAA+C,CACrF,GAAM,CAACC,CAAAA,CAAWC,CAAI,EAAIlB,CAAAA,EAAe,CAEzC,OAAOmB,GAAAA,CAACN,EAAY,QAAA,CAAZ,CAAqB,MAAO,CAACI,CAAAA,CAAWC,CAAI,CAAA,CAAI,QAAA,CAAAF,CAAAA,CAAS,CACnE,CAEO,SAASI,CAAAA,EAAuB,CACrC,OAAOC,UAAAA,CAAWR,CAAW,CAC/B","file":"chunk-7XBIC5RC.js","sourcesContent":["'use client';\n\nimport useSWR from 'swr';\nimport { useParams } from 'react-router-dom';\nimport { apiPaths } from '../core/api-paths';\nimport { useConfig } from '../core/config/config-context';\nimport type { AuthService, User } from './types';\n\nexport default function useAuthService(): AuthService {\n const { projectId } = useParams();\n const { projects } = useConfig();\n const currentProject = projects.find((project) => project.projectId === projectId) ?? projects[0];\n const { data: user, isLoading: isLoadingUser } = useSWR(apiPaths(projectId ?? '').currentUser, (url: string) =>\n fetch(url, { mode: 'cors', credentials: 'include' }).then((res) => res.json() as Promise<User>)\n );\n const isLoading = isLoadingUser;\n\n return [\n isLoading,\n {\n user,\n logout: async () => {\n // wipe remote session\n await fetch(apiPaths(projectId ?? '').logout(currentProject?.basePath ?? '/'), {\n method: 'POST',\n mode: 'cors',\n credentials: 'include',\n });\n\n // delete first-party auth cookie\n await fetch('/api/flexkit/logout', { method: 'GET', credentials: 'include' });\n\n window.location.reload();\n },\n },\n ];\n}\n","'use client';\n\nimport { createContext, JSX, useContext } from 'react';\nimport useAuthService from './use-auth-service';\nimport type { Auth, AuthService, User } from './types';\n\nconst AuthContext = createContext([\n true,\n {\n user: null as User | null,\n logout: () => Promise.resolve(),\n } as Auth,\n]);\n\nexport function AuthProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const [isLoading, auth] = useAuthService();\n\n return <AuthContext.Provider value={[isLoading, auth]}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuth(): AuthService {\n return useContext(AuthContext) as AuthService;\n}\n"]}
@@ -1,2 +1,2 @@
1
- import'./index.css';import {d}from'./chunk-6YHHL4XI.js';import {c}from'./chunk-CHRDKNUF.js';import {createContext,useReducer,useContext}from'react';import {jsx}from'react/jsx-runtime';import $ from'swr';import {find,propEq}from'ramda';var D="core.context.scope:",x={breadcrumbs:[],isRouteLoading:false,pageTitle:"",scope:"",relationships:{}},C=createContext(x),b=createContext(()=>{});function O(t,e){let{type:o,payload:r}=e;switch(o){case "setScope":return typeof localStorage<"u"&&r.projectId&&localStorage.setItem(`${D}${r.projectId}`,r.scope),{...t,scope:r.scope};case "setRelationship":return {...t,relationships:{...t.relationships,...r}};default:throw Error(`Unknown action: ${o}`)}}function q({children:t}){let[e,o]=useReducer(O,x);return jsx(C.Provider,{value:e,children:jsx(b.Provider,{value:o,children:t})})}function I(){return useContext(C)}function K(){return useContext(b)}function B(t,e){let{scope:o}=I(),{projects:r,currentProjectId:u}=d(),{schema:s,scopes:l}=find(propEq(u??"","projectId"))(r),p=l?.find(m=>m.isDefault)?.name??"default",a=e?.commonParams.q?JSON.stringify(e):null,{data:n,error:S,isLoading:i}=$(a,()=>fetch(c(t).search,{headers:{"Content-Type":"application/json"},body:JSON.stringify(e),method:"POST",mode:"cors"}).then(m=>m.json()));return {results:J(n?.results??[],t,s,o,p)??[],error:S,isLoading:i}}function v(t){return t.find(e=>e.isPrimary)?.name??t[0]?.name}function J(t,e,o,r,u){return t?.filter(s=>s?.hits?.length>0).map(s=>{let l=s,p=l.collection.replace(`${e}_`,"").replace(/_\d+$/,""),a=find(propEq(p,"plural"))(o);if(!a)return [];let n=v(a?.attributes??[]),S=a?.name??p;return l.hits.map(({document:i})=>{let c=i[n],w=(c&&typeof c!="string"?c[r]??c[u]:null)??i[n],E=Object.entries(i).reduce((h,[d,f])=>{if(d!==n&&d!=="id"&&d!=="_updatedAt"){let T=typeof f!="string"?f[r]??f[u]:f;h[d]=T;}return h},{});return {_id:i.id,_entityName:S,_entityNamePlural:p,[n]:w,...E}})}).flat()}export{D as a,q as b,I as c,K as d,B as e};//# sourceMappingURL=chunk-2ORQKJKI.js.map
2
- //# sourceMappingURL=chunk-2ORQKJKI.js.map
1
+ import'./index.css';import {d}from'./chunk-6YHHL4XI.js';import {c}from'./chunk-ZBV4BY36.js';import {createContext,useReducer,useContext}from'react';import {jsx}from'react/jsx-runtime';import $ from'swr';import {find,propEq}from'ramda';var D="core.context.scope:",x={breadcrumbs:[],isRouteLoading:false,pageTitle:"",scope:"",relationships:{}},C=createContext(x),b=createContext(()=>{});function O(t,e){let{type:o,payload:r}=e;switch(o){case "setScope":return typeof localStorage<"u"&&r.projectId&&localStorage.setItem(`${D}${r.projectId}`,r.scope),{...t,scope:r.scope};case "setRelationship":return {...t,relationships:{...t.relationships,...r}};default:throw Error(`Unknown action: ${o}`)}}function q({children:t}){let[e,o]=useReducer(O,x);return jsx(C.Provider,{value:e,children:jsx(b.Provider,{value:o,children:t})})}function I(){return useContext(C)}function K(){return useContext(b)}function B(t,e){let{scope:o}=I(),{projects:r,currentProjectId:u}=d(),{schema:s,scopes:l}=find(propEq(u??"","projectId"))(r),p=l?.find(m=>m.isDefault)?.name??"default",a=e?.commonParams.q?JSON.stringify(e):null,{data:n,error:S,isLoading:i}=$(a,()=>fetch(c(t).search,{headers:{"Content-Type":"application/json"},body:JSON.stringify(e),method:"POST",mode:"cors"}).then(m=>m.json()));return {results:J(n?.results??[],t,s,o,p)??[],error:S,isLoading:i}}function v(t){return t.find(e=>e.isPrimary)?.name??t[0]?.name}function J(t,e,o,r,u){return t?.filter(s=>s?.hits?.length>0).map(s=>{let l=s,p=l.collection.replace(`${e}_`,"").replace(/_\d+$/,""),a=find(propEq(p,"plural"))(o);if(!a)return [];let n=v(a?.attributes??[]),S=a?.name??p;return l.hits.map(({document:i})=>{let c=i[n],w=(c&&typeof c!="string"?c[r]??c[u]:null)??i[n],E=Object.entries(i).reduce((h,[d,f])=>{if(d!==n&&d!=="id"&&d!=="_updatedAt"){let T=typeof f!="string"?f[r]??f[u]:f;h[d]=T;}return h},{});return {_id:i.id,_entityName:S,_entityNamePlural:p,[n]:w,...E}})}).flat()}export{D as a,q as b,I as c,K as d,B as e};//# sourceMappingURL=chunk-I4C65MUI.js.map
2
+ //# sourceMappingURL=chunk-I4C65MUI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/app-context.tsx","../src/core/use-search.tsx"],"names":["SCOPE_STORAGE_KEY","initialState","AppContext","createContext","AppDispatchContext","reducer","state","action","type","payload","AppProvider","children","dispatch","useReducer","jsx","useAppContext","useContext","useAppDispatch","useSearch","projectId","searchRequest","scope","projects","currentProjectId","useConfig","schema","scopes","find","propEq","defaultScope","s","swrKey","data","error","isLoading","useSWR","apiPaths","res","mapResults","getPrimaryAttributeName","schemaAttributes","attr","results","result","item","entityNamePlural","entitySchema","primaryAttributeName","entityName","document","primaryAttribute","primaryAttributeValue","attributes","acc","key","value","scopedValue"],"mappings":"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","file":"chunk-2ORQKJKI.js","sourcesContent":["'use client';\n\nimport { createContext, useContext, useReducer } from 'react';\nimport type { Dispatch, JSX, ReactNode } from 'react';\nimport type { ActionSetRelationship, ActionSetScope, AppContextType } from './types';\n\nexport const SCOPE_STORAGE_KEY = 'core.context.scope:';\n\nconst initialState = {\n breadcrumbs: [],\n isRouteLoading: false,\n pageTitle: '',\n scope: '',\n relationships: {},\n};\n\nconst AppContext = createContext<AppContextType>(initialState);\n\nconst AppDispatchContext = createContext<Dispatch<ActionSetRelationship | ActionSetScope>>(() => {\n /* void */\n});\n\nfunction reducer(state: AppContextType, action: ActionSetRelationship | ActionSetScope): AppContextType {\n const { type, payload } = action;\n\n switch (type) {\n case 'setScope':\n if (typeof localStorage !== 'undefined' && payload.projectId) {\n localStorage.setItem(`${SCOPE_STORAGE_KEY}${payload.projectId}`, payload.scope);\n }\n\n return {\n ...state,\n scope: payload.scope,\n };\n case 'setRelationship':\n return {\n ...state,\n relationships: { ...state.relationships, ...payload },\n };\n default:\n throw Error(`Unknown action: ${type as string}`);\n }\n}\n\nexport function AppProvider({ children }: { children: ReactNode }): JSX.Element {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return (\n <AppContext.Provider value={state}>\n <AppDispatchContext.Provider value={dispatch}>{children}</AppDispatchContext.Provider>\n </AppContext.Provider>\n );\n}\n\nexport function useAppContext(): AppContextType {\n return useContext(AppContext);\n}\n\nexport function useAppDispatch(): Dispatch<ActionSetRelationship | ActionSetScope> {\n return useContext(AppDispatchContext);\n}\n","'use client';\n\nimport useSWR from 'swr';\nimport { find, propEq } from 'ramda';\nimport { apiPaths } from './api-paths';\nimport { useAppContext } from './app-context';\nimport { useConfig } from './config/config-context';\nimport type { SingleProject } from './config/types';\nimport type {\n Attribute,\n Entity,\n RawResultItem,\n RawSearchResultItems,\n SearchRequestProps,\n SearchResultItem,\n} from './types';\n\nexport function useSearch(\n projectId: string,\n searchRequest: SearchRequestProps | null\n): { results: SearchResultItem[] | []; error: Error; isLoading: boolean } {\n const { scope } = useAppContext();\n const { projects, currentProjectId } = useConfig();\n const { schema, scopes } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const defaultScope = scopes?.find((s) => s.isDefault)?.name ?? 'default';\n const swrKey = searchRequest?.commonParams.q ? JSON.stringify(searchRequest) : null;\n const { data, error, isLoading } = useSWR(swrKey, () =>\n fetch(apiPaths(projectId).search, {\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(searchRequest),\n method: 'POST',\n mode: 'cors',\n }).then((res) => res.json() as Promise<{ results: RawSearchResultItems }>)\n );\n const results = mapResults(data?.results ?? [], projectId, schema, scope, defaultScope);\n\n return { results: results ?? [], error, isLoading };\n}\n\n/**\n * Find the name of the attribute of an entity with isPrimary === true.\n * The value of that attribute is returned as the value for the relationship attribute\n */\nfunction getPrimaryAttributeName(schemaAttributes: Attribute[]): string {\n return schemaAttributes.find((attr) => attr.isPrimary)?.name ?? schemaAttributes[0]?.name;\n}\n\nfunction mapResults(\n results: RawSearchResultItems | undefined,\n projectId: string,\n schema: Entity[],\n scope: string,\n defaultScope: string\n): SearchResultItem[] | undefined {\n return results\n ?.filter((result) => (result as RawResultItem)?.hits?.length > 0)\n .map((result) => {\n const item = result as RawResultItem;\n const entityNamePlural = item.collection.replace(`${projectId}_`, '').replace(/_\\d+$/, '');\n const entitySchema = find<Entity>(propEq(entityNamePlural, 'plural'))(schema);\n\n if (!entitySchema) {\n return [];\n }\n\n const primaryAttributeName = getPrimaryAttributeName(entitySchema?.attributes ?? []);\n const entityName = entitySchema?.name ?? entityNamePlural;\n\n // iterate over the hits and return an object with the primary attribute value first and then the rest of the attributes.\n return item.hits.map(({ document }) => {\n const primaryAttribute = document[primaryAttributeName];\n const scopedPrimaryAttribute =\n primaryAttribute && typeof primaryAttribute !== 'string'\n ? (primaryAttribute[scope] ?? primaryAttribute[defaultScope])\n : null;\n const primaryAttributeValue = scopedPrimaryAttribute ?? document[primaryAttributeName];\n const attributes = Object.entries(document).reduce(\n (acc: Omit<SearchResultItem, '_id' | '_entityName' | '_entityNamePlural'>, [key, value]) => {\n if (key !== primaryAttributeName && key !== 'id' && key !== '_updatedAt') {\n const scopedValue = typeof value !== 'string' ? (value[scope] ?? value[defaultScope]) : value;\n\n acc[key] = scopedValue;\n }\n\n return acc;\n },\n {}\n );\n\n return {\n _id: document.id,\n _entityName: entityName,\n _entityNamePlural: entityNamePlural,\n [primaryAttributeName]: primaryAttributeValue as string,\n ...attributes,\n };\n });\n })\n .flat();\n}\n"]}
1
+ {"version":3,"sources":["../src/core/app-context.tsx","../src/core/use-search.tsx"],"names":["SCOPE_STORAGE_KEY","initialState","AppContext","createContext","AppDispatchContext","reducer","state","action","type","payload","AppProvider","children","dispatch","useReducer","jsx","useAppContext","useContext","useAppDispatch","useSearch","projectId","searchRequest","scope","projects","currentProjectId","useConfig","schema","scopes","find","propEq","defaultScope","s","swrKey","data","error","isLoading","useSWR","apiPaths","res","mapResults","getPrimaryAttributeName","schemaAttributes","attr","results","result","item","entityNamePlural","entitySchema","primaryAttributeName","entityName","document","primaryAttribute","primaryAttributeValue","attributes","acc","key","value","scopedValue"],"mappings":"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","file":"chunk-I4C65MUI.js","sourcesContent":["'use client';\n\nimport { createContext, useContext, useReducer } from 'react';\nimport type { Dispatch, JSX, ReactNode } from 'react';\nimport type { ActionSetRelationship, ActionSetScope, AppContextType } from './types';\n\nexport const SCOPE_STORAGE_KEY = 'core.context.scope:';\n\nconst initialState = {\n breadcrumbs: [],\n isRouteLoading: false,\n pageTitle: '',\n scope: '',\n relationships: {},\n};\n\nconst AppContext = createContext<AppContextType>(initialState);\n\nconst AppDispatchContext = createContext<Dispatch<ActionSetRelationship | ActionSetScope>>(() => {\n /* void */\n});\n\nfunction reducer(state: AppContextType, action: ActionSetRelationship | ActionSetScope): AppContextType {\n const { type, payload } = action;\n\n switch (type) {\n case 'setScope':\n if (typeof localStorage !== 'undefined' && payload.projectId) {\n localStorage.setItem(`${SCOPE_STORAGE_KEY}${payload.projectId}`, payload.scope);\n }\n\n return {\n ...state,\n scope: payload.scope,\n };\n case 'setRelationship':\n return {\n ...state,\n relationships: { ...state.relationships, ...payload },\n };\n default:\n throw Error(`Unknown action: ${type as string}`);\n }\n}\n\nexport function AppProvider({ children }: { children: ReactNode }): JSX.Element {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return (\n <AppContext.Provider value={state}>\n <AppDispatchContext.Provider value={dispatch}>{children}</AppDispatchContext.Provider>\n </AppContext.Provider>\n );\n}\n\nexport function useAppContext(): AppContextType {\n return useContext(AppContext);\n}\n\nexport function useAppDispatch(): Dispatch<ActionSetRelationship | ActionSetScope> {\n return useContext(AppDispatchContext);\n}\n","'use client';\n\nimport useSWR from 'swr';\nimport { find, propEq } from 'ramda';\nimport { apiPaths } from './api-paths';\nimport { useAppContext } from './app-context';\nimport { useConfig } from './config/config-context';\nimport type { SingleProject } from './config/types';\nimport type {\n Attribute,\n Entity,\n RawResultItem,\n RawSearchResultItems,\n SearchRequestProps,\n SearchResultItem,\n} from './types';\n\nexport function useSearch(\n projectId: string,\n searchRequest: SearchRequestProps | null\n): { results: SearchResultItem[] | []; error: Error; isLoading: boolean } {\n const { scope } = useAppContext();\n const { projects, currentProjectId } = useConfig();\n const { schema, scopes } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const defaultScope = scopes?.find((s) => s.isDefault)?.name ?? 'default';\n const swrKey = searchRequest?.commonParams.q ? JSON.stringify(searchRequest) : null;\n const { data, error, isLoading } = useSWR(swrKey, () =>\n fetch(apiPaths(projectId).search, {\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(searchRequest),\n method: 'POST',\n mode: 'cors',\n }).then((res) => res.json() as Promise<{ results: RawSearchResultItems }>)\n );\n const results = mapResults(data?.results ?? [], projectId, schema, scope, defaultScope);\n\n return { results: results ?? [], error, isLoading };\n}\n\n/**\n * Find the name of the attribute of an entity with isPrimary === true.\n * The value of that attribute is returned as the value for the relationship attribute\n */\nfunction getPrimaryAttributeName(schemaAttributes: Attribute[]): string {\n return schemaAttributes.find((attr) => attr.isPrimary)?.name ?? schemaAttributes[0]?.name;\n}\n\nfunction mapResults(\n results: RawSearchResultItems | undefined,\n projectId: string,\n schema: Entity[],\n scope: string,\n defaultScope: string\n): SearchResultItem[] | undefined {\n return results\n ?.filter((result) => (result as RawResultItem)?.hits?.length > 0)\n .map((result) => {\n const item = result as RawResultItem;\n const entityNamePlural = item.collection.replace(`${projectId}_`, '').replace(/_\\d+$/, '');\n const entitySchema = find<Entity>(propEq(entityNamePlural, 'plural'))(schema);\n\n if (!entitySchema) {\n return [];\n }\n\n const primaryAttributeName = getPrimaryAttributeName(entitySchema?.attributes ?? []);\n const entityName = entitySchema?.name ?? entityNamePlural;\n\n // iterate over the hits and return an object with the primary attribute value first and then the rest of the attributes.\n return item.hits.map(({ document }) => {\n const primaryAttribute = document[primaryAttributeName];\n const scopedPrimaryAttribute =\n primaryAttribute && typeof primaryAttribute !== 'string'\n ? (primaryAttribute[scope] ?? primaryAttribute[defaultScope])\n : null;\n const primaryAttributeValue = scopedPrimaryAttribute ?? document[primaryAttributeName];\n const attributes = Object.entries(document).reduce(\n (acc: Omit<SearchResultItem, '_id' | '_entityName' | '_entityNamePlural'>, [key, value]) => {\n if (key !== primaryAttributeName && key !== 'id' && key !== '_updatedAt') {\n const scopedValue = typeof value !== 'string' ? (value[scope] ?? value[defaultScope]) : value;\n\n acc[key] = scopedValue;\n }\n\n return acc;\n },\n {}\n );\n\n return {\n _id: document.id,\n _entityName: entityName,\n _entityNamePlural: entityNamePlural,\n [primaryAttributeName]: primaryAttributeValue as string,\n ...attributes,\n };\n });\n })\n .flat();\n}\n"]}
@@ -1,3 +1,22 @@
1
+ // src/core/domains.ts
2
+ var defaultFlexkitDomain = "flexkit.io";
3
+ var allowedFlexkitDomains = {
4
+ "flexkit.io": true,
5
+ "flexkit.test": true
6
+ };
7
+ function getConfiguredFlexkitDomain() {
8
+ const configuredDomain = globalThis.process?.env?.FLEXKIT_DOMAIN?.trim();
9
+ if (!configuredDomain) {
10
+ return defaultFlexkitDomain;
11
+ }
12
+ if (allowedFlexkitDomains[configuredDomain]) {
13
+ return configuredDomain;
14
+ }
15
+ return defaultFlexkitDomain;
16
+ }
17
+ var flexkitDomain = getConfiguredFlexkitDomain();
18
+ var flexkitApiDomain = `api.${flexkitDomain}`;
19
+
1
20
  // src/core/base-path.ts
2
21
  function normalizeBasePath(basePath) {
3
22
  if (!basePath || basePath === "/") {
@@ -19,7 +38,7 @@ function joinBasePath(basePath, ...segments) {
19
38
  }
20
39
 
21
40
  // src/core/api-paths.ts
22
- var domain = "flexkit.io";
41
+ var domain = flexkitDomain;
23
42
  var baseApiUrl = `https://${domain}`;
24
43
  var baseProjectApiUrl = (projectId) => projectId ? `https://${projectId}.api.${domain}` : baseApiUrl;
25
44
  var IMAGES_BASE_URL = `${baseApiUrl}/images/`;
@@ -58,7 +77,7 @@ async function getToken(code) {
58
77
  }
59
78
 
60
79
  // src/auth/core-handler.ts
61
- var domain2 = "api.flexkit.io";
80
+ var domain2 = flexkitApiDomain;
62
81
  var hopByHopHeaders = /* @__PURE__ */ new Set([
63
82
  "connection",
64
83
  "keep-alive",
@@ -1,2 +1,2 @@
1
- import'./index.css';import {a,b as b$1,c,d as d$1,e}from'./chunk-5CKMFBWH.js';import {b}from'./chunk-CHRDKNUF.js';import {defaultStyles,FileIcon}from'react-file-icon';import {useMemo,useState,useEffect}from'react';import {jsx,jsxs}from'react/jsx-runtime';var _=250,I=25e5,i=new Map,v=new Map,w=new Set,A=new Map;function d(e){if(A.has(e))return;let t=new Image;t.decoding="async",t.src=e,A.set(e,t);}function g(e){let t=i.get(e);t&&i.set(e,{...t,lastUsedAt:Date.now()});}function j(){if(i.size<=_)return;let e=Array.from(i.entries()).sort((n,r)=>n[1].lastUsedAt-r[1].lastUsedAt),t=Math.max(1,Math.ceil(_*.1));for(let n=0;n<t&&n<e.length;n+=1){let[r,o]=e[n];i.delete(r),URL.revokeObjectURL(o.objectUrl);}}async function N(e){if(w.has(e)){d(e);return}if(i.has(e)){g(e);return}let t=v.get(e);if(t){await t;return}let n=(async()=>{try{let r=await fetch(e,{mode:"cors",cache:"force-cache"});if(!r.ok){d(e);return}let o=await r.blob();if(o.size>I)return;let a=URL.createObjectURL(o);i.set(e,{objectUrl:a,byteSize:o.size,lastUsedAt:Date.now()}),j();}catch(r){r instanceof TypeError&&w.add(e),d(e);}})();v.set(e,n),await n,v.delete(e);}function U(e){let t=useMemo(()=>{if(!e)return null;let o=i.get(e);return o?(g(e),o.objectUrl):null},[e]),[n,r]=useState(t);return useEffect(()=>{if(!e){r(null);return}if(w.has(e)){d(e),r(null);return}let o=i.get(e);if(o){g(e),r(o.objectUrl);return}r(null);let a=false;return N(e).then(()=>{let f=i.get(e);f&&(a||(g(e),r(f.objectUrl)));}),()=>{a=true;}},[e]),n}var y="fk:bg-[#fafafa] [--asset-checker:#f0f0f0] [background-image:linear-gradient(45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(-45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(45deg,transparent_75%,var(--asset-checker)_75%),linear-gradient(-45deg,transparent_75%,var(--asset-checker)_75%)] [background-position:0_0,0_4px,4px_-4px,-4px_0px] [background-size:8px_8px] fk:dark:bg-[#222] dark:[--asset-checker:#2a2a2a]";function G({value:e}){return Array.isArray(e)?jsx(z,{value:e}):jsx(M,{value:e})}function M({value:e$1}){let t=e$1?.path??"",n=!!t,r=n&&/\.(png|jpe?g|gif|webp|avif|svg)$/i.test(t),o=l=>{let[m]=l.split("?"),x=m.split(".");return x.length>1?x.pop().toLowerCase():"file"},a$1=n?t.endsWith(".svg")?`${b}${t}`:`${b}${t}?w=84&h=84&f=webp`:null,f=n?t.endsWith(".svg")?`${b}${t}`:`${b}${t}?w=624&h=624&f=webp`:"",S=U(a$1);return n?jsx("div",{className:"fk:z-10",children:jsx(a,{children:r?jsxs(b$1,{children:[jsx(c,{asChild:true,children:jsx("img",{alt:"asset",className:`fk:w-7 fk:h-7 fk:cursor-zoom-in fk:overflow-hidden fk:rounded-md fk:object-contain ${y}`,decoding:"async",src:S??void 0})}),jsx(d$1,{children:jsx(e,{children:jsx("img",{alt:"asset",className:`fk:w-52 fk:h-52 fk:overflow-hidden fk:rounded-md fk:object-contain ${y}`,decoding:"async",src:f})})})]}):jsxs(b$1,{children:[jsx(c,{asChild:true,children:jsx("div",{className:"fk:w-7 fk:h-7 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto",children:(()=>{let l=o(t),m=defaultStyles[l];return jsx(FileIcon,{extension:l,...m||{}})})()})}),jsx(d$1,{children:jsx(e,{children:jsx("div",{className:"fk:text-sm fk:text-muted-foreground",children:"Preview not available"})})})]})})}):null}function z({value:e}){let t=e.filter(n=>!!n.path).slice(0,3);return t.length===0?null:jsxs("div",{className:"fk:flex fk:items-center",children:[jsx("div",{className:"fk:flex fk:-space-x-2",children:t.map(n=>jsx("img",{alt:"asset",className:`fk:h-7 fk:w-7 fk:overflow-hidden fk:rounded-md fk:object-contain ${y}`,decoding:"async",src:`${b}${n.path}?w=84&h=84&f=webp`},n._id))}),e.length>3?jsxs("span",{className:"fk:ml-2 fk:text-xs fk:text-muted-foreground",children:["+",e.length-3]}):null]})}export{G as a};//# sourceMappingURL=chunk-HSPSTCNK.js.map
2
- //# sourceMappingURL=chunk-HSPSTCNK.js.map
1
+ import'./index.css';import {a,b as b$1,c,d as d$1,e}from'./chunk-5CKMFBWH.js';import {b}from'./chunk-ZBV4BY36.js';import {defaultStyles,FileIcon}from'react-file-icon';import {useMemo,useState,useEffect}from'react';import {jsx,jsxs}from'react/jsx-runtime';var _=250,I=25e5,i=new Map,v=new Map,w=new Set,A=new Map;function d(e){if(A.has(e))return;let t=new Image;t.decoding="async",t.src=e,A.set(e,t);}function g(e){let t=i.get(e);t&&i.set(e,{...t,lastUsedAt:Date.now()});}function j(){if(i.size<=_)return;let e=Array.from(i.entries()).sort((n,r)=>n[1].lastUsedAt-r[1].lastUsedAt),t=Math.max(1,Math.ceil(_*.1));for(let n=0;n<t&&n<e.length;n+=1){let[r,o]=e[n];i.delete(r),URL.revokeObjectURL(o.objectUrl);}}async function N(e){if(w.has(e)){d(e);return}if(i.has(e)){g(e);return}let t=v.get(e);if(t){await t;return}let n=(async()=>{try{let r=await fetch(e,{mode:"cors",cache:"force-cache"});if(!r.ok){d(e);return}let o=await r.blob();if(o.size>I)return;let a=URL.createObjectURL(o);i.set(e,{objectUrl:a,byteSize:o.size,lastUsedAt:Date.now()}),j();}catch(r){r instanceof TypeError&&w.add(e),d(e);}})();v.set(e,n),await n,v.delete(e);}function U(e){let t=useMemo(()=>{if(!e)return null;let o=i.get(e);return o?(g(e),o.objectUrl):null},[e]),[n,r]=useState(t);return useEffect(()=>{if(!e){r(null);return}if(w.has(e)){d(e),r(null);return}let o=i.get(e);if(o){g(e),r(o.objectUrl);return}r(null);let a=false;return N(e).then(()=>{let f=i.get(e);f&&(a||(g(e),r(f.objectUrl)));}),()=>{a=true;}},[e]),n}var y="fk:bg-[#fafafa] [--asset-checker:#f0f0f0] [background-image:linear-gradient(45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(-45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(45deg,transparent_75%,var(--asset-checker)_75%),linear-gradient(-45deg,transparent_75%,var(--asset-checker)_75%)] [background-position:0_0,0_4px,4px_-4px,-4px_0px] [background-size:8px_8px] fk:dark:bg-[#222] dark:[--asset-checker:#2a2a2a]";function G({value:e}){return Array.isArray(e)?jsx(z,{value:e}):jsx(M,{value:e})}function M({value:e$1}){let t=e$1?.path??"",n=!!t,r=n&&/\.(png|jpe?g|gif|webp|avif|svg)$/i.test(t),o=l=>{let[m]=l.split("?"),x=m.split(".");return x.length>1?x.pop().toLowerCase():"file"},a$1=n?t.endsWith(".svg")?`${b}${t}`:`${b}${t}?w=84&h=84&f=webp`:null,f=n?t.endsWith(".svg")?`${b}${t}`:`${b}${t}?w=624&h=624&f=webp`:"",S=U(a$1);return n?jsx("div",{className:"fk:z-10",children:jsx(a,{children:r?jsxs(b$1,{children:[jsx(c,{asChild:true,children:jsx("img",{alt:"asset",className:`fk:w-7 fk:h-7 fk:cursor-zoom-in fk:overflow-hidden fk:rounded-md fk:object-contain ${y}`,decoding:"async",src:S??void 0})}),jsx(d$1,{children:jsx(e,{children:jsx("img",{alt:"asset",className:`fk:w-52 fk:h-52 fk:overflow-hidden fk:rounded-md fk:object-contain ${y}`,decoding:"async",src:f})})})]}):jsxs(b$1,{children:[jsx(c,{asChild:true,children:jsx("div",{className:"fk:w-7 fk:h-7 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto",children:(()=>{let l=o(t),m=defaultStyles[l];return jsx(FileIcon,{extension:l,...m||{}})})()})}),jsx(d$1,{children:jsx(e,{children:jsx("div",{className:"fk:text-sm fk:text-muted-foreground",children:"Preview not available"})})})]})})}):null}function z({value:e}){let t=e.filter(n=>!!n.path).slice(0,3);return t.length===0?null:jsxs("div",{className:"fk:flex fk:items-center",children:[jsx("div",{className:"fk:flex fk:-space-x-2",children:t.map(n=>jsx("img",{alt:"asset",className:`fk:h-7 fk:w-7 fk:overflow-hidden fk:rounded-md fk:object-contain ${y}`,decoding:"async",src:`${b}${n.path}?w=84&h=84&f=webp`},n._id))}),e.length>3?jsxs("span",{className:"fk:ml-2 fk:text-xs fk:text-muted-foreground",children:["+",e.length-3]}):null]})}export{G as a};//# sourceMappingURL=chunk-V2UTZEJQ.js.map
2
+ //# sourceMappingURL=chunk-V2UTZEJQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/hooks/use-cached-image-src.ts","../src/data-grid/preview-components/asset.tsx"],"names":["MAX_CACHE_ENTRIES","MAX_SINGLE_BLOB_BYTES","blobUrlCache","inFlightLoads","corsBlockedUrls","preloadedImages","ensurePreloaded","url","img","touch","entry","evictIfNeeded","entries","a","b","evictCount","i","loadToCache","existing","promise","res","blob","objectUrl","err","useCachedImageSrc","initial","useMemo","cached","src","setSrc","useState","useEffect","isStale","next","transparentImageBackground","Asset","value","jsx","AssetStack","SingleAsset","path","hasPath","isImage","getExtensionFromPath","p","clean","parts","thumbnaillUrl","IMAGES_BASE_URL","fullUrl","cachedThumbnailSrc","TooltipProvider","jsxs","Tooltip","TooltipTrigger","TooltipPortal","TooltipContent","ext","style","defaultStyles","FileTypeIcon","assets","asset"],"mappings":"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","file":"chunk-HSPSTCNK.js","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\ntype CacheEntry = {\n objectUrl: string;\n byteSize: number;\n lastUsedAt: number;\n};\n\nconst MAX_CACHE_ENTRIES = 250;\nconst MAX_SINGLE_BLOB_BYTES = 2_500_000; // ~2.5MB\n\nconst blobUrlCache = new Map<string, CacheEntry>();\nconst inFlightLoads = new Map<string, Promise<void>>();\nconst corsBlockedUrls = new Set<string>();\nconst preloadedImages = new Map<string, HTMLImageElement>();\n\nfunction ensurePreloaded(url: string): void {\n if (preloadedImages.has(url)) {\n return;\n }\n\n const img = new Image();\n img.decoding = 'async';\n img.src = url;\n preloadedImages.set(url, img);\n}\n\nfunction touch(url: string): void {\n const entry = blobUrlCache.get(url);\n\n if (!entry) {\n return;\n }\n\n blobUrlCache.set(url, { ...entry, lastUsedAt: Date.now() });\n}\n\nfunction evictIfNeeded(): void {\n if (blobUrlCache.size <= MAX_CACHE_ENTRIES) {\n return;\n }\n\n const entries = Array.from(blobUrlCache.entries()).sort((a, b) => a[1].lastUsedAt - b[1].lastUsedAt);\n const evictCount = Math.max(1, Math.ceil(MAX_CACHE_ENTRIES * 0.1));\n\n for (let i = 0; i < evictCount && i < entries.length; i += 1) {\n const [url, entry] = entries[i];\n blobUrlCache.delete(url);\n\n URL.revokeObjectURL(entry.objectUrl);\n }\n}\n\nasync function loadToCache(url: string): Promise<void> {\n if (corsBlockedUrls.has(url)) {\n ensurePreloaded(url);\n\n return;\n }\n\n if (blobUrlCache.has(url)) {\n touch(url);\n\n return;\n }\n\n const existing = inFlightLoads.get(url);\n\n if (existing) {\n await existing;\n\n return;\n }\n\n const promise = (async () => {\n try {\n const res = await fetch(url, {\n mode: 'cors',\n cache: 'force-cache',\n });\n\n if (!res.ok) {\n ensurePreloaded(url);\n\n return;\n }\n\n const blob = await res.blob();\n\n if (blob.size > MAX_SINGLE_BLOB_BYTES) {\n return;\n }\n\n const objectUrl = URL.createObjectURL(blob);\n blobUrlCache.set(url, { objectUrl, byteSize: blob.size, lastUsedAt: Date.now() });\n evictIfNeeded();\n } catch (err: unknown) {\n // Most common failure is CORS (TypeError: Failed to fetch). If so, avoid retrying.\n if (err instanceof TypeError) {\n corsBlockedUrls.add(url);\n }\n\n ensurePreloaded(url);\n }\n })();\n\n inFlightLoads.set(url, promise);\n\n await promise;\n\n inFlightLoads.delete(url);\n}\n\n/**\n * Keeps a stable, in-memory cached image src across virtualized unmount/remount cycles.\n * Falls back to the original URL if the image can’t be fetched (e.g. due to CORS).\n */\nexport function useCachedImageSrc(url: string | null | undefined): string | null {\n const initial = useMemo(() => {\n if (!url) {\n return null;\n }\n\n const cached = blobUrlCache.get(url);\n\n if (!cached) {\n return null;\n }\n\n touch(url);\n\n return cached.objectUrl;\n }, [url]);\n\n const [src, setSrc] = useState<string | null>(initial);\n\n useEffect(() => {\n if (!url) {\n setSrc(null);\n\n return;\n }\n\n if (corsBlockedUrls.has(url)) {\n ensurePreloaded(url);\n setSrc(null);\n\n return;\n }\n\n const cached = blobUrlCache.get(url);\n\n if (cached) {\n touch(url);\n setSrc(cached.objectUrl);\n\n return;\n }\n\n setSrc(null);\n let isStale = false;\n\n loadToCache(url).then(() => {\n const next = blobUrlCache.get(url);\n\n if (!next) {\n return;\n }\n\n if (isStale) {\n return;\n }\n\n touch(url);\n setSrc(next.objectUrl);\n });\n\n return () => {\n isStale = true;\n };\n }, [url]);\n\n return src;\n}\n","import type { JSX } from 'react';\nimport { Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger } from '../../ui/primitives/tooltip';\nimport { IMAGES_BASE_URL } from '../../core/api-paths';\nimport { FileIcon as FileTypeIcon, defaultStyles } from 'react-file-icon';\nimport { useCachedImageSrc } from '../../ui/hooks/use-cached-image-src';\n\nexport type Asset = {\n _id: string;\n path: string;\n};\n\nconst transparentImageBackground =\n 'fk:bg-[#fafafa] [--asset-checker:#f0f0f0] [background-image:linear-gradient(45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(-45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(45deg,transparent_75%,var(--asset-checker)_75%),linear-gradient(-45deg,transparent_75%,var(--asset-checker)_75%)] [background-position:0_0,0_4px,4px_-4px,-4px_0px] [background-size:8px_8px] fk:dark:bg-[#222] dark:[--asset-checker:#2a2a2a]';\n\nexport function Asset({ value }: { value: Asset | Asset[] }) {\n if (Array.isArray(value)) {\n return <AssetStack value={value} />;\n }\n\n return <SingleAsset value={value} />;\n}\n\nfunction SingleAsset({ value }: { value: Asset }) {\n const path = value?.path ?? '';\n const hasPath = Boolean(path);\n const isImage = hasPath && /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(path);\n\n const getExtensionFromPath = (p: string): string => {\n const [clean] = p.split('?');\n const parts = clean.split('.');\n\n if (parts.length > 1) {\n return parts.pop()!.toLowerCase();\n }\n\n return 'file';\n };\n\n const thumbnaillUrl = hasPath\n ? path.endsWith('.svg')\n ? `${IMAGES_BASE_URL}${path}`\n : `${IMAGES_BASE_URL}${path}?w=84&h=84&f=webp`\n : null;\n\n const fullUrl = hasPath\n ? path.endsWith('.svg')\n ? `${IMAGES_BASE_URL}${path}`\n : `${IMAGES_BASE_URL}${path}?w=624&h=624&f=webp`\n : '';\n\n const cachedThumbnailSrc = useCachedImageSrc(thumbnaillUrl);\n\n if (!hasPath) {\n return null;\n }\n\n return (\n <div className=\"fk:z-10\">\n <TooltipProvider>\n {isImage ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <img\n alt=\"asset\"\n className={`fk:w-7 fk:h-7 fk:cursor-zoom-in fk:overflow-hidden fk:rounded-md fk:object-contain ${transparentImageBackground}`}\n decoding=\"async\"\n src={cachedThumbnailSrc ?? undefined}\n />\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent>\n <img\n alt=\"asset\"\n className={`fk:w-52 fk:h-52 fk:overflow-hidden fk:rounded-md fk:object-contain ${transparentImageBackground}`}\n decoding=\"async\"\n src={fullUrl}\n />\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"fk:w-7 fk:h-7 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto\">\n {(() => {\n const ext = getExtensionFromPath(path);\n const style = (\n defaultStyles as Record<string, Record<string, string | number | boolean | undefined>>\n )[ext];\n\n return <FileTypeIcon extension={ext} {...(style || {})} />;\n })()}\n </div>\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent>\n <div className=\"fk:text-sm fk:text-muted-foreground\">Preview not available</div>\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n )}\n </TooltipProvider>\n </div>\n );\n}\n\nfunction AssetStack({ value }: { value: Asset[] }): JSX.Element | null {\n const assets = value.filter((asset) => Boolean(asset.path)).slice(0, 3);\n\n if (assets.length === 0) {\n return null;\n }\n\n return (\n <div className=\"fk:flex fk:items-center\">\n <div className=\"fk:flex fk:-space-x-2\">\n {assets.map((asset) => (\n <img\n alt=\"asset\"\n className={`fk:h-7 fk:w-7 fk:overflow-hidden fk:rounded-md fk:object-contain ${transparentImageBackground}`}\n decoding=\"async\"\n key={asset._id}\n src={`${IMAGES_BASE_URL}${asset.path}?w=84&h=84&f=webp`}\n />\n ))}\n </div>\n {value.length > 3 ? (\n <span className=\"fk:ml-2 fk:text-xs fk:text-muted-foreground\">+{value.length - 3}</span>\n ) : null}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/ui/hooks/use-cached-image-src.ts","../src/data-grid/preview-components/asset.tsx"],"names":["MAX_CACHE_ENTRIES","MAX_SINGLE_BLOB_BYTES","blobUrlCache","inFlightLoads","corsBlockedUrls","preloadedImages","ensurePreloaded","url","img","touch","entry","evictIfNeeded","entries","a","b","evictCount","i","loadToCache","existing","promise","res","blob","objectUrl","err","useCachedImageSrc","initial","useMemo","cached","src","setSrc","useState","useEffect","isStale","next","transparentImageBackground","Asset","value","jsx","AssetStack","SingleAsset","path","hasPath","isImage","getExtensionFromPath","p","clean","parts","thumbnaillUrl","IMAGES_BASE_URL","fullUrl","cachedThumbnailSrc","TooltipProvider","jsxs","Tooltip","TooltipTrigger","TooltipPortal","TooltipContent","ext","style","defaultStyles","FileTypeIcon","assets","asset"],"mappings":"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","file":"chunk-V2UTZEJQ.js","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\ntype CacheEntry = {\n objectUrl: string;\n byteSize: number;\n lastUsedAt: number;\n};\n\nconst MAX_CACHE_ENTRIES = 250;\nconst MAX_SINGLE_BLOB_BYTES = 2_500_000; // ~2.5MB\n\nconst blobUrlCache = new Map<string, CacheEntry>();\nconst inFlightLoads = new Map<string, Promise<void>>();\nconst corsBlockedUrls = new Set<string>();\nconst preloadedImages = new Map<string, HTMLImageElement>();\n\nfunction ensurePreloaded(url: string): void {\n if (preloadedImages.has(url)) {\n return;\n }\n\n const img = new Image();\n img.decoding = 'async';\n img.src = url;\n preloadedImages.set(url, img);\n}\n\nfunction touch(url: string): void {\n const entry = blobUrlCache.get(url);\n\n if (!entry) {\n return;\n }\n\n blobUrlCache.set(url, { ...entry, lastUsedAt: Date.now() });\n}\n\nfunction evictIfNeeded(): void {\n if (blobUrlCache.size <= MAX_CACHE_ENTRIES) {\n return;\n }\n\n const entries = Array.from(blobUrlCache.entries()).sort((a, b) => a[1].lastUsedAt - b[1].lastUsedAt);\n const evictCount = Math.max(1, Math.ceil(MAX_CACHE_ENTRIES * 0.1));\n\n for (let i = 0; i < evictCount && i < entries.length; i += 1) {\n const [url, entry] = entries[i];\n blobUrlCache.delete(url);\n\n URL.revokeObjectURL(entry.objectUrl);\n }\n}\n\nasync function loadToCache(url: string): Promise<void> {\n if (corsBlockedUrls.has(url)) {\n ensurePreloaded(url);\n\n return;\n }\n\n if (blobUrlCache.has(url)) {\n touch(url);\n\n return;\n }\n\n const existing = inFlightLoads.get(url);\n\n if (existing) {\n await existing;\n\n return;\n }\n\n const promise = (async () => {\n try {\n const res = await fetch(url, {\n mode: 'cors',\n cache: 'force-cache',\n });\n\n if (!res.ok) {\n ensurePreloaded(url);\n\n return;\n }\n\n const blob = await res.blob();\n\n if (blob.size > MAX_SINGLE_BLOB_BYTES) {\n return;\n }\n\n const objectUrl = URL.createObjectURL(blob);\n blobUrlCache.set(url, { objectUrl, byteSize: blob.size, lastUsedAt: Date.now() });\n evictIfNeeded();\n } catch (err: unknown) {\n // Most common failure is CORS (TypeError: Failed to fetch). If so, avoid retrying.\n if (err instanceof TypeError) {\n corsBlockedUrls.add(url);\n }\n\n ensurePreloaded(url);\n }\n })();\n\n inFlightLoads.set(url, promise);\n\n await promise;\n\n inFlightLoads.delete(url);\n}\n\n/**\n * Keeps a stable, in-memory cached image src across virtualized unmount/remount cycles.\n * Falls back to the original URL if the image can’t be fetched (e.g. due to CORS).\n */\nexport function useCachedImageSrc(url: string | null | undefined): string | null {\n const initial = useMemo(() => {\n if (!url) {\n return null;\n }\n\n const cached = blobUrlCache.get(url);\n\n if (!cached) {\n return null;\n }\n\n touch(url);\n\n return cached.objectUrl;\n }, [url]);\n\n const [src, setSrc] = useState<string | null>(initial);\n\n useEffect(() => {\n if (!url) {\n setSrc(null);\n\n return;\n }\n\n if (corsBlockedUrls.has(url)) {\n ensurePreloaded(url);\n setSrc(null);\n\n return;\n }\n\n const cached = blobUrlCache.get(url);\n\n if (cached) {\n touch(url);\n setSrc(cached.objectUrl);\n\n return;\n }\n\n setSrc(null);\n let isStale = false;\n\n loadToCache(url).then(() => {\n const next = blobUrlCache.get(url);\n\n if (!next) {\n return;\n }\n\n if (isStale) {\n return;\n }\n\n touch(url);\n setSrc(next.objectUrl);\n });\n\n return () => {\n isStale = true;\n };\n }, [url]);\n\n return src;\n}\n","import type { JSX } from 'react';\nimport { Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger } from '../../ui/primitives/tooltip';\nimport { IMAGES_BASE_URL } from '../../core/api-paths';\nimport { FileIcon as FileTypeIcon, defaultStyles } from 'react-file-icon';\nimport { useCachedImageSrc } from '../../ui/hooks/use-cached-image-src';\n\nexport type Asset = {\n _id: string;\n path: string;\n};\n\nconst transparentImageBackground =\n 'fk:bg-[#fafafa] [--asset-checker:#f0f0f0] [background-image:linear-gradient(45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(-45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(45deg,transparent_75%,var(--asset-checker)_75%),linear-gradient(-45deg,transparent_75%,var(--asset-checker)_75%)] [background-position:0_0,0_4px,4px_-4px,-4px_0px] [background-size:8px_8px] fk:dark:bg-[#222] dark:[--asset-checker:#2a2a2a]';\n\nexport function Asset({ value }: { value: Asset | Asset[] }) {\n if (Array.isArray(value)) {\n return <AssetStack value={value} />;\n }\n\n return <SingleAsset value={value} />;\n}\n\nfunction SingleAsset({ value }: { value: Asset }) {\n const path = value?.path ?? '';\n const hasPath = Boolean(path);\n const isImage = hasPath && /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(path);\n\n const getExtensionFromPath = (p: string): string => {\n const [clean] = p.split('?');\n const parts = clean.split('.');\n\n if (parts.length > 1) {\n return parts.pop()!.toLowerCase();\n }\n\n return 'file';\n };\n\n const thumbnaillUrl = hasPath\n ? path.endsWith('.svg')\n ? `${IMAGES_BASE_URL}${path}`\n : `${IMAGES_BASE_URL}${path}?w=84&h=84&f=webp`\n : null;\n\n const fullUrl = hasPath\n ? path.endsWith('.svg')\n ? `${IMAGES_BASE_URL}${path}`\n : `${IMAGES_BASE_URL}${path}?w=624&h=624&f=webp`\n : '';\n\n const cachedThumbnailSrc = useCachedImageSrc(thumbnaillUrl);\n\n if (!hasPath) {\n return null;\n }\n\n return (\n <div className=\"fk:z-10\">\n <TooltipProvider>\n {isImage ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <img\n alt=\"asset\"\n className={`fk:w-7 fk:h-7 fk:cursor-zoom-in fk:overflow-hidden fk:rounded-md fk:object-contain ${transparentImageBackground}`}\n decoding=\"async\"\n src={cachedThumbnailSrc ?? undefined}\n />\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent>\n <img\n alt=\"asset\"\n className={`fk:w-52 fk:h-52 fk:overflow-hidden fk:rounded-md fk:object-contain ${transparentImageBackground}`}\n decoding=\"async\"\n src={fullUrl}\n />\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"fk:w-7 fk:h-7 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto\">\n {(() => {\n const ext = getExtensionFromPath(path);\n const style = (\n defaultStyles as Record<string, Record<string, string | number | boolean | undefined>>\n )[ext];\n\n return <FileTypeIcon extension={ext} {...(style || {})} />;\n })()}\n </div>\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent>\n <div className=\"fk:text-sm fk:text-muted-foreground\">Preview not available</div>\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n )}\n </TooltipProvider>\n </div>\n );\n}\n\nfunction AssetStack({ value }: { value: Asset[] }): JSX.Element | null {\n const assets = value.filter((asset) => Boolean(asset.path)).slice(0, 3);\n\n if (assets.length === 0) {\n return null;\n }\n\n return (\n <div className=\"fk:flex fk:items-center\">\n <div className=\"fk:flex fk:-space-x-2\">\n {assets.map((asset) => (\n <img\n alt=\"asset\"\n className={`fk:h-7 fk:w-7 fk:overflow-hidden fk:rounded-md fk:object-contain ${transparentImageBackground}`}\n decoding=\"async\"\n key={asset._id}\n src={`${IMAGES_BASE_URL}${asset.path}?w=84&h=84&f=webp`}\n />\n ))}\n </div>\n {value.length > 3 ? (\n <span className=\"fk:ml-2 fk:text-xs fk:text-muted-foreground\">+{value.length - 3}</span>\n ) : null}\n </div>\n );\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import'./index.css';import {b}from'./chunk-WIUPQHZ5.js';var e="flexkit.io",g={"flexkit.io":true,"flexkit.test":true};function p(){let i=globalThis.process?.env?.FLEXKIT_DOMAIN?.trim();return i&&g[i]?i:e}var t=p();var o=t,r=`https://${o}`,n=i=>i?`https://${i}.api.${o}`:r,c=`${r}/images/`;function x(i=""){return {authProviders:`/api/flexkit/${i}/auth/providers`,completion:`/api/flexkit/${i}/completion`,currentUser:`/api/flexkit/${i}/users/me`,loginOtpConfirm:`${n(i)}/auth/otp/confirm`,loginOtpSend:`${n(i)}/auth/otp/send`,logout:a=>{let l=new URLSearchParams({redirect:b(a,i)});return `/api/flexkit/${i}/auth/logout?${l.toString()}`},search:`/api/flexkit/${i}/search`,sessionId:`${n(i)}/api/auth/login/session`,upload:`/api/flexkit/${i}/upload`}}
2
+ export{r as a,c as b,x as c};//# sourceMappingURL=chunk-ZBV4BY36.js.map
3
+ //# sourceMappingURL=chunk-ZBV4BY36.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/domains.ts","../src/core/api-paths.ts"],"names":["defaultFlexkitDomain","allowedFlexkitDomains","getConfiguredFlexkitDomain","configuredDomain","flexkitDomain","domain","baseApiUrl","baseProjectApiUrl","projectId","IMAGES_BASE_URL","apiPaths","basePath","params","joinBasePath"],"mappings":"wDAAA,IAAMA,CAAAA,CAAuB,YAAA,CAEvBC,CAAAA,CAAoD,CACxD,YAAA,CAAc,IAAA,CACd,cAAA,CAAgB,IAClB,CAAA,CAUA,SAASC,CAAAA,EAAqC,CAC5C,IAAMC,CAAAA,CAAoB,UAAA,CAAoC,OAAA,EAAS,GAAA,EAAK,cAAA,EAAgB,IAAA,EAAK,CAEjG,OAAKA,CAAAA,EAIDF,CAAAA,CAAsBE,CAAgB,CAAA,CACjCA,CAAAA,CAJAH,CAQX,CAEO,IAAMI,CAAAA,CAAgBF,CAAAA,EAA2B,CC1BxD,IAAMG,CAAAA,CAASD,CAAAA,CACFE,CAAAA,CAAa,CAAA,QAAA,EAAWD,CAAM,CAAA,CAAA,CACrCE,CAAAA,CAAqBC,CAAAA,EACzBA,CAAAA,CAAY,CAAA,QAAA,EAAWA,CAAS,CAAA,KAAA,EAAQH,CAAM,CAAA,CAAA,CAAKC,CAAAA,CAcxCG,CAAAA,CAAkB,CAAA,EAAGH,CAAU,CAAA,QAAA,EAErC,SAASI,CAAAA,CAASF,CAAAA,CAAY,EAAA,CAAc,CACjD,OAAO,CACL,aAAA,CAAe,CAAA,aAAA,EAAgBA,CAAS,CAAA,eAAA,CAAA,CACxC,UAAA,CAAY,CAAA,aAAA,EAAgBA,CAAS,CAAA,WAAA,CAAA,CACrC,WAAA,CAAa,CAAA,aAAA,EAAgBA,CAAS,CAAA,SAAA,CAAA,CACtC,eAAA,CAAiB,CAAA,EAAGD,CAAAA,CAAkBC,CAAS,CAAC,CAAA,iBAAA,CAAA,CAChD,YAAA,CAAc,CAAA,EAAGD,CAAAA,CAAkBC,CAAS,CAAC,CAAA,cAAA,CAAA,CAC7C,MAAA,CAASG,CAAAA,EAAqB,CAC5B,IAAMC,CAAAA,CAAS,IAAI,eAAA,CAAgB,CACjC,QAAA,CAAUC,CAAAA,CAAaF,CAAAA,CAAUH,CAAS,CAC5C,CAAC,CAAA,CAED,OAAO,CAAA,aAAA,EAAgBA,CAAS,CAAA,aAAA,EAAgBI,CAAAA,CAAO,QAAA,EAAU,CAAA,CACnE,CAAA,CACA,MAAA,CAAQ,CAAA,aAAA,EAAgBJ,CAAS,CAAA,OAAA,CAAA,CACjC,SAAA,CAAW,CAAA,EAAGD,CAAAA,CAAkBC,CAAS,CAAC,CAAA,uBAAA,CAAA,CAC1C,MAAA,CAAQ,CAAA,aAAA,EAAgBA,CAAS,SACnC,CACF","file":"chunk-ZBV4BY36.js","sourcesContent":["const defaultFlexkitDomain = 'flexkit.io';\n\nconst allowedFlexkitDomains: { [domain: string]: true } = {\n 'flexkit.io': true,\n 'flexkit.test': true,\n};\n\ntype GlobalWithProcessEnv = typeof globalThis & {\n process?: {\n env?: {\n [key: string]: string | undefined;\n };\n };\n};\n\nfunction getConfiguredFlexkitDomain(): string {\n const configuredDomain = (globalThis as GlobalWithProcessEnv).process?.env?.FLEXKIT_DOMAIN?.trim();\n\n if (!configuredDomain) {\n return defaultFlexkitDomain;\n }\n\n if (allowedFlexkitDomains[configuredDomain]) {\n return configuredDomain;\n }\n\n return defaultFlexkitDomain;\n}\n\nexport const flexkitDomain = getConfiguredFlexkitDomain();\nexport const flexkitApiDomain = `api.${flexkitDomain}`;\n","import { joinBasePath } from './base-path';\nimport { flexkitDomain } from './domains';\n\nconst domain = flexkitDomain;\nexport const baseApiUrl = `https://${domain}`;\nconst baseProjectApiUrl = (projectId?: string): string =>\n projectId ? `https://${projectId}.api.${domain}` : baseApiUrl;\n\ninterface ApiPaths {\n authProviders: string;\n completion: string;\n currentUser: string;\n loginOtpConfirm: string;\n loginOtpSend: string;\n logout: (basePath: string) => string;\n search: string;\n sessionId: string;\n upload: string;\n}\n\nexport const IMAGES_BASE_URL = `${baseApiUrl}/images/`;\n\nexport function apiPaths(projectId = ''): ApiPaths {\n return {\n authProviders: `/api/flexkit/${projectId}/auth/providers`,\n completion: `/api/flexkit/${projectId}/completion`,\n currentUser: `/api/flexkit/${projectId}/users/me`,\n loginOtpConfirm: `${baseProjectApiUrl(projectId)}/auth/otp/confirm`,\n loginOtpSend: `${baseProjectApiUrl(projectId)}/auth/otp/send`,\n logout: (basePath: string) => {\n const params = new URLSearchParams({\n redirect: joinBasePath(basePath, projectId),\n });\n\n return `/api/flexkit/${projectId}/auth/logout?${params.toString()}`;\n },\n search: `/api/flexkit/${projectId}/search`,\n sessionId: `${baseProjectApiUrl(projectId)}/api/auth/login/session`,\n upload: `/api/flexkit/${projectId}/upload`,\n };\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -49,7 +49,7 @@ interface ConfigContext {
49
49
  }
50
50
  declare function useConfig(): ConfigContext;
51
51
 
52
- declare const IMAGES_BASE_URL = "https://flexkit.io/images/";
52
+ declare const IMAGES_BASE_URL: string;
53
53
 
54
54
  type UploadedFileResult = {
55
55
  pathname: string;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import'./index.css';import {a as a$2}from'./chunk-OXTER7HO.js';import {a as a$1}from'./chunk-JHDZP6RC.js';import {a as a$a}from'./chunk-D4XLXU2H.js';import {a as a$b}from'./chunk-HSPSTCNK.js';import {a as a$9}from'./chunk-4KGH7PU7.js';import {a,b as b$7}from'./chunk-7NQ6QCJD.js';import {a as a$c}from'./chunk-SXZZFHMJ.js';import {g as g$3,h as h$2,i as i$1,l,m as m$1,j,n,f as f$3,c as c$7,d as d$3}from'./chunk-RVGMKQPC.js';import {a as a$6}from'./chunk-FPK7J4BP.js';import'./chunk-PEYW7XOU.js';import {a as a$7,b as b$5,c as c$4,e as e$3}from'./chunk-5CKMFBWH.js';import {a as a$5,d as d$1,c as c$1,e as e$1,b as b$1,f as f$1,g as g$1}from'./chunk-7WR64NTK.js';import {d as d$2,c as c$2,b as b$9,a as a$h,e as e$5}from'./chunk-2ORQKJKI.js';export{c as useAppContext,d as useAppDispatch,e as useSearch}from'./chunk-2ORQKJKI.js';import {v,b as b$6,m as m$2,o,p,r,t,s,q}from'./chunk-ND3OZVR5.js';import {b as b$a,a as a$i}from'./chunk-N6WEYKSZ.js';export{b as useAuth}from'./chunk-N6WEYKSZ.js';import {c as c$3,e as e$2,f as f$2,g as g$2,h as h$1,m,a as a$g,l as l$1,i as i$2,b as b$c,r as r$1}from'./chunk-YXRNHQPG.js';import {d,a as a$e,b as b$8,e as e$4,c as c$6}from'./chunk-6YHHL4XI.js';export{a as assetSchema,b as tagSchema,d as useConfig}from'./chunk-6YHHL4XI.js';import {b as b$4,c as c$5,a as a$k}from'./chunk-CHRDKNUF.js';export{b as IMAGES_BASE_URL}from'./chunk-CHRDKNUF.js';import {b as b$3,a as a$8}from'./chunk-EYGOJ2ZN.js';import {a as a$f,b as b$b}from'./chunk-WIUPQHZ5.js';import {a as a$3}from'./chunk-V7UK6RMM.js';import {b as b$2,a as a$d}from'./chunk-Z5CZVKD4.js';export{b as DefaultValueSwitch}from'./chunk-Z5CZVKD4.js';import'./chunk-6MOUYNN4.js';import {b,c,e,f,h,g,i,a as a$j}from'./chunk-53TUQIKJ.js';import {a as a$4}from'./chunk-O2QMYUPS.js';import*as rn from'react';import {lazy,createContext,memo,forwardRef,useMemo,useImperativeHandle,useEffect,createElement,useId,useState,useRef,useCallback,useContext,Fragment as Fragment$1,useReducer,Suspense,startTransition}from'react';import {debug}from'debug';import {useParams,createBrowserRouter,RouterProvider,useRouteError,useLocation,Outlet,useNavigate,Navigate,NavLink,Link as Link$1,isRouteErrorResponse}from'react-router-dom';export{Outlet,useLocation,useParams}from'react-router-dom';import {find,propEq,equals,uniqBy,prop,map,filter,uniq,omit,pick,toPairs,props}from'ramda';import Bs,{useSWRConfig}from'swr';import {Text,CheckSquare,Heading1,Heading2,Heading3,List,ListOrdered,TextQuote,Code,ImageIcon,Youtube,Twitter,AlertTriangle,Image as Image$1,Upload,Search,File,Ellipsis,Download,Copy,RefreshCwOff,Maximize2,X,Calendar,ChevronsUpDown,Link,TextIcon,ChevronDown,Check,Trash,SigmaIcon,BoldIcon,ItalicIcon,UnderlineIcon,StrikethroughIcon,CodeIcon,ChevronLeftIcon,ChevronRightIcon,ChevronDownIcon,ArrowUp,ArrowDown,TrashIcon,RefreshCcwDot,CheckCheck,ArrowDownWideNarrow,WrapText,StepForward,Trash2,AlertCircle,CirclePlus,Pencil,Settings2,Loader2,MoreHorizontal,Settings,Wrench,PackageCheck,PackageX,Moon,Sun,Monitor,Mail,LoaderCircle}from'lucide-react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useForm}from'react-hook-form';import*as Qo from'zod';import {z}from'zod';import {zodResolver}from'@hookform/resolvers/zod';import {cva}from'class-variance-authority';import {gql,ApolloClient,InMemoryCache,defaultDataIdFromObject,from,HttpLink}from'@apollo/client';export{gql}from'@apollo/client';import {useLazyQuery,useApolloClient,useMutation,useQuery,ApolloProvider}from'@apollo/client/react';import {ErrorLink}from'@apollo/client/link/error';import {ServerError,CombinedGraphQLErrors,CombinedProtocolErrors}from'@apollo/client/errors';import {Collapsible,Popover,AlertDialog}from'radix-ui';import {toast}from'sonner';import {v4}from'uuid';import {Drawer}from'vaul';import Qn from'bytes';import {defaultStyles,FileIcon}from'react-file-icon';import {format}from'date-fns';import {getDefaultClassNames,DayPicker}from'react-day-picker';import {createSuggestionItems,Command,renderItems,EditorRoot,EditorContent,EditorCommand,EditorCommandEmpty,EditorCommandList,EditorCommandItem,ImageResizer,handleImageDrop,handleImagePaste,handleCommandNavigation,useEditor,removeAIHighlight,EditorBubble,EditorBubbleItem,addAIHighlight,getPrevText}from'novel';import {useDebouncedCallback}from'use-debounce';import {useCompletion}from'@ai-sdk/react';import md from'react-markdown';import {useReactTable,getFacetedUniqueValues,getFacetedRowModel,getSortedRowModel,getPaginationRowModel,getFilteredRowModel,getCoreRowModel,flexRender}from'@tanstack/react-table';export{flexRender,getCoreRowModel,getFacetedRowModel,getFacetedUniqueValues,getFilteredRowModel,getPaginationRowModel,getSortedRowModel,useReactTable}from'@tanstack/react-table';import {useVirtualizer}from'@tanstack/react-virtual';export{useVirtualizer}from'@tanstack/react-virtual';function qo(){let[e,t]=useState(false),{theme:o,setTheme:n}=b$c();return useEffect(()=>{t(true);},[]),e?jsxs(c$7,{size:"sm",type:"single",value:o,children:[jsx(d$3,{"aria-label":"Set dark mode",onClick:()=>{n("dark");},value:"dark",children:jsx(Moon,{className:"fk:h-4 fk:w-4"})}),jsx(d$3,{"aria-label":"Set light mode",onClick:()=>{n("light");},value:"light",children:jsx(Sun,{className:"fk:h-4 fk:w-4"})}),jsx(d$3,{"aria-label":"Set system mode",onClick:()=>{n("system");},value:"system",children:jsx(Monitor,{className:"fk:h-4 fk:w-4"})})]}):null}function Jo(){let{resolvedTheme:e}=b$c();return jsx("div",{className:"fk:flex fk:w-full fk:h-full fk:justify-center fk:items-center fk:bg-background",children:jsxs("div",{className:"fk:flex fk:flex-col fk:items-center",children:[e==="dark"?jsxs("svg",{className:"fk:h-8 fk:w-8 fk:animate-bounce",fill:"none",viewBox:"0 0 48 48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"#020817"}),jsx("path",{d:"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z",fill:"white"})]}):jsxs("svg",{className:"fk:h-8 fk:w-8 fk:animate-bounce",fill:"none",viewBox:"0 0 48 48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"white"}),jsx("path",{d:"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z",fill:"#020817"})]}),jsx("div",{className:"fk:text-foreground fk:text-center fk:mt-4 fk:animate-pulse",children:"Loading..."})]})})}var Os=cva("fk:relative fk:grid fk:w-full fk:grid-cols-[0_1fr] fk:items-start fk:gap-y-0.5 fk:rounded-lg fk:border fk:px-4 fk:py-3 fk:text-sm fk:has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] fk:has-[>svg]:gap-x-3 fk:[&>svg]:size-4 fk:[&>svg]:translate-y-0.5 fk:[&>svg]:text-current",{variants:{variant:{default:"fk:bg-card fk:text-card-foreground",destructive:"fk:bg-card fk:text-destructive fk:*:data-[slot=alert-description]:text-destructive/90 fk:[&>svg]:text-current"}},defaultVariants:{variant:"default"}});function re({className:e,variant:t,...o}){return jsx("div",{"data-slot":"alert",role:"alert",className:a$4(Os({variant:t}),e),...o})}function Te({className:e,...t}){return jsx("div",{"data-slot":"alert-title",className:a$4("fk:col-start-2 fk:line-clamp-1 fk:min-h-4 fk:font-medium fk:tracking-tight",e),...t})}function ie({className:e,...t}){return jsx("div",{"data-slot":"alert-description",className:a$4("fk:col-start-2 fk:grid fk:justify-items-start fk:gap-1 fk:text-sm fk:text-muted-foreground fk:[&_p]:leading-relaxed",e),...t})}var Js=Qo.object({email:Qo.string().email({message:"Please enter a valid email address"})});function Nn({projectId:e$1,setIsEmailLogin:t}){let[o,n]=useState(false),[r,i$1]=useState(false),{mutate:a}=useSWRConfig(),s=useForm({resolver:zodResolver(Js),defaultValues:{email:""}}),f=new URL(c$5(e$1).loginOtpSend,a$k),{data:u,error:c$1,isLoading:l}=Bs(r?f.href:null,h=>fetch(h,{method:"POST",mode:"cors",body:JSON.stringify({email:s.getValues("email")})}).then(y=>y.json()),{revalidateIfStale:false,revalidateOnFocus:false,revalidateOnReconnect:false,shouldRetryOnError:false}),d=u&&"error"in u&&u.error.code,m=u&&"token"in u,g$1=u&&"token"in u?u.token:"";useEffect(()=>{if(!m)return;let h=0,y=setInterval(()=>{if(h>100){clearInterval(y),n(true);return}let v=new URL(c$5(e$1).loginOtpConfirm,a$k),x="/api/flexkit/set-token";fetch(`${v.href}?email=${s.getValues("email")}&token=${g$1}`).then(A=>{A.status===200&&A.json().then(S=>{fetch(x,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sid:S.sid})}).then(()=>{window.location.reload();}).catch(()=>{});}).catch(()=>{});}).catch(()=>{}),h++;},3e3);return ()=>{clearInterval(y);}},[s,m,e$1,g$1]);function p(){n(false),i$1(true),a(f.href);}return jsx("div",{className:"fk:w-full",children:m?jsx(re,{variant:"success",children:jsxs(ie,{children:["Keep this window open and in a new tab open the link we just sent to:"," ",jsx("strong",{children:s.getValues("email")})," (",jsx(b$3,{className:"fk:p-0 fk:hover:underline fk:dark:text-background",onClick:()=>{window.location.reload();},variant:"link",children:"undo"}),")"]})}):jsx(b,{...s,children:jsxs("form",{onSubmit:h=>{s.handleSubmit(p)(h);},className:"fk:w-full fk:space-y-3 fk:mb-10",children:[d==="not_exists"&&jsx(re,{variant:"destructive",children:jsxs(ie,{children:["There is no Flexkit account associated with this email address."," ",jsx("a",{className:"fk:text-black/90 fk:dark:text-white/90 fk:underline",href:`https://flexkit.io/signup/email?email=${s.getValues("email")}`,children:"Sign up?"})]})}),d==="unknown_error"||c$1?jsx(re,{variant:"destructive",children:jsxs(ie,{children:["There was an unknown error, please"," ",jsx(b$3,{className:"fk:p-0 fk:hover:underline",onClick:()=>{window.location.reload();},variant:"link",children:"Try again"}),"."," "]})}):null,o?jsx(re,{variant:"destructive",children:jsxs(ie,{children:["The email verification link may have expired. Please"," ",jsx(b$3,{className:"fk:p-0 fk:hover:underline",onClick:()=>{window.location.reload();},variant:"link",children:"try again"}),"."]})}):null,jsx(c,{control:s.control,defaultValue:"",name:"email",render:({field:h})=>jsxs(e,{children:[jsx(g,{children:jsx(a$6,{"aria-label":"Email Address",autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",className:"w-full",placeholder:"Email Address",spellCheck:false,type:"email",...h})}),jsx(i,{})]})}),jsxs(b$3,{"aria-disabled":l,className:"fk:w-full",type:"submit",disabled:!!l,children:[l?jsx(Loader2,{className:"fk:h-5 fk:w-5 fk:mr-2 fk:animate-spin"}):jsx(Mail,{className:"fk:w-5 fk:h-5 fk:mr-2"}),"Continue with Email"]}),jsx(b$3,{className:"fk:w-full fk:text-link",onClick:()=>{t(false);},variant:"link",children:"\u2190 Other Login options"})]})})})}function di({projectId:e}){let{projects:t}=d(),[o,n]=useState(t.find(p=>p.projectId===e)??t[0]),[r,i]=useState(false),{data:a,error:s,isLoading:f}=Bs(c$5(e).authProviders,p=>fetch(p,{mode:"cors"}).then(h=>h.json())),[u,c]=b$a(),l=new Date().getFullYear(),d$2=useLocation(),m=d$2.state?.from?.pathname??d$2.pathname,g=m.includes(o.projectId)?`${location.origin}${m}`:`${location.origin}${b$b(o.basePath,o.projectId)}`;if(s)throw new Error("Error fetching auth providers");return f||u||!a?jsx(Jo,{}):c.user?.id?jsx(Navigate,{replace:true,state:{from:d$2},to:o.basePath}):jsxs(Fragment,{children:[jsxs("div",{className:"fk:container fk:relative fk:h-[calc(100vh-3rem)] fk:flex fk:items-center fk:justify-center fk:lg:px-0",children:[jsx("div",{className:"fk:w-full fk:lg:p-8",children:jsxs("div",{className:"fk:mx-auto fk:flex fk:flex-col fk:justify-center fk:sm:w-[350px]",children:[jsx("h1",{className:"fk:mb-4 fk:text-2xl fk:text-center fk:font-medium fk:tracking-tight",children:"Login to Flexkit Studio"}),t.length>1?jsxs("div",{className:"fk:flex-col fk:space-y-2 fk:mb-3",children:[jsx(a$j,{className:"fk:text-sm fk:font-normal fk:text-left fk:text-muted-foreground",htmlFor:"project",children:"Select project"}),jsxs(a$5,{defaultValue:o.projectId,onValueChange:p=>{n(t.find(h=>h.projectId===p)??t[0]);},children:[jsx(d$1,{className:"fk:mb-4 fk:w-full fk:h-9 fk:py-1",id:"project",children:jsx(c$1,{"aria-label":o.title,children:o.title})}),jsx(e$1,{children:t.map(p=>jsx(g$1,{value:p.projectId,children:p.title},p.projectId))})]})]}):null,r?jsx(Nn,{projectId:e,setIsEmailLogin:i}):jsxs(Fragment,{children:[jsx("p",{className:"fk:mt-2 fk:mb-2 fk:text-sm fk:text-left fk:text-muted-foreground",children:"Choose login provider"}),jsxs("div",{className:"fk:flex fk:flex-col fk:space-y-6",children:[a.providers.map(p=>jsx(b$3,{asChild:true,className:`fk:${p.button.color} fk:${p.button.backgroundColor} fk:hover:${p.button.colorHover} fk:hover:${p.button.backgroundColorHover}`,type:"button",variant:p.button.variant,children:jsxs("a",{href:Ws({url:p.url,projectId:o.projectId,basePath:"/api/flexkit/get-token",fromPath:g}),children:[p.button.iconUrl?jsx("img",{alt:p.title,className:"fk:w-[20px] fk:h-[20px] fk:mr-2",src:p.button.iconUrl}):null,p.title]})},p.name)),jsx(b$3,{className:"fk:mt-4! fk:text-sm fk:text-center fk:text-link",onClick:()=>{i(true);},variant:"link",children:"Continue with Email \u2192"})]})]}),jsxs("div",{className:"fk:flex fk:flex-col fk:items-center fk:pt-8",children:[jsxs("svg",{className:"fk:w-28",fill:"none",viewBox:"0 0 191 42",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M59.2923 38.5263H52.7518V19.433H49.5653V12.9332H52.7518V11.7145C52.7518 10.1373 53.0471 8.65569 53.638 7.26967C54.245 5.88368 55.0677 4.68089 56.1058 3.66131C57.16 2.62579 58.3817 1.81331 59.7713 1.22386C61.1609 0.618477 62.6464 0.315788 64.2276 0.315788H69.1388V6.81564H64.2276C63.5247 6.81564 62.8698 6.9431 62.2628 7.19798C61.6719 7.43696 61.1528 7.77948 60.7057 8.22554C60.2746 8.65569 59.9311 9.17344 59.6756 9.77882C59.4201 10.3683 59.2923 11.0135 59.2923 11.7145V12.9332H67.3182V19.433H59.2923V38.5263Z",fill:"currentColor"}),jsx("path",{d:"M78.6099 38.5263H71.9802V0.315788H78.6099V38.5263Z",fill:"currentColor"}),jsx("path",{d:"M93.8922 32.3923C94.146 32.4723 94.3998 32.5283 94.6536 32.5604C94.9074 32.5765 95.1615 32.5842 95.4153 32.5842C96.0497 32.5842 96.6606 32.4964 97.2476 32.3203C97.8346 32.1445 98.3817 31.8966 98.8896 31.5768C99.4131 31.2409 99.8732 30.841 100.27 30.3772C100.682 29.8973 101.015 29.3695 101.269 28.7937L106.029 33.616C105.426 34.4797 104.728 35.2553 103.934 35.9432C103.157 36.6308 102.308 37.2145 101.388 37.6944C100.484 38.1743 99.5241 38.534 98.5089 38.7741C97.5094 39.03 96.4782 39.1579 95.4153 39.1579C93.6225 39.1579 91.933 38.822 90.3465 38.1502C88.7759 37.4784 87.3957 36.5427 86.2058 35.3434C85.0319 34.1438 84.1038 32.7202 83.4218 31.0729C82.7395 29.4095 82.3983 27.5862 82.3983 25.6029C82.3983 23.5717 82.7395 21.7164 83.4218 20.037C84.1038 18.3576 85.0319 16.9262 86.2058 15.7426C87.3957 14.5591 88.7759 13.6394 90.3465 12.9836C91.933 12.3279 93.6225 12 95.4153 12C96.4782 12 97.5173 12.128 98.5325 12.3839C99.548 12.6398 100.508 13.0076 101.412 13.4875C102.332 13.9673 103.189 14.5591 103.982 15.2628C104.775 15.9505 105.473 16.7263 106.076 17.5899L93.8922 32.3923ZM97.2237 18.8854C96.9224 18.7735 96.6208 18.7015 96.3195 18.6695C96.0338 18.6375 95.7325 18.6215 95.4153 18.6215C94.5267 18.6215 93.6859 18.7895 92.8927 19.1253C92.1154 19.4452 91.4334 19.9091 90.8461 20.5168C90.2751 21.1246 89.823 21.8603 89.4898 22.724C89.1566 23.5717 88.9902 24.5313 88.9902 25.6029C88.9902 25.8428 88.9981 26.1147 89.0138 26.4186C89.0457 26.7225 89.0852 27.0344 89.133 27.3543C89.1965 27.6582 89.2679 27.9541 89.347 28.2419C89.4263 28.5298 89.5296 28.7858 89.6565 29.0097L97.2237 18.8854Z",fill:"currentColor"}),jsx("path",{d:"M132.911 38.5263H124.926L119.833 30.6401L114.693 38.5263H106.707L116.055 25.3265L106.707 12.6316H114.693L119.833 20.0129L124.926 12.6316H132.911L123.539 25.3265L132.911 38.5263Z",fill:"currentColor"}),jsx("path",{d:"M143.002 38.5263H136.383V0.315788H143.002V24.0898L151.557 12.9976H159.114L150.57 23.6485L159.114 38.5263H151.557L146.335 29.2367L143.002 34.0243V38.5263Z",fill:"currentColor"}),jsx("path",{d:"M169.848 5.93416C169.848 6.54038 169.727 7.10672 169.486 7.63317C169.262 8.15962 168.949 8.62224 168.547 9.02108C168.146 9.40396 167.672 9.71505 167.126 9.95433C166.596 10.1777 166.026 10.2893 165.416 10.2893C164.806 10.2893 164.228 10.1777 163.682 9.95433C163.152 9.71505 162.686 9.40396 162.285 9.02108C161.9 8.62224 161.586 8.15962 161.346 7.63317C161.121 7.10672 161.008 6.54038 161.008 5.93416C161.008 5.34388 161.121 4.78553 161.346 4.25908C161.586 3.71666 161.9 3.25403 162.285 2.87115C162.686 2.47232 163.152 2.16124 163.682 1.93789C164.228 1.6986 164.806 1.57895 165.416 1.57895C166.026 1.57895 166.596 1.6986 167.126 1.93789C167.672 2.16124 168.146 2.47232 168.547 2.87115C168.949 3.25403 169.262 3.71666 169.486 4.25908C169.727 4.78553 169.848 5.34388 169.848 5.93416ZM168.716 38.5263H162.092V12.8977H168.716V38.5263Z",fill:"currentColor"}),jsx("path",{d:"M186.938 38.5263C185.368 38.5263 183.892 38.2319 182.512 37.6429C181.131 37.0378 179.918 36.2178 178.871 35.183C177.839 34.1323 177.022 32.9145 176.419 31.5294C175.832 30.1442 175.539 28.6635 175.539 27.0874V19.4932H172.374V12.9976H175.539V0.315788H182.012V12.9976H189.106V19.4932H182.012V27.0874C182.012 27.772 182.139 28.4168 182.393 29.0218C182.646 29.6108 182.996 30.1282 183.44 30.574C183.884 31.0198 184.408 31.378 185.01 31.6487C185.613 31.9034 186.256 32.0308 186.938 32.0308H189.106V38.5263H186.938Z",fill:"currentColor"}),jsx("path",{d:"M19.8893 2.21053C34.8062 2.21053 39.7785 7.18421 39.7785 22.1053C39.7785 37.0263 34.8062 42 19.8893 42C4.97231 42 0 37.0263 0 22.1053C0 7.18421 4.97231 2.21053 19.8893 2.21053ZM14.7093 10.1053H7.26116L15.9804 21.9654L7.26116 34.2973H14.7093L17.4445 30.1161V14.0271L14.7093 10.1053ZM32.285 10.1053H24.8237L21.7835 14.4979V29.5995L24.8237 34.2973H32.285L23.528 21.9654L32.285 10.1053Z",fill:"currentColor"})]}),jsxs("ul",{className:"fk:flex fk:w-full fk:mt-4 fk:justify-center fk:text-xs fk:text-muted-foreground",children:[jsx("li",{className:"fk:pr-6 fk:after:content-['|'] fk:after:pl-6",children:jsx("a",{className:"fk:underline-offset-4 fk:hover:text-primary",href:"https://www.flexkit.io",children:"flexkit.io"})}),jsx("li",{className:"fk:pr-6 fk:after:content-['|'] fk:after:pl-6",children:jsx("a",{className:"fk:underline-offset-4 fk:hover:text-primary",href:"https://www.flexkit.io/docs",children:"Docs"})}),jsx("li",{className:"",children:jsx("a",{className:"fk:underline-offset-4 fk:hover:text-primary",href:"https://www.flexkit.io/privacy-policy",children:"Privacy Policy"})})]})]})]})}),jsx("div",{className:"fk:hidden fk:text-white! fk:bg-bitbucket! fk:hover:bg-bitbucket-hover!"}),jsx("div",{className:"fk:hidden fk:bg-github! fk:hover:bg-github-hover!"}),jsx("div",{className:"fk:hidden fk:text-muted-foreground! fk:bg-white! fk:hover:bg-accent!"})]}),jsx("div",{className:"fk:flex fk:justify-center fk:items-center fk:h-12 fk:text-xs fk:text-muted-foreground fk:border-t fk:border-accent",children:jsxs("div",{className:"fk:container fk:flex",children:[jsxs("div",{className:"fk:flex fk:items-center fk:mr-auto",children:[jsxs("svg",{className:"fk:h-5 fk:w-5 fk:mr-3 fk:text-black fk:dark:text-white",fill:"none",height:"48",viewBox:"0 0 48 48",width:"48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"none"}),jsx("path",{d:"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z",fill:"currentColor"})]}),jsxs("p",{className:"fk:flex fk:items-center",children:["\xA9 ",l]})]}),jsx(qo,{})]})})]})}function Ws({projectId:e,url:t,basePath:o,fromPath:n}){let r=new URLSearchParams;return r.set("origin",`${location.origin}${o}`),r.set("projectId",e),r.set("redirect",n),`${t}?${r.toString()}`}var Zs=["PROJECT_PAUSED","PROJECT_NOT_FOUND","READ_ONLY_MODE","UNKNOWN_ERROR"],Ys={PROJECT_PAUSED:"This project has been paused.",PROJECT_NOT_FOUND:"The requested project ID was not found",READ_ONLY_MODE:"This project is currently in read only mode and changes cannot be saved",UNKNOWN_ERROR:"Sorry, an unexpected error has occurred. Please try again"},Xo=class e extends Error{code;constructor(t,o){super(o??Ys[t]),this.name="FlexkitError",this.code=t,Object.setPrototypeOf&&Object.setPrototypeOf(this,new.target.prototype);}static from(t,o){return new e(t,o)}};function Pn(e){if(!(e instanceof Error))return false;let t=e.code;return typeof t!="string"?false:Zs.includes(t)}function ui(e){if(Pn(e))return e.code}function ki({apps:e,version:t}){let[o,n]=useState(0),[r,i]=useState(e),[a,s]=useState([]),f=useRef(null),u=useLocation(),{projectId:c}=useParams(),l=e.find(m=>u.pathname.includes(`/${c}/${m.name}`))?.name,d=e.find(m=>u.pathname.includes(`/${c}/${m.name}`))?.name??e[0]?.name;return useEffect(()=>{if(f.current===null)return;let m=new ResizeObserver(()=>{n(f.current?.offsetHeight??0);});return m.observe(f.current),function(){m.disconnect();}},[l]),useEffect(()=>{let m=Math.floor(o/48)-2,g=e.slice(0,m);if(!g.find(h=>h.name===d)){let h=e.find(y=>y.name===d);g.pop(),h&&g.push(h);}let p=e.filter(h=>!g.includes(h));i(g),s(p);},[e,d,o]),l===void 0&&d?jsx(Navigate,{to:`${u.pathname}/${d}`}):jsx(a$7,{children:jsxs("div",{className:"fk:flex fk:flex-col fk:h-full fk:w-12 fk:bg-muted",ref:f,children:[jsxs("div",{className:"fk:grow",children:[jsx("div",{className:"fk:grid fk:grid-cols-1 fk:w-12 fk:h-auto",children:r.map(m=>jsx(b$3,{asChild:true,className:"fk:h-12 fk:w-12",variant:"ghost",children:jsxs(b$5,{children:[jsx(c$4,{asChild:true,className:"fk:h-12 fk:p-2 fk:rounded-none fk:border-2 fk:border-transparent! fk:data-[state=active]:border-l-foreground! fk:focus-visible:outline-hidden fk:focus-visible:ring-0 fk:focus-visible:ring-offset-0 fk:focus-visible:border-2! fk:focus-visible:border-ring! fk:focus-visible:rounded-xs",children:jsx(NavLink,{className:"fk:text-muted-foreground fk:aria-[current]:text-foreground fk:aria-[current]:bg-background fk:aria-[current]:border-l-white!",to:m.name,children:m.icon})}),jsx(e$3,{side:"right",children:jsx("p",{children:m.title})})]})},m.name))}),a.length>0&&jsxs(c$3,{children:[jsx(b$5,{children:jsx(e$2,{asChild:true,children:jsxs(c$4,{className:"fk:flex fk:justify-center fk:items-center fk:h-12 fk:w-12 p-0 fk:data-[state=open]:bg-muted fk:text-muted-foreground fk:transition-colors fk:focus-visible:outline-hidden fk:focus-visible:border-2 fk:focus-visible:border-ring fk:focus-visible:rounded-xs",children:[jsx(MoreHorizontal,{className:"fk:w-5 fk:h-5",strokeWidth:1.5}),jsx("span",{className:"fk:sr-only",children:"View additional apps"}),jsx(e$3,{side:"right",children:jsx("p",{children:"Additional apps"})})]})})}),jsx(f$2,{align:"start",className:"fk:w-56",side:"right",children:a.map(m=>jsx(h$1,{asChild:true,children:jsx(NavLink,{to:m.name,children:m.title})},m.name))})]})]}),jsxs(c$3,{children:[jsx(b$5,{children:jsx(e$2,{asChild:true,children:jsxs(c$4,{className:"fk:flex fk:justify-center fk:items-center fk:h-12 fk:w-12 fk:p-0 fk:data-[state=open]:bg-muted fk:text-muted-foreground fk:transition-colors fk:focus-visible:outline-hidden fk:focus-visible:border-2 fk:focus-visible:border-ring fk:focus-visible:rounded-xs",children:[jsx(Settings,{className:"fk:w-5 fk:h-5",strokeWidth:1.5}),jsx("span",{className:"fk:sr-only",children:"Settings menu"}),jsx(e$3,{side:"right",children:jsx("p",{children:"Settings menu"})})]})})}),jsxs(f$2,{align:"start",className:"fk:w-60",side:"right",children:[jsx(h$1,{asChild:true,children:jsxs(Link$1,{to:`https://flexkit.io/dashboard/*/${c}`,target:"_blank",rel:"noopener noreferrer",children:[jsx(Wrench,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Manage project"})]})}),jsx(m,{}),jsx(h$1,{disabled:t.isCurrent,onSelect:()=>{t.isCurrent;},children:t.isCurrent?jsxs(Fragment,{children:[jsx(PackageCheck,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsxs("span",{children:["Version ",t.current]})]}):jsxs(Fragment,{children:[jsx(PackageX,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsxs("span",{children:["Version ",t.current,".",jsx("br",{}),"Upgrade to ",t.latest]})]})})]})]})]})})}var cl={"navbar.logo":lazy(()=>import('./logo-GCKKZP62.js').then(({Logo:e})=>({default:e}))),"navbar.projectSelector":lazy(()=>import('./project-selector-UDFHGEZI.js').then(({ProjectSelector:e})=>({default:e}))),"navbar.search":lazy(()=>import('./search-NEEMYDKE.js').then(({Search:e})=>({default:e}))),"navbar.userNav":lazy(()=>import('./user-nav-QJ3GVNLW.js').then(({UserNav:e})=>({default:e}))),"formFields.switch":lazy(()=>import('./switch-FBS75HI4.js').then(({Switch:e})=>({default:e}))),"formFields.text":lazy(()=>import('./text-RZOXKHWE.js').then(({Text:e})=>({default:e}))),"formFields.textarea":lazy(()=>import('./textarea-OUJM7E6O.js').then(({Textarea:e})=>({default:e}))),"previewFields.boolean":lazy(()=>import('./boolean-MTD44LXP.js').then(({Boolean:e})=>({default:e}))),"previewFields.asset":lazy(()=>import('./asset-IVSDPVJK.js').then(({Asset:e})=>({default:e}))),"previewFields.text":lazy(()=>import('./text-FIBUDNGR.js').then(({Text:e})=>({default:e}))),"previewFields.editor":lazy(()=>import('./editor-NFRMIYVJ.js').then(({Editor:e})=>({default:e}))),"previewFields.datetime":lazy(()=>import('./datetime-VZJ7XF33.js').then(({DateTime:e})=>({default:e})))};function uo(e){let{getContributionPointConfig:t}=d(),[o,...n]=e.split("."),r=cl[e],i=t(o,n);return i?.length>0?i[0]?.component:r}function yi({projectId:e,projects:t}){let{resolvedTheme:o}=b$c(),n=uo("navbar.logo"),r=uo("navbar.projectSelector"),i=uo("navbar.search"),a=uo("navbar.userNav"),s=t.find(d=>d.projectId===e)??t[0],{basePath:f,schema:u}=s,c=useNavigate();function l(d){startTransition(()=>{c(b$b(f,e,"desk","list",d.entityNamePlural)+`?id=${d.entityId}`);});}return jsxs("div",{className:"fk:flex fk:basis-14 fk:min-h-[3.5rem] fk:px-3 fk:gap-x-4 fk:border-b fk:border-border fk:z-20",children:[jsx(Suspense,{fallback:null,children:jsx(n,{theme:o,title:"Flexkit Studio"})}),jsxs("div",{className:"fk:flex fk:grow fk:shrink fk:items-center fk:gap-x-4 px-4",children:[jsx(Suspense,{fallback:null,children:jsx(r,{projectId:e,projects:t})}),jsx(Suspense,{fallback:null,children:jsx(i,{onSelect:l,projectId:e,schema:u})})]}),jsx("div",{className:"fk:flex fk:items-center",children:jsx(Suspense,{fallback:null,children:jsx(a,{projectId:e})})})]})}function vi({version:e}){let{contributions:t,projects:o}=d(),[n,r]=b$a(),{projectId:i}=useParams(),a=find(propEq(i??"","projectId"))(o);if(!a)throw new Xo("PROJECT_NOT_FOUND");let{scopes:s}=a,{apps:f}=t,u=d$2(),c=useLocation();return useEffect(()=>{if(s){let l=s.find(m=>m.isDefault)||s[0],d="";typeof localStorage<"u"&&(d=localStorage.getItem(`${a$h}${i}`)??""),u({type:"setScope",payload:{projectId:i,scope:d||l.name}});}},[c]),n?jsx(Jo,{}):r.user?.id?jsxs(Fragment,{children:[jsxs("div",{className:"fk:flex fk:flex-col fk:h-full flexkit-studio","vaul-drawer-wrapper":"",children:[jsx(yi,{projectId:i??"",projects:o}),jsxs("div",{className:"fk:flex fk:h-full fk:max-h-[calc(100%-3.5rem)] fk:border-t fk:border-border fk:grow shrink",children:[jsx(ki,{apps:f,version:e}),jsx(Outlet,{})]})]}),jsx(f$3,{})]}):jsx(di,{projectId:i??""})}function Ci(e){return e?"cause"in e:false}function At(e){if(!e)return null;if(ServerError.is(e))return e;if(Ci(e)){let t=e.cause;if(ServerError.is(t))return t}return null}function xi(e){if(!e||typeof e!="object")return null;let{message:t}=e;return typeof t=="string"?t:null}function St(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Wo(e){if(!e)return null;let t=bl(e);return t.length===0?null:["The deployed schema is out of sync with your local Flexkit schema.","Run `flexkit deploy` using the CLI to apply your latest schema changes.",...t.map(o=>`- ${o}`)].join(`
1
+ import'./index.css';import {a as a$2}from'./chunk-OXTER7HO.js';import {a as a$1}from'./chunk-JHDZP6RC.js';import {a as a$a}from'./chunk-D4XLXU2H.js';import {a as a$b}from'./chunk-V2UTZEJQ.js';import {a as a$9}from'./chunk-4KGH7PU7.js';import {a,b as b$7}from'./chunk-7NQ6QCJD.js';import {a as a$c}from'./chunk-SXZZFHMJ.js';import {g as g$3,h as h$2,i as i$1,l,m as m$1,j,n,f as f$3,c as c$7,d as d$3}from'./chunk-RVGMKQPC.js';import {a as a$6}from'./chunk-FPK7J4BP.js';import'./chunk-PEYW7XOU.js';import {a as a$7,b as b$5,c as c$4,e as e$3}from'./chunk-5CKMFBWH.js';import {a as a$5,d as d$1,c as c$1,e as e$1,b as b$1,f as f$1,g as g$1}from'./chunk-7WR64NTK.js';import {d as d$2,c as c$2,b as b$9,a as a$h,e as e$5}from'./chunk-I4C65MUI.js';export{c as useAppContext,d as useAppDispatch,e as useSearch}from'./chunk-I4C65MUI.js';import {v,b as b$6,m as m$2,o,p,r,t,s,q}from'./chunk-ND3OZVR5.js';import {b as b$a,a as a$i}from'./chunk-7XBIC5RC.js';export{b as useAuth}from'./chunk-7XBIC5RC.js';import {c as c$3,e as e$2,f as f$2,g as g$2,h as h$1,m,a as a$g,l as l$1,i as i$2,b as b$c,r as r$1}from'./chunk-YXRNHQPG.js';import {d,a as a$e,b as b$8,e as e$4,c as c$6}from'./chunk-6YHHL4XI.js';export{a as assetSchema,b as tagSchema,d as useConfig}from'./chunk-6YHHL4XI.js';import {b as b$4,c as c$5,a as a$k}from'./chunk-ZBV4BY36.js';export{b as IMAGES_BASE_URL}from'./chunk-ZBV4BY36.js';import {b as b$3,a as a$8}from'./chunk-EYGOJ2ZN.js';import {a as a$f,b as b$b}from'./chunk-WIUPQHZ5.js';import {a as a$3}from'./chunk-V7UK6RMM.js';import {b as b$2,a as a$d}from'./chunk-Z5CZVKD4.js';export{b as DefaultValueSwitch}from'./chunk-Z5CZVKD4.js';import'./chunk-6MOUYNN4.js';import {b,c,e,f,h,g,i,a as a$j}from'./chunk-53TUQIKJ.js';import {a as a$4}from'./chunk-O2QMYUPS.js';import*as rn from'react';import {lazy,createContext,memo,forwardRef,useMemo,useImperativeHandle,useEffect,createElement,useId,useState,useRef,useCallback,useContext,Fragment as Fragment$1,useReducer,Suspense,startTransition}from'react';import {debug}from'debug';import {useParams,createBrowserRouter,RouterProvider,useRouteError,useLocation,Outlet,useNavigate,Navigate,NavLink,Link as Link$1,isRouteErrorResponse}from'react-router-dom';export{Outlet,useLocation,useParams}from'react-router-dom';import {find,propEq,equals,uniqBy,prop,map,filter,uniq,omit,pick,toPairs,props}from'ramda';import Bs,{useSWRConfig}from'swr';import {Text,CheckSquare,Heading1,Heading2,Heading3,List,ListOrdered,TextQuote,Code,ImageIcon,Youtube,Twitter,AlertTriangle,Image as Image$1,Upload,Search,File,Ellipsis,Download,Copy,RefreshCwOff,Maximize2,X,Calendar,ChevronsUpDown,Link,TextIcon,ChevronDown,Check,Trash,SigmaIcon,BoldIcon,ItalicIcon,UnderlineIcon,StrikethroughIcon,CodeIcon,ChevronLeftIcon,ChevronRightIcon,ChevronDownIcon,ArrowUp,ArrowDown,TrashIcon,RefreshCcwDot,CheckCheck,ArrowDownWideNarrow,WrapText,StepForward,Trash2,AlertCircle,CirclePlus,Pencil,Settings2,Loader2,MoreHorizontal,Settings,Wrench,PackageCheck,PackageX,Moon,Sun,Monitor,Mail,LoaderCircle}from'lucide-react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useForm}from'react-hook-form';import*as Qo from'zod';import {z}from'zod';import {zodResolver}from'@hookform/resolvers/zod';import {cva}from'class-variance-authority';import {gql,ApolloClient,InMemoryCache,defaultDataIdFromObject,from,HttpLink}from'@apollo/client';export{gql}from'@apollo/client';import {useLazyQuery,useApolloClient,useMutation,useQuery,ApolloProvider}from'@apollo/client/react';import {ErrorLink}from'@apollo/client/link/error';import {ServerError,CombinedGraphQLErrors,CombinedProtocolErrors}from'@apollo/client/errors';import {Collapsible,Popover,AlertDialog}from'radix-ui';import {toast}from'sonner';import {v4}from'uuid';import {Drawer}from'vaul';import Qn from'bytes';import {defaultStyles,FileIcon}from'react-file-icon';import {format}from'date-fns';import {getDefaultClassNames,DayPicker}from'react-day-picker';import {createSuggestionItems,Command,renderItems,EditorRoot,EditorContent,EditorCommand,EditorCommandEmpty,EditorCommandList,EditorCommandItem,ImageResizer,handleImageDrop,handleImagePaste,handleCommandNavigation,useEditor,removeAIHighlight,EditorBubble,EditorBubbleItem,addAIHighlight,getPrevText}from'novel';import {useDebouncedCallback}from'use-debounce';import {useCompletion}from'@ai-sdk/react';import md from'react-markdown';import {useReactTable,getFacetedUniqueValues,getFacetedRowModel,getSortedRowModel,getPaginationRowModel,getFilteredRowModel,getCoreRowModel,flexRender}from'@tanstack/react-table';export{flexRender,getCoreRowModel,getFacetedRowModel,getFacetedUniqueValues,getFilteredRowModel,getPaginationRowModel,getSortedRowModel,useReactTable}from'@tanstack/react-table';import {useVirtualizer}from'@tanstack/react-virtual';export{useVirtualizer}from'@tanstack/react-virtual';function qo(){let[e,t]=useState(false),{theme:o,setTheme:n}=b$c();return useEffect(()=>{t(true);},[]),e?jsxs(c$7,{size:"sm",type:"single",value:o,children:[jsx(d$3,{"aria-label":"Set dark mode",onClick:()=>{n("dark");},value:"dark",children:jsx(Moon,{className:"fk:h-4 fk:w-4"})}),jsx(d$3,{"aria-label":"Set light mode",onClick:()=>{n("light");},value:"light",children:jsx(Sun,{className:"fk:h-4 fk:w-4"})}),jsx(d$3,{"aria-label":"Set system mode",onClick:()=>{n("system");},value:"system",children:jsx(Monitor,{className:"fk:h-4 fk:w-4"})})]}):null}function Jo(){let{resolvedTheme:e}=b$c();return jsx("div",{className:"fk:flex fk:w-full fk:h-full fk:justify-center fk:items-center fk:bg-background",children:jsxs("div",{className:"fk:flex fk:flex-col fk:items-center",children:[e==="dark"?jsxs("svg",{className:"fk:h-8 fk:w-8 fk:animate-bounce",fill:"none",viewBox:"0 0 48 48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"#020817"}),jsx("path",{d:"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z",fill:"white"})]}):jsxs("svg",{className:"fk:h-8 fk:w-8 fk:animate-bounce",fill:"none",viewBox:"0 0 48 48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"white"}),jsx("path",{d:"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z",fill:"#020817"})]}),jsx("div",{className:"fk:text-foreground fk:text-center fk:mt-4 fk:animate-pulse",children:"Loading..."})]})})}var Os=cva("fk:relative fk:grid fk:w-full fk:grid-cols-[0_1fr] fk:items-start fk:gap-y-0.5 fk:rounded-lg fk:border fk:px-4 fk:py-3 fk:text-sm fk:has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] fk:has-[>svg]:gap-x-3 fk:[&>svg]:size-4 fk:[&>svg]:translate-y-0.5 fk:[&>svg]:text-current",{variants:{variant:{default:"fk:bg-card fk:text-card-foreground",destructive:"fk:bg-card fk:text-destructive fk:*:data-[slot=alert-description]:text-destructive/90 fk:[&>svg]:text-current"}},defaultVariants:{variant:"default"}});function re({className:e,variant:t,...o}){return jsx("div",{"data-slot":"alert",role:"alert",className:a$4(Os({variant:t}),e),...o})}function Te({className:e,...t}){return jsx("div",{"data-slot":"alert-title",className:a$4("fk:col-start-2 fk:line-clamp-1 fk:min-h-4 fk:font-medium fk:tracking-tight",e),...t})}function ie({className:e,...t}){return jsx("div",{"data-slot":"alert-description",className:a$4("fk:col-start-2 fk:grid fk:justify-items-start fk:gap-1 fk:text-sm fk:text-muted-foreground fk:[&_p]:leading-relaxed",e),...t})}var Js=Qo.object({email:Qo.string().email({message:"Please enter a valid email address"})});function Nn({projectId:e$1,setIsEmailLogin:t}){let[o,n]=useState(false),[r,i$1]=useState(false),{mutate:a}=useSWRConfig(),s=useForm({resolver:zodResolver(Js),defaultValues:{email:""}}),f=new URL(c$5(e$1).loginOtpSend,a$k),{data:u,error:c$1,isLoading:l}=Bs(r?f.href:null,h=>fetch(h,{method:"POST",mode:"cors",body:JSON.stringify({email:s.getValues("email")})}).then(y=>y.json()),{revalidateIfStale:false,revalidateOnFocus:false,revalidateOnReconnect:false,shouldRetryOnError:false}),d=u&&"error"in u&&u.error.code,m=u&&"token"in u,g$1=u&&"token"in u?u.token:"";useEffect(()=>{if(!m)return;let h=0,y=setInterval(()=>{if(h>100){clearInterval(y),n(true);return}let v=new URL(c$5(e$1).loginOtpConfirm,a$k),x="/api/flexkit/set-token";fetch(`${v.href}?email=${s.getValues("email")}&token=${g$1}`).then(A=>{A.status===200&&A.json().then(S=>{fetch(x,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sid:S.sid})}).then(()=>{window.location.reload();}).catch(()=>{});}).catch(()=>{});}).catch(()=>{}),h++;},3e3);return ()=>{clearInterval(y);}},[s,m,e$1,g$1]);function p(){n(false),i$1(true),a(f.href);}return jsx("div",{className:"fk:w-full",children:m?jsx(re,{variant:"success",children:jsxs(ie,{children:["Keep this window open and in a new tab open the link we just sent to:"," ",jsx("strong",{children:s.getValues("email")})," (",jsx(b$3,{className:"fk:p-0 fk:hover:underline fk:dark:text-background",onClick:()=>{window.location.reload();},variant:"link",children:"undo"}),")"]})}):jsx(b,{...s,children:jsxs("form",{onSubmit:h=>{s.handleSubmit(p)(h);},className:"fk:w-full fk:space-y-3 fk:mb-10",children:[d==="not_exists"&&jsx(re,{variant:"destructive",children:jsxs(ie,{children:["There is no Flexkit account associated with this email address."," ",jsx("a",{className:"fk:text-black/90 fk:dark:text-white/90 fk:underline",href:`https://flexkit.io/signup/email?email=${s.getValues("email")}`,children:"Sign up?"})]})}),d==="unknown_error"||c$1?jsx(re,{variant:"destructive",children:jsxs(ie,{children:["There was an unknown error, please"," ",jsx(b$3,{className:"fk:p-0 fk:hover:underline",onClick:()=>{window.location.reload();},variant:"link",children:"Try again"}),"."," "]})}):null,o?jsx(re,{variant:"destructive",children:jsxs(ie,{children:["The email verification link may have expired. Please"," ",jsx(b$3,{className:"fk:p-0 fk:hover:underline",onClick:()=>{window.location.reload();},variant:"link",children:"try again"}),"."]})}):null,jsx(c,{control:s.control,defaultValue:"",name:"email",render:({field:h})=>jsxs(e,{children:[jsx(g,{children:jsx(a$6,{"aria-label":"Email Address",autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",className:"w-full",placeholder:"Email Address",spellCheck:false,type:"email",...h})}),jsx(i,{})]})}),jsxs(b$3,{"aria-disabled":l,className:"fk:w-full",type:"submit",disabled:!!l,children:[l?jsx(Loader2,{className:"fk:h-5 fk:w-5 fk:mr-2 fk:animate-spin"}):jsx(Mail,{className:"fk:w-5 fk:h-5 fk:mr-2"}),"Continue with Email"]}),jsx(b$3,{className:"fk:w-full fk:text-link",onClick:()=>{t(false);},variant:"link",children:"\u2190 Other Login options"})]})})})}function di({projectId:e}){let{projects:t}=d(),[o,n]=useState(t.find(p=>p.projectId===e)??t[0]),[r,i]=useState(false),{data:a,error:s,isLoading:f}=Bs(c$5(e).authProviders,p=>fetch(p,{mode:"cors"}).then(h=>h.json())),[u,c]=b$a(),l=new Date().getFullYear(),d$2=useLocation(),m=d$2.state?.from?.pathname??d$2.pathname,g=m.includes(o.projectId)?`${location.origin}${m}`:`${location.origin}${b$b(o.basePath,o.projectId)}`;if(s)throw new Error("Error fetching auth providers");return f||u||!a?jsx(Jo,{}):c.user?.id?jsx(Navigate,{replace:true,state:{from:d$2},to:o.basePath}):jsxs(Fragment,{children:[jsxs("div",{className:"fk:container fk:relative fk:h-[calc(100vh-3rem)] fk:flex fk:items-center fk:justify-center fk:lg:px-0",children:[jsx("div",{className:"fk:w-full fk:lg:p-8",children:jsxs("div",{className:"fk:mx-auto fk:flex fk:flex-col fk:justify-center fk:sm:w-[350px]",children:[jsx("h1",{className:"fk:mb-4 fk:text-2xl fk:text-center fk:font-medium fk:tracking-tight",children:"Login to Flexkit Studio"}),t.length>1?jsxs("div",{className:"fk:flex-col fk:space-y-2 fk:mb-3",children:[jsx(a$j,{className:"fk:text-sm fk:font-normal fk:text-left fk:text-muted-foreground",htmlFor:"project",children:"Select project"}),jsxs(a$5,{defaultValue:o.projectId,onValueChange:p=>{n(t.find(h=>h.projectId===p)??t[0]);},children:[jsx(d$1,{className:"fk:mb-4 fk:w-full fk:h-9 fk:py-1",id:"project",children:jsx(c$1,{"aria-label":o.title,children:o.title})}),jsx(e$1,{children:t.map(p=>jsx(g$1,{value:p.projectId,children:p.title},p.projectId))})]})]}):null,r?jsx(Nn,{projectId:e,setIsEmailLogin:i}):jsxs(Fragment,{children:[jsx("p",{className:"fk:mt-2 fk:mb-2 fk:text-sm fk:text-left fk:text-muted-foreground",children:"Choose login provider"}),jsxs("div",{className:"fk:flex fk:flex-col fk:space-y-6",children:[a.providers.map(p=>jsx(b$3,{asChild:true,className:`fk:${p.button.color} fk:${p.button.backgroundColor} fk:hover:${p.button.colorHover} fk:hover:${p.button.backgroundColorHover}`,type:"button",variant:p.button.variant,children:jsxs("a",{href:Ws({url:p.url,projectId:o.projectId,basePath:"/api/flexkit/get-token",fromPath:g}),children:[p.button.iconUrl?jsx("img",{alt:p.title,className:"fk:w-[20px] fk:h-[20px] fk:mr-2",src:p.button.iconUrl}):null,p.title]})},p.name)),jsx(b$3,{className:"fk:mt-4! fk:text-sm fk:text-center fk:text-link",onClick:()=>{i(true);},variant:"link",children:"Continue with Email \u2192"})]})]}),jsxs("div",{className:"fk:flex fk:flex-col fk:items-center fk:pt-8",children:[jsxs("svg",{className:"fk:w-28",fill:"none",viewBox:"0 0 191 42",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M59.2923 38.5263H52.7518V19.433H49.5653V12.9332H52.7518V11.7145C52.7518 10.1373 53.0471 8.65569 53.638 7.26967C54.245 5.88368 55.0677 4.68089 56.1058 3.66131C57.16 2.62579 58.3817 1.81331 59.7713 1.22386C61.1609 0.618477 62.6464 0.315788 64.2276 0.315788H69.1388V6.81564H64.2276C63.5247 6.81564 62.8698 6.9431 62.2628 7.19798C61.6719 7.43696 61.1528 7.77948 60.7057 8.22554C60.2746 8.65569 59.9311 9.17344 59.6756 9.77882C59.4201 10.3683 59.2923 11.0135 59.2923 11.7145V12.9332H67.3182V19.433H59.2923V38.5263Z",fill:"currentColor"}),jsx("path",{d:"M78.6099 38.5263H71.9802V0.315788H78.6099V38.5263Z",fill:"currentColor"}),jsx("path",{d:"M93.8922 32.3923C94.146 32.4723 94.3998 32.5283 94.6536 32.5604C94.9074 32.5765 95.1615 32.5842 95.4153 32.5842C96.0497 32.5842 96.6606 32.4964 97.2476 32.3203C97.8346 32.1445 98.3817 31.8966 98.8896 31.5768C99.4131 31.2409 99.8732 30.841 100.27 30.3772C100.682 29.8973 101.015 29.3695 101.269 28.7937L106.029 33.616C105.426 34.4797 104.728 35.2553 103.934 35.9432C103.157 36.6308 102.308 37.2145 101.388 37.6944C100.484 38.1743 99.5241 38.534 98.5089 38.7741C97.5094 39.03 96.4782 39.1579 95.4153 39.1579C93.6225 39.1579 91.933 38.822 90.3465 38.1502C88.7759 37.4784 87.3957 36.5427 86.2058 35.3434C85.0319 34.1438 84.1038 32.7202 83.4218 31.0729C82.7395 29.4095 82.3983 27.5862 82.3983 25.6029C82.3983 23.5717 82.7395 21.7164 83.4218 20.037C84.1038 18.3576 85.0319 16.9262 86.2058 15.7426C87.3957 14.5591 88.7759 13.6394 90.3465 12.9836C91.933 12.3279 93.6225 12 95.4153 12C96.4782 12 97.5173 12.128 98.5325 12.3839C99.548 12.6398 100.508 13.0076 101.412 13.4875C102.332 13.9673 103.189 14.5591 103.982 15.2628C104.775 15.9505 105.473 16.7263 106.076 17.5899L93.8922 32.3923ZM97.2237 18.8854C96.9224 18.7735 96.6208 18.7015 96.3195 18.6695C96.0338 18.6375 95.7325 18.6215 95.4153 18.6215C94.5267 18.6215 93.6859 18.7895 92.8927 19.1253C92.1154 19.4452 91.4334 19.9091 90.8461 20.5168C90.2751 21.1246 89.823 21.8603 89.4898 22.724C89.1566 23.5717 88.9902 24.5313 88.9902 25.6029C88.9902 25.8428 88.9981 26.1147 89.0138 26.4186C89.0457 26.7225 89.0852 27.0344 89.133 27.3543C89.1965 27.6582 89.2679 27.9541 89.347 28.2419C89.4263 28.5298 89.5296 28.7858 89.6565 29.0097L97.2237 18.8854Z",fill:"currentColor"}),jsx("path",{d:"M132.911 38.5263H124.926L119.833 30.6401L114.693 38.5263H106.707L116.055 25.3265L106.707 12.6316H114.693L119.833 20.0129L124.926 12.6316H132.911L123.539 25.3265L132.911 38.5263Z",fill:"currentColor"}),jsx("path",{d:"M143.002 38.5263H136.383V0.315788H143.002V24.0898L151.557 12.9976H159.114L150.57 23.6485L159.114 38.5263H151.557L146.335 29.2367L143.002 34.0243V38.5263Z",fill:"currentColor"}),jsx("path",{d:"M169.848 5.93416C169.848 6.54038 169.727 7.10672 169.486 7.63317C169.262 8.15962 168.949 8.62224 168.547 9.02108C168.146 9.40396 167.672 9.71505 167.126 9.95433C166.596 10.1777 166.026 10.2893 165.416 10.2893C164.806 10.2893 164.228 10.1777 163.682 9.95433C163.152 9.71505 162.686 9.40396 162.285 9.02108C161.9 8.62224 161.586 8.15962 161.346 7.63317C161.121 7.10672 161.008 6.54038 161.008 5.93416C161.008 5.34388 161.121 4.78553 161.346 4.25908C161.586 3.71666 161.9 3.25403 162.285 2.87115C162.686 2.47232 163.152 2.16124 163.682 1.93789C164.228 1.6986 164.806 1.57895 165.416 1.57895C166.026 1.57895 166.596 1.6986 167.126 1.93789C167.672 2.16124 168.146 2.47232 168.547 2.87115C168.949 3.25403 169.262 3.71666 169.486 4.25908C169.727 4.78553 169.848 5.34388 169.848 5.93416ZM168.716 38.5263H162.092V12.8977H168.716V38.5263Z",fill:"currentColor"}),jsx("path",{d:"M186.938 38.5263C185.368 38.5263 183.892 38.2319 182.512 37.6429C181.131 37.0378 179.918 36.2178 178.871 35.183C177.839 34.1323 177.022 32.9145 176.419 31.5294C175.832 30.1442 175.539 28.6635 175.539 27.0874V19.4932H172.374V12.9976H175.539V0.315788H182.012V12.9976H189.106V19.4932H182.012V27.0874C182.012 27.772 182.139 28.4168 182.393 29.0218C182.646 29.6108 182.996 30.1282 183.44 30.574C183.884 31.0198 184.408 31.378 185.01 31.6487C185.613 31.9034 186.256 32.0308 186.938 32.0308H189.106V38.5263H186.938Z",fill:"currentColor"}),jsx("path",{d:"M19.8893 2.21053C34.8062 2.21053 39.7785 7.18421 39.7785 22.1053C39.7785 37.0263 34.8062 42 19.8893 42C4.97231 42 0 37.0263 0 22.1053C0 7.18421 4.97231 2.21053 19.8893 2.21053ZM14.7093 10.1053H7.26116L15.9804 21.9654L7.26116 34.2973H14.7093L17.4445 30.1161V14.0271L14.7093 10.1053ZM32.285 10.1053H24.8237L21.7835 14.4979V29.5995L24.8237 34.2973H32.285L23.528 21.9654L32.285 10.1053Z",fill:"currentColor"})]}),jsxs("ul",{className:"fk:flex fk:w-full fk:mt-4 fk:justify-center fk:text-xs fk:text-muted-foreground",children:[jsx("li",{className:"fk:pr-6 fk:after:content-['|'] fk:after:pl-6",children:jsx("a",{className:"fk:underline-offset-4 fk:hover:text-primary",href:"https://www.flexkit.io",children:"flexkit.io"})}),jsx("li",{className:"fk:pr-6 fk:after:content-['|'] fk:after:pl-6",children:jsx("a",{className:"fk:underline-offset-4 fk:hover:text-primary",href:"https://www.flexkit.io/docs",children:"Docs"})}),jsx("li",{className:"",children:jsx("a",{className:"fk:underline-offset-4 fk:hover:text-primary",href:"https://www.flexkit.io/privacy-policy",children:"Privacy Policy"})})]})]})]})}),jsx("div",{className:"fk:hidden fk:text-white! fk:bg-bitbucket! fk:hover:bg-bitbucket-hover!"}),jsx("div",{className:"fk:hidden fk:bg-github! fk:hover:bg-github-hover!"}),jsx("div",{className:"fk:hidden fk:text-muted-foreground! fk:bg-white! fk:hover:bg-accent!"})]}),jsx("div",{className:"fk:flex fk:justify-center fk:items-center fk:h-12 fk:text-xs fk:text-muted-foreground fk:border-t fk:border-accent",children:jsxs("div",{className:"fk:container fk:flex",children:[jsxs("div",{className:"fk:flex fk:items-center fk:mr-auto",children:[jsxs("svg",{className:"fk:h-5 fk:w-5 fk:mr-3 fk:text-black fk:dark:text-white",fill:"none",height:"48",viewBox:"0 0 48 48",width:"48",xmlns:"http://www.w3.org/2000/svg",children:[jsx("path",{d:"M7 8H41V40H7V8Z",fill:"none"}),jsx("path",{d:"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z",fill:"currentColor"})]}),jsxs("p",{className:"fk:flex fk:items-center",children:["\xA9 ",l]})]}),jsx(qo,{})]})})]})}function Ws({projectId:e,url:t,basePath:o,fromPath:n}){let r=new URLSearchParams;return r.set("origin",`${location.origin}${o}`),r.set("projectId",e),r.set("redirect",n),`${t}?${r.toString()}`}var Zs=["PROJECT_PAUSED","PROJECT_NOT_FOUND","READ_ONLY_MODE","UNKNOWN_ERROR"],Ys={PROJECT_PAUSED:"This project has been paused.",PROJECT_NOT_FOUND:"The requested project ID was not found",READ_ONLY_MODE:"This project is currently in read only mode and changes cannot be saved",UNKNOWN_ERROR:"Sorry, an unexpected error has occurred. Please try again"},Xo=class e extends Error{code;constructor(t,o){super(o??Ys[t]),this.name="FlexkitError",this.code=t,Object.setPrototypeOf&&Object.setPrototypeOf(this,new.target.prototype);}static from(t,o){return new e(t,o)}};function Pn(e){if(!(e instanceof Error))return false;let t=e.code;return typeof t!="string"?false:Zs.includes(t)}function ui(e){if(Pn(e))return e.code}function ki({apps:e,version:t}){let[o,n]=useState(0),[r,i]=useState(e),[a,s]=useState([]),f=useRef(null),u=useLocation(),{projectId:c}=useParams(),l=e.find(m=>u.pathname.includes(`/${c}/${m.name}`))?.name,d=e.find(m=>u.pathname.includes(`/${c}/${m.name}`))?.name??e[0]?.name;return useEffect(()=>{if(f.current===null)return;let m=new ResizeObserver(()=>{n(f.current?.offsetHeight??0);});return m.observe(f.current),function(){m.disconnect();}},[l]),useEffect(()=>{let m=Math.floor(o/48)-2,g=e.slice(0,m);if(!g.find(h=>h.name===d)){let h=e.find(y=>y.name===d);g.pop(),h&&g.push(h);}let p=e.filter(h=>!g.includes(h));i(g),s(p);},[e,d,o]),l===void 0&&d?jsx(Navigate,{to:`${u.pathname}/${d}`}):jsx(a$7,{children:jsxs("div",{className:"fk:flex fk:flex-col fk:h-full fk:w-12 fk:bg-muted",ref:f,children:[jsxs("div",{className:"fk:grow",children:[jsx("div",{className:"fk:grid fk:grid-cols-1 fk:w-12 fk:h-auto",children:r.map(m=>jsx(b$3,{asChild:true,className:"fk:h-12 fk:w-12",variant:"ghost",children:jsxs(b$5,{children:[jsx(c$4,{asChild:true,className:"fk:h-12 fk:p-2 fk:rounded-none fk:border-2 fk:border-transparent! fk:data-[state=active]:border-l-foreground! fk:focus-visible:outline-hidden fk:focus-visible:ring-0 fk:focus-visible:ring-offset-0 fk:focus-visible:border-2! fk:focus-visible:border-ring! fk:focus-visible:rounded-xs",children:jsx(NavLink,{className:"fk:text-muted-foreground fk:aria-[current]:text-foreground fk:aria-[current]:bg-background fk:aria-[current]:border-l-white!",to:m.name,children:m.icon})}),jsx(e$3,{side:"right",children:jsx("p",{children:m.title})})]})},m.name))}),a.length>0&&jsxs(c$3,{children:[jsx(b$5,{children:jsx(e$2,{asChild:true,children:jsxs(c$4,{className:"fk:flex fk:justify-center fk:items-center fk:h-12 fk:w-12 p-0 fk:data-[state=open]:bg-muted fk:text-muted-foreground fk:transition-colors fk:focus-visible:outline-hidden fk:focus-visible:border-2 fk:focus-visible:border-ring fk:focus-visible:rounded-xs",children:[jsx(MoreHorizontal,{className:"fk:w-5 fk:h-5",strokeWidth:1.5}),jsx("span",{className:"fk:sr-only",children:"View additional apps"}),jsx(e$3,{side:"right",children:jsx("p",{children:"Additional apps"})})]})})}),jsx(f$2,{align:"start",className:"fk:w-56",side:"right",children:a.map(m=>jsx(h$1,{asChild:true,children:jsx(NavLink,{to:m.name,children:m.title})},m.name))})]})]}),jsxs(c$3,{children:[jsx(b$5,{children:jsx(e$2,{asChild:true,children:jsxs(c$4,{className:"fk:flex fk:justify-center fk:items-center fk:h-12 fk:w-12 fk:p-0 fk:data-[state=open]:bg-muted fk:text-muted-foreground fk:transition-colors fk:focus-visible:outline-hidden fk:focus-visible:border-2 fk:focus-visible:border-ring fk:focus-visible:rounded-xs",children:[jsx(Settings,{className:"fk:w-5 fk:h-5",strokeWidth:1.5}),jsx("span",{className:"fk:sr-only",children:"Settings menu"}),jsx(e$3,{side:"right",children:jsx("p",{children:"Settings menu"})})]})})}),jsxs(f$2,{align:"start",className:"fk:w-60",side:"right",children:[jsx(h$1,{asChild:true,children:jsxs(Link$1,{to:`https://flexkit.io/dashboard/*/${c}`,target:"_blank",rel:"noopener noreferrer",children:[jsx(Wrench,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Manage project"})]})}),jsx(m,{}),jsx(h$1,{disabled:t.isCurrent,onSelect:()=>{t.isCurrent;},children:t.isCurrent?jsxs(Fragment,{children:[jsx(PackageCheck,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsxs("span",{children:["Version ",t.current]})]}):jsxs(Fragment,{children:[jsx(PackageX,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsxs("span",{children:["Version ",t.current,".",jsx("br",{}),"Upgrade to ",t.latest]})]})})]})]})]})})}var cl={"navbar.logo":lazy(()=>import('./logo-GCKKZP62.js').then(({Logo:e})=>({default:e}))),"navbar.projectSelector":lazy(()=>import('./project-selector-UDFHGEZI.js').then(({ProjectSelector:e})=>({default:e}))),"navbar.search":lazy(()=>import('./search-MG2W4GGN.js').then(({Search:e})=>({default:e}))),"navbar.userNav":lazy(()=>import('./user-nav-E7MLJ36Y.js').then(({UserNav:e})=>({default:e}))),"formFields.switch":lazy(()=>import('./switch-FBS75HI4.js').then(({Switch:e})=>({default:e}))),"formFields.text":lazy(()=>import('./text-RZOXKHWE.js').then(({Text:e})=>({default:e}))),"formFields.textarea":lazy(()=>import('./textarea-OUJM7E6O.js').then(({Textarea:e})=>({default:e}))),"previewFields.boolean":lazy(()=>import('./boolean-MTD44LXP.js').then(({Boolean:e})=>({default:e}))),"previewFields.asset":lazy(()=>import('./asset-HOJ43RVO.js').then(({Asset:e})=>({default:e}))),"previewFields.text":lazy(()=>import('./text-FIBUDNGR.js').then(({Text:e})=>({default:e}))),"previewFields.editor":lazy(()=>import('./editor-NFRMIYVJ.js').then(({Editor:e})=>({default:e}))),"previewFields.datetime":lazy(()=>import('./datetime-VZJ7XF33.js').then(({DateTime:e})=>({default:e})))};function uo(e){let{getContributionPointConfig:t}=d(),[o,...n]=e.split("."),r=cl[e],i=t(o,n);return i?.length>0?i[0]?.component:r}function yi({projectId:e,projects:t}){let{resolvedTheme:o}=b$c(),n=uo("navbar.logo"),r=uo("navbar.projectSelector"),i=uo("navbar.search"),a=uo("navbar.userNav"),s=t.find(d=>d.projectId===e)??t[0],{basePath:f,schema:u}=s,c=useNavigate();function l(d){startTransition(()=>{c(b$b(f,e,"desk","list",d.entityNamePlural)+`?id=${d.entityId}`);});}return jsxs("div",{className:"fk:flex fk:basis-14 fk:min-h-[3.5rem] fk:px-3 fk:gap-x-4 fk:border-b fk:border-border fk:z-20",children:[jsx(Suspense,{fallback:null,children:jsx(n,{theme:o,title:"Flexkit Studio"})}),jsxs("div",{className:"fk:flex fk:grow fk:shrink fk:items-center fk:gap-x-4 px-4",children:[jsx(Suspense,{fallback:null,children:jsx(r,{projectId:e,projects:t})}),jsx(Suspense,{fallback:null,children:jsx(i,{onSelect:l,projectId:e,schema:u})})]}),jsx("div",{className:"fk:flex fk:items-center",children:jsx(Suspense,{fallback:null,children:jsx(a,{projectId:e})})})]})}function vi({version:e}){let{contributions:t,projects:o}=d(),[n,r]=b$a(),{projectId:i}=useParams(),a=find(propEq(i??"","projectId"))(o);if(!a)throw new Xo("PROJECT_NOT_FOUND");let{scopes:s}=a,{apps:f}=t,u=d$2(),c=useLocation();return useEffect(()=>{if(s){let l=s.find(m=>m.isDefault)||s[0],d="";typeof localStorage<"u"&&(d=localStorage.getItem(`${a$h}${i}`)??""),u({type:"setScope",payload:{projectId:i,scope:d||l.name}});}},[c]),n?jsx(Jo,{}):r.user?.id?jsxs(Fragment,{children:[jsxs("div",{className:"fk:flex fk:flex-col fk:h-full flexkit-studio","vaul-drawer-wrapper":"",children:[jsx(yi,{projectId:i??"",projects:o}),jsxs("div",{className:"fk:flex fk:h-full fk:max-h-[calc(100%-3.5rem)] fk:border-t fk:border-border fk:grow shrink",children:[jsx(ki,{apps:f,version:e}),jsx(Outlet,{})]})]}),jsx(f$3,{})]}):jsx(di,{projectId:i??""})}function Ci(e){return e?"cause"in e:false}function At(e){if(!e)return null;if(ServerError.is(e))return e;if(Ci(e)){let t=e.cause;if(ServerError.is(t))return t}return null}function xi(e){if(!e||typeof e!="object")return null;let{message:t}=e;return typeof t=="string"?t:null}function St(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Wo(e){if(!e)return null;let t=bl(e);return t.length===0?null:["The deployed schema is out of sync with your local Flexkit schema.","Run `flexkit deploy` using the CLI to apply your latest schema changes.",...t.map(o=>`- ${o}`)].join(`
2
2
  `)}function bl(e){if(CombinedGraphQLErrors.is(e))return e.errors.filter(wi).map(({message:r})=>r);let t=xi(e);if(t&&mo(t))return [t];let o=At(e);if(o?.statusCode!==400)return [];let n=St(o.bodyText)??wl(o)??Cl(e);return n?Array.isArray(n.errors)?n.errors.filter(wi).map(r=>r.message):typeof n.message=="string"&&mo(n.message)?[n.message]:typeof n.error=="string"&&mo(n.error)?[n.error]:[]:[]}function wl(e){let{result:t}=e;return !t||typeof t!="object"?null:t}function Cl(e){if(!Ci(e))return null;let{cause:t}=e,o=xi(t);if(o&&mo(o))return {message:o};if(!t||typeof t!="object")return null;let{result:n}=t;return n&&typeof n=="object"?n:null}function wi(e){if(!e||typeof e!="object")return false;let{extensions:t,message:o}=e;return t?.code==="GRAPHQL_VALIDATION_FAILED"&&typeof o=="string"?true:typeof o=="string"&&mo(o)}function mo(e){return e.startsWith("Cannot query field ")||e.startsWith("Unknown type ")||e.startsWith('Cannot query field "')||e.includes("GRAPHQL_VALIDATION_FAILED")}var Ll=ApolloProvider,Ai=createContext(void 0);function Tt(){let e=useContext(Ai);if(!e)throw new Error("useGraphQLError must be used within GraphQLProvider");return e}function _l(e){return new ErrorLink(({error:t})=>{let o=Wo(t);if(o){e(o);return}CombinedGraphQLErrors.is(t)?t.errors.forEach(({message:r,locations:i,path:a})=>{console.warn(`[GraphQL error]: Message: ${r}, Location: ${i}, Path: ${a}`);}):CombinedProtocolErrors.is(t)&&t.errors.forEach(({message:r,extensions:i})=>{console.warn(`[Protocol error]: Message: ${r}, Extensions: ${JSON.stringify(i)}`);});let n=At(t);if(n?.statusCode===400){let r=St(n.bodyText),i=null;if(r&&typeof r=="object"){let{error:a,errors:s,message:f}=r;if(typeof f=="string")i=f;else if(Array.isArray(s)){let[u]=s;if(u&&typeof u.message=="string"){let{message:c}=u;i=c;}}else typeof a=="string"?i=a:i=JSON.stringify(r);}else i=n.bodyText;e(i??"There is an error in your Flexkit schema (flexkit.config.ts).");}if(n){console.warn(`[Network error]: ${n.message}`);return}t&&console.warn(`[Network error]: ${t.message}`);})}function Ol(e,t){return from([_l(t),new HttpLink({uri:`/api/flexkit/${e}/graphql`})])}function Vl(e,t){return new ApolloClient({link:Ol(e??"",t),cache:new InMemoryCache({dataIdFromObject:o=>o._id?o._id:defaultDataIdFromObject(o)})})}function Si({children:e}){let{currentProjectId:t}=d(),[o,n]=useState(null),r=useMemo(()=>({schemaErrorMessage:o,setSchemaErrorMessage:n}),[o]);return jsx(Ai.Provider,{value:r,children:jsx(Ll,{client:Vl(t,n),children:e})})}function Ti({...e}){return jsx(AlertDialog.Root,{"data-slot":"alert-dialog",...e})}function In({...e}){return jsx(AlertDialog.Portal,{"data-slot":"alert-dialog-portal",...e})}function Bl({className:e,...t}){return jsx(AlertDialog.Overlay,{"data-slot":"alert-dialog-overlay",className:a$4("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",e),...t})}function Di({className:e,size:t="default",...o}){return jsxs(In,{children:[jsx(Bl,{}),jsx(AlertDialog.Content,{"data-slot":"alert-dialog-content","data-size":t,className:a$4("fk:group/alert-dialog-content fk:fixed fk:top-[50%] fk:left-[50%] fk:z-50 fk:grid fk:w-full fk:max-w-[calc(100%-2rem)] fk:translate-x-[-50%] fk:translate-y-[-50%] fk:gap-4 fk:rounded-lg fk:border fk:bg-background fk:p-6 fk:shadow-lg fk:duration-200 fk:data-[size=sm]:max-w-xs fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95 fk:data-[size=default]:sm:max-w-lg",e),...o})]})}function Ni({className:e,...t}){return jsx("div",{"data-slot":"alert-dialog-header",className:a$4("fk:grid fk:grid-rows-[auto_1fr] fk:place-items-center fk:gap-1.5 fk:text-center fk:has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] fk:has-data-[slot=alert-dialog-media]:gap-x-6 fk:sm:group-data-[size=default]/alert-dialog-content:place-items-start fk:sm:group-data-[size=default]/alert-dialog-content:text-left fk:sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",e),...t})}function Pi({className:e,...t}){return jsx("div",{"data-slot":"alert-dialog-footer",className:a$4("fk:flex fk:flex-col-reverse fk:gap-2 fk:group-data-[size=sm]/alert-dialog-content:grid fk:group-data-[size=sm]/alert-dialog-content:grid-cols-2 fk:sm:flex-row fk:sm:justify-end",e),...t})}function Ri({className:e,...t}){return jsx(AlertDialog.Title,{"data-slot":"alert-dialog-title",className:a$4("fk:text-lg fk:font-semibold fk:sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",e),...t})}function Fi({className:e,...t}){return jsx(AlertDialog.Description,{"data-slot":"alert-dialog-description",className:a$4("fk:text-sm fk:text-muted-foreground",e),...t})}function Ii({className:e,variant:t="default",size:o="default",...n}){return jsx(b$3,{variant:t,size:o,asChild:true,children:jsx(AlertDialog.Action,{"data-slot":"alert-dialog-action",className:a$4(e),...n})})}function Mi({className:e,variant:t="outline",size:o="default",...n}){return jsx(b$3,{variant:t,size:o,asChild:true,children:jsx(AlertDialog.Cancel,{"data-slot":"alert-dialog-cancel",className:a$4(e),...n})})}function po({options:e}){let[t,o]=useState(false),[n,r]=useState(false),[i,a]=useState(false);useEffect(()=>{o(true);},[]);function s(){o(false),i||e.dialogActionCancel?.(),i&&a(false);}async function f(){r(true);try{let u=e.dialogActionSubmit?.();u&&typeof u.then=="function"&&await u;}finally{a(true),o(false),r(false);}}return jsx(Ti,{onOpenChange:s,open:t,children:jsx(In,{children:jsxs(Di,{className:"sm:max-w-[425px]",children:[jsxs(Ni,{children:[jsx(Ri,{children:e.dialogTitle}),jsx(Fi,{children:e.dialogMessage})]}),jsxs(Pi,{children:[jsx(Mi,{disabled:n,onClick:s,children:e.dialogCancelTitle}),jsxs(Ii,{className:a$8({variant:e.isDestructive?"destructive":"default"}),disabled:n,onClick:f,children:[n?jsx(Loader2,{className:"fk:h-4 fk:w-4 fk:mr-2 fk:animate-spin"}):null,e.dialogActionLabel]})]})]})})})}var Oi=createContext([]),Vi=createContext(()=>{});function ql(e,t){let o=t.type;switch(t._id||(t._id=Date.now().toString()),o){case "DeleteEntity":return uniqBy(props(["type","_id"]),[...e,t]);case "AddEntity":return uniqBy(props(["type","_id"]),[...e,t]);case "EditEntity":return uniqBy(props(["type","_id"]),[...e,t]);case "EditRelationship":return uniqBy(props(["type","_id"]),[...e,t]);case "AlertDialog":return uniqBy(props(["type","_id"]),[...e,t]);case "Dismiss":return e.filter(n=>n._id!==t._id);default:throw Error(`Unknown action: ${o}`)}}function Bi({children:e}){let[t,o]=useReducer(ql,[]);return jsx(Oi.Provider,{value:t,children:jsx(Vi.Provider,{value:o,children:e})})}function zi(){return useContext(Oi)}function ae(){return useContext(Vi)}var Gl=["id","string"],Wl=["date","datetime","duration","time"],Zl=`_id
3
3
  originalFilename
4
4
  mimeType
package/dist/nextjs.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  handleFlexkitRequest
3
- } from "./chunk-3S65434F.js";
3
+ } from "./chunk-PCZI6VXG.js";
4
4
 
5
5
  // src/auth/nextjs-api.ts
6
6
  function resultToNextResponse(result, NextResponse) {
@@ -1,2 +1,2 @@
1
- import'./index.css';import {e}from'./chunk-2ORQKJKI.js';import {m,v,q,p,r,t,b}from'./chunk-ND3OZVR5.js';import'./chunk-6YHHL4XI.js';import'./chunk-CHRDKNUF.js';import'./chunk-EYGOJ2ZN.js';import'./chunk-WIUPQHZ5.js';import {a}from'./chunk-O2QMYUPS.js';import {useState,useMemo,useRef}from'react';import {LoaderCircle,Search,X}from'lucide-react';import {Command}from'cmdk';import {useNavigate}from'react-router-dom';import {jsxs,jsx}from'react/jsx-runtime';var z=f=>({searchRequests:{searches:f.filter(a=>a.attributes.some(i=>i.isSearchable)).map(a=>a.plural).map(a=>({collection:a}))},commonParams:{q:""}});function Y({onSelect:f,searchPlaceholder:d="Search...",noResultsMsg:a$1="Nothing found",className:i,onSearchChange:k,projectId:P,schema:u}){let[I,r$1]=useState(false),[p$1,h]=useState(""),l=useMemo(()=>z(u),[u]),[R,g]=useState(l),n=useRef(null),{results:y,isLoading:E}=e(P,R),L=useNavigate();function B(e){h(e),e.length>0&&(r$1(true),g({...l,commonParams:{q:e}})),e.length===0&&r$1(false),k&&k(e);}function _(){h(""),r$1(false),g(l),n.current&&(n.current.value="");let e=new URL(window.location.href);e.searchParams.has("id")&&(e.searchParams.delete("id"),L(e.pathname+e.search));}return jsxs(m,{className:"fk:relative fk:overflow-visible fk:h-auto fk:justify-center",onBlur:()=>{setTimeout(()=>{r$1(false);},300);},onKeyDown:e=>{e.key==="Escape"&&(e.preventDefault(),r$1(false));},shouldFilter:false,children:[jsxs("div",{className:a("fk:flex fk:items-center fk:border fk:border-border fk:rounded-md fk:px-3 fk:h-9 fk:md:w-[100px] fk:lg:w-[300px] fk:ring-offset-background","fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2"),children:[E?jsx(LoaderCircle,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin"}):jsx(Search,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50"}),jsx(Command.Input,{className:a("fk:flex fk:h-9 fk:w-full fk:rounded-md fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50",i),placeholder:d,onMouseDown:()=>{(n.current?.value.length??0)>0&&r$1(true);},onValueChange:B,ref:n,value:p$1}),p$1&&jsx("button",{className:"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:text-muted-foreground fk:hover:text-foreground",onClick:_,type:"button",children:jsx(X,{className:"fk:h-4 fk:w-4"})})]}),jsx("div",{className:"fk:relative fk:max-w-[600px]",children:jsx("div",{className:a("fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-10 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border",I?"fk:block":"fk:hidden"),children:jsxs(v,{className:"fk:max-h-[220px] fk:overflow-auto",children:[jsx(q,{children:a$1}),jsx(p,{children:jsxs(r,{children:[y.length>0&&jsx(t,{"aria-hidden":"true",className:"fk:hidden!",value:"-"}),y.map(e=>jsxs(t,{className:"fk:flex",value:e._id,onSelect:M=>{f({entityName:e._entityName,entityNamePlural:e._entityNamePlural,entityId:M});},children:[jsx("span",{className:"fk:basis-full",children:e[Object.keys(e)[3]]}),jsx(b,{className:"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400",children:e._entityName})]},e._id))]})})]})})})]})}export{Y as Search};//# sourceMappingURL=search-NEEMYDKE.js.map
2
- //# sourceMappingURL=search-NEEMYDKE.js.map
1
+ import'./index.css';import {e}from'./chunk-I4C65MUI.js';import {m,v,q,p,r,t,b}from'./chunk-ND3OZVR5.js';import'./chunk-6YHHL4XI.js';import'./chunk-ZBV4BY36.js';import'./chunk-EYGOJ2ZN.js';import'./chunk-WIUPQHZ5.js';import {a}from'./chunk-O2QMYUPS.js';import {useState,useMemo,useRef}from'react';import {LoaderCircle,Search,X}from'lucide-react';import {Command}from'cmdk';import {useNavigate}from'react-router-dom';import {jsxs,jsx}from'react/jsx-runtime';var z=f=>({searchRequests:{searches:f.filter(a=>a.attributes.some(i=>i.isSearchable)).map(a=>a.plural).map(a=>({collection:a}))},commonParams:{q:""}});function Y({onSelect:f,searchPlaceholder:d="Search...",noResultsMsg:a$1="Nothing found",className:i,onSearchChange:k,projectId:P,schema:u}){let[I,r$1]=useState(false),[p$1,h]=useState(""),l=useMemo(()=>z(u),[u]),[R,g]=useState(l),n=useRef(null),{results:y,isLoading:E}=e(P,R),L=useNavigate();function B(e){h(e),e.length>0&&(r$1(true),g({...l,commonParams:{q:e}})),e.length===0&&r$1(false),k&&k(e);}function _(){h(""),r$1(false),g(l),n.current&&(n.current.value="");let e=new URL(window.location.href);e.searchParams.has("id")&&(e.searchParams.delete("id"),L(e.pathname+e.search));}return jsxs(m,{className:"fk:relative fk:overflow-visible fk:h-auto fk:justify-center",onBlur:()=>{setTimeout(()=>{r$1(false);},300);},onKeyDown:e=>{e.key==="Escape"&&(e.preventDefault(),r$1(false));},shouldFilter:false,children:[jsxs("div",{className:a("fk:flex fk:items-center fk:border fk:border-border fk:rounded-md fk:px-3 fk:h-9 fk:md:w-[100px] fk:lg:w-[300px] fk:ring-offset-background","fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2"),children:[E?jsx(LoaderCircle,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin"}):jsx(Search,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50"}),jsx(Command.Input,{className:a("fk:flex fk:h-9 fk:w-full fk:rounded-md fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50",i),placeholder:d,onMouseDown:()=>{(n.current?.value.length??0)>0&&r$1(true);},onValueChange:B,ref:n,value:p$1}),p$1&&jsx("button",{className:"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:text-muted-foreground fk:hover:text-foreground",onClick:_,type:"button",children:jsx(X,{className:"fk:h-4 fk:w-4"})})]}),jsx("div",{className:"fk:relative fk:max-w-[600px]",children:jsx("div",{className:a("fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-10 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border",I?"fk:block":"fk:hidden"),children:jsxs(v,{className:"fk:max-h-[220px] fk:overflow-auto",children:[jsx(q,{children:a$1}),jsx(p,{children:jsxs(r,{children:[y.length>0&&jsx(t,{"aria-hidden":"true",className:"fk:hidden!",value:"-"}),y.map(e=>jsxs(t,{className:"fk:flex",value:e._id,onSelect:M=>{f({entityName:e._entityName,entityNamePlural:e._entityNamePlural,entityId:M});},children:[jsx("span",{className:"fk:basis-full",children:e[Object.keys(e)[3]]}),jsx(b,{className:"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400",children:e._entityName})]},e._id))]})})]})})})]})}export{Y as Search};//# sourceMappingURL=search-MG2W4GGN.js.map
2
+ //# sourceMappingURL=search-MG2W4GGN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/components/search.tsx"],"names":["getBaseSearchRequest","schema","entity","attr","collection","Search","onSelect","searchPlaceholder","noResultsMsg","className","onSearchChange","projectId","isOpen","setIsOpen","useState","inputValue","setInputValue","searchRequest","useMemo","searchQuery","setSearchQuery","inputRef","useRef","results","isLoading","useSearch","navigate","useNavigate","handleOnSearchChange","q","handleClear","url","jsxs","Command","cn","jsx","LoaderCircle","SearchIcon","CommandPrimitive","XIcon","ScrollArea","CommandEmpty","CommandList","CommandGroup","CommandItem","item","entityId","Badge"],"mappings":"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","file":"search-NEEMYDKE.js","sourcesContent":["'use client';\n\nimport { useRef, useState, useMemo } from 'react';\nimport type { JSX } from 'react';\nimport { LoaderCircle, Search as SearchIcon, X as XIcon } from 'lucide-react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useSearch } from '../../core/use-search';\nimport { cn } from '../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from '../primitives/command';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport type { Entity, SearchRequestProps } from '../../core/types';\n\nexport type ComboBoxItemType = {\n value: string;\n label: string;\n};\n\nexport interface SearchProps {\n onSelect: ({\n entityName,\n entityNamePlural,\n entityId,\n }: {\n entityName: string;\n entityNamePlural: string;\n entityId: string;\n }) => void;\n searchPlaceholder?: string;\n noResultsMsg?: string;\n className?: string;\n onSearchChange?: (e: string) => void;\n projectId: string;\n schema: Entity[];\n}\n\nconst getBaseSearchRequest = (schema: Entity[]): SearchRequestProps => {\n const collections = schema\n .filter((entity) => entity.attributes.some((attr) => attr.isSearchable))\n .map((entity) => entity.plural);\n\n return {\n searchRequests: {\n searches: collections.map((collection) => ({\n collection,\n })),\n },\n commonParams: {\n q: '',\n },\n };\n};\n\nexport function Search({\n onSelect,\n searchPlaceholder = 'Search...',\n noResultsMsg = 'Nothing found',\n className,\n onSearchChange,\n projectId,\n schema,\n}: SearchProps): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const searchRequest = useMemo(() => getBaseSearchRequest(schema), [schema]);\n const [searchQuery, setSearchQuery] = useState(searchRequest);\n const inputRef = useRef<HTMLInputElement>(null);\n const { results, isLoading } = useSearch(projectId, searchQuery);\n const navigate = useNavigate();\n\n function handleOnSearchChange(q: string): void {\n setInputValue(q);\n // TODO: Add debounce\n if (q.length > 0) {\n setIsOpen(true);\n setSearchQuery({ ...searchRequest, commonParams: { q } });\n }\n\n if (q.length === 0) setIsOpen(false);\n\n if (onSearchChange) {\n onSearchChange(q);\n }\n }\n\n function handleClear(): void {\n setInputValue('');\n setIsOpen(false);\n setSearchQuery(searchRequest);\n\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n\n // Remove id from URL if present\n const url = new URL(window.location.href);\n\n if (url.searchParams.has('id')) {\n url.searchParams.delete('id');\n navigate(url.pathname + url.search);\n }\n }\n\n // TODO: handle error\n\n return (\n <Command\n className=\"fk:relative fk:overflow-visible fk:h-auto fk:justify-center\"\n onBlur={() => {\n // close after a delay to allow any click event from the results list to be handled\n setTimeout(() => {\n setIsOpen(false);\n }, 300);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n }\n }}\n shouldFilter={false}\n >\n <div\n className={cn(\n 'fk:flex fk:items-center fk:border fk:border-border fk:rounded-md fk:px-3 fk:h-9 fk:md:w-[100px] fk:lg:w-[300px] fk:ring-offset-background',\n 'fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2'\n )}\n >\n {isLoading ? (\n <LoaderCircle className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin\" />\n ) : (\n <SearchIcon className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50\" />\n )}\n <CommandPrimitive.Input\n className={cn(\n 'fk:flex fk:h-9 fk:w-full fk:rounded-md fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50',\n className\n )}\n placeholder={searchPlaceholder}\n onMouseDown={() => {\n if ((inputRef.current?.value.length ?? 0) > 0) setIsOpen(true);\n }}\n onValueChange={handleOnSearchChange}\n ref={inputRef}\n value={inputValue}\n />\n {inputValue && (\n <button\n className=\"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:text-muted-foreground fk:hover:text-foreground\"\n onClick={handleClear}\n type=\"button\"\n >\n <XIcon className=\"fk:h-4 fk:w-4\" />\n </button>\n )}\n </div>\n <div className=\"fk:relative fk:max-w-[600px]\">\n <div\n className={cn(\n 'fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-10 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border',\n isOpen ? 'fk:block' : 'fk:hidden'\n )}\n >\n <ScrollArea className=\"fk:max-h-[220px] fk:overflow-auto\">\n <CommandEmpty>{noResultsMsg}</CommandEmpty>\n <CommandList>\n <CommandGroup>\n {results.length > 0 && <CommandItem aria-hidden=\"true\" className=\"fk:hidden!\" value=\"-\" />}\n {results.map((item) => (\n <CommandItem\n className=\"fk:flex\"\n key={item._id}\n value={item._id}\n onSelect={(entityId) => {\n onSelect({ entityName: item._entityName, entityNamePlural: item._entityNamePlural, entityId });\n }}\n >\n <span className=\"fk:basis-full\">{item[Object.keys(item)[3]]}</span>\n <Badge className=\"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400\">\n {item._entityName}\n </Badge>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </ScrollArea>\n </div>\n </div>\n </Command>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/ui/components/search.tsx"],"names":["getBaseSearchRequest","schema","entity","attr","collection","Search","onSelect","searchPlaceholder","noResultsMsg","className","onSearchChange","projectId","isOpen","setIsOpen","useState","inputValue","setInputValue","searchRequest","useMemo","searchQuery","setSearchQuery","inputRef","useRef","results","isLoading","useSearch","navigate","useNavigate","handleOnSearchChange","q","handleClear","url","jsxs","Command","cn","jsx","LoaderCircle","SearchIcon","CommandPrimitive","XIcon","ScrollArea","CommandEmpty","CommandList","CommandGroup","CommandItem","item","entityId","Badge"],"mappings":"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","file":"search-MG2W4GGN.js","sourcesContent":["'use client';\n\nimport { useRef, useState, useMemo } from 'react';\nimport type { JSX } from 'react';\nimport { LoaderCircle, Search as SearchIcon, X as XIcon } from 'lucide-react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { useNavigate } from 'react-router-dom';\nimport { useSearch } from '../../core/use-search';\nimport { cn } from '../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from '../primitives/command';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport type { Entity, SearchRequestProps } from '../../core/types';\n\nexport type ComboBoxItemType = {\n value: string;\n label: string;\n};\n\nexport interface SearchProps {\n onSelect: ({\n entityName,\n entityNamePlural,\n entityId,\n }: {\n entityName: string;\n entityNamePlural: string;\n entityId: string;\n }) => void;\n searchPlaceholder?: string;\n noResultsMsg?: string;\n className?: string;\n onSearchChange?: (e: string) => void;\n projectId: string;\n schema: Entity[];\n}\n\nconst getBaseSearchRequest = (schema: Entity[]): SearchRequestProps => {\n const collections = schema\n .filter((entity) => entity.attributes.some((attr) => attr.isSearchable))\n .map((entity) => entity.plural);\n\n return {\n searchRequests: {\n searches: collections.map((collection) => ({\n collection,\n })),\n },\n commonParams: {\n q: '',\n },\n };\n};\n\nexport function Search({\n onSelect,\n searchPlaceholder = 'Search...',\n noResultsMsg = 'Nothing found',\n className,\n onSearchChange,\n projectId,\n schema,\n}: SearchProps): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const searchRequest = useMemo(() => getBaseSearchRequest(schema), [schema]);\n const [searchQuery, setSearchQuery] = useState(searchRequest);\n const inputRef = useRef<HTMLInputElement>(null);\n const { results, isLoading } = useSearch(projectId, searchQuery);\n const navigate = useNavigate();\n\n function handleOnSearchChange(q: string): void {\n setInputValue(q);\n // TODO: Add debounce\n if (q.length > 0) {\n setIsOpen(true);\n setSearchQuery({ ...searchRequest, commonParams: { q } });\n }\n\n if (q.length === 0) setIsOpen(false);\n\n if (onSearchChange) {\n onSearchChange(q);\n }\n }\n\n function handleClear(): void {\n setInputValue('');\n setIsOpen(false);\n setSearchQuery(searchRequest);\n\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n\n // Remove id from URL if present\n const url = new URL(window.location.href);\n\n if (url.searchParams.has('id')) {\n url.searchParams.delete('id');\n navigate(url.pathname + url.search);\n }\n }\n\n // TODO: handle error\n\n return (\n <Command\n className=\"fk:relative fk:overflow-visible fk:h-auto fk:justify-center\"\n onBlur={() => {\n // close after a delay to allow any click event from the results list to be handled\n setTimeout(() => {\n setIsOpen(false);\n }, 300);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setIsOpen(false);\n }\n }}\n shouldFilter={false}\n >\n <div\n className={cn(\n 'fk:flex fk:items-center fk:border fk:border-border fk:rounded-md fk:px-3 fk:h-9 fk:md:w-[100px] fk:lg:w-[300px] fk:ring-offset-background',\n 'fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2'\n )}\n >\n {isLoading ? (\n <LoaderCircle className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin\" />\n ) : (\n <SearchIcon className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50\" />\n )}\n <CommandPrimitive.Input\n className={cn(\n 'fk:flex fk:h-9 fk:w-full fk:rounded-md fk:bg-transparent fk:py-1 fk:text-sm fk:outline-hidden fk:placeholder:text-muted-foreground fk:disabled:cursor-not-allowed fk:disabled:opacity-50',\n className\n )}\n placeholder={searchPlaceholder}\n onMouseDown={() => {\n if ((inputRef.current?.value.length ?? 0) > 0) setIsOpen(true);\n }}\n onValueChange={handleOnSearchChange}\n ref={inputRef}\n value={inputValue}\n />\n {inputValue && (\n <button\n className=\"fk:flex fk:items-center fk:justify-center fk:ml-2 fk:text-muted-foreground fk:hover:text-foreground\"\n onClick={handleClear}\n type=\"button\"\n >\n <XIcon className=\"fk:h-4 fk:w-4\" />\n </button>\n )}\n </div>\n <div className=\"fk:relative fk:max-w-[600px]\">\n <div\n className={cn(\n 'fk:mt-1 fk:animate-in fk:fade-in-0 fk:zoom-in-95 fk:absolute fk:top-0 fk:z-10 fk:w-full fk:rounded-md fk:bg-popover fk:outline-hidden fk:drop-shadow-md fk:border fk:border-border',\n isOpen ? 'fk:block' : 'fk:hidden'\n )}\n >\n <ScrollArea className=\"fk:max-h-[220px] fk:overflow-auto\">\n <CommandEmpty>{noResultsMsg}</CommandEmpty>\n <CommandList>\n <CommandGroup>\n {results.length > 0 && <CommandItem aria-hidden=\"true\" className=\"fk:hidden!\" value=\"-\" />}\n {results.map((item) => (\n <CommandItem\n className=\"fk:flex\"\n key={item._id}\n value={item._id}\n onSelect={(entityId) => {\n onSelect({ entityName: item._entityName, entityNamePlural: item._entityNamePlural, entityId });\n }}\n >\n <span className=\"fk:basis-full\">{item[Object.keys(item)[3]]}</span>\n <Badge className=\"fk:py-px fk:text-[0.6875rem] fk:leading-3 fk:bg-teal-400\">\n {item._entityName}\n </Badge>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </ScrollArea>\n </div>\n </div>\n </Command>\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  handleFlexkitRequest
3
- } from "./chunk-3S65434F.js";
3
+ } from "./chunk-PCZI6VXG.js";
4
4
 
5
5
  // src/auth/tanstack-start-api.ts
6
6
  function getCookieValue(cookieHeader, name) {
@@ -1,2 +1,2 @@
1
- import'./index.css';import {b as b$1}from'./chunk-N6WEYKSZ.js';import {a,b as b$3,c as c$1}from'./chunk-SW6NNU5D.js';import {b,r,c,e,f,l,m,i,h,n}from'./chunk-YXRNHQPG.js';import'./chunk-6YHHL4XI.js';import'./chunk-CHRDKNUF.js';import {b as b$2}from'./chunk-EYGOJ2ZN.js';import'./chunk-WIUPQHZ5.js';import'./chunk-O2QMYUPS.js';import {Monitor,Moon,Sun}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';function _({projectId:D}){let{theme:a$1,setTheme:t}=b(),[C,n$1]=b$1();return C?jsx(r,{className:"fk:h-8 fk:w-8 fk:rounded-full"}):jsxs(c,{children:[jsx(e,{asChild:true,children:jsx(b$2,{className:"fk:relative fk:h-8 fk:w-8 fk:rounded-full",variant:"ghost",children:jsxs(a,{className:"fk:h-8 fk:w-8",children:[jsx(b$3,{alt:"@shadcn",src:n$1.user?.avatar_url}),jsx(c$1,{children:n$1.user?.display_name.charAt(0).toUpperCase()??""})]})})}),jsxs(f,{align:"end",className:"fk:w-56",forceMount:true,children:[jsx(l,{className:"font-normal",children:jsxs("div",{className:"fk:flex fk:flex-col fk:space-y-1",children:[jsx("p",{className:"fk:text-sm fk:font-medium fk:leading-none",children:n$1.user?.display_name}),jsx("p",{className:"fk:text-xs fk:leading-none fk:text-muted-foreground",children:n$1.user?.email})]})}),jsx(m,{}),jsx(l,{children:"Theme"}),jsxs(i,{checked:a$1==="system",onCheckedChange:()=>{t("system");},children:[jsx(Monitor,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"System"})]}),jsxs(i,{checked:a$1==="dark",onCheckedChange:()=>{t("dark");},children:[jsx(Moon,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Dark"})]}),jsxs(i,{checked:a$1==="light",onCheckedChange:()=>{t("light");},children:[jsx(Sun,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Light"})]}),jsx(m,{}),jsxs(h,{onClick:()=>{n$1.logout(D).then(()=>{}).catch(()=>{});},children:["Log out",jsx(n,{children:"\u21E7\u2318Q"})]})]})]})}export{_ as UserNav};//# sourceMappingURL=user-nav-QJ3GVNLW.js.map
2
- //# sourceMappingURL=user-nav-QJ3GVNLW.js.map
1
+ import'./index.css';import {b as b$1}from'./chunk-7XBIC5RC.js';import {a,b as b$3,c as c$1}from'./chunk-SW6NNU5D.js';import {b,r,c,e,f,l,m,i,h,n}from'./chunk-YXRNHQPG.js';import'./chunk-6YHHL4XI.js';import'./chunk-ZBV4BY36.js';import {b as b$2}from'./chunk-EYGOJ2ZN.js';import'./chunk-WIUPQHZ5.js';import'./chunk-O2QMYUPS.js';import {Monitor,Moon,Sun}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';function _({projectId:D}){let{theme:a$1,setTheme:t}=b(),[C,n$1]=b$1();return C?jsx(r,{className:"fk:h-8 fk:w-8 fk:rounded-full"}):jsxs(c,{children:[jsx(e,{asChild:true,children:jsx(b$2,{className:"fk:relative fk:h-8 fk:w-8 fk:rounded-full",variant:"ghost",children:jsxs(a,{className:"fk:h-8 fk:w-8",children:[jsx(b$3,{alt:"@shadcn",src:n$1.user?.avatar_url}),jsx(c$1,{children:n$1.user?.display_name.charAt(0).toUpperCase()??""})]})})}),jsxs(f,{align:"end",className:"fk:w-56",forceMount:true,children:[jsx(l,{className:"font-normal",children:jsxs("div",{className:"fk:flex fk:flex-col fk:space-y-1",children:[jsx("p",{className:"fk:text-sm fk:font-medium fk:leading-none",children:n$1.user?.display_name}),jsx("p",{className:"fk:text-xs fk:leading-none fk:text-muted-foreground",children:n$1.user?.email})]})}),jsx(m,{}),jsx(l,{children:"Theme"}),jsxs(i,{checked:a$1==="system",onCheckedChange:()=>{t("system");},children:[jsx(Monitor,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"System"})]}),jsxs(i,{checked:a$1==="dark",onCheckedChange:()=>{t("dark");},children:[jsx(Moon,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Dark"})]}),jsxs(i,{checked:a$1==="light",onCheckedChange:()=>{t("light");},children:[jsx(Sun,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Light"})]}),jsx(m,{}),jsxs(h,{onClick:()=>{n$1.logout(D).then(()=>{}).catch(()=>{});},children:["Log out",jsx(n,{children:"\u21E7\u2318Q"})]})]})]})}export{_ as UserNav};//# sourceMappingURL=user-nav-E7MLJ36Y.js.map
2
+ //# sourceMappingURL=user-nav-E7MLJ36Y.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/components/user-nav.tsx"],"names":["UserNav","projectId","theme","setTheme","useTheme","isLoading","auth","useAuth","jsx","Skeleton","jsxs","DropdownMenu","DropdownMenuTrigger","Button","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","Monitor","Moon","Sun","DropdownMenuItem","DropdownMenuShortcut"],"mappings":"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","file":"user-nav-QJ3GVNLW.js","sourcesContent":["import type { JSX } from 'react';\nimport { useTheme } from '../theme-context';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage } from '../primitives/avatar';\nimport { Button } from '../primitives/button';\nimport { Skeleton } from '../primitives/skeleton';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '../primitives/dropdown-menu';\nimport { useAuth } from '../../auth/auth-context';\n\ntype Props = {\n projectId: string;\n};\n\nexport function UserNav({ projectId }: Props): JSX.Element {\n const { theme, setTheme } = useTheme();\n const [isLoading, auth] = useAuth();\n\n if (isLoading) {\n return <Skeleton className=\"fk:h-8 fk:w-8 fk:rounded-full\" />;\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:relative fk:h-8 fk:w-8 fk:rounded-full\" variant=\"ghost\">\n <Avatar className=\"fk:h-8 fk:w-8\">\n <AvatarImage alt=\"@shadcn\" src={auth.user?.avatar_url} />\n <AvatarFallback>{auth.user?.display_name.charAt(0).toUpperCase() ?? ''}</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-56\" forceMount>\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"fk:flex fk:flex-col fk:space-y-1\">\n <p className=\"fk:text-sm fk:font-medium fk:leading-none\">{auth.user?.display_name}</p>\n <p className=\"fk:text-xs fk:leading-none fk:text-muted-foreground\">{auth.user?.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Theme</DropdownMenuLabel>\n <DropdownMenuCheckboxItem\n checked={theme === 'system'}\n onCheckedChange={() => {\n setTheme('system');\n }}\n >\n <Monitor className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>System</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'dark'}\n onCheckedChange={() => {\n setTheme('dark');\n }}\n >\n <Moon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Dark</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'light'}\n onCheckedChange={() => {\n setTheme('light');\n }}\n >\n <Sun className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Light</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => {\n auth\n .logout(projectId)\n .then(() => {\n //\n })\n .catch(() => {\n //\n });\n }}\n >\n Log out\n <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/ui/components/user-nav.tsx"],"names":["UserNav","projectId","theme","setTheme","useTheme","isLoading","auth","useAuth","jsx","Skeleton","jsxs","DropdownMenu","DropdownMenuTrigger","Button","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","Monitor","Moon","Sun","DropdownMenuItem","DropdownMenuShortcut"],"mappings":"2ZAsBO,SAASA,CAAAA,CAAQ,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAuB,CACzD,GAAM,CAAE,KAAA,CAAAC,GAAAA,CAAO,QAAA,CAAAC,CAAS,CAAA,CAAIC,CAAAA,EAAS,CAC/B,CAACC,CAAAA,CAAWC,GAAI,CAAA,CAAIC,GAAAA,EAAQ,CAElC,OAAIF,CAAAA,CACKG,GAAAA,CAACC,CAAAA,CAAA,CAAS,SAAA,CAAU,+BAAA,CAAgC,CAAA,CAI3DC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAH,GAAAA,CAACI,CAAAA,CAAA,CAAoB,OAAA,CAAO,IAAA,CAC1B,QAAA,CAAAJ,GAAAA,CAACK,GAAAA,CAAA,CAAO,SAAA,CAAU,2CAAA,CAA4C,OAAA,CAAQ,OAAA,CACpE,QAAA,CAAAH,IAAAA,CAACI,CAAAA,CAAA,CAAO,SAAA,CAAU,eAAA,CAChB,QAAA,CAAA,CAAAN,GAAAA,CAACO,GAAAA,CAAA,CAAY,GAAA,CAAI,SAAA,CAAU,GAAA,CAAKT,GAAAA,CAAK,IAAA,EAAM,UAAA,CAAY,CAAA,CACvDE,GAAAA,CAACQ,GAAAA,CAAA,CAAgB,QAAA,CAAAV,GAAAA,CAAK,IAAA,EAAM,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,EAAK,EAAA,CAAG,CAAA,CAAA,CACzE,CAAA,CACF,CAAA,CACF,CAAA,CACAI,IAAAA,CAACO,CAAAA,CAAA,CAAoB,KAAA,CAAM,KAAA,CAAM,SAAA,CAAU,SAAA,CAAU,UAAA,CAAU,IAAA,CAC7D,QAAA,CAAA,CAAAT,GAAAA,CAACU,CAAAA,CAAA,CAAkB,SAAA,CAAU,aAAA,CAC3B,QAAA,CAAAR,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAF,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2CAAA,CAA6C,QAAA,CAAAF,GAAAA,CAAK,IAAA,EAAM,YAAA,CAAa,CAAA,CAClFE,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,qDAAA,CAAuD,QAAA,CAAAF,GAAAA,CAAK,IAAA,EAAM,KAAA,CAAM,CAAA,CAAA,CACvF,CAAA,CACF,CAAA,CACAE,GAAAA,CAACW,CAAAA,CAAA,EAAsB,CAAA,CACvBX,GAAAA,CAACU,CAAAA,CAAA,CAAkB,QAAA,CAAA,OAAA,CAAK,CAAA,CACxBR,IAAAA,CAACU,CAAAA,CAAA,CACC,OAAA,CAASlB,GAAAA,GAAU,QAAA,CACnB,eAAA,CAAiB,IAAM,CACrBC,CAAAA,CAAS,QAAQ,EACnB,CAAA,CAEA,QAAA,CAAA,CAAAK,GAAAA,CAACa,OAAAA,CAAA,CAAQ,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC3Cb,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,QAAA,CAAM,CAAA,CAAA,CACd,CAAA,CACAE,IAAAA,CAACU,CAAAA,CAAA,CACC,OAAA,CAASlB,GAAAA,GAAU,MAAA,CACnB,eAAA,CAAiB,IAAM,CACrBC,CAAAA,CAAS,MAAM,EACjB,CAAA,CAEA,QAAA,CAAA,CAAAK,GAAAA,CAACc,IAAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,CAAA,CACxCd,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,MAAA,CAAI,CAAA,CAAA,CACZ,CAAA,CACAE,IAAAA,CAACU,CAAAA,CAAA,CACC,OAAA,CAASlB,GAAAA,GAAU,OAAA,CACnB,eAAA,CAAiB,IAAM,CACrBC,CAAAA,CAAS,OAAO,EAClB,CAAA,CAEA,QAAA,CAAA,CAAAK,GAAAA,CAACe,GAAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CAAwB,CAAA,CACvCf,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,OAAA,CAAK,CAAA,CAAA,CACb,CAAA,CACAA,GAAAA,CAACW,CAAAA,CAAA,EAAsB,CAAA,CACvBT,IAAAA,CAACc,CAAAA,CAAA,CACC,OAAA,CAAS,IAAM,CACblB,GAAAA,CACG,MAAA,CAAOL,CAAS,CAAA,CAChB,IAAA,CAAK,IAAM,CAEZ,CAAC,CAAA,CACA,KAAA,CAAM,IAAM,CAEb,CAAC,EACL,CAAA,CACD,QAAA,CAAA,CAAA,SAAA,CAECO,GAAAA,CAACiB,CAAAA,CAAA,CAAqB,QAAA,CAAA,eAAA,CAAG,CAAA,CAAA,CAC3B,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ","file":"user-nav-E7MLJ36Y.js","sourcesContent":["import type { JSX } from 'react';\nimport { useTheme } from '../theme-context';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage } from '../primitives/avatar';\nimport { Button } from '../primitives/button';\nimport { Skeleton } from '../primitives/skeleton';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '../primitives/dropdown-menu';\nimport { useAuth } from '../../auth/auth-context';\n\ntype Props = {\n projectId: string;\n};\n\nexport function UserNav({ projectId }: Props): JSX.Element {\n const { theme, setTheme } = useTheme();\n const [isLoading, auth] = useAuth();\n\n if (isLoading) {\n return <Skeleton className=\"fk:h-8 fk:w-8 fk:rounded-full\" />;\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:relative fk:h-8 fk:w-8 fk:rounded-full\" variant=\"ghost\">\n <Avatar className=\"fk:h-8 fk:w-8\">\n <AvatarImage alt=\"@shadcn\" src={auth.user?.avatar_url} />\n <AvatarFallback>{auth.user?.display_name.charAt(0).toUpperCase() ?? ''}</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-56\" forceMount>\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"fk:flex fk:flex-col fk:space-y-1\">\n <p className=\"fk:text-sm fk:font-medium fk:leading-none\">{auth.user?.display_name}</p>\n <p className=\"fk:text-xs fk:leading-none fk:text-muted-foreground\">{auth.user?.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Theme</DropdownMenuLabel>\n <DropdownMenuCheckboxItem\n checked={theme === 'system'}\n onCheckedChange={() => {\n setTheme('system');\n }}\n >\n <Monitor className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>System</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'dark'}\n onCheckedChange={() => {\n setTheme('dark');\n }}\n >\n <Moon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Dark</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'light'}\n onCheckedChange={() => {\n setTheme('light');\n }}\n >\n <Sun className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Light</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => {\n auth\n .logout(projectId)\n .then(() => {\n //\n })\n .catch(() => {\n //\n });\n }}\n >\n Log out\n <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flexkit/studio",
3
- "version": "0.0.24",
3
+ "version": "0.0.25",
4
4
  "description": "Flexkit Studio - Build custom internal tools like PIMs, CRMs, and ERPs with a flexible React UI and a graph-backed API",
5
5
  "keywords": [
6
6
  "flexkit",
@@ -1,2 +0,0 @@
1
- import'./index.css';export{a as Asset}from'./chunk-HSPSTCNK.js';import'./chunk-5CKMFBWH.js';import'./chunk-CHRDKNUF.js';import'./chunk-WIUPQHZ5.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=asset-IVSDPVJK.js.map
2
- //# sourceMappingURL=asset-IVSDPVJK.js.map
@@ -1,3 +0,0 @@
1
- import'./index.css';import {b}from'./chunk-WIUPQHZ5.js';var n="flexkit.io",r=`https://${n}`,t=i=>i?`https://${i}.api.${n}`:r,g=`${r}/images/`;function l(i=""){return {authProviders:`/api/flexkit/${i}/auth/providers`,completion:`/api/flexkit/${i}/completion`,currentUser:`/api/flexkit/${i}/users/me`,loginOtpConfirm:`${t(i)}/auth/otp/confirm`,loginOtpSend:`${t(i)}/auth/otp/send`,logout:a=>{let o=new URLSearchParams({redirect:b(a,i)});return `/api/flexkit/${i}/auth/logout?${o.toString()}`},search:`/api/flexkit/${i}/search`,sessionId:`${t(i)}/api/auth/login/session`,upload:`/api/flexkit/${i}/upload`}}
2
- export{r as a,g as b,l as c};//# sourceMappingURL=chunk-CHRDKNUF.js.map
3
- //# sourceMappingURL=chunk-CHRDKNUF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/api-paths.ts"],"names":["domain","baseApiUrl","baseProjectApiUrl","projectId","IMAGES_BASE_URL","apiPaths","basePath","params","joinBasePath"],"mappings":"wDAEA,IAAMA,EAAS,YAAA,CACFC,CAAAA,CAAa,WAAWD,CAAM,CAAA,CAAA,CACrCE,EAAqBC,CAAAA,EACzBA,CAAAA,CAAY,WAAWA,CAAS,CAAA,KAAA,EAAQH,CAAM,CAAA,CAAA,CAAKC,CAAAA,CAcxCG,EAAkB,CAAA,EAAGH,CAAU,WAErC,SAASI,CAAAA,CAASF,CAAAA,CAAY,EAAA,CAAc,CACjD,OAAO,CACL,cAAe,CAAA,aAAA,EAAgBA,CAAS,kBACxC,UAAA,CAAY,CAAA,aAAA,EAAgBA,CAAS,CAAA,WAAA,CAAA,CACrC,WAAA,CAAa,gBAAgBA,CAAS,CAAA,SAAA,CAAA,CACtC,gBAAiB,CAAA,EAAGD,CAAAA,CAAkBC,CAAS,CAAC,CAAA,iBAAA,CAAA,CAChD,YAAA,CAAc,CAAA,EAAGD,EAAkBC,CAAS,CAAC,iBAC7C,MAAA,CAASG,CAAAA,EAAqB,CAC5B,IAAMC,CAAAA,CAAS,IAAI,eAAA,CAAgB,CACjC,SAAUC,CAAAA,CAAaF,CAAAA,CAAUH,CAAS,CAC5C,CAAC,EAED,OAAO,CAAA,aAAA,EAAgBA,CAAS,CAAA,aAAA,EAAgBI,EAAO,QAAA,EAAU,EACnE,CAAA,CACA,MAAA,CAAQ,gBAAgBJ,CAAS,CAAA,OAAA,CAAA,CACjC,UAAW,CAAA,EAAGD,CAAAA,CAAkBC,CAAS,CAAC,CAAA,uBAAA,CAAA,CAC1C,OAAQ,CAAA,aAAA,EAAgBA,CAAS,SACnC,CACF","file":"chunk-CHRDKNUF.js","sourcesContent":["import { joinBasePath } from './base-path';\n\nconst domain = 'flexkit.io';\nexport const baseApiUrl = `https://${domain}`;\nconst baseProjectApiUrl = (projectId?: string): string =>\n projectId ? `https://${projectId}.api.${domain}` : baseApiUrl;\n\ninterface ApiPaths {\n authProviders: string;\n completion: string;\n currentUser: string;\n loginOtpConfirm: string;\n loginOtpSend: string;\n logout: (basePath: string) => string;\n search: string;\n sessionId: string;\n upload: string;\n}\n\nexport const IMAGES_BASE_URL = `${baseApiUrl}/images/`;\n\nexport function apiPaths(projectId = ''): ApiPaths {\n return {\n authProviders: `/api/flexkit/${projectId}/auth/providers`,\n completion: `/api/flexkit/${projectId}/completion`,\n currentUser: `/api/flexkit/${projectId}/users/me`,\n loginOtpConfirm: `${baseProjectApiUrl(projectId)}/auth/otp/confirm`,\n loginOtpSend: `${baseProjectApiUrl(projectId)}/auth/otp/send`,\n logout: (basePath: string) => {\n const params = new URLSearchParams({\n redirect: joinBasePath(basePath, projectId),\n });\n\n return `/api/flexkit/${projectId}/auth/logout?${params.toString()}`;\n },\n search: `/api/flexkit/${projectId}/search`,\n sessionId: `${baseProjectApiUrl(projectId)}/api/auth/login/session`,\n upload: `/api/flexkit/${projectId}/upload`,\n };\n}\n"]}