@flexkit/studio 0.2.12 → 0.2.14

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 (94) hide show
  1. package/dist/activity-nav-button-7SVTTHBQ.js +2 -0
  2. package/dist/{activity-nav-button-LZESIQL2.js.map → activity-nav-button-7SVTTHBQ.js.map} +1 -1
  3. package/dist/astro.js +1 -1
  4. package/dist/{chat-page-EKOGKEFR.js → chat-page-L427VVVR.js} +3 -3
  5. package/dist/{chat-page-EKOGKEFR.js.map → chat-page-L427VVVR.js.map} +1 -1
  6. package/dist/chunk-2HYQVMP3.js +3 -0
  7. package/dist/chunk-2HYQVMP3.js.map +1 -0
  8. package/dist/chunk-5CVDMZUI.js +3 -0
  9. package/dist/chunk-5CVDMZUI.js.map +1 -0
  10. package/dist/chunk-6YJ3DLIU.js +2 -0
  11. package/dist/{chunk-OFJOZMCR.js.map → chunk-6YJ3DLIU.js.map} +1 -1
  12. package/dist/{chunk-BOXFB6E6.js → chunk-7ELMTFZ4.js} +2 -2
  13. package/dist/{chunk-BOXFB6E6.js.map → chunk-7ELMTFZ4.js.map} +1 -1
  14. package/dist/chunk-ALCK2BJY.js +2 -0
  15. package/dist/chunk-ALCK2BJY.js.map +1 -0
  16. package/dist/chunk-CAZ6EUR2.js +2 -0
  17. package/dist/chunk-CAZ6EUR2.js.map +1 -0
  18. package/dist/chunk-D5WYD5M4.js +2 -0
  19. package/dist/chunk-D5WYD5M4.js.map +1 -0
  20. package/dist/{chunk-2AVINVYN.js → chunk-GFAOY74A.js} +28 -18
  21. package/dist/chunk-MGXG5PWU.js +384 -0
  22. package/dist/chunk-MGXG5PWU.js.map +1 -0
  23. package/dist/{chunk-EWBEPYML.js → chunk-MJVWFANP.js} +3 -3
  24. package/dist/{chunk-EWBEPYML.js.map → chunk-MJVWFANP.js.map} +1 -1
  25. package/dist/chunk-NLRSLQUT.js +3 -0
  26. package/dist/chunk-NLRSLQUT.js.map +1 -0
  27. package/dist/{chunk-F2DHCPWW.js → chunk-P5ZRTZ5Z.js} +2 -2
  28. package/dist/{chunk-F2DHCPWW.js.map → chunk-P5ZRTZ5Z.js.map} +1 -1
  29. package/dist/{chunk-QQSI7BPK.js → chunk-R64ELY3B.js} +3 -3
  30. package/dist/{chunk-QQSI7BPK.js.map → chunk-R64ELY3B.js.map} +1 -1
  31. package/dist/chunk-U5D3EDCY.js +2 -0
  32. package/dist/chunk-U5D3EDCY.js.map +1 -0
  33. package/dist/chunk-W7Z4MY43.js +2 -0
  34. package/dist/{chunk-7IHEL6LU.js.map → chunk-W7Z4MY43.js.map} +1 -1
  35. package/dist/chunk-XWBACTNR.js +3 -0
  36. package/dist/{chunk-C47FNPLK.js.map → chunk-XWBACTNR.js.map} +1 -1
  37. package/dist/chunk-ZZRA4567.js +2 -0
  38. package/dist/{chunk-V64P56OA.js.map → chunk-ZZRA4567.js.map} +1 -1
  39. package/dist/electron.d.ts +103 -0
  40. package/dist/electron.js +131 -0
  41. package/dist/index.css +9 -0
  42. package/dist/index.d.ts +33 -1
  43. package/dist/index.js +9 -9
  44. package/dist/index.js.map +1 -1
  45. package/dist/list-WJLU3K2X.js +2 -0
  46. package/dist/{list-DOTORSUC.js.map → list-WJLU3K2X.js.map} +1 -1
  47. package/dist/nextjs.js +1 -1
  48. package/dist/{pages-ILAXYS2J.js → pages-3EK5GS2T.js} +4 -4
  49. package/dist/{pages-ILAXYS2J.js.map → pages-3EK5GS2T.js.map} +1 -1
  50. package/dist/plugin-pages-PQO22EOE.js +2 -0
  51. package/dist/{plugin-pages-RKJRHKNL.js.map → plugin-pages-PQO22EOE.js.map} +1 -1
  52. package/dist/root-4EALW3G6.js +2 -0
  53. package/dist/{root-RE3ZNXQ3.js.map → root-4EALW3G6.js.map} +1 -1
  54. package/dist/root-BA7BLCFR.js +23 -0
  55. package/dist/root-BA7BLCFR.js.map +1 -0
  56. package/dist/root-YNGCF5QM.js +31 -0
  57. package/dist/{root-JB3NZZNZ.js.map → root-YNGCF5QM.js.map} +1 -1
  58. package/dist/root-ZF62TR5Z.js +2 -0
  59. package/dist/{root-76YQTZUI.js.map → root-ZF62TR5Z.js.map} +1 -1
  60. package/dist/search-QHMCAT7O.js +2 -0
  61. package/dist/{search-WUO6VWKU.js.map → search-QHMCAT7O.js.map} +1 -1
  62. package/dist/skills-pages-HIBSAVOP.js +2 -0
  63. package/dist/{skills-pages-POKCFHOL.js.map → skills-pages-HIBSAVOP.js.map} +1 -1
  64. package/dist/tanstack-start.js +1 -1
  65. package/dist/user-nav-36ACWXOW.js +2 -0
  66. package/dist/{user-nav-DCAHVWN7.js.map → user-nav-36ACWXOW.js.map} +1 -1
  67. package/package.json +10 -6
  68. package/dist/activity-nav-button-LZESIQL2.js +0 -2
  69. package/dist/chunk-2HSIWUH3.js +0 -3
  70. package/dist/chunk-2HSIWUH3.js.map +0 -1
  71. package/dist/chunk-6YOVF2AD.js +0 -384
  72. package/dist/chunk-6YOVF2AD.js.map +0 -1
  73. package/dist/chunk-7IHEL6LU.js +0 -2
  74. package/dist/chunk-ACS3TGGP.js +0 -2
  75. package/dist/chunk-ACS3TGGP.js.map +0 -1
  76. package/dist/chunk-C47FNPLK.js +0 -3
  77. package/dist/chunk-HYSTMQD7.js +0 -2
  78. package/dist/chunk-HYSTMQD7.js.map +0 -1
  79. package/dist/chunk-KXAGLQ2B.js +0 -2
  80. package/dist/chunk-KXAGLQ2B.js.map +0 -1
  81. package/dist/chunk-OFJOZMCR.js +0 -2
  82. package/dist/chunk-TYDYAOQ7.js +0 -3
  83. package/dist/chunk-TYDYAOQ7.js.map +0 -1
  84. package/dist/chunk-V64P56OA.js +0 -2
  85. package/dist/list-DOTORSUC.js +0 -2
  86. package/dist/plugin-pages-RKJRHKNL.js +0 -2
  87. package/dist/root-76YQTZUI.js +0 -2
  88. package/dist/root-A4VHAEK5.js +0 -23
  89. package/dist/root-A4VHAEK5.js.map +0 -1
  90. package/dist/root-JB3NZZNZ.js +0 -31
  91. package/dist/root-RE3ZNXQ3.js +0 -2
  92. package/dist/search-WUO6VWKU.js +0 -2
  93. package/dist/skills-pages-POKCFHOL.js +0 -2
  94. package/dist/user-nav-DCAHVWN7.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-POKCFHOL.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-HIBSAVOP.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,6 +1,6 @@
