@flexkit/studio 0.2.19 → 0.2.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/activity-nav-button-7RLCHOFV.js +2 -0
- package/dist/{activity-nav-button-V5DFHADL.js.map → activity-nav-button-7RLCHOFV.js.map} +1 -1
- package/dist/chat-page-QKSMDM7A.js +4 -0
- package/dist/chat-page-QKSMDM7A.js.map +1 -0
- package/dist/chunk-3TAYSYYW.js +7 -0
- package/dist/{chunk-XNHSHVG2.js.map → chunk-3TAYSYYW.js.map} +1 -1
- package/dist/{chunk-ME55YNBF.js → chunk-4PUMSUJL.js} +2 -2
- package/dist/{chunk-ME55YNBF.js.map → chunk-4PUMSUJL.js.map} +1 -1
- package/dist/{chunk-BMX4URYN.js → chunk-7ERLYAPR.js} +2 -2
- package/dist/{chunk-BMX4URYN.js.map → chunk-7ERLYAPR.js.map} +1 -1
- package/dist/chunk-7KLXWCDS.js +3 -0
- package/dist/chunk-7KLXWCDS.js.map +1 -0
- package/dist/{chunk-4IEOAKKK.js → chunk-7KRDPQXX.js} +2 -2
- package/dist/{chunk-4IEOAKKK.js.map → chunk-7KRDPQXX.js.map} +1 -1
- package/dist/{chunk-HCJAM5LG.js → chunk-AFLZA2R5.js} +2 -2
- package/dist/{chunk-HCJAM5LG.js.map → chunk-AFLZA2R5.js.map} +1 -1
- package/dist/chunk-AHR2EZGG.js +4 -0
- package/dist/{chunk-VMWUMFUL.js.map → chunk-AHR2EZGG.js.map} +1 -1
- package/dist/chunk-BXUW6OXZ.js +2 -0
- package/dist/{chunk-ZKA2HKNI.js.map → chunk-BXUW6OXZ.js.map} +1 -1
- package/dist/chunk-DZS344SD.js +378 -0
- package/dist/chunk-DZS344SD.js.map +1 -0
- package/dist/chunk-ELOJGLAR.js +2 -0
- package/dist/chunk-ELOJGLAR.js.map +1 -0
- package/dist/chunk-HKN6BX5U.js +2 -0
- package/dist/chunk-HKN6BX5U.js.map +1 -0
- package/dist/{chunk-DFLAX7EE.js → chunk-I4INIJFN.js} +2 -2
- package/dist/{chunk-DFLAX7EE.js.map → chunk-I4INIJFN.js.map} +1 -1
- package/dist/{chunk-QWQHXMXW.js → chunk-MJICM7YP.js} +2 -2
- package/dist/{chunk-QWQHXMXW.js.map → chunk-MJICM7YP.js.map} +1 -1
- package/dist/chunk-MLHXPTBT.js +2 -0
- package/dist/chunk-MLHXPTBT.js.map +1 -0
- package/dist/{chunk-H2RWSC56.js → chunk-PLZUH56T.js} +3 -3
- package/dist/{chunk-H2RWSC56.js.map → chunk-PLZUH56T.js.map} +1 -1
- package/dist/{chunk-UOR437J2.js → chunk-QCVQJN5O.js} +2 -2
- package/dist/{chunk-UOR437J2.js.map → chunk-QCVQJN5O.js.map} +1 -1
- package/dist/{chunk-DHVKE36X.js → chunk-SY67F62K.js} +3 -3
- package/dist/{chunk-DHVKE36X.js.map → chunk-SY67F62K.js.map} +1 -1
- package/dist/chunk-T2DOW23R.js +3 -0
- package/dist/chunk-T2DOW23R.js.map +1 -0
- package/dist/{chunk-6RRB47OZ.js → chunk-YBLY77TV.js} +5 -5
- package/dist/{chunk-6RRB47OZ.js.map → chunk-YBLY77TV.js.map} +1 -1
- package/dist/{chunk-V6RB45UU.js → chunk-YJM2RPTA.js} +2 -2
- package/dist/{chunk-V6RB45UU.js.map → chunk-YJM2RPTA.js.map} +1 -1
- package/dist/{entry-3JSFO4OU.js → entry-BKWT63OH.js} +2 -2
- package/dist/{entry-3JSFO4OU.js.map → entry-BKWT63OH.js.map} +1 -1
- package/dist/index.css +24 -0
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/list-F2MN4VI4.js +3 -0
- package/dist/{list-SY3L2ACH.js.map → list-F2MN4VI4.js.map} +1 -1
- package/dist/list-RFIARR7J.js +2 -0
- package/dist/{list-Z2C74QDN.js.map → list-RFIARR7J.js.map} +1 -1
- package/dist/{pages-INCA54HE.js → pages-6YG37BSV.js} +3 -3
- package/dist/{pages-INCA54HE.js.map → pages-6YG37BSV.js.map} +1 -1
- package/dist/plugin-pages-R5QCB5GZ.js +2 -0
- package/dist/{plugin-pages-WO3MCJKC.js.map → plugin-pages-R5QCB5GZ.js.map} +1 -1
- package/dist/record-links-BACU2DWS.js +2 -0
- package/dist/{record-links-CTB4SC4J.js.map → record-links-BACU2DWS.js.map} +1 -1
- package/dist/root-6FML7PJC.js +23 -0
- package/dist/{root-DOOWSYWY.js.map → root-6FML7PJC.js.map} +1 -1
- package/dist/{root-XHXX3SZG.js → root-FCO3MQTE.js} +3 -3
- package/dist/{root-XHXX3SZG.js.map → root-FCO3MQTE.js.map} +1 -1
- package/dist/{root-JA2LFGNX.js → root-MQ5FZRMQ.js} +2 -2
- package/dist/{root-JA2LFGNX.js.map → root-MQ5FZRMQ.js.map} +1 -1
- package/dist/root-MTJAYVPT.js +14 -0
- package/dist/root-MTJAYVPT.js.map +1 -0
- package/dist/{root-6MSWGFZX.js → root-U4QMDA3Q.js} +2 -2
- package/dist/{root-6MSWGFZX.js.map → root-U4QMDA3Q.js.map} +1 -1
- package/dist/root-UCQDMHDV.js +2 -0
- package/dist/{root-OGX4DUTM.js.map → root-UCQDMHDV.js.map} +1 -1
- package/dist/{search-Z4M4R4NJ.js → search-7DVZZIZ6.js} +2 -2
- package/dist/{search-Z4M4R4NJ.js.map → search-7DVZZIZ6.js.map} +1 -1
- package/dist/skills-pages-EPIBHZVO.js +2 -0
- package/dist/skills-pages-EPIBHZVO.js.map +1 -0
- package/dist/source-F6B2UBWX.js +2 -0
- package/dist/{source-5J56KIFA.js.map → source-F6B2UBWX.js.map} +1 -1
- package/package.json +4 -1
- package/dist/activity-nav-button-V5DFHADL.js +0 -2
- package/dist/chat-page-LAK4TFN4.js +0 -4
- package/dist/chat-page-LAK4TFN4.js.map +0 -1
- package/dist/chunk-A7XHA2P6.js +0 -3
- package/dist/chunk-A7XHA2P6.js.map +0 -1
- package/dist/chunk-BMO7JFAX.js +0 -2
- package/dist/chunk-BMO7JFAX.js.map +0 -1
- package/dist/chunk-OOYCTZ3C.js +0 -379
- package/dist/chunk-OOYCTZ3C.js.map +0 -1
- package/dist/chunk-VMWUMFUL.js +0 -4
- package/dist/chunk-XNHSHVG2.js +0 -7
- package/dist/chunk-ZKA2HKNI.js +0 -2
- package/dist/list-SY3L2ACH.js +0 -3
- package/dist/list-Z2C74QDN.js +0 -2
- package/dist/plugin-pages-WO3MCJKC.js +0 -2
- package/dist/record-links-CTB4SC4J.js +0 -2
- package/dist/root-B4D3C37Q.js +0 -2
- package/dist/root-B4D3C37Q.js.map +0 -1
- package/dist/root-DOOWSYWY.js +0 -23
- package/dist/root-OGX4DUTM.js +0 -2
- package/dist/skills-pages-TP2XQPCQ.js +0 -2
- package/dist/skills-pages-TP2XQPCQ.js.map +0 -1
- package/dist/source-5J56KIFA.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {q as q$1,o,r}from'./chunk-DZS344SD.js';import {f}from'./chunk-PLZUH56T.js';import {d}from'./chunk-2HYQVMP3.js';import {useCallback}from'react';import {toast}from'sonner';import {useApolloClient}from'@apollo/client/react';function E(i){let{currentProjectSchema:t}=f();return useCallback(a=>{t&&q$1(o(i,t),a);},[i,t])}var g=["image/jpeg","image/png","image/webp","image/vnd.microsoft.icon","image/bmp","image/gif","image/tiff","image/svg+xml","image/avif","image/heic","image/heif","image/heic-sequence","image/heif-sequence","image/apng","audio/aac","audio/mpeg","audio/wav","audio/webm","audio/midi","audio/x-midi","audio/ogg","video/x-msvideo","video/mp4","video/mpeg","video/webm","video/quicktime","video/ogg","video/mp2t","video/3gpp","video/3gpp2","application/x-7z-compressed","application/zip","application/vnd.amazon.ebook","application/octet-stream","application/epub+zip","application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-fontobject","application/gzip","application/x-gzip","application/java-archive","application/json","application/ld+json","text/javascript","application/vnd.oasis.opendocument.presentation","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.text","application/ogg","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.rar","application/x-tar","application/vnd.visio","application/xhtml+xml","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/xml"];function F(i,t){if(!i.type)return true;let a=t?t.split(",").map(e=>e.trim()).filter(Boolean):g;return a.length===0?true:a.some(e=>e.endsWith("/*")?i.type.startsWith(e.slice(0,-1)):i.type===e)}async function x(i,t){let a=new URLSearchParams({filename:i.name}),e=await fetch(`${d(t).assets}?${a.toString()}`,{method:"POST",headers:{"Content-Type":i.type||"application/octet-stream"},body:i});if(!e.ok)throw new Error(`Upload failed for ${i.name}`);let n=await e.json(),o={_id:n._id,path:n.path??"",originalFilename:n.originalFilename??i.name,size:n.size??i.size,mimeType:n.mimeType??i.type,lqip:n.lqip??"",width:n.width??0,height:n.height??0};return {pathname:o.path,lqip:o.lqip||void 0,originalFilename:o.originalFilename,size:o.size,mimeType:o.mimeType,width:o.width||void 0,height:o.height||void 0,_id:o._id,asset:o}}async function h(i,t){let{projectId:a,accept:e,maxBytes:n=4*1024*1024,onUploadStart:o}=t,l=[];for(let p of Array.from(i)){if(p.size>n){toast.error(`File size too big (max ${(n/(1024*1024)).toFixed(0)}MB): ${p.name}`);continue}if(!F(p,e)){toast.error(`Unsupported file type: ${p.name}`);continue}l.push(p);}if(l.length===0)return [];o?.();try{let p=await Promise.all(l.map(async f=>x(f,a)));return p.length>0&&toast.success(`Uploaded ${p.length} file${p.length>1?"s":""}`),p}catch(p){return console.error(p),toast.error("Upload failed. Please try again."),[]}}async function b(i){let{accept:t,multiple:a=true}=i,e=document.createElement("input");e.type="file",e.accept=t??g.join(","),e.multiple=a,e.style.display="none",document.body.appendChild(e);try{let n=await new Promise(o=>{e.addEventListener("change",()=>o(e.files),{once:!0}),e.addEventListener("cancel",()=>o(null),{once:!0}),e.click();});return !n||n.length===0?[]:h(n,i)}finally{document.body.removeChild(e);}}function q(){let i=useApolloClient();return useCallback(async t=>{let a=t.files?await h(t.files,t):await b(t);return a.length>0&&await r(i,"GetAssets").catch(e=>{console.error("Error refreshing asset lists after upload:",e);}),a},[i])}export{E as a,x as b,q as c};//# sourceMappingURL=chunk-YJM2RPTA.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-YJM2RPTA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphql-client/use-patch-entity-list.ts","../src/core/upload.ts"],"names":["usePatchEntityList","entityNameOrPlural","schema","useConfig","useCallback","patches","scheduleEntityListPatch","getEntityListQueryName","ACCEPTED_MIME_TYPES","isAcceptedMimeType","file","accept","allowed","pattern","uploadAssetFile","projectId","params","response","apiPaths","data","asset","uploadSelectedFiles","files","options","maxBytes","onUploadStart","validFiles","toast","uploads","error","openFileDialogAndUpload","multiple","input","resolve","useUploadAssets","apolloClient","useApolloClient","scheduleEntityListRefetch"],"mappings":"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","file":"chunk-V6RB45UU.js","sourcesContent":["import { useCallback } from 'react';\nimport { useConfig } from '../core/config/config-context';\nimport {\n getEntityListQueryName,\n scheduleEntityListPatch,\n type EntityListRowPatch,\n} from './refetch-entity-lists';\n\n/**\n * Patch active list rows for an entity without a soft-refetch.\n * Prefer this after mutations that only change row fields (e.g. tag connect/disconnect).\n */\nexport function usePatchEntityList(entityNameOrPlural: string): (patches: EntityListRowPatch[]) => void {\n const { currentProjectSchema: schema } = useConfig();\n\n return useCallback(\n (patches: EntityListRowPatch[]) => {\n if (!schema) {\n return;\n }\n\n scheduleEntityListPatch(getEntityListQueryName(entityNameOrPlural, schema), patches);\n },\n [entityNameOrPlural, schema]\n );\n}\n","import { useCallback } from 'react';\nimport { toast } from 'sonner';\nimport { useApolloClient } from '@apollo/client/react';\nimport { apiPaths } from './api-paths';\nimport { scheduleEntityListRefetch } from '../graphql-client/refetch-entity-lists';\nimport type { OrderedAssetValue } from '../graphql-client/types';\n\nexport const ACCEPTED_MIME_TYPES = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/vnd.microsoft.icon',\n 'image/bmp',\n 'image/gif',\n 'image/tiff',\n 'image/svg+xml',\n 'image/avif',\n 'image/heic',\n 'image/heif',\n 'image/heic-sequence',\n 'image/heif-sequence',\n 'image/apng',\n 'audio/aac',\n 'audio/mpeg',\n 'audio/wav',\n 'audio/webm',\n 'audio/midi',\n 'audio/x-midi',\n 'audio/ogg',\n 'video/x-msvideo',\n 'video/mp4',\n 'video/mpeg',\n 'video/webm',\n 'video/quicktime',\n 'video/ogg',\n 'video/mp2t',\n 'video/3gpp',\n 'video/3gpp2',\n 'application/x-7z-compressed',\n 'application/zip',\n 'application/vnd.amazon.ebook',\n 'application/octet-stream',\n 'application/epub+zip',\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-fontobject',\n 'application/gzip',\n 'application/x-gzip',\n 'application/java-archive',\n 'application/json',\n 'application/ld+json',\n 'text/javascript',\n 'application/vnd.oasis.opendocument.presentation',\n 'application/vnd.oasis.opendocument.spreadsheet',\n 'application/vnd.oasis.opendocument.text',\n 'application/ogg',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.rar',\n 'application/x-tar',\n 'application/vnd.visio',\n 'application/xhtml+xml',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/xml',\n];\n\nexport type UploadedFileResult = {\n pathname: string;\n lqip?: string;\n size: number;\n mimeType: string;\n originalFilename: string;\n width?: number;\n height?: number;\n};\n\nexport type UploadedAssetResult = UploadedFileResult & {\n asset: OrderedAssetValue;\n _id: string;\n};\n\ntype AssetUploadResponse = {\n _id: string;\n path: string | null;\n mimeType: string | null;\n originalFilename: string | null;\n size: number | null;\n width: number | null;\n height: number | null;\n lqip: string | null;\n sha256: string | null;\n deduped: boolean;\n};\n\nexport type OpenFileDialogAndUploadOptions = {\n projectId: string | undefined;\n accept?: string;\n files?: File[] | FileList;\n multiple?: boolean;\n maxBytes?: number;\n onUploadStart?: () => void;\n};\n\nfunction isAcceptedMimeType(file: File, accept?: string): boolean {\n if (!file.type) {\n return true;\n }\n\n const allowed = accept\n ? accept\n .split(',')\n .map((pattern) => pattern.trim())\n .filter(Boolean)\n : ACCEPTED_MIME_TYPES;\n\n if (allowed.length === 0) {\n return true;\n }\n\n return allowed.some((pattern) => {\n if (pattern.endsWith('/*')) {\n return file.type.startsWith(pattern.slice(0, -1));\n }\n\n return file.type === pattern;\n });\n}\n\n/**\n * Uploads a single file to the one-shot /assets endpoint, which stores the\n * blob and creates the _asset node in a single request.\n */\nexport async function uploadAssetFile(file: File, projectId: string | undefined): Promise<UploadedAssetResult> {\n const params = new URLSearchParams({ filename: file.name });\n const response = await fetch(`${apiPaths(projectId).assets}?${params.toString()}`, {\n method: 'POST',\n headers: { 'Content-Type': file.type || 'application/octet-stream' },\n body: file,\n });\n\n if (!response.ok) {\n throw new Error(`Upload failed for ${file.name}`);\n }\n\n const data = (await response.json()) as AssetUploadResponse;\n const asset: OrderedAssetValue = {\n _id: data._id,\n path: data.path ?? '',\n originalFilename: data.originalFilename ?? file.name,\n size: data.size ?? file.size,\n mimeType: data.mimeType ?? file.type,\n lqip: data.lqip ?? '',\n width: data.width ?? 0,\n height: data.height ?? 0,\n };\n\n return {\n pathname: asset.path,\n lqip: asset.lqip || undefined,\n originalFilename: asset.originalFilename,\n size: asset.size,\n mimeType: asset.mimeType,\n width: asset.width || undefined,\n height: asset.height || undefined,\n _id: asset._id,\n asset,\n };\n}\n\nasync function uploadSelectedFiles(\n files: File[] | FileList,\n options: OpenFileDialogAndUploadOptions\n): Promise<UploadedAssetResult[]> {\n const { projectId, accept, maxBytes = 4 * 1024 * 1024, onUploadStart } = options;\n const validFiles: File[] = [];\n\n for (const file of Array.from(files)) {\n if (file.size > maxBytes) {\n toast.error(`File size too big (max ${(maxBytes / (1024 * 1024)).toFixed(0)}MB): ${file.name}`);\n\n continue;\n }\n\n if (!isAcceptedMimeType(file, accept)) {\n toast.error(`Unsupported file type: ${file.name}`);\n\n continue;\n }\n\n validFiles.push(file);\n }\n\n if (validFiles.length === 0) {\n return [];\n }\n\n onUploadStart?.();\n\n try {\n const uploads = await Promise.all(validFiles.map(async (file) => uploadAssetFile(file, projectId)));\n\n if (uploads.length > 0) {\n toast.success(`Uploaded ${uploads.length} file${uploads.length > 1 ? 's' : ''}`);\n }\n\n return uploads;\n } catch (error) {\n console.error(error);\n toast.error('Upload failed. Please try again.');\n\n return [];\n }\n}\n\n/**\n * Opens a native file picker and uploads selected files to the Flexkit assets\n * endpoint, which also creates an asset node in the database.\n * Returns a list of uploaded file results. Skips files that exceed maxBytes.\n */\nasync function openFileDialogAndUpload(options: OpenFileDialogAndUploadOptions): Promise<UploadedAssetResult[]> {\n const { accept, multiple = true } = options;\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = accept ?? ACCEPTED_MIME_TYPES.join(',');\n input.multiple = multiple;\n input.style.display = 'none';\n document.body.appendChild(input);\n\n try {\n const files = await new Promise<FileList | null>((resolve) => {\n input.addEventListener('change', () => resolve(input.files), { once: true });\n input.addEventListener('cancel', () => resolve(null), { once: true });\n input.click();\n });\n\n if (!files || files.length === 0) {\n return [];\n }\n\n return uploadSelectedFiles(files, options);\n } finally {\n document.body.removeChild(input);\n }\n}\n\nexport function useUploadAssets(): (options: OpenFileDialogAndUploadOptions) => Promise<UploadedAssetResult[]> {\n const apolloClient = useApolloClient();\n\n return useCallback(\n async (options: OpenFileDialogAndUploadOptions) => {\n const uploads = options.files\n ? await uploadSelectedFiles(options.files, options)\n : await openFileDialogAndUpload(options);\n\n if (uploads.length > 0) {\n // Upload is outside Apollo; soft-refresh mounted asset lists via useEntityQuery.\n await scheduleEntityListRefetch(apolloClient, 'GetAssets').catch((error: unknown) => {\n console.error('Error refreshing asset lists after upload:', error);\n });\n }\n\n return uploads;\n },\n [apolloClient]\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphql-client/use-patch-entity-list.ts","../src/core/upload.ts"],"names":["usePatchEntityList","entityNameOrPlural","schema","useConfig","useCallback","patches","scheduleEntityListPatch","getEntityListQueryName","ACCEPTED_MIME_TYPES","isAcceptedMimeType","file","accept","allowed","pattern","uploadAssetFile","projectId","params","response","apiPaths","data","asset","uploadSelectedFiles","files","options","maxBytes","onUploadStart","validFiles","toast","uploads","error","openFileDialogAndUpload","multiple","input","resolve","useUploadAssets","apolloClient","useApolloClient","scheduleEntityListRefetch"],"mappings":"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","file":"chunk-YJM2RPTA.js","sourcesContent":["import { useCallback } from 'react';\nimport { useConfig } from '../core/config/config-context';\nimport {\n getEntityListQueryName,\n scheduleEntityListPatch,\n type EntityListRowPatch,\n} from './refetch-entity-lists';\n\n/**\n * Patch active list rows for an entity without a soft-refetch.\n * Prefer this after mutations that only change row fields (e.g. tag connect/disconnect).\n */\nexport function usePatchEntityList(entityNameOrPlural: string): (patches: EntityListRowPatch[]) => void {\n const { currentProjectSchema: schema } = useConfig();\n\n return useCallback(\n (patches: EntityListRowPatch[]) => {\n if (!schema) {\n return;\n }\n\n scheduleEntityListPatch(getEntityListQueryName(entityNameOrPlural, schema), patches);\n },\n [entityNameOrPlural, schema]\n );\n}\n","import { useCallback } from 'react';\nimport { toast } from 'sonner';\nimport { useApolloClient } from '@apollo/client/react';\nimport { apiPaths } from './api-paths';\nimport { scheduleEntityListRefetch } from '../graphql-client/refetch-entity-lists';\nimport type { OrderedAssetValue } from '../graphql-client/types';\n\nexport const ACCEPTED_MIME_TYPES = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/vnd.microsoft.icon',\n 'image/bmp',\n 'image/gif',\n 'image/tiff',\n 'image/svg+xml',\n 'image/avif',\n 'image/heic',\n 'image/heif',\n 'image/heic-sequence',\n 'image/heif-sequence',\n 'image/apng',\n 'audio/aac',\n 'audio/mpeg',\n 'audio/wav',\n 'audio/webm',\n 'audio/midi',\n 'audio/x-midi',\n 'audio/ogg',\n 'video/x-msvideo',\n 'video/mp4',\n 'video/mpeg',\n 'video/webm',\n 'video/quicktime',\n 'video/ogg',\n 'video/mp2t',\n 'video/3gpp',\n 'video/3gpp2',\n 'application/x-7z-compressed',\n 'application/zip',\n 'application/vnd.amazon.ebook',\n 'application/octet-stream',\n 'application/epub+zip',\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-fontobject',\n 'application/gzip',\n 'application/x-gzip',\n 'application/java-archive',\n 'application/json',\n 'application/ld+json',\n 'text/javascript',\n 'application/vnd.oasis.opendocument.presentation',\n 'application/vnd.oasis.opendocument.spreadsheet',\n 'application/vnd.oasis.opendocument.text',\n 'application/ogg',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.rar',\n 'application/x-tar',\n 'application/vnd.visio',\n 'application/xhtml+xml',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/xml',\n];\n\nexport type UploadedFileResult = {\n pathname: string;\n lqip?: string;\n size: number;\n mimeType: string;\n originalFilename: string;\n width?: number;\n height?: number;\n};\n\nexport type UploadedAssetResult = UploadedFileResult & {\n asset: OrderedAssetValue;\n _id: string;\n};\n\ntype AssetUploadResponse = {\n _id: string;\n path: string | null;\n mimeType: string | null;\n originalFilename: string | null;\n size: number | null;\n width: number | null;\n height: number | null;\n lqip: string | null;\n sha256: string | null;\n deduped: boolean;\n};\n\nexport type OpenFileDialogAndUploadOptions = {\n projectId: string | undefined;\n accept?: string;\n files?: File[] | FileList;\n multiple?: boolean;\n maxBytes?: number;\n onUploadStart?: () => void;\n};\n\nfunction isAcceptedMimeType(file: File, accept?: string): boolean {\n if (!file.type) {\n return true;\n }\n\n const allowed = accept\n ? accept\n .split(',')\n .map((pattern) => pattern.trim())\n .filter(Boolean)\n : ACCEPTED_MIME_TYPES;\n\n if (allowed.length === 0) {\n return true;\n }\n\n return allowed.some((pattern) => {\n if (pattern.endsWith('/*')) {\n return file.type.startsWith(pattern.slice(0, -1));\n }\n\n return file.type === pattern;\n });\n}\n\n/**\n * Uploads a single file to the one-shot /assets endpoint, which stores the\n * blob and creates the _asset node in a single request.\n */\nexport async function uploadAssetFile(file: File, projectId: string | undefined): Promise<UploadedAssetResult> {\n const params = new URLSearchParams({ filename: file.name });\n const response = await fetch(`${apiPaths(projectId).assets}?${params.toString()}`, {\n method: 'POST',\n headers: { 'Content-Type': file.type || 'application/octet-stream' },\n body: file,\n });\n\n if (!response.ok) {\n throw new Error(`Upload failed for ${file.name}`);\n }\n\n const data = (await response.json()) as AssetUploadResponse;\n const asset: OrderedAssetValue = {\n _id: data._id,\n path: data.path ?? '',\n originalFilename: data.originalFilename ?? file.name,\n size: data.size ?? file.size,\n mimeType: data.mimeType ?? file.type,\n lqip: data.lqip ?? '',\n width: data.width ?? 0,\n height: data.height ?? 0,\n };\n\n return {\n pathname: asset.path,\n lqip: asset.lqip || undefined,\n originalFilename: asset.originalFilename,\n size: asset.size,\n mimeType: asset.mimeType,\n width: asset.width || undefined,\n height: asset.height || undefined,\n _id: asset._id,\n asset,\n };\n}\n\nasync function uploadSelectedFiles(\n files: File[] | FileList,\n options: OpenFileDialogAndUploadOptions\n): Promise<UploadedAssetResult[]> {\n const { projectId, accept, maxBytes = 4 * 1024 * 1024, onUploadStart } = options;\n const validFiles: File[] = [];\n\n for (const file of Array.from(files)) {\n if (file.size > maxBytes) {\n toast.error(`File size too big (max ${(maxBytes / (1024 * 1024)).toFixed(0)}MB): ${file.name}`);\n\n continue;\n }\n\n if (!isAcceptedMimeType(file, accept)) {\n toast.error(`Unsupported file type: ${file.name}`);\n\n continue;\n }\n\n validFiles.push(file);\n }\n\n if (validFiles.length === 0) {\n return [];\n }\n\n onUploadStart?.();\n\n try {\n const uploads = await Promise.all(validFiles.map(async (file) => uploadAssetFile(file, projectId)));\n\n if (uploads.length > 0) {\n toast.success(`Uploaded ${uploads.length} file${uploads.length > 1 ? 's' : ''}`);\n }\n\n return uploads;\n } catch (error) {\n console.error(error);\n toast.error('Upload failed. Please try again.');\n\n return [];\n }\n}\n\n/**\n * Opens a native file picker and uploads selected files to the Flexkit assets\n * endpoint, which also creates an asset node in the database.\n * Returns a list of uploaded file results. Skips files that exceed maxBytes.\n */\nasync function openFileDialogAndUpload(options: OpenFileDialogAndUploadOptions): Promise<UploadedAssetResult[]> {\n const { accept, multiple = true } = options;\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = accept ?? ACCEPTED_MIME_TYPES.join(',');\n input.multiple = multiple;\n input.style.display = 'none';\n document.body.appendChild(input);\n\n try {\n const files = await new Promise<FileList | null>((resolve) => {\n input.addEventListener('change', () => resolve(input.files), { once: true });\n input.addEventListener('cancel', () => resolve(null), { once: true });\n input.click();\n });\n\n if (!files || files.length === 0) {\n return [];\n }\n\n return uploadSelectedFiles(files, options);\n } finally {\n document.body.removeChild(input);\n }\n}\n\nexport function useUploadAssets(): (options: OpenFileDialogAndUploadOptions) => Promise<UploadedAssetResult[]> {\n const apolloClient = useApolloClient();\n\n return useCallback(\n async (options: OpenFileDialogAndUploadOptions) => {\n const uploads = options.files\n ? await uploadSelectedFiles(options.files, options)\n : await openFileDialogAndUpload(options);\n\n if (uploads.length > 0) {\n // Upload is outside Apollo; soft-refresh mounted asset lists via useEntityQuery.\n await scheduleEntityListRefetch(apolloClient, 'GetAssets').catch((error: unknown) => {\n console.error('Error refreshing asset lists after upload:', error);\n });\n }\n\n return uploads;\n },\n [apolloClient]\n );\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {g,e,
|
|
2
|
-
//# sourceMappingURL=entry-
|
|
1
|
+
import'./index.css';import {g,e,x}from'./chunk-4PUMSUJL.js';import'./chunk-YDVO6XWD.js';import'./chunk-ERDARDGB.js';import {f}from'./chunk-PLZUH56T.js';import'./chunk-2HYQVMP3.js';import'./chunk-5CVDMZUI.js';import'./chunk-DGIY4SKN.js';import'./chunk-SZEGGBOC.js';import'./chunk-32ZU4MLE.js';import'./chunk-U45E5X3H.js';import'./chunk-HDOIOXMP.js';import {b,c,e as e$1,a}from'./chunk-USNXQOMJ.js';import {b as b$1}from'./chunk-6NRQMG26.js';import'./chunk-O2QMYUPS.js';import {Waypoints}from'lucide-react';import {useNavigate}from'react-router-dom';import {jsxs,jsx}from'react/jsx-runtime';function S({entityName:n,selectedIds:t}){let{currentProjectId:i,currentProjectSchema:r}=f(),l=useNavigate(),e$2=g(r,n);if(!i||!e$2||e(e$2).length===0)return null;let a=t.length>0?`Open ${t.length} in Graph`:"Open in Graph";return jsxs(b,{children:[jsx(c,{asChild:true,children:jsxs(b$1,{"aria-label":a,className:"fk:mr-2 fk:h-8",onClick:()=>l(x(i,{entity:n,ids:t})),size:"sm",variant:"outline",children:[jsx(Waypoints,{className:"fk:size-4",strokeWidth:1.5}),t.length>0?`Graph (${t.length})`:"Graph"]})}),jsx(e$1,{children:t.length>0?"Show the selected records and their relationships":"Explore these records as a graph"})]})}function B({entityName:n,recordId:t,onNavigate:i}){let{currentProjectId:r,currentProjectSchema:l}=f(),e$2=useNavigate(),a$1=g(l,n);return !r||!a$1||!t||e(a$1).length===0?null:jsx(a,{children:jsxs(b,{children:[jsx(c,{asChild:true,children:jsx(b$1,{"aria-label":"View in Graph",className:"fk:h-9 fk:w-9",onClick:()=>{e$2(x(r,{entity:n,ids:[t]})),i?.();},size:"icon",variant:"outline",children:jsx(Waypoints,{className:"fk:size-4",strokeWidth:1.5})})}),jsx(e$1,{children:"View in Graph"})]})})}export{S as EntityGraphButton,B as RecordGraphButton};//# sourceMappingURL=entry-BKWT63OH.js.map
|
|
2
|
+
//# sourceMappingURL=entry-BKWT63OH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/apps/graph/entry.tsx"],"names":["EntityGraphButton","entityName","selectedIds","currentProjectId","currentProjectSchema","useConfig","navigate","useNavigate","entity","getEntity","getRelationshipAttributes","label","jsxs","Tooltip","jsx","TooltipTrigger","Button","graphPath","WaypointsIcon","TooltipContent","RecordGraphButton","recordId","onNavigate","TooltipProvider"],"mappings":"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","file":"entry-
|
|
1
|
+
{"version":3,"sources":["../src/apps/graph/entry.tsx"],"names":["EntityGraphButton","entityName","selectedIds","currentProjectId","currentProjectSchema","useConfig","navigate","useNavigate","entity","getEntity","getRelationshipAttributes","label","jsxs","Tooltip","jsx","TooltipTrigger","Button","graphPath","WaypointsIcon","TooltipContent","RecordGraphButton","recordId","onNavigate","TooltipProvider"],"mappings":"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","file":"entry-BKWT63OH.js","sourcesContent":["'use client';\n\nimport type { JSX } from 'react';\nimport { Waypoints as WaypointsIcon } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useConfig } from '../../core/config/config-context';\nimport { Button, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui';\nimport { getEntity, getRelationshipAttributes, graphPath } from './graph';\n\n/**\n * \"Open in Graph\" for a Desk list: the selected records, or a sample of the\n * entity when nothing is selected. Hidden for entities without relationships.\n */\nexport function EntityGraphButton({ entityName, selectedIds }: { entityName: string; selectedIds: string[] }): JSX.Element | null {\n const { currentProjectId, currentProjectSchema } = useConfig();\n const navigate = useNavigate();\n const entity = getEntity(currentProjectSchema, entityName);\n\n if (!currentProjectId || !entity || getRelationshipAttributes(entity).length === 0) {\n return null;\n }\n\n const label = selectedIds.length > 0 ? `Open ${selectedIds.length} in Graph` : 'Open in Graph';\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n aria-label={label}\n className=\"fk:mr-2 fk:h-8\"\n onClick={() => navigate(graphPath(currentProjectId, { entity: entityName, ids: selectedIds }))}\n size=\"sm\"\n variant=\"outline\"\n >\n <WaypointsIcon className=\"fk:size-4\" strokeWidth={1.5} />\n {selectedIds.length > 0 ? `Graph (${selectedIds.length})` : 'Graph'}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n {selectedIds.length > 0 ? 'Show the selected records and their relationships' : 'Explore these records as a graph'}\n </TooltipContent>\n </Tooltip>\n );\n}\n\n/**\n * \"View in Graph\" in a record drawer: the record expanded one hop. The drawer\n * is mounted outside any app, so the tooltip brings its own provider.\n */\nexport function RecordGraphButton({\n entityName,\n recordId,\n onNavigate,\n}: {\n entityName: string;\n recordId: string;\n onNavigate?: () => void;\n}): JSX.Element | null {\n const { currentProjectId, currentProjectSchema } = useConfig();\n const navigate = useNavigate();\n const entity = getEntity(currentProjectSchema, entityName);\n\n if (!currentProjectId || !entity || !recordId || getRelationshipAttributes(entity).length === 0) {\n return null;\n }\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n aria-label=\"View in Graph\"\n className=\"fk:h-9 fk:w-9\"\n onClick={() => {\n navigate(graphPath(currentProjectId, { entity: entityName, ids: [recordId] }));\n onNavigate?.();\n }}\n size=\"icon\"\n variant=\"outline\"\n >\n <WaypointsIcon className=\"fk:size-4\" strokeWidth={1.5} />\n </Button>\n </TooltipTrigger>\n <TooltipContent>View in Graph</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n"]}
|
package/dist/index.css
CHANGED
|
@@ -462,6 +462,9 @@
|
|
|
462
462
|
.fk\:m-1\.5 {
|
|
463
463
|
margin: calc(var(--fk-spacing) * 1.5);
|
|
464
464
|
}
|
|
465
|
+
.fk\:m-3 {
|
|
466
|
+
margin: calc(var(--fk-spacing) * 3);
|
|
467
|
+
}
|
|
465
468
|
.fk\:m-auto {
|
|
466
469
|
margin: auto;
|
|
467
470
|
}
|
|
@@ -1460,6 +1463,9 @@
|
|
|
1460
1463
|
.fk\:h-10 {
|
|
1461
1464
|
height: calc(var(--fk-spacing) * 10);
|
|
1462
1465
|
}
|
|
1466
|
+
.fk\:h-11 {
|
|
1467
|
+
height: calc(var(--fk-spacing) * 11);
|
|
1468
|
+
}
|
|
1463
1469
|
.fk\:h-12 {
|
|
1464
1470
|
height: calc(var(--fk-spacing) * 12);
|
|
1465
1471
|
}
|
|
@@ -1538,6 +1544,9 @@
|
|
|
1538
1544
|
.fk\:max-h-\(--radix-select-content-available-height\) {
|
|
1539
1545
|
max-height: var(--radix-select-content-available-height);
|
|
1540
1546
|
}
|
|
1547
|
+
.fk\:max-h-40 {
|
|
1548
|
+
max-height: calc(var(--fk-spacing) * 40);
|
|
1549
|
+
}
|
|
1541
1550
|
.fk\:max-h-48 {
|
|
1542
1551
|
max-height: calc(var(--fk-spacing) * 48);
|
|
1543
1552
|
}
|
|
@@ -1556,6 +1565,9 @@
|
|
|
1556
1565
|
.fk\:max-h-80 {
|
|
1557
1566
|
max-height: calc(var(--fk-spacing) * 80);
|
|
1558
1567
|
}
|
|
1568
|
+
.fk\:max-h-\[45\%\] {
|
|
1569
|
+
max-height: 45%;
|
|
1570
|
+
}
|
|
1559
1571
|
.fk\:max-h-\[85vh\] {
|
|
1560
1572
|
max-height: 85vh;
|
|
1561
1573
|
}
|
|
@@ -1757,6 +1769,9 @@
|
|
|
1757
1769
|
.fk\:w-\[20px\] {
|
|
1758
1770
|
width: 20px;
|
|
1759
1771
|
}
|
|
1772
|
+
.fk\:w-\[26rem\] {
|
|
1773
|
+
width: 26rem;
|
|
1774
|
+
}
|
|
1760
1775
|
.fk\:w-\[50\%\] {
|
|
1761
1776
|
width: 50%;
|
|
1762
1777
|
}
|
|
@@ -2602,6 +2617,12 @@
|
|
|
2602
2617
|
border-color: color-mix(in oklab, hsl(var(--destructive)) 30%, transparent);
|
|
2603
2618
|
}
|
|
2604
2619
|
}
|
|
2620
|
+
.fk\:border-destructive\/40 {
|
|
2621
|
+
border-color: hsl(var(--destructive));
|
|
2622
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2623
|
+
border-color: color-mix(in oklab, hsl(var(--destructive)) 40%, transparent);
|
|
2624
|
+
}
|
|
2625
|
+
}
|
|
2605
2626
|
.fk\:border-destructive\/50 {
|
|
2606
2627
|
border-color: hsl(var(--destructive));
|
|
2607
2628
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -8837,6 +8858,9 @@ html[data-desktop-platform] .flexkit-navbar {
|
|
|
8837
8858
|
html[data-desktop-platform] .flexkit-navbar :is( a, button, input, textarea, select, [role='button'], [role='combobox'], [role='listbox'], [role='menu'], [role='dialog'], [cmdk-root] ) {
|
|
8838
8859
|
-webkit-app-region: no-drag;
|
|
8839
8860
|
}
|
|
8861
|
+
html[data-desktop-platform] :is( [data-slot='drawer-viewport'], [data-slot='dialog-overlay'], [data-slot='sheet-overlay'], [data-slot='alert-dialog-overlay'] ) {
|
|
8862
|
+
-webkit-app-region: no-drag;
|
|
8863
|
+
}
|
|
8840
8864
|
html[data-desktop-platform='darwin'] .flexkit-navbar {
|
|
8841
8865
|
padding-left: 6.5rem;
|
|
8842
8866
|
}
|