@flexkit/studio 0.1.1 → 0.2.1
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/chat-page-H6I3XOKS.js +2 -0
- package/dist/chat-page-H6I3XOKS.js.map +1 -0
- package/dist/{chunk-OUSEULBR.js → chunk-2IRKGO2B.js} +4 -4
- package/dist/{chunk-OUSEULBR.js.map → chunk-2IRKGO2B.js.map} +1 -1
- package/dist/{chunk-3CPWATOI.js → chunk-5TQF5UQQ.js} +2 -2
- package/dist/{chunk-3CPWATOI.js.map → chunk-5TQF5UQQ.js.map} +1 -1
- package/dist/chunk-ANVO5P65.js +4 -0
- package/dist/{chunk-YINI2YKQ.js.map → chunk-ANVO5P65.js.map} +1 -1
- package/dist/chunk-BURKG2UC.js +6 -0
- package/dist/chunk-BURKG2UC.js.map +1 -0
- package/dist/chunk-GM5OZTHL.js +2 -0
- package/dist/{chunk-GZIMMYLK.js.map → chunk-GM5OZTHL.js.map} +1 -1
- package/dist/{chunk-7PDYCDX6.js → chunk-JYHZU2UZ.js} +2 -2
- package/dist/{chunk-7PDYCDX6.js.map → chunk-JYHZU2UZ.js.map} +1 -1
- package/dist/chunk-LQVZWFM2.js +2 -0
- package/dist/{chunk-QQUNCDUB.js.map → chunk-LQVZWFM2.js.map} +1 -1
- package/dist/{chunk-6LYEDKFY.js → chunk-QHDL6CA2.js} +3 -3
- package/dist/{chunk-6LYEDKFY.js.map → chunk-QHDL6CA2.js.map} +1 -1
- package/dist/{chunk-G4PYYHI3.js → chunk-S7M5CQ5S.js} +2 -2
- package/dist/{chunk-G4PYYHI3.js.map → chunk-S7M5CQ5S.js.map} +1 -1
- package/dist/chunk-ZBI744KS.js +3 -0
- package/dist/chunk-ZBI744KS.js.map +1 -0
- package/dist/index.css +6 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -4
- package/dist/list-ZQJ6NHKQ.js +2 -0
- package/dist/{list-SQCN7HA3.js.map → list-ZQJ6NHKQ.js.map} +1 -1
- package/dist/pages-2GQVTLL2.js +3 -0
- package/dist/pages-2GQVTLL2.js.map +1 -0
- package/dist/plugin-pages-E5TUDDT5.js +2 -0
- package/dist/{plugin-pages-AHOA6YJE.js.map → plugin-pages-E5TUDDT5.js.map} +1 -1
- package/dist/{root-IIILTOJI.js → root-BD4VN3RD.js} +3 -3
- package/dist/{root-IIILTOJI.js.map → root-BD4VN3RD.js.map} +1 -1
- package/dist/root-HC5QZ2JM.js +2 -0
- package/dist/{root-5ZW536V7.js.map → root-HC5QZ2JM.js.map} +1 -1
- package/dist/{root-QPQQ3DFJ.js → root-P6CVZ5ZB.js} +2 -2
- package/dist/{root-QPQQ3DFJ.js.map → root-P6CVZ5ZB.js.map} +1 -1
- package/dist/root-TXKDRPOK.js +23 -0
- package/dist/{root-4FGNRGCD.js.map → root-TXKDRPOK.js.map} +1 -1
- package/dist/{search-2K2BU4UU.js → search-PVXTPIYJ.js} +2 -2
- package/dist/{search-2K2BU4UU.js.map → search-PVXTPIYJ.js.map} +1 -1
- package/dist/{skills-pages-PSBRTFGK.js → skills-pages-N5KDEHLT.js} +2 -2
- package/dist/{skills-pages-PSBRTFGK.js.map → skills-pages-N5KDEHLT.js.map} +1 -1
- package/dist/spec-renderer-ZZ3GPVKU.js +2 -0
- package/dist/spec-renderer-ZZ3GPVKU.js.map +1 -0
- package/dist/ui.js +1 -1
- package/package.json +4 -4
- package/dist/chat-page-NWMI4XOE.js +0 -2
- package/dist/chat-page-NWMI4XOE.js.map +0 -1
- package/dist/chunk-GZIMMYLK.js +0 -2
- package/dist/chunk-NSYO57O3.js +0 -5
- package/dist/chunk-NSYO57O3.js.map +0 -1
- package/dist/chunk-QQUNCDUB.js +0 -2
- package/dist/chunk-W2EBZZAY.js +0 -3
- package/dist/chunk-W2EBZZAY.js.map +0 -1
- package/dist/chunk-YINI2YKQ.js +0 -4
- package/dist/list-SQCN7HA3.js +0 -2
- package/dist/pages-OIAPASPF.js +0 -3
- package/dist/pages-OIAPASPF.js.map +0 -1
- package/dist/plugin-pages-AHOA6YJE.js +0 -2
- package/dist/root-4FGNRGCD.js +0 -23
- package/dist/root-5ZW536V7.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {c,e as e$1}from'./chunk-P6BZ4QP7.js';import {
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {c,e as e$1}from'./chunk-P6BZ4QP7.js';import {g}from'./chunk-ZBI744KS.js';import {e}from'./chunk-NNA4MLFC.js';import {useMemo}from'react';import A from'swr';import {find,propEq}from'ramda';function T(n,i){let{scope:c$1}=c(),{currentProject:e$1}=g(),o=useMemo(()=>e$1?.schema??[],[e$1]),a=e$1?.scopes?.find(t=>t.isDefault)?.name??"default",m=i?.commonParams.q?JSON.stringify(i):null,{data:r,error:s,isLoading:y}=A(m,()=>fetch(e(n).search,{headers:{"Content-Type":"application/json"},body:JSON.stringify(i),method:"POST",mode:"cors"}).then(t=>t.json()));return {results:useMemo(()=>E(r?.results??[],n,o,c$1,a)??[],[r,a,n,o,c$1]),error:s,isLoading:y}}function E(n,i,c,e,o){return n?.filter(l=>l?.hits?.length>0).map(l=>{let a=l,m=a.collection.replace(`${i}_`,"").replace(/_\d+$/,""),r=find(propEq(m,"plural"))(c);if(!r)return [];let s=e$1(r)?.name??"",y=r?.name??m;return a.hits.map(({document:u})=>{let t=u[s],b=(t&&typeof t!="string"?t[e]??t[o]:null)??u[s],N=Object.entries(u).reduce((d,[p,f])=>{if(p!==s&&p!=="id"&&p!=="_updatedAt"){let _=typeof f!="string"?f[e]??f[o]:f;d[p]=_;}return d},{});return {_id:u.id,_entityName:y,_entityNamePlural:m,[s]:b,...N}})}).flat()}export{T as a};//# sourceMappingURL=chunk-5TQF5UQQ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-5TQF5UQQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/use-search.tsx"],"names":["useSearch","projectId","searchRequest","scope","useAppContext","currentProject","useConfig","schema","useMemo","defaultScope","s","swrKey","data","error","isLoading","useSWR","apiPaths","res","mapResults","results","result","item","entityNamePlural","entitySchema","find","propEq","primaryAttributeName","getDisplayAttribute","entityName","document","primaryAttribute","primaryAttributeValue","attributes","acc","key","value","scopedValue"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/core/use-search.tsx"],"names":["useSearch","projectId","searchRequest","scope","useAppContext","currentProject","useConfig","schema","useMemo","defaultScope","s","swrKey","data","error","isLoading","useSWR","apiPaths","res","mapResults","results","result","item","entityNamePlural","entitySchema","find","propEq","primaryAttributeName","getDisplayAttribute","entityName","document","primaryAttribute","primaryAttributeValue","attributes","acc","key","value","scopedValue"],"mappings":"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","file":"chunk-5TQF5UQQ.js","sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\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 { getDisplayAttribute } from './get-display-attribute';\nimport type { Entity, RawResultItem, RawSearchResultItems, SearchRequestProps, SearchResultItem } 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 { currentProject } = useConfig();\n const schema = useMemo(() => currentProject?.schema ?? [], [currentProject]);\n const scopes = currentProject?.scopes;\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 = useMemo(\n () => mapResults(data?.results ?? [], projectId, schema, scope, defaultScope) ?? [],\n [data, defaultScope, projectId, schema, scope]\n );\n\n return { results, error, isLoading };\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 = getDisplayAttribute(entitySchema)?.name ?? '';\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"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import'./index.css';import {A,C,B,p,o as o$1,h as h$1,i}from'./chunk-2IRKGO2B.js';import {d as d$1,c}from'./chunk-P6BZ4QP7.js';import {b}from'./chunk-7SK5YPHT.js';import {g as g$1}from'./chunk-ZBI744KS.js';import {ra}from'./chunk-QHDL6CA2.js';import {e,g,h,j,o,n,k}from'./chunk-SZEGGBOC.js';import {d}from'./chunk-5DHOBLAE.js';import {a,d as d$2,c as c$1,e as e$1,g as g$2}from'./chunk-HDOIOXMP.js';import {PencilIcon,Trash2Icon,Ellipsis,Settings2,RefreshCw,Loader2,Trash2}from'lucide-react';import {jsxs,jsx}from'react/jsx-runtime';import {useState}from'react';import {find,propEq}from'ramda';import {gql}from'@apollo/client';import {useApolloClient}from'@apollo/client/react';import {toast}from'sonner';function Me({entityName:l,entityNamePlural:a,row:r,options:s={canDelete:true,canEdit:true}}){let f=A(),E=b(),c=r.original._id,D=(s.canDelete??true)&&E,p=s.canEdit??true;function h$1(){f({type:"EditEntity",payload:{entityId:c,entityNamePlural:a}});}function d$1(){f({type:"DeleteEntity",payload:{entityId:c,entityName:l}});}return jsxs("div",{className:"fk:flex",children:[p&&jsxs(d,{className:"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1",onClick:h$1,variant:"ghost",children:[jsx(PencilIcon,{className:"fk:h-4 fk:w-4"}),jsx("span",{className:"fk:sr-only",children:"Edit"})]}),D&&!p&&jsxs(d,{className:"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1",onClick:d$1,variant:"ghost",children:[jsx(Trash2Icon,{className:"fk:h-4 fk:w-4"}),jsx("span",{className:"fk:sr-only",children:"Delete"})]}),p&&D&&jsxs(e,{children:[jsx(g,{asChild:true,children:jsxs(d,{className:"fk:flex fk:h-7 fk:w-7 fk:p-0",variant:"ghost",children:[jsx(Ellipsis,{className:"fk:h-4 fk:w-4"}),jsx("span",{className:"fk:sr-only",children:"Additional actions"})]})}),jsxs(h,{align:"end",className:"w-[160px]",children:[jsxs(j,{onClick:h$1,children:[jsx(PencilIcon,{className:"fk:mr-2 fk:h-4 fk:w-4"}),"Edit"]}),jsx(o,{}),jsxs(j,{className:"fk:text-destructive",onClick:d$1,children:[jsx(Trash2Icon,{className:"fk:mr-2 fk:h-4 fk:w-4"}),"Delete"]})]})]})]})}function Y({table:l}){return jsxs(e,{children:[jsx(g,{asChild:true,children:jsxs(d,{className:"fk:hidden fk:h-8 fk:lg:flex",size:"sm",variant:"outline",children:[jsx(Settings2,{className:"fk:mr-2 fk:h-4 fk:w-4"}),"View"]})}),jsxs(h,{align:"end",className:"fk:w-[150px]",children:[jsx(n,{children:"Toggle columns"}),jsx(o,{}),l.getAllColumns().filter(a=>typeof a.accessorFn<"u"&&a.getCanHide()).map(a=>jsx(k,{checked:a.getIsVisible(),className:"capitalize",onCheckedChange:r=>{a.toggleVisibility(!!r);},children:a.id},a.id))]})]})}function Ue({entityName:l,isReloading:a$1=false,onReload:r,table:s}){let f=A(),E=d$1(),c$2=c(),D=useApolloClient(),{currentProject:p$1,currentProjectId:h}=g$1(),d$3=p$1?.schema??[],w=p$1?.scopes,[ee,te,ae]=C(),[b$1,B$1]=useState(false),y=b(),m=s.getSelectedRowModel().rows.map(e=>e.original._id);function oe(){f({type:"AddEntity",payload:{entityName:l}});}function ne(e){E({type:"setScope",payload:{projectId:h,scope:e}});}async function le(e){if(e.length===0)return;let u=h$1(l,d$3,e);await new Promise((se,re)=>{te(gql`
|
|
2
|
+
${u}
|
|
3
|
+
`),ae({variables:{where:i(e)},update(x){for(let ce of e)x.evict({id:ce});},onCompleted:()=>{se();},onError:x=>{re(x);}}),ee(true);});}function ie(){let e=l==="_asset"?"asset":l.toLowerCase();f({type:"AlertDialog",payload:{options:{dialogTitle:`Delete ${m.length} ${e}${m.length>1?"s":""}`,dialogMessage:m.length>1?`Are you sure you want to delete the selected ${e}s? They will be deleted permanently.`:`Are you sure you want to delete the selected ${e}? The item will be deleted permanently.`,dialogCancelTitle:"Cancel",dialogActionLabel:"Delete",isDestructive:true,dialogActionSubmit:async()=>{B$1(true);try{let u=[...m];await le(u),s.resetRowSelection(),await p(D,o$1(l,d$3),u),toast.success(u.length>1?"Items successfully deleted.":"Item successfully deleted.");}catch{toast.error("Failed to delete selected items.");}finally{B$1(false);}},dialogActionCancel:()=>{}}}});}return jsxs("div",{className:"fk:flex fk:items-center fk:justify-between",children:[jsxs("div",{className:"fk:flex fk:flex-1 fk:items-center fk:space-x-2",children:[w&&w.length>0?jsxs(a,{defaultValue:c$2.scope,onValueChange:e=>{ne(e);},value:c$2.scope,children:[jsxs(d$2,{className:"fk:w-48!",id:"project",size:"sm",children:[jsx("span",{className:"fk:text-muted-foreground",children:"Scope:"}),jsx(c$1,{children:(find(propEq(c$2.scope??"","name"))(w)||null)?.label})]}),jsx(e$1,{children:w.map(e=>jsx(g$2,{value:e.name,children:e.label},e.name))})]}):null,jsx(Y,{table:s}),r?jsx(d,{"aria-label":"Reload",className:"fk:h-8",disabled:b$1||a$1,onClick:r,size:"icon-sm",variant:"outline",children:jsx(RefreshCw,{className:a$1?"fk:animate-spin":void 0})}):null,jsx(B,{table:s})]}),m.length>0?jsx(ra,{disabled:!y,children:jsxs(d,{className:"fk:h-8 fk:mr-2 fk:lg:flex",disabled:b$1||!y,onClick:ie,size:"sm",variant:"destructive",children:[b$1?jsx(Loader2,{className:"fk:mr-2 fk:h-4 fk:w-4 fk:animate-spin"}):jsx(Trash2,{className:"fk:mr-2 fk:h-4 fk:w-4"}),"Delete (",m.length,")"]})}):null,jsx(ra,{disabled:!y,children:jsx(d,{className:"fk:ml-auto fk:h-8 fk:lg:flex",disabled:b$1||!y,onClick:oe,size:"sm",variant:"default",children:"Create"})})]})}export{Me as a,Y as b,Ue as c};//# sourceMappingURL=chunk-ANVO5P65.js.map
|
|
4
|
+
//# sourceMappingURL=chunk-ANVO5P65.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data-grid/data-table-row-actions.tsx","../src/data-grid/data-table-view-options.tsx","../src/data-grid/data-table-toolbar.tsx"],"names":["DataTableRowActions","entityName","entityNamePlural","row","options","actionDispatch","useDispatch","canMutate","useCanMutate","entityId","canDelete","canEdit","handleEdit","handleDelete","jsxs","Button","jsx","PencilIcon","Trash2Icon","DropdownMenu","DropdownMenuTrigger","Ellipsis","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DataTableViewOptions","table","Settings2","DropdownMenuLabel","column","DropdownMenuCheckboxItem","value","DataTableToolbar","isReloading","onReload","appDispatch","useAppDispatch","appContext","useAppContext","apolloClient","useApolloClient","currentProject","currentProjectId","useConfig","schema","scopes","runMutation","setMutation","setOptions","useEntityMutation","isDeleting","setIsDeleting","useState","selectedIds","handleCreate","handleScopeChange","deleteSelected","ids","mutation","getEntityDeleteMutation","resolve","reject","gql","getEntityDeleteWhere","cache","id","error","handleBatchDelete","itemLabel","idsToDelete","scheduleEntityListRemoval","getEntityListQueryName","toast","Select","SelectTrigger","SelectValue","find","propEq","SelectContent","scopeItem","SelectItem","RefreshCw","DataTableSortedBy","PermissionTooltip","Loader2","Trash2"],"mappings":"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","file":"chunk-YINI2YKQ.js","sourcesContent":["'use client';\n\nimport type { JSX } from 'react';\nimport { Ellipsis, PencilIcon, Trash2Icon } from 'lucide-react';\nimport type { Row } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\nimport { useDispatch } from '../entities/actions-context';\nimport { useCanMutate } from '../core/permissions';\n\ninterface DataTableRowActionsProps<TData> {\n entityName: string;\n entityNamePlural: string;\n row: Row<TData>;\n options?: {\n canDelete?: boolean;\n canEdit?: boolean;\n };\n}\n\nexport function DataTableRowActions<TData>({\n entityName,\n entityNamePlural,\n row,\n options = { canDelete: true, canEdit: true },\n}: DataTableRowActionsProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const canMutate = useCanMutate();\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const entityId = row.original._id;\n // Read-only roles keep the pencil (the drawer doubles as their read view)\n // but lose the delete affordance entirely.\n const canDelete = (options.canDelete ?? true) && canMutate;\n const canEdit = options.canEdit ?? true;\n\n function handleEdit(): void {\n actionDispatch({ type: 'EditEntity', payload: { entityId, entityNamePlural } });\n }\n\n function handleDelete(): void {\n actionDispatch({ type: 'DeleteEntity', payload: { entityId, entityName } });\n }\n\n return (\n <div className=\"fk:flex\">\n {canEdit && (\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleEdit} variant=\"ghost\">\n <PencilIcon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Edit</span>\n </Button>\n )}\n {canDelete && !canEdit && (\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleDelete} variant=\"ghost\">\n <Trash2Icon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Delete</span>\n </Button>\n )}\n {canEdit && canDelete && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0\" variant=\"ghost\">\n <Ellipsis className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Additional actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[160px]\">\n <DropdownMenuItem onClick={handleEdit}>\n <PencilIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className=\"fk:text-destructive\" onClick={handleDelete}>\n <Trash2Icon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableViewOptions<TData>({ table }: DataTableViewOptionsProps<TData>): JSX.Element {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:hidden fk:h-8 fk:lg:flex\" size=\"sm\" variant=\"outline\">\n <Settings2 className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n checked={column.getIsVisible()}\n className=\"capitalize\"\n key={column.id}\n onCheckedChange={(value) => {\n column.toggleVisibility(Boolean(value));\n }}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport type { JSX } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { Table } from '@tanstack/react-table';\nimport { Loader2, RefreshCw, Trash2 } from 'lucide-react';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { toast } from 'sonner';\nimport { Button } from '../ui/primitives/button';\nimport { PermissionTooltip } from '../ui/components/permission-tooltip';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { useDispatch } from '../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport { useCanMutate } from '../core/permissions';\nimport { useConfig } from '../core/config/config-context';\nimport { DataTableViewOptions } from './data-table-view-options';\nimport { DataTableSortedBy } from './data-table-sorted-by';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation, getEntityDeleteWhere } from '../graphql-client/queries';\nimport { getEntityListQueryName, scheduleEntityListRemoval } from '../graphql-client/refetch-entity-lists';\n\ninterface DataTableToolbarProps<TData> {\n entityName: string;\n isReloading?: boolean;\n onReload?: () => void;\n table: Table<TData>;\n}\n\nexport function DataTableToolbar<TData>({\n entityName,\n isReloading = false,\n onReload,\n table,\n}: DataTableToolbarProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const appContext = useAppContext();\n const apolloClient = useApolloClient();\n const { currentProject, currentProjectId } = useConfig();\n const schema = currentProject?.schema ?? [];\n const scopes = currentProject?.scopes;\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const [isDeleting, setIsDeleting] = useState(false);\n const canMutate = useCanMutate();\n\n // Collect selected entity ids from the table\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const selectedIds: string[] = table.getSelectedRowModel().rows.map((row) => row.original._id as string);\n\n function handleCreate(): void {\n actionDispatch({ type: 'AddEntity', payload: { entityName } });\n }\n\n function handleScopeChange(value: string): void {\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: value } });\n }\n\n async function deleteSelected(ids: string[]): Promise<void> {\n if (ids.length === 0) {\n return;\n }\n\n const mutation = getEntityDeleteMutation(entityName, schema, ids);\n\n await new Promise<void>((resolve, reject) => {\n setMutation(gql`\n ${mutation}\n `);\n\n setOptions({\n variables: { where: getEntityDeleteWhere(ids) },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n for (const id of ids) {\n cache.evict({ id });\n }\n },\n onCompleted: () => {\n resolve();\n },\n onError: (error: Error) => {\n reject(error);\n },\n });\n\n runMutation(true);\n });\n }\n\n function handleBatchDelete(): void {\n const itemLabel = entityName === '_asset' ? 'asset' : entityName.toLowerCase();\n\n actionDispatch({\n type: 'AlertDialog',\n payload: {\n options: {\n dialogTitle: `Delete ${selectedIds.length} ${itemLabel}${selectedIds.length > 1 ? 's' : ''}`,\n dialogMessage:\n selectedIds.length > 1\n ? `Are you sure you want to delete the selected ${itemLabel}s? They will be deleted permanently.`\n : `Are you sure you want to delete the selected ${itemLabel}? The item will be deleted permanently.`,\n dialogCancelTitle: 'Cancel',\n dialogActionLabel: 'Delete',\n isDestructive: true,\n dialogActionSubmit: async () => {\n setIsDeleting(true);\n\n try {\n const idsToDelete = [...selectedIds];\n\n await deleteSelected(idsToDelete);\n\n table.resetRowSelection();\n // Drop rows immediately, then soft-refetch counts/pages.\n await scheduleEntityListRemoval(\n apolloClient,\n getEntityListQueryName(entityName, schema),\n idsToDelete\n );\n toast.success(idsToDelete.length > 1 ? 'Items successfully deleted.' : 'Item successfully deleted.');\n } catch {\n toast.error('Failed to delete selected items.');\n } finally {\n setIsDeleting(false);\n }\n },\n dialogActionCancel: () => {\n // no-op\n },\n },\n },\n });\n }\n\n return (\n <div className=\"fk:flex fk:items-center fk:justify-between\">\n <div className=\"fk:flex fk:flex-1 fk:items-center fk:space-x-2\">\n {scopes && scopes.length > 0 ? (\n <Select\n defaultValue={appContext.scope}\n onValueChange={(value) => {\n handleScopeChange(value);\n }}\n value={appContext.scope}\n >\n <SelectTrigger className=\"fk:w-48!\" id=\"project\" size=\"sm\">\n <span className=\"fk:text-muted-foreground\">Scope:</span>\n <SelectValue>\n {\n ((find(propEq(appContext.scope ?? '', 'name'))(scopes) as { name: string; label: string }) || null)\n ?.label\n }\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {scopes.map((scopeItem) => (\n <SelectItem key={scopeItem.name} value={scopeItem.name}>\n {scopeItem.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n <DataTableViewOptions table={table} />\n {onReload ? (\n <Button\n aria-label=\"Reload\"\n className=\"fk:h-8\"\n disabled={isDeleting || isReloading}\n onClick={onReload}\n size=\"icon-sm\"\n variant=\"outline\"\n >\n <RefreshCw className={isReloading ? 'fk:animate-spin' : undefined} />\n </Button>\n ) : null}\n <DataTableSortedBy table={table} />\n </div>\n {selectedIds.length > 0 ? (\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:h-8 fk:mr-2 fk:lg:flex\"\n disabled={isDeleting || !canMutate}\n onClick={handleBatchDelete}\n size=\"sm\"\n variant=\"destructive\"\n >\n {isDeleting ? (\n <Loader2 className=\"fk:mr-2 fk:h-4 fk:w-4 fk:animate-spin\" />\n ) : (\n <Trash2 className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n )}\n Delete ({selectedIds.length})\n </Button>\n </PermissionTooltip>\n ) : null}\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:ml-auto fk:h-8 fk:lg:flex\"\n disabled={isDeleting || !canMutate}\n onClick={handleCreate}\n size=\"sm\"\n variant=\"default\"\n >\n Create\n </Button>\n </PermissionTooltip>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data-grid/data-table-row-actions.tsx","../src/data-grid/data-table-view-options.tsx","../src/data-grid/data-table-toolbar.tsx"],"names":["DataTableRowActions","entityName","entityNamePlural","row","options","actionDispatch","useDispatch","canMutate","useCanMutate","entityId","canDelete","canEdit","handleEdit","handleDelete","jsxs","Button","jsx","PencilIcon","Trash2Icon","DropdownMenu","DropdownMenuTrigger","Ellipsis","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DataTableViewOptions","table","Settings2","DropdownMenuLabel","column","DropdownMenuCheckboxItem","value","DataTableToolbar","isReloading","onReload","appDispatch","useAppDispatch","appContext","useAppContext","apolloClient","useApolloClient","currentProject","currentProjectId","useConfig","schema","scopes","runMutation","setMutation","setOptions","useEntityMutation","isDeleting","setIsDeleting","useState","selectedIds","handleCreate","handleScopeChange","deleteSelected","ids","mutation","getEntityDeleteMutation","resolve","reject","gql","getEntityDeleteWhere","cache","id","error","handleBatchDelete","itemLabel","idsToDelete","scheduleEntityListRemoval","getEntityListQueryName","toast","Select","SelectTrigger","SelectValue","find","propEq","SelectContent","scopeItem","SelectItem","RefreshCw","DataTableSortedBy","PermissionTooltip","Loader2","Trash2"],"mappings":"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","file":"chunk-ANVO5P65.js","sourcesContent":["'use client';\n\nimport type { JSX } from 'react';\nimport { Ellipsis, PencilIcon, Trash2Icon } from 'lucide-react';\nimport type { Row } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\nimport { useDispatch } from '../entities/actions-context';\nimport { useCanMutate } from '../core/permissions';\n\ninterface DataTableRowActionsProps<TData> {\n entityName: string;\n entityNamePlural: string;\n row: Row<TData>;\n options?: {\n canDelete?: boolean;\n canEdit?: boolean;\n };\n}\n\nexport function DataTableRowActions<TData>({\n entityName,\n entityNamePlural,\n row,\n options = { canDelete: true, canEdit: true },\n}: DataTableRowActionsProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const canMutate = useCanMutate();\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const entityId = row.original._id;\n // Read-only roles keep the pencil (the drawer doubles as their read view)\n // but lose the delete affordance entirely.\n const canDelete = (options.canDelete ?? true) && canMutate;\n const canEdit = options.canEdit ?? true;\n\n function handleEdit(): void {\n actionDispatch({ type: 'EditEntity', payload: { entityId, entityNamePlural } });\n }\n\n function handleDelete(): void {\n actionDispatch({ type: 'DeleteEntity', payload: { entityId, entityName } });\n }\n\n return (\n <div className=\"fk:flex\">\n {canEdit && (\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleEdit} variant=\"ghost\">\n <PencilIcon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Edit</span>\n </Button>\n )}\n {canDelete && !canEdit && (\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleDelete} variant=\"ghost\">\n <Trash2Icon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Delete</span>\n </Button>\n )}\n {canEdit && canDelete && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0\" variant=\"ghost\">\n <Ellipsis className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Additional actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[160px]\">\n <DropdownMenuItem onClick={handleEdit}>\n <PencilIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className=\"fk:text-destructive\" onClick={handleDelete}>\n <Trash2Icon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableViewOptions<TData>({ table }: DataTableViewOptionsProps<TData>): JSX.Element {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:hidden fk:h-8 fk:lg:flex\" size=\"sm\" variant=\"outline\">\n <Settings2 className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n checked={column.getIsVisible()}\n className=\"capitalize\"\n key={column.id}\n onCheckedChange={(value) => {\n column.toggleVisibility(Boolean(value));\n }}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport type { JSX } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { Table } from '@tanstack/react-table';\nimport { Loader2, RefreshCw, Trash2 } from 'lucide-react';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { toast } from 'sonner';\nimport { Button } from '../ui/primitives/button';\nimport { PermissionTooltip } from '../ui/components/permission-tooltip';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { useDispatch } from '../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport { useCanMutate } from '../core/permissions';\nimport { useConfig } from '../core/config/config-context';\nimport { DataTableViewOptions } from './data-table-view-options';\nimport { DataTableSortedBy } from './data-table-sorted-by';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation, getEntityDeleteWhere } from '../graphql-client/queries';\nimport { getEntityListQueryName, scheduleEntityListRemoval } from '../graphql-client/refetch-entity-lists';\n\ninterface DataTableToolbarProps<TData> {\n entityName: string;\n isReloading?: boolean;\n onReload?: () => void;\n table: Table<TData>;\n}\n\nexport function DataTableToolbar<TData>({\n entityName,\n isReloading = false,\n onReload,\n table,\n}: DataTableToolbarProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const appContext = useAppContext();\n const apolloClient = useApolloClient();\n const { currentProject, currentProjectId } = useConfig();\n const schema = currentProject?.schema ?? [];\n const scopes = currentProject?.scopes;\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const [isDeleting, setIsDeleting] = useState(false);\n const canMutate = useCanMutate();\n\n // Collect selected entity ids from the table\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const selectedIds: string[] = table.getSelectedRowModel().rows.map((row) => row.original._id as string);\n\n function handleCreate(): void {\n actionDispatch({ type: 'AddEntity', payload: { entityName } });\n }\n\n function handleScopeChange(value: string): void {\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: value } });\n }\n\n async function deleteSelected(ids: string[]): Promise<void> {\n if (ids.length === 0) {\n return;\n }\n\n const mutation = getEntityDeleteMutation(entityName, schema, ids);\n\n await new Promise<void>((resolve, reject) => {\n setMutation(gql`\n ${mutation}\n `);\n\n setOptions({\n variables: { where: getEntityDeleteWhere(ids) },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n for (const id of ids) {\n cache.evict({ id });\n }\n },\n onCompleted: () => {\n resolve();\n },\n onError: (error: Error) => {\n reject(error);\n },\n });\n\n runMutation(true);\n });\n }\n\n function handleBatchDelete(): void {\n const itemLabel = entityName === '_asset' ? 'asset' : entityName.toLowerCase();\n\n actionDispatch({\n type: 'AlertDialog',\n payload: {\n options: {\n dialogTitle: `Delete ${selectedIds.length} ${itemLabel}${selectedIds.length > 1 ? 's' : ''}`,\n dialogMessage:\n selectedIds.length > 1\n ? `Are you sure you want to delete the selected ${itemLabel}s? They will be deleted permanently.`\n : `Are you sure you want to delete the selected ${itemLabel}? The item will be deleted permanently.`,\n dialogCancelTitle: 'Cancel',\n dialogActionLabel: 'Delete',\n isDestructive: true,\n dialogActionSubmit: async () => {\n setIsDeleting(true);\n\n try {\n const idsToDelete = [...selectedIds];\n\n await deleteSelected(idsToDelete);\n\n table.resetRowSelection();\n // Drop rows immediately, then soft-refetch counts/pages.\n await scheduleEntityListRemoval(\n apolloClient,\n getEntityListQueryName(entityName, schema),\n idsToDelete\n );\n toast.success(idsToDelete.length > 1 ? 'Items successfully deleted.' : 'Item successfully deleted.');\n } catch {\n toast.error('Failed to delete selected items.');\n } finally {\n setIsDeleting(false);\n }\n },\n dialogActionCancel: () => {\n // no-op\n },\n },\n },\n });\n }\n\n return (\n <div className=\"fk:flex fk:items-center fk:justify-between\">\n <div className=\"fk:flex fk:flex-1 fk:items-center fk:space-x-2\">\n {scopes && scopes.length > 0 ? (\n <Select\n defaultValue={appContext.scope}\n onValueChange={(value) => {\n handleScopeChange(value);\n }}\n value={appContext.scope}\n >\n <SelectTrigger className=\"fk:w-48!\" id=\"project\" size=\"sm\">\n <span className=\"fk:text-muted-foreground\">Scope:</span>\n <SelectValue>\n {\n ((find(propEq(appContext.scope ?? '', 'name'))(scopes) as { name: string; label: string }) || null)\n ?.label\n }\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {scopes.map((scopeItem) => (\n <SelectItem key={scopeItem.name} value={scopeItem.name}>\n {scopeItem.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n <DataTableViewOptions table={table} />\n {onReload ? (\n <Button\n aria-label=\"Reload\"\n className=\"fk:h-8\"\n disabled={isDeleting || isReloading}\n onClick={onReload}\n size=\"icon-sm\"\n variant=\"outline\"\n >\n <RefreshCw className={isReloading ? 'fk:animate-spin' : undefined} />\n </Button>\n ) : null}\n <DataTableSortedBy table={table} />\n </div>\n {selectedIds.length > 0 ? (\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:h-8 fk:mr-2 fk:lg:flex\"\n disabled={isDeleting || !canMutate}\n onClick={handleBatchDelete}\n size=\"sm\"\n variant=\"destructive\"\n >\n {isDeleting ? (\n <Loader2 className=\"fk:mr-2 fk:h-4 fk:w-4 fk:animate-spin\" />\n ) : (\n <Trash2 className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n )}\n Delete ({selectedIds.length})\n </Button>\n </PermissionTooltip>\n ) : null}\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:ml-auto fk:h-8 fk:lg:flex\"\n disabled={isDeleting || !canMutate}\n onClick={handleCreate}\n size=\"sm\"\n variant=\"default\"\n >\n Create\n </Button>\n </PermissionTooltip>\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import'./index.css';import {g as g$2,d,f}from'./chunk-HROHAMPM.js';import {g as g$1,d as d$2}from'./chunk-ZBI744KS.js';import {sa as sa$1,ub,o,pa as pa$1,da as da$1,ea as ea$1,ha as ha$1,ia as ia$1,fa as fa$1,ja}from'./chunk-QHDL6CA2.js';import {b,c,h,i,k,l,j as j$1}from'./chunk-ODORXGGY.js';import {d as d$1}from'./chunk-5DHOBLAE.js';import {lazy,createContext,useCallback,useMemo,useState,useRef,useEffect,useContext,useTransition,useId,Suspense}from'react';import Wt,{useSWRConfig}from'swr';import {formatDistance,format}from'date-fns';import {BotIcon,XCircleIcon,LoaderCircle,XIcon,CheckIcon,CloudUploadIcon,FileTextIcon,DownloadIcon,LinkIcon,MessageSquareIcon,SendIcon,CheckCircle2Icon,CircleSlashIcon,ShieldIcon,DatabaseZapIcon,ShieldCheckIcon,TriangleAlertIcon,ArrowRightIcon,MoveRightIcon}from'lucide-react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {pipeJsonRender}from'@json-render/core';import {useLocation,Link}from'react-router-dom';import {readUIMessageStream,parseJsonEventStream,uiMessageChunkSchema}from'ai';function Ne(){let{currentProjectId:e}=g$1(),{mutate:t}=useSWRConfig();return useCallback(n=>{if(!e)return;let a=g$2(e).approvalsCount;n?t(a,n,{revalidate:true}):t(a);},[e,t])}var rt=5e3,st=150,ie=new Set;function ot(e){return async()=>{let t=await fetch(e,{credentials:"include",mode:"cors"});return t.status===404?"missing":t.ok?(await t.json()).approval??"missing":null}}function it(e,t,n=d$2){return !e||e.kind!=="schema"||e.status!=="approved"||e.error?false:e.executedAt?(n(t),false):true}function Z({approvalId:e,approvalUrl:t,fetchApproval:n,projectId:a,revalidate:r=d$2,sleep:s=l=>new Promise(u=>setTimeout(u,l))}){let l=`${a}:${e}`,u=n??(t?ot(t):null);!u||ie.has(l)||(ie.add(l),(async()=>{try{for(let c=0;c<st;c+=1){let k=null;try{k=await u();}catch{k=null;}if(k==="missing"||k!==null&&!it(k,a,r))return;await s(rt);}}finally{ie.delete(l);}})());}var ft={approved:"fk:bg-success/20 fk:text-success",cancelled:"fk:bg-secondary fk:text-secondary-foreground",expired:"fk:bg-secondary fk:text-secondary-foreground",pending:"fk:bg-amber-500/20 fk:text-amber-600",rejected:"fk:bg-destructive/15 fk:text-destructive"};function mt({status:e}){return jsx(b,{className:`fk:border-none fk:h-4.75 fk:text-[0.6875rem] fk:leading-4.5 fk:tracking-wide ${ft[e]}`,variant:"secondary",children:e})}function M(e){return e==null?"\u2014":typeof e=="object"?JSON.stringify(e):String(e)}function $e({after:e,before:t}){let n=M(t),a=M(e);return n===a?jsx("span",{className:"fk:text-muted-foreground",children:n}):jsxs("span",{className:"fk:inline-flex fk:flex-wrap fk:items-center fk:gap-1.5",children:[jsx("span",{className:"fk:rounded fk:bg-destructive/10 fk:px-1 fk:text-destructive fk:line-through fk:corner-squircle",children:n}),jsx(MoveRightIcon,{className:"fk:size-3 fk:shrink-0 fk:text-muted-foreground"}),jsx("span",{className:"fk:rounded fk:bg-success/15 fk:px-1 fk:text-success fk:corner-squircle",children:a})]})}function kt(e){let t=e.entity??"entities",n=e.affectedCount!==null?` \xB7 ${e.affectedCount.toString()} affected`:"";return e.kind==="create"?`Create ${t}${n}`:e.kind==="update"?`Update ${t}${n}`:e.kind==="delete"?`Delete ${t}${n}`:`Mutation on ${t}${n}`}function gt({operation:e}){if(e.rows.length===0)return null;let t=(e.contextColumns??[]).filter(a=>a!=="_id");if(e.kind==="delete")return jsxs(da$1,{children:[jsx(ea$1,{children:jsxs(ha$1,{children:[jsx(ia$1,{children:"Records to delete"}),t.map(a=>jsx(ia$1,{children:a},a))]})}),jsx(fa$1,{children:e.rows.map((a,r)=>jsxs(ha$1,{className:"fk:bg-destructive/5",children:[jsx(ja,{className:"fk:font-mono fk:text-xs fk:text-destructive",children:a.id??M(a.before?._id)}),t.map(s=>jsx(ja,{className:"fk:text-xs fk:text-muted-foreground",children:M(a.before?.[s])},s))]},a.id??r.toString()))})]});let n=e.columns.filter(a=>a!=="_id"&&!t.includes(a));return jsxs(da$1,{children:[jsx(ea$1,{children:jsxs(ha$1,{children:[jsx(ia$1,{children:"ID"}),t.map(a=>jsx(ia$1,{children:a},a)),n.map(a=>jsx(ia$1,{children:a},a))]})}),jsx(fa$1,{children:e.rows.map((a,r)=>jsxs(ha$1,{children:[jsx(ja,{className:"fk:font-mono fk:text-xs fk:text-muted-foreground",children:a.id??"\u2014"}),t.map(s=>jsx(ja,{className:"fk:max-w-72 fk:text-xs fk:text-muted-foreground",children:jsx("span",{className:"fk:line-clamp-3",children:M(a.before?.[s])})},s)),n.map(s=>jsx(ja,{className:"fk:text-xs",children:e.kind==="create"?jsx("span",{className:"fk:rounded fk:bg-success/15 fk:px-1 fk:text-success fk:corner-squircle",children:M(a.after?.[s])}):jsx($e,{after:a.after?.[s],before:a.before?.[s]})},s))]},a.id??r.toString()))})]})}function yt({operations:e,plugin:t,chat:n,title:a}){return jsxs("details",{className:"fk:rounded-md fk:border fk:border-border fk:corner-squircle",children:[jsx("summary",{className:"fk:cursor-pointer fk:px-3 fk:py-2 fk:text-xs fk:font-medium fk:text-muted-foreground",children:a??(n?"Action details":t?"Plugin tool and arguments":`GraphQL documents (${e.length})`)}),jsx("div",{className:"fk:space-y-3 fk:border-t fk:border-border fk:p-3",children:e.map((r,s)=>jsxs("div",{className:"fk:space-y-2",children:[jsx("pre",{className:"fk:overflow-x-auto fk:rounded-md fk:bg-muted fk:p-3 fk:text-xs fk:corner-squircle",children:r.query}),r.variables&&Object.keys(r.variables).length>0?jsx("pre",{className:"fk:overflow-x-auto fk:rounded-md fk:bg-muted/60 fk:p-3 fk:text-xs fk:corner-squircle",children:JSON.stringify(r.variables,null,2)}):null]},s.toString()))})]})}function _e(e){if(e.kind!=="plugin")return null;let n=e.operations[0]?.query.split(`
|
|
2
|
+
`)[0]?.trim()?.split("/"),a=n?.at(-1),r=n?.[0];if(!a||!r||n?.length<2)return null;let s=a.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").toLowerCase(),l=r.replace(/[_-]+/g," ").replace(/\b\w/g,m=>m.toUpperCase()),u=e.operations[0]?.query??"",c=/^Connection:\s*(Project|Personal)\s+—\s+(.+)$/m.exec(u);if(c?.[1]&&c[2])return {action:s,app:l,account:c[2].trim(),scope:c[1]==="Project"?"project":"personal"};let k=/^Connection:.*?([^\s<>]+@[^\s<>]+)\s*$/m.exec(u)?.[1];return {action:s,app:l,account:k}}function vt(e){let t=_e(e);return t?`${t.action.charAt(0).toUpperCase()}${t.action.slice(1)} in ${t.app}`:e.kind==="exec"?"Run a sandbox command":e.kind==="schema"?e.operationsSummary.replace(/^Schema: /,""):e.kind==="plugin"?"Use a connected app":e.operationsSummary}function bt({operation:e}){if(e.rows.length===0)return null;let t=a=>a!=null&&a!==false,n=e.columns.filter(a=>e.rows.some(s=>t(s.before?.[a])||t(s.after?.[a]))?e.kind!=="update"?true:e.rows.some(s=>M(s.before?.[a])!==M(s.after?.[a])):false);return jsx("div",{className:"fk:overflow-x-auto fk:rounded-md fk:border fk:border-border fk:corner-squircle",children:jsxs(da$1,{className:"fk:text-xs",children:[jsx(ea$1,{children:jsxs(ha$1,{children:[jsx(ia$1,{className:"fk:h-8",children:e.entity==="scopes"||e.entity==="spaces"||e.entity==="studio"?"Setting":"Attribute"}),n.map(a=>jsx(ia$1,{className:"fk:h-8",children:a},a))]})}),jsx(fa$1,{children:e.rows.map((a,r)=>jsxs(ha$1,{children:[jsxs(ja,{className:"fk:py-1.5 fk:font-mono fk:text-[0.7rem]",children:[e.kind==="delete"?jsx("span",{className:"fk:line-through fk:text-destructive",children:a.id}):a.id,e.kind==="update"&&a.before===null?jsx(b,{className:"fk:ml-2",variant:"secondary",children:"new"}):null,e.kind==="update"&&a.after===null?jsx(b,{className:"fk:ml-2",variant:"destructive",children:"removed"}):null]}),n.map(s=>jsx(ja,{className:"fk:py-1.5",children:e.kind==="create"?jsx("span",{children:M(a.after?.[s])}):e.kind==="delete"?jsx("span",{className:"fk:text-muted-foreground",children:M(a.before?.[s])}):jsx($e,{after:a.after?.[s],before:a.before?.[s]})},s))]},a.id??r.toString()))})]})})}function ht(e){let t=e.entity??"schema";return t==="scopes"||t==="spaces"||t==="studio"?`Change ${t==="studio"?"Studio settings":t}`:e.kind==="create"?`Add entity ${t} \xB7 ${e.rows.length.toString()} attribute${e.rows.length===1?"":"s"}`:e.kind==="delete"?`Remove entity ${t}`:`Change entity ${t}`}function xt({preview:e}){let t=e.schema;return jsxs("div",{className:"fk:space-y-4",children:[t&&t.breakingChanges.length>0?jsxs("div",{className:"fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:corner-squircle",children:[jsxs("div",{className:"fk:mb-1 fk:flex fk:items-center fk:gap-2 fk:font-medium fk:text-destructive",children:[jsx(TriangleAlertIcon,{className:"fk:size-4"}),"Breaking changes: existing data becomes inaccessible"]}),jsx("ul",{className:"fk:list-disc fk:pl-5 fk:text-destructive",children:t.breakingChanges.map(n=>jsx("li",{children:n},n))})]}):null,t&&t.warnings.length>0?jsx("div",{className:"fk:rounded-md fk:border fk:border-amber-500/40 fk:bg-amber-500/10 fk:p-3 fk:text-sm fk:corner-squircle",children:jsx("ul",{className:"fk:list-disc fk:pl-5",children:t.warnings.map(n=>jsx("li",{children:n},n))})}):null,e.operations.map((n,a)=>jsxs("div",{className:"fk:space-y-2",children:[jsx("div",{className:`fk:text-sm fk:font-medium ${n.kind==="delete"?"fk:text-destructive":""}`,children:ht(n)}),jsx(bt,{operation:n})]},`${n.entity??""}-${a.toString()}`)),e.operations.length===0?jsx("div",{className:"fk:rounded-md fk:border fk:border-dashed fk:p-3 fk:text-xs fk:text-muted-foreground fk:corner-squircle",children:"No visible entity changes. Review the operations below."}):null]})}function Rt(e,t){return e.id===t.id&&e.status===t.status&&e.decidedAt===t.decidedAt&&e.decidedBy===t.decidedBy&&e.executedAt===t.executedAt&&e.error===t.error&&e.reason===t.reason&&e.expiresAt===t.expiresAt&&e.operationsSummary===t.operationsSummary&&e.affectedCount===t.affectedCount&&JSON.stringify(e.preview)===JSON.stringify(t.preview)}function Le({api:e,approval:t,onDecided:n}){let[a,r]=useState(t),[s,l]=useState(t),[u,c]=useState(""),[k,m]=useTransition(),[y,x]=useState(false),[h,b]=useState(false),[d,R]=useState(""),w=Ne();t!==s&&(l(t),Rt(t,s)||a.id===t.id&&a.status!=="pending"&&t.status==="pending"||r(t));function A(v){r(v),w(),v.kind==="schema"&&v.status==="approved"&&Z({approvalId:v.id,approvalUrl:g$2(v.projectId).approval(v.id),projectId:v.projectId}),n?.(v);}function H({approved:v,force:P=false,reason:E,remember:T=false}){m(async()=>{c("");try{let S=await e.decideApproval(a.id,{approved:v,force:P,reason:E,remember:T});if(S.errorCode==="stale_preview"){b(!0),S.approval&&r(S.approval);return}if(b(!1),x(!1),S.approval?A(S.approval):S.success?A({...a,decidedAt:a.decidedAt??new Date().toISOString(),reason:E??a.reason,status:v?"approved":"rejected"}):S.errorCode==="already_decided"&&n?.(a),!S.success&&(S.errorCode!=="already_decided"||!S.approval)){let $=Array.isArray(S.errorMessage)?S.errorMessage.join(", "):S.errorMessage;c($||"Failed to submit the decision.");}}catch(S){c(S instanceof Error?S.message:"Failed to submit the decision.");}});}return {approval:a,decide:H,errorMessage:u,isDeciding:k,isPending:a.status==="pending",isRejectDialogOpen:y,isStale:h,rejectReason:d,setIsRejectDialogOpen:x,setRejectReason:R}}function Oe({allowRemember:e=false,askForRejectionReason:t,decide:n,isDeciding:a,isRejectDialogOpen:r,isStale:s,rejectReason:l$1,setIsRejectDialogOpen:u,setRejectReason:c$1,variant:k$1}){let m=k$1==="header",y=m?"fk:px-8 fk:min-w-32":void 0,x=m?"default":"sm",[h$1,b]=useState(false),d=useId();return jsxs(Fragment,{children:[jsxs("div",{className:"fk:flex fk:flex-nowrap fk:items-center fk:gap-2",children:[jsxs(d$1,{className:y,disabled:a,size:x,onClick:()=>n({approved:true,force:s,remember:e&&h$1}),children:[a?jsx(LoaderCircle,{className:"fk:size-4 fk:animate-spin"}):jsx(CheckIcon,{className:"fk:size-4"}),s?"Approve anyway":"Approve"]}),jsxs(d$1,{className:y,disabled:a,size:x,variant:"outline",onClick:()=>{t?(c$1(""),u(true)):n({approved:false});},children:[jsx(XIcon,{className:"fk:size-4"}),"Reject"]}),e?jsxs("label",{className:"fk:ml-1 fk:flex fk:cursor-pointer fk:items-center fk:gap-1.5 fk:whitespace-nowrap fk:text-xs fk:text-muted-foreground",htmlFor:d,children:[jsx(o,{checked:h$1,id:d,onCheckedChange:R=>b(R===true)}),"Always allow this tool for this automation"]}):null]}),t?jsx(c,{open:r,onOpenChange:u,children:jsxs(h,{children:[jsxs(i,{children:[jsx(k,{children:"Reject this proposal?"}),jsx(l,{children:"The mutation will not be executed. The agent receives your reason and can adapt its plan."})]}),jsx(pa$1,{placeholder:"Optional reason for the agent...",value:l$1,onChange:R=>c$1(R.target.value)}),jsxs(j$1,{children:[jsx(d$1,{disabled:a,size:"sm",variant:"outline",onClick:()=>u(false),children:"Cancel"}),jsxs(d$1,{disabled:a,size:"sm",variant:"destructive",onClick:()=>n({approved:false,reason:l$1.trim()||void 0}),children:[a?jsx(LoaderCircle,{className:"fk:size-4 fk:animate-spin"}):jsx(ArrowRightIcon,{className:"fk:size-4"}),"Reject proposal"]})]})]})}):null]})}function je({approval:e,chat:t,errorMessage:n,isPending:a,isStale:r}){let{preview:s}=e,l=t?_e(e):null;return jsxs("div",{className:"fk:min-w-0 fk:max-w-full fk:space-y-4",children:[jsxs("div",{className:"fk:flex fk:flex-wrap fk:items-center fk:gap-2",children:[jsx(mt,{status:e.status}),e.kind==="schema"?jsx(b,{variant:"outline",children:"Schema change"}):null,jsx("span",{className:"fk:text-sm fk:font-medium",children:t?vt(e):e.operationsSummary})]}),jsxs("div",{className:"fk:text-xs fk:text-muted-foreground",children:[e.automationName?`${e.automationName} \xB7 `:"","requested ",formatDistance(new Date(e.requestedAt),new Date,{addSuffix:true}),a?` \xB7 expires ${formatDistance(new Date(e.expiresAt),new Date,{addSuffix:true})}`:"",e.decidedAt?` \xB7 decided ${format(new Date(e.decidedAt),"PPpp")}`:""]}),r?jsxs("div",{className:"fk:flex fk:items-start fk:gap-2 fk:rounded-md fk:border fk:border-amber-500/40 fk:bg-amber-500/10 fk:p-3 fk:text-sm fk:corner-squircle",children:[jsx(TriangleAlertIcon,{className:"fk:mt-0.5 fk:size-4 fk:shrink-0 fk:text-amber-600"}),jsx("span",{children:"The affected data changed since this proposal was created. The preview below has been refreshed \u2014 review it and approve again to proceed."})]}):null,e.kind==="schema"&&s?jsx(xt,{preview:s}):s&&s.operations.length>0?jsx("div",{className:"fk:space-y-4",children:s.operations.map((u,c)=>jsxs("div",{className:"fk:space-y-2",children:[jsx("div",{className:"fk:text-sm fk:font-medium",children:kt(u)}),u.kind==="delete"&&u.affectedCount!==null?jsxs("div",{className:"fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:text-destructive fk:corner-squircle",children:[u.affectedCount.toString()," record",u.affectedCount===1?"":"s"," will be permanently deleted."]}):null,jsx(gt,{operation:u}),u.truncated?jsxs("div",{className:"fk:text-xs fk:text-muted-foreground",children:["Preview limited to the first ",u.rows.length.toString()," rows."]}):null]},c.toString()))}):jsx("div",{className:"fk:rounded-md fk:border fk:border-dashed fk:p-3 fk:text-xs fk:text-muted-foreground fk:corner-squircle",children:t?l?`This action uses ${l.scope==="project"?"the project's":"your"} ${l.app} account${l.account?` (${l.account})`:""}. Check the details before deciding.`:"The assistant wants to make this change. Check the details before deciding.":e.kind==="plugin"?"Review the account, tool, and arguments before allowing this external call.":e.kind==="exec"?"This command runs inside the run's ephemeral sandbox but may send data out or reach other hosts. Review the command line before allowing it.":"No structured preview is available for this proposal. Review the raw GraphQL documents below."}),jsx(yt,{chat:t,operations:e.operations,plugin:e.kind==="plugin"||e.kind==="exec",title:e.kind==="exec"?"Command and options":e.kind==="schema"?"Operations":void 0}),e.reason?jsxs("div",{className:"fk:text-sm",children:[jsx("span",{className:"fk:font-medium",children:"Reason:"})," ",e.reason]}):null,e.error?jsxs("div",{className:"fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:corner-squircle",children:["Execution failed: ",e.error]}):null,e.executedAt&&!e.error?jsxs("div",{className:"fk:flex fk:items-center fk:gap-2 fk:text-sm fk:text-success",children:[jsx(CheckIcon,{className:"fk:size-4"}),"Executed ",format(new Date(e.executedAt),"PPpp")]}):null,n?jsx("div",{className:"fk:text-sm fk:text-destructive",children:n}):null]})}function ze({api:e,approval:t,chat:n,onDecided:a}){let{approval:r,decide:s,errorMessage:l,isDeciding:u,isPending:c,isRejectDialogOpen:k,isStale:m,rejectReason:y,setIsRejectDialogOpen:x,setRejectReason:h}=Le({api:e,approval:t,onDecided:a});return jsxs(Fragment,{children:[jsx(je,{approval:r,chat:n,errorMessage:l,isPending:c,isStale:m}),c?jsx("div",{className:"fk:mt-4",children:jsx(Oe,{allowRemember:!n&&r.kind==="plugin"&&!!r.automationId,askForRejectionReason:!n,decide:s,isDeciding:u,isRejectDialogOpen:k,isStale:m,rejectReason:y,setIsRejectDialogOpen:x,setRejectReason:h,variant:"inline"})}):null]})}function Ja({api:e,approval:t,onClose:n,onDecided:a}){let{approval:r,decide:s,errorMessage:l,isDeciding:u,isPending:c,isRejectDialogOpen:k,isStale:m,rejectReason:y,setIsRejectDialogOpen:x,setRejectReason:h}=Le({api:e,approval:t,onDecided:a});return jsx(sa$1,{actions:c?jsx(Oe,{allowRemember:r.kind==="plugin"&&!!r.automationId,askForRejectionReason:true,decide:s,isDeciding:u,isRejectDialogOpen:k,isStale:m,rejectReason:y,setIsRejectDialogOpen:x,setRejectReason:h,variant:"header"}):null,depth:0,isFocused:true,onClose:n,title:"Mutation proposal",children:jsx(je,{approval:r,chat:false,errorMessage:l,isPending:c,isStale:m})})}var St="Approved by Flexkit Jev policy",wt="Approved by automation tool allow rule",At=new Set(["data-create-sandbox","data-execute-graphql","data-load-skill","data-plan","data-plugin-call","data-run-command","data-search-schema","data-update-memory","data-validate-graphql","data-web-search"]);function V(e){return At.has(e)}function g(e){return e.data}function le(e){return !e.decidedBy&&!!(e.reason?.startsWith(St)||e.reason?.startsWith(wt))}function q(e,t=72){let n=e.trim();if(n.length<=t)return n;let a=n.slice(0,t),r=a.lastIndexOf(" ");return `${(r>=Math.floor(t*.6)?a.slice(0,r):a).trimEnd()}\u2026`}function Pt(e){return e.replace(/^#{1,6}\s+/,"").replace(/^(?:[-*+]|\d+[.)])\s+/,"").replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/(\*\*|__)(.*?)\1/g,"$2").replace(/(\*|_)(.*?)\1/g,"$2").replace(/`([^`]*)`/g,"$1").replace(/[*_`#>]/g,"").replace(/\s+/g," ").trim().replace(/[.:]+$/,"")}function Tt(e){let t=e.lastIndexOf(`
|
|
3
|
+
`),n=-1,a=/[.!?](?=\s)/g,r;for(;(r=a.exec(e))!==null;)n=r.index;let s=Math.max(t,n);return s<0?"":e.slice(0,s+1)}function Nt(e,t){let a=(Tt(e)).split(/\r?\n/).map(c=>c.trim()).filter(Boolean),r=a[a.length-1];if(!r)return null;let l=/^\*\*(.+?)\*\*:?$/.exec(r)?.[1]??/^#{1,6}\s+(.+)$/.exec(r)?.[1]??/^(.+?[.!?])(?:\s|$)/.exec(r)?.[1]??r,u=Pt(l);return !u||/^reasoning$/i.test(u)?null:q(u)}function Je(e){return e.replace(/[_-]+/g," ").trim()}function Dt(e){if(e.type==="data-load-skill"){let t=g(e);return t.status!=="loading"?null:t.skillName?q(`Loading skill "${t.skillName}"`):"Loading skill"}if(e.type==="data-search-schema")return g(e).status==="loading"?"Searching schema":null;if(e.type==="data-validate-graphql")return g(e).status==="loading"?"Validating GraphQL query":null;if(e.type==="data-execute-graphql"){let t=g(e);return t.status!=="loading"?null:t.operationType==="mutation"?"Executing GraphQL mutation":"Executing GraphQL query"}if(e.type==="data-update-memory")return g(e).status==="loading"?"Updating memory":null;if(e.type==="data-web-search"){let t=g(e);return t.status!=="loading"?null:t.query?q(`Searching the web for "${t.query}"`):"Searching the web"}if(e.type==="data-run-command"){let t=g(e);return ["executing","running","waiting"].includes(t.status)?q(`Running ${[t.command,...t.args].join(" ")}`):null}if(e.type==="data-create-sandbox")return g(e).status==="loading"?"Creating sandbox":null;if(e.type==="data-plugin-call"){let t=g(e);return t.status!=="loading"?null:q(`Calling ${t.pluginId}: ${Je(t.tool)}`)}if(e.type==="data-subtask"){let t=g(e);return t.status==="running"?q(`Running subtask: ${t.title}`):null}return null}var Mt=new Set(["data-execute-graphql","data-search-schema","data-validate-graphql"]);function te(e){if(!V(e.type)||e.type==="data-plan"||Mt.has(e.type))return null;let t=g(e);if(t.status!=="error")return null;if(t.error?.message)return t.error.message;switch(e.type){case "data-web-search":return "Failed to search the web";case "data-run-command":return `Command failed: ${String(t.command??"")}`.trim();case "data-create-sandbox":return "Failed to create sandbox";case "data-load-skill":return "Failed to load skill";case "data-update-memory":return "Failed to update memory";case "data-plugin-call":return `Plugin call failed: ${String(t.pluginId??"")}: ${Je(String(t.tool??""))}`;default:return "The tool call failed"}}function ae(e){if(e.type==="step-start"||e.type==="reasoning")return true;if(V(e.type))return te(e)===null;if(e.type==="data-mutation-approval"){let t=g(e);return le(t)&&t.status!=="error"}return false}function ee(e){if(!e)return null;for(let t=e.parts.length-1;t>=0;t--){let n=e.parts[t];if(n?.type!=="data-plan")continue;let a=g(n),r=a.steps.findIndex(s=>s.status==="in_progress");return r<0?null:q(`Step ${(r+1).toString()} of ${a.steps.length.toString()}: ${a.steps[r].step}`)}return null}function Ct(e){if(!e)return null;for(let t=e.parts.length-1;t>=0;t--){let n=e.parts[t];if(!(!n||n.type==="step-start"))return n.type==="reasoning"?n.state==="streaming"?Nt(n.text)??ee(e):ee(e):n.type==="data-mutation-approval"?g(n).status==="pending"?"Awaiting approval":ee(e):n.type==="text"?null:Dt(n)??ee(e)}return null}function ue(e){return e?e.parts.some(t=>t.type!=="data-mutation-approval"?false:g(t).status==="pending"):false}function de(e,t={}){let n=false,a=[];for(let r of e.parts){if(r.type!=="data-mutation-approval"){a.push(r);continue}let s=g(r);if(s.status!=="pending"){a.push(r);continue}n=true;let l=t[s.approvalId];l&&l!=="pending"&&a.push({...r,data:{...s,status:l}});}return n?{...e,parts:a}:e}function qe(e,t){if(!e)return [];let n=[],a=t?.pendingOnly??false;for(let r of e.parts){if(r.type!=="data-mutation-approval")continue;let s=g(r);a&&s.status!=="pending"||n.push(s.approvalId);}return n}function It(e){return qe(e,{pendingOnly:true})}var X=class extends Error{},ne=class extends Error{};function Ue({url:e,signal:t,state:n,onState:a,wake:r,fetchStream:s=fetch,retryMs:l=2e3}){let u=0,c=0,k=new TransformStream,m=k.writable.getWriter(),y=new AbortController;m.closed.catch(d=>y.abort(d));let x=()=>{y.abort(t.reason),m.abort(t.reason).catch(()=>{});};t.addEventListener("abort",x,{once:true}),t.aborted&&x();let h=()=>new Promise(d=>{let R=()=>{clearTimeout(w),y.signal.removeEventListener("abort",R),r?.removeEventListener("wake",R),d();},w=setTimeout(R,l);y.signal.addEventListener("abort",R,{once:true}),r?.addEventListener("wake",R,{once:true}),y.signal.aborted&&R();});async function b(){try{for(await m.write({type:"start"});!y.signal.aborted;){try{let d=await s(`${e}${e.includes("?")?"&":"?"}wire=2&startIndex=${u}`,{credentials:"include",signal:y.signal});if(d.status===404){a("unavailable"),await m.close();return}if(d.status===401||d.status===403)throw new ne("Stream access denied");if(!d.ok||!d.body)throw new Error(`Stream request failed: ${d.status}`);if(d.headers.get("x-flexkit-stream-version")!=="2")throw await d.body.cancel(),new X("Backend uses legacy replay");a("streaming");let R=d.body.pipeThrough(new TextDecoderStream).getReader(),w="",A=!1;try{for(;!y.signal.aborted;){let{value:H,done:v}=await R.read();if(v)break;w+=H;let P;for(;(P=w.indexOf(`
|
|
4
|
+
`))>=0;){let E=w.slice(0,P);if(w=w.slice(P+1),!E)continue;let T=JSON.parse(E);if(!Number.isSafeInteger(T.index)||T.index<0)throw new Error("Invalid replay cursor");if(!(T.index<u)){if(T.index!==u)throw new Error("Replay cursor gap");T.chunk&&await m.write(T.chunk),u=T.index+1,c=0,T.chunk?.type==="finish"&&T.chunk.messageMetadata?.flexkitTerminal&&(A=!0);}}if(w.length>2e6)throw new Error("Oversized replay frame");if(A)break}}finally{await R.cancel().catch(()=>{}),R.releaseLock();}if(A||n().terminal&&!w){await m.write({type:"finish"}),await m.close(),a("finished");return}}catch(d){if(y.signal.aborted||d instanceof X||d instanceof ne||++c>=5)throw d}do a(n().paused?"paused":"streaming"),await h();while(!y.signal.aborted&&n().paused&&!n().terminal)}}catch(d){await m.abort(d).catch(()=>{});}finally{t.removeEventListener("abort",x),m.releaseLock();}}return b(),pipeJsonRender(k.readable)}var Kt=lazy(()=>import('./spec-renderer-ZZ3GPVKU.js').then(e=>({default:e.RunSpecPart})));function Zt(e){return jsx(Suspense,{fallback:null,children:jsx(Kt,{...e})})}function ea(){let{currentProjectId:e}=g$1();return {api:useMemo(()=>e?d(e):null,[e]),projectId:e}}var Fe=5,Ke=2e3,Ze=120,ce="data-spec",ta=createContext(null),aa=createContext(false);function na(e){return new Promise(t=>window.setTimeout(t,e))}function ra(e){return e instanceof Error?e.name==="AbortError"||e.message.toLowerCase().includes("aborted"):false}function sa(e){return e.some(t=>!ae(t))}function oa(e){let t=new Set;for(let n of e)for(let a of n.parts)a.type==="data-user-message"&&a.id&&t.add(a.id);return t}function ia(e){let t=oa(e),n=[];for(let a of e){if(a.role==="user"){t.has(a.id)||n.push(a);continue}if(a.role!=="assistant"){n.push(a);continue}let r=[],s=0,l=()=>{sa(r)&&n.push({...a,id:`${a.id}-${s.toString()}`,parts:r}),s++,r=[];};for(let u of a.parts){if(u.type==="data-user-message"){let c=g(u);l(),n.push({id:u.id??crypto.randomUUID(),parts:c.parts,role:"user"});continue}r.push(u);}l();}return n}function dn(e){return useMemo(()=>ia(e),[e])}function F(e){return e==="success"||e==="failed"||e==="cancelled"||e==="skipped"}function et({latestMessage:e,recordStatus:t,suppressApprovalPause:n}){return F(t)||n||t==="running"?false:t==="awaiting_approval"?true:ue(e)}function cn(e,t){let[n,a]=useState(false),r=la(n?e:"",t),[s,l]=useState(),[u,c]=useState("streaming"),k=useRef(t);k.current=t;let m=useRef(null);m.current||(m.current=new EventTarget);let y=m.current,x=t?.resumeToken;return useEffect(()=>{y.dispatchEvent(new Event("wake"));},[x,y]),useEffect(()=>{if(a(false),l(void 0),!e){c("unavailable");return}let h=new AbortController,b,d,R=()=>{b=void 0,d&&!h.signal.aborted&&l({...d});},w=Ue({url:e,signal:h.signal,state:()=>({terminal:F(k.current?.recordStatus),paused:et({latestMessage:d,recordStatus:k.current?.recordStatus,suppressApprovalPause:k.current?.suppressApprovalPause??false})}),onState:A=>{h.signal.aborted||c(A);},wake:y});return (async()=>{try{for await(let A of readUIMessageStream({stream:w,terminateOnError:!0}))d=A,b||(b=setTimeout(R,Ze));R();}catch(A){if(h.signal.aborted)return;A instanceof X?a(true):(console.error("Run stream error",A),c("error"));}})(),()=>{h.abort(),b&&clearTimeout(b);}},[e,y]),n?r:{message:s?de(s,t?.decidedApprovals??{}):void 0,status:u}}function la(e,t){let[n,a]=useState(),[r,s]=useState("streaming"),l=t?.recordStatus,u=t?.resumeToken??0,c=useRef(t?.decidedApprovals??{});c.current=t?.decidedApprovals??{};let k=useRef(t?.suppressApprovalPause??false);k.current=t?.suppressApprovalPause??false;let m=useRef(e),y=useRef(n);return y.current=n,useEffect(()=>{let x=m.current!==e;if(m.current=e,!e){a(void 0),s("unavailable");return}let h=new AbortController,b=x?void 0:y.current,d=x?0:b?.parts.length??0;if(x)a(void 0);else if(b&&(l==="running"||F(l))){let v=de(b,c.current);v!==b&&(b=v,a(v));}s("streaming");let R=e.includes("?")?"&":"?",w=async()=>{let v=await fetch(`${e}${R}startIndex=0`,{credentials:"include",signal:h.signal});if(v.status===404)return "unavailable";if(!v.ok||!v.body)throw new Error(`Failed to fetch the run stream (status ${v.status.toString()})`);let P=false,T=parseJsonEventStream({schema:uiMessageChunkSchema,stream:v.body}).pipeThrough(new TransformStream({transform:(D,tt)=>{if(!D.success)throw D.error;D.value.type==="finish"&&(P=true),tt.enqueue(D.value);}})),S=readUIMessageStream({onError:D=>{h.signal.aborted||console.error("Run stream chunk error",D);},stream:T}),$=null,se=d===0,ke=(D=false)=>{h.signal.aborted||!b||!se&&(se=D||b.parts.length>=d,!se)||a({...b});};try{for await(let D of S){if(h.signal.aborted)break;b=D,$===null&&($=window.setTimeout(()=>{$=null,ke();},Ze));}}finally{$!==null&&(window.clearTimeout($),$=null),ke(true);}return P?"finished":"incomplete"},A=async()=>{let v=0;for(;!h.signal.aborted;){v>0&&await na(Ke);try{let P=await w();if(h.signal.aborted)return;if(P==="unavailable"){s("unavailable");return}if(P==="finished"&&F(l)){s("finished");return}if(F(l)){s("finished");return}if(et({latestMessage:b,recordStatus:l,suppressApprovalPause:k.current})){s("paused");return}if(!(l==="running"||k.current)&&v>=Fe-1){s("error");return}}catch(P){if(h.signal.aborted||ra(P))return;if(console.error("Run stream error",P),F(l)){s("finished");return}if(!(l==="running"||k.current)&&v>=Fe-1){s("error");return}}v+=1;}},H=window.setTimeout(()=>{A();},0);return ()=>{window.clearTimeout(H),h.abort("Run replay unmounted");}},[l,u,e]),{message:n,status:r}}function pn(e){return {affectedCount:e.affectedCount,approvalId:e.id,decidedBy:e.decidedBy??void 0,operationsSummary:e.operationsSummary,reason:e.reason??void 0,status:e.status}}function ua(e){let t=e.trim();return t?t.split(`
|
|
5
|
+
`).every(n=>/^`{3,}[\w-]*$/.test(n.trim())):false}function fn({api:e,part:t,partIndex:n,parts:a}){if(ae(t))return null;if(V(t.type)){let r=te(t);return r?jsx(ca,{message:r}):null}if(t.type==="text")return ua(t.text)&&a.some(s=>s.type===ce)?null:jsx(da,{part:t});if(t.type==="data-generating-files")return jsx(ga,{message:g(t)});if(t.type==="data-run-artifact")return jsx(ya,{api:e,message:g(t)});if(t.type==="data-tool-delivery")return jsx(va,{message:g(t)});if(t.type==="data-run-summary")return jsx(ba,{message:g(t)});if(t.type==="data-subtask"){let r=g(t),s=r.status==="running"?`Running "${r.title}"`:r.status==="done"?`Completed "${r.title}"${typeof r.stepsUsed=="number"?` in ${r.stepsUsed.toString()} steps`:""}`:`"${r.title}" failed: ${r.error?.message??"unknown error"}`;return jsxs(I,{children:[jsxs(j,{children:[jsx(BotIcon,{className:"fk:size-3.5"}),"Subtask"]}),jsxs("div",{className:"fk:relative fk:min-h-5 fk:pl-6",children:[jsx("span",{className:"fk:absolute fk:left-0 fk:top-0",children:jsx(re,{isError:r.status==="error",loading:r.status==="running"})}),jsx("span",{className:"fk:text-xs",children:s}),r.resultPreview?jsx("p",{className:"fk:mt-1 fk:text-xs fk:text-muted-foreground",children:r.resultPreview}):null]})]})}if(t.type==="data-context-compaction"){let r=g(t);return jsxs("p",{className:"fk:text-xs fk:text-muted-foreground",children:["Earlier messages (",r.summarizedMessageCount.toString(),") were summarized to keep this conversation within the model's context. Details may need to be re-fetched."]})}if(t.type==="data-plugin-connection"){let r=g(t);return jsx(Pa,{pluginId:r.pluginId})}if(t.type==="data-suggested-prompt")return null;if(t.type==="data-turn-error"){let r=g(t);return jsxs(I,{className:"fk:border-red-700/40",children:[jsxs(j,{children:[jsx(XCircleIcon,{className:"fk:size-3.5 fk:text-red-700"}),jsx("span",{children:"Turn failed"})]}),jsx("p",{className:"fk:whitespace-pre-wrap fk:text-xs",children:r.message})]})}if(t.type==="data-mutation-approval"){let r=g(t);return le(r)?jsx(xa,{message:r}):jsx(ha,{api:e,message:r})}return t.type==="data-bulk-graphql-action"?jsx(Ra,{message:g(t)}):t.type===ce?a.slice(n+1).find(s=>s.type===ce)?null:jsx(Zt,{parts:a}):t.type.startsWith("data-")?jsx(Sa,{part:t}):null}function da({part:e}){return jsx(ub,{className:"fk:min-w-0 fk:max-w-full fk:overflow-x-auto fk:text-base fk:leading-relaxed fk:text-foreground",isAnimating:e.state==="streaming",children:e.text})}function ca({message:e}){return jsxs("div",{className:"fk:flex fk:items-start fk:gap-2 fk:rounded-xl fk:border fk:border-red-700/40 fk:bg-destructive/5 fk:px-3.5 fk:py-3 fk:text-sm fk:corner-squircle",children:[jsx(XCircleIcon,{className:"fk:mt-0.5 fk:size-3.5 fk:shrink-0 fk:text-red-700"}),jsx("span",{className:"fk:whitespace-pre-wrap fk:text-xs",children:e})]})}var pa=1e3;function fa({text:e}){let t=useRef(typeof performance>"u"?0:performance.now()),n=()=>-(((typeof performance>"u"?0:performance.now())-t.current)%pa),[a,r]=useState({current:e,currentDelayMs:0,key:0,previous:null,previousDelayMs:0});return useEffect(()=>{r(s=>s.current===e?s:{current:e,currentDelayMs:n(),key:s.key+1,previous:s.current,previousDelayMs:s.currentDelayMs});},[e]),jsxs("span",{className:"fk:relative fk:block fk:h-5 fk:min-w-0 fk:flex-1 fk:overflow-hidden",children:[a.previous?jsx("span",{"aria-hidden":true,className:"fk:absolute fk:inset-x-0 fk:top-0 fk:block fk:animate-roll-up-out",children:jsx("span",{className:"fk:block fk:truncate fk:shimmer fk:shimmer-duration-1000",style:{animationDelay:`${a.previousDelayMs.toString()}ms`},children:a.previous})},`previous-${a.key.toString()}`):null,jsx("span",{className:a.previous?"fk:block fk:animate-roll-up-in":"fk:block",role:"status",children:jsx("span",{className:"fk:block fk:truncate fk:shimmer fk:shimmer-duration-1000",style:{animationDelay:`${a.currentDelayMs.toString()}ms`},children:a.current})},`current-${a.key.toString()}`)]})}var ma=1e3;function ka(e,t){let n=ma,[a,r]=useState(e),s=useRef(Date.now()),l=useRef(e);return l.current=e,useEffect(()=>{if(e===a)return;let u=Math.max(0,n-(Date.now()-s.current)),c=window.setTimeout(()=>{s.current=Date.now(),r(l.current);},u);return ()=>{window.clearTimeout(c);}},[a,e,n]),a}function mn({label:e,visible:t}){let n=ka(e);return jsx("div",{"aria-hidden":!t,className:`fk:flex fk:h-9 fk:items-center fk:text-sm fk:text-muted-foreground fk:transition-[opacity,visibility] fk:duration-200 ${t?"fk:visible fk:opacity-100":"fk:invisible fk:opacity-0"}`,children:jsx(fa,{text:n})})}function I({children:e,className:t=""}){return jsx("div",{className:`fk:min-w-0 fk:max-w-full fk:overflow-x-auto fk:rounded-xl fk:border fk:border-border fk:bg-background fk:px-3.5 fk:py-3 fk:text-sm ${t} fk:corner-squircle`,children:e})}function j({children:e}){return jsx("div",{className:"fk:flex fk:items-center fk:gap-2 fk:font-medium fk:text-muted-foreground",children:e})}function re({isError:e,loading:t}){return t?jsx(LoaderCircle,{className:"fk:size-4 fk:animate-spin"}):e?jsx(XIcon,{className:"fk:size-4 fk:text-red-700"}):jsx(CheckIcon,{className:"fk:size-4"})}function me({error:e,icon:t,loading:n,message:a,title:r}){return jsxs(I,{children:[jsxs(j,{children:[t,r]}),jsxs("div",{className:"fk:relative fk:min-h-5 fk:pl-6",children:[jsx("span",{className:"fk:absolute fk:left-0 fk:top-0",children:jsx(re,{isError:!!e,loading:n})}),jsx("span",{className:"fk:text-xs",children:a})]})]})}function ga({message:e}){let t=["error","uploading","generating"].includes(e.status),n=t?e.paths.slice(0,e.paths.length-1):e.paths,a=t?e.paths[e.paths.length-1]??"":null;return jsxs(I,{children:[jsxs(j,{children:[jsx(CloudUploadIcon,{className:"fk:size-3.5"}),jsx("span",{children:e.status==="done"?"Uploaded files":"Generating files"})]}),jsxs("div",{className:"fk:space-y-1 fk:text-sm",children:[n.map((r,s)=>jsxs("div",{className:"fk:flex fk:items-center fk:gap-2",children:[jsx(CheckIcon,{className:"fk:size-4"}),jsx("span",{className:"fk:whitespace-pre-wrap",children:r})]},`${r}-${s.toString()}`)),typeof a=="string"?jsxs("div",{className:"fk:flex fk:items-center fk:gap-2",children:[jsx(re,{isError:e.status==="error",loading:e.status!=="error"}),jsx("span",{children:e.status==="error"?e.error?.message??a:a})]}):null]})]})}function ya({api:e,message:t}){let n=t.status==="done"&&t.artifactId,a=n?e.getArtifactUrl(t.artifactId??""):"",r=n?e.getArtifactUrl(t.artifactId??"",{download:true}):"",s=wa(t.sizeBytes);return jsxs(I,{children:[jsxs(j,{children:[jsx(FileTextIcon,{className:"fk:size-3.5"}),t.status==="done"?"Published artifact":"Publishing artifact"]}),jsxs("div",{className:"fk:relative fk:min-h-5 fk:pl-6",children:[jsx("span",{className:"fk:absolute fk:left-0 fk:top-0",children:jsx(re,{isError:t.status==="error",loading:t.status==="uploading"})}),jsxs("div",{className:"fk:min-w-0 fk:space-y-2",children:[jsxs("div",{className:"fk:min-w-0",children:[jsx("div",{className:"fk:truncate fk:font-medium",children:t.filename}),jsxs("div",{className:"fk:text-xs fk:text-muted-foreground",children:[t.status==="uploading"&&"Uploading to artifacts",t.status==="done"&&[Aa(t),s].filter(Boolean).join(" \xB7 "),t.status==="error"&&(t.error?.message??"Failed to publish artifact")]})]}),n?jsxs("div",{className:"fk:flex fk:flex-wrap fk:gap-2",children:[jsx(d$1,{asChild:true,size:"sm",variant:"outline",children:jsx("a",{href:a,rel:"noreferrer",target:"_blank",children:"Preview"})}),jsx(d$1,{asChild:true,size:"sm",variant:"outline",children:jsxs("a",{href:r,children:[jsx(DownloadIcon,{className:"fk:size-3"}),"Download"]})}),t.url?jsx(d$1,{asChild:true,size:"sm",variant:"outline",children:jsxs("a",{href:t.url,rel:"noreferrer",target:"_blank",children:[jsx(LinkIcon,{className:"fk:size-3"}),"Permanent link"]})}):null]}):null]})]})]})}function va({message:e}){let t=e.provider==="slack"?"Slack":"Microsoft Teams",n=e.provider==="slack"?jsx(MessageSquareIcon,{className:"fk:size-3.5"}):jsx(SendIcon,{className:"fk:size-3.5"});return jsx(me,{error:e.error?.message,icon:n,loading:e.status==="loading",message:e.status==="error"?e.error?.message??`Failed to send result to ${e.channelName}`:`${e.status==="done"?"Sent":"Sending"} result to ${e.channelName}`,title:`${t} Delivery`})}function ba({message:e}){let t=e.status==="success"?jsx(CheckCircle2Icon,{className:"fk:size-3.5 fk:text-green-700"}):e.status==="skipped"?jsx(CircleSlashIcon,{className:"fk:size-3.5"}):jsx(XCircleIcon,{className:"fk:size-3.5 fk:text-red-700"}),n=e.status==="success"?"Run completed":e.status==="skipped"?"Run skipped":"Run failed";return jsxs(I,{className:e.status==="failed"?"fk:border-red-700/40":"fk:border-green-700/40",children:[jsxs(j,{children:[t,jsx("span",{children:n})]}),e.status==="failed"?jsx("p",{className:"fk:whitespace-pre-wrap fk:text-xs",children:e.summary}):null]})}function ha({api:e,message:t}){let{projectId:n}=ea(),a=useContext(ta),r=useContext(aa),s=useRef(void 0),{data:l,error:u,isValidating:c,mutate:k}=Wt(n?g$2(n).approval(t.approvalId):null,f,{refreshInterval:d=>t.status!=="pending"||d?.approval?.status&&d.approval.status!=="pending"?0:Ke}),m=l?.approval?.status,y=(m??t.status)==="pending",x=l?.approval?.kind==="schema"&&l.approval.status==="approved";useEffect(()=>{!x||!n||Z({approvalId:t.approvalId,approvalUrl:g$2(n).approval(t.approvalId),projectId:n});},[x,t.approvalId,n]),useEffect(()=>{k();},[t.status,k]),useEffect(()=>{let d=s.current;s.current=m,!(t.status!=="pending"||!m||m==="pending")&&d==="pending"&&a?.onApprovalDecided(l?.approval?.id??t.approvalId,m);},[m,l?.approval?.id,t.approvalId,t.status,a]);function h(d){d.status!=="pending"&&(s.current=d.status),k(),a?.onApprovalDecided(d.id,d.status);}let b;if(l?.approval)b=jsx(ze,{api:e,approval:l.approval,chat:r,onDecided:h},l.approval.status);else if(u&&!c){let d=u instanceof Error&&u.message?u.message:"Request failed";b=jsxs("div",{className:"fk:space-y-2",children:[jsxs("p",{className:"fk:text-xs fk:text-destructive",children:["Failed to load proposal ",t.operationsSummary,": ",d]}),jsx(d$1,{size:"sm",variant:"outline",onClick:()=>{k();},children:"Retry"})]});}else b=jsxs("div",{className:"fk:flex fk:items-center fk:gap-2 fk:text-xs fk:text-muted-foreground",children:[jsx(LoaderCircle,{className:"fk:size-3.5 fk:animate-spin"}),jsxs("span",{children:["Loading proposal ",t.operationsSummary,"..."]})]});return jsxs(I,{children:[jsxs(j,{children:[r?jsx(ShieldIcon,{className:"fk:size-3.5"}):jsx(DatabaseZapIcon,{className:"fk:size-3.5"}),r?"Approval request":"Mutation approval",y?jsx(LoaderCircle,{className:"fk:ml-1 fk:size-3.5 fk:animate-spin"}):null]}),jsx("div",{className:"fk:mt-2",children:b}),t.status==="error"&&t.error?jsx("p",{className:"fk:mt-2 fk:text-xs fk:text-destructive",children:t.error.message}):null]})}function xa({message:e}){let t=e.operationsSummary.replace(/^Call /,"");return jsx(me,{error:e.status==="error"?e.error?.message??"The call failed.":void 0,icon:jsx(ShieldCheckIcon,{className:"fk:size-3.5"}),loading:false,message:e.status==="error"?`${t}: ${e.error?.message??"The call failed."}`:`${t} \xB7 Auto-approved by Jev`,title:"Plugin call"})}function Ra({message:e}){let t=[typeof e.processedItems=="number"?`${e.processedItems.toString()} processed`:"",typeof e.changedItems=="number"?`${e.changedItems.toString()} changed`:"",typeof e.failedItems=="number"?`${e.failedItems.toString()} failed`:"",typeof e.totalItems=="number"?`${e.totalItems.toString()} total`:""].filter(Boolean);return jsx(me,{error:e.error?.message,icon:jsx(DatabaseZapIcon,{className:"fk:size-3.5"}),loading:e.status==="loading"||e.status==="running",message:e.status==="error"?e.error?.message??`Failed bulk ${e.operationName}`:`${e.status==="done"?"Completed":"Running"} ${e.operationName}${t.length>0?` (${t.join(", ")})`:""}`,title:"Bulk GraphQL action"})}function Sa({part:e}){return jsxs(I,{className:"fk:bg-muted/30",children:[jsxs(j,{children:[jsx(CheckCircle2Icon,{className:"fk:size-3.5"}),e.type.replace(/^data-/,"").replaceAll("-"," ")]}),jsx("p",{className:"fk:text-xs fk:text-muted-foreground",children:"This run emitted a structured event that is not yet rendered by Studio."})]})}function wa(e){if(typeof e!="number")return "";if(e<1024)return `${e.toString()} B`;let t=e/1024;return t<1024?`${t.toFixed(1)} KB`:`${(t/1024).toFixed(1)} MB`}function Aa(e){return e.kind==="pdf"?"PDF artifact":e.kind==="html"?"HTML artifact":"Artifact"}function Pa({pluginId:e}){let{pathname:t}=useLocation(),[n]=t.split("/ai/");return jsxs(I,{children:[jsxs("p",{className:"fk:text-sm",children:["Connect ",e," to use it in this conversation."]}),jsx(d$1,{asChild:true,size:"sm",variant:"outline",children:jsxs(Link,{to:`${n}/ai/plugins/${encodeURIComponent(e)}`,children:["Connect ",e]})})]})}export{Ne as a,mt as b,Ja as c,ae as d,Ct as e,ue as f,qe as g,It as h,ea as i,Ke as j,ta as k,aa as l,dn as m,F as n,cn as o,pn as p,fn as q,ca as r,mn as s,ha as t};//# sourceMappingURL=chunk-BURKG2UC.js.map
|
|
6
|
+
//# sourceMappingURL=chunk-BURKG2UC.js.map
|