@flexkit/studio 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/chat-page-H6I3XOKS.js +2 -0
  2. package/dist/chat-page-H6I3XOKS.js.map +1 -0
  3. package/dist/{chunk-OUSEULBR.js → chunk-2IRKGO2B.js} +4 -4
  4. package/dist/{chunk-OUSEULBR.js.map → chunk-2IRKGO2B.js.map} +1 -1
  5. package/dist/{chunk-3CPWATOI.js → chunk-5TQF5UQQ.js} +2 -2
  6. package/dist/{chunk-3CPWATOI.js.map → chunk-5TQF5UQQ.js.map} +1 -1
  7. package/dist/chunk-ANVO5P65.js +4 -0
  8. package/dist/{chunk-YINI2YKQ.js.map → chunk-ANVO5P65.js.map} +1 -1
  9. package/dist/chunk-BURKG2UC.js +6 -0
  10. package/dist/chunk-BURKG2UC.js.map +1 -0
  11. package/dist/chunk-GM5OZTHL.js +2 -0
  12. package/dist/{chunk-GZIMMYLK.js.map → chunk-GM5OZTHL.js.map} +1 -1
  13. package/dist/{chunk-7PDYCDX6.js → chunk-JYHZU2UZ.js} +2 -2
  14. package/dist/{chunk-7PDYCDX6.js.map → chunk-JYHZU2UZ.js.map} +1 -1
  15. package/dist/chunk-LQVZWFM2.js +2 -0
  16. package/dist/{chunk-QQUNCDUB.js.map → chunk-LQVZWFM2.js.map} +1 -1
  17. package/dist/{chunk-6LYEDKFY.js → chunk-QHDL6CA2.js} +3 -3
  18. package/dist/{chunk-6LYEDKFY.js.map → chunk-QHDL6CA2.js.map} +1 -1
  19. package/dist/{chunk-G4PYYHI3.js → chunk-S7M5CQ5S.js} +2 -2
  20. package/dist/{chunk-G4PYYHI3.js.map → chunk-S7M5CQ5S.js.map} +1 -1
  21. package/dist/chunk-ZBI744KS.js +3 -0
  22. package/dist/chunk-ZBI744KS.js.map +1 -0
  23. package/dist/index.css +6 -0
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.js +4 -4
  26. package/dist/list-ZQJ6NHKQ.js +2 -0
  27. package/dist/{list-SQCN7HA3.js.map → list-ZQJ6NHKQ.js.map} +1 -1
  28. package/dist/pages-2GQVTLL2.js +3 -0
  29. package/dist/pages-2GQVTLL2.js.map +1 -0
  30. package/dist/plugin-pages-E5TUDDT5.js +2 -0
  31. package/dist/{plugin-pages-AHOA6YJE.js.map → plugin-pages-E5TUDDT5.js.map} +1 -1
  32. package/dist/{root-IIILTOJI.js → root-BD4VN3RD.js} +3 -3
  33. package/dist/{root-IIILTOJI.js.map → root-BD4VN3RD.js.map} +1 -1
  34. package/dist/root-HC5QZ2JM.js +2 -0
  35. package/dist/{root-5ZW536V7.js.map → root-HC5QZ2JM.js.map} +1 -1
  36. package/dist/{root-QPQQ3DFJ.js → root-P6CVZ5ZB.js} +2 -2
  37. package/dist/{root-QPQQ3DFJ.js.map → root-P6CVZ5ZB.js.map} +1 -1
  38. package/dist/root-TXKDRPOK.js +23 -0
  39. package/dist/{root-4FGNRGCD.js.map → root-TXKDRPOK.js.map} +1 -1
  40. package/dist/{search-2K2BU4UU.js → search-PVXTPIYJ.js} +2 -2
  41. package/dist/{search-2K2BU4UU.js.map → search-PVXTPIYJ.js.map} +1 -1
  42. package/dist/{skills-pages-PSBRTFGK.js → skills-pages-N5KDEHLT.js} +2 -2
  43. package/dist/{skills-pages-PSBRTFGK.js.map → skills-pages-N5KDEHLT.js.map} +1 -1
  44. package/dist/spec-renderer-ZZ3GPVKU.js +2 -0
  45. package/dist/spec-renderer-ZZ3GPVKU.js.map +1 -0
  46. package/dist/ui.js +1 -1
  47. package/package.json +4 -4
  48. package/dist/chat-page-NWMI4XOE.js +0 -2
  49. package/dist/chat-page-NWMI4XOE.js.map +0 -1
  50. package/dist/chunk-GZIMMYLK.js +0 -2
  51. package/dist/chunk-NSYO57O3.js +0 -5
  52. package/dist/chunk-NSYO57O3.js.map +0 -1
  53. package/dist/chunk-QQUNCDUB.js +0 -2
  54. package/dist/chunk-W2EBZZAY.js +0 -3
  55. package/dist/chunk-W2EBZZAY.js.map +0 -1
  56. package/dist/chunk-YINI2YKQ.js +0 -4
  57. package/dist/list-SQCN7HA3.js +0 -2
  58. package/dist/pages-OIAPASPF.js +0 -3
  59. package/dist/pages-OIAPASPF.js.map +0 -1
  60. package/dist/plugin-pages-AHOA6YJE.js +0 -2
  61. package/dist/root-4FGNRGCD.js +0 -23
  62. package/dist/root-5ZW536V7.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/apps/ai/markdown-editor-themes.ts","../src/apps/ai/markdown-editor.tsx","../src/apps/ai/skills-pages.tsx"],"names":["EDITOR_FONT","DARK_THEME_BACKGROUND","LIGHT_THEME_BACKGROUND","withEditorSurface","theme","background","gutterBackground","EditorView","darkTheme","createTheme","t","lightTheme","isDarkTheme","root","editorChrome","themeExtensions","dark","readOnlyExtensions","readOnly","EditorState","contentAttributes","options","attributes","MarkdownEditor","ariaDescribedBy","ariaInvalid","ariaLabel","ariaLabelledBy","className","onBlur","onChange","onSave","placeholder","value","parentRef","useRef","viewRef","themeCompartmentRef","Compartment","readOnlyCompartmentRef","a11yCompartmentRef","onBlurRef","onChangeRef","onSaveRef","valueRef","useEffect","parent","view","lineNumbers","highlightActiveLineGutter","highlightSpecialChars","history","foldGutter","drawSelection","dropCursor","indentOnInput","bracketMatching","highlightActiveLine","highlightSelectionMatches","markdown","languages","keymap","defaultKeymap","historyKeymap","searchKeymap","foldKeymap","indentWithTab","Prec","update","placeholderExtension","resizeObserver","themeObserver","current","jsx","SKILLS_PAGE_SIZE","SKILL_SKELETON_ROWS","SkillListSkeleton","jsxs","row","Skeleton","skillMarkdownComponents","children","_node","props","part","useProjectApi","currentProjectId","useConfig","useMemo","createApiClient","PageMessage","InfiniteScrollSentinel","onVisible","sentinelRef","onVisibleRef","node","observer","entries","entry","getSkillVisibilityLabel","skill","spaceLabelById","SkillLogo","GraduationCapIcon","SkillsPage","api","projectId","navigate","useNavigate","search","setSearch","useState","canMutate","useCanMutate","hasActiveFilters","getSkillsKey","pageIndex","previousPage","paths","skillPages","isLoading","setSize","size","useSWRInfinite","fetcher","skills","page","hasMore","isLoadingMore","isInitialLoading","handleLoadMore","currentSize","emptyMessage","content","Alert","AlertDescription","CatalogHeader","Input","event","Button","Link","Plus","PermissionTooltip","LoaderCircle","FieldError","id","message","FieldHintLabel","hint","htmlFor","Label","Tooltip","TooltipTrigger","Info","TooltipContent","SkillPageHeader","actions","title","Fragment","SidebarTrigger","Separator","ArrowLeft","SkillDetailSkeleton","field","SkillContentPane","showContentError","validationMessage","viewMode","setViewMode","isOverLimit","preview","Markdown","Tabs","TabsList","TabsTrigger","PenLine","Eye","ScrollArea","SkillForm","mode","onSaved","name","setName","description","setDescription","setContent","visibility","setVisibility","spaceId","setSpaceId","isSaving","setIsSaving","isSavingRef","setMessage","touched","setTouched","spacesData","useSWR","auth","useAuth","userSpaceCodes","selectableSpaces","space","contentError","validation","isValid","showNameError","showDescriptionError","saveLabel","save","input","result","toast","error","handleSubmit","deleteSkill","Trash2","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ReadOnlyCodeSkill","forking","setForking","forkError","setForkError","fork","response","Badge","CreateSkillPage","SkillDetailPage","skillId","useParams","data","mutate"],"mappings":"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","file":"skills-pages-PSBRTFGK.js","sourcesContent":["import type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { createTheme } from '@uiw/codemirror-themes';\n\nconst EDITOR_FONT = 'var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace';\nconst DARK_THEME_BACKGROUND = '#212121';\nconst LIGHT_THEME_BACKGROUND = '#fafafa';\n\nfunction withEditorSurface(theme: Extension, background: string, gutterBackground: string): Extension {\n return [\n theme,\n EditorView.theme({\n '&': {\n backgroundColor: background,\n },\n '.cm-scroller': {\n backgroundColor: background,\n },\n '.cm-gutters': {\n backgroundColor: gutterBackground,\n },\n }),\n ];\n}\n\nexport const darkTheme: Extension = withEditorSurface(\n createTheme({\n settings: {\n background: DARK_THEME_BACKGROUND,\n caret: '#f8f8f0',\n fontFamily: EDITOR_FONT,\n foreground: '#f8f8f2',\n gutterBackground: DARK_THEME_BACKGROUND,\n gutterBorder: 'transparent',\n gutterForeground: '#6d8a88',\n lineHighlight: 'rgba(255, 255, 255, 0.1)',\n selection: 'rgba(255, 255, 255, 0.1)',\n selectionMatch: 'rgba(255, 255, 255, 0.2)',\n },\n styles: [\n { color: '#6272a4', tag: [t.comment, t.quote, t.strikethrough] },\n { color: '#6272a4', tag: [t.meta, t.processingInstruction] },\n { color: '#f1fa8c', tag: t.string },\n { color: '#f91f6f', tag: [t.atom, t.bool, t.number, t.heading] },\n { color: '#ff79c6', tag: [t.keyword, t.operator, t.tagName] },\n { color: '#8be9fd', tag: [t.typeName, t.link, t.url] },\n { color: '#009fb8', tag: [t.className, t.attributeName, t.monospace] },\n { color: '#66d9ef', tag: [t.propertyName, t.function(t.propertyName)] },\n {\n color: '#009fb8',\n tag: [t.definition(t.variableName), t.function(t.variableName)],\n },\n { color: '#0072f5', tag: [t.strong, t.emphasis] },\n { color: '#ff5555', tag: t.invalid },\n ],\n theme: 'dark',\n }),\n DARK_THEME_BACKGROUND,\n DARK_THEME_BACKGROUND\n);\n\nexport const lightTheme: Extension = withEditorSurface(\n createTheme({\n settings: {\n background: LIGHT_THEME_BACKGROUND,\n caret: '#526fff',\n fontFamily: EDITOR_FONT,\n foreground: '#383a42',\n gutterBackground: LIGHT_THEME_BACKGROUND,\n gutterBorder: 'transparent',\n gutterForeground: '#9d9d9f',\n lineHighlight: '#383a420c',\n selection: '#e5e5e6',\n selectionMatch: '#e5e5e6',\n },\n styles: [\n { color: '#a0a1a7', tag: [t.comment, t.quote, t.strikethrough] },\n { color: '#a0a1a7', tag: [t.meta, t.processingInstruction] },\n { color: '#50a14f', tag: t.string },\n { color: '#986801', tag: [t.attributeName] },\n { color: '#a626a4', tag: t.keyword },\n { color: '#0072f5', tag: [t.operator, t.strong, t.emphasis] },\n { color: '#f91f6f', tag: [t.atom, t.bool, t.number, t.heading] },\n { color: '#c18401', tag: [t.typeName, t.className] },\n { color: '#009fb8', tag: [t.tagName, t.propertyName, t.monospace] },\n { color: '#4078f2', tag: [t.link, t.url, t.function(t.variableName), t.definition(t.variableName)] },\n { color: '#f91f6f', tag: t.invalid },\n ],\n theme: 'light',\n }),\n LIGHT_THEME_BACKGROUND,\n LIGHT_THEME_BACKGROUND\n);\n","import type { JSX } from 'react';\nimport { useEffect, useRef } from 'react';\nimport { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';\nimport { markdown } from '@codemirror/lang-markdown';\nimport { languages } from '@codemirror/language-data';\nimport { bracketMatching, foldGutter, foldKeymap, indentOnInput } from '@codemirror/language';\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search';\nimport { Compartment, EditorState, Prec } from '@codemirror/state';\nimport {\n drawSelection,\n dropCursor,\n EditorView,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n placeholder as placeholderExtension,\n} from '@codemirror/view';\nimport { lightTheme, darkTheme } from './markdown-editor-themes';\n\nexport interface MarkdownEditorProps {\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n className?: string;\n onBlur?: () => void;\n onChange?: (_value: string) => void;\n onSave?: () => void;\n placeholder?: string;\n readOnly?: boolean;\n value: string;\n}\n\nfunction isDarkTheme(): boolean {\n const root = document.documentElement;\n\n return (\n root.getAttribute('data-theme') === 'dark' || root.classList.contains('dark') || root.style.colorScheme === 'dark'\n );\n}\n\nconst editorChrome = EditorView.theme({\n '&': {\n fontSize: '13px',\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n minHeight: '0',\n minWidth: '0',\n width: '100%',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n height: '100%',\n lineHeight: '1.6',\n minHeight: '0',\n minWidth: '0',\n overflow: 'auto',\n width: '100%',\n },\n '.cm-content': {\n fontSize: '13px',\n fontStyle: 'normal',\n fontWeight: '400',\n minWidth: '0 !important',\n padding: '12px 0',\n },\n '.cm-line, .cm-line span': {\n fontSize: 'inherit',\n fontStyle: 'inherit',\n fontWeight: 'inherit',\n lineHeight: 'inherit',\n },\n '.cm-gutters': {\n borderRight: '1px solid transparent',\n },\n '.cm-foldPlaceholder': {\n backgroundColor: 'transparent',\n border: 'none',\n },\n});\n\nfunction themeExtensions(dark: boolean) {\n return [dark ? darkTheme : lightTheme, editorChrome];\n}\n\nfunction readOnlyExtensions(readOnly: boolean) {\n return [EditorState.readOnly.of(readOnly), EditorView.editable.of(!readOnly)];\n}\n\nfunction contentAttributes(options: {\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n readOnly?: boolean;\n}): { [name: string]: string } {\n const attributes: { [name: string]: string } = {\n 'aria-multiline': 'true',\n role: 'textbox',\n };\n\n if (options.ariaLabel) {\n attributes['aria-label'] = options.ariaLabel;\n }\n\n if (options.ariaLabelledBy) {\n attributes['aria-labelledby'] = options.ariaLabelledBy;\n }\n\n if (options.ariaDescribedBy) {\n attributes['aria-describedby'] = options.ariaDescribedBy;\n }\n\n if (options.ariaInvalid) {\n attributes['aria-invalid'] = 'true';\n }\n\n if (options.readOnly) {\n attributes['aria-readonly'] = 'true';\n }\n\n return attributes;\n}\n\nexport function MarkdownEditor({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n className,\n onBlur,\n onChange,\n onSave,\n placeholder,\n readOnly = false,\n value,\n}: MarkdownEditorProps): JSX.Element {\n const parentRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n const themeCompartmentRef = useRef(new Compartment());\n const readOnlyCompartmentRef = useRef(new Compartment());\n const a11yCompartmentRef = useRef(new Compartment());\n const onBlurRef = useRef(onBlur);\n const onChangeRef = useRef(onChange);\n const onSaveRef = useRef(onSave);\n const valueRef = useRef(value);\n\n onBlurRef.current = onBlur;\n onChangeRef.current = onChange;\n onSaveRef.current = onSave;\n valueRef.current = value;\n\n useEffect(() => {\n const parent = parentRef.current;\n\n if (!parent) {\n return;\n }\n\n const view = new EditorView({\n parent,\n state: EditorState.create({\n doc: valueRef.current,\n extensions: [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n bracketMatching(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n EditorView.lineWrapping,\n markdown({ codeLanguages: languages }),\n keymap.of([...defaultKeymap, ...historyKeymap, ...searchKeymap, ...foldKeymap, indentWithTab]),\n Prec.highest(\n keymap.of([\n {\n key: 'Mod-s',\n run: () => {\n onSaveRef.current?.();\n\n return true;\n },\n },\n ])\n ),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n onChangeRef.current?.(update.state.doc.toString());\n }\n\n if (update.focusChanged && !update.view.hasFocus) {\n onBlurRef.current?.();\n }\n }),\n themeCompartmentRef.current.of(themeExtensions(isDarkTheme())),\n readOnlyCompartmentRef.current.of(readOnlyExtensions(readOnly)),\n a11yCompartmentRef.current.of(\n EditorView.contentAttributes.of(\n contentAttributes({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n readOnly,\n })\n )\n ),\n ...(placeholder ? [placeholderExtension(placeholder)] : []),\n ],\n }),\n });\n\n viewRef.current = view;\n\n const resizeObserver = new ResizeObserver(() => {\n view.requestMeasure();\n });\n\n resizeObserver.observe(parent);\n\n const themeObserver = new MutationObserver(() => {\n view.dispatch({\n effects: themeCompartmentRef.current.reconfigure(themeExtensions(isDarkTheme())),\n });\n });\n\n themeObserver.observe(document.documentElement, {\n attributeFilter: ['class', 'data-theme', 'style'],\n attributes: true,\n });\n\n return () => {\n resizeObserver.disconnect();\n themeObserver.disconnect();\n view.destroy();\n viewRef.current = null;\n };\n // Mount once; later prop changes are applied through compartments / document transactions.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- editor view is created once\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n view.dispatch({\n effects: themeCompartmentRef.current.reconfigure(themeExtensions(isDarkTheme())),\n });\n // Imported palettes live at module scope; this re-applies them after tsup/HMR.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- theme extensions change on hot reload\n }, [lightTheme, darkTheme]);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n const current = view.state.doc.toString();\n\n if (current === value) {\n return;\n }\n\n view.dispatch({\n changes: { from: 0, to: current.length, insert: value },\n });\n }, [value]);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n view.dispatch({\n effects: [\n readOnlyCompartmentRef.current.reconfigure(readOnlyExtensions(readOnly)),\n a11yCompartmentRef.current.reconfigure(\n EditorView.contentAttributes.of(\n contentAttributes({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n readOnly,\n })\n )\n ),\n ],\n });\n }, [ariaDescribedBy, ariaInvalid, ariaLabel, ariaLabelledBy, readOnly]);\n\n return (\n <div className={className ?? 'fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden'} ref={parentRef} />\n );\n}\n","import type { FormEvent, JSX } from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { ArrowLeft, Eye, GraduationCapIcon, Info, LoaderCircle, PenLine, Plus, Trash2 } from 'lucide-react';\nimport Markdown, { type Components } from 'react-markdown';\nimport { Link, useNavigate, useParams } from 'react-router-dom';\nimport { useAuth } from '../../auth/auth-context';\nimport { useCanMutate } from '../../core/permissions';\nimport { useConfig } from '../../core/config/config-context';\nimport { MAX_SKILL_CONTENT_LENGTH } from './skill-limits';\nimport {\n Alert,\n AlertDescription,\n Badge,\n Button,\n Input,\n Label,\n PermissionTooltip,\n ScrollArea,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Separator,\n SidebarTrigger,\n Skeleton,\n Tabs,\n TabsList,\n TabsTrigger,\n toast,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '../../ui';\nimport useSWR from 'swr';\nimport useSWRInfinite from 'swr/infinite';\nimport { createApiClient, fetcher, paths, type ApiClient } from './api';\nimport { MarkdownEditor } from './markdown-editor';\nimport { CatalogHeader } from './plugin-pages';\nimport type { AutomationVisibility, ProjectSpace, Skill, SkillInput, SkillsList } from './types';\n\nconst SKILLS_PAGE_SIZE = 25;\n\nconst SKILL_SKELETON_ROWS: { descriptionWidth: string; id: string; nameWidth: string }[] = [\n { descriptionWidth: 'fk:w-44', id: 'skill-a', nameWidth: 'fk:w-28' },\n { descriptionWidth: 'fk:w-52', id: 'skill-b', nameWidth: 'fk:w-20' },\n { descriptionWidth: 'fk:w-40', id: 'skill-c', nameWidth: 'fk:w-36' },\n { descriptionWidth: 'fk:w-48', id: 'skill-d', nameWidth: 'fk:w-24' },\n { descriptionWidth: 'fk:w-36', id: 'skill-e', nameWidth: 'fk:w-32' },\n { descriptionWidth: 'fk:w-56', id: 'skill-f', nameWidth: 'fk:w-16' },\n];\n\nfunction SkillListSkeleton(): JSX.Element {\n return (\n <div aria-busy=\"true\" className=\"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2\">\n <span className=\"fk:sr-only\">Loading skills</span>\n {SKILL_SKELETON_ROWS.map((row) => (\n <div className=\"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:px-3 fk:py-2\" key={row.id}>\n <Skeleton className=\"fk:size-10 fk:shrink-0 fk:rounded-lg\" />\n <span className=\"fk:flex fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <Skeleton className={`fk:h-4 ${row.nameWidth}`} />\n <Skeleton className={`fk:h-4 ${row.descriptionWidth}`} />\n </span>\n </div>\n ))}\n </div>\n );\n}\n\nconst skillMarkdownComponents: Components = {\n code({ children, className, node: _node, ...props }) {\n const isFenced = typeof className === 'string' && className.split(' ').some((part) => part.startsWith('language-'));\n\n if (isFenced) {\n return (\n <code className={className} {...props}>\n {children}\n </code>\n );\n }\n\n return (\n <code\n className=\"fk:rounded fk:bg-muted fk:px-1.5 fk:py-0.5 fk:font-mono fk:text-[0.875em] fk:font-medium fk:before:content-none fk:after:content-none fk:corner-squircle\"\n {...props}\n >\n {children}\n </code>\n );\n },\n};\n\nfunction useProjectApi(): { api: ApiClient | null; projectId: string | undefined } {\n const { currentProjectId } = useConfig();\n const api = useMemo(() => (currentProjectId ? createApiClient(currentProjectId) : null), [currentProjectId]);\n\n return { api, projectId: currentProjectId };\n}\n\nfunction PageMessage({ children }: { children: string }): JSX.Element {\n return (\n <div className=\"fk:rounded-md fk:border fk:border-dashed fk:p-8 fk:text-center fk:text-sm fk:text-muted-foreground fk:corner-squircle\">\n {children}\n </div>\n );\n}\n\nfunction InfiniteScrollSentinel({ onVisible }: { onVisible: () => void }): JSX.Element {\n const sentinelRef = useRef<HTMLDivElement>(null);\n const onVisibleRef = useRef(onVisible);\n\n onVisibleRef.current = onVisible;\n\n useEffect(() => {\n const node = sentinelRef.current;\n\n if (!node) {\n return;\n }\n\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n onVisibleRef.current();\n }\n });\n\n observer.observe(node);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return <div aria-hidden className=\"fk:h-px\" ref={sentinelRef} />;\n}\n\nfunction getSkillVisibilityLabel(skill: Skill, spaceLabelById: Map<string, string>): string {\n if (skill.visibility === 'space') {\n return (skill.spaceId ? spaceLabelById.get(skill.spaceId) : undefined) ?? 'Space';\n }\n\n if (skill.visibility === 'personal') {\n return 'Personal';\n }\n\n return 'Project';\n}\n\nfunction SkillLogo({ skill }: { skill: Skill }): JSX.Element {\n if (skill.logoUrl) {\n return <img alt=\"\" className=\"fk:size-10 fk:shrink-0 fk:rounded-lg fk:corner-squircle\" src={skill.logoUrl} />;\n }\n\n return (\n <span className=\"fk:flex fk:size-10 fk:shrink-0 fk:items-center fk:justify-center fk:rounded-lg fk:bg-muted fk:text-muted-foreground fk:corner-squircle\">\n <GraduationCapIcon className=\"fk:size-5\" />\n </span>\n );\n}\n\nexport function SkillsPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const navigate = useNavigate();\n const [search, setSearch] = useState('');\n const canMutate = useCanMutate();\n const hasActiveFilters = search.trim().length > 0;\n\n const getSkillsKey = (pageIndex: number, previousPage: SkillsList | null): string | null => {\n if (!projectId) {\n return null;\n }\n\n if (previousPage && !previousPage.hasMore) {\n return null;\n }\n\n return paths(projectId).skills({\n limit: SKILLS_PAGE_SIZE,\n offset: pageIndex * SKILLS_PAGE_SIZE,\n search: search.trim() || undefined,\n });\n };\n const { data: skillPages, isLoading, setSize, size } = useSWRInfinite<SkillsList>(getSkillsKey, fetcher);\n const skills = skillPages?.flatMap((page) => page.skills) ?? [];\n const lastPage = skillPages?.[skillPages.length - 1];\n const hasMore = lastPage?.hasMore ?? false;\n const isLoadingMore = skillPages !== undefined && size > skillPages.length;\n const isInitialLoading = isLoading && skills.length === 0;\n\n if (!projectId || !api) {\n return <PageMessage>Select a project to view skills.</PageMessage>;\n }\n\n function handleLoadMore(): void {\n void setSize((currentSize) => currentSize + 1);\n }\n\n let emptyMessage = 'No skills yet.';\n\n if (hasActiveFilters) {\n emptyMessage = 'No skills match your search.';\n }\n\n let content: JSX.Element = (\n <div className=\"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2\">\n {skills.map((skill) => (\n <button\n key={skill.id}\n type=\"button\"\n onClick={() => navigate(skill.id)}\n className=\"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:rounded-lg fk:px-3 fk:py-2 fk:text-left fk:transition-colors fk:hover:bg-accent fk:focus-visible:bg-accent fk:focus-visible:outline-none fk:corner-squircle\"\n >\n <SkillLogo skill={skill} />\n <span className=\"fk:min-w-0 fk:flex-1\">\n <span className=\"fk:block fk:truncate fk:text-sm fk:font-medium\">{skill.name}</span>\n <span className=\"fk:block fk:truncate fk:text-sm fk:text-muted-foreground\">{skill.description}</span>\n </span>\n </button>\n ))}\n </div>\n );\n\n if (isInitialLoading) {\n content = <SkillListSkeleton />;\n } else if (skills.length === 0) {\n content = (\n <Alert>\n <AlertDescription>{emptyMessage}</AlertDescription>\n </Alert>\n );\n }\n\n return (\n <main className=\"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col\">\n <CatalogHeader />\n <div className=\"fk:min-h-0 fk:flex-1 fk:overflow-auto\">\n <div className=\"fk:mx-auto fk:flex fk:w-full fk:max-w-4xl fk:flex-col fk:gap-8 fk:py-6 fk:pl-4 fk:pr-6\">\n <div>\n <h2 className=\"fk:text-2xl fk:font-semibold\">Skills for your agents</h2>\n <p className=\"fk:mt-2 fk:text-muted-foreground\">\n Reusable Markdown instructions that agents load when relevant, or always when attached to an automation.\n </p>\n </div>\n <div className=\"fk:flex fk:flex-wrap fk:items-center fk:gap-3\">\n <Input\n aria-label=\"Search skills\"\n className=\"fk:w-full fk:max-w-xs\"\n placeholder=\"Search skills…\"\n value={search}\n onChange={(event) => {\n void setSize(1);\n setSearch(event.target.value);\n }}\n />\n {canMutate ? (\n <Button asChild className=\"fk:ml-auto\" size=\"sm\">\n <Link to=\"new\">\n <Plus />\n New Skill\n </Link>\n </Button>\n ) : (\n <PermissionTooltip disabled>\n <Button className=\"fk:ml-auto\" disabled size=\"sm\">\n <Plus />\n New Skill\n </Button>\n </PermissionTooltip>\n )}\n </div>\n {content}\n {hasMore && !isLoadingMore ? <InfiniteScrollSentinel onVisible={handleLoadMore} /> : null}\n {isLoadingMore ? (\n <div className=\"fk:flex fk:items-center fk:justify-center fk:gap-2 fk:py-4 fk:text-sm fk:text-muted-foreground\">\n <LoaderCircle className=\"fk:size-4 fk:animate-spin\" />\n <span>Loading more skills...</span>\n </div>\n ) : null}\n </div>\n </div>\n </main>\n );\n}\n\nfunction FieldError({ className, id, message }: { className?: string; id?: string; message: string }): JSX.Element {\n return (\n <p className={`fk:text-sm fk:text-destructive ${className ?? ''}`} id={id}>\n {message}\n </p>\n );\n}\n\nfunction FieldHintLabel({\n children,\n hint,\n htmlFor,\n id,\n}: {\n children: string;\n hint: string;\n htmlFor?: string;\n id?: string;\n}): JSX.Element {\n return (\n <div className=\"fk:mb-1.5 fk:pl-2.5 fk:flex fk:items-center fk:gap-1\">\n <Label htmlFor={htmlFor} id={id}>\n {children}\n </Label>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label={`About ${children.toLowerCase()}`}\n className=\"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle\"\n type=\"button\"\n >\n <Info className=\"fk:size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"fk:max-w-xs\">{hint}</TooltipContent>\n </Tooltip>\n </div>\n );\n}\n\nfunction SkillPageHeader({ actions, title }: { actions?: JSX.Element; title: string | JSX.Element }): JSX.Element {\n return (\n <>\n <div className=\"fk:flex fk:shrink-0 fk:items-center fk:gap-2 fk:pr-4\">\n <Tooltip>\n <TooltipTrigger asChild>\n <SidebarTrigger className=\"fk:-ml-1 fk:h-4 fk:w-4\" />\n </TooltipTrigger>\n <TooltipContent>Toggle Sidebar</TooltipContent>\n </Tooltip>\n <Separator orientation=\"vertical\" className=\"fk:h-4\" />\n <h1 className=\"fk:min-w-0 fk:flex-1 fk:truncate fk:text-lg fk:font-semibold fk:leading-none fk:tracking-tight\">\n {title}\n </h1>\n {actions}\n </div>\n <Button asChild className=\"fk:shrink-0 fk:w-fit\" size=\"sm\" variant=\"ghost\">\n <Link relative=\"path\" to=\"..\">\n <ArrowLeft className=\"fk:mr-2 fk:size-4\" />\n Skills\n </Link>\n </Button>\n </>\n );\n}\n\nfunction SkillDetailSkeleton(): JSX.Element {\n return (\n <div aria-busy=\"true\" className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:overflow-hidden fk:pb-3\">\n <span className=\"fk:sr-only\">Loading skill</span>\n <SkillPageHeader actions={<Skeleton className=\"fk:h-8 fk:w-24\" />} title={<Skeleton className=\"fk:h-5 fk:w-40\" />} />\n <div className=\"fk:m-auto fk:flex fk:min-h-0 fk:w-full fk:max-w-6xl fk:flex-1 fk:flex-col fk:gap-8 fk:px-6\">\n <div className=\"fk:grid fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n {['name', 'description'].map((field) => (\n <div className=\"fk:flex fk:flex-col fk:gap-2\" key={field}>\n <Skeleton className=\"fk:h-4 fk:w-20\" />\n <Skeleton className=\"fk:h-9 fk:w-full\" />\n </div>\n ))}\n <div className=\"fk:flex fk:flex-col fk:gap-2\">\n <Skeleton className=\"fk:h-4 fk:w-20\" />\n <Skeleton className=\"fk:h-9 fk:w-32\" />\n </div>\n </div>\n <div className=\"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <Skeleton className=\"fk:h-4 fk:w-16\" />\n <Skeleton className=\"fk:min-h-48 fk:flex-1 fk:rounded-md\" />\n </div>\n </div>\n </div>\n );\n}\n\nfunction SkillContentPane({\n content,\n onBlur,\n onChange,\n onSave,\n readOnly = false,\n showContentError,\n validationMessage,\n}: {\n content: string;\n onBlur?: () => void;\n onChange?: (_value: string) => void;\n onSave?: () => void;\n readOnly?: boolean;\n showContentError?: boolean;\n validationMessage?: string;\n}): JSX.Element {\n const [viewMode, setViewMode] = useState<'preview' | 'write'>('write');\n const isOverLimit = content.length > MAX_SKILL_CONTENT_LENGTH;\n let preview: JSX.Element;\n\n if (content.trim()) {\n preview = <Markdown components={skillMarkdownComponents}>{content}</Markdown>;\n } else {\n preview = <p className=\"fk:text-muted-foreground\">Nothing to preview.</p>;\n }\n\n return (\n <div className=\"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <div className=\"fk:pl-3.25 fk:flex fk:shrink-0 fk:items-center fk:gap-1\">\n <Label htmlFor=\"skill-content\" id=\"skill-content-label\">\n Content\n </Label>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label=\"About skill content\"\n className=\"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle\"\n type=\"button\"\n >\n <Info className=\"fk:size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"fk:max-w-sm\">\n The skill itself, in Markdown. Write it like instructions for a capable colleague: procedures, rules,\n examples, and edge cases. Attached skills are always loaded; other visible skills are loaded on demand.\n </TooltipContent>\n </Tooltip>\n </div>\n <div\n className={`fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:ml-0.75 fk:overflow-hidden fk:rounded-md fk:border ${showContentError ? 'fk:border-destructive' : ''} fk:corner-squircle`}\n >\n <div className=\"fk:flex fk:shrink-0 fk:items-center fk:justify-between fk:gap-2 fk:border-b fk:px-2.5 fk:py-1\">\n <Tabs\n value={viewMode}\n onValueChange={(value) => {\n setViewMode(value === 'preview' ? 'preview' : 'write');\n }}\n >\n <TabsList>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">\n <TabsTrigger aria-label=\"Write\" className=\"fk:px-2.5\" value=\"write\">\n <PenLine className=\"fk:size-3.5\" />\n </TabsTrigger>\n </span>\n </TooltipTrigger>\n <TooltipContent>Write</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">\n <TabsTrigger aria-label=\"Preview\" className=\"fk:px-2.5\" value=\"preview\">\n <Eye className=\"fk:size-3.5\" />\n </TabsTrigger>\n </span>\n </TooltipTrigger>\n <TooltipContent>Preview</TooltipContent>\n </Tooltip>\n </TabsList>\n </Tabs>\n <span className={isOverLimit ? 'fk:text-xs fk:text-destructive' : 'fk:text-xs fk:text-muted-foreground'}>\n {content.length.toLocaleString()} / {MAX_SKILL_CONTENT_LENGTH.toLocaleString()}\n </span>\n </div>\n <div className=\"fk:min-h-0 fk:min-w-0 fk:flex-1 fk:overflow-hidden\" hidden={viewMode !== 'write'}>\n <MarkdownEditor\n ariaDescribedBy={showContentError ? 'skill-content-error' : undefined}\n ariaInvalid={showContentError}\n ariaLabelledBy=\"skill-content-label\"\n className=\"fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden\"\n readOnly={readOnly}\n value={content}\n onBlur={onBlur}\n onChange={onChange}\n onSave={onSave}\n />\n </div>\n {viewMode === 'preview' ? (\n <ScrollArea className=\"fk:min-h-0 fk:flex-1\">\n <div className=\"fk:prose fk:prose-sm fk:dark:prose-invert fk:max-w-none fk:px-4 fk:py-3\">{preview}</div>\n </ScrollArea>\n ) : null}\n {showContentError && validationMessage ? (\n <FieldError className=\"fk:border-t fk:px-3 fk:py-2\" id=\"skill-content-error\" message={validationMessage} />\n ) : null}\n </div>\n </div>\n );\n}\n\ninterface SkillFormProps {\n api: ApiClient;\n mode: 'create' | 'edit';\n onSaved: (_skill?: Skill) => void;\n projectId: string;\n skill?: Skill;\n}\n\nexport function SkillForm({ api, mode, onSaved, projectId, skill }: SkillFormProps): JSX.Element {\n const [name, setName] = useState(skill?.name ?? '');\n const [description, setDescription] = useState(skill?.description ?? '');\n const [content, setContent] = useState(skill?.content ?? '');\n const [visibility, setVisibility] = useState<AutomationVisibility>(skill?.visibility ?? 'project');\n const [spaceId, setSpaceId] = useState<string | null>(skill?.spaceId ?? null);\n const [isSaving, setIsSaving] = useState(false);\n const isSavingRef = useRef(false);\n const [message, setMessage] = useState('');\n const [touched, setTouched] = useState({ content: false, description: false, name: false });\n const navigate = useNavigate();\n const { data: spacesData } = useSWR<{ spaces: ProjectSpace[] }>(paths(projectId).spaces, fetcher);\n const [, auth] = useAuth();\n const canMutate = useCanMutate();\n const userSpaceCodes = auth.user?.spaces ?? [];\n // Only spaces the caller belongs to are offered; the server rejects\n // bindings to spaces outside the caller's membership anyway.\n const selectableSpaces = (spacesData?.spaces ?? []).filter((space) => userSpaceCodes.includes(space.code));\n let contentError = '';\n\n if (!content.trim()) {\n contentError = 'Content is required';\n } else if (content.length > MAX_SKILL_CONTENT_LENGTH) {\n contentError = `Content must be at most ${String(MAX_SKILL_CONTENT_LENGTH)} characters`;\n }\n\n const validation = {\n content: contentError,\n description: description.trim() ? '' : 'Description is required',\n name: name.trim() ? '' : 'Name is required',\n space: visibility === 'space' && !spaceId ? 'Select a space' : '',\n };\n const isValid = !validation.content && !validation.description && !validation.name && !validation.space;\n const showNameError = touched.name && Boolean(validation.name);\n const showDescriptionError = touched.description && Boolean(validation.description);\n const showContentError = touched.content && Boolean(validation.content);\n const title = mode === 'create' ? 'New Skill' : (skill?.name ?? 'Skill');\n let saveLabel = 'Update skill';\n\n if (isSaving) {\n saveLabel = 'Saving...';\n } else if (mode === 'create') {\n saveLabel = 'Create skill';\n }\n\n async function save(): Promise<void> {\n if (!canMutate || isSavingRef.current) {\n return;\n }\n\n if (!isValid) {\n setTouched({ content: true, description: true, name: true });\n\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setMessage('');\n\n const input: SkillInput = {\n content,\n description,\n name,\n spaceId: visibility === 'space' ? spaceId : null,\n visibility,\n };\n\n try {\n const result =\n mode === 'create' || !skill ? await api.createSkill(input) : await api.updateSkill(skill.id, input);\n\n if (!result.success) {\n setMessage(Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage);\n\n return;\n }\n\n toast.success(mode === 'create' || !skill ? 'Skill created.' : 'Skill saved.');\n onSaved(result.skill);\n } catch (error) {\n setMessage(error instanceof Error ? error.message : 'Failed to save skill.');\n } finally {\n isSavingRef.current = false;\n setIsSaving(false);\n }\n }\n\n async function handleSubmit(event: FormEvent<HTMLFormElement>): Promise<void> {\n event.preventDefault();\n await save();\n }\n\n async function deleteSkill(): Promise<void> {\n if (!skill || !canMutate || isSavingRef.current) {\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setMessage('');\n\n try {\n const result = await api.deleteSkill(skill.id);\n\n if (!result.success) {\n setMessage(Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage);\n\n return;\n }\n\n navigate('..', { relative: 'path' });\n } catch (error) {\n setMessage(error instanceof Error ? error.message : 'Failed to delete skill.');\n } finally {\n isSavingRef.current = false;\n setIsSaving(false);\n }\n }\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3\">\n <SkillPageHeader\n actions={\n <div className=\"fk:flex fk:items-center fk:gap-3\">\n {!isValid ? (\n <span className=\"fk:text-xs fk:text-muted-foreground\">Complete the required fields to save</span>\n ) : null}\n {mode === 'edit' && skill ? (\n <Button disabled={isSaving || !canMutate} size=\"sm\" type=\"button\" variant=\"outline\" onClick={() => void deleteSkill()}>\n <Trash2 />\n Delete\n </Button>\n ) : null}\n <PermissionTooltip disabled={!canMutate}>\n <Button disabled={isSaving || !isValid || !canMutate} form=\"skill-editor-form\" size=\"sm\" type=\"submit\">\n {saveLabel}\n </Button>\n </PermissionTooltip>\n </div>\n }\n title={title}\n />\n {message ? (\n <div className=\"fk:shrink-0 fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:text-destructive fk:corner-squircle\">\n {message}\n </div>\n ) : null}\n <form\n className=\"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-6 fk:w-full fk:max-w-6xl fk:m-auto fk:gap-8 fk:px-4\"\n id=\"skill-editor-form\"\n onSubmit={(event) => void handleSubmit(event)}\n >\n <div className=\"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:px-0.75 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n <div>\n <FieldHintLabel hint=\"Identifying label for this skill\" htmlFor=\"skill-name\">\n Name\n </FieldHintLabel>\n <Input\n aria-describedby={showNameError ? 'skill-name-error' : undefined}\n aria-invalid={showNameError}\n className={showNameError ? 'fk:border-destructive focus-visible:fk:ring-destructive' : ''}\n id=\"skill-name\"\n value={name}\n onBlur={() => setTouched((current) => ({ ...current, name: true }))}\n onChange={(event) => setName(event.target.value)}\n />\n {showNameError ? <FieldError id=\"skill-name-error\" message={validation.name} /> : null}\n </div>\n <div>\n <FieldHintLabel\n hint=\"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.\"\n htmlFor=\"skill-description\"\n >\n Description\n </FieldHintLabel>\n <Input\n aria-describedby={showDescriptionError ? 'skill-description-error' : undefined}\n aria-invalid={showDescriptionError}\n className={showDescriptionError ? 'fk:border-destructive focus-visible:fk:ring-destructive' : ''}\n id=\"skill-description\"\n placeholder=\"e.g. Rules for writing product descriptions in our brand voice\"\n value={description}\n onBlur={() => setTouched((current) => ({ ...current, description: true }))}\n onChange={(event) => setDescription(event.target.value)}\n />\n {showDescriptionError ? <FieldError id=\"skill-description-error\" message={validation.description} /> : null}\n </div>\n <div>\n <FieldHintLabel\n hint=\"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.\"\n htmlFor=\"skill-visibility\"\n >\n Visibility\n </FieldHintLabel>\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Select\n value={visibility}\n onValueChange={(value) => {\n setVisibility(value === 'space' || value === 'personal' ? value : 'project');\n\n if (value !== 'space') {\n setSpaceId(null);\n }\n }}\n >\n <SelectTrigger aria-label=\"Visibility\" className=\"fk:w-fit fk:min-w-26\" id=\"skill-visibility\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value=\"project\">Project</SelectItem>\n <SelectItem disabled={selectableSpaces.length === 0} value=\"space\">\n Space\n </SelectItem>\n <SelectItem value=\"personal\">Personal</SelectItem>\n </SelectContent>\n </Select>\n {visibility === 'space' ? (\n <Select\n value={spaceId ?? ''}\n onValueChange={(value) => {\n setSpaceId(value || null);\n }}\n >\n <SelectTrigger aria-label=\"Space\" className=\"fk:w-fit fk:min-w-34\">\n <SelectValue placeholder=\"Select a space\" />\n </SelectTrigger>\n <SelectContent align=\"start\">\n {selectableSpaces.map((space) => (\n <SelectItem key={space.id} value={space.id}>\n {space.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n </div>\n {visibility === 'space' && validation.space ? <FieldError message={validation.space} /> : null}\n </div>\n </div>\n <SkillContentPane\n content={content}\n showContentError={showContentError}\n validationMessage={validation.content}\n onBlur={() => setTouched((current) => ({ ...current, content: true }))}\n onChange={setContent}\n onSave={() => {\n void save();\n }}\n />\n </form>\n </div>\n );\n}\n\nfunction ReadOnlyCodeSkill({\n projectId,\n skill,\n spaceLabelById,\n}: {\n skill: Skill;\n projectId: string;\n spaceLabelById: Map<string, string>;\n}): JSX.Element {\n const canMutate = useCanMutate();\n const navigate = useNavigate();\n const [forking, setForking] = useState(false);\n const [forkError, setForkError] = useState('');\n\n async function fork(): Promise<void> {\n setForking(true);\n setForkError('');\n let response: Response;\n\n try {\n response = await fetch(`/api/flexkit/${projectId}/skills/${skill.id}/fork`, { method: 'POST', credentials: 'include' });\n } catch {\n setForkError('Unable to create a copy. Try again.');\n setForking(false);\n\n return;\n }\n\n setForking(false);\n\n if (!response.ok) {\n setForkError('Unable to create a copy. Check your permissions.');\n\n return;\n }\n\n navigate('..', { relative: 'path' });\n }\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3\">\n <SkillPageHeader\n actions={\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Badge variant=\"secondary\">{skill.source === 'plugin' ? 'Plugin' : 'Code'}</Badge>\n {skill.source === 'plugin' && <Button type=\"button\" disabled={forking || !canMutate} onClick={() => void fork()} size=\"sm\">Edit a copy</Button>}\n </div>\n }\n title={skill.name}\n />\n <div className=\"fk:flex fk:flex-col fk:h-full fk:px-4 fk:gap-3 fk:max-w-6xl fk:m-auto\">\n <div className=\"fk:shrink-0 fk:rounded-md fk:border fk:bg-muted/30 fk:px-3 fk:py-2 fk:corner-squircle\">\n <p className=\"fk:text-sm fk:font-medium\">Version-controlled skill</p>\n <p className=\"fk:text-sm fk:text-muted-foreground\">\n {skill.source === 'plugin' ? 'This skill is managed by its plugin. Edit a copy to create a personal Studio skill.' : 'Edit this skill in your repository and re-sync it from the Custom Tools settings.'}\n </p>\n </div>\n <div className=\"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n <div>\n <FieldHintLabel hint=\"Identifying label for this skill\" htmlFor=\"skill-name\">\n Name\n </FieldHintLabel>\n <Input\n className=\"fk:opacity-100!\"\n disabled={true}\n id=\"skill-name\"\n value={skill.name}\n />\n </div>\n <div>\n <FieldHintLabel\n hint=\"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.\"\n htmlFor=\"skill-description\"\n >\n Description\n </FieldHintLabel>\n <Input\n className=\"fk:opacity-100!\"\n disabled={true}\n id=\"skill-description\"\n placeholder=\"e.g. Rules for writing product descriptions in our brand voice\"\n value={skill.description}\n />\n </div>\n <div>\n <FieldHintLabel\n hint=\"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.\"\n htmlFor=\"skill-visibility\"\n >\n Visibility\n </FieldHintLabel>\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Select\n disabled={true}\n value={skill.visibility}\n >\n <SelectTrigger aria-label=\"Visibility\" className=\"fk:w-fit fk:min-w-26 fk:opacity-100!\" id=\"skill-visibility\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value=\"project\">Project</SelectItem>\n <SelectItem disabled={!skill.spaceId} value=\"space\">\n Space\n </SelectItem>\n <SelectItem value=\"personal\">Personal</SelectItem>\n </SelectContent>\n </Select>\n {skill.visibility === 'space' ? (\n <Select\n disabled={true}\n value={skill.spaceId ?? ''}\n >\n <SelectTrigger aria-label=\"Space\" className=\"fk:w-fit fk:min-w-34 fk:opacity-100!\">\n <SelectValue placeholder=\"Select a space\" />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value={skill.spaceId ?? ''}>\n {getSkillVisibilityLabel(skill, spaceLabelById)}\n </SelectItem>\n </SelectContent>\n </Select>\n ) : null}\n </div>\n </div>\n </div>\n {forkError && <p role=\"alert\">{forkError}</p>}\n <SkillContentPane content={skill.content} readOnly />\n </div>\n </div>\n );\n}\n\nexport function CreateSkillPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const navigate = useNavigate();\n\n if (!projectId || !api) {\n return <PageMessage>Select a project to create skills.</PageMessage>;\n }\n\n return (\n <SkillForm api={api} mode=\"create\" projectId={projectId} onSaved={() => navigate('..', { relative: 'path' })} />\n );\n}\n\nexport function SkillDetailPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const { skillId } = useParams<{ skillId: string }>();\n const { data, error, isLoading, mutate } = useSWR<{ skill: Skill }>(\n projectId && skillId ? paths(projectId).skill(skillId) : null,\n fetcher\n );\n const { data: spacesData } = useSWR<{ spaces: ProjectSpace[] }>(projectId ? paths(projectId).spaces : null, fetcher);\n\n if (!projectId || !api || !skillId) {\n return <PageMessage>Select a skill.</PageMessage>;\n }\n\n if (error) {\n return <PageMessage>Failed to load skill.</PageMessage>;\n }\n\n if (isLoading || !data?.skill) {\n return <SkillDetailSkeleton />;\n }\n\n const spaceLabelById = new Map((spacesData?.spaces ?? []).map((space) => [space.id, space.label]));\n\n if (data.skill.source !== 'studio') {\n return <ReadOnlyCodeSkill projectId={projectId} skill={data.skill} spaceLabelById={spaceLabelById} />;\n }\n\n return (\n <SkillForm\n api={api}\n mode=\"edit\"\n projectId={projectId}\n skill={data.skill}\n onSaved={(skill) => {\n if (skill) {\n void mutate({ skill }, { revalidate: false });\n } else {\n void mutate();\n }\n }}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/apps/ai/markdown-editor-themes.ts","../src/apps/ai/markdown-editor.tsx","../src/apps/ai/skills-pages.tsx"],"names":["EDITOR_FONT","DARK_THEME_BACKGROUND","LIGHT_THEME_BACKGROUND","withEditorSurface","theme","background","gutterBackground","EditorView","darkTheme","createTheme","t","lightTheme","isDarkTheme","root","editorChrome","themeExtensions","dark","readOnlyExtensions","readOnly","EditorState","contentAttributes","options","attributes","MarkdownEditor","ariaDescribedBy","ariaInvalid","ariaLabel","ariaLabelledBy","className","onBlur","onChange","onSave","placeholder","value","parentRef","useRef","viewRef","themeCompartmentRef","Compartment","readOnlyCompartmentRef","a11yCompartmentRef","onBlurRef","onChangeRef","onSaveRef","valueRef","useEffect","parent","view","lineNumbers","highlightActiveLineGutter","highlightSpecialChars","history","foldGutter","drawSelection","dropCursor","indentOnInput","bracketMatching","highlightActiveLine","highlightSelectionMatches","markdown","languages","keymap","defaultKeymap","historyKeymap","searchKeymap","foldKeymap","indentWithTab","Prec","update","placeholderExtension","resizeObserver","themeObserver","current","jsx","SKILLS_PAGE_SIZE","SKILL_SKELETON_ROWS","SkillListSkeleton","jsxs","row","Skeleton","skillMarkdownComponents","children","_node","props","part","useProjectApi","currentProjectId","useConfig","useMemo","createApiClient","PageMessage","InfiniteScrollSentinel","onVisible","sentinelRef","onVisibleRef","node","observer","entries","entry","getSkillVisibilityLabel","skill","spaceLabelById","SkillLogo","GraduationCapIcon","SkillsPage","api","projectId","navigate","useNavigate","search","setSearch","useState","canMutate","useCanMutate","hasActiveFilters","getSkillsKey","pageIndex","previousPage","paths","skillPages","isLoading","setSize","size","useSWRInfinite","fetcher","skills","page","hasMore","isLoadingMore","isInitialLoading","handleLoadMore","currentSize","emptyMessage","content","Alert","AlertDescription","CatalogHeader","Input","event","Button","Link","Plus","PermissionTooltip","LoaderCircle","FieldError","id","message","FieldHintLabel","hint","htmlFor","Label","Tooltip","TooltipTrigger","Info","TooltipContent","SkillPageHeader","actions","title","Fragment","SidebarTrigger","Separator","ArrowLeft","SkillDetailSkeleton","field","SkillContentPane","showContentError","validationMessage","viewMode","setViewMode","isOverLimit","preview","Markdown","Tabs","TabsList","TabsTrigger","PenLine","Eye","ScrollArea","SkillForm","mode","onSaved","name","setName","description","setDescription","setContent","visibility","setVisibility","spaceId","setSpaceId","isSaving","setIsSaving","isSavingRef","setMessage","touched","setTouched","spacesData","useSWR","auth","useAuth","userSpaceCodes","selectableSpaces","space","contentError","validation","isValid","showNameError","showDescriptionError","saveLabel","save","input","result","toast","error","handleSubmit","deleteSkill","Trash2","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ReadOnlyCodeSkill","forking","setForking","forkError","setForkError","fork","response","Badge","CreateSkillPage","SkillDetailPage","skillId","useParams","data","mutate"],"mappings":"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","file":"skills-pages-N5KDEHLT.js","sourcesContent":["import type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { createTheme } from '@uiw/codemirror-themes';\n\nconst EDITOR_FONT = 'var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace';\nconst DARK_THEME_BACKGROUND = '#212121';\nconst LIGHT_THEME_BACKGROUND = '#fafafa';\n\nfunction withEditorSurface(theme: Extension, background: string, gutterBackground: string): Extension {\n return [\n theme,\n EditorView.theme({\n '&': {\n backgroundColor: background,\n },\n '.cm-scroller': {\n backgroundColor: background,\n },\n '.cm-gutters': {\n backgroundColor: gutterBackground,\n },\n }),\n ];\n}\n\nexport const darkTheme: Extension = withEditorSurface(\n createTheme({\n settings: {\n background: DARK_THEME_BACKGROUND,\n caret: '#f8f8f0',\n fontFamily: EDITOR_FONT,\n foreground: '#f8f8f2',\n gutterBackground: DARK_THEME_BACKGROUND,\n gutterBorder: 'transparent',\n gutterForeground: '#6d8a88',\n lineHighlight: 'rgba(255, 255, 255, 0.1)',\n selection: 'rgba(255, 255, 255, 0.1)',\n selectionMatch: 'rgba(255, 255, 255, 0.2)',\n },\n styles: [\n { color: '#6272a4', tag: [t.comment, t.quote, t.strikethrough] },\n { color: '#6272a4', tag: [t.meta, t.processingInstruction] },\n { color: '#f1fa8c', tag: t.string },\n { color: '#f91f6f', tag: [t.atom, t.bool, t.number, t.heading] },\n { color: '#ff79c6', tag: [t.keyword, t.operator, t.tagName] },\n { color: '#8be9fd', tag: [t.typeName, t.link, t.url] },\n { color: '#009fb8', tag: [t.className, t.attributeName, t.monospace] },\n { color: '#66d9ef', tag: [t.propertyName, t.function(t.propertyName)] },\n {\n color: '#009fb8',\n tag: [t.definition(t.variableName), t.function(t.variableName)],\n },\n { color: '#0072f5', tag: [t.strong, t.emphasis] },\n { color: '#ff5555', tag: t.invalid },\n ],\n theme: 'dark',\n }),\n DARK_THEME_BACKGROUND,\n DARK_THEME_BACKGROUND\n);\n\nexport const lightTheme: Extension = withEditorSurface(\n createTheme({\n settings: {\n background: LIGHT_THEME_BACKGROUND,\n caret: '#526fff',\n fontFamily: EDITOR_FONT,\n foreground: '#383a42',\n gutterBackground: LIGHT_THEME_BACKGROUND,\n gutterBorder: 'transparent',\n gutterForeground: '#9d9d9f',\n lineHighlight: '#383a420c',\n selection: '#e5e5e6',\n selectionMatch: '#e5e5e6',\n },\n styles: [\n { color: '#a0a1a7', tag: [t.comment, t.quote, t.strikethrough] },\n { color: '#a0a1a7', tag: [t.meta, t.processingInstruction] },\n { color: '#50a14f', tag: t.string },\n { color: '#986801', tag: [t.attributeName] },\n { color: '#a626a4', tag: t.keyword },\n { color: '#0072f5', tag: [t.operator, t.strong, t.emphasis] },\n { color: '#f91f6f', tag: [t.atom, t.bool, t.number, t.heading] },\n { color: '#c18401', tag: [t.typeName, t.className] },\n { color: '#009fb8', tag: [t.tagName, t.propertyName, t.monospace] },\n { color: '#4078f2', tag: [t.link, t.url, t.function(t.variableName), t.definition(t.variableName)] },\n { color: '#f91f6f', tag: t.invalid },\n ],\n theme: 'light',\n }),\n LIGHT_THEME_BACKGROUND,\n LIGHT_THEME_BACKGROUND\n);\n","import type { JSX } from 'react';\nimport { useEffect, useRef } from 'react';\nimport { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';\nimport { markdown } from '@codemirror/lang-markdown';\nimport { languages } from '@codemirror/language-data';\nimport { bracketMatching, foldGutter, foldKeymap, indentOnInput } from '@codemirror/language';\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search';\nimport { Compartment, EditorState, Prec } from '@codemirror/state';\nimport {\n drawSelection,\n dropCursor,\n EditorView,\n highlightActiveLine,\n highlightActiveLineGutter,\n highlightSpecialChars,\n keymap,\n lineNumbers,\n placeholder as placeholderExtension,\n} from '@codemirror/view';\nimport { lightTheme, darkTheme } from './markdown-editor-themes';\n\nexport interface MarkdownEditorProps {\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n className?: string;\n onBlur?: () => void;\n onChange?: (_value: string) => void;\n onSave?: () => void;\n placeholder?: string;\n readOnly?: boolean;\n value: string;\n}\n\nfunction isDarkTheme(): boolean {\n const root = document.documentElement;\n\n return (\n root.getAttribute('data-theme') === 'dark' || root.classList.contains('dark') || root.style.colorScheme === 'dark'\n );\n}\n\nconst editorChrome = EditorView.theme({\n '&': {\n fontSize: '13px',\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n minHeight: '0',\n minWidth: '0',\n width: '100%',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n height: '100%',\n lineHeight: '1.6',\n minHeight: '0',\n minWidth: '0',\n overflow: 'auto',\n width: '100%',\n },\n '.cm-content': {\n fontSize: '13px',\n fontStyle: 'normal',\n fontWeight: '400',\n minWidth: '0 !important',\n padding: '12px 0',\n },\n '.cm-line, .cm-line span': {\n fontSize: 'inherit',\n fontStyle: 'inherit',\n fontWeight: 'inherit',\n lineHeight: 'inherit',\n },\n '.cm-gutters': {\n borderRight: '1px solid transparent',\n },\n '.cm-foldPlaceholder': {\n backgroundColor: 'transparent',\n border: 'none',\n },\n});\n\nfunction themeExtensions(dark: boolean) {\n return [dark ? darkTheme : lightTheme, editorChrome];\n}\n\nfunction readOnlyExtensions(readOnly: boolean) {\n return [EditorState.readOnly.of(readOnly), EditorView.editable.of(!readOnly)];\n}\n\nfunction contentAttributes(options: {\n ariaDescribedBy?: string;\n ariaInvalid?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n readOnly?: boolean;\n}): { [name: string]: string } {\n const attributes: { [name: string]: string } = {\n 'aria-multiline': 'true',\n role: 'textbox',\n };\n\n if (options.ariaLabel) {\n attributes['aria-label'] = options.ariaLabel;\n }\n\n if (options.ariaLabelledBy) {\n attributes['aria-labelledby'] = options.ariaLabelledBy;\n }\n\n if (options.ariaDescribedBy) {\n attributes['aria-describedby'] = options.ariaDescribedBy;\n }\n\n if (options.ariaInvalid) {\n attributes['aria-invalid'] = 'true';\n }\n\n if (options.readOnly) {\n attributes['aria-readonly'] = 'true';\n }\n\n return attributes;\n}\n\nexport function MarkdownEditor({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n className,\n onBlur,\n onChange,\n onSave,\n placeholder,\n readOnly = false,\n value,\n}: MarkdownEditorProps): JSX.Element {\n const parentRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n const themeCompartmentRef = useRef(new Compartment());\n const readOnlyCompartmentRef = useRef(new Compartment());\n const a11yCompartmentRef = useRef(new Compartment());\n const onBlurRef = useRef(onBlur);\n const onChangeRef = useRef(onChange);\n const onSaveRef = useRef(onSave);\n const valueRef = useRef(value);\n\n onBlurRef.current = onBlur;\n onChangeRef.current = onChange;\n onSaveRef.current = onSave;\n valueRef.current = value;\n\n useEffect(() => {\n const parent = parentRef.current;\n\n if (!parent) {\n return;\n }\n\n const view = new EditorView({\n parent,\n state: EditorState.create({\n doc: valueRef.current,\n extensions: [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n bracketMatching(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n EditorView.lineWrapping,\n markdown({ codeLanguages: languages }),\n keymap.of([...defaultKeymap, ...historyKeymap, ...searchKeymap, ...foldKeymap, indentWithTab]),\n Prec.highest(\n keymap.of([\n {\n key: 'Mod-s',\n run: () => {\n onSaveRef.current?.();\n\n return true;\n },\n },\n ])\n ),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n onChangeRef.current?.(update.state.doc.toString());\n }\n\n if (update.focusChanged && !update.view.hasFocus) {\n onBlurRef.current?.();\n }\n }),\n themeCompartmentRef.current.of(themeExtensions(isDarkTheme())),\n readOnlyCompartmentRef.current.of(readOnlyExtensions(readOnly)),\n a11yCompartmentRef.current.of(\n EditorView.contentAttributes.of(\n contentAttributes({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n readOnly,\n })\n )\n ),\n ...(placeholder ? [placeholderExtension(placeholder)] : []),\n ],\n }),\n });\n\n viewRef.current = view;\n\n const resizeObserver = new ResizeObserver(() => {\n view.requestMeasure();\n });\n\n resizeObserver.observe(parent);\n\n const themeObserver = new MutationObserver(() => {\n view.dispatch({\n effects: themeCompartmentRef.current.reconfigure(themeExtensions(isDarkTheme())),\n });\n });\n\n themeObserver.observe(document.documentElement, {\n attributeFilter: ['class', 'data-theme', 'style'],\n attributes: true,\n });\n\n return () => {\n resizeObserver.disconnect();\n themeObserver.disconnect();\n view.destroy();\n viewRef.current = null;\n };\n // Mount once; later prop changes are applied through compartments / document transactions.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- editor view is created once\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n view.dispatch({\n effects: themeCompartmentRef.current.reconfigure(themeExtensions(isDarkTheme())),\n });\n // Imported palettes live at module scope; this re-applies them after tsup/HMR.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- theme extensions change on hot reload\n }, [lightTheme, darkTheme]);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n const current = view.state.doc.toString();\n\n if (current === value) {\n return;\n }\n\n view.dispatch({\n changes: { from: 0, to: current.length, insert: value },\n });\n }, [value]);\n\n useEffect(() => {\n const view = viewRef.current;\n\n if (!view) {\n return;\n }\n\n view.dispatch({\n effects: [\n readOnlyCompartmentRef.current.reconfigure(readOnlyExtensions(readOnly)),\n a11yCompartmentRef.current.reconfigure(\n EditorView.contentAttributes.of(\n contentAttributes({\n ariaDescribedBy,\n ariaInvalid,\n ariaLabel,\n ariaLabelledBy,\n readOnly,\n })\n )\n ),\n ],\n });\n }, [ariaDescribedBy, ariaInvalid, ariaLabel, ariaLabelledBy, readOnly]);\n\n return (\n <div className={className ?? 'fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden'} ref={parentRef} />\n );\n}\n","import type { FormEvent, JSX } from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { ArrowLeft, Eye, GraduationCapIcon, Info, LoaderCircle, PenLine, Plus, Trash2 } from 'lucide-react';\nimport Markdown, { type Components } from 'react-markdown';\nimport { Link, useNavigate, useParams } from 'react-router-dom';\nimport { useAuth } from '../../auth/auth-context';\nimport { useCanMutate } from '../../core/permissions';\nimport { useConfig } from '../../core/config/config-context';\nimport { MAX_SKILL_CONTENT_LENGTH } from './skill-limits';\nimport {\n Alert,\n AlertDescription,\n Badge,\n Button,\n Input,\n Label,\n PermissionTooltip,\n ScrollArea,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Separator,\n SidebarTrigger,\n Skeleton,\n Tabs,\n TabsList,\n TabsTrigger,\n toast,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '../../ui';\nimport useSWR from 'swr';\nimport useSWRInfinite from 'swr/infinite';\nimport { createApiClient, fetcher, paths, type ApiClient } from './api';\nimport { MarkdownEditor } from './markdown-editor';\nimport { CatalogHeader } from './plugin-pages';\nimport type { AutomationVisibility, ProjectSpace, Skill, SkillInput, SkillsList } from './types';\n\nconst SKILLS_PAGE_SIZE = 25;\n\nconst SKILL_SKELETON_ROWS: { descriptionWidth: string; id: string; nameWidth: string }[] = [\n { descriptionWidth: 'fk:w-44', id: 'skill-a', nameWidth: 'fk:w-28' },\n { descriptionWidth: 'fk:w-52', id: 'skill-b', nameWidth: 'fk:w-20' },\n { descriptionWidth: 'fk:w-40', id: 'skill-c', nameWidth: 'fk:w-36' },\n { descriptionWidth: 'fk:w-48', id: 'skill-d', nameWidth: 'fk:w-24' },\n { descriptionWidth: 'fk:w-36', id: 'skill-e', nameWidth: 'fk:w-32' },\n { descriptionWidth: 'fk:w-56', id: 'skill-f', nameWidth: 'fk:w-16' },\n];\n\nfunction SkillListSkeleton(): JSX.Element {\n return (\n <div aria-busy=\"true\" className=\"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2\">\n <span className=\"fk:sr-only\">Loading skills</span>\n {SKILL_SKELETON_ROWS.map((row) => (\n <div className=\"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:px-3 fk:py-2\" key={row.id}>\n <Skeleton className=\"fk:size-10 fk:shrink-0 fk:rounded-lg\" />\n <span className=\"fk:flex fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <Skeleton className={`fk:h-4 ${row.nameWidth}`} />\n <Skeleton className={`fk:h-4 ${row.descriptionWidth}`} />\n </span>\n </div>\n ))}\n </div>\n );\n}\n\nconst skillMarkdownComponents: Components = {\n code({ children, className, node: _node, ...props }) {\n const isFenced = typeof className === 'string' && className.split(' ').some((part) => part.startsWith('language-'));\n\n if (isFenced) {\n return (\n <code className={className} {...props}>\n {children}\n </code>\n );\n }\n\n return (\n <code\n className=\"fk:rounded fk:bg-muted fk:px-1.5 fk:py-0.5 fk:font-mono fk:text-[0.875em] fk:font-medium fk:before:content-none fk:after:content-none fk:corner-squircle\"\n {...props}\n >\n {children}\n </code>\n );\n },\n};\n\nfunction useProjectApi(): { api: ApiClient | null; projectId: string | undefined } {\n const { currentProjectId } = useConfig();\n const api = useMemo(() => (currentProjectId ? createApiClient(currentProjectId) : null), [currentProjectId]);\n\n return { api, projectId: currentProjectId };\n}\n\nfunction PageMessage({ children }: { children: string }): JSX.Element {\n return (\n <div className=\"fk:rounded-md fk:border fk:border-dashed fk:p-8 fk:text-center fk:text-sm fk:text-muted-foreground fk:corner-squircle\">\n {children}\n </div>\n );\n}\n\nfunction InfiniteScrollSentinel({ onVisible }: { onVisible: () => void }): JSX.Element {\n const sentinelRef = useRef<HTMLDivElement>(null);\n const onVisibleRef = useRef(onVisible);\n\n onVisibleRef.current = onVisible;\n\n useEffect(() => {\n const node = sentinelRef.current;\n\n if (!node) {\n return;\n }\n\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n onVisibleRef.current();\n }\n });\n\n observer.observe(node);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return <div aria-hidden className=\"fk:h-px\" ref={sentinelRef} />;\n}\n\nfunction getSkillVisibilityLabel(skill: Skill, spaceLabelById: Map<string, string>): string {\n if (skill.visibility === 'space') {\n return (skill.spaceId ? spaceLabelById.get(skill.spaceId) : undefined) ?? 'Space';\n }\n\n if (skill.visibility === 'personal') {\n return 'Personal';\n }\n\n return 'Project';\n}\n\nfunction SkillLogo({ skill }: { skill: Skill }): JSX.Element {\n if (skill.logoUrl) {\n return <img alt=\"\" className=\"fk:size-10 fk:shrink-0 fk:rounded-lg fk:corner-squircle\" src={skill.logoUrl} />;\n }\n\n return (\n <span className=\"fk:flex fk:size-10 fk:shrink-0 fk:items-center fk:justify-center fk:rounded-lg fk:bg-muted fk:text-muted-foreground fk:corner-squircle\">\n <GraduationCapIcon className=\"fk:size-5\" />\n </span>\n );\n}\n\nexport function SkillsPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const navigate = useNavigate();\n const [search, setSearch] = useState('');\n const canMutate = useCanMutate();\n const hasActiveFilters = search.trim().length > 0;\n\n const getSkillsKey = (pageIndex: number, previousPage: SkillsList | null): string | null => {\n if (!projectId) {\n return null;\n }\n\n if (previousPage && !previousPage.hasMore) {\n return null;\n }\n\n return paths(projectId).skills({\n limit: SKILLS_PAGE_SIZE,\n offset: pageIndex * SKILLS_PAGE_SIZE,\n search: search.trim() || undefined,\n });\n };\n const { data: skillPages, isLoading, setSize, size } = useSWRInfinite<SkillsList>(getSkillsKey, fetcher);\n const skills = skillPages?.flatMap((page) => page.skills) ?? [];\n const lastPage = skillPages?.[skillPages.length - 1];\n const hasMore = lastPage?.hasMore ?? false;\n const isLoadingMore = skillPages !== undefined && size > skillPages.length;\n const isInitialLoading = isLoading && skills.length === 0;\n\n if (!projectId || !api) {\n return <PageMessage>Select a project to view skills.</PageMessage>;\n }\n\n function handleLoadMore(): void {\n void setSize((currentSize) => currentSize + 1);\n }\n\n let emptyMessage = 'No skills yet.';\n\n if (hasActiveFilters) {\n emptyMessage = 'No skills match your search.';\n }\n\n let content: JSX.Element = (\n <div className=\"fk:grid fk:grid-cols-1 fk:gap-x-16 fk:gap-y-1 fk:lg:grid-cols-2\">\n {skills.map((skill) => (\n <button\n key={skill.id}\n type=\"button\"\n onClick={() => navigate(skill.id)}\n className=\"fk:-mx-3 fk:flex fk:min-w-0 fk:items-center fk:gap-3 fk:rounded-lg fk:px-3 fk:py-2 fk:text-left fk:transition-colors fk:hover:bg-accent fk:focus-visible:bg-accent fk:focus-visible:outline-none fk:corner-squircle\"\n >\n <SkillLogo skill={skill} />\n <span className=\"fk:min-w-0 fk:flex-1\">\n <span className=\"fk:block fk:truncate fk:text-sm fk:font-medium\">{skill.name}</span>\n <span className=\"fk:block fk:truncate fk:text-sm fk:text-muted-foreground\">{skill.description}</span>\n </span>\n </button>\n ))}\n </div>\n );\n\n if (isInitialLoading) {\n content = <SkillListSkeleton />;\n } else if (skills.length === 0) {\n content = (\n <Alert>\n <AlertDescription>{emptyMessage}</AlertDescription>\n </Alert>\n );\n }\n\n return (\n <main className=\"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col\">\n <CatalogHeader />\n <div className=\"fk:min-h-0 fk:flex-1 fk:overflow-auto\">\n <div className=\"fk:mx-auto fk:flex fk:w-full fk:max-w-4xl fk:flex-col fk:gap-8 fk:py-6 fk:pl-4 fk:pr-6\">\n <div>\n <h2 className=\"fk:text-2xl fk:font-semibold\">Skills for your agents</h2>\n <p className=\"fk:mt-2 fk:text-muted-foreground\">\n Reusable Markdown instructions that agents load when relevant, or always when attached to an automation.\n </p>\n </div>\n <div className=\"fk:flex fk:flex-wrap fk:items-center fk:gap-3\">\n <Input\n aria-label=\"Search skills\"\n className=\"fk:w-full fk:max-w-xs\"\n placeholder=\"Search skills…\"\n value={search}\n onChange={(event) => {\n void setSize(1);\n setSearch(event.target.value);\n }}\n />\n {canMutate ? (\n <Button asChild className=\"fk:ml-auto\" size=\"sm\">\n <Link to=\"new\">\n <Plus />\n New Skill\n </Link>\n </Button>\n ) : (\n <PermissionTooltip disabled>\n <Button className=\"fk:ml-auto\" disabled size=\"sm\">\n <Plus />\n New Skill\n </Button>\n </PermissionTooltip>\n )}\n </div>\n {content}\n {hasMore && !isLoadingMore ? <InfiniteScrollSentinel onVisible={handleLoadMore} /> : null}\n {isLoadingMore ? (\n <div className=\"fk:flex fk:items-center fk:justify-center fk:gap-2 fk:py-4 fk:text-sm fk:text-muted-foreground\">\n <LoaderCircle className=\"fk:size-4 fk:animate-spin\" />\n <span>Loading more skills...</span>\n </div>\n ) : null}\n </div>\n </div>\n </main>\n );\n}\n\nfunction FieldError({ className, id, message }: { className?: string; id?: string; message: string }): JSX.Element {\n return (\n <p className={`fk:text-sm fk:text-destructive ${className ?? ''}`} id={id}>\n {message}\n </p>\n );\n}\n\nfunction FieldHintLabel({\n children,\n hint,\n htmlFor,\n id,\n}: {\n children: string;\n hint: string;\n htmlFor?: string;\n id?: string;\n}): JSX.Element {\n return (\n <div className=\"fk:mb-1.5 fk:pl-2.5 fk:flex fk:items-center fk:gap-1\">\n <Label htmlFor={htmlFor} id={id}>\n {children}\n </Label>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label={`About ${children.toLowerCase()}`}\n className=\"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle\"\n type=\"button\"\n >\n <Info className=\"fk:size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"fk:max-w-xs\">{hint}</TooltipContent>\n </Tooltip>\n </div>\n );\n}\n\nfunction SkillPageHeader({ actions, title }: { actions?: JSX.Element; title: string | JSX.Element }): JSX.Element {\n return (\n <>\n <div className=\"fk:flex fk:shrink-0 fk:items-center fk:gap-2 fk:pr-4\">\n <Tooltip>\n <TooltipTrigger asChild>\n <SidebarTrigger className=\"fk:-ml-1 fk:h-4 fk:w-4\" />\n </TooltipTrigger>\n <TooltipContent>Toggle Sidebar</TooltipContent>\n </Tooltip>\n <Separator orientation=\"vertical\" className=\"fk:h-4\" />\n <h1 className=\"fk:min-w-0 fk:flex-1 fk:truncate fk:text-lg fk:font-semibold fk:leading-none fk:tracking-tight\">\n {title}\n </h1>\n {actions}\n </div>\n <Button asChild className=\"fk:shrink-0 fk:w-fit\" size=\"sm\" variant=\"ghost\">\n <Link relative=\"path\" to=\"..\">\n <ArrowLeft className=\"fk:mr-2 fk:size-4\" />\n Skills\n </Link>\n </Button>\n </>\n );\n}\n\nfunction SkillDetailSkeleton(): JSX.Element {\n return (\n <div aria-busy=\"true\" className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:overflow-hidden fk:pb-3\">\n <span className=\"fk:sr-only\">Loading skill</span>\n <SkillPageHeader actions={<Skeleton className=\"fk:h-8 fk:w-24\" />} title={<Skeleton className=\"fk:h-5 fk:w-40\" />} />\n <div className=\"fk:m-auto fk:flex fk:min-h-0 fk:w-full fk:max-w-6xl fk:flex-1 fk:flex-col fk:gap-8 fk:px-6\">\n <div className=\"fk:grid fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n {['name', 'description'].map((field) => (\n <div className=\"fk:flex fk:flex-col fk:gap-2\" key={field}>\n <Skeleton className=\"fk:h-4 fk:w-20\" />\n <Skeleton className=\"fk:h-9 fk:w-full\" />\n </div>\n ))}\n <div className=\"fk:flex fk:flex-col fk:gap-2\">\n <Skeleton className=\"fk:h-4 fk:w-20\" />\n <Skeleton className=\"fk:h-9 fk:w-32\" />\n </div>\n </div>\n <div className=\"fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <Skeleton className=\"fk:h-4 fk:w-16\" />\n <Skeleton className=\"fk:min-h-48 fk:flex-1 fk:rounded-md\" />\n </div>\n </div>\n </div>\n );\n}\n\nfunction SkillContentPane({\n content,\n onBlur,\n onChange,\n onSave,\n readOnly = false,\n showContentError,\n validationMessage,\n}: {\n content: string;\n onBlur?: () => void;\n onChange?: (_value: string) => void;\n onSave?: () => void;\n readOnly?: boolean;\n showContentError?: boolean;\n validationMessage?: string;\n}): JSX.Element {\n const [viewMode, setViewMode] = useState<'preview' | 'write'>('write');\n const isOverLimit = content.length > MAX_SKILL_CONTENT_LENGTH;\n let preview: JSX.Element;\n\n if (content.trim()) {\n preview = <Markdown components={skillMarkdownComponents}>{content}</Markdown>;\n } else {\n preview = <p className=\"fk:text-muted-foreground\">Nothing to preview.</p>;\n }\n\n return (\n <div className=\"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-1.5\">\n <div className=\"fk:pl-3.25 fk:flex fk:shrink-0 fk:items-center fk:gap-1\">\n <Label htmlFor=\"skill-content\" id=\"skill-content-label\">\n Content\n </Label>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n aria-label=\"About skill content\"\n className=\"fk:rounded-sm fk:text-muted-foreground hover:fk:text-foreground fk:corner-squircle\"\n type=\"button\"\n >\n <Info className=\"fk:size-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent className=\"fk:max-w-sm\">\n The skill itself, in Markdown. Write it like instructions for a capable colleague: procedures, rules,\n examples, and edge cases. Attached skills are always loaded; other visible skills are loaded on demand.\n </TooltipContent>\n </Tooltip>\n </div>\n <div\n className={`fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:ml-0.75 fk:overflow-hidden fk:rounded-md fk:border ${showContentError ? 'fk:border-destructive' : ''} fk:corner-squircle`}\n >\n <div className=\"fk:flex fk:shrink-0 fk:items-center fk:justify-between fk:gap-2 fk:border-b fk:px-2.5 fk:py-1\">\n <Tabs\n value={viewMode}\n onValueChange={(value) => {\n setViewMode(value === 'preview' ? 'preview' : 'write');\n }}\n >\n <TabsList>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">\n <TabsTrigger aria-label=\"Write\" className=\"fk:px-2.5\" value=\"write\">\n <PenLine className=\"fk:size-3.5\" />\n </TabsTrigger>\n </span>\n </TooltipTrigger>\n <TooltipContent>Write</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">\n <TabsTrigger aria-label=\"Preview\" className=\"fk:px-2.5\" value=\"preview\">\n <Eye className=\"fk:size-3.5\" />\n </TabsTrigger>\n </span>\n </TooltipTrigger>\n <TooltipContent>Preview</TooltipContent>\n </Tooltip>\n </TabsList>\n </Tabs>\n <span className={isOverLimit ? 'fk:text-xs fk:text-destructive' : 'fk:text-xs fk:text-muted-foreground'}>\n {content.length.toLocaleString()} / {MAX_SKILL_CONTENT_LENGTH.toLocaleString()}\n </span>\n </div>\n <div className=\"fk:min-h-0 fk:min-w-0 fk:flex-1 fk:overflow-hidden\" hidden={viewMode !== 'write'}>\n <MarkdownEditor\n ariaDescribedBy={showContentError ? 'skill-content-error' : undefined}\n ariaInvalid={showContentError}\n ariaLabelledBy=\"skill-content-label\"\n className=\"fk:h-full fk:min-h-0 fk:min-w-0 fk:w-full fk:overflow-hidden\"\n readOnly={readOnly}\n value={content}\n onBlur={onBlur}\n onChange={onChange}\n onSave={onSave}\n />\n </div>\n {viewMode === 'preview' ? (\n <ScrollArea className=\"fk:min-h-0 fk:flex-1\">\n <div className=\"fk:prose fk:prose-sm fk:dark:prose-invert fk:max-w-none fk:px-4 fk:py-3\">{preview}</div>\n </ScrollArea>\n ) : null}\n {showContentError && validationMessage ? (\n <FieldError className=\"fk:border-t fk:px-3 fk:py-2\" id=\"skill-content-error\" message={validationMessage} />\n ) : null}\n </div>\n </div>\n );\n}\n\ninterface SkillFormProps {\n api: ApiClient;\n mode: 'create' | 'edit';\n onSaved: (_skill?: Skill) => void;\n projectId: string;\n skill?: Skill;\n}\n\nexport function SkillForm({ api, mode, onSaved, projectId, skill }: SkillFormProps): JSX.Element {\n const [name, setName] = useState(skill?.name ?? '');\n const [description, setDescription] = useState(skill?.description ?? '');\n const [content, setContent] = useState(skill?.content ?? '');\n const [visibility, setVisibility] = useState<AutomationVisibility>(skill?.visibility ?? 'project');\n const [spaceId, setSpaceId] = useState<string | null>(skill?.spaceId ?? null);\n const [isSaving, setIsSaving] = useState(false);\n const isSavingRef = useRef(false);\n const [message, setMessage] = useState('');\n const [touched, setTouched] = useState({ content: false, description: false, name: false });\n const navigate = useNavigate();\n const { data: spacesData } = useSWR<{ spaces: ProjectSpace[] }>(paths(projectId).spaces, fetcher);\n const [, auth] = useAuth();\n const canMutate = useCanMutate();\n const userSpaceCodes = auth.user?.spaces ?? [];\n // Only spaces the caller belongs to are offered; the server rejects\n // bindings to spaces outside the caller's membership anyway.\n const selectableSpaces = (spacesData?.spaces ?? []).filter((space) => userSpaceCodes.includes(space.code));\n let contentError = '';\n\n if (!content.trim()) {\n contentError = 'Content is required';\n } else if (content.length > MAX_SKILL_CONTENT_LENGTH) {\n contentError = `Content must be at most ${String(MAX_SKILL_CONTENT_LENGTH)} characters`;\n }\n\n const validation = {\n content: contentError,\n description: description.trim() ? '' : 'Description is required',\n name: name.trim() ? '' : 'Name is required',\n space: visibility === 'space' && !spaceId ? 'Select a space' : '',\n };\n const isValid = !validation.content && !validation.description && !validation.name && !validation.space;\n const showNameError = touched.name && Boolean(validation.name);\n const showDescriptionError = touched.description && Boolean(validation.description);\n const showContentError = touched.content && Boolean(validation.content);\n const title = mode === 'create' ? 'New Skill' : (skill?.name ?? 'Skill');\n let saveLabel = 'Update skill';\n\n if (isSaving) {\n saveLabel = 'Saving...';\n } else if (mode === 'create') {\n saveLabel = 'Create skill';\n }\n\n async function save(): Promise<void> {\n if (!canMutate || isSavingRef.current) {\n return;\n }\n\n if (!isValid) {\n setTouched({ content: true, description: true, name: true });\n\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setMessage('');\n\n const input: SkillInput = {\n content,\n description,\n name,\n spaceId: visibility === 'space' ? spaceId : null,\n visibility,\n };\n\n try {\n const result =\n mode === 'create' || !skill ? await api.createSkill(input) : await api.updateSkill(skill.id, input);\n\n if (!result.success) {\n setMessage(Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage);\n\n return;\n }\n\n toast.success(mode === 'create' || !skill ? 'Skill created.' : 'Skill saved.');\n onSaved(result.skill);\n } catch (error) {\n setMessage(error instanceof Error ? error.message : 'Failed to save skill.');\n } finally {\n isSavingRef.current = false;\n setIsSaving(false);\n }\n }\n\n async function handleSubmit(event: FormEvent<HTMLFormElement>): Promise<void> {\n event.preventDefault();\n await save();\n }\n\n async function deleteSkill(): Promise<void> {\n if (!skill || !canMutate || isSavingRef.current) {\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setMessage('');\n\n try {\n const result = await api.deleteSkill(skill.id);\n\n if (!result.success) {\n setMessage(Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage);\n\n return;\n }\n\n navigate('..', { relative: 'path' });\n } catch (error) {\n setMessage(error instanceof Error ? error.message : 'Failed to delete skill.');\n } finally {\n isSavingRef.current = false;\n setIsSaving(false);\n }\n }\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3\">\n <SkillPageHeader\n actions={\n <div className=\"fk:flex fk:items-center fk:gap-3\">\n {!isValid ? (\n <span className=\"fk:text-xs fk:text-muted-foreground\">Complete the required fields to save</span>\n ) : null}\n {mode === 'edit' && skill ? (\n <Button disabled={isSaving || !canMutate} size=\"sm\" type=\"button\" variant=\"outline\" onClick={() => void deleteSkill()}>\n <Trash2 />\n Delete\n </Button>\n ) : null}\n <PermissionTooltip disabled={!canMutate}>\n <Button disabled={isSaving || !isValid || !canMutate} form=\"skill-editor-form\" size=\"sm\" type=\"submit\">\n {saveLabel}\n </Button>\n </PermissionTooltip>\n </div>\n }\n title={title}\n />\n {message ? (\n <div className=\"fk:shrink-0 fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:text-destructive fk:corner-squircle\">\n {message}\n </div>\n ) : null}\n <form\n className=\"fk:flex fk:min-h-0 fk:min-w-0 fk:flex-1 fk:flex-col fk:gap-6 fk:w-full fk:max-w-6xl fk:m-auto fk:gap-8 fk:px-4\"\n id=\"skill-editor-form\"\n onSubmit={(event) => void handleSubmit(event)}\n >\n <div className=\"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:px-0.75 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n <div>\n <FieldHintLabel hint=\"Identifying label for this skill\" htmlFor=\"skill-name\">\n Name\n </FieldHintLabel>\n <Input\n aria-describedby={showNameError ? 'skill-name-error' : undefined}\n aria-invalid={showNameError}\n className={showNameError ? 'fk:border-destructive focus-visible:fk:ring-destructive' : ''}\n id=\"skill-name\"\n value={name}\n onBlur={() => setTouched((current) => ({ ...current, name: true }))}\n onChange={(event) => setName(event.target.value)}\n />\n {showNameError ? <FieldError id=\"skill-name-error\" message={validation.name} /> : null}\n </div>\n <div>\n <FieldHintLabel\n hint=\"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.\"\n htmlFor=\"skill-description\"\n >\n Description\n </FieldHintLabel>\n <Input\n aria-describedby={showDescriptionError ? 'skill-description-error' : undefined}\n aria-invalid={showDescriptionError}\n className={showDescriptionError ? 'fk:border-destructive focus-visible:fk:ring-destructive' : ''}\n id=\"skill-description\"\n placeholder=\"e.g. Rules for writing product descriptions in our brand voice\"\n value={description}\n onBlur={() => setTouched((current) => ({ ...current, description: true }))}\n onChange={(event) => setDescription(event.target.value)}\n />\n {showDescriptionError ? <FieldError id=\"skill-description-error\" message={validation.description} /> : null}\n </div>\n <div>\n <FieldHintLabel\n hint=\"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.\"\n htmlFor=\"skill-visibility\"\n >\n Visibility\n </FieldHintLabel>\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Select\n value={visibility}\n onValueChange={(value) => {\n setVisibility(value === 'space' || value === 'personal' ? value : 'project');\n\n if (value !== 'space') {\n setSpaceId(null);\n }\n }}\n >\n <SelectTrigger aria-label=\"Visibility\" className=\"fk:w-fit fk:min-w-26\" id=\"skill-visibility\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value=\"project\">Project</SelectItem>\n <SelectItem disabled={selectableSpaces.length === 0} value=\"space\">\n Space\n </SelectItem>\n <SelectItem value=\"personal\">Personal</SelectItem>\n </SelectContent>\n </Select>\n {visibility === 'space' ? (\n <Select\n value={spaceId ?? ''}\n onValueChange={(value) => {\n setSpaceId(value || null);\n }}\n >\n <SelectTrigger aria-label=\"Space\" className=\"fk:w-fit fk:min-w-34\">\n <SelectValue placeholder=\"Select a space\" />\n </SelectTrigger>\n <SelectContent align=\"start\">\n {selectableSpaces.map((space) => (\n <SelectItem key={space.id} value={space.id}>\n {space.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n </div>\n {visibility === 'space' && validation.space ? <FieldError message={validation.space} /> : null}\n </div>\n </div>\n <SkillContentPane\n content={content}\n showContentError={showContentError}\n validationMessage={validation.content}\n onBlur={() => setTouched((current) => ({ ...current, content: true }))}\n onChange={setContent}\n onSave={() => {\n void save();\n }}\n />\n </form>\n </div>\n );\n}\n\nfunction ReadOnlyCodeSkill({\n projectId,\n skill,\n spaceLabelById,\n}: {\n skill: Skill;\n projectId: string;\n spaceLabelById: Map<string, string>;\n}): JSX.Element {\n const canMutate = useCanMutate();\n const navigate = useNavigate();\n const [forking, setForking] = useState(false);\n const [forkError, setForkError] = useState('');\n\n async function fork(): Promise<void> {\n setForking(true);\n setForkError('');\n let response: Response;\n\n try {\n response = await fetch(`/api/flexkit/${projectId}/skills/${skill.id}/fork`, { method: 'POST', credentials: 'include' });\n } catch {\n setForkError('Unable to create a copy. Try again.');\n setForking(false);\n\n return;\n }\n\n setForking(false);\n\n if (!response.ok) {\n setForkError('Unable to create a copy. Check your permissions.');\n\n return;\n }\n\n navigate('..', { relative: 'path' });\n }\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-0 fk:min-w-0 fk:flex-col fk:gap-3 fk:pb-3\">\n <SkillPageHeader\n actions={\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Badge variant=\"secondary\">{skill.source === 'plugin' ? 'Plugin' : 'Code'}</Badge>\n {skill.source === 'plugin' && <Button type=\"button\" disabled={forking || !canMutate} onClick={() => void fork()} size=\"sm\">Edit a copy</Button>}\n </div>\n }\n title={skill.name}\n />\n <div className=\"fk:flex fk:flex-col fk:h-full fk:px-4 fk:gap-3 fk:max-w-6xl fk:m-auto\">\n <div className=\"fk:shrink-0 fk:rounded-md fk:border fk:bg-muted/30 fk:px-3 fk:py-2 fk:corner-squircle\">\n <p className=\"fk:text-sm fk:font-medium\">Version-controlled skill</p>\n <p className=\"fk:text-sm fk:text-muted-foreground\">\n {skill.source === 'plugin' ? 'This skill is managed by its plugin. Edit a copy to create a personal Studio skill.' : 'Edit this skill in your repository and re-sync it from the Custom Tools settings.'}\n </p>\n </div>\n <div className=\"fk:grid fk:min-w-0 fk:shrink-0 fk:gap-3 fk:lg:grid-cols-[minmax(0,1fr)_minmax(0,1.6fr)_auto]\">\n <div>\n <FieldHintLabel hint=\"Identifying label for this skill\" htmlFor=\"skill-name\">\n Name\n </FieldHintLabel>\n <Input\n className=\"fk:opacity-100!\"\n disabled={true}\n id=\"skill-name\"\n value={skill.name}\n />\n </div>\n <div>\n <FieldHintLabel\n hint=\"One or two sentences describing when to use this skill. Agents rely on it to decide whether the skill applies to their current task.\"\n htmlFor=\"skill-description\"\n >\n Description\n </FieldHintLabel>\n <Input\n className=\"fk:opacity-100!\"\n disabled={true}\n id=\"skill-description\"\n placeholder=\"e.g. Rules for writing product descriptions in our brand voice\"\n value={skill.description}\n />\n </div>\n <div>\n <FieldHintLabel\n hint=\"Who can see and use this skill. Space skills are only visible to members of the selected space and only usable by automations in that space; personal skills are private to you.\"\n htmlFor=\"skill-visibility\"\n >\n Visibility\n </FieldHintLabel>\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <Select\n disabled={true}\n value={skill.visibility}\n >\n <SelectTrigger aria-label=\"Visibility\" className=\"fk:w-fit fk:min-w-26 fk:opacity-100!\" id=\"skill-visibility\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value=\"project\">Project</SelectItem>\n <SelectItem disabled={!skill.spaceId} value=\"space\">\n Space\n </SelectItem>\n <SelectItem value=\"personal\">Personal</SelectItem>\n </SelectContent>\n </Select>\n {skill.visibility === 'space' ? (\n <Select\n disabled={true}\n value={skill.spaceId ?? ''}\n >\n <SelectTrigger aria-label=\"Space\" className=\"fk:w-fit fk:min-w-34 fk:opacity-100!\">\n <SelectValue placeholder=\"Select a space\" />\n </SelectTrigger>\n <SelectContent align=\"start\">\n <SelectItem value={skill.spaceId ?? ''}>\n {getSkillVisibilityLabel(skill, spaceLabelById)}\n </SelectItem>\n </SelectContent>\n </Select>\n ) : null}\n </div>\n </div>\n </div>\n {forkError && <p role=\"alert\">{forkError}</p>}\n <SkillContentPane content={skill.content} readOnly />\n </div>\n </div>\n );\n}\n\nexport function CreateSkillPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const navigate = useNavigate();\n\n if (!projectId || !api) {\n return <PageMessage>Select a project to create skills.</PageMessage>;\n }\n\n return (\n <SkillForm api={api} mode=\"create\" projectId={projectId} onSaved={() => navigate('..', { relative: 'path' })} />\n );\n}\n\nexport function SkillDetailPage(): JSX.Element {\n const { api, projectId } = useProjectApi();\n const { skillId } = useParams<{ skillId: string }>();\n const { data, error, isLoading, mutate } = useSWR<{ skill: Skill }>(\n projectId && skillId ? paths(projectId).skill(skillId) : null,\n fetcher\n );\n const { data: spacesData } = useSWR<{ spaces: ProjectSpace[] }>(projectId ? paths(projectId).spaces : null, fetcher);\n\n if (!projectId || !api || !skillId) {\n return <PageMessage>Select a skill.</PageMessage>;\n }\n\n if (error) {\n return <PageMessage>Failed to load skill.</PageMessage>;\n }\n\n if (isLoading || !data?.skill) {\n return <SkillDetailSkeleton />;\n }\n\n const spaceLabelById = new Map((spacesData?.spaces ?? []).map((space) => [space.id, space.label]));\n\n if (data.skill.source !== 'studio') {\n return <ReadOnlyCodeSkill projectId={projectId} skill={data.skill} spaceLabelById={spaceLabelById} />;\n }\n\n return (\n <SkillForm\n api={api}\n mode=\"edit\"\n projectId={projectId}\n skill={data.skill}\n onSaved={(skill) => {\n if (skill) {\n void mutate({ skill }, { revalidate: false });\n } else {\n void mutate();\n }\n }}\n />\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import'./index.css';import {la,ma,na,da,ka,ea,ha,ia,fa,ja,oa,f}from'./chunk-QHDL6CA2.js';import {v as v$1,b as b$1}from'./chunk-ODORXGGY.js';import {t}from'./chunk-SZEGGBOC.js';import'./chunk-5DHOBLAE.js';import'./chunk-HDOIOXMP.js';import'./chunk-O2QMYUPS.js';import {useMemo,useId,useState,useEffect}from'react';import {buildSpecFromParts,StateProvider,VisibilityProvider,ActionProvider,Renderer}from'@json-render/react';import {TrendingUpIcon,TrendingDownIcon,MinusIcon,InfoIcon,OctagonAlertIcon,AlertTriangleIcon,LightbulbIcon,XCircleIcon,CheckCircle2Icon}from'lucide-react';import {PieChart,Tooltip,Pie,Cell,LineChart,CartesianGrid,XAxis,YAxis,Line,BarChart,Bar,ResponsiveContainer}from'recharts';import {jsx,jsxs}from'react/jsx-runtime';var ke={sm:"fk:max-w-sm",md:"fk:max-w-md",lg:"fk:max-w-lg",full:"fk:max-w-full"},pe=({children:e,element:t})=>{let{props:n}=t,s=n.maxWidth?ke[n.maxWidth]:"",a=n.centered?"fk:mx-auto":"";return jsxs("div",{className:`fk:w-full fk:rounded-lg fk:border fk:border-border fk:bg-card fk:p-4 fk:gap-2 fk:flex fk:flex-col ${s} ${a} ${n.className??""} fk:corner-squircle`,children:[n.title&&jsx("div",{className:"fk:text-sm fk:font-medium",children:n.title}),n.description&&jsx("div",{className:"fk:mt-0.5 fk:text-xs fk:text-muted-foreground",children:n.description}),(n.title??n.description)&&e?jsx("div",{className:"fk:mt-3"}):null,e]})},me={none:"fk:gap-0",sm:"fk:gap-2",md:"fk:gap-3",lg:"fk:gap-4",xl:"fk:gap-6"},ge={start:"fk:items-start",center:"fk:items-center",end:"fk:items-end",stretch:"fk:items-stretch"},he={start:"fk:justify-start",center:"fk:justify-center",end:"fk:justify-end",between:"fk:justify-between",around:"fk:justify-around"},be=({children:e,element:t})=>{let{props:n}=t,s=n.direction==="horizontal"?"fk:flex-row fk:flex-wrap":"fk:flex-col",a=me[n.gap??"md"],i=n.align?ge[n.align]:"",l=n.justify?he[n.justify]:"";return jsx("div",{className:`fk:flex fk:w-full ${s} ${a} ${i} ${l} ${n.className??""}`,children:e})},ve={1:"fk:grid-cols-1",2:"fk:grid-cols-2",3:"fk:grid-cols-3",4:"fk:grid-cols-4",5:"fk:grid-cols-5",6:"fk:grid-cols-6"},ye={sm:"fk:gap-2",md:"fk:gap-3",lg:"fk:gap-4",xl:"fk:gap-6"},xe=({children:e,element:t})=>{let{props:n}=t,s=ve[n.columns??1]??"fk:grid-cols-1",a=ye[n.gap??"md"];return jsx("div",{className:`fk:grid fk:w-full ${s} ${a} ${n.className??""}`,children:e})},Ce=({element:e})=>jsx(v$1,{orientation:e.props.orientation??"horizontal"}),Pe={h1:"fk:text-xl fk:font-semibold fk:tracking-tight",h2:"fk:text-lg fk:font-semibold fk:tracking-tight",h3:"fk:text-base fk:font-medium",h4:"fk:text-sm fk:font-medium"},we=({element:e})=>{let t=e.props.level??"h2";return jsx(t,{className:Pe[t],children:e.props.text})},Ne={body:"fk:text-sm",muted:"fk:text-sm fk:text-muted-foreground",caption:"fk:text-xs fk:text-muted-foreground",lead:"fk:text-base",code:"fk:rounded fk:bg-muted fk:px-1 fk:py-0.5 fk:font-mono fk:text-xs fk:corner-squircle"},Se=({element:e})=>jsx("p",{className:Ne[e.props.variant??"body"],children:e.props.text}),Te=({element:e})=>jsx(b$1,{variant:e.props.variant??"default",children:e.props.text});function Re({type:e}){switch(e){case "success":return jsx(CheckCircle2Icon,{className:"fk:size-4 fk:translate-y-0.5"});case "warning":return jsx(AlertTriangleIcon,{className:"fk:size-4 fk:translate-y-0.5"});case "error":return jsx(XCircleIcon,{className:"fk:size-4 fk:translate-y-0.5"});default:return jsx(InfoIcon,{className:"fk:size-4 fk:translate-y-0.5"})}}var Ae=({element:e})=>{let{props:t}=e,n=t.type==="error"?"fk:border-destructive/50 fk:text-destructive":"fk:text-foreground";return jsxs("div",{className:`fk:flex fk:w-full fk:gap-3 fk:rounded-lg fk:border fk:bg-card fk:px-4 fk:py-3 fk:text-sm ${n} fk:corner-squircle`,role:"alert",children:[jsx(Re,{type:t.type}),jsxs("div",{className:"fk:min-w-0",children:[jsx("div",{className:"fk:font-medium",children:t.title}),t.message&&jsx("div",{className:"fk:text-muted-foreground",children:t.message})]})]})},Le=({element:e})=>{let t=e.props.columns??[],n=(e.props.rows??[]).map(s=>s.map(String));return jsx("div",{className:"fk:w-full fk:overflow-hidden fk:rounded-md fk:mt-2 fk:corner-squircle",children:jsxs(da,{children:[e.props.caption&&jsx(ka,{children:e.props.caption}),jsx(ea,{children:jsx(ha,{children:t.map((s,a)=>jsx(ia,{children:s},`${a.toString()}-${s}`))})}),jsx(fa,{children:n.map((s,a)=>jsx(ha,{children:s.map((i,l)=>jsx(ja,{children:i},l))},a))})]})})},ze=({element:e})=>{let{props:t}=e,n=t.max??100,s=n>0?Math.min(100,Math.max(0,t.value/n*100)):0;return jsxs("div",{className:"fk:w-full",children:[t.label&&jsxs("div",{className:"fk:mb-1 fk:flex fk:items-center fk:justify-between fk:text-xs fk:text-muted-foreground",children:[jsx("span",{children:t.label}),jsxs("span",{className:"fk:tabular-nums",children:[Math.round(s),"%"]})]}),jsx("div",{className:"fk:h-2 fk:w-full fk:overflow-hidden fk:rounded-full fk:bg-secondary fk:corner-squircle",children:jsx("div",{className:"fk:h-full fk:rounded-full fk:bg-primary fk:corner-squircle",style:{width:`${s.toString()}%`}})})]})},Ke=({element:e})=>jsx(t,{className:e.props.rounded?"fk:rounded-full fk:corner-squircle":"",style:{height:e.props.height??"1rem",width:e.props.width??"100%"}}),Me=({element:e})=>jsx(f,{href:e.props.href,children:e.props.label}),$e=({element:e})=>e.props.src?jsx("img",{alt:e.props.alt,className:"fk:max-w-full fk:rounded-md fk:corner-squircle",height:e.props.height??void 0,src:e.props.src,width:e.props.width??void 0}):null,Ie=({element:e})=>jsx("div",{className:"fk:w-full fk:divide-y fk:divide-border fk:rounded-md fk:border fk:border-border fk:corner-squircle",children:(e.props.items??[]).map((t,n)=>jsxs("details",{className:"fk:group fk:px-4 fk:py-3",children:[jsx("summary",{className:"fk:cursor-pointer fk:list-none fk:text-sm fk:font-medium",children:t.title}),jsx("p",{className:"fk:mt-2 fk:text-sm fk:text-muted-foreground",children:t.content})]},n))}),Ee=({children:e,element:t})=>{let n=t.props.tabs??[];return jsxs(la,{defaultValue:t.props.value??t.props.defaultValue??n[0]?.value,children:[jsx(ma,{children:n.map(s=>jsx(na,{value:s.value,children:s.label},s.value))}),e]})},qe=({children:e,element:t})=>jsx(oa,{value:t.props.value,children:e}),je={up:"fk:text-success",down:"fk:text-destructive",neutral:"fk:text-muted-foreground"};function Be({trend:e}){return e==="up"?jsx(TrendingUpIcon,{className:"fk:size-4"}):e==="down"?jsx(TrendingDownIcon,{className:"fk:size-4"}):jsx(MinusIcon,{className:"fk:size-4"})}var He=({element:e})=>{let{props:t}=e;return jsxs("div",{className:"fk:w-full fk:rounded-lg fk:border fk:border-border fk:bg-card fk:p-4 fk:corner-squircle",children:[jsx("div",{className:"fk:text-xs fk:font-medium fk:text-muted-foreground",children:t.label}),jsxs("div",{className:"fk:mt-1 fk:flex fk:items-center fk:gap-2",children:[jsx("span",{className:"fk:text-2xl fk:font-semibold fk:tabular-nums fk:tracking-tight",children:t.value}),t.trend&&jsx("span",{className:je[t.trend],children:jsx(Be,{trend:t.trend})})]}),t.detail&&jsx("div",{className:"fk:mt-1 fk:text-xs fk:text-muted-foreground",children:t.detail})]})},Je={info:"fk:border-blue-500/30 fk:bg-blue-500/5 fk:text-blue-700 fk:dark:text-blue-400",tip:"fk:border-emerald-500/30 fk:bg-emerald-500/5 fk:text-emerald-700 fk:dark:text-emerald-400",warning:"fk:border-amber-500/30 fk:bg-amber-500/5 fk:text-amber-700 fk:dark:text-amber-400",important:"fk:border-red-500/30 fk:bg-red-500/5 fk:text-red-700 fk:dark:text-red-400"};function Xe({type:e}){switch(e){case "tip":return jsx(LightbulbIcon,{className:"fk:size-4 fk:shrink-0 fk:translate-y-0.5"});case "warning":return jsx(AlertTriangleIcon,{className:"fk:size-4 fk:shrink-0 fk:translate-y-0.5"});case "important":return jsx(OctagonAlertIcon,{className:"fk:size-4 fk:shrink-0 fk:translate-y-0.5"});default:return jsx(InfoIcon,{className:"fk:size-4 fk:shrink-0 fk:translate-y-0.5"})}}var Fe=({element:e})=>{let{props:t}=e,n=t.type??"info";return jsxs("div",{className:`fk:flex fk:w-full fk:gap-3 fk:rounded-lg fk:border fk:px-4 fk:py-3 fk:text-sm ${Je[n]} fk:corner-squircle`,children:[jsx(Xe,{type:n}),jsxs("div",{className:"fk:min-w-0",children:[t.title&&jsx("div",{className:"fk:font-medium",children:t.title}),jsx("div",{className:"fk:text-foreground",children:t.content})]})]})},Oe={completed:"fk:border-success fk:bg-success",current:"fk:border-primary fk:bg-primary",upcoming:"fk:border-border fk:bg-background"},Ge=({element:e})=>jsx("div",{className:"fk:w-full",children:(e.props.items??[]).map((t,n,s)=>jsxs("div",{className:"fk:relative fk:flex fk:gap-3 fk:pb-4 fk:last:pb-0",children:[n<s.length-1&&jsx("div",{className:"fk:absolute fk:left-[5px] fk:top-4 fk:h-full fk:w-px fk:bg-border"}),jsx("div",{className:`fk:mt-1 fk:size-[11px] fk:shrink-0 fk:rounded-full fk:border-2 ${Oe[t.status??"upcoming"]} fk:corner-squircle`}),jsxs("div",{className:"fk:min-w-0",children:[jsxs("div",{className:"fk:flex fk:flex-wrap fk:items-baseline fk:gap-x-2",children:[jsx("span",{className:"fk:text-sm fk:font-medium",children:t.title}),t.date&&jsx("span",{className:"fk:text-xs fk:text-muted-foreground",children:t.date})]}),t.description&&jsx("div",{className:"fk:text-sm fk:text-muted-foreground",children:t.description})]})]},n))}),c=["#6366f1","#10b981","#f59e0b","#ef4444","#06b6d4"],b={background:"hsl(var(--background))",border:"1px solid hsl(var(--border))",borderRadius:6,color:"hsl(var(--foreground))",fontSize:12},v={color:"hsl(var(--foreground))"},y={color:"hsl(var(--foreground))"},u={fill:"hsl(var(--muted-foreground))",fontSize:11};function g(e){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:0}function X(e){let t=e.data??[];if(!e.aggregate)return t.map(s=>({x:String(s[e.xKey]??""),y:g(s[e.yKey])}));let n=new Map;for(let s of t){let a=String(s[e.xKey]??""),i=n.get(a)??{count:0,sum:0};i.count+=1,i.sum+=g(s[e.yKey]),n.set(a,i);}return Array.from(n.entries()).map(([s,a])=>e.aggregate==="count"?{x:s,y:a.count}:e.aggregate==="avg"?{x:s,y:a.count===0?0:a.sum/a.count}:{x:s,y:a.sum})}function x({children:e,height:t,title:n}){return jsxs("div",{className:"fk:w-full",children:[n&&jsx("div",{className:"fk:mb-2 fk:text-sm fk:font-medium",children:n}),jsx("div",{style:{height:t??256},children:jsx(ResponsiveContainer,{height:"100%",width:"100%",children:e})})]})}var We=({element:e})=>{let t=X(e.props),n=e.props.color??c[0];return jsx(x,{height:e.props.height,title:e.props.title,children:jsxs(BarChart,{data:t,children:[jsx(CartesianGrid,{stroke:"hsl(var(--border))",vertical:false}),jsx(XAxis,{axisLine:false,dataKey:"x",tick:u,tickLine:false,tickMargin:8}),jsx(YAxis,{axisLine:false,tick:u,tickLine:false,width:40}),jsx(Tooltip,{contentStyle:b,cursor:{fill:"hsl(var(--muted))"},itemStyle:v,labelStyle:y}),jsx(Bar,{dataKey:"y",fill:n,isAnimationActive:false,name:e.props.yKey,radius:4})]})})},_e=({element:e})=>{let t=X(e.props),n=e.props.color??c[0];return jsx(x,{height:e.props.height,title:e.props.title,children:jsxs(LineChart,{data:t,children:[jsx(CartesianGrid,{stroke:"hsl(var(--border))",vertical:false}),jsx(XAxis,{axisLine:false,dataKey:"x",tick:u,tickLine:false,tickMargin:8}),jsx(YAxis,{axisLine:false,tick:u,tickLine:false,width:40}),jsx(Tooltip,{contentStyle:b,itemStyle:v,labelStyle:y}),jsx(Line,{dataKey:"y",dot:false,isAnimationActive:false,name:e.props.yKey,stroke:n,strokeWidth:2,type:"monotone"})]})})},Ve=({element:e})=>{let t=(e.props.data??[]).map(n=>({name:String(n[e.props.nameKey]??""),value:g(n[e.props.valueKey])}));return jsx(x,{height:e.props.height,title:e.props.title,children:jsxs(PieChart,{children:[jsx(Tooltip,{contentStyle:b,itemStyle:v,labelStyle:y}),jsx(Pie,{data:t,dataKey:"value",innerRadius:"45%",isAnimationActive:false,nameKey:"name",children:t.map((n,s)=>jsx(Cell,{fill:c[s%c.length]},`${n.name}-${s.toString()}`))})]})})},De=({element:e})=>{let{chart:t$1,title:n}=e.props,s=useId().replace(/[^a-zA-Z0-9]/g,""),[a,i]=useState(null),[l,f]=useState(null);return useEffect(()=>{let k=false;return (async()=>{try{let{default:d}=await import('mermaid'),F=document.documentElement.classList.contains("dark");d.initialize({securityLevel:"strict",startOnLoad:!1,theme:F?"dark":"default"});let O=await d.render(`fk-mermaid-${s}`,t$1);k||(i(O.svg),f(null));}catch(d){k||f(d instanceof Error?d.message:"Failed to render the diagram.");}})(),()=>{k=true;}},[t$1,s]),jsxs("div",{className:"fk:w-full fk:rounded-lg fk:border fk:border-border fk:bg-card fk:p-4 fk:corner-squircle",children:[n&&jsx("div",{className:"fk:mb-2 fk:text-sm fk:font-medium",children:n}),l?jsx("pre",{className:"fk:overflow-x-auto fk:whitespace-pre-wrap fk:text-xs fk:text-muted-foreground",children:t$1}):null,!l&&a?jsx("div",{className:"fk:flex fk:justify-center fk:overflow-x-auto",dangerouslySetInnerHTML:{__html:a}}):null,!l&&!a?jsx(t,{className:"fk:h-40 fk:w-full"}):null]})},Ue={Accordion:Ie,Alert:Ae,Badge:Te,BarChart:We,Callout:Fe,Card:pe,Grid:xe,Heading:we,Image:$e,LineChart:_e,Link:Me,Mermaid:De,Metric:He,PieChart:Ve,Progress:ze,Separator:Ce,Skeleton:Ke,Stack:be,TabContent:qe,Table:Le,Tabs:Ee,Text:Se,Timeline:Ge},Ye=({element:e})=>jsxs("div",{className:"fk:rounded-md fk:border fk:border-dashed fk:border-border fk:p-3 fk:text-sm fk:text-muted-foreground fk:corner-squircle",children:["Unsupported component: ",e.type]});function Ze(e,t){let n=new Set,s=[];for(let a of e??[]){let i=String(a);n.has(i)||!t[i]||(n.add(i),s.push(i));}return s}function Qe(e,t){return e.length!==t.length?true:t.some((n,s)=>n!==e[s])}function et(e){if(!e.elements[e.root])return null;let t=false,n={};for(let s of Object.keys(e.elements)){let a=e.elements[s];if(!a)continue;let i=a.children??[],l=Ze(i,e.elements),f=Qe(i,l);f&&(t=true),n[s]=f?{...a,children:l}:a;}return t?{...e,elements:n}:e}var tt="data-spec";function rt(e){let t=new Set,n=[];for(let s of e){if(s.type!==tt)continue;let a=s.data;if(a&&typeof a=="object"&&"type"in a&&a.type==="patch"&&"patch"in a){let i=JSON.stringify(a.patch);if(t.has(i))continue;t.add(i);}n.push(s);}return n}function ft({parts:e}){let t=useMemo(()=>{let s=buildSpecFromParts(rt(e));return s?et(s):null},[e]),n=useMemo(()=>JSON.stringify(t?.state??{}),[t]);return t?jsx(StateProvider,{initialState:t.state,children:jsx(VisibilityProvider,{children:jsx(ActionProvider,{children:jsx(Renderer,{fallback:Ye,registry:Ue,spec:t})})})},n):null}export{ft as RunSpecPart};//# sourceMappingURL=spec-renderer-ZZ3GPVKU.js.map
2
+ //# sourceMappingURL=spec-renderer-ZZ3GPVKU.js.map