1
1
  import {
2
2
  handleFlexkitRequest
3
- } from "./chunk-2AVINVYN.js";
3
+ } from "./chunk-GFAOY74A.js";
4
4
 
5
5
  // src/auth/tanstack-start-api.ts
6
6
  function getCookieValue(cookieHeader, name) {
@@ -0,0 +1,2 @@
1
+ import'./index.css';import {g}from'./chunk-2HYQVMP3.js';import'./chunk-5CVDMZUI.js';import {t,e,g as g$1,a,b as b$2,c,h,n,o,k,j,p}from'./chunk-SZEGGBOC.js';import {b}from'./chunk-U45E5X3H.js';import {b as b$1}from'./chunk-6NRQMG26.js';import'./chunk-O2QMYUPS.js';import v from'boring-avatars';import {Monitor,Moon,Sun}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';var A=["#06d9b6","#a4f479","#d4d323","#fb468f","#0ec4f1"];function F({projectId:D}){let{theme:r,setTheme:t$1}=b(),[C,n$1]=g();return C?jsx(t,{className:"fk:h-8 fk:w-8 fk:rounded-full"}):jsxs(e,{children:[jsx(g$1,{asChild:true,children:jsx(b$1,{className:"fk:relative fk:h-8 fk:w-8 fk:rounded-full",variant:"ghost",children:jsxs(a,{className:"fk:h-8 fk:w-8",children:[n$1.user?.avatar_url?jsx(b$2,{alt:n$1.user.display_name,src:n$1.user.avatar_url}):null,jsx(c,{className:"fk:bg-transparent",children:jsx(v,{className:"fk:size-8",colors:A,name:n$1.user?.id??"user",size:32,variant:"marble"})})]})})}),jsxs(h,{align:"end",className:"fk:w-56",forceMount:true,children:[jsx(n,{className:"font-normal",children:jsxs("div",{className:"fk:flex fk:flex-col fk:space-y-1",children:[jsx("p",{className:"fk:text-sm fk:font-medium fk:leading-none",children:n$1.user?.display_name}),jsx("p",{className:"fk:text-xs fk:leading-none fk:text-muted-foreground",children:n$1.user?.email})]})}),jsx(o,{}),jsx(n,{children:"Theme"}),jsxs(k,{checked:r==="system",onCheckedChange:()=>{t$1("system");},children:[jsx(Monitor,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"System"})]}),jsxs(k,{checked:r==="dark",onCheckedChange:()=>{t$1("dark");},children:[jsx(Moon,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Dark"})]}),jsxs(k,{checked:r==="light",onCheckedChange:()=>{t$1("light");},children:[jsx(Sun,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Light"})]}),jsx(o,{}),jsxs(j,{onClick:()=>{n$1.logout(D).then(()=>{}).catch(()=>{});},children:["Log out",jsx(p,{children:"\u21E7\u2318Q"})]})]})]})}export{F as UserNav};//# sourceMappingURL=user-nav-36ACWXOW.js.map
2
+ //# sourceMappingURL=user-nav-36ACWXOW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/components/user-nav.tsx"],"names":["AVATAR_COLORS","UserNav","projectId","theme","setTheme","useTheme","isLoading","auth","useAuth","jsx","Skeleton","jsxs","DropdownMenu","DropdownMenuTrigger","Button","Avatar","AvatarImage","AvatarFallback","BoringAvatar","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","Monitor","Moon","Sun","DropdownMenuItem","DropdownMenuShortcut"],"mappings":"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","file":"user-nav-DCAHVWN7.js","sourcesContent":["import type { JSX } from 'react';\nimport BoringAvatar from 'boring-avatars';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { useTheme } from '../theme-context';\nimport { Avatar, AvatarFallback, AvatarImage } from '../primitives/avatar';\nimport { Button } from '../primitives/button';\nimport { Skeleton } from '../primitives/skeleton';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '../primitives/dropdown-menu';\nimport { useAuth } from '../../auth/auth-context';\n\nconst AVATAR_COLORS = ['#06d9b6', '#a4f479', '#d4d323', '#fb468f', '#0ec4f1'];\n\ntype Props = {\n projectId: string;\n};\n\nexport function UserNav({ projectId }: Props): JSX.Element {\n const { theme, setTheme } = useTheme();\n const [isLoading, auth] = useAuth();\n\n if (isLoading) {\n return <Skeleton className=\"fk:h-8 fk:w-8 fk:rounded-full\" />;\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:relative fk:h-8 fk:w-8 fk:rounded-full\" variant=\"ghost\">\n <Avatar className=\"fk:h-8 fk:w-8\">\n {auth.user?.avatar_url ? <AvatarImage alt={auth.user.display_name} src={auth.user.avatar_url} /> : null}\n <AvatarFallback className=\"fk:bg-transparent\">\n <BoringAvatar\n className=\"fk:size-8\"\n colors={AVATAR_COLORS}\n name={auth.user?.id ?? 'user'}\n size={32}\n variant=\"marble\"\n />\n </AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-56\" forceMount>\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"fk:flex fk:flex-col fk:space-y-1\">\n <p className=\"fk:text-sm fk:font-medium fk:leading-none\">{auth.user?.display_name}</p>\n <p className=\"fk:text-xs fk:leading-none fk:text-muted-foreground\">{auth.user?.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Theme</DropdownMenuLabel>\n <DropdownMenuCheckboxItem\n checked={theme === 'system'}\n onCheckedChange={() => {\n setTheme('system');\n }}\n >\n <Monitor className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>System</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'dark'}\n onCheckedChange={() => {\n setTheme('dark');\n }}\n >\n <Moon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Dark</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'light'}\n onCheckedChange={() => {\n setTheme('light');\n }}\n >\n <Sun className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Light</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => {\n auth\n .logout(projectId)\n .then(() => {\n //\n })\n .catch(() => {\n //\n });\n }}\n >\n Log out\n <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/ui/components/user-nav.tsx"],"names":["AVATAR_COLORS","UserNav","projectId","theme","setTheme","useTheme","isLoading","auth","useAuth","jsx","Skeleton","jsxs","DropdownMenu","DropdownMenuTrigger","Button","Avatar","AvatarImage","AvatarFallback","BoringAvatar","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","Monitor","Moon","Sun","DropdownMenuItem","DropdownMenuShortcut"],"mappings":"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","file":"user-nav-36ACWXOW.js","sourcesContent":["import type { JSX } from 'react';\nimport BoringAvatar from 'boring-avatars';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { useTheme } from '../theme-context';\nimport { Avatar, AvatarFallback, AvatarImage } from '../primitives/avatar';\nimport { Button } from '../primitives/button';\nimport { Skeleton } from '../primitives/skeleton';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '../primitives/dropdown-menu';\nimport { useAuth } from '../../auth/auth-context';\n\nconst AVATAR_COLORS = ['#06d9b6', '#a4f479', '#d4d323', '#fb468f', '#0ec4f1'];\n\ntype Props = {\n projectId: string;\n};\n\nexport function UserNav({ projectId }: Props): JSX.Element {\n const { theme, setTheme } = useTheme();\n const [isLoading, auth] = useAuth();\n\n if (isLoading) {\n return <Skeleton className=\"fk:h-8 fk:w-8 fk:rounded-full\" />;\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:relative fk:h-8 fk:w-8 fk:rounded-full\" variant=\"ghost\">\n <Avatar className=\"fk:h-8 fk:w-8\">\n {auth.user?.avatar_url ? <AvatarImage alt={auth.user.display_name} src={auth.user.avatar_url} /> : null}\n <AvatarFallback className=\"fk:bg-transparent\">\n <BoringAvatar\n className=\"fk:size-8\"\n colors={AVATAR_COLORS}\n name={auth.user?.id ?? 'user'}\n size={32}\n variant=\"marble\"\n />\n </AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-56\" forceMount>\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"fk:flex fk:flex-col fk:space-y-1\">\n <p className=\"fk:text-sm fk:font-medium fk:leading-none\">{auth.user?.display_name}</p>\n <p className=\"fk:text-xs fk:leading-none fk:text-muted-foreground\">{auth.user?.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Theme</DropdownMenuLabel>\n <DropdownMenuCheckboxItem\n checked={theme === 'system'}\n onCheckedChange={() => {\n setTheme('system');\n }}\n >\n <Monitor className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>System</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'dark'}\n onCheckedChange={() => {\n setTheme('dark');\n }}\n >\n <Moon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Dark</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'light'}\n onCheckedChange={() => {\n setTheme('light');\n }}\n >\n <Sun className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Light</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => {\n auth\n .logout(projectId)\n .then(() => {\n //\n })\n .catch(() => {\n //\n });\n }}\n >\n Log out\n <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flexkit/studio",
3
- "version": "0.2.12",
3
+ "version": "0.2.14",
4
4
  "description": "Flexkit Studio - Build custom internal tools like PIMs, CRMs, and ERPs with a flexible React UI and a graph-backed API",
5
5
  "keywords": [
6
6
  "flexkit",
@@ -28,6 +28,7 @@
28
28
  "./nextjs": "./dist/nextjs.js",
29
29
  "./astro": "./dist/astro.js",
30
30
  "./tanstack-start": "./dist/tanstack-start.js",
31
+ "./electron": "./dist/electron.js",
31
32
  "./icons": "./dist/icons.js",
32
33
  "./ui": "./dist/ui.js",
33
34
  "./tailwind.config": "./tailwind.config.ts",
@@ -44,6 +45,9 @@
44
45
  "tanstack-start": [
45
46
  "./dist/tanstack-start.d.ts"
46
47
  ],
48
+ "electron": [
49
+ "./dist/electron.d.ts"
50
+ ],
47
51
  "icons": [
48
52
  "./dist/icons.d.ts"
49
53
  ]
@@ -157,8 +161,8 @@
157
161
  "uuid": "^9.0.1",
158
162
  "vaul": "1.1.2",
159
163
  "zod": "4.4.3",
160
- "@flexkit/schema": "0.2.12",
161
- "@flexkit/agent-protocol": "^0.3.9"
164
+ "@flexkit/agent-protocol": "^0.3.9",
165
+ "@flexkit/schema": "0.2.14"
162
166
  },
163
167
  "peerDependencies": {
164
168
  "react": "^19.0.0",
@@ -179,13 +183,13 @@
179
183
  "node": ">=20.9.0"
180
184
  },
181
185
  "scripts": {
182
- "build": "tailwindcss -i ./src/styles.css -o dist/index.css && tsup --config tsup.config.ts && tsup src/nextjs.ts src/astro.ts src/tanstack-start.ts --format esm --dts --external react --external react-dom --no-config",
183
- "dev": "tailwindcss -i ./src/styles.css -o ./dist/index.css --watch=always & tsup --config tsup.config.ts --watch & tsup src/nextjs.ts src/astro.ts src/tanstack-start.ts --format esm --dts --external react --external react-dom --no-config --watch",
186
+ "build": "tailwindcss -i ./src/styles.css -o dist/index.css && tsup --config tsup.config.ts && tsup src/nextjs.ts src/astro.ts src/tanstack-start.ts src/electron.ts --format esm --dts --external react --external react-dom --no-config",
187
+ "dev": "tailwindcss -i ./src/styles.css -o ./dist/index.css --watch=always & tsup --config tsup.config.ts --watch & tsup src/nextjs.ts src/astro.ts src/tanstack-start.ts src/electron.ts --format esm --dts --external react --external react-dom --no-config --watch",
184
188
  "lint": "eslint \"src/**/*.ts*\"",
185
189
  "test:performance": "tsup --config tests/performance.config.ts && node --test build/tests/list-performance.test.js build/tests/editor-preview.test.js",
186
190
  "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
187
191
  "ui:add": "pnpm dlx shadcn@latest add",
188
- "test:core": "tsup --config tests/core.config.ts && node --test build/tests/json-schema-to-zod.test.js build/tests/icon-name.test.js build/tests/project-schemas.test.js build/tests/rating-preview.test.js build/tests/last-project.test.js build/tests/proxy-target.test.js build/tests/project-label.test.js build/tests/hosted-session.test.js build/tests/bff-session.test.js build/tests/project-schema-key.test.js build/tests/schema-deploy-watch.test.js build/tests/app-sessions.test.js",
192
+ "test:core": "tsup --config tests/core.config.ts && node --test build/tests/json-schema-to-zod.test.js build/tests/icon-name.test.js build/tests/project-schemas.test.js build/tests/rating-preview.test.js build/tests/last-project.test.js build/tests/proxy-target.test.js build/tests/project-label.test.js build/tests/hosted-session.test.js build/tests/bff-session.test.js build/tests/project-schema-key.test.js build/tests/schema-deploy-watch.test.js build/tests/app-sessions.test.js build/tests/electron-api.test.js",
189
193
  "test:ai": "tsup --config tests/ai.config.ts && node --test build/tests/ai/*.test.js",
190
194
  "test": "pnpm run test:core && pnpm run test:ai && pnpm run test:performance"
191
195
  }
@@ -1,2 +0,0 @@
1
- import'./index.css';export{b as ActivityNavButton,a as useActivitySummary}from'./chunk-HYSTMQD7.js';import'./chunk-2HSIWUH3.js';import'./chunk-USNXQOMJ.js';import'./chunk-6NRQMG26.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=activity-nav-button-LZESIQL2.js.map
2
- //# sourceMappingURL=activity-nav-button-LZESIQL2.js.map