@flexkit/studio 0.0.31 → 0.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/asset-ZVPFS73O.js +2 -0
- package/dist/{asset-TS7J5GA5.js.map → asset-ZVPFS73O.js.map} +1 -1
- package/dist/astro.d.ts +5 -3
- package/dist/astro.js +8 -3
- package/dist/chunk-2OBWJ6UY.js +2 -0
- package/dist/chunk-2OBWJ6UY.js.map +1 -0
- package/dist/{chunk-R7N3MDOP.js → chunk-AEBTHXEP.js} +2 -2
- package/dist/{chunk-R7N3MDOP.js.map → chunk-AEBTHXEP.js.map} +1 -1
- package/dist/{chunk-W3TUEJJL.js → chunk-CCI3FGPF.js} +2 -2
- package/dist/{chunk-W3TUEJJL.js.map → chunk-CCI3FGPF.js.map} +1 -1
- package/dist/chunk-D62TAYLI.js +2 -0
- package/dist/chunk-D62TAYLI.js.map +1 -0
- package/dist/{chunk-UKLE7J3K.js → chunk-E7G46743.js} +139 -16
- package/dist/chunk-F2ILIHAU.js +2 -0
- package/dist/chunk-F2ILIHAU.js.map +1 -0
- package/dist/{chunk-EOCJR5EY.js → chunk-FPH4YETF.js} +2 -2
- package/dist/{chunk-EOCJR5EY.js.map → chunk-FPH4YETF.js.map} +1 -1
- package/dist/chunk-GFDWGYUR.js +2 -0
- package/dist/chunk-GFDWGYUR.js.map +1 -0
- package/dist/{chunk-CPUC4QXH.js → chunk-JAARDXQZ.js} +2 -2
- package/dist/{chunk-CPUC4QXH.js.map → chunk-JAARDXQZ.js.map} +1 -1
- package/dist/{chunk-IXO2LU47.js → chunk-JCHD4EGB.js} +2 -2
- package/dist/{chunk-IXO2LU47.js.map → chunk-JCHD4EGB.js.map} +1 -1
- package/dist/chunk-KHPTVIYT.js +2 -0
- package/dist/chunk-KHPTVIYT.js.map +1 -0
- package/dist/chunk-MGXHZDFZ.js +2 -0
- package/dist/chunk-MGXHZDFZ.js.map +1 -0
- package/dist/chunk-MLYKIVZC.js +2 -0
- package/dist/chunk-MLYKIVZC.js.map +1 -0
- package/dist/chunk-N2T6MKPV.js +2 -0
- package/dist/chunk-N2T6MKPV.js.map +1 -0
- package/dist/{chunk-DWK4NNLB.js → chunk-ORY5DLME.js} +2 -2
- package/dist/{chunk-DWK4NNLB.js.map → chunk-ORY5DLME.js.map} +1 -1
- package/dist/chunk-PXB5QSHN.js +2 -0
- package/dist/chunk-PXB5QSHN.js.map +1 -0
- package/dist/chunk-VHNQDP7Q.js +616 -0
- package/dist/chunk-VUAFNQK7.js +2 -0
- package/dist/chunk-VUAFNQK7.js.map +1 -0
- package/dist/chunk-XFY7MZJN.js +2 -0
- package/dist/chunk-XFY7MZJN.js.map +1 -0
- package/dist/{core-handler-XAVVKLhV.d.ts → core-handler-C3xC98bN.d.ts} +3 -0
- package/dist/datetime-DDEWTNLB.js +2 -0
- package/dist/{datetime-NQTYGZIC.js.map → datetime-DDEWTNLB.js.map} +1 -1
- package/dist/editor-HAYTKNMY.js +2 -0
- package/dist/{editor-YIRZQR3D.js.map → editor-HAYTKNMY.js.map} +1 -1
- package/dist/index.css +151 -41
- package/dist/index.d.ts +24 -21
- package/dist/index.js +161 -208
- package/dist/index.js.map +1 -1
- package/dist/logo-B6ZKLGM7.js +3 -0
- package/dist/logo-B6ZKLGM7.js.map +1 -0
- package/dist/nextjs.d.ts +40 -12
- package/dist/nextjs.js +8 -3
- package/dist/search-FTC7ELZX.js +2 -0
- package/dist/search-FTC7ELZX.js.map +1 -0
- package/dist/select-H3JHOCWR.js +2 -0
- package/dist/{select-A6I27JQU.js.map → select-H3JHOCWR.js.map} +1 -1
- package/dist/switch-TACKLQJH.js +2 -0
- package/dist/{switch-AFZGXSR3.js.map → switch-TACKLQJH.js.map} +1 -1
- package/dist/tanstack-start.d.ts +6 -4
- package/dist/tanstack-start.js +17 -12
- package/dist/text-M3DRK7LU.js +2 -0
- package/dist/{text-2RL2L5FT.js.map → text-M3DRK7LU.js.map} +1 -1
- package/dist/text-SQXG7XJT.js +2 -0
- package/dist/{text-6F4QTCNT.js.map → text-SQXG7XJT.js.map} +1 -1
- package/dist/textarea-YF4K2VBM.js +2 -0
- package/dist/{textarea-2A4TLWZS.js.map → textarea-YF4K2VBM.js.map} +1 -1
- package/dist/tools.d.ts +78 -0
- package/dist/tools.js +60 -0
- package/dist/types-U28Ppixq.d.ts +56 -0
- package/dist/{types.d-CX3kDxFZ.d.ts → types.d-C12xWeN_.d.ts} +86 -7
- package/dist/ui.d.ts +21 -5
- package/dist/ui.js +5 -5
- package/dist/ui.js.map +1 -1
- package/dist/{user-nav-4JKIFZLB.js → user-nav-Z7GBLYQA.js} +2 -2
- package/dist/{user-nav-4JKIFZLB.js.map → user-nav-Z7GBLYQA.js.map} +1 -1
- package/package.json +8 -4
- package/dist/asset-TS7J5GA5.js +0 -2
- package/dist/chunk-73RMWG53.js +0 -2
- package/dist/chunk-73RMWG53.js.map +0 -1
- package/dist/chunk-HAQICAOQ.js +0 -2
- package/dist/chunk-HAQICAOQ.js.map +0 -1
- package/dist/chunk-LL2Z4TD3.js +0 -2
- package/dist/chunk-LL2Z4TD3.js.map +0 -1
- package/dist/chunk-MC6VZLKC.js +0 -2
- package/dist/chunk-MC6VZLKC.js.map +0 -1
- package/dist/chunk-N52AF6GE.js +0 -2
- package/dist/chunk-N52AF6GE.js.map +0 -1
- package/dist/chunk-V6R4AWQS.js +0 -2
- package/dist/chunk-V6R4AWQS.js.map +0 -1
- package/dist/chunk-WXMCINGZ.js +0 -2
- package/dist/chunk-WXMCINGZ.js.map +0 -1
- package/dist/chunk-WZ533Y4O.js +0 -2
- package/dist/chunk-WZ533Y4O.js.map +0 -1
- package/dist/chunk-YA4ACPM5.js +0 -2
- package/dist/chunk-YA4ACPM5.js.map +0 -1
- package/dist/chunk-ZEZ6TRCO.js +0 -2
- package/dist/chunk-ZEZ6TRCO.js.map +0 -1
- package/dist/datetime-NQTYGZIC.js +0 -2
- package/dist/editor-YIRZQR3D.js +0 -2
- package/dist/logo-GCKKZP62.js +0 -3
- package/dist/logo-GCKKZP62.js.map +0 -1
- package/dist/search-UFFZBRQV.js +0 -2
- package/dist/search-UFFZBRQV.js.map +0 -1
- package/dist/select-A6I27JQU.js +0 -2
- package/dist/switch-AFZGXSR3.js +0 -2
- package/dist/text-2RL2L5FT.js +0 -2
- package/dist/text-6F4QTCNT.js +0 -2
- package/dist/textarea-2A4TLWZS.js +0 -2
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ Visit [https://flexkit.io/docs](https://flexkit.io/docs) to view the full docume
|
|
|
28
28
|
|
|
29
29
|
## Contributing
|
|
30
30
|
|
|
31
|
-
Contributions to Flexkit are welcome and highly appreciated. However, before you jump right into it, we would like you to review our [Contribution Guidelines](/
|
|
31
|
+
Contributions to Flexkit are welcome and highly appreciated. However, before you jump right into it, we would like you to review our [Contribution Guidelines](/CONTRIBUTING.md) to make sure you have a smooth experience contributing to Flexkit.
|
|
32
32
|
|
|
33
33
|
## Reporting Issues
|
|
34
34
|
|
|
@@ -52,4 +52,4 @@ See [LICENSE](https://github.com/flexkit-io/flexkit/blob/main/LICENSE) for more
|
|
|
52
52
|
|
|
53
53
|
If you believe you have found a security vulnerability in Flexkit, we encourage you to **_responsibly disclose this and NOT open a public issue_**.
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
See [SECURITY.md](/SECURITY.md) for how to report.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"asset-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"asset-ZVPFS73O.js"}
|
package/dist/astro.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { F as FlexkitHandlerOptions } from './types-U28Ppixq.js';
|
|
2
|
+
export { F as FlexkitHandlerContext, a as FlexkitHandlerResult, h as handleFlexkitRequest } from './core-handler-C3xC98bN.js';
|
|
3
|
+
import 'zod';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* Types for Astro API context
|
|
@@ -44,7 +46,7 @@ type AstroAPIRoute = (context: AstroAPIContext) => Promise<Response>;
|
|
|
44
46
|
* export const ALL = handler;
|
|
45
47
|
* ```
|
|
46
48
|
*/
|
|
47
|
-
declare function createFlexkitAstroHandler(): AstroAPIRoute;
|
|
49
|
+
declare function createFlexkitAstroHandler(options?: FlexkitHandlerOptions): AstroAPIRoute;
|
|
48
50
|
/**
|
|
49
51
|
* Alternative: Direct handler function for Astro API routes.
|
|
50
52
|
* Use this if you prefer not to use the factory pattern.
|
|
@@ -65,4 +67,4 @@ declare function createFlexkitAstroHandler(): AstroAPIRoute;
|
|
|
65
67
|
*/
|
|
66
68
|
declare function handleFlexkitAstroRequest(context: AstroAPIContext): Promise<Response>;
|
|
67
69
|
|
|
68
|
-
export { createFlexkitAstroHandler, handleFlexkitAstroRequest };
|
|
70
|
+
export { FlexkitHandlerOptions, createFlexkitAstroHandler, handleFlexkitAstroRequest };
|
package/dist/astro.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
handleFlexkitRequest
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-E7G46743.js";
|
|
4
|
+
import {
|
|
5
|
+
assertUniqueSkillNames
|
|
6
|
+
} from "./chunk-VHNQDP7Q.js";
|
|
4
7
|
|
|
5
8
|
// src/auth/astro-api.ts
|
|
6
9
|
function resultToResponse(result) {
|
|
@@ -20,7 +23,8 @@ function resultToResponse(result) {
|
|
|
20
23
|
headers.set("Content-Type", "application/json");
|
|
21
24
|
return new Response(JSON.stringify(result.body), { status: result.status, headers });
|
|
22
25
|
}
|
|
23
|
-
function createFlexkitAstroHandler() {
|
|
26
|
+
function createFlexkitAstroHandler(options) {
|
|
27
|
+
assertUniqueSkillNames(options?.skills ?? []);
|
|
24
28
|
return async (context) => {
|
|
25
29
|
const { request, cookies } = context;
|
|
26
30
|
const url = new URL(request.url);
|
|
@@ -29,7 +33,8 @@ function createFlexkitAstroHandler() {
|
|
|
29
33
|
pathname: url.pathname,
|
|
30
34
|
search: url.search,
|
|
31
35
|
sessionToken: cookies.get("sessionToken")?.value ?? "",
|
|
32
|
-
contentType: request.headers.get("content-type")
|
|
36
|
+
contentType: request.headers.get("content-type"),
|
|
37
|
+
options
|
|
33
38
|
});
|
|
34
39
|
return resultToResponse(result);
|
|
35
40
|
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {createContext,useMemo,useContext}from'react';import {path,has}from'ramda';import {useParams}from'react-router-dom';import {jsx}from'react/jsx-runtime';var c={name:"_asset",plural:"_assets",display:"originalFilename",menu:{hidden:true},attributes:[{name:"path",label:"Asset",scope:"global",options:{size:140},dataType:"string",inputType:"text",previewType:"assetPreviewField",defaultValue:""},{name:"originalFilename",label:"Filename",scope:"global",options:{size:320},dataType:"string",inputType:"text",previewType:"text",defaultValue:""},{name:"size",label:"Size",scope:"global",options:{size:120},dataType:"int",inputType:"text",previewType:"text",defaultValue:""},{name:"width",label:"Width",scope:"global",options:{size:90},dataType:"int",inputType:"text",previewType:"text",defaultValue:""},{name:"height",label:"Height",scope:"global",options:{size:100},dataType:"int",inputType:"text",previewType:"text",defaultValue:""},{name:"mimeType",label:"Mime Type",scope:"global",options:{size:160},dataType:"string",inputType:"text",previewType:"text",defaultValue:""},{name:"lqip",label:"lqip",scope:"global",hidden:true,dataType:"string",inputType:"text",previewType:"text",defaultValue:""},{name:"url",label:"URL",scope:"global",hidden:true,readOnly:true,dataType:"string",inputType:"text",previewType:"text",defaultValue:""},{name:"_updatedAt",label:"Updated At",scope:"global",options:{size:220},readOnly:true,hidden:true,dataType:"datetime",inputType:"datetime",previewType:"datetime",defaultValue:""},{name:"tags",label:"Tags",scope:"relationship",dataType:"string",inputType:"relationship",defaultValue:"",previewType:"tags",options:{size:300},relationship:{mode:"multiple",field:"name",entity:"_tag"}}]};var d={name:"_tag",plural:"_tags",display:"name",menu:{hidden:true},attributes:[{name:"name",label:"Tag Name",scope:"global",options:{size:220},dataType:"string",inputType:"text",previewType:"text",defaultValue:""},{name:"_updatedAt",label:"Updated At",scope:"global",options:{size:220},readOnly:true,hidden:true,dataType:"datetime",inputType:"datetime",previewType:"datetime",defaultValue:""},{name:"assets",label:"Assets",scope:"relationship",dataType:"string",inputType:"relationship",defaultValue:"",relationship:{mode:"multiple",field:"originalFilename",entity:"_asset"}}]};var T=createContext({contributions:{apps:[]},currentProjectId:void 0,currentProjectSchema:[],getContributionPointConfig:()=>[],plugins:[],projects:[]}),l=n=>Object.prototype.hasOwnProperty.call(n,"projectId"),g=n=>Object.prototype.hasOwnProperty.call(n,"contributes");function F({config:n,children:o}){let{projectId:i}=useParams(),t=useMemo(()=>{let e=s=>[...s.filter(P=>P.name!==c.name&&P.name!==d.name),c,d];return n.map(s=>({...s,schema:e(s.schema)}))},[n]),p=useMemo(()=>r(["plugins"],t),[t]),m=useMemo(()=>r(["plugins"],t.filter(e=>e.projectId===i)),[t,i]),f=useMemo(()=>p.filter(e=>!l(e)&&g(e)),[p]),u=useMemo(()=>m.filter(e=>!l(e)&&g(e)),[m]),O=useMemo(()=>({contributions:{apps:y("apps",[],u)},currentProjectId:i,currentProjectSchema:t.find(e=>e.projectId===i)?.schema??[],getContributionPointConfig:(e,s=[])=>y(e,s,u),plugins:f,projects:p.filter(e=>l(e))}),[f,i,u,t,p]);return jsx(T.Provider,{value:O,children:o})}function R(){return useContext(T)}function r(n,o){return Array.isArray(o)?o.reduce((i,t)=>path(n,t)?[...i,t,...r(n,path(n,t)??[])]:[...i,t],[]):[o]}function y(n,o=[],i){let t=["contributes",n,...o];return r(t.flat(),i).filter(p=>has("component",p))}function N(n){let i=r(["plugins"],n).filter(t=>!l(t)&&g(t));return y("apps",[],i)}export{c as a,d as b,F as c,R as d,N as e};//# sourceMappingURL=chunk-2OBWJ6UY.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-2OBWJ6UY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/entities/assets-schema.ts","../src/entities/tags-schema.ts","../src/core/config/config-context.tsx"],"names":["assetSchema","tagSchema","ConfigContext","createContext","hasProjectIdProperty","configItem","hasContributesProperty","ConfigProvider","config","children","currentProjectId","useParams","enhancedConfig","useMemo","upsertReservedEntities","schema","entity","project","globalFlattenedConfig","flattenConfigByProperty","currentProjectFlattenedConfig","item","allPlugins","currentProjectPlugins","globalConfig","_getContributionPointConfig","contributionPoint","subPath","jsx","useConfig","useContext","property","acc","curr","path","pathArray","has","getApps","plugins"],"mappings":"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","file":"chunk-2OBWJ6UY.js","sourcesContent":["import type { Entity } from '../core/types';\n\nexport const assetSchema: Entity = {\n name: '_asset',\n plural: '_assets',\n display: 'originalFilename',\n menu: {\n hidden: true,\n },\n attributes: [\n {\n name: 'path',\n label: 'Asset',\n scope: 'global',\n options: {\n size: 140,\n },\n dataType: 'string',\n inputType: 'text',\n previewType: 'assetPreviewField',\n defaultValue: '',\n },\n {\n name: 'originalFilename',\n label: 'Filename',\n scope: 'global',\n options: {\n size: 320,\n },\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'size',\n label: 'Size',\n scope: 'global',\n options: {\n size: 120,\n },\n dataType: 'int',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'width',\n label: 'Width',\n scope: 'global',\n options: {\n size: 90,\n },\n dataType: 'int',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'height',\n label: 'Height',\n scope: 'global',\n options: {\n size: 100,\n },\n dataType: 'int',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'mimeType',\n label: 'Mime Type',\n scope: 'global',\n options: {\n size: 160,\n },\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'lqip',\n label: 'lqip',\n scope: 'global',\n hidden: true,\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'url',\n label: 'URL',\n scope: 'global',\n hidden: true,\n readOnly: true,\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: '_updatedAt',\n label: 'Updated At',\n scope: 'global',\n options: {\n size: 220,\n },\n readOnly: true,\n hidden: true,\n dataType: 'datetime',\n inputType: 'datetime',\n previewType: 'datetime',\n defaultValue: '',\n },\n {\n name: 'tags',\n label: 'Tags',\n scope: 'relationship',\n dataType: 'string',\n inputType: 'relationship',\n defaultValue: '',\n previewType: 'tags',\n options: {\n size: 300,\n },\n relationship: {\n mode: 'multiple',\n field: 'name',\n entity: '_tag',\n },\n },\n ],\n};\n","import type { Entity } from '../core/types';\n\nexport const tagSchema: Entity = {\n name: '_tag',\n plural: '_tags',\n display: 'name',\n menu: {\n hidden: true,\n },\n attributes: [\n {\n name: 'name',\n label: 'Tag Name',\n scope: 'global',\n options: {\n size: 220,\n },\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: '_updatedAt',\n label: 'Updated At',\n scope: 'global',\n options: {\n size: 220,\n },\n readOnly: true,\n hidden: true,\n dataType: 'datetime',\n inputType: 'datetime',\n previewType: 'datetime',\n defaultValue: '',\n },\n {\n name: 'assets',\n label: 'Assets',\n scope: 'relationship',\n dataType: 'string',\n inputType: 'relationship',\n defaultValue: '',\n relationship: {\n mode: 'multiple',\n field: 'originalFilename',\n entity: '_asset',\n },\n },\n ],\n};\n","'use client';\n\nimport { createContext, useContext, useMemo } from 'react';\nimport type { JSX } from 'react';\nimport { has, path } from 'ramda';\nimport { useParams } from 'react-router-dom';\nimport { assetSchema } from '../../entities/assets-schema';\nimport { tagSchema } from '../../entities/tags-schema';\nimport type { AppOptions, PluginOptions, ProjectOptions } from './types';\nimport type { Entity } from '../types';\n\ntype Contributes = NonNullable<PluginOptions['contributes']>;\nexport interface ConfigContext {\n contributions: {\n apps: AppOptions[] | [];\n };\n currentProjectId?: string;\n currentProjectSchema: Entity[];\n getContributionPointConfig: <T extends keyof Contributes>(\n contributionPoint: T,\n subPath?: string[]\n ) => Contributes[T][] | [];\n plugins: PluginOptions[];\n projects: ProjectOptions[];\n}\n\nconst ConfigContext = createContext<ConfigContext>({\n contributions: {\n apps: [],\n },\n currentProjectId: undefined,\n currentProjectSchema: [],\n getContributionPointConfig: () => [],\n plugins: [] as PluginOptions[],\n projects: [] as ProjectOptions[],\n});\nconst hasProjectIdProperty = (configItem: ProjectOptions | PluginOptions): boolean =>\n Object.prototype.hasOwnProperty.call(configItem, 'projectId');\nconst hasContributesProperty = (configItem: ProjectOptions | PluginOptions): boolean =>\n Object.prototype.hasOwnProperty.call(configItem, 'contributes');\n\nexport function ConfigProvider({\n config,\n children,\n}: {\n config: ProjectOptions[];\n children: React.ReactNode;\n}): JSX.Element {\n /**\n * Getting the projectId from the URL via react-router-dom's useParams hook triggers a rerender of this Context\n * every time the URL changes.\n */\n const { projectId: currentProjectId } = useParams<{ projectId: string }>();\n const enhancedConfig = useMemo(() => {\n const upsertReservedEntities = (schema: Entity[]): Entity[] => {\n const withoutReserved = schema.filter(\n (entity) => entity.name !== assetSchema.name && entity.name !== tagSchema.name\n );\n\n return [...withoutReserved, assetSchema, tagSchema];\n };\n\n return config.map((project) => ({\n ...project,\n schema: upsertReservedEntities(project.schema),\n }));\n }, [config]);\n\n const globalFlattenedConfig = useMemo(() => flattenConfigByProperty(['plugins'], enhancedConfig), [enhancedConfig]);\n const currentProjectFlattenedConfig = useMemo(\n () =>\n flattenConfigByProperty(\n ['plugins'],\n enhancedConfig.filter((item) => item.projectId === currentProjectId)\n ),\n [enhancedConfig, currentProjectId]\n );\n const allPlugins = useMemo(\n () =>\n globalFlattenedConfig.filter(\n (item: ProjectOptions | PluginOptions) => !hasProjectIdProperty(item) && hasContributesProperty(item)\n ) as PluginOptions[],\n [globalFlattenedConfig]\n );\n const currentProjectPlugins = useMemo(\n () =>\n currentProjectFlattenedConfig.filter(\n (item: ProjectOptions | PluginOptions) => !hasProjectIdProperty(item) && hasContributesProperty(item)\n ) as PluginOptions[],\n [currentProjectFlattenedConfig]\n );\n\n const globalConfig = useMemo(\n () => ({\n contributions: {\n apps: _getContributionPointConfig('apps', [], currentProjectPlugins) as AppOptions[] | [],\n },\n currentProjectId,\n currentProjectSchema: enhancedConfig.find((item) => item.projectId === currentProjectId)?.schema ?? [],\n getContributionPointConfig: <T extends keyof Contributes>(\n contributionPoint: T,\n subPath: string[] = []\n ): Contributes[T][] =>\n _getContributionPointConfig(contributionPoint, subPath, currentProjectPlugins) as Contributes[T][],\n plugins: allPlugins,\n projects: globalFlattenedConfig.filter((item: ProjectOptions | PluginOptions) =>\n hasProjectIdProperty(item)\n ) as ProjectOptions[],\n }),\n [allPlugins, currentProjectId, currentProjectPlugins, enhancedConfig, globalFlattenedConfig]\n );\n\n return <ConfigContext.Provider value={globalConfig}>{children}</ConfigContext.Provider>;\n}\n\nexport function useConfig(): ConfigContext {\n return useContext(ConfigContext);\n}\n\nfunction flattenConfigByProperty(\n property: string[],\n config: (ProjectOptions | PluginOptions)[]\n): (ProjectOptions | PluginOptions)[] | [] {\n if (!Array.isArray(config)) {\n return [config];\n }\n\n return config.reduce<(ProjectOptions | PluginOptions)[]>((acc, curr) => {\n if (path(property, curr)) {\n return [...acc, curr, ...flattenConfigByProperty(property, path(property, curr) ?? [])];\n }\n\n return [...acc, curr];\n }, []);\n}\n\nfunction _getContributionPointConfig<T extends keyof Contributes>(\n contributionPoint: T,\n subPath: string[] = [],\n config: PluginOptions[]\n): Contributes[T] {\n const pathArray = ['contributes', contributionPoint, ...subPath];\n\n return flattenConfigByProperty(pathArray.flat(), config).filter((item) => has('component', item)) as Contributes[T];\n}\n\nexport function getApps(config: ProjectOptions[]): AppOptions[] | [] {\n const flattenedConfig = flattenConfigByProperty(['plugins'], config);\n const plugins = flattenedConfig.filter(\n (item: ProjectOptions | PluginOptions) => !hasProjectIdProperty(item) && hasContributesProperty(item)\n ) as PluginOptions[];\n return _getContributionPointConfig('apps', [], plugins) as AppOptions[] | [];\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {a}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {a}from'./chunk-F2ILIHAU.js';import {isValid,format}from'date-fns';import {jsx}from'react/jsx-runtime';function d({value:t}){if(t==null||t===""||typeof t!="string")return jsx(a,{value:""});let e=new Date(t);if(!isValid(e))return jsx(a,{value:""});let i=format(e,"MMM d, yyyy")+" at "+format(e,"HH:mm");return jsx(a,{value:i})}export{d as a};//# sourceMappingURL=chunk-AEBTHXEP.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-AEBTHXEP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data-grid/preview-components/datetime.tsx"],"names":["DateTime","value","jsx","CopyableTruncatedText","date","isValid","displayValue","format"],"mappings":"kIAGO,SAASA,CAAAA,CAAS,CAAE,KAAA,CAAAC,CAAM,CAAA,CAA2C,CAC1E,GAAIA,CAAAA,EAAU,IAAA,EAA+BA,CAAAA,GAAU,EAAA,EAAM,OAAOA,CAAAA,EAAU,QAAA,CAC5E,OAAOC,GAAAA,CAACC,CAAAA,CAAA,CAAsB,KAAA,CAAM,EAAA,CAAG,EAGzC,IAAMC,CAAAA,CAAO,IAAI,IAAA,CAAKH,CAAK,CAAA,CAE3B,GAAI,CAACI,OAAAA,CAAQD,CAAI,CAAA,CACf,OAAOF,GAAAA,CAACC,CAAAA,CAAA,CAAsB,KAAA,CAAM,GAAG,CAAA,CAGzC,IAAMG,CAAAA,CAAeC,MAAAA,CAAOH,CAAAA,CAAM,aAAa,CAAA,CAAI,MAAA,CAASG,OAAOH,CAAAA,CAAM,OAAO,CAAA,CAEhF,OAAOF,GAAAA,CAACC,CAAAA,CAAA,CAAsB,KAAA,CAAOG,EAAc,CACrD","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/data-grid/preview-components/datetime.tsx"],"names":["DateTime","value","jsx","CopyableTruncatedText","date","isValid","displayValue","format"],"mappings":"kIAGO,SAASA,CAAAA,CAAS,CAAE,KAAA,CAAAC,CAAM,CAAA,CAA2C,CAC1E,GAAIA,CAAAA,EAAU,IAAA,EAA+BA,CAAAA,GAAU,EAAA,EAAM,OAAOA,CAAAA,EAAU,QAAA,CAC5E,OAAOC,GAAAA,CAACC,CAAAA,CAAA,CAAsB,KAAA,CAAM,EAAA,CAAG,EAGzC,IAAMC,CAAAA,CAAO,IAAI,IAAA,CAAKH,CAAK,CAAA,CAE3B,GAAI,CAACI,OAAAA,CAAQD,CAAI,CAAA,CACf,OAAOF,GAAAA,CAACC,CAAAA,CAAA,CAAsB,KAAA,CAAM,GAAG,CAAA,CAGzC,IAAMG,CAAAA,CAAeC,MAAAA,CAAOH,CAAAA,CAAM,aAAa,CAAA,CAAI,MAAA,CAASG,OAAOH,CAAAA,CAAM,OAAO,CAAA,CAEhF,OAAOF,GAAAA,CAACC,CAAAA,CAAA,CAAsB,KAAA,CAAOG,EAAc,CACrD","file":"chunk-AEBTHXEP.js","sourcesContent":["import { format, isValid } from 'date-fns';\nimport { CopyableTruncatedText } from './copyable-truncated-text';\n\nexport function DateTime({ value }: { value: string | object | unknown[] }) {\n if (value === null || value === undefined || value === '' || typeof value !== 'string') {\n return <CopyableTruncatedText value=\"\" />;\n }\n\n const date = new Date(value);\n\n if (!isValid(date)) {\n return <CopyableTruncatedText value=\"\" />;\n }\n\n const displayValue = format(date, 'MMM d, yyyy') + ' at ' + format(date, 'HH:mm');\n\n return <CopyableTruncatedText value={displayValue} />;\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {a}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {a}from'./chunk-F2ILIHAU.js';import {jsx}from'react/jsx-runtime';function s(e){return "groupLabel"in e}function u(e){return e.flatMap(t=>s(t)?t.items:[t])}function o(e,t){if(!t)return e;let n=u(t).find(i=>String(i.value)===e);return n?n.label:e}function p({value:e,options:t}){if(e==null)return jsx(a,{value:""});let n=String(e),i=o(n,t?.list);return jsx(a,{value:i})}export{p as a};//# sourceMappingURL=chunk-CCI3FGPF.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-CCI3FGPF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data-grid/preview-components/select.tsx"],"names":["isGroupedSelectList","option","flattenSelectList","list","resolveSelectLabel","value","match","item","Select","options","jsx","CopyableTruncatedText","stringValue","displayValue"],"mappings":"4FAcA,SAASA,CAAAA,CAAoBC,EAAyE,CACpG,OAAO,eAAgBA,CACzB,CAEA,SAASC,CAAAA,CAAkBC,CAAAA,CAA+C,CACxE,OAAOA,CAAAA,CAAK,QAASF,CAAAA,EACfD,CAAAA,CAAoBC,CAAM,CAAA,CACrBA,CAAAA,CAAO,MAGT,CAACA,CAAM,CACf,CACH,CAEA,SAASG,CAAAA,CAAmBC,CAAAA,CAAeF,EAAiD,CAC1F,GAAI,CAACA,CAAAA,CACH,OAAOE,EAGT,IAAMC,CAAAA,CAAQJ,EAAkBC,CAAI,CAAA,CAAE,KAAMI,CAAAA,EAAS,MAAA,CAAOA,EAAK,KAAK,CAAA,GAAMF,CAAK,CAAA,CAEjF,OAAKC,EAIEA,CAAAA,CAAM,KAAA,CAHJD,CAIX,CAEO,SAASG,EAAO,CACrB,KAAA,CAAAH,EACA,OAAA,CAAAI,CACF,EAGgB,CACd,GAAIJ,GAAU,IAAA,CACZ,OAAOK,IAACC,CAAAA,CAAA,CAAsB,MAAM,EAAA,CAAG,CAAA,CAGzC,IAAMC,CAAAA,CAAc,MAAA,CAAOP,CAAK,CAAA,CAC1BQ,CAAAA,CAAeT,EAAmBQ,CAAAA,CAAaH,CAAAA,EAAS,IAAI,CAAA,CAElE,OAAOC,IAACC,CAAAA,CAAA,CAAsB,KAAA,CAAOE,CAAAA,CAAc,CACrD","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/data-grid/preview-components/select.tsx"],"names":["isGroupedSelectList","option","flattenSelectList","list","resolveSelectLabel","value","match","item","Select","options","jsx","CopyableTruncatedText","stringValue","displayValue"],"mappings":"4FAcA,SAASA,CAAAA,CAAoBC,EAAyE,CACpG,OAAO,eAAgBA,CACzB,CAEA,SAASC,CAAAA,CAAkBC,CAAAA,CAA+C,CACxE,OAAOA,CAAAA,CAAK,QAASF,CAAAA,EACfD,CAAAA,CAAoBC,CAAM,CAAA,CACrBA,CAAAA,CAAO,MAGT,CAACA,CAAM,CACf,CACH,CAEA,SAASG,CAAAA,CAAmBC,CAAAA,CAAeF,EAAiD,CAC1F,GAAI,CAACA,CAAAA,CACH,OAAOE,EAGT,IAAMC,CAAAA,CAAQJ,EAAkBC,CAAI,CAAA,CAAE,KAAMI,CAAAA,EAAS,MAAA,CAAOA,EAAK,KAAK,CAAA,GAAMF,CAAK,CAAA,CAEjF,OAAKC,EAIEA,CAAAA,CAAM,KAAA,CAHJD,CAIX,CAEO,SAASG,EAAO,CACrB,KAAA,CAAAH,EACA,OAAA,CAAAI,CACF,EAGgB,CACd,GAAIJ,GAAU,IAAA,CACZ,OAAOK,IAACC,CAAAA,CAAA,CAAsB,MAAM,EAAA,CAAG,CAAA,CAGzC,IAAMC,CAAAA,CAAc,MAAA,CAAOP,CAAK,CAAA,CAC1BQ,CAAAA,CAAeT,EAAmBQ,CAAAA,CAAaH,CAAAA,EAAS,IAAI,CAAA,CAElE,OAAOC,IAACC,CAAAA,CAAA,CAAsB,KAAA,CAAOE,CAAAA,CAAc,CACrD","file":"chunk-CCI3FGPF.js","sourcesContent":["import type { JSX } from 'react';\nimport type { SelectOptions } from '../../core/types';\nimport { CopyableTruncatedText } from './copyable-truncated-text';\n\ntype SelectListItem = {\n label: string;\n value: string;\n};\n\ntype GroupedSelectList = {\n groupLabel: string;\n items: SelectListItem[];\n};\n\nfunction isGroupedSelectList(option: SelectListItem | GroupedSelectList): option is GroupedSelectList {\n return 'groupLabel' in option;\n}\n\nfunction flattenSelectList(list: SelectOptions['list']): SelectListItem[] {\n return list.flatMap((option) => {\n if (isGroupedSelectList(option)) {\n return option.items;\n }\n\n return [option];\n });\n}\n\nfunction resolveSelectLabel(value: string, list: SelectOptions['list'] | undefined): string {\n if (!list) {\n return value;\n }\n\n const match = flattenSelectList(list).find((item) => String(item.value) === value);\n\n if (!match) {\n return value;\n }\n\n return match.label;\n}\n\nexport function Select({\n value,\n options,\n}: {\n value: string | number | null | undefined;\n options?: SelectOptions;\n}): JSX.Element {\n if (value === null || value === undefined) {\n return <CopyableTruncatedText value=\"\" />;\n }\n\n const stringValue = String(value);\n const displayValue = resolveSelectLabel(stringValue, options?.list);\n\n return <CopyableTruncatedText value={displayValue} />;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {b as b$1,c,d as d$1,e}from'./chunk-YW2EEXMV.js';import {b}from'./chunk-WDRCARCP.js';import {defaultStyles,FileIcon}from'react-file-icon';import {useMemo,useState,useEffect}from'react';import {jsx,jsxs}from'react/jsx-runtime';var _=250,E=25e5,a=new Map,v=new Map,w=new Set,T=new Map;function d(e){if(T.has(e))return;let t=new Image;t.decoding="async",t.src=e,T.set(e,t);}function g(e){let t=a.get(e);t&&a.set(e,{...t,lastUsedAt:Date.now()});}function N(){if(a.size<=_)return;let e=Array.from(a.entries()).sort((n,s)=>n[1].lastUsedAt-s[1].lastUsedAt),t=Math.max(1,Math.ceil(_*.1));for(let n=0;n<t&&n<e.length;n+=1){let[s,r]=e[n];a.delete(s),URL.revokeObjectURL(r.objectUrl);}}async function I(e){if(w.has(e)){d(e);return}if(a.has(e)){g(e);return}let t=v.get(e);if(t){await t;return}let n=(async()=>{try{let s=await fetch(e,{mode:"cors",cache:"force-cache"});if(!s.ok){d(e);return}let r=await s.blob();if(r.size>E)return;let i=URL.createObjectURL(r);a.set(e,{objectUrl:i,byteSize:r.size,lastUsedAt:Date.now()}),N();}catch(s){s instanceof TypeError&&w.add(e),d(e);}})();v.set(e,n),await n,v.delete(e);}function A(e){let t=useMemo(()=>{if(!e)return null;let r=a.get(e);return r?(g(e),r.objectUrl):null},[e]),[n,s]=useState(t);return useEffect(()=>{if(!e){s(null);return}if(w.has(e)){d(e),s(null);return}let r=a.get(e);if(r){g(e),s(r.objectUrl);return}s(null);let i=false;return I(e).then(()=>{let f=a.get(e);f&&(i||(g(e),s(f.objectUrl)));}),()=>{i=true;}},[e]),n}var x="fk:bg-[#fafafa] [--asset-checker:#f0f0f0] [background-image:linear-gradient(45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(-45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(45deg,transparent_75%,var(--asset-checker)_75%),linear-gradient(-45deg,transparent_75%,var(--asset-checker)_75%)] [background-position:0_0,0_4px,4px_-4px,-4px_0px] [background-size:8px_8px] fk:dark:bg-[#222] dark:[--asset-checker:#2a2a2a]";function D({value:e}){return Array.isArray(e)?jsx(P,{value:e}):jsx(L,{value:e})}function L({value:e$1}){let t=e$1?.path??"",n=!!t,s=n&&/\.(png|jpe?g|gif|webp|avif|svg)$/i.test(t),r=l=>{let[u]=l.split("?"),y=u.split(".");return y.length>1?y.pop().toLowerCase():"file"},i=n?t.endsWith(".svg")?`${b}${t}`:`${b}${t}?w=84&h=84&f=webp`:null,f=n?t.endsWith(".svg")?`${b}${t}`:`${b}${t}?w=624&h=624&f=webp`:"",U=A(i);return n?jsx("div",{className:"fk:z-10",children:s?jsxs(b$1,{children:[jsx(c,{asChild:true,children:jsx("img",{alt:"asset",className:`fk:w-7 fk:h-7 fk:cursor-zoom-in fk:overflow-hidden fk:rounded-md fk:object-contain ${x}`,decoding:"async",src:U??void 0})}),jsx(d$1,{children:jsx(e,{children:jsx("img",{alt:"asset",className:`fk:w-52 fk:h-52 fk:overflow-hidden fk:rounded-md fk:object-contain ${x}`,decoding:"async",src:f})})})]}):jsxs(b$1,{children:[jsx(c,{asChild:true,children:jsx("div",{className:"fk:w-7 fk:h-7 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto",children:(()=>{let l=r(t),u=defaultStyles[l];return jsx(FileIcon,{extension:l,...u||{}})})()})}),jsx(d$1,{children:jsx(e,{children:jsx("div",{className:"fk:text-sm fk:text-muted-foreground",children:"Preview not available"})})})]})}):null}function P({value:e}){let t=e.filter(r=>!!r.path).slice(0,3),n=Math.max(e[0]?.totalCount??0,e.length);if(t.length===0)return n>0?jsx("div",{className:"fk:flex fk:items-center",children:jsx("span",{className:"fk:text-xs fk:text-muted-foreground",children:n===1?"1 asset":`${n} assets`})}):null;let s=n-t.length;return jsxs("div",{className:"fk:flex fk:items-center",children:[jsx("div",{className:"fk:flex fk:-space-x-2",children:t.map(r=>jsx("img",{alt:"asset",className:`fk:h-7 fk:w-7 fk:overflow-hidden fk:rounded-md fk:object-contain ${x}`,decoding:"async",src:`${b}${r.path}?w=84&h=84&f=webp`},r._id))}),s>0?jsxs("span",{className:"fk:ml-2 fk:text-xs fk:text-muted-foreground",children:["+",s]}):null]})}export{D as a};//# sourceMappingURL=chunk-D62TAYLI.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-D62TAYLI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/hooks/use-cached-image-src.ts","../src/data-grid/preview-components/asset.tsx"],"names":["MAX_CACHE_ENTRIES","MAX_SINGLE_BLOB_BYTES","blobUrlCache","inFlightLoads","corsBlockedUrls","preloadedImages","ensurePreloaded","url","img","touch","entry","evictIfNeeded","entries","a","b","evictCount","i","loadToCache","existing","promise","res","blob","objectUrl","err","useCachedImageSrc","initial","useMemo","cached","src","setSrc","useState","useEffect","isStale","next","transparentImageBackground","Asset","value","jsx","AssetStack","SingleAsset","path","hasPath","isImage","getExtensionFromPath","p","clean","parts","thumbnaillUrl","IMAGES_BASE_URL","fullUrl","cachedThumbnailSrc","jsxs","Tooltip","TooltipTrigger","TooltipPortal","TooltipContent","ext","style","defaultStyles","FileTypeIcon","assets","asset","totalCount","overflowCount"],"mappings":"6PAQA,IAAMA,CAAAA,CAAoB,IACpBC,CAAAA,CAAwB,IAAA,CAExBC,EAAe,IAAI,GAAA,CACnBC,EAAgB,IAAI,GAAA,CACpBC,EAAkB,IAAI,GAAA,CACtBC,EAAkB,IAAI,GAAA,CAE5B,SAASC,CAAAA,CAAgBC,CAAAA,CAAmB,CAC1C,GAAIF,CAAAA,CAAgB,IAAIE,CAAG,CAAA,CACzB,OAGF,IAAMC,CAAAA,CAAM,IAAI,KAAA,CAChBA,CAAAA,CAAI,QAAA,CAAW,OAAA,CACfA,EAAI,GAAA,CAAMD,CAAAA,CACVF,EAAgB,GAAA,CAAIE,CAAAA,CAAKC,CAAG,EAC9B,CAEA,SAASC,CAAAA,CAAMF,CAAAA,CAAmB,CAChC,IAAMG,CAAAA,CAAQR,EAAa,GAAA,CAAIK,CAAG,EAE7BG,CAAAA,EAILR,CAAAA,CAAa,IAAIK,CAAAA,CAAK,CAAE,GAAGG,CAAAA,CAAO,UAAA,CAAY,KAAK,GAAA,EAAM,CAAC,EAC5D,CAEA,SAASC,CAAAA,EAAsB,CAC7B,GAAIT,CAAAA,CAAa,IAAA,EAAQF,EACvB,OAGF,IAAMY,EAAU,KAAA,CAAM,IAAA,CAAKV,CAAAA,CAAa,OAAA,EAAS,CAAA,CAAE,IAAA,CAAK,CAACW,CAAAA,CAAGC,CAAAA,GAAMD,EAAE,CAAC,CAAA,CAAE,WAAaC,CAAAA,CAAE,CAAC,EAAE,UAAU,CAAA,CAC7FC,EAAa,IAAA,CAAK,GAAA,CAAI,EAAG,IAAA,CAAK,IAAA,CAAKf,EAAoB,EAAG,CAAC,EAEjE,IAAA,IAASgB,CAAAA,CAAI,EAAGA,CAAAA,CAAID,CAAAA,EAAcC,EAAIJ,CAAAA,CAAQ,MAAA,CAAQI,GAAK,CAAA,CAAG,CAC5D,GAAM,CAACT,CAAAA,CAAKG,CAAK,CAAA,CAAIE,CAAAA,CAAQI,CAAC,CAAA,CAC9Bd,CAAAA,CAAa,MAAA,CAAOK,CAAG,EAEvB,GAAA,CAAI,eAAA,CAAgBG,EAAM,SAAS,EACrC,CACF,CAEA,eAAeO,EAAYV,CAAAA,CAA4B,CACrD,GAAIH,CAAAA,CAAgB,GAAA,CAAIG,CAAG,CAAA,CAAG,CAC5BD,EAAgBC,CAAG,CAAA,CAEnB,MACF,CAEA,GAAIL,EAAa,GAAA,CAAIK,CAAG,EAAG,CACzBE,CAAAA,CAAMF,CAAG,CAAA,CAET,MACF,CAEA,IAAMW,CAAAA,CAAWf,EAAc,GAAA,CAAII,CAAG,EAEtC,GAAIW,CAAAA,CAAU,CACZ,MAAMA,CAAAA,CAEN,MACF,CAEA,IAAMC,CAAAA,CAAAA,CAAW,SAAY,CAC3B,GAAI,CACF,IAAMC,CAAAA,CAAM,MAAM,MAAMb,CAAAA,CAAK,CAC3B,KAAM,MAAA,CACN,KAAA,CAAO,aACT,CAAC,CAAA,CAED,GAAI,CAACa,CAAAA,CAAI,GAAI,CACXd,CAAAA,CAAgBC,CAAG,CAAA,CAEnB,MACF,CAEA,IAAMc,CAAAA,CAAO,MAAMD,CAAAA,CAAI,IAAA,GAEvB,GAAIC,CAAAA,CAAK,KAAOpB,CAAAA,CACd,OAGF,IAAMqB,CAAAA,CAAY,GAAA,CAAI,gBAAgBD,CAAI,CAAA,CAC1CnB,CAAAA,CAAa,GAAA,CAAIK,EAAK,CAAE,SAAA,CAAAe,EAAW,QAAA,CAAUD,CAAAA,CAAK,KAAM,UAAA,CAAY,IAAA,CAAK,KAAM,CAAC,EAChFV,CAAAA,GACF,OAASY,CAAAA,CAAc,CAEjBA,aAAe,SAAA,EACjBnB,CAAAA,CAAgB,IAAIG,CAAG,CAAA,CAGzBD,EAAgBC,CAAG,EACrB,CACF,CAAA,GAAG,CAEHJ,EAAc,GAAA,CAAII,CAAAA,CAAKY,CAAO,CAAA,CAE9B,MAAMA,EAENhB,CAAAA,CAAc,MAAA,CAAOI,CAAG,EAC1B,CAMO,SAASiB,CAAAA,CAAkBjB,CAAAA,CAA+C,CAC/E,IAAMkB,EAAUC,OAAAA,CAAQ,IAAM,CAC5B,GAAI,CAACnB,EACH,OAAO,IAAA,CAGT,IAAMoB,CAAAA,CAASzB,CAAAA,CAAa,IAAIK,CAAG,CAAA,CAEnC,OAAKoB,CAAAA,EAILlB,CAAAA,CAAMF,CAAG,CAAA,CAEFoB,CAAAA,CAAO,WALL,IAMX,CAAA,CAAG,CAACpB,CAAG,CAAC,EAEF,CAACqB,CAAAA,CAAKC,CAAM,CAAA,CAAIC,QAAAA,CAAwBL,CAAO,CAAA,CAErD,OAAAM,UAAU,IAAM,CACd,GAAI,CAACxB,CAAAA,CAAK,CACRsB,CAAAA,CAAO,IAAI,CAAA,CAEX,MACF,CAEA,GAAIzB,CAAAA,CAAgB,IAAIG,CAAG,CAAA,CAAG,CAC5BD,CAAAA,CAAgBC,CAAG,EACnBsB,CAAAA,CAAO,IAAI,EAEX,MACF,CAEA,IAAMF,CAAAA,CAASzB,CAAAA,CAAa,IAAIK,CAAG,CAAA,CAEnC,GAAIoB,CAAAA,CAAQ,CACVlB,EAAMF,CAAG,CAAA,CACTsB,EAAOF,CAAAA,CAAO,SAAS,EAEvB,MACF,CAEAE,EAAO,IAAI,CAAA,CACX,IAAIG,CAAAA,CAAU,KAAA,CAEd,OAAAf,CAAAA,CAAYV,CAAG,EAAE,IAAA,CAAK,IAAM,CAC1B,IAAM0B,EAAO/B,CAAAA,CAAa,GAAA,CAAIK,CAAG,CAAA,CAE5B0B,CAAAA,GAIDD,IAIJvB,CAAAA,CAAMF,CAAG,EACTsB,CAAAA,CAAOI,CAAAA,CAAK,SAAS,CAAA,CAAA,EACvB,CAAC,EAEM,IAAM,CACXD,EAAU,KACZ,CACF,EAAG,CAACzB,CAAG,CAAC,CAAA,CAEDqB,CACT,CC1KA,IAAMM,CAAAA,CACJ,6bAAA,CAEK,SAASC,CAAAA,CAAM,CAAE,MAAAC,CAAM,CAAA,CAA+B,CAC3D,OAAI,KAAA,CAAM,OAAA,CAAQA,CAAK,EACdC,GAAAA,CAACC,CAAAA,CAAA,CAAW,KAAA,CAAOF,CAAAA,CAAO,EAG5BC,GAAAA,CAACE,CAAAA,CAAA,CAAY,KAAA,CAAOH,CAAAA,CAAO,CACpC,CAEA,SAASG,EAAY,CAAE,KAAA,CAAAH,GAAM,CAAA,CAAqB,CAChD,IAAMI,CAAAA,CAAOJ,GAAAA,EAAO,MAAQ,EAAA,CACtBK,CAAAA,CAAU,EAAQD,CAAAA,CAClBE,CAAAA,CAAUD,GAAW,mCAAA,CAAoC,IAAA,CAAKD,CAAI,CAAA,CAElEG,CAAAA,CAAwBC,GAAsB,CAClD,GAAM,CAACC,CAAK,CAAA,CAAID,EAAE,KAAA,CAAM,GAAG,CAAA,CACrBE,CAAAA,CAAQD,EAAM,KAAA,CAAM,GAAG,EAE7B,OAAIC,CAAAA,CAAM,OAAS,CAAA,CACVA,CAAAA,CAAM,KAAI,CAAG,WAAA,GAGf,MACT,CAAA,CAEMC,EAAgBN,CAAAA,CAClBD,CAAAA,CAAK,SAAS,MAAM,CAAA,CAClB,GAAGQ,CAAe,CAAA,EAAGR,CAAI,CAAA,CAAA,CACzB,CAAA,EAAGQ,CAAe,CAAA,EAAGR,CAAI,oBAC3B,IAAA,CAEES,CAAAA,CAAUR,EACZD,CAAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAClB,CAAA,EAAGQ,CAAe,CAAA,EAAGR,CAAI,GACzB,CAAA,EAAGQ,CAAe,CAAA,EAAGR,CAAI,sBAC3B,EAAA,CAEEU,CAAAA,CAAqB1B,EAAkBuB,CAAa,CAAA,CAE1D,OAAKN,CAAAA,CAKHJ,GAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CACZ,SAAAK,CAAAA,CACCS,IAAAA,CAACC,IAAA,CACC,QAAA,CAAA,CAAAf,IAACgB,CAAAA,CAAA,CAAe,QAAO,IAAA,CACrB,QAAA,CAAAhB,IAAC,KAAA,CAAA,CACC,GAAA,CAAI,QACJ,SAAA,CAAW,CAAA,mFAAA,EAAsFH,CAA0B,CAAA,CAAA,CAC3H,QAAA,CAAS,QACT,GAAA,CAAKgB,CAAAA,EAAsB,OAC7B,CAAA,CACF,CAAA,CACAb,IAACiB,GAAAA,CAAA,CACC,SAAAjB,GAAAA,CAACkB,CAAAA,CAAA,CACC,QAAA,CAAAlB,IAAC,KAAA,CAAA,CACC,GAAA,CAAI,QACJ,SAAA,CAAW,CAAA,mEAAA,EAAsEH,CAA0B,CAAA,CAAA,CAC3G,QAAA,CAAS,QACT,GAAA,CAAKe,CAAAA,CACP,EACF,CAAA,CACF,CAAA,CAAA,CACF,EAEAE,IAAAA,CAACC,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAf,GAAAA,CAACgB,EAAA,CAAe,OAAA,CAAO,KACrB,QAAA,CAAAhB,GAAAA,CAAC,OAAI,SAAA,CAAU,6HAAA,CACX,cAAM,CACN,IAAMmB,EAAMb,CAAAA,CAAqBH,CAAI,EAC/BiB,CAAAA,CACJC,aAAAA,CACAF,CAAG,CAAA,CAEL,OAAOnB,IAACsB,QAAAA,CAAA,CAAa,SAAA,CAAWH,CAAAA,CAAM,GAAIC,CAAAA,EAAS,GAAK,CAC1D,CAAA,IACF,CAAA,CACF,CAAA,CACApB,IAACiB,GAAAA,CAAA,CACC,SAAAjB,GAAAA,CAACkB,CAAAA,CAAA,CACC,QAAA,CAAAlB,GAAAA,CAAC,OAAI,SAAA,CAAU,qCAAA,CAAsC,iCAAqB,CAAA,CAC5E,CAAA,CACF,GACF,CAAA,CAEJ,CAAA,CA/CO,IAiDX,CAEA,SAASC,EAAW,CAAE,KAAA,CAAAF,CAAM,CAAA,CAA2C,CACrE,IAAMwB,CAAAA,CAASxB,CAAAA,CAAM,OAAQyB,CAAAA,EAAU,CAAA,CAAQA,EAAM,IAAK,CAAA,CAAE,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAGhEC,CAAAA,CAAa,KAAK,GAAA,CAAI1B,CAAAA,CAAM,CAAC,CAAA,EAAG,UAAA,EAAc,EAAGA,CAAAA,CAAM,MAAM,EAKnE,GAAIwB,CAAAA,CAAO,SAAW,CAAA,CACpB,OAAIE,EAAa,CAAA,CAEbzB,GAAAA,CAAC,OAAI,SAAA,CAAU,yBAAA,CACb,SAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,qCAAA,CACb,QAAA,CAAAyB,IAAe,CAAA,CAAI,SAAA,CAAY,GAAGA,CAAU,CAAA,OAAA,CAAA,CAC/C,EACF,CAAA,CAIG,IAAA,CAGT,IAAMC,CAAAA,CAAgBD,CAAAA,CAAaF,EAAO,MAAA,CAE1C,OACET,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,yBAAA,CACb,QAAA,CAAA,CAAAd,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBACZ,QAAA,CAAAuB,CAAAA,CAAO,IAAKC,CAAAA,EACXxB,GAAAA,CAAC,OACC,GAAA,CAAI,OAAA,CACJ,UAAW,CAAA,iEAAA,EAAoEH,CAA0B,GACzG,QAAA,CAAS,OAAA,CAET,IAAK,CAAA,EAAGc,CAAe,GAAGa,CAAAA,CAAM,IAAI,qBAD/BA,CAAAA,CAAM,GAEb,CACD,CAAA,CACH,CAAA,CACCE,EAAgB,CAAA,CACfZ,IAAAA,CAAC,QAAK,SAAA,CAAU,6CAAA,CAA8C,cAAEY,CAAAA,CAAAA,CAAc,CAAA,CAC5E,MACN,CAEJ","file":"chunk-D62TAYLI.js","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\ntype CacheEntry = {\n objectUrl: string;\n byteSize: number;\n lastUsedAt: number;\n};\n\nconst MAX_CACHE_ENTRIES = 250;\nconst MAX_SINGLE_BLOB_BYTES = 2_500_000; // ~2.5MB\n\nconst blobUrlCache = new Map<string, CacheEntry>();\nconst inFlightLoads = new Map<string, Promise<void>>();\nconst corsBlockedUrls = new Set<string>();\nconst preloadedImages = new Map<string, HTMLImageElement>();\n\nfunction ensurePreloaded(url: string): void {\n if (preloadedImages.has(url)) {\n return;\n }\n\n const img = new Image();\n img.decoding = 'async';\n img.src = url;\n preloadedImages.set(url, img);\n}\n\nfunction touch(url: string): void {\n const entry = blobUrlCache.get(url);\n\n if (!entry) {\n return;\n }\n\n blobUrlCache.set(url, { ...entry, lastUsedAt: Date.now() });\n}\n\nfunction evictIfNeeded(): void {\n if (blobUrlCache.size <= MAX_CACHE_ENTRIES) {\n return;\n }\n\n const entries = Array.from(blobUrlCache.entries()).sort((a, b) => a[1].lastUsedAt - b[1].lastUsedAt);\n const evictCount = Math.max(1, Math.ceil(MAX_CACHE_ENTRIES * 0.1));\n\n for (let i = 0; i < evictCount && i < entries.length; i += 1) {\n const [url, entry] = entries[i];\n blobUrlCache.delete(url);\n\n URL.revokeObjectURL(entry.objectUrl);\n }\n}\n\nasync function loadToCache(url: string): Promise<void> {\n if (corsBlockedUrls.has(url)) {\n ensurePreloaded(url);\n\n return;\n }\n\n if (blobUrlCache.has(url)) {\n touch(url);\n\n return;\n }\n\n const existing = inFlightLoads.get(url);\n\n if (existing) {\n await existing;\n\n return;\n }\n\n const promise = (async () => {\n try {\n const res = await fetch(url, {\n mode: 'cors',\n cache: 'force-cache',\n });\n\n if (!res.ok) {\n ensurePreloaded(url);\n\n return;\n }\n\n const blob = await res.blob();\n\n if (blob.size > MAX_SINGLE_BLOB_BYTES) {\n return;\n }\n\n const objectUrl = URL.createObjectURL(blob);\n blobUrlCache.set(url, { objectUrl, byteSize: blob.size, lastUsedAt: Date.now() });\n evictIfNeeded();\n } catch (err: unknown) {\n // Most common failure is CORS (TypeError: Failed to fetch). If so, avoid retrying.\n if (err instanceof TypeError) {\n corsBlockedUrls.add(url);\n }\n\n ensurePreloaded(url);\n }\n })();\n\n inFlightLoads.set(url, promise);\n\n await promise;\n\n inFlightLoads.delete(url);\n}\n\n/**\n * Keeps a stable, in-memory cached image src across virtualized unmount/remount cycles.\n * Falls back to the original URL if the image can’t be fetched (e.g. due to CORS).\n */\nexport function useCachedImageSrc(url: string | null | undefined): string | null {\n const initial = useMemo(() => {\n if (!url) {\n return null;\n }\n\n const cached = blobUrlCache.get(url);\n\n if (!cached) {\n return null;\n }\n\n touch(url);\n\n return cached.objectUrl;\n }, [url]);\n\n const [src, setSrc] = useState<string | null>(initial);\n\n useEffect(() => {\n if (!url) {\n setSrc(null);\n\n return;\n }\n\n if (corsBlockedUrls.has(url)) {\n ensurePreloaded(url);\n setSrc(null);\n\n return;\n }\n\n const cached = blobUrlCache.get(url);\n\n if (cached) {\n touch(url);\n setSrc(cached.objectUrl);\n\n return;\n }\n\n setSrc(null);\n let isStale = false;\n\n loadToCache(url).then(() => {\n const next = blobUrlCache.get(url);\n\n if (!next) {\n return;\n }\n\n if (isStale) {\n return;\n }\n\n touch(url);\n setSrc(next.objectUrl);\n });\n\n return () => {\n isStale = true;\n };\n }, [url]);\n\n return src;\n}\n","import type { JSX } from 'react';\nimport { Tooltip, TooltipContent, TooltipPortal, TooltipTrigger } from '../../ui/primitives/tooltip';\nimport { IMAGES_BASE_URL } from '../../core/api-paths';\nimport { FileIcon as FileTypeIcon, defaultStyles } from 'react-file-icon';\nimport { useCachedImageSrc } from '../../ui/hooks/use-cached-image-src';\n\nexport type Asset = {\n _id: string;\n path: string;\n /** Total connected assets; the fetched array is bounded by the query's `first`. */\n totalCount?: number;\n};\n\nconst transparentImageBackground =\n 'fk:bg-[#fafafa] [--asset-checker:#f0f0f0] [background-image:linear-gradient(45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(-45deg,var(--asset-checker)_25%,transparent_25%),linear-gradient(45deg,transparent_75%,var(--asset-checker)_75%),linear-gradient(-45deg,transparent_75%,var(--asset-checker)_75%)] [background-position:0_0,0_4px,4px_-4px,-4px_0px] [background-size:8px_8px] fk:dark:bg-[#222] dark:[--asset-checker:#2a2a2a]';\n\nexport function Asset({ value }: { value: Asset | Asset[] }) {\n if (Array.isArray(value)) {\n return <AssetStack value={value} />;\n }\n\n return <SingleAsset value={value} />;\n}\n\nfunction SingleAsset({ value }: { value: Asset }) {\n const path = value?.path ?? '';\n const hasPath = Boolean(path);\n const isImage = hasPath && /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(path);\n\n const getExtensionFromPath = (p: string): string => {\n const [clean] = p.split('?');\n const parts = clean.split('.');\n\n if (parts.length > 1) {\n return parts.pop()!.toLowerCase();\n }\n\n return 'file';\n };\n\n const thumbnaillUrl = hasPath\n ? path.endsWith('.svg')\n ? `${IMAGES_BASE_URL}${path}`\n : `${IMAGES_BASE_URL}${path}?w=84&h=84&f=webp`\n : null;\n\n const fullUrl = hasPath\n ? path.endsWith('.svg')\n ? `${IMAGES_BASE_URL}${path}`\n : `${IMAGES_BASE_URL}${path}?w=624&h=624&f=webp`\n : '';\n\n const cachedThumbnailSrc = useCachedImageSrc(thumbnaillUrl);\n\n if (!hasPath) {\n return null;\n }\n\n return (\n <div className=\"fk:z-10\">\n {isImage ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <img\n alt=\"asset\"\n className={`fk:w-7 fk:h-7 fk:cursor-zoom-in fk:overflow-hidden fk:rounded-md fk:object-contain ${transparentImageBackground}`}\n decoding=\"async\"\n src={cachedThumbnailSrc ?? undefined}\n />\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent>\n <img\n alt=\"asset\"\n className={`fk:w-52 fk:h-52 fk:overflow-hidden fk:rounded-md fk:object-contain ${transparentImageBackground}`}\n decoding=\"async\"\n src={fullUrl}\n />\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"fk:w-7 fk:h-7 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto\">\n {(() => {\n const ext = getExtensionFromPath(path);\n const style = (\n defaultStyles as Record<string, Record<string, string | number | boolean | undefined>>\n )[ext];\n\n return <FileTypeIcon extension={ext} {...(style || {})} />;\n })()}\n </div>\n </TooltipTrigger>\n <TooltipPortal>\n <TooltipContent>\n <div className=\"fk:text-sm fk:text-muted-foreground\">Preview not available</div>\n </TooltipContent>\n </TooltipPortal>\n </Tooltip>\n )}\n </div>\n );\n}\n\nfunction AssetStack({ value }: { value: Asset[] }): JSX.Element | null {\n const assets = value.filter((asset) => Boolean(asset.path)).slice(0, 3);\n // Queries bound connection edges, so the array length undercounts; the\n // aggregate total travels on each item as totalCount.\n const totalCount = Math.max(value[0]?.totalCount ?? 0, value.length);\n\n // All fetched edges can lack `path` (still-processing uploads, incomplete\n // nodes) while totalCount > 0 — especially likely now that list queries\n // only fetch the first 3 edges. Show a count so the cell is not blank.\n if (assets.length === 0) {\n if (totalCount > 0) {\n return (\n <div className=\"fk:flex fk:items-center\">\n <span className=\"fk:text-xs fk:text-muted-foreground\">\n {totalCount === 1 ? '1 asset' : `${totalCount} assets`}\n </span>\n </div>\n );\n }\n\n return null;\n }\n\n const overflowCount = totalCount - assets.length;\n\n return (\n <div className=\"fk:flex fk:items-center\">\n <div className=\"fk:flex fk:-space-x-2\">\n {assets.map((asset) => (\n <img\n alt=\"asset\"\n className={`fk:h-7 fk:w-7 fk:overflow-hidden fk:rounded-md fk:object-contain ${transparentImageBackground}`}\n decoding=\"async\"\n key={asset._id}\n src={`${IMAGES_BASE_URL}${asset.path}?w=84&h=84&f=webp`}\n />\n ))}\n </div>\n {overflowCount > 0 ? (\n <span className=\"fk:ml-2 fk:text-xs fk:text-muted-foreground\">+{overflowCount}</span>\n ) : null}\n </div>\n );\n}\n"]}
|
|
@@ -1,21 +1,121 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import {
|
|
2
|
+
CUSTOMER_TOOLS_SERVE_PATH,
|
|
3
|
+
FLEXKIT_SIGNATURE_HEADER,
|
|
4
|
+
FLEXKIT_SIGNATURE_PREVIOUS_HEADER,
|
|
5
|
+
FLEXKIT_STUDIO_RUNTIME_HEADER,
|
|
6
|
+
FLEXKIT_STUDIO_RUNTIME_LOCAL,
|
|
7
|
+
FLEXKIT_TIMESTAMP_HEADER,
|
|
8
|
+
flexkitApiDomain,
|
|
9
|
+
flexkitDomain,
|
|
10
|
+
getHeader,
|
|
11
|
+
handleDevConnectTick,
|
|
12
|
+
isCustomerToolsTickPath,
|
|
13
|
+
parseCustomerToolActor,
|
|
14
|
+
shouldHandleDevConnectTick,
|
|
15
|
+
toolToManifest,
|
|
16
|
+
verifySignedHeaders
|
|
17
|
+
} from "./chunk-VHNQDP7Q.js";
|
|
18
|
+
|
|
19
|
+
// src/tools/serve.ts
|
|
20
|
+
function jsonResult(status, body) {
|
|
21
|
+
return {
|
|
22
|
+
body,
|
|
23
|
+
headers: { "Content-Type": "application/json" },
|
|
24
|
+
status,
|
|
25
|
+
type: "json"
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function getToolsSecrets() {
|
|
29
|
+
const env = globalThis.process?.env ?? {};
|
|
30
|
+
const secrets = [];
|
|
31
|
+
for (const value of [env.FLEXKIT_TOOLS_SECRET, env.FLEXKIT_TOOLS_SECRET_PREVIOUS]) {
|
|
32
|
+
const trimmed = value?.trim() ?? "";
|
|
33
|
+
if (trimmed && !secrets.includes(trimmed)) {
|
|
34
|
+
secrets.push(trimmed);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return secrets;
|
|
38
|
+
}
|
|
39
|
+
async function readRequestBody(request) {
|
|
40
|
+
try {
|
|
41
|
+
return await request.text();
|
|
42
|
+
} catch {
|
|
43
|
+
return "";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function handleCustomerToolsRequest({
|
|
47
|
+
request,
|
|
48
|
+
skills,
|
|
49
|
+
tools
|
|
50
|
+
}) {
|
|
51
|
+
const secrets = getToolsSecrets();
|
|
52
|
+
if (secrets.length === 0) {
|
|
53
|
+
return jsonResult(503, { error: "FLEXKIT_TOOLS_SECRET is not configured." });
|
|
54
|
+
}
|
|
55
|
+
const method = request.method.toUpperCase();
|
|
56
|
+
const body = method === "GET" || method === "HEAD" ? "" : await readRequestBody(request);
|
|
57
|
+
let pathname = CUSTOMER_TOOLS_SERVE_PATH;
|
|
58
|
+
try {
|
|
59
|
+
({ pathname } = new URL(request.url));
|
|
60
|
+
} catch {
|
|
61
|
+
pathname = CUSTOMER_TOOLS_SERVE_PATH;
|
|
62
|
+
}
|
|
63
|
+
const verified = await verifySignedHeaders({
|
|
64
|
+
body,
|
|
65
|
+
method,
|
|
66
|
+
path: pathname,
|
|
67
|
+
previousSignatureHeader: getHeader(request.headers, FLEXKIT_SIGNATURE_PREVIOUS_HEADER),
|
|
68
|
+
secret: secrets,
|
|
69
|
+
signatureHeader: getHeader(request.headers, FLEXKIT_SIGNATURE_HEADER),
|
|
70
|
+
timestampHeader: getHeader(request.headers, FLEXKIT_TIMESTAMP_HEADER)
|
|
71
|
+
});
|
|
72
|
+
if (!verified) {
|
|
73
|
+
return jsonResult(401, { error: "Invalid Flexkit tools signature." });
|
|
74
|
+
}
|
|
75
|
+
if (method === "GET") {
|
|
76
|
+
return jsonResult(200, {
|
|
77
|
+
...skills === void 0 ? {} : { skills },
|
|
78
|
+
tools: tools.map((tool2) => toolToManifest(tool2))
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (method !== "POST") {
|
|
82
|
+
return jsonResult(405, { error: "Method not allowed." });
|
|
83
|
+
}
|
|
84
|
+
let payload;
|
|
85
|
+
try {
|
|
86
|
+
payload = JSON.parse(body);
|
|
87
|
+
} catch {
|
|
88
|
+
return jsonResult(400, { error: "Invalid JSON body." });
|
|
89
|
+
}
|
|
90
|
+
if (!payload.name || typeof payload.name !== "string") {
|
|
91
|
+
return jsonResult(400, { error: "Tool name is required." });
|
|
92
|
+
}
|
|
93
|
+
const actor = parseCustomerToolActor(payload.actor);
|
|
94
|
+
if (!actor) {
|
|
95
|
+
return jsonResult(400, { error: "A valid Flexkit actor is required." });
|
|
96
|
+
}
|
|
97
|
+
const tool = tools.find((candidate) => candidate.name === payload.name);
|
|
98
|
+
if (!tool) {
|
|
99
|
+
return jsonResult(404, { error: `Unknown tool "${payload.name}".` });
|
|
11
100
|
}
|
|
12
|
-
|
|
13
|
-
|
|
101
|
+
const parsed = tool.input.safeParse(payload.arguments ?? {});
|
|
102
|
+
if (!parsed.success) {
|
|
103
|
+
return jsonResult(400, {
|
|
104
|
+
error: "Invalid tool arguments.",
|
|
105
|
+
issues: parsed.error.issues.map((issue) => issue.message)
|
|
106
|
+
});
|
|
14
107
|
}
|
|
15
|
-
|
|
108
|
+
try {
|
|
109
|
+
const result = await tool.execute(parsed.data, actor);
|
|
110
|
+
return jsonResult(200, { result });
|
|
111
|
+
} catch (error) {
|
|
112
|
+
const message = error instanceof Error ? error.message : "Tool execution failed.";
|
|
113
|
+
return jsonResult(500, { error: message });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function isCustomerToolsPath(pathname) {
|
|
117
|
+
return pathname === CUSTOMER_TOOLS_SERVE_PATH;
|
|
16
118
|
}
|
|
17
|
-
var flexkitDomain = getConfiguredFlexkitDomain();
|
|
18
|
-
var flexkitApiDomain = `api.${flexkitDomain}`;
|
|
19
119
|
|
|
20
120
|
// src/core/base-path.ts
|
|
21
121
|
function normalizeBasePath(basePath) {
|
|
@@ -126,6 +226,9 @@ function sanitizeForwardHeaders(headers) {
|
|
|
126
226
|
if (normalizedKey.startsWith("x-middleware-")) {
|
|
127
227
|
return;
|
|
128
228
|
}
|
|
229
|
+
if (normalizedKey === FLEXKIT_STUDIO_RUNTIME_HEADER.toLowerCase()) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
129
232
|
sanitized.set(key, value);
|
|
130
233
|
});
|
|
131
234
|
return sanitized;
|
|
@@ -138,8 +241,24 @@ function headersToObject(headers) {
|
|
|
138
241
|
return result;
|
|
139
242
|
}
|
|
140
243
|
async function handleFlexkitRequest(ctx) {
|
|
141
|
-
const { request, pathname, search, sessionToken, contentType } = ctx;
|
|
244
|
+
const { request, pathname, search, sessionToken, contentType, options } = ctx;
|
|
142
245
|
const { body: requestBody, method } = request;
|
|
246
|
+
if (isCustomerToolsPath(pathname)) {
|
|
247
|
+
return handleCustomerToolsRequest({
|
|
248
|
+
request,
|
|
249
|
+
skills: options?.skills,
|
|
250
|
+
tools: options?.tools ?? []
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
if (isCustomerToolsTickPath(pathname)) {
|
|
254
|
+
const [, , , tickProjectId] = pathname.split("/");
|
|
255
|
+
return handleDevConnectTick({
|
|
256
|
+
projectId: tickProjectId ?? "",
|
|
257
|
+
sessionToken,
|
|
258
|
+
skills: options?.skills,
|
|
259
|
+
tools: options?.tools ?? []
|
|
260
|
+
});
|
|
261
|
+
}
|
|
143
262
|
if (pathname === "/api/flexkit/get-token") {
|
|
144
263
|
const url = new URL(request.url);
|
|
145
264
|
const code = url.searchParams.get("code") ?? "";
|
|
@@ -208,12 +327,16 @@ async function handleFlexkitRequest(ctx) {
|
|
|
208
327
|
const bearerToken = getBearerToken(request.headers.get("authorization"));
|
|
209
328
|
const effectiveSessionToken = sessionToken || bearerToken;
|
|
210
329
|
forwardHeaders.delete("Authorization");
|
|
330
|
+
forwardHeaders.delete(FLEXKIT_STUDIO_RUNTIME_HEADER);
|
|
211
331
|
if (!effectiveSessionToken) {
|
|
212
332
|
forwardHeaders.delete("Cookie");
|
|
213
333
|
}
|
|
214
334
|
if (effectiveSessionToken) {
|
|
215
335
|
forwardHeaders.set("Cookie", `sessionToken=${effectiveSessionToken}`);
|
|
216
336
|
}
|
|
337
|
+
if (shouldHandleDevConnectTick() && effectiveSessionToken && !effectiveSessionToken.startsWith("flk-")) {
|
|
338
|
+
forwardHeaders.set(FLEXKIT_STUDIO_RUNTIME_HEADER, FLEXKIT_STUDIO_RUNTIME_LOCAL);
|
|
339
|
+
}
|
|
217
340
|
if (method !== "GET" && method !== "HEAD") {
|
|
218
341
|
forwardHeaders.set("Content-Type", forwardContentType);
|
|
219
342
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {b,c,e}from'./chunk-YW2EEXMV.js';import {a}from'./chunk-O2QMYUPS.js';import {useRef,useState,useEffect}from'react';import {Check,Copy}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';var d=500,w=3e3;function O({value:t}){let a$1=useRef(null),n=useRef(null),[r,s]=useState(false),[b$1,i]=useState(false);useEffect(()=>()=>{n.current&&clearTimeout(n.current);},[]);function c$1(){let e=a$1.current;return e?e.scrollWidth>e.clientWidth:false}async function g(e){if(e.preventDefault(),e.stopPropagation(),!!t){try{await navigator.clipboard.writeText(t);}catch{return}s(true),i(true),n.current&&clearTimeout(n.current),n.current=setTimeout(()=>{s(false),i(false);},w);}}function y(){c$1();}function h(e){if(!r){if(e){i(c$1());return}i(false);}}if(!t)return jsx("div",{className:"fk:truncate"});let x=t.length>d?`${t.slice(0,d)}\u2026`:t;return jsxs(b,{open:b$1,onOpenChange:h,children:[jsx(c,{asChild:true,children:jsxs("button",{"aria-label":"Copy value",className:a("fk:group/copyable fk:relative fk:flex fk:w-full fk:min-w-0 fk:items-center fk:rounded-sm fk:border-0 fk:bg-transparent fk:px-0.5 fk:-mx-0.5 fk:py-0.5 fk:text-left fk:text-inherit fk:font-inherit","fk:cursor-pointer fk:transition-[transform,background-color] fk:duration-75 fk:ease-out","fk:hover:bg-muted/50 fk:active:translate-y-px fk:active:scale-[0.98] fk:active:bg-muted/70","fk:focus-visible:outline-hidden fk:focus-visible:ring-1 fk:focus-visible:ring-ring"),onClick:g,onPointerEnter:y,type:"button",children:[jsx("span",{className:"fk:min-w-0 fk:flex-1 fk:truncate fk:pr-4",ref:a$1,children:t}),jsx("span",{"aria-hidden":true,className:a("fk:pointer-events-none fk:absolute fk:right-0.5 fk:top-1/2 fk:flex fk:-translate-y-1/2 fk:items-center fk:justify-center","fk:rounded-sm fk:bg-muted/80 fk:p-0.5 fk:text-muted-foreground fk:shadow-sm fk:ring-1 fk:ring-border/60","fk:transition-opacity fk:duration-100",r?"fk:opacity-100 fk:text-foreground":"fk:opacity-0 fk:group-hover/copyable:opacity-100 fk:group-focus-visible/copyable:opacity-100"),children:r?jsx(Check,{className:"fk:size-3"}):jsx(Copy,{className:"fk:size-3"})})]})}),jsx(e,{className:"fk:max-w-xs fk:wrap-break-word",children:r?"Copied to clipboard":x})]})}export{O as a};//# sourceMappingURL=chunk-F2ILIHAU.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-F2ILIHAU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/data-grid/preview-components/copyable-truncated-text.tsx"],"names":["TOOLTIP_MAX_LENGTH","COPIED_DISMISS_MS","CopyableTruncatedText","value","textRef","useRef","dismissTimeoutRef","copied","setCopied","useState","tooltipOpen","setTooltipOpen","useEffect","measureTruncation","element","handleClick","event","handlePointerEnter","handleTooltipOpenChange","open","jsx","tooltipText","jsxs","Tooltip","TooltipTrigger","cn","CheckIcon","CopyIcon","TooltipContent"],"mappings":"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","file":"chunk-F2ILIHAU.js","sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport type { JSX, MouseEvent } from 'react';\nimport { Check as CheckIcon, Copy as CopyIcon } from 'lucide-react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/primitives/tooltip';\nimport { cn } from '../../ui/lib/utils';\n\nconst TOOLTIP_MAX_LENGTH = 500;\nconst COPIED_DISMISS_MS = 3000;\n\ntype CopyableTruncatedTextProps = {\n value: string;\n};\n\nexport function CopyableTruncatedText({ value }: CopyableTruncatedTextProps): JSX.Element {\n const textRef = useRef<HTMLSpanElement>(null);\n const dismissTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [copied, setCopied] = useState(false);\n const [tooltipOpen, setTooltipOpen] = useState(false);\n\n useEffect(() => {\n return () => {\n if (dismissTimeoutRef.current) {\n clearTimeout(dismissTimeoutRef.current);\n }\n };\n }, []);\n\n function measureTruncation(): boolean {\n const element = textRef.current;\n\n if (!element) {\n return false;\n }\n\n return element.scrollWidth > element.clientWidth;\n }\n\n async function handleClick(event: MouseEvent<HTMLButtonElement>): Promise<void> {\n event.preventDefault();\n event.stopPropagation();\n\n if (!value) {\n return;\n }\n\n try {\n await navigator.clipboard.writeText(value);\n } catch {\n return;\n }\n\n setCopied(true);\n setTooltipOpen(true);\n\n if (dismissTimeoutRef.current) {\n clearTimeout(dismissTimeoutRef.current);\n }\n\n dismissTimeoutRef.current = setTimeout(() => {\n setCopied(false);\n setTooltipOpen(false);\n }, COPIED_DISMISS_MS);\n }\n\n function handlePointerEnter(): void {\n measureTruncation();\n }\n\n function handleTooltipOpenChange(open: boolean): void {\n if (copied) {\n return;\n }\n\n if (open) {\n setTooltipOpen(measureTruncation());\n\n return;\n }\n\n setTooltipOpen(false);\n }\n\n if (!value) {\n return <div className=\"fk:truncate\" />;\n }\n\n const tooltipText =\n value.length > TOOLTIP_MAX_LENGTH ? `${value.slice(0, TOOLTIP_MAX_LENGTH)}…` : value;\n\n return (\n <Tooltip open={tooltipOpen} onOpenChange={handleTooltipOpenChange}>\n <TooltipTrigger asChild>\n <button\n aria-label=\"Copy value\"\n className={cn(\n 'fk:group/copyable fk:relative fk:flex fk:w-full fk:min-w-0 fk:items-center fk:rounded-sm fk:border-0 fk:bg-transparent fk:px-0.5 fk:-mx-0.5 fk:py-0.5 fk:text-left fk:text-inherit fk:font-inherit',\n 'fk:cursor-pointer fk:transition-[transform,background-color] fk:duration-75 fk:ease-out',\n 'fk:hover:bg-muted/50 fk:active:translate-y-px fk:active:scale-[0.98] fk:active:bg-muted/70',\n 'fk:focus-visible:outline-hidden fk:focus-visible:ring-1 fk:focus-visible:ring-ring'\n )}\n onClick={handleClick}\n onPointerEnter={handlePointerEnter}\n type=\"button\"\n >\n <span className=\"fk:min-w-0 fk:flex-1 fk:truncate fk:pr-4\" ref={textRef}>\n {value}\n </span>\n <span\n aria-hidden\n className={cn(\n 'fk:pointer-events-none fk:absolute fk:right-0.5 fk:top-1/2 fk:flex fk:-translate-y-1/2 fk:items-center fk:justify-center',\n 'fk:rounded-sm fk:bg-muted/80 fk:p-0.5 fk:text-muted-foreground fk:shadow-sm fk:ring-1 fk:ring-border/60',\n 'fk:transition-opacity fk:duration-100',\n copied\n ? 'fk:opacity-100 fk:text-foreground'\n : 'fk:opacity-0 fk:group-hover/copyable:opacity-100 fk:group-focus-visible/copyable:opacity-100'\n )}\n >\n {copied ? <CheckIcon className=\"fk:size-3\" /> : <CopyIcon className=\"fk:size-3\" />}\n </span>\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"fk:max-w-xs fk:wrap-break-word\">\n {copied ? 'Copied to clipboard' : tooltipText}\n </TooltipContent>\n </Tooltip>\n );\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {a}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {a}from'./chunk-F2ILIHAU.js';import {generateText}from'@tiptap/core';import {TiptapLink,TiptapImage,UploadImagesPlugin,TaskList,TaskItem,HorizontalRule,StarterKit,CodeBlockLowlight,Youtube,Twitter,Mathematics,CharacterCount,Placeholder,AIHighlight,TiptapUnderline,HighlightExtension,TextStyle,Color,CustomKeymap,GlobalDragHandle}from'novel';import {Markdown}from'tiptap-markdown';import {cx}from'class-variance-authority';import {createLowlight,common}from'lowlight';import {jsx}from'react/jsx-runtime';var I=AIHighlight,B=Placeholder,P=TiptapLink.configure({HTMLAttributes:{class:cx("fk:text-muted-foreground fk:underline fk:underline-offset-[3px] fk:hover:text-primary fk:transition-colors fk:cursor-pointer")}}),v=Markdown.configure({html:true,tightLists:true,tightListClass:"tight",bulletListMarker:"-",linkify:false,breaks:false,transformPastedText:false,transformCopiedText:false}),z=TiptapImage.extend({addProseMirrorPlugins(){return [UploadImagesPlugin({imageClass:cx("fk:opacity-40 fk:rounded-lg fk:border fk:border-stone-200")})]}}).configure({allowBase64:true,HTMLAttributes:{class:cx("fk:rounded-lg fk:border fk:border-muted")}}),K=TaskList.configure({HTMLAttributes:{class:cx("fk:not-prose fk:pl-2 ")}}),O=TaskItem.configure({HTMLAttributes:{class:cx("fk:flex gap-2 fk:items-start fk:my-2")},nested:true}),R=HorizontalRule.configure({HTMLAttributes:{class:cx("mt-4 mb-6 border-t border-muted-foreground")}}),S=StarterKit.configure({bulletList:{HTMLAttributes:{class:cx("fk:list-disc fk:list-outside fk:leading-3 fk:-mt-2")}},orderedList:{HTMLAttributes:{class:cx("fk:list-decimal fk:list-outside fk:leading-3 fk:-mt-2")}},listItem:{HTMLAttributes:{class:cx("fk:leading-normal fk:-mb-2")}},blockquote:{HTMLAttributes:{class:cx("fk:border-l-4 fk:border-primary")}},codeBlock:false,code:{HTMLAttributes:{class:cx("fk:rounded-md fk:bg-muted fk:px-1.5 fk:py-1 fk:font-mono fk:font-medium"),spellcheck:"false"}},horizontalRule:false,dropcursor:{color:"#DBEAFE",width:4},gapcursor:false}),D=CodeBlockLowlight.configure({lowlight:createLowlight(common)}),G=Youtube.configure({HTMLAttributes:{class:cx("fk:rounded-lg fk:border fk:border-muted")},inline:false}),N=Twitter.configure({HTMLAttributes:{class:cx("fk:not-prose")},inline:false}),U=Mathematics.configure({HTMLAttributes:{class:cx("fk:text-foreground fk:rounded-sm fk:p-1 fk:hover:bg-muted fk:cursor-pointer")},katexOptions:{throwOnError:false}}),q=CharacterCount.configure(),s=[S,B,P,z,K,O,R,I,D,G,N,U,q,TiptapUnderline,v,HighlightExtension,TextStyle,Color,CustomKeymap,GlobalDragHandle];var i=100;function j({value:r}){let e;try{e=generateText(JSON.parse(r),s).substring(0,i);}catch{e=r?.substring(0,i)??"";}return jsx(a,{value:e})}export{s as a,j as b};//# sourceMappingURL=chunk-FPH4YETF.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-FPH4YETF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/form/fields/editor/extensions.ts","../src/data-grid/preview-components/editor.tsx"],"names":["aiHighlight","AIHighlight","placeholder","Placeholder","tiptapLink","TiptapLink","cx","markdownExtension","Markdown","tiptapImage","TiptapImage","UploadImagesPlugin","taskList","TaskList","taskItem","TaskItem","horizontalRule","HorizontalRule","starterKit","StarterKit","codeBlockLowlight","CodeBlockLowlight","createLowlight","common","youtube","Youtube","twitter","Twitter","mathematics","Mathematics","characterCount","CharacterCount","defaultExtensions","TiptapUnderline","HighlightExtension","TextStyle","Color","CustomKeymap","GlobalDragHandle","MAX_LENGTH","Editor","value","textValue","generateText","jsx","CopyableTruncatedText"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/form/fields/editor/extensions.ts","../src/data-grid/preview-components/editor.tsx"],"names":["aiHighlight","AIHighlight","placeholder","Placeholder","tiptapLink","TiptapLink","cx","markdownExtension","Markdown","tiptapImage","TiptapImage","UploadImagesPlugin","taskList","TaskList","taskItem","TaskItem","horizontalRule","HorizontalRule","starterKit","StarterKit","codeBlockLowlight","CodeBlockLowlight","createLowlight","common","youtube","Youtube","twitter","Twitter","mathematics","Mathematics","characterCount","CharacterCount","defaultExtensions","TiptapUnderline","HighlightExtension","TextStyle","Color","CustomKeymap","GlobalDragHandle","MAX_LENGTH","Editor","value","textValue","generateText","jsx","CopyableTruncatedText"],"mappings":"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","file":"chunk-FPH4YETF.js","sourcesContent":["import {\n AIHighlight,\n CharacterCount,\n CodeBlockLowlight,\n Color,\n CustomKeymap,\n GlobalDragHandle,\n HighlightExtension,\n HorizontalRule,\n Placeholder,\n StarterKit,\n TaskItem,\n TaskList,\n TextStyle,\n TiptapImage,\n TiptapLink,\n TiptapUnderline,\n Twitter,\n Youtube,\n Mathematics,\n UploadImagesPlugin,\n} from 'novel';\nimport { Markdown } from 'tiptap-markdown';\nimport { cx } from 'class-variance-authority';\nimport { common, createLowlight } from 'lowlight';\n\n//TODO I am using cx here to get tailwind autocomplete working, idk if someone else can write a regex to just capture the class key in objects\nconst aiHighlight = AIHighlight;\n//You can overwrite the placeholder with your own configuration\nconst placeholder = Placeholder;\nconst tiptapLink = TiptapLink.configure({\n HTMLAttributes: {\n 'class': cx(\n 'fk:text-muted-foreground fk:underline fk:underline-offset-[3px] fk:hover:text-primary fk:transition-colors fk:cursor-pointer'\n ),\n },\n});\n\nconst markdownExtension = Markdown.configure({\n html: true,\n tightLists: true,\n tightListClass: 'tight',\n bulletListMarker: '-',\n linkify: false,\n breaks: false,\n transformPastedText: false,\n transformCopiedText: false,\n});\n\nconst tiptapImage = TiptapImage.extend({\n addProseMirrorPlugins() {\n return [\n UploadImagesPlugin({\n imageClass: cx('fk:opacity-40 fk:rounded-lg fk:border fk:border-stone-200'),\n }),\n ];\n },\n}).configure({\n allowBase64: true,\n HTMLAttributes: {\n class: cx('fk:rounded-lg fk:border fk:border-muted'),\n },\n});\n\nconst taskList = TaskList.configure({\n HTMLAttributes: {\n class: cx('fk:not-prose fk:pl-2 '),\n },\n});\nconst taskItem = TaskItem.configure({\n HTMLAttributes: {\n 'class': cx('fk:flex gap-2 fk:items-start fk:my-2'),\n },\n nested: true,\n});\n\nconst horizontalRule = HorizontalRule.configure({\n HTMLAttributes: {\n 'class': cx('mt-4 mb-6 border-t border-muted-foreground'),\n },\n});\n\nconst starterKit = StarterKit.configure({\n bulletList: {\n HTMLAttributes: {\n 'class': cx('fk:list-disc fk:list-outside fk:leading-3 fk:-mt-2'),\n },\n },\n orderedList: {\n HTMLAttributes: {\n 'class': cx('fk:list-decimal fk:list-outside fk:leading-3 fk:-mt-2'),\n },\n },\n listItem: {\n HTMLAttributes: {\n 'class': cx('fk:leading-normal fk:-mb-2'),\n },\n },\n blockquote: {\n HTMLAttributes: {\n 'class': cx('fk:border-l-4 fk:border-primary'),\n },\n },\n codeBlock: false,\n code: {\n HTMLAttributes: {\n 'class': cx('fk:rounded-md fk:bg-muted fk:px-1.5 fk:py-1 fk:font-mono fk:font-medium'),\n spellcheck: 'false',\n },\n },\n horizontalRule: false,\n dropcursor: {\n color: '#DBEAFE',\n width: 4,\n },\n gapcursor: false,\n});\n\nconst codeBlockLowlight = CodeBlockLowlight.configure({\n // configure lowlight: common / all / use highlightJS in case there is a need to specify certain language grammars only\n // common: covers 37 language grammars which should be good enough in most cases\n lowlight: createLowlight(common),\n});\n\nconst youtube = Youtube.configure({\n HTMLAttributes: {\n 'class': cx('fk:rounded-lg fk:border fk:border-muted'),\n },\n inline: false,\n});\n\nconst twitter = Twitter.configure({\n HTMLAttributes: {\n 'class': cx('fk:not-prose'),\n },\n inline: false,\n});\n\nconst mathematics = Mathematics.configure({\n HTMLAttributes: {\n 'class': cx('fk:text-foreground fk:rounded-sm fk:p-1 fk:hover:bg-muted fk:cursor-pointer'),\n },\n katexOptions: {\n throwOnError: false,\n },\n});\n\nconst characterCount = CharacterCount.configure();\n\nexport const defaultExtensions: readonly unknown[] = [\n starterKit,\n placeholder,\n tiptapLink,\n tiptapImage,\n taskList,\n taskItem,\n horizontalRule,\n aiHighlight,\n codeBlockLowlight,\n youtube,\n twitter,\n mathematics,\n characterCount,\n TiptapUnderline,\n markdownExtension,\n HighlightExtension,\n TextStyle,\n Color,\n CustomKeymap,\n GlobalDragHandle,\n];\n","import { generateText } from '@tiptap/core';\nimport { defaultExtensions } from '../../form/fields/editor/extensions';\nimport { Extensions } from '@tiptap/core';\nimport { CopyableTruncatedText } from './copyable-truncated-text';\n\nconst MAX_LENGTH = 100;\n\n/**\n * Renders a preview of the editor content.\n */\nexport function Editor({ value }: { value: string }) {\n let textValue;\n\n try {\n textValue = generateText(JSON.parse(value), defaultExtensions as Extensions).substring(0, MAX_LENGTH);\n } catch {\n textValue = value?.substring(0, MAX_LENGTH) ?? '';\n }\n\n return <CopyableTruncatedText value={textValue} />;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {a as a$1}from'./chunk-VUAFNQK7.js';import {a}from'./chunk-KGYH74NA.js';import {c,e,f,h,g,i}from'./chunk-FVFRTCEB.js';import {jsx,jsxs}from'react/jsx-runtime';function S({control:k,fieldSchema:h$1,readOnly:l,setValue:n}){let{name:r,label:v,options:t}=h$1;function b(e,o){n(r,{...o,value:e});}function w(e,o){n(r,{...o,disabled:e});}return jsx(c,{control:k,name:r,render:({field:e$1})=>jsxs(e,{children:[jsxs("div",{className:"fk:flex fk:flex-row fk:items-center fk:justify-between fk:rounded-lg fk:border fk:border-input fk:p-3 fk:ring-offset-background fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2 fk:disabled:cursor-not-allowed fk:disabled:opacity-50",children:[jsxs("div",{className:"fk:space-y-0.5",children:[jsx(f,{children:v}),t?.comment?jsx(h,{children:t.comment}):null]}),jsx(g,{children:jsx(a,{checked:e$1.value?.value?!!e$1.value.value:false,disabled:l||e$1.value?.disabled,onCheckedChange:o=>{b(o,e$1.value);}})})]}),jsx(a$1,{checked:e$1.value?.disabled??false,disabled:l,onChange:o=>{w(o,e$1.value);},scope:e$1.value?.scope}),jsx(i,{})]})})}export{S as a};//# sourceMappingURL=chunk-GFDWGYUR.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-GFDWGYUR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/form/fields/switch.tsx"],"names":["Switch","control","fieldSchema","readOnly","setValue","name","label","options","handleInput","checked","previousValue","handleCheckbox","value","jsx","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"0LAOO,SAASA,CAAAA,CAAO,CAAE,OAAA,CAAAC,CAAAA,CAAS,YAAAC,GAAAA,CAAa,QAAA,CAAAC,EAAU,QAAA,CAAAC,CAAS,EAA2C,CAC3G,GAAM,CAAE,IAAA,CAAAC,EAAM,KAAA,CAAAC,CAAAA,CAAO,OAAA,CAAAC,CAAQ,EAAIL,GAAAA,CAEjC,SAASM,CAAAA,CAAYC,CAAAA,CAAkBC,EAAiD,CACtFN,CAAAA,CAASC,EAAM,CACb,GAAGK,EACH,KAAA,CAAOD,CACT,CAAC,EACH,CAEA,SAASE,CAAAA,CAAeF,CAAAA,CAAkBG,CAAAA,CAAyC,CACjFR,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGO,EACH,QAAA,CAAUH,CACZ,CAAC,EACH,CAEA,OACEI,GAAAA,CAACC,CAAAA,CAAA,CACC,OAAA,CAASb,EACT,IAAA,CAAMI,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAU,GAAM,CAAA,GACfC,IAAAA,CAACC,EAAA,CACC,QAAA,CAAA,CAAAD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sSACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBACb,QAAA,CAAA,CAAAH,GAAAA,CAACK,CAAAA,CAAA,CAAW,SAAAZ,CAAAA,CAAM,CAAA,CACjBC,CAAAA,EAAS,OAAA,CAAUM,IAACM,CAAAA,CAAA,CAAiB,SAAAZ,CAAAA,CAAQ,OAAA,CAAQ,EAAqB,IAAA,CAAA,CAC7E,CAAA,CACAM,GAAAA,CAACO,CAAAA,CAAA,CACC,QAAA,CAAAP,GAAAA,CAACb,CAAAA,CAAA,CACC,QAASe,GAAAA,CAAM,KAAA,EAAO,KAAA,CAAQ,CAAA,CAAQA,IAAM,KAAA,CAAM,KAAA,CAAS,MAC3D,QAAA,CAAUZ,CAAAA,EAAYY,IAAM,KAAA,EAAO,QAAA,CACnC,eAAA,CAAkBN,CAAAA,EAAY,CAC5BD,CAAAA,CAAYC,CAAAA,CAASM,GAAAA,CAAM,KAAK,EAClC,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACAF,IAACQ,GAAAA,CAAA,CACC,QAASN,GAAAA,CAAM,KAAA,EAAO,UAAY,KAAA,CAClC,QAAA,CAAUZ,CAAAA,CACV,QAAA,CAAWM,GAAY,CACrBE,CAAAA,CAAeF,EAASM,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,MACtB,CAAA,CACAF,GAAAA,CAACS,EAAA,EAAY,CAAA,CAAA,CACf,EAEJ,CAEJ","file":"chunk-GFDWGYUR.js","sourcesContent":["import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Switch as SwitchPrimitive } from '../../ui/primitives/switch';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Switch({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'switch'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n\n function handleInput(checked: boolean, previousValue: FormFieldValue | undefined): void {\n setValue(name, {\n ...previousValue,\n value: checked,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk:flex fk:flex-row fk:items-center fk:justify-between fk:rounded-lg fk:border fk:border-input fk:p-3 fk:ring-offset-background fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2 fk:disabled:cursor-not-allowed fk:disabled:opacity-50\">\n <div className=\"fk:space-y-0.5\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <FormControl>\n <SwitchPrimitive\n checked={field.value?.value ? Boolean(field.value.value) : false}\n disabled={readOnly || field.value?.disabled}\n onCheckedChange={(checked) => {\n handleInput(checked, field.value);\n }}\n />\n </FormControl>\n </div>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {a}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {a}from'./chunk-F2ILIHAU.js';import {jsx}from'react/jsx-runtime';function i({value:n}){let t=typeof n=="object"||Array.isArray(n)?JSON.stringify(n):n;return t=t==="null"||t==null?"":String(t),jsx(a,{value:t})}export{i as a};//# sourceMappingURL=chunk-JAARDXQZ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-JAARDXQZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data-grid/preview-components/text.tsx"],"names":["Text","value","displayValue","jsx","CopyableTruncatedText"],"mappings":"4FAEO,SAASA,CAAAA,CAAK,CAAE,MAAAC,CAAM,CAAA,CAA2C,CACtE,IAAIC,EAAe,OAAOD,CAAAA,EAAU,UAAY,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAI,IAAA,CAAK,SAAA,CAAUA,CAAK,EAAIA,CAAAA,CAC/F,OAAAC,CAAAA,CAAeA,CAAAA,GAAiB,QAAUA,CAAAA,EAAgB,IAAA,CAAO,EAAA,CAAK,MAAA,CAAOA,CAAY,CAAA,CAElFC,GAAAA,CAACC,EAAA,CAAsB,KAAA,CAAOF,EAAc,CACrD","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/data-grid/preview-components/text.tsx"],"names":["Text","value","displayValue","jsx","CopyableTruncatedText"],"mappings":"4FAEO,SAASA,CAAAA,CAAK,CAAE,MAAAC,CAAM,CAAA,CAA2C,CACtE,IAAIC,EAAe,OAAOD,CAAAA,EAAU,UAAY,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAI,IAAA,CAAK,SAAA,CAAUA,CAAK,EAAIA,CAAAA,CAC/F,OAAAC,CAAAA,CAAeA,CAAAA,GAAiB,QAAUA,CAAAA,EAAgB,IAAA,CAAO,EAAA,CAAK,MAAA,CAAOA,CAAY,CAAA,CAElFC,GAAAA,CAACC,EAAA,CAAsB,KAAA,CAAOF,EAAc,CACrD","file":"chunk-JAARDXQZ.js","sourcesContent":["import { CopyableTruncatedText } from './copyable-truncated-text';\n\nexport function Text({ value }: { value: string | object | unknown[] }) {\n let displayValue = typeof value === 'object' || Array.isArray(value) ? JSON.stringify(value) : value;\n displayValue = displayValue === 'null' || displayValue == null ? '' : String(displayValue);\n\n return <CopyableTruncatedText value={displayValue} />;\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'./index.css';import {a}from'./chunk-O2QMYUPS.js';import {createContext,useState,useCallback,useEffect,useMemo,useContext}from'react';import {jsx,jsxs}from'react/jsx-runtime';import {DropdownMenu}from'radix-ui';import {CheckIcon,CircleIcon,ChevronRightIcon}from'lucide-react';var U=["light","dark"],C="(prefers-color-scheme: dark)",R=createContext(void 0);function Y({attribute:e="data-theme",children:t,defaultTheme:o,disableTransitionOnChange:a=false,enableColorScheme:h=true,enableSystem:d=true,forcedTheme:f,storageKey:g="theme",themes:m=U,value:l}){let[c,I]=useState(()=>A(g,o,d)),[p,b]=useState(()=>Q()),P=T(f??c,d,p),x=useCallback(s=>{if(!f&&(I(s),!!k()))try{window.localStorage.setItem(g,s);}catch{}},[f,g]);useEffect(()=>{if(!k()||!d)return;let s=window.matchMedia(C);function v(u){b(u.matches?"dark":"light");}return b(s.matches?"dark":"light"),s.addEventListener("change",v),()=>{s.removeEventListener("change",v);}},[d]),useEffect(()=>{if(!k())return;let s=window.document.documentElement,u=T(f??c??o,d,p);if(!u)return;let z=a?V():void 0,N=l?Object.values(l):m,y=l?.[u]??u;e==="class"&&(s.classList.remove(...N),s.classList.add(y)),e!=="class"&&s.setAttribute(e,y),h&&(u==="dark"||u==="light")&&(s.style.colorScheme=u),z?.();},[e,o,a,h,d,f,p,c,m,l]);let S=useMemo(()=>({forcedTheme:f,resolvedTheme:P,setTheme:x,systemTheme:p,theme:f??c,themes:d?[...m,"system"]:m}),[d,f,P,x,p,c,m]);return jsx(R.Provider,{value:S,children:t})}function j(){let e=useContext(R);if(!e)throw new Error("useTheme must be used within ThemeProvider");return e}function V(){let e=window.document.createElement("style");return e.appendChild(window.document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),window.document.head.appendChild(e),()=>{window.getComputedStyle(window.document.body),window.setTimeout(()=>{e.remove();},0);}}function A(e,t,o){if(!k())return t??(o?"system":"light");try{let a=window.localStorage.getItem(e);if(a)return a}catch{}return t??(o?"system":"light")}function Q(){if(k())return window.matchMedia(C).matches?"dark":"light"}function k(){return typeof window<"u"}function T(e,t,o){if(e)return e!=="system"?e:t?o??"light":"light"}function ee({...e}){return jsx(DropdownMenu.Root,{"data-slot":"dropdown-menu",...e})}function te({...e}){return jsx(DropdownMenu.Portal,{"data-slot":"dropdown-menu-portal",...e})}function oe({...e}){return jsx(DropdownMenu.Trigger,{"data-slot":"dropdown-menu-trigger",...e})}function ne({className:e,sideOffset:t=4,...o}){return jsx(DropdownMenu.Portal,{children:jsx(DropdownMenu.Content,{"data-slot":"dropdown-menu-content",sideOffset:t,className:a("fk:z-50 fk:max-h-(--radix-dropdown-menu-content-available-height) fk:min-w-32 fk:origin-(--radix-dropdown-menu-content-transform-origin) fk:overflow-x-hidden fk:overflow-y-auto fk:rounded-md fk:border fk:bg-popover fk:p-1 fk:text-popover-foreground fk:shadow-md fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95",e),...o})})}function re({...e}){return jsx(DropdownMenu.Group,{"data-slot":"dropdown-menu-group",...e})}function ie({className:e,inset:t,variant:o="default",...a$1}){return jsx(DropdownMenu.Item,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":o,className:a("fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:px-2 fk:py-1.5 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-disabled:pointer-events-none fk:data-disabled:opacity-50 fk:data-inset:pl-8 fk:data-[variant=destructive]:text-destructive fk:data-[variant=destructive]:focus:bg-destructive/10 fk:data-[variant=destructive]:focus:text-destructive fk:dark:data-[variant=destructive]:focus:bg-destructive/20 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:[&_svg:not([class*='text-'])]:text-muted-foreground fk:data-[variant=destructive]:*:[svg]:text-destructive!",e),...a$1})}function ae({className:e,children:t,checked:o,...a$1}){return jsxs(DropdownMenu.CheckboxItem,{"data-slot":"dropdown-menu-checkbox-item",className:a("fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-2 fk:pl-8 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-disabled:pointer-events-none fk:data-disabled:opacity-50 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4",e),checked:o,...a$1,children:[jsx("span",{className:"fk:pointer-events-none fk:absolute fk:left-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(CheckIcon,{className:"size-4"})})}),t]})}function se({...e}){return jsx(DropdownMenu.RadioGroup,{"data-slot":"dropdown-menu-radio-group",...e})}function de({className:e,children:t,...o}){return jsxs(DropdownMenu.RadioItem,{"data-slot":"dropdown-menu-radio-item",className:a("fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-2 fk:pl-8 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-disabled:pointer-events-none fk:data-disabled:opacity-50 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4",e),...o,children:[jsx("span",{className:"fk:pointer-events-none fk:absolute fk:left-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(CircleIcon,{className:"size-2 fill-current"})})}),t]})}function fe({className:e,inset:t,...o}){return jsx(DropdownMenu.Label,{"data-slot":"dropdown-menu-label","data-inset":t,className:a("fk:px-2 fk:py-1.5 fk:text-sm fk:font-medium fk:data-inset:pl-8",e),...o})}function ue({className:e,...t}){return jsx(DropdownMenu.Separator,{"data-slot":"dropdown-menu-separator",className:a("fk:-mx-1 fk:my-1 fk:h-px fk:bg-border",e),...t})}function me({className:e,...t}){return jsx("span",{"data-slot":"dropdown-menu-shortcut",className:a("fk:ml-auto fk:text-xs fk:tracking-widest fk:text-muted-foreground",e),...t})}function ce({...e}){return jsx(DropdownMenu.Sub,{"data-slot":"dropdown-menu-sub",...e})}function pe({className:e,inset:t,children:o,...a$1}){return jsxs(DropdownMenu.SubTrigger,{"data-slot":"dropdown-menu-sub-trigger","data-inset":t,className:a("fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:px-2 fk:py-1.5 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-inset:pl-8 fk:data-[state=open]:bg-accent fk:data-[state=open]:text-accent-foreground fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:[&_svg:not([class*='text-'])]:text-muted-foreground",e),...a$1,children:[o,jsx(ChevronRightIcon,{className:"fk:ml-auto fk:size-4"})]})}function ke({className:e,...t}){return jsx(DropdownMenu.SubContent,{"data-slot":"dropdown-menu-sub-content",className:a("fk:z-50 fk:min-w-32 fk:origin-(--radix-dropdown-menu-content-transform-origin) fk:overflow-hidden fk:rounded-md fk:border fk:bg-popover fk:p-1 fk:text-popover-foreground fk:shadow-lg fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95",e),...t})}function we({className:e,...t}){return jsx("div",{"data-slot":"skeleton",className:a("fk:animate-pulse fk:rounded-md fk:bg-accent",e),...t})}export{Y as a,j as b,ee as c,te as d,oe as e,ne as f,re as g,ie as h,ae as i,se as j,de as k,fe as l,ue as m,me as n,ce as o,pe as p,ke as q,we as r};//# sourceMappingURL=chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import'./index.css';import {a}from'./chunk-O2QMYUPS.js';import {createContext,useState,useCallback,useEffect,useMemo,useContext}from'react';import {jsx,jsxs}from'react/jsx-runtime';import {DropdownMenu}from'radix-ui';import {CheckIcon,CircleIcon,ChevronRightIcon}from'lucide-react';var U=["light","dark"],C="(prefers-color-scheme: dark)",R=createContext(void 0);function Y({attribute:e="data-theme",children:t,defaultTheme:o,disableTransitionOnChange:a=false,enableColorScheme:h=true,enableSystem:d=true,forcedTheme:f,storageKey:g="theme",themes:m=U,value:l}){let[c,I]=useState(()=>A(g,o,d)),[p,b]=useState(()=>Q()),P=T(f??c,d,p),x=useCallback(s=>{if(!f&&(I(s),!!k()))try{window.localStorage.setItem(g,s);}catch{}},[f,g]);useEffect(()=>{if(!k()||!d)return;let s=window.matchMedia(C);function v(u){b(u.matches?"dark":"light");}return b(s.matches?"dark":"light"),s.addEventListener("change",v),()=>{s.removeEventListener("change",v);}},[d]),useEffect(()=>{if(!k())return;let s=window.document.documentElement,u=T(f??c??o,d,p);if(!u)return;let z=a?V():void 0,N=l?Object.values(l):m,y=l?.[u]??u;e==="class"&&(s.classList.remove(...N),s.classList.add(y)),e!=="class"&&s.setAttribute(e,y),h&&(u==="dark"||u==="light")&&(s.style.colorScheme=u),z?.();},[e,o,a,h,d,f,p,c,m,l]);let S=useMemo(()=>({forcedTheme:f,resolvedTheme:P,setTheme:x,systemTheme:p,theme:f??c,themes:d?[...m,"system"]:m}),[d,f,P,x,p,c,m]);return jsx(R.Provider,{value:S,children:t})}function j(){let e=useContext(R);if(!e)throw new Error("useTheme must be used within ThemeProvider");return e}function V(){let e=window.document.createElement("style");return e.appendChild(window.document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),window.document.head.appendChild(e),()=>{window.getComputedStyle(window.document.body),window.setTimeout(()=>{e.remove();},0);}}function A(e,t,o){if(!k())return t??(o?"system":"light");try{let a=window.localStorage.getItem(e);if(a)return a}catch{}return t??(o?"system":"light")}function Q(){if(k())return window.matchMedia(C).matches?"dark":"light"}function k(){return typeof window<"u"}function T(e,t,o){if(e)return e!=="system"?e:t?o??"light":"light"}function ee({...e}){return jsx(DropdownMenu.Root,{"data-slot":"dropdown-menu",...e})}function te({...e}){return jsx(DropdownMenu.Portal,{"data-slot":"dropdown-menu-portal",...e})}function oe({...e}){return jsx(DropdownMenu.Trigger,{"data-slot":"dropdown-menu-trigger",...e})}function ne({className:e,sideOffset:t=4,...o}){return jsx(DropdownMenu.Portal,{children:jsx(DropdownMenu.Content,{"data-slot":"dropdown-menu-content",sideOffset:t,className:a("fk:z-50 fk:max-h-(--radix-dropdown-menu-content-available-height) fk:min-w-32 fk:origin-(--radix-dropdown-menu-content-transform-origin) fk:overflow-x-hidden fk:overflow-y-auto fk:rounded-md fk:border fk:bg-popover fk:p-1 fk:text-popover-foreground fk:shadow-md fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95",e),...o})})}function re({...e}){return jsx(DropdownMenu.Group,{"data-slot":"dropdown-menu-group",...e})}function ie({className:e,inset:t,variant:o="default",...a$1}){return jsx(DropdownMenu.Item,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":o,className:a("fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:px-2 fk:py-1.5 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-disabled:pointer-events-none fk:data-disabled:opacity-50 fk:data-inset:pl-8 fk:data-[variant=destructive]:text-destructive fk:data-[variant=destructive]:focus:bg-destructive/10 fk:data-[variant=destructive]:focus:text-destructive fk:dark:data-[variant=destructive]:focus:bg-destructive/20 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:[&_svg:not([class*='text-'])]:text-muted-foreground fk:data-[variant=destructive]:*:[svg]:text-destructive!",e),...a$1})}function ae({className:e,children:t,checked:o,...a$1}){return jsxs(DropdownMenu.CheckboxItem,{"data-slot":"dropdown-menu-checkbox-item",className:a("fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-2 fk:pl-8 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-disabled:pointer-events-none fk:data-disabled:opacity-50 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4",e),checked:o,...a$1,children:[jsx("span",{className:"fk:pointer-events-none fk:absolute fk:left-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(CheckIcon,{className:"fk:size-4"})})}),t]})}function se({...e}){return jsx(DropdownMenu.RadioGroup,{"data-slot":"dropdown-menu-radio-group",...e})}function de({className:e,children:t,...o}){return jsxs(DropdownMenu.RadioItem,{"data-slot":"dropdown-menu-radio-item",className:a("fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-2 fk:pl-8 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-disabled:pointer-events-none fk:data-disabled:opacity-50 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4",e),...o,children:[jsx("span",{className:"fk:pointer-events-none fk:absolute fk:left-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(CircleIcon,{className:"size-2 fill-current"})})}),t]})}function fe({className:e,inset:t,...o}){return jsx(DropdownMenu.Label,{"data-slot":"dropdown-menu-label","data-inset":t,className:a("fk:px-2 fk:py-1.5 fk:text-sm fk:font-medium fk:data-inset:pl-8",e),...o})}function ue({className:e,...t}){return jsx(DropdownMenu.Separator,{"data-slot":"dropdown-menu-separator",className:a("fk:-mx-1 fk:my-1 fk:h-px fk:bg-border",e),...t})}function me({className:e,...t}){return jsx("span",{"data-slot":"dropdown-menu-shortcut",className:a("fk:ml-auto fk:text-xs fk:tracking-widest fk:text-muted-foreground",e),...t})}function ce({...e}){return jsx(DropdownMenu.Sub,{"data-slot":"dropdown-menu-sub",...e})}function pe({className:e,inset:t,children:o,...a$1}){return jsxs(DropdownMenu.SubTrigger,{"data-slot":"dropdown-menu-sub-trigger","data-inset":t,className:a("fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:px-2 fk:py-1.5 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-inset:pl-8 fk:data-[state=open]:bg-accent fk:data-[state=open]:text-accent-foreground fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:[&_svg:not([class*='text-'])]:text-muted-foreground",e),...a$1,children:[o,jsx(ChevronRightIcon,{className:"fk:ml-auto fk:size-4"})]})}function ke({className:e,...t}){return jsx(DropdownMenu.SubContent,{"data-slot":"dropdown-menu-sub-content",className:a("fk:z-50 fk:min-w-32 fk:origin-(--radix-dropdown-menu-content-transform-origin) fk:overflow-hidden fk:rounded-md fk:border fk:bg-popover fk:p-1 fk:text-popover-foreground fk:shadow-lg fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95",e),...t})}function we({className:e,...t}){return jsx("div",{"data-slot":"skeleton",className:a("fk:animate-pulse fk:rounded-md fk:bg-accent",e),...t})}export{Y as a,j as b,ee as c,te as d,oe as e,ne as f,re as g,ie as h,ae as i,se as j,de as k,fe as l,ue as m,me as n,ce as o,pe as p,ke as q,we as r};//# sourceMappingURL=chunk-JCHD4EGB.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-JCHD4EGB.js.map
|