@particle-academy/fancy-code 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/CodeEditor/CodeEditor.context.ts","../src/components/CodeEditor/CodeEditorPanel.tsx","../src/components/CodeEditor/CodeEditorToolbarSeparator.tsx","../src/languages/registry.ts","../src/languages/builtin.ts","../src/components/CodeEditor/CodeEditorToolbar.tsx","../src/components/CodeEditor/CodeEditorStatusBar.tsx","../src/themes/registry.ts","../src/themes/light.ts","../src/themes/dark.ts","../src/hooks/use-codemirror.ts","../src/hooks/use-dark-mode.ts","../src/components/CodeEditor/CodeEditor.tsx"],"names":["jsx","cn","jsxs","Fragment","editorTheme","EditorView","highlightStyle","HighlightStyle","tags","lineNumbers","placeholder","lineNumbersExt","placeholderExt","useState","useRef"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CodeEditorContextValue } from \"./CodeEditor.types\";\n\nexport const CodeEditorContext = createContext<CodeEditorContextValue | null>(null);\n\nexport function useCodeEditor(): CodeEditorContextValue {\n const ctx = useContext(CodeEditorContext);\n if (!ctx) {\n throw new Error(\"useCodeEditor must be used within a <CodeEditor> component\");\n }\n return ctx;\n}\n","import { cn } from \"@particle-academy/react-fancy\";\nimport { useCodeEditor } from \"./CodeEditor.context\";\nimport type { CodeEditorPanelProps } from \"./CodeEditor.types\";\n\nexport function CodeEditorPanel({ className }: CodeEditorPanelProps) {\n const { _containerRef } = useCodeEditor();\n\n return (\n <div\n data-fancy-code-panel=\"\"\n ref={_containerRef}\n className={cn(\"text-sm\", className)}\n />\n );\n}\n\nCodeEditorPanel.displayName = \"CodeEditorPanel\";\n","export function CodeEditorToolbarSeparator() {\n return (\n <div\n data-fancy-code-toolbar-separator=\"\"\n className=\"mx-1 h-4 w-px bg-zinc-200 dark:bg-zinc-700\"\n />\n );\n}\n\nCodeEditorToolbarSeparator.displayName = \"CodeEditorToolbarSeparator\";\n","import type { LanguageDefinition } from \"./types\";\n\nconst languageRegistry = new Map<string, LanguageDefinition>();\n\nexport function registerLanguage(def: LanguageDefinition): void {\n languageRegistry.set(def.name.toLowerCase(), def);\n if (def.aliases) {\n for (const alias of def.aliases) {\n languageRegistry.set(alias.toLowerCase(), def);\n }\n }\n}\n\nexport function getLanguage(name: string): LanguageDefinition | undefined {\n return languageRegistry.get(name.toLowerCase());\n}\n\nexport function getRegisteredLanguages(): string[] {\n const seen = new Set<LanguageDefinition>();\n const names: string[] = [];\n for (const [, def] of languageRegistry) {\n if (!seen.has(def)) {\n seen.add(def);\n names.push(def.name);\n }\n }\n return names;\n}\n","import { javascript } from \"@codemirror/lang-javascript\";\nimport { html } from \"@codemirror/lang-html\";\nimport { php } from \"@codemirror/lang-php\";\nimport { registerLanguage } from \"./registry\";\n\nregisterLanguage({\n name: \"JavaScript\",\n aliases: [\"js\", \"javascript\", \"jsx\"],\n support: () => javascript({ jsx: true }),\n});\n\nregisterLanguage({\n name: \"TypeScript\",\n aliases: [\"ts\", \"typescript\", \"tsx\"],\n support: () => javascript({ typescript: true, jsx: true }),\n});\n\nregisterLanguage({\n name: \"HTML\",\n aliases: [\"html\", \"htm\"],\n support: () => html(),\n});\n\nregisterLanguage({\n name: \"PHP\",\n aliases: [\"php\"],\n support: () => php(),\n});\n","import { useState } from \"react\";\nimport { cn } from \"@particle-academy/react-fancy\";\nimport { useCodeEditor } from \"./CodeEditor.context\";\nimport { CodeEditorToolbarSeparator } from \"./CodeEditorToolbarSeparator\";\nimport { getRegisteredLanguages } from \"../../languages\";\nimport type { CodeEditorToolbarProps } from \"./CodeEditor.types\";\n\nconst iconBtnClass =\n \"inline-flex items-center justify-center rounded-md p-1 text-zinc-500 transition-colors hover:bg-zinc-100 hover:text-zinc-700 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-200\";\n\nfunction LanguageSelector() {\n const { language, setLanguage } = useCodeEditor();\n const languages = getRegisteredLanguages();\n\n return (\n <select\n value={language}\n onChange={(e) => setLanguage(e.target.value)}\n className=\"h-6 rounded border border-zinc-200 bg-transparent px-1.5 text-[11px] text-zinc-600 outline-none transition-colors hover:border-zinc-300 dark:border-zinc-700 dark:text-zinc-400 dark:hover:border-zinc-600\"\n >\n {languages.map((lang) => (\n <option key={lang} value={lang}>\n {lang}\n </option>\n ))}\n </select>\n );\n}\n\nfunction DefaultToolbarActions() {\n const { copyToClipboard, toggleWordWrap, wordWrap } = useCodeEditor();\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n await copyToClipboard();\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n\n return (\n <>\n <LanguageSelector />\n <CodeEditorToolbarSeparator />\n <button\n type=\"button\"\n onClick={toggleWordWrap}\n title={wordWrap ? \"Disable Word Wrap\" : \"Enable Word Wrap\"}\n className={cn(iconBtnClass, wordWrap && \"text-blue-500 dark:text-blue-400\")}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <path d=\"M3 12h15a3 3 0 110 6h-4\" />\n <polyline points=\"16 16 14 18 16 20\" />\n <line x1=\"3\" y1=\"18\" x2=\"10\" y2=\"18\" />\n </svg>\n </button>\n <button type=\"button\" onClick={handleCopy} title=\"Copy to Clipboard\" className={iconBtnClass}>\n {copied ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n )}\n </button>\n </>\n );\n}\n\nexport function CodeEditorToolbar({ children, className }: CodeEditorToolbarProps) {\n const hasChildren = children != null;\n\n return (\n <div\n data-fancy-code-toolbar=\"\"\n className={cn(\n \"flex items-center gap-0.5 border-b border-zinc-200 px-2 py-1 dark:border-zinc-700\",\n className,\n )}\n >\n {hasChildren ? children : <DefaultToolbarActions />}\n </div>\n );\n}\n\nCodeEditorToolbar.displayName = \"CodeEditorToolbar\";\n","import { cn } from \"@particle-academy/react-fancy\";\nimport { useCodeEditor } from \"./CodeEditor.context\";\nimport type { CodeEditorStatusBarProps } from \"./CodeEditor.types\";\n\nexport function CodeEditorStatusBar({ children, className }: CodeEditorStatusBarProps) {\n const { cursorPosition, selectionLength, language, tabSize } = useCodeEditor();\n\n return (\n <div\n data-fancy-code-statusbar=\"\"\n className={cn(\n \"flex items-center gap-3 border-t border-zinc-200 px-3 py-1 text-[11px] text-zinc-500 dark:border-zinc-700 dark:text-zinc-400\",\n className,\n )}\n >\n {children ?? (\n <>\n <span>Ln {cursorPosition.line}, Col {cursorPosition.col}</span>\n {selectionLength > 0 && <span>{selectionLength} selected</span>}\n <span className=\"ml-auto\">{language}</span>\n <span>{tabSize} spaces</span>\n </>\n )}\n </div>\n );\n}\n\nCodeEditorStatusBar.displayName = \"CodeEditorStatusBar\";\n","import type { ThemeDefinition } from \"./types\";\n\nconst themeRegistry = new Map<string, ThemeDefinition>();\n\nexport function registerTheme(theme: ThemeDefinition): void {\n themeRegistry.set(theme.name.toLowerCase(), theme);\n}\n\nexport function getTheme(name: string): ThemeDefinition | undefined {\n return themeRegistry.get(name.toLowerCase());\n}\n\nexport function getRegisteredThemes(): string[] {\n return Array.from(themeRegistry.keys());\n}\n","import { EditorView } from \"@codemirror/view\";\nimport { HighlightStyle } from \"@codemirror/language\";\nimport { tags } from \"@lezer/highlight\";\nimport { registerTheme } from \"./registry\";\n\nconst editorTheme = EditorView.theme(\n {\n \"&\": {\n backgroundColor: \"#ffffff\",\n color: \"#1e1e2e\",\n },\n \".cm-content\": {\n caretColor: \"#3b82f6\",\n },\n \".cm-cursor, .cm-dropCursor\": {\n borderLeftColor: \"#3b82f6\",\n },\n \"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection\": {\n backgroundColor: \"#dbeafe\",\n },\n \".cm-activeLine\": {\n backgroundColor: \"#f8fafc\",\n },\n \".cm-gutters\": {\n backgroundColor: \"#f8fafc\",\n color: \"#94a3b8\",\n borderRight: \"1px solid #e2e8f0\",\n },\n \".cm-activeLineGutter\": {\n backgroundColor: \"#f1f5f9\",\n color: \"#475569\",\n },\n \".cm-foldPlaceholder\": {\n backgroundColor: \"#e2e8f0\",\n color: \"#64748b\",\n border: \"none\",\n },\n \".cm-tooltip\": {\n backgroundColor: \"#ffffff\",\n border: \"1px solid #e2e8f0\",\n },\n \".cm-tooltip .cm-tooltip-arrow:before\": {\n borderTopColor: \"#e2e8f0\",\n borderBottomColor: \"#e2e8f0\",\n },\n \".cm-tooltip .cm-tooltip-arrow:after\": {\n borderTopColor: \"#ffffff\",\n borderBottomColor: \"#ffffff\",\n },\n \".cm-tooltip-autocomplete\": {\n \"& > ul > li[aria-selected]\": {\n backgroundColor: \"#dbeafe\",\n color: \"#1e40af\",\n },\n },\n \".cm-searchMatch\": {\n backgroundColor: \"#fef08a\",\n outline: \"1px solid #facc15\",\n },\n \".cm-searchMatch.cm-searchMatch-selected\": {\n backgroundColor: \"#bbf7d0\",\n outline: \"1px solid #22c55e\",\n },\n \".cm-selectionMatch\": {\n backgroundColor: \"#e0f2fe\",\n },\n \".cm-matchingBracket, .cm-nonmatchingBracket\": {\n outline: \"1px solid #94a3b8\",\n },\n \".cm-matchingBracket\": {\n backgroundColor: \"#e0f2fe\",\n },\n },\n { dark: false },\n);\n\nconst highlightStyle = HighlightStyle.define([\n { tag: tags.keyword, color: \"#8b5cf6\" },\n { tag: [tags.name, tags.deleted, tags.character, tags.macroName], color: \"#1e1e2e\" },\n { tag: [tags.function(tags.variableName), tags.labelName], color: \"#2563eb\" },\n { tag: [tags.color, tags.constant(tags.name), tags.standard(tags.name)], color: \"#d97706\" },\n { tag: [tags.definition(tags.name), tags.separator], color: \"#1e1e2e\" },\n { tag: [tags.typeName, tags.className, tags.number, tags.changed, tags.annotation, tags.modifier, tags.self, tags.namespace], color: \"#d97706\" },\n { tag: [tags.operator, tags.operatorKeyword, tags.url, tags.escape, tags.regexp, tags.link, tags.special(tags.string)], color: \"#0891b2\" },\n { tag: [tags.meta, tags.comment], color: \"#94a3b8\", fontStyle: \"italic\" },\n { tag: tags.strong, fontWeight: \"bold\" },\n { tag: tags.emphasis, fontStyle: \"italic\" },\n { tag: tags.strikethrough, textDecoration: \"line-through\" },\n { tag: tags.link, color: \"#2563eb\", textDecoration: \"underline\" },\n { tag: tags.heading, fontWeight: \"bold\", color: \"#8b5cf6\" },\n { tag: [tags.atom, tags.bool, tags.special(tags.variableName)], color: \"#d97706\" },\n { tag: [tags.processingInstruction, tags.string, tags.inserted], color: \"#059669\" },\n { tag: tags.invalid, color: \"#ef4444\" },\n { tag: tags.tagName, color: \"#dc2626\" },\n { tag: tags.attributeName, color: \"#d97706\" },\n { tag: tags.attributeValue, color: \"#059669\" },\n]);\n\nregisterTheme({\n name: \"light\",\n variant: \"light\",\n editorTheme,\n highlightStyle,\n});\n","import { EditorView } from \"@codemirror/view\";\nimport { HighlightStyle } from \"@codemirror/language\";\nimport { tags } from \"@lezer/highlight\";\nimport { registerTheme } from \"./registry\";\n\nconst editorTheme = EditorView.theme(\n {\n \"&\": {\n backgroundColor: \"#18181b\",\n color: \"#e4e4e7\",\n },\n \".cm-content\": {\n caretColor: \"#60a5fa\",\n },\n \".cm-cursor, .cm-dropCursor\": {\n borderLeftColor: \"#60a5fa\",\n },\n \"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection\": {\n backgroundColor: \"#1e3a5f\",\n },\n \".cm-activeLine\": {\n backgroundColor: \"#27272a\",\n },\n \".cm-gutters\": {\n backgroundColor: \"#18181b\",\n color: \"#52525b\",\n borderRight: \"1px solid #27272a\",\n },\n \".cm-activeLineGutter\": {\n backgroundColor: \"#27272a\",\n color: \"#a1a1aa\",\n },\n \".cm-foldPlaceholder\": {\n backgroundColor: \"#3f3f46\",\n color: \"#a1a1aa\",\n border: \"none\",\n },\n \".cm-tooltip\": {\n backgroundColor: \"#27272a\",\n border: \"1px solid #3f3f46\",\n color: \"#e4e4e7\",\n },\n \".cm-tooltip .cm-tooltip-arrow:before\": {\n borderTopColor: \"#3f3f46\",\n borderBottomColor: \"#3f3f46\",\n },\n \".cm-tooltip .cm-tooltip-arrow:after\": {\n borderTopColor: \"#27272a\",\n borderBottomColor: \"#27272a\",\n },\n \".cm-tooltip-autocomplete\": {\n \"& > ul > li[aria-selected]\": {\n backgroundColor: \"#1e3a5f\",\n color: \"#93c5fd\",\n },\n },\n \".cm-searchMatch\": {\n backgroundColor: \"#854d0e\",\n outline: \"1px solid #a16207\",\n },\n \".cm-searchMatch.cm-searchMatch-selected\": {\n backgroundColor: \"#166534\",\n outline: \"1px solid #15803d\",\n },\n \".cm-selectionMatch\": {\n backgroundColor: \"#1e3a5f\",\n },\n \".cm-matchingBracket, .cm-nonmatchingBracket\": {\n outline: \"1px solid #71717a\",\n },\n \".cm-matchingBracket\": {\n backgroundColor: \"#3f3f46\",\n },\n },\n { dark: true },\n);\n\nconst highlightStyle = HighlightStyle.define([\n { tag: tags.keyword, color: \"#c084fc\" },\n { tag: [tags.name, tags.deleted, tags.character, tags.macroName], color: \"#e4e4e7\" },\n { tag: [tags.function(tags.variableName), tags.labelName], color: \"#60a5fa\" },\n { tag: [tags.color, tags.constant(tags.name), tags.standard(tags.name)], color: \"#fbbf24\" },\n { tag: [tags.definition(tags.name), tags.separator], color: \"#e4e4e7\" },\n { tag: [tags.typeName, tags.className, tags.number, tags.changed, tags.annotation, tags.modifier, tags.self, tags.namespace], color: \"#fbbf24\" },\n { tag: [tags.operator, tags.operatorKeyword, tags.url, tags.escape, tags.regexp, tags.link, tags.special(tags.string)], color: \"#22d3ee\" },\n { tag: [tags.meta, tags.comment], color: \"#71717a\", fontStyle: \"italic\" },\n { tag: tags.strong, fontWeight: \"bold\" },\n { tag: tags.emphasis, fontStyle: \"italic\" },\n { tag: tags.strikethrough, textDecoration: \"line-through\" },\n { tag: tags.link, color: \"#60a5fa\", textDecoration: \"underline\" },\n { tag: tags.heading, fontWeight: \"bold\", color: \"#c084fc\" },\n { tag: [tags.atom, tags.bool, tags.special(tags.variableName)], color: \"#fbbf24\" },\n { tag: [tags.processingInstruction, tags.string, tags.inserted], color: \"#34d399\" },\n { tag: tags.invalid, color: \"#f87171\" },\n { tag: tags.tagName, color: \"#f87171\" },\n { tag: tags.attributeName, color: \"#fbbf24\" },\n { tag: tags.attributeValue, color: \"#34d399\" },\n]);\n\nregisterTheme({\n name: \"dark\",\n variant: \"dark\",\n editorTheme,\n highlightStyle,\n});\n","import { useEffect, useRef, type RefObject } from \"react\";\nimport { EditorState, Compartment, type Extension } from \"@codemirror/state\";\nimport { EditorView, keymap, lineNumbers as lineNumbersExt, highlightActiveLine, highlightActiveLineGutter, drawSelection, dropCursor, placeholder as placeholderExt } from \"@codemirror/view\";\nimport { defaultKeymap, history, historyKeymap, indentWithTab } from \"@codemirror/commands\";\nimport { syntaxHighlighting, indentOnInput, bracketMatching, foldGutter, foldKeymap } from \"@codemirror/language\";\nimport { searchKeymap, highlightSelectionMatches } from \"@codemirror/search\";\nimport { autocompletion, completionKeymap, closeBrackets, closeBracketsKeymap } from \"@codemirror/autocomplete\";\nimport { getLanguage } from \"../languages\";\nimport { getTheme } from \"../themes\";\n\nexport interface UseCodemirrorOptions {\n containerRef: RefObject<HTMLDivElement | null>;\n value: string;\n onChange?: (value: string) => void;\n language: string;\n theme: string;\n readOnly: boolean;\n lineNumbers: boolean;\n wordWrap: boolean;\n tabSize: number;\n placeholder?: string;\n minHeight?: number;\n maxHeight?: number;\n searchEnabled: boolean;\n additionalExtensions?: Extension[];\n onCursorChange?: (pos: { line: number; col: number; selectionLength: number }) => void;\n}\n\nexport interface UseCodemirrorReturn {\n view: EditorView | null;\n}\n\nfunction resolveLanguageExtension(name: string): Extension {\n const def = getLanguage(name);\n if (!def) return [];\n const result = def.support();\n if (result instanceof Promise) {\n // Async languages are not supported in the initial render; return empty\n return [];\n }\n return result;\n}\n\nfunction resolveThemeExtensions(name: string): Extension[] {\n const def = getTheme(name);\n if (!def) {\n const fallback = getTheme(\"dark\");\n if (!fallback) return [];\n return [fallback.editorTheme, syntaxHighlighting(fallback.highlightStyle)];\n }\n return [def.editorTheme, syntaxHighlighting(def.highlightStyle)];\n}\n\nexport function useCodemirror({\n containerRef,\n value,\n onChange,\n language,\n theme,\n readOnly,\n lineNumbers,\n wordWrap,\n tabSize,\n placeholder,\n minHeight,\n maxHeight,\n searchEnabled,\n additionalExtensions,\n onCursorChange,\n}: UseCodemirrorOptions): UseCodemirrorReturn {\n const viewRef = useRef<EditorView | null>(null);\n const isExternalUpdate = useRef(false);\n const onChangeRef = useRef(onChange);\n const onCursorChangeRef = useRef(onCursorChange);\n onChangeRef.current = onChange;\n onCursorChangeRef.current = onCursorChange;\n\n // Compartments for reconfigurable extensions\n const languageComp = useRef(new Compartment());\n const themeComp = useRef(new Compartment());\n const lineNumbersComp = useRef(new Compartment());\n const wrapComp = useRef(new Compartment());\n const tabSizeComp = useRef(new Compartment());\n const readOnlyComp = useRef(new Compartment());\n const placeholderComp = useRef(new Compartment());\n const heightComp = useRef(new Compartment());\n\n // Build height theme extension\n function buildHeightExtension(min?: number, max?: number): Extension {\n const styles: Record<string, string> = {};\n if (min) styles.minHeight = `${min}px`;\n if (max) styles.maxHeight = `${max}px`;\n if (Object.keys(styles).length === 0) return [];\n return EditorView.theme({\n \"&\": { ...(max ? { maxHeight: `${max}px` } : {}) },\n \".cm-scroller\": { overflow: \"auto\", ...styles },\n });\n }\n\n // Create the editor on mount\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const updateListener = EditorView.updateListener.of((update) => {\n if (update.docChanged && !isExternalUpdate.current) {\n onChangeRef.current?.(update.state.doc.toString());\n }\n if (update.selectionSet || update.docChanged) {\n const pos = update.state.selection.main;\n const line = update.state.doc.lineAt(pos.head);\n onCursorChangeRef.current?.({\n line: line.number,\n col: pos.head - line.from + 1,\n selectionLength: Math.abs(pos.to - pos.from),\n });\n }\n });\n\n const state = EditorState.create({\n doc: value,\n extensions: [\n // Compartmentalized extensions\n languageComp.current.of(resolveLanguageExtension(language)),\n themeComp.current.of(resolveThemeExtensions(theme)),\n lineNumbersComp.current.of(lineNumbers ? [lineNumbersExt(), highlightActiveLineGutter()] : []),\n wrapComp.current.of(wordWrap ? EditorView.lineWrapping : []),\n tabSizeComp.current.of(EditorState.tabSize.of(tabSize)),\n readOnlyComp.current.of(EditorState.readOnly.of(readOnly)),\n placeholderComp.current.of(placeholder ? placeholderExt(placeholder) : []),\n heightComp.current.of(buildHeightExtension(minHeight, maxHeight)),\n // Static extensions\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n indentOnInput(),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n indentWithTab,\n ]),\n updateListener,\n ...(additionalExtensions ?? []),\n ],\n });\n\n const view = new EditorView({ state, parent: container });\n viewRef.current = view;\n\n return () => {\n view.destroy();\n viewRef.current = null;\n };\n // Only run on mount/unmount — compartments handle reconfig\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [containerRef]);\n\n // Sync external value changes\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n const currentDoc = view.state.doc.toString();\n if (value !== currentDoc) {\n isExternalUpdate.current = true;\n view.dispatch({\n changes: { from: 0, to: currentDoc.length, insert: value },\n });\n isExternalUpdate.current = false;\n }\n }, [value]);\n\n // Reconfigure language\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n\n const def = getLanguage(language);\n if (!def) {\n view.dispatch({ effects: languageComp.current.reconfigure([]) });\n return;\n }\n\n const result = def.support();\n if (result instanceof Promise) {\n result.then((ext) => {\n if (viewRef.current) {\n viewRef.current.dispatch({ effects: languageComp.current.reconfigure(ext) });\n }\n });\n } else {\n view.dispatch({ effects: languageComp.current.reconfigure(result) });\n }\n }, [language]);\n\n // Reconfigure theme\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n view.dispatch({ effects: themeComp.current.reconfigure(resolveThemeExtensions(theme)) });\n }, [theme]);\n\n // Reconfigure line numbers\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n view.dispatch({\n effects: lineNumbersComp.current.reconfigure(\n lineNumbers ? [lineNumbersExt(), highlightActiveLineGutter()] : [],\n ),\n });\n }, [lineNumbers]);\n\n // Reconfigure word wrap\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n view.dispatch({\n effects: wrapComp.current.reconfigure(wordWrap ? EditorView.lineWrapping : []),\n });\n }, [wordWrap]);\n\n // Reconfigure tab size\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n view.dispatch({\n effects: tabSizeComp.current.reconfigure(EditorState.tabSize.of(tabSize)),\n });\n }, [tabSize]);\n\n // Reconfigure read-only\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n view.dispatch({\n effects: readOnlyComp.current.reconfigure(EditorState.readOnly.of(readOnly)),\n });\n }, [readOnly]);\n\n // Reconfigure placeholder\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n view.dispatch({\n effects: placeholderComp.current.reconfigure(placeholder ? placeholderExt(placeholder) : []),\n });\n }, [placeholder]);\n\n return { view: viewRef.current };\n}\n","import { useSyncExternalStore } from \"react\";\n\nfunction subscribe(callback: () => void): () => void {\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n mq.addEventListener(\"change\", callback);\n return () => mq.removeEventListener(\"change\", callback);\n}\n\nfunction getSnapshot(): boolean {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n}\n\nfunction getServerSnapshot(): boolean {\n return false;\n}\n\nexport function useDarkMode(): boolean {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n","import { useMemo, useRef, useState, useCallback } from \"react\";\nimport { cn, useControllableState } from \"@particle-academy/react-fancy\";\nimport { CodeEditorContext } from \"./CodeEditor.context\";\nimport { CodeEditorPanel } from \"./CodeEditorPanel\";\nimport { CodeEditorToolbar } from \"./CodeEditorToolbar\";\nimport { CodeEditorToolbarSeparator } from \"./CodeEditorToolbarSeparator\";\nimport { CodeEditorStatusBar } from \"./CodeEditorStatusBar\";\nimport { useCodemirror } from \"../../hooks/use-codemirror\";\nimport { useDarkMode } from \"../../hooks/use-dark-mode\";\nimport { getLanguage } from \"../../languages\";\nimport type { CodeEditorProps, CodeEditorContextValue } from \"./CodeEditor.types\";\n\nfunction CodeEditorRoot({\n children,\n className,\n value: valueProp,\n defaultValue = \"\",\n onChange,\n language: languageProp = \"javascript\",\n onLanguageChange,\n theme = \"auto\",\n readOnly = false,\n lineNumbers: lineNumbersProp = true,\n wordWrap: wordWrapProp = false,\n tabSize: tabSizeProp = 2,\n placeholder,\n minHeight,\n maxHeight,\n extensions: additionalExtensions,\n}: CodeEditorProps) {\n const [currentValue, setCurrentValue] = useControllableState(valueProp, defaultValue, onChange);\n\n // Reactive dark mode for \"auto\" theme\n const isDark = useDarkMode();\n const resolvedTheme = theme === \"auto\" ? (isDark ? \"dark\" : \"light\") : theme;\n\n // Language state (changeable via toolbar selector)\n const [currentLanguage, setCurrentLanguageState] = useState(() => {\n // Resolve to display name\n const def = getLanguage(languageProp);\n return def?.name ?? languageProp;\n });\n\n const setLanguage = useCallback(\n (lang: string) => {\n const def = getLanguage(lang);\n const resolved = def?.name ?? lang;\n setCurrentLanguageState(resolved);\n onLanguageChange?.(resolved);\n },\n [onLanguageChange],\n );\n\n // Toggle states\n const [showLineNumbers, setShowLineNumbers] = useState(lineNumbersProp);\n const [isWordWrap, setIsWordWrap] = useState(wordWrapProp);\n\n // Cursor position\n const [cursorPosition, setCursorPosition] = useState({ line: 1, col: 1 });\n const [selectionLength, setSelectionLength] = useState(0);\n\n // Container ref for CodeMirror mount\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Core CodeMirror hook\n const { view } = useCodemirror({\n containerRef,\n value: currentValue,\n onChange: setCurrentValue,\n language: currentLanguage,\n theme: resolvedTheme,\n readOnly,\n lineNumbers: showLineNumbers,\n wordWrap: isWordWrap,\n tabSize: tabSizeProp,\n placeholder,\n minHeight,\n maxHeight,\n searchEnabled: true,\n additionalExtensions,\n onCursorChange: ({ line, col, selectionLength: sel }) => {\n setCursorPosition({ line, col });\n setSelectionLength(sel);\n },\n });\n\n const contextValue = useMemo<CodeEditorContextValue>(\n () => ({\n view,\n getValue: () => view?.state.doc.toString() ?? currentValue,\n getSelection: () => {\n if (!view) return \"\";\n const sel = view.state.selection.main;\n return view.state.sliceDoc(sel.from, sel.to);\n },\n setValue: (v: string) => setCurrentValue(v),\n replaceSelection: (text: string) => {\n if (!view) return;\n view.dispatch(view.state.replaceSelection(text));\n },\n focus: () => view?.focus(),\n language: currentLanguage,\n setLanguage,\n theme: resolvedTheme,\n readOnly,\n lineNumbers: showLineNumbers,\n wordWrap: isWordWrap,\n tabSize: tabSizeProp,\n toggleWordWrap: () => setIsWordWrap((w) => !w),\n toggleLineNumbers: () => setShowLineNumbers((l) => !l),\n copyToClipboard: async () => {\n const text = view?.state.doc.toString() ?? currentValue;\n await navigator.clipboard.writeText(text);\n },\n cursorPosition,\n selectionLength,\n _containerRef: containerRef,\n _minHeight: minHeight,\n _maxHeight: maxHeight,\n }),\n [view, currentValue, currentLanguage, setLanguage, resolvedTheme, readOnly, showLineNumbers, isWordWrap, tabSizeProp, cursorPosition, selectionLength, setCurrentValue, minHeight, maxHeight],\n );\n\n return (\n <CodeEditorContext.Provider value={contextValue}>\n <div\n data-fancy-code-editor=\"\"\n className={cn(\n \"overflow-hidden rounded-xl border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-900\",\n className,\n )}\n >\n {children}\n </div>\n </CodeEditorContext.Provider>\n );\n}\n\nCodeEditorRoot.displayName = \"CodeEditor\";\n\nconst ToolbarWithSeparator = Object.assign(CodeEditorToolbar, {\n Separator: CodeEditorToolbarSeparator,\n});\n\nexport const CodeEditor = Object.assign(CodeEditorRoot, {\n Toolbar: ToolbarWithSeparator,\n Panel: CodeEditorPanel,\n StatusBar: CodeEditorStatusBar,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/CodeEditor/CodeEditor.context.ts","../src/components/CodeEditor/CodeEditorPanel.tsx","../src/components/CodeEditor/CodeEditorToolbarSeparator.tsx","../src/languages/registry.ts","../src/engine/tokenizers/javascript.ts","../src/engine/tokenizers/html.ts","../src/engine/tokenizers/php.ts","../src/languages/builtin.ts","../src/components/CodeEditor/CodeEditorToolbar.tsx","../src/components/CodeEditor/CodeEditorStatusBar.tsx","../src/themes/registry.ts","../src/themes/light.ts","../src/themes/dark.ts","../src/engine/highlight.ts","../src/hooks/use-editor-engine.ts","../src/hooks/use-dark-mode.ts","../src/components/CodeEditor/CodeEditor.tsx"],"names":["jsx","pos","jsxs","cn","Fragment","useState","useMemo","useCallback","useRef"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\r\nimport type { CodeEditorContextValue } from \"./CodeEditor.types\";\r\n\r\nexport const CodeEditorContext = createContext<CodeEditorContextValue | null>(null);\r\n\r\nexport function useCodeEditor(): CodeEditorContextValue {\r\n const ctx = useContext(CodeEditorContext);\r\n if (!ctx) {\r\n throw new Error(\"useCodeEditor must be used within a <CodeEditor> component\");\r\n }\r\n return ctx;\r\n}\r\n","import { useMemo } from \"react\";\nimport { cn } from \"@particle-academy/react-fancy\";\nimport { useCodeEditor } from \"./CodeEditor.context\";\nimport type { CodeEditorPanelProps } from \"./CodeEditor.types\";\n\nexport function CodeEditorPanel({ className }: CodeEditorPanelProps) {\n const {\n _engineReturn: engine,\n lineNumbers,\n readOnly,\n placeholder,\n _maxHeight,\n _minHeight,\n } = useCodeEditor();\n\n if (!engine) return null;\n\n const {\n textareaRef,\n highlightedHtml,\n lineCount,\n activeLine,\n themeColors,\n handleKeyDown,\n handleInput,\n handleScroll,\n handleSelect,\n scrollTop,\n scrollLeft,\n } = engine;\n\n const gutterWidth = lineNumbers ? `${Math.max(String(lineCount).length, 2) * 0.75 + 1.5}em` : \"0\";\n\n const lineNumberElements = useMemo(() => {\n if (!lineNumbers) return null;\n const lines = [];\n for (let i = 1; i <= lineCount; i++) {\n lines.push(\n <div\n key={i}\n style={{\n color: i === activeLine ? themeColors.foreground : themeColors.gutterForeground,\n backgroundColor: i === activeLine ? themeColors.activeLineBackground : undefined,\n }}\n className=\"pr-3 text-right text-[13px] leading-[1.5] select-none\"\n >\n {i}\n </div>,\n );\n }\n return lines;\n }, [lineNumbers, lineCount, activeLine, themeColors]);\n\n const containerStyle: React.CSSProperties = {\n backgroundColor: themeColors.background,\n color: themeColors.foreground,\n minHeight: _minHeight,\n maxHeight: _maxHeight,\n };\n\n const isEmpty = textareaRef.current ? textareaRef.current.value.length === 0 : highlightedHtml.length === 0;\n\n return (\n <div\n data-fancy-code-panel=\"\"\n className={cn(\"relative overflow-auto\", className)}\n style={containerStyle}\n >\n <div className=\"flex min-h-full\">\n {/* Line numbers gutter */}\n {lineNumbers && (\n <div\n className=\"sticky left-0 z-10 shrink-0 pt-2.5 pb-2.5 pl-2\"\n style={{\n backgroundColor: themeColors.gutterBackground,\n borderRight: `1px solid ${themeColors.gutterBorder}`,\n width: gutterWidth,\n }}\n >\n {lineNumberElements}\n </div>\n )}\n\n {/* Editor area */}\n <div className=\"relative min-w-0 flex-1\">\n {/* Highlighted code overlay */}\n <pre\n className=\"pointer-events-none absolute inset-0 m-0 overflow-hidden whitespace-pre border-none p-2.5 text-[13px] leading-[1.5]\"\n aria-hidden=\"true\"\n >\n <code dangerouslySetInnerHTML={{ __html: highlightedHtml + \"\\n\" }} />\n </pre>\n\n {/* Placeholder */}\n {placeholder && isEmpty && (\n <div\n className=\"pointer-events-none absolute left-0 top-0 p-2.5 text-[13px] leading-[1.5] opacity-40\"\n style={{ color: themeColors.foreground }}\n >\n {placeholder}\n </div>\n )}\n\n {/* Actual textarea for input */}\n <textarea\n ref={textareaRef}\n className=\"relative m-0 block w-full resize-none border-none bg-transparent p-2.5 text-[13px] leading-[1.5] text-transparent outline-none\"\n style={{\n caretColor: themeColors.cursorColor,\n minHeight: _minHeight ? _minHeight - 40 : 80,\n }}\n spellCheck={false}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n readOnly={readOnly}\n onKeyDown={handleKeyDown}\n onInput={handleInput}\n onScroll={handleScroll}\n onSelect={handleSelect}\n onClick={handleSelect}\n />\n </div>\n </div>\n </div>\n );\n}\n\nCodeEditorPanel.displayName = \"CodeEditorPanel\";\n","export function CodeEditorToolbarSeparator() {\r\n return (\r\n <div\r\n data-fancy-code-toolbar-separator=\"\"\r\n className=\"mx-1 h-4 w-px bg-zinc-200 dark:bg-zinc-700\"\r\n />\r\n );\r\n}\r\n\r\nCodeEditorToolbarSeparator.displayName = \"CodeEditorToolbarSeparator\";\r\n","import type { LanguageDefinition } from \"./types\";\r\n\r\nconst languageRegistry = new Map<string, LanguageDefinition>();\r\n\r\nexport function registerLanguage(def: LanguageDefinition): void {\r\n languageRegistry.set(def.name.toLowerCase(), def);\r\n if (def.aliases) {\r\n for (const alias of def.aliases) {\r\n languageRegistry.set(alias.toLowerCase(), def);\r\n }\r\n }\r\n}\r\n\r\nexport function getLanguage(name: string): LanguageDefinition | undefined {\r\n return languageRegistry.get(name.toLowerCase());\r\n}\r\n\r\nexport function getRegisteredLanguages(): string[] {\r\n const seen = new Set<LanguageDefinition>();\r\n const names: string[] = [];\r\n for (const [, def] of languageRegistry) {\r\n if (!seen.has(def)) {\r\n seen.add(def);\r\n names.push(def.name);\r\n }\r\n }\r\n return names;\r\n}\r\n","import type { Token, Tokenizer } from \"../tokenizer\";\n\nconst KEYWORDS = new Set([\n \"abstract\", \"arguments\", \"as\", \"async\", \"await\", \"boolean\", \"break\", \"byte\",\n \"case\", \"catch\", \"char\", \"class\", \"const\", \"continue\", \"debugger\", \"default\",\n \"delete\", \"do\", \"double\", \"else\", \"enum\", \"export\", \"extends\", \"false\",\n \"final\", \"finally\", \"float\", \"for\", \"from\", \"function\", \"get\", \"goto\", \"if\",\n \"implements\", \"import\", \"in\", \"instanceof\", \"int\", \"interface\", \"keyof\", \"let\",\n \"long\", \"native\", \"new\", \"null\", \"of\", \"package\", \"private\", \"protected\",\n \"public\", \"readonly\", \"return\", \"set\", \"short\", \"static\", \"super\", \"switch\",\n \"synchronized\", \"this\", \"throw\", \"throws\", \"transient\", \"true\", \"try\",\n \"type\", \"typeof\", \"undefined\", \"var\", \"void\", \"volatile\", \"while\", \"with\",\n \"yield\",\n]);\n\nconst TYPE_KEYWORDS = new Set([\n \"string\", \"number\", \"boolean\", \"any\", \"void\", \"never\", \"unknown\", \"object\",\n \"symbol\", \"bigint\", \"undefined\", \"null\",\n]);\n\nexport const tokenizeJavaScript: Tokenizer = (source: string): Token[] => {\n const tokens: Token[] = [];\n const len = source.length;\n let i = 0;\n\n while (i < len) {\n const ch = source[i];\n\n // Whitespace — skip\n if (ch === \" \" || ch === \"\\t\" || ch === \"\\n\" || ch === \"\\r\") {\n i++;\n continue;\n }\n\n // Single-line comment\n if (ch === \"/\" && source[i + 1] === \"/\") {\n const pos = i;\n i += 2;\n while (i < len && source[i] !== \"\\n\") i++;\n tokens.push({ type: \"comment\", start: pos, end: i });\n continue;\n }\n\n // Multi-line comment\n if (ch === \"/\" && source[i + 1] === \"*\") {\n const pos = i;\n i += 2;\n while (i < len && !(source[i] === \"*\" && source[i + 1] === \"/\")) i++;\n i += 2;\n tokens.push({ type: \"comment\", start: pos, end: i });\n continue;\n }\n\n // Template literal\n if (ch === \"`\") {\n const pos = i;\n i++;\n while (i < len && source[i] !== \"`\") {\n if (source[i] === \"\\\\\") i++;\n i++;\n }\n i++; // closing backtick\n tokens.push({ type: \"string\", start: pos, end: i });\n continue;\n }\n\n // String (single or double quote)\n if (ch === '\"' || ch === \"'\") {\n const pos = i;\n const quote = ch;\n i++;\n while (i < len && source[i] !== quote) {\n if (source[i] === \"\\\\\") i++;\n i++;\n }\n i++; // closing quote\n tokens.push({ type: \"string\", start: pos, end: i });\n continue;\n }\n\n // Number\n if ((ch >= \"0\" && ch <= \"9\") || (ch === \".\" && source[i + 1] >= \"0\" && source[i + 1] <= \"9\")) {\n const pos = i;\n if (ch === \"0\" && (source[i + 1] === \"x\" || source[i + 1] === \"X\")) {\n i += 2;\n while (i < len && /[0-9a-fA-F_]/.test(source[i])) i++;\n } else if (ch === \"0\" && (source[i + 1] === \"b\" || source[i + 1] === \"B\")) {\n i += 2;\n while (i < len && /[01_]/.test(source[i])) i++;\n } else {\n while (i < len && /[0-9_.]/.test(source[i])) i++;\n if (i < len && (source[i] === \"e\" || source[i] === \"E\")) {\n i++;\n if (i < len && (source[i] === \"+\" || source[i] === \"-\")) i++;\n while (i < len && source[i] >= \"0\" && source[i] <= \"9\") i++;\n }\n }\n if (i < len && source[i] === \"n\") i++; // BigInt\n tokens.push({ type: \"number\", start: pos, end: i });\n continue;\n }\n\n // Identifier or keyword\n if (/[a-zA-Z_$]/.test(ch)) {\n const pos = i;\n i++;\n while (i < len && /[a-zA-Z0-9_$]/.test(source[i])) i++;\n const word = source.slice(pos, i);\n\n // Check if it's a function call (followed by parenthesis)\n let j = i;\n while (j < len && (source[j] === \" \" || source[j] === \"\\t\")) j++;\n\n if (TYPE_KEYWORDS.has(word)) {\n tokens.push({ type: \"type\", start: pos, end: i });\n } else if (KEYWORDS.has(word)) {\n tokens.push({ type: \"keyword\", start: pos, end: i });\n } else if (source[j] === \"(\") {\n tokens.push({ type: \"function\", start: pos, end: i });\n } else if (word[0] >= \"A\" && word[0] <= \"Z\") {\n tokens.push({ type: \"type\", start: pos, end: i });\n } else {\n tokens.push({ type: \"variable\", start: pos, end: i });\n }\n continue;\n }\n\n // Operators\n if (\"+-*/%=<>!&|^~?:\".includes(ch)) {\n const pos = i;\n i++;\n // Consume multi-char operators (===, !==, =>, &&, ||, ??, etc.)\n while (i < len && \"+-*/%=<>!&|^~?:\".includes(source[i])) i++;\n tokens.push({ type: \"operator\", start: pos, end: i });\n continue;\n }\n\n // Punctuation\n if (\"(){}[];,.@#\".includes(ch)) {\n tokens.push({ type: \"punctuation\", start: i, end: i + 1 });\n i++;\n continue;\n }\n\n // Anything else\n tokens.push({ type: \"plain\", start: i, end: i + 1 });\n i++;\n }\n\n return tokens;\n};\n","import type { Token, Tokenizer } from \"../tokenizer\";\n\nexport const tokenizeHtml: Tokenizer = (source: string): Token[] => {\n const tokens: Token[] = [];\n const len = source.length;\n let i = 0;\n\n while (i < len) {\n // HTML comment\n if (source[i] === \"<\" && source.slice(i, i + 4) === \"<!--\") {\n const pos = i;\n i += 4;\n while (i < len && source.slice(i, i + 3) !== \"-->\") i++;\n i += 3;\n tokens.push({ type: \"comment\", start: pos, end: i });\n continue;\n }\n\n // Doctype\n if (source[i] === \"<\" && source.slice(i, i + 9).toUpperCase() === \"<!DOCTYPE\") {\n const pos = i;\n while (i < len && source[i] !== \">\") i++;\n i++;\n tokens.push({ type: \"keyword\", start: pos, end: i });\n continue;\n }\n\n // Tag (opening or closing)\n if (source[i] === \"<\") {\n // Opening bracket\n tokens.push({ type: \"punctuation\", start: i, end: i + 1 });\n i++;\n\n // Closing slash\n if (i < len && source[i] === \"/\") {\n tokens.push({ type: \"punctuation\", start: i, end: i + 1 });\n i++;\n }\n\n // Tag name\n if (i < len && /[a-zA-Z]/.test(source[i])) {\n const pos = i;\n while (i < len && /[a-zA-Z0-9-]/.test(source[i])) i++;\n tokens.push({ type: \"tag\", start: pos, end: i });\n }\n\n // Attributes\n while (i < len && source[i] !== \">\" && !(source[i] === \"/\" && source[i + 1] === \">\")) {\n // Whitespace\n if (source[i] === \" \" || source[i] === \"\\t\" || source[i] === \"\\n\" || source[i] === \"\\r\") {\n i++;\n continue;\n }\n\n // Attribute name\n if (/[a-zA-Z_@:]/.test(source[i])) {\n const pos = i;\n while (i < len && /[a-zA-Z0-9_\\-:.]/.test(source[i])) i++;\n tokens.push({ type: \"attribute\", start: pos, end: i });\n\n // Skip whitespace around =\n while (i < len && (source[i] === \" \" || source[i] === \"\\t\")) i++;\n\n // Equals sign\n if (i < len && source[i] === \"=\") {\n tokens.push({ type: \"operator\", start: i, end: i + 1 });\n i++;\n\n // Skip whitespace\n while (i < len && (source[i] === \" \" || source[i] === \"\\t\")) i++;\n\n // Attribute value\n if (i < len && (source[i] === '\"' || source[i] === \"'\")) {\n const quote = source[i];\n const pos = i;\n i++;\n while (i < len && source[i] !== quote) i++;\n i++;\n tokens.push({ type: \"attributeValue\", start: pos, end: i });\n } else if (i < len && /[^\\s>]/.test(source[i])) {\n const pos = i;\n while (i < len && /[^\\s>]/.test(source[i])) i++;\n tokens.push({ type: \"attributeValue\", start: pos, end: i });\n }\n }\n continue;\n }\n\n // Skip unknown chars inside tag\n i++;\n }\n\n // Self-closing slash\n if (i < len && source[i] === \"/\") {\n tokens.push({ type: \"punctuation\", start: i, end: i + 1 });\n i++;\n }\n\n // Closing bracket\n if (i < len && source[i] === \">\") {\n tokens.push({ type: \"punctuation\", start: i, end: i + 1 });\n i++;\n }\n\n continue;\n }\n\n // Text content — skip to next tag or special\n const pos = i;\n while (i < len && source[i] !== \"<\") i++;\n if (i > pos) {\n tokens.push({ type: \"plain\", start: pos, end: i });\n }\n }\n\n return tokens;\n};\n","import type { Token, Tokenizer } from \"../tokenizer\";\nimport { tokenizeHtml } from \"./html\";\n\nconst PHP_KEYWORDS = new Set([\n \"abstract\", \"and\", \"array\", \"as\", \"break\", \"callable\", \"case\", \"catch\",\n \"class\", \"clone\", \"const\", \"continue\", \"declare\", \"default\", \"do\", \"echo\",\n \"else\", \"elseif\", \"empty\", \"enddeclare\", \"endfor\", \"endforeach\", \"endif\",\n \"endswitch\", \"endwhile\", \"enum\", \"eval\", \"exit\", \"extends\", \"false\", \"final\",\n \"finally\", \"fn\", \"for\", \"foreach\", \"function\", \"global\", \"goto\", \"if\",\n \"implements\", \"include\", \"include_once\", \"instanceof\", \"insteadof\",\n \"interface\", \"isset\", \"list\", \"match\", \"namespace\", \"new\", \"null\", \"or\",\n \"print\", \"private\", \"protected\", \"public\", \"readonly\", \"require\",\n \"require_once\", \"return\", \"self\", \"static\", \"switch\", \"throw\", \"trait\",\n \"true\", \"try\", \"unset\", \"use\", \"var\", \"while\", \"xor\", \"yield\",\n]);\n\nfunction tokenizePhpBlock(source: string, offset: number): { tokens: Token[]; end: number } {\n const tokens: Token[] = [];\n const len = source.length;\n let i = offset;\n\n while (i < len) {\n const ch = source[i];\n\n // End of PHP block\n if (ch === \"?\" && source[i + 1] === \">\") {\n return { tokens, end: i };\n }\n\n // Whitespace\n if (ch === \" \" || ch === \"\\t\" || ch === \"\\n\" || ch === \"\\r\") {\n i++;\n continue;\n }\n\n // Single-line comment (// or #)\n if ((ch === \"/\" && source[i + 1] === \"/\") || ch === \"#\") {\n const pos = i;\n while (i < len && source[i] !== \"\\n\") i++;\n tokens.push({ type: \"comment\", start: pos, end: i });\n continue;\n }\n\n // Multi-line comment\n if (ch === \"/\" && source[i + 1] === \"*\") {\n const pos = i;\n i += 2;\n while (i < len && !(source[i] === \"*\" && source[i + 1] === \"/\")) i++;\n i += 2;\n tokens.push({ type: \"comment\", start: pos, end: i });\n continue;\n }\n\n // Variable ($name)\n if (ch === \"$\") {\n const pos = i;\n i++;\n while (i < len && /[a-zA-Z0-9_]/.test(source[i])) i++;\n tokens.push({ type: \"variable\", start: pos, end: i });\n continue;\n }\n\n // String (single or double quote)\n if (ch === '\"' || ch === \"'\") {\n const pos = i;\n const quote = ch;\n i++;\n while (i < len && source[i] !== quote) {\n if (source[i] === \"\\\\\") i++;\n i++;\n }\n i++;\n tokens.push({ type: \"string\", start: pos, end: i });\n continue;\n }\n\n // Number\n if (ch >= \"0\" && ch <= \"9\") {\n const pos = i;\n while (i < len && /[0-9_.]/.test(source[i])) i++;\n if (i < len && (source[i] === \"e\" || source[i] === \"E\")) {\n i++;\n if (i < len && (source[i] === \"+\" || source[i] === \"-\")) i++;\n while (i < len && source[i] >= \"0\" && source[i] <= \"9\") i++;\n }\n tokens.push({ type: \"number\", start: pos, end: i });\n continue;\n }\n\n // Identifier or keyword\n if (/[a-zA-Z_]/.test(ch)) {\n const pos = i;\n i++;\n while (i < len && /[a-zA-Z0-9_]/.test(source[i])) i++;\n const word = source.slice(pos, i);\n\n let j = i;\n while (j < len && (source[j] === \" \" || source[j] === \"\\t\")) j++;\n\n if (PHP_KEYWORDS.has(word.toLowerCase())) {\n tokens.push({ type: \"keyword\", start: pos, end: i });\n } else if (source[j] === \"(\") {\n tokens.push({ type: \"function\", start: pos, end: i });\n } else if (word[0] >= \"A\" && word[0] <= \"Z\") {\n tokens.push({ type: \"type\", start: pos, end: i });\n } else {\n tokens.push({ type: \"variable\", start: pos, end: i });\n }\n continue;\n }\n\n // Operators\n if (\"+-*/%=<>!&|^~?:.\".includes(ch)) {\n const pos = i;\n i++;\n while (i < len && \"+-*/%=<>!&|^~?:.\".includes(source[i])) i++;\n tokens.push({ type: \"operator\", start: pos, end: i });\n continue;\n }\n\n // Punctuation\n if (\"(){}[];,@\\\\\".includes(ch)) {\n tokens.push({ type: \"punctuation\", start: i, end: i + 1 });\n i++;\n continue;\n }\n\n tokens.push({ type: \"plain\", start: i, end: i + 1 });\n i++;\n }\n\n return { tokens, end: i };\n}\n\nexport const tokenizePhp: Tokenizer = (source: string): Token[] => {\n const tokens: Token[] = [];\n const len = source.length;\n let i = 0;\n let htmlChunkStart = 0;\n\n while (i < len) {\n // Detect PHP open tag\n if (source[i] === \"<\" && source[i + 1] === \"?\") {\n // Tokenize any HTML before this PHP block\n if (i > htmlChunkStart) {\n const htmlChunk = source.slice(htmlChunkStart, i);\n const htmlTokens = tokenizeHtml(htmlChunk);\n for (const t of htmlTokens) {\n tokens.push({ type: t.type, start: t.start + htmlChunkStart, end: t.end + htmlChunkStart });\n }\n }\n\n // PHP open tag\n const tagStart = i;\n i += 2;\n // Skip \"php\" or \"=\"\n if (i < len && source.slice(i, i + 3).toLowerCase() === \"php\") {\n i += 3;\n } else if (i < len && source[i] === \"=\") {\n i++;\n }\n tokens.push({ type: \"keyword\", start: tagStart, end: i });\n\n // Tokenize PHP content\n const result = tokenizePhpBlock(source, i);\n tokens.push(...result.tokens);\n i = result.end;\n\n // PHP close tag\n if (i < len && source[i] === \"?\" && source[i + 1] === \">\") {\n tokens.push({ type: \"keyword\", start: i, end: i + 2 });\n i += 2;\n }\n\n htmlChunkStart = i;\n continue;\n }\n\n i++;\n }\n\n // Remaining HTML after last PHP block\n if (htmlChunkStart < len) {\n const htmlChunk = source.slice(htmlChunkStart);\n const htmlTokens = tokenizeHtml(htmlChunk);\n for (const t of htmlTokens) {\n tokens.push({ type: t.type, start: t.start + htmlChunkStart, end: t.end + htmlChunkStart });\n }\n }\n\n return tokens;\n};\n","import { registerLanguage } from \"./registry\";\nimport { tokenizeJavaScript } from \"../engine/tokenizers/javascript\";\nimport { tokenizeHtml } from \"../engine/tokenizers/html\";\nimport { tokenizePhp } from \"../engine/tokenizers/php\";\n\nregisterLanguage({\n name: \"JavaScript\",\n aliases: [\"js\", \"javascript\", \"jsx\"],\n tokenize: tokenizeJavaScript,\n});\n\nregisterLanguage({\n name: \"TypeScript\",\n aliases: [\"ts\", \"typescript\", \"tsx\"],\n tokenize: tokenizeJavaScript, // Same tokenizer — JS/TS syntax is identical for highlighting\n});\n\nregisterLanguage({\n name: \"HTML\",\n aliases: [\"html\", \"htm\"],\n tokenize: tokenizeHtml,\n});\n\nregisterLanguage({\n name: \"PHP\",\n aliases: [\"php\"],\n tokenize: tokenizePhp,\n});\n","import { useState } from \"react\";\r\nimport { cn } from \"@particle-academy/react-fancy\";\r\nimport { useCodeEditor } from \"./CodeEditor.context\";\r\nimport { CodeEditorToolbarSeparator } from \"./CodeEditorToolbarSeparator\";\r\nimport { getRegisteredLanguages } from \"../../languages\";\r\nimport type { CodeEditorToolbarProps } from \"./CodeEditor.types\";\r\n\r\nconst iconBtnClass =\r\n \"inline-flex items-center justify-center rounded-md p-1 text-zinc-500 transition-colors hover:bg-zinc-100 hover:text-zinc-700 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-200\";\r\n\r\nfunction LanguageSelector() {\r\n const { language, setLanguage } = useCodeEditor();\r\n const languages = getRegisteredLanguages();\r\n\r\n return (\r\n <select\r\n value={language}\r\n onChange={(e) => setLanguage(e.target.value)}\r\n className=\"h-6 rounded border border-zinc-200 bg-transparent px-1.5 text-[11px] text-zinc-600 outline-none transition-colors hover:border-zinc-300 dark:border-zinc-700 dark:text-zinc-400 dark:hover:border-zinc-600\"\r\n >\r\n {languages.map((lang) => (\r\n <option key={lang} value={lang}>\r\n {lang}\r\n </option>\r\n ))}\r\n </select>\r\n );\r\n}\r\n\r\nfunction DefaultToolbarActions() {\r\n const { copyToClipboard, toggleWordWrap, wordWrap } = useCodeEditor();\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = async () => {\r\n await copyToClipboard();\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 1500);\r\n };\r\n\r\n return (\r\n <>\r\n <LanguageSelector />\r\n <CodeEditorToolbarSeparator />\r\n <button\r\n type=\"button\"\r\n onClick={toggleWordWrap}\r\n title={wordWrap ? \"Disable Word Wrap\" : \"Enable Word Wrap\"}\r\n className={cn(iconBtnClass, wordWrap && \"text-blue-500 dark:text-blue-400\")}\r\n >\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\r\n <path d=\"M3 12h15a3 3 0 110 6h-4\" />\r\n <polyline points=\"16 16 14 18 16 20\" />\r\n <line x1=\"3\" y1=\"18\" x2=\"10\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={handleCopy} title=\"Copy to Clipboard\" className={iconBtnClass}>\r\n {copied ? (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n ) : (\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\r\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\r\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\r\n </svg>\r\n )}\r\n </button>\r\n </>\r\n );\r\n}\r\n\r\nexport function CodeEditorToolbar({ children, className }: CodeEditorToolbarProps) {\r\n const hasChildren = children != null;\r\n\r\n return (\r\n <div\r\n data-fancy-code-toolbar=\"\"\r\n className={cn(\r\n \"flex items-center gap-0.5 border-b border-zinc-200 px-2 py-1 dark:border-zinc-700\",\r\n className,\r\n )}\r\n >\r\n {hasChildren ? children : <DefaultToolbarActions />}\r\n </div>\r\n );\r\n}\r\n\r\nCodeEditorToolbar.displayName = \"CodeEditorToolbar\";\r\n","import { cn } from \"@particle-academy/react-fancy\";\r\nimport { useCodeEditor } from \"./CodeEditor.context\";\r\nimport type { CodeEditorStatusBarProps } from \"./CodeEditor.types\";\r\n\r\nexport function CodeEditorStatusBar({ children, className }: CodeEditorStatusBarProps) {\r\n const { cursorPosition, selectionLength, language, tabSize } = useCodeEditor();\r\n\r\n return (\r\n <div\r\n data-fancy-code-statusbar=\"\"\r\n className={cn(\r\n \"flex items-center gap-3 border-t border-zinc-200 px-3 py-1 text-[11px] text-zinc-500 dark:border-zinc-700 dark:text-zinc-400\",\r\n className,\r\n )}\r\n >\r\n {children ?? (\r\n <>\r\n <span>Ln {cursorPosition.line}, Col {cursorPosition.col}</span>\r\n {selectionLength > 0 && <span>{selectionLength} selected</span>}\r\n <span className=\"ml-auto\">{language}</span>\r\n <span>{tabSize} spaces</span>\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nCodeEditorStatusBar.displayName = \"CodeEditorStatusBar\";\r\n","import type { ThemeDefinition } from \"./types\";\r\n\r\nconst themeRegistry = new Map<string, ThemeDefinition>();\r\n\r\nexport function registerTheme(theme: ThemeDefinition): void {\r\n themeRegistry.set(theme.name.toLowerCase(), theme);\r\n}\r\n\r\nexport function getTheme(name: string): ThemeDefinition | undefined {\r\n return themeRegistry.get(name.toLowerCase());\r\n}\r\n\r\nexport function getRegisteredThemes(): string[] {\r\n return Array.from(themeRegistry.keys());\r\n}\r\n","import { registerTheme } from \"./registry\";\n\nregisterTheme({\n name: \"light\",\n variant: \"light\",\n colors: {\n background: \"#ffffff\",\n foreground: \"#1e1e2e\",\n gutterBackground: \"#f8fafc\",\n gutterForeground: \"#94a3b8\",\n gutterBorder: \"#e2e8f0\",\n activeLineBackground: \"#f8fafc\",\n selectionBackground: \"#dbeafe\",\n cursorColor: \"#3b82f6\",\n keyword: \"#8b5cf6\",\n string: \"#059669\",\n comment: \"#94a3b8\",\n number: \"#d97706\",\n operator: \"#0891b2\",\n function: \"#2563eb\",\n type: \"#d97706\",\n tag: \"#dc2626\",\n attribute: \"#d97706\",\n attributeValue: \"#059669\",\n punctuation: \"#64748b\",\n variable: \"#1e1e2e\",\n },\n});\n","import { registerTheme } from \"./registry\";\n\nregisterTheme({\n name: \"dark\",\n variant: \"dark\",\n colors: {\n background: \"#18181b\",\n foreground: \"#e4e4e7\",\n gutterBackground: \"#18181b\",\n gutterForeground: \"#52525b\",\n gutterBorder: \"#27272a\",\n activeLineBackground: \"#27272a\",\n selectionBackground: \"#1e3a5f\",\n cursorColor: \"#60a5fa\",\n keyword: \"#c084fc\",\n string: \"#34d399\",\n comment: \"#71717a\",\n number: \"#fbbf24\",\n operator: \"#22d3ee\",\n function: \"#60a5fa\",\n type: \"#fbbf24\",\n tag: \"#f87171\",\n attribute: \"#fbbf24\",\n attributeValue: \"#34d399\",\n punctuation: \"#a1a1aa\",\n variable: \"#e4e4e7\",\n },\n});\n","import type { Token, TokenType } from \"./tokenizer\";\nimport type { ThemeColors } from \"../themes/types\";\n\n/**\n * Escape HTML special characters.\n */\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\n/**\n * Convert source code + tokens + theme colors into highlighted HTML.\n * Returns an HTML string with <span> elements for each token.\n */\nexport function highlightCode(source: string, tokens: Token[], colors: ThemeColors): string {\n if (tokens.length === 0) return escapeHtml(source);\n\n const colorMap: Record<TokenType, string> = {\n keyword: colors.keyword,\n string: colors.string,\n comment: colors.comment,\n number: colors.number,\n operator: colors.operator,\n function: colors.function,\n type: colors.type,\n tag: colors.tag,\n attribute: colors.attribute,\n attributeValue: colors.attributeValue,\n punctuation: colors.punctuation,\n variable: colors.variable,\n plain: colors.foreground,\n };\n\n const parts: string[] = [];\n let pos = 0;\n\n for (const token of tokens) {\n // Plain text before this token\n if (token.start > pos) {\n parts.push(escapeHtml(source.slice(pos, token.start)));\n }\n\n const text = escapeHtml(source.slice(token.start, token.end));\n const color = colorMap[token.type];\n const style = token.type === \"comment\"\n ? `color:${color};font-style:italic`\n : `color:${color}`;\n\n parts.push(`<span style=\"${style}\">${text}</span>`);\n pos = token.end;\n }\n\n // Remaining text after last token\n if (pos < source.length) {\n parts.push(escapeHtml(source.slice(pos)));\n }\n\n return parts.join(\"\");\n}\n","import { useEffect, useRef, useCallback, useState, useMemo, type RefObject } from \"react\";\nimport { getLanguage } from \"../languages\";\nimport { getTheme } from \"../themes\";\nimport { highlightCode } from \"../engine/highlight\";\nimport type { ThemeColors } from \"../themes/types\";\nimport type { Tokenizer } from \"../engine/tokenizer\";\n\nexport interface UseEditorEngineOptions {\n containerRef: RefObject<HTMLDivElement | null>;\n value: string;\n onChange?: (value: string) => void;\n language: string;\n theme: string;\n readOnly: boolean;\n lineNumbers: boolean;\n wordWrap: boolean;\n tabSize: number;\n placeholder?: string;\n minHeight?: number;\n maxHeight?: number;\n onCursorChange?: (pos: { line: number; col: number; selectionLength: number }) => void;\n}\n\nexport interface UseEditorEngineReturn {\n textareaRef: RefObject<HTMLTextAreaElement | null>;\n highlightedHtml: string;\n lineCount: number;\n activeLine: number;\n themeColors: ThemeColors;\n handleKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n handleInput: () => void;\n handleScroll: () => void;\n handleSelect: () => void;\n scrollTop: number;\n scrollLeft: number;\n}\n\nconst DEFAULT_COLORS: ThemeColors = {\n background: \"#18181b\",\n foreground: \"#e4e4e7\",\n gutterBackground: \"#18181b\",\n gutterForeground: \"#52525b\",\n gutterBorder: \"#27272a\",\n activeLineBackground: \"#27272a\",\n selectionBackground: \"#1e3a5f\",\n cursorColor: \"#60a5fa\",\n keyword: \"#c084fc\",\n string: \"#34d399\",\n comment: \"#71717a\",\n number: \"#fbbf24\",\n operator: \"#22d3ee\",\n function: \"#60a5fa\",\n type: \"#fbbf24\",\n tag: \"#f87171\",\n attribute: \"#fbbf24\",\n attributeValue: \"#34d399\",\n punctuation: \"#a1a1aa\",\n variable: \"#e4e4e7\",\n};\n\nexport function useEditorEngine({\n value,\n onChange,\n language,\n theme,\n readOnly,\n tabSize,\n onCursorChange,\n}: UseEditorEngineOptions): UseEditorEngineReturn {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const onChangeRef = useRef(onChange);\n const onCursorChangeRef = useRef(onCursorChange);\n onChangeRef.current = onChange;\n onCursorChangeRef.current = onCursorChange;\n\n const [scrollTop, setScrollTop] = useState(0);\n const [scrollLeft, setScrollLeft] = useState(0);\n const [activeLine, setActiveLine] = useState(1);\n\n // Resolve theme colors\n const themeColors = useMemo<ThemeColors>(() => {\n const def = getTheme(theme);\n return def?.colors ?? DEFAULT_COLORS;\n }, [theme]);\n\n // Resolve tokenizer\n const tokenizer = useMemo<Tokenizer | null>(() => {\n const def = getLanguage(language);\n return def?.tokenize ?? null;\n }, [language]);\n\n // Generate highlighted HTML\n const highlightedHtml = useMemo(() => {\n if (!tokenizer) {\n // No tokenizer — just escape HTML\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n }\n const tokens = tokenizer(value);\n return highlightCode(value, tokens, themeColors);\n }, [value, tokenizer, themeColors]);\n\n const lineCount = useMemo(() => {\n let count = 1;\n for (let i = 0; i < value.length; i++) {\n if (value[i] === \"\\n\") count++;\n }\n return count;\n }, [value]);\n\n // Sync textarea value when controlled value changes externally\n useEffect(() => {\n const ta = textareaRef.current;\n if (!ta || ta.value === value) return;\n const { selectionStart, selectionEnd } = ta;\n ta.value = value;\n ta.selectionStart = selectionStart;\n ta.selectionEnd = selectionEnd;\n }, [value]);\n\n const updateCursorInfo = useCallback(() => {\n const ta = textareaRef.current;\n if (!ta) return;\n const pos = ta.selectionStart;\n const textBefore = ta.value.slice(0, pos);\n const line = (textBefore.match(/\\n/g) || []).length + 1;\n const lastNewline = textBefore.lastIndexOf(\"\\n\");\n const col = pos - lastNewline;\n const selLen = Math.abs(ta.selectionEnd - ta.selectionStart);\n setActiveLine(line);\n onCursorChangeRef.current?.({ line, col, selectionLength: selLen });\n }, []);\n\n const handleInput = useCallback(() => {\n const ta = textareaRef.current;\n if (!ta) return;\n onChangeRef.current?.(ta.value);\n updateCursorInfo();\n }, [updateCursorInfo]);\n\n const handleSelect = useCallback(() => {\n updateCursorInfo();\n }, [updateCursorInfo]);\n\n const handleScroll = useCallback(() => {\n const ta = textareaRef.current;\n if (!ta) return;\n setScrollTop(ta.scrollTop);\n setScrollLeft(ta.scrollLeft);\n }, []);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (readOnly) {\n // Allow copy shortcuts in read-only mode\n if (e.key === \"c\" && (e.metaKey || e.ctrlKey)) return;\n if (e.key === \"a\" && (e.metaKey || e.ctrlKey)) return;\n e.preventDefault();\n return;\n }\n\n // Tab key — insert spaces\n if (e.key === \"Tab\") {\n e.preventDefault();\n const ta = e.currentTarget;\n const start = ta.selectionStart;\n const end = ta.selectionEnd;\n const spaces = \" \".repeat(tabSize);\n\n if (e.shiftKey) {\n // Dedent: remove leading spaces from selected lines\n const lines = ta.value.split(\"\\n\");\n const startLine = ta.value.slice(0, start).split(\"\\n\").length - 1;\n const endLine = ta.value.slice(0, end).split(\"\\n\").length - 1;\n let removed = 0;\n for (let i = startLine; i <= endLine; i++) {\n const match = lines[i].match(new RegExp(`^ {1,${tabSize}}`));\n if (match) {\n removed += match[0].length;\n lines[i] = lines[i].slice(match[0].length);\n }\n }\n const newValue = lines.join(\"\\n\");\n ta.value = newValue;\n ta.selectionStart = Math.max(0, start - (startLine === endLine ? removed : tabSize));\n ta.selectionEnd = Math.max(0, end - removed);\n onChangeRef.current?.(newValue);\n } else if (start !== end) {\n // Indent selected lines\n const lines = ta.value.split(\"\\n\");\n const startLine = ta.value.slice(0, start).split(\"\\n\").length - 1;\n const endLine = ta.value.slice(0, end).split(\"\\n\").length - 1;\n for (let i = startLine; i <= endLine; i++) {\n lines[i] = spaces + lines[i];\n }\n const newValue = lines.join(\"\\n\");\n ta.value = newValue;\n ta.selectionStart = start + tabSize;\n ta.selectionEnd = end + (endLine - startLine + 1) * tabSize;\n onChangeRef.current?.(newValue);\n } else {\n // Insert tab at cursor\n const before = ta.value.slice(0, start);\n const after = ta.value.slice(end);\n ta.value = before + spaces + after;\n ta.selectionStart = ta.selectionEnd = start + tabSize;\n onChangeRef.current?.(ta.value);\n }\n updateCursorInfo();\n return;\n }\n\n // Enter — auto-indent\n if (e.key === \"Enter\") {\n e.preventDefault();\n const ta = e.currentTarget;\n const start = ta.selectionStart;\n const end = ta.selectionEnd;\n const before = ta.value.slice(0, start);\n const after = ta.value.slice(end);\n const currentLine = before.split(\"\\n\").pop() || \"\";\n const indent = currentLine.match(/^(\\s*)/)?.[1] || \"\";\n\n // Extra indent after { or (\n const lastChar = before.trimEnd().slice(-1);\n const extraIndent = (lastChar === \"{\" || lastChar === \"(\") ? \" \".repeat(tabSize) : \"\";\n\n const insertion = \"\\n\" + indent + extraIndent;\n ta.value = before + insertion + after;\n ta.selectionStart = ta.selectionEnd = start + insertion.length;\n onChangeRef.current?.(ta.value);\n updateCursorInfo();\n return;\n }\n },\n [readOnly, tabSize, updateCursorInfo],\n );\n\n return {\n textareaRef,\n highlightedHtml,\n lineCount,\n activeLine,\n themeColors,\n handleKeyDown,\n handleInput,\n handleScroll,\n handleSelect,\n scrollTop,\n scrollLeft,\n };\n}\n","import { useSyncExternalStore } from \"react\";\r\n\r\nfunction subscribe(callback: () => void): () => void {\r\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\r\n mq.addEventListener(\"change\", callback);\r\n return () => mq.removeEventListener(\"change\", callback);\r\n}\r\n\r\nfunction getSnapshot(): boolean {\r\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\r\n}\r\n\r\nfunction getServerSnapshot(): boolean {\r\n return false;\r\n}\r\n\r\nexport function useDarkMode(): boolean {\r\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\r\n}\r\n","import { useMemo, useRef, useState, useCallback } from \"react\";\nimport { cn, useControllableState } from \"@particle-academy/react-fancy\";\nimport { CodeEditorContext } from \"./CodeEditor.context\";\nimport { CodeEditorPanel } from \"./CodeEditorPanel\";\nimport { CodeEditorToolbar } from \"./CodeEditorToolbar\";\nimport { CodeEditorToolbarSeparator } from \"./CodeEditorToolbarSeparator\";\nimport { CodeEditorStatusBar } from \"./CodeEditorStatusBar\";\nimport { useEditorEngine } from \"../../hooks/use-editor-engine\";\nimport { useDarkMode } from \"../../hooks/use-dark-mode\";\nimport { getLanguage } from \"../../languages\";\nimport type { CodeEditorProps, CodeEditorContextValue } from \"./CodeEditor.types\";\n\nfunction CodeEditorRoot({\n children,\n className,\n value: valueProp,\n defaultValue = \"\",\n onChange,\n language: languageProp = \"javascript\",\n onLanguageChange,\n theme = \"auto\",\n readOnly = false,\n lineNumbers: lineNumbersProp = true,\n wordWrap: wordWrapProp = false,\n tabSize: tabSizeProp = 2,\n placeholder,\n minHeight,\n maxHeight,\n}: CodeEditorProps) {\n const [currentValue, setCurrentValue] = useControllableState(valueProp, defaultValue, onChange);\n\n // Reactive dark mode for \"auto\" theme\n const isDark = useDarkMode();\n const resolvedTheme = theme === \"auto\" ? (isDark ? \"dark\" : \"light\") : theme;\n\n // Language state (changeable via toolbar selector)\n const [currentLanguage, setCurrentLanguageState] = useState(() => {\n const def = getLanguage(languageProp);\n return def?.name ?? languageProp;\n });\n\n const setLanguage = useCallback(\n (lang: string) => {\n const def = getLanguage(lang);\n const resolved = def?.name ?? lang;\n setCurrentLanguageState(resolved);\n onLanguageChange?.(resolved);\n },\n [onLanguageChange],\n );\n\n // Toggle states\n const [showLineNumbers, setShowLineNumbers] = useState(lineNumbersProp);\n const [isWordWrap, setIsWordWrap] = useState(wordWrapProp);\n\n // Cursor position\n const [cursorPosition, setCursorPosition] = useState({ line: 1, col: 1 });\n const [selectionLength, setSelectionLength] = useState(0);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Our custom editor engine\n const engineReturn = useEditorEngine({\n containerRef,\n value: currentValue,\n onChange: setCurrentValue,\n language: currentLanguage,\n theme: resolvedTheme,\n readOnly,\n lineNumbers: showLineNumbers,\n wordWrap: isWordWrap,\n tabSize: tabSizeProp,\n placeholder,\n minHeight,\n maxHeight,\n onCursorChange: ({ line, col, selectionLength: sel }) => {\n setCursorPosition({ line, col });\n setSelectionLength(sel);\n },\n });\n\n const contextValue = useMemo<CodeEditorContextValue>(\n () => ({\n getValue: () => engineReturn.textareaRef.current?.value ?? currentValue,\n getSelection: () => {\n const ta = engineReturn.textareaRef.current;\n if (!ta) return \"\";\n return ta.value.slice(ta.selectionStart, ta.selectionEnd);\n },\n setValue: (v: string) => setCurrentValue(v),\n replaceSelection: (text: string) => {\n const ta = engineReturn.textareaRef.current;\n if (!ta) return;\n const start = ta.selectionStart;\n const end = ta.selectionEnd;\n const before = ta.value.slice(0, start);\n const after = ta.value.slice(end);\n ta.value = before + text + after;\n ta.selectionStart = ta.selectionEnd = start + text.length;\n setCurrentValue(ta.value);\n },\n focus: () => engineReturn.textareaRef.current?.focus(),\n language: currentLanguage,\n setLanguage,\n theme: resolvedTheme,\n readOnly,\n lineNumbers: showLineNumbers,\n wordWrap: isWordWrap,\n tabSize: tabSizeProp,\n toggleWordWrap: () => setIsWordWrap((w) => !w),\n toggleLineNumbers: () => setShowLineNumbers((l) => !l),\n copyToClipboard: async () => {\n const text = engineReturn.textareaRef.current?.value ?? currentValue;\n await navigator.clipboard.writeText(text);\n },\n cursorPosition,\n selectionLength,\n placeholder,\n _engineReturn: engineReturn,\n _minHeight: minHeight,\n _maxHeight: maxHeight,\n }),\n [engineReturn, currentValue, currentLanguage, setLanguage, resolvedTheme, readOnly, showLineNumbers, isWordWrap, tabSizeProp, cursorPosition, selectionLength, setCurrentValue, placeholder, minHeight, maxHeight],\n );\n\n return (\n <CodeEditorContext.Provider value={contextValue}>\n <div\n data-fancy-code-editor=\"\"\n className={cn(\n \"overflow-hidden rounded-xl border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-900\",\n className,\n )}\n >\n {children}\n </div>\n </CodeEditorContext.Provider>\n );\n}\n\nCodeEditorRoot.displayName = \"CodeEditor\";\n\nconst ToolbarWithSeparator = Object.assign(CodeEditorToolbar, {\n Separator: CodeEditorToolbarSeparator,\n});\n\nexport const CodeEditor = Object.assign(CodeEditorRoot, {\n Toolbar: ToolbarWithSeparator,\n Panel: CodeEditorPanel,\n StatusBar: CodeEditorStatusBar,\n});\n"]}
package/dist/styles.css CHANGED
@@ -1,11 +1,7 @@
1
1
  /* src/styles.css */
2
- [data-fancy-code-panel] .cm-editor {
3
- height: 100%;
4
- }
5
- [data-fancy-code-panel] .cm-editor.cm-focused {
6
- outline: none;
7
- }
8
- [data-fancy-code-panel] .cm-scroller {
2
+ [data-fancy-code-panel] textarea,
3
+ [data-fancy-code-panel] pre,
4
+ [data-fancy-code-panel] code {
9
5
  font-family:
10
6
  ui-monospace,
11
7
  SFMono-Regular,
@@ -15,27 +11,31 @@
15
11
  "Liberation Mono",
16
12
  monospace;
17
13
  }
18
- [data-fancy-code-panel] .cm-gutters {
19
- transition:
20
- background-color 0.15s ease,
21
- color 0.15s ease,
22
- border-color 0.15s ease;
14
+ [data-fancy-code-panel] textarea,
15
+ [data-fancy-code-panel] pre {
16
+ font-size: 13px;
17
+ line-height: 1.5;
18
+ letter-spacing: normal;
19
+ word-spacing: normal;
20
+ font-variant-ligatures: none;
23
21
  }
24
- [data-fancy-code-panel] .cm-editor {
25
- transition: background-color 0.15s ease;
22
+ [data-fancy-code-panel] textarea {
23
+ white-space: pre;
24
+ overflow-wrap: normal;
25
+ word-break: normal;
26
26
  }
27
- [data-fancy-code-panel] .cm-scroller::-webkit-scrollbar {
27
+ [data-fancy-code-panel]::-webkit-scrollbar {
28
28
  width: 8px;
29
29
  height: 8px;
30
30
  }
31
- [data-fancy-code-panel] .cm-scroller::-webkit-scrollbar-track {
31
+ [data-fancy-code-panel]::-webkit-scrollbar-track {
32
32
  background: transparent;
33
33
  }
34
- [data-fancy-code-panel] .cm-scroller::-webkit-scrollbar-thumb {
34
+ [data-fancy-code-panel]::-webkit-scrollbar-thumb {
35
35
  background: #a1a1aa;
36
36
  border-radius: 4px;
37
37
  }
38
- .dark [data-fancy-code-panel] .cm-scroller::-webkit-scrollbar-thumb {
38
+ .dark [data-fancy-code-panel]::-webkit-scrollbar-thumb {
39
39
  background: #52525b;
40
40
  }
41
41
  /*# sourceMappingURL=styles.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles.css"],"sourcesContent":["/* @particle-academy/fancy-code — base editor styles */\n\n/* Ensure CodeMirror fills its container */\n[data-fancy-code-panel] .cm-editor {\n height: 100%;\n}\n\n[data-fancy-code-panel] .cm-editor.cm-focused {\n outline: none;\n}\n\n/* Monospace font for code content */\n[data-fancy-code-panel] .cm-scroller {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace;\n}\n\n/* Smooth transitions for theme switching */\n[data-fancy-code-panel] .cm-gutters {\n transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;\n}\n\n[data-fancy-code-panel] .cm-editor {\n transition: background-color 0.15s ease;\n}\n\n/* Scrollbar styling */\n[data-fancy-code-panel] .cm-scroller::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n[data-fancy-code-panel] .cm-scroller::-webkit-scrollbar-track {\n background: transparent;\n}\n\n[data-fancy-code-panel] .cm-scroller::-webkit-scrollbar-thumb {\n background: #a1a1aa;\n border-radius: 4px;\n}\n\n.dark [data-fancy-code-panel] .cm-scroller::-webkit-scrollbar-thumb {\n background: #52525b;\n}\n"],"mappings":";AAGA,CAAC,uBAAuB,CAAC;AACvB,UAAQ;AACV;AAEA,CAAC,uBAAuB,CAJC,SAIS,CAAC;AACjC,WAAS;AACX;AAGA,CAAC,uBAAuB,CAAC;AACvB;AAAA,IAAa,YAAY;AAAA,IAAE,cAAc;AAAA,IAAE,SAAS;AAAA,IAAE,KAAK;AAAA,IAAE,QAAQ;AAAA,IAAE,iBAAiB;AAAA,IAAE;AAC5F;AAGA,CAAC,uBAAuB,CAAC;AACvB;AAAA,IAAY,iBAAiB,MAAM,IAAI;AAAA,IAAE,MAAM,MAAM,IAAI;AAAA,IAAE,aAAa,MAAM;AAChF;AAEA,CAAC,uBAAuB,CAlBC;AAmBvB,cAAY,iBAAiB,MAAM;AACrC;AAGA,CAAC,uBAAuB,CAdC,WAcW;AAClC,SAAO;AACP,UAAQ;AACV;AAEA,CAAC,uBAAuB,CAnBC,WAmBW;AAClC,cAAY;AACd;AAEA,CAAC,uBAAuB,CAvBC,WAuBW;AAClC,cAAY;AACZ,iBAAe;AACjB;AAEA,CAAC,KAAK,CAAC,uBAAuB,CA5BL,WA4BiB;AACxC,cAAY;AACd;","names":[]}
1
+ {"version":3,"sources":["../src/styles.css"],"sourcesContent":["/* @particle-academy/fancy-code — editor styles */\n\n/* Monospace font for code */\n[data-fancy-code-panel] textarea,\n[data-fancy-code-panel] pre,\n[data-fancy-code-panel] code {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace;\n}\n\n/* Textarea and overlay must share identical text rendering */\n[data-fancy-code-panel] textarea,\n[data-fancy-code-panel] pre {\n font-size: 13px;\n line-height: 1.5;\n letter-spacing: normal;\n word-spacing: normal;\n font-variant-ligatures: none;\n}\n\n/* Remove default textarea styling */\n[data-fancy-code-panel] textarea {\n white-space: pre;\n overflow-wrap: normal;\n word-break: normal;\n}\n\n/* Scrollbar styling */\n[data-fancy-code-panel]::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n[data-fancy-code-panel]::-webkit-scrollbar-track {\n background: transparent;\n}\n\n[data-fancy-code-panel]::-webkit-scrollbar-thumb {\n background: #a1a1aa;\n border-radius: 4px;\n}\n\n.dark [data-fancy-code-panel]::-webkit-scrollbar-thumb {\n background: #52525b;\n}\n"],"mappings":";AAGA,CAAC,uBAAuB;AACxB,CAAC,uBAAuB;AACxB,CAAC,uBAAuB;AACtB;AAAA,IAAa,YAAY;AAAA,IAAE,cAAc;AAAA,IAAE,SAAS;AAAA,IAAE,KAAK;AAAA,IAAE,QAAQ;AAAA,IAAE,iBAAiB;AAAA,IAAE;AAC5F;AAGA,CAAC,uBAAuB;AACxB,CAAC,uBAAuB;AACtB,aAAW;AACX,eAAa;AACb,kBAAgB;AAChB,gBAAc;AACd,0BAAwB;AAC1B;AAGA,CAAC,uBAAuB;AACtB,eAAa;AACb,iBAAe;AACf,cAAY;AACd;AAGA,CAAC,sBAAsB;AACrB,SAAO;AACP,UAAQ;AACV;AAEA,CAAC,sBAAsB;AACrB,cAAY;AACd;AAEA,CAAC,sBAAsB;AACrB,cAAY;AACZ,iBAAe;AACjB;AAEA,CAAC,KAAK,CAAC,sBAAsB;AAC3B,cAAY;AACd;","names":[]}
package/package.json CHANGED
@@ -1,71 +1,61 @@
1
- {
2
- "name": "@particle-academy/fancy-code",
3
- "version": "0.1.1",
4
- "description": "Lightweight embedded code editor component built on CodeMirror 6",
5
- "type": "module",
6
- "main": "./dist/index.cjs",
7
- "module": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "import": {
12
- "types": "./dist/index.d.ts",
13
- "default": "./dist/index.js"
14
- },
15
- "require": {
16
- "types": "./dist/index.d.cts",
17
- "default": "./dist/index.cjs"
18
- }
19
- },
20
- "./styles.css": "./dist/styles.css"
21
- },
22
- "files": [
23
- "dist",
24
- "README.md"
25
- ],
26
- "scripts": {
27
- "build": "tsup",
28
- "dev": "tsup --watch",
29
- "lint": "tsc --noEmit",
30
- "clean": "rm -rf dist",
31
- "prepublishOnly": "tsup"
32
- },
33
- "peerDependencies": {
34
- "react": "^18.0.0 || ^19.0.0",
35
- "react-dom": "^18.0.0 || ^19.0.0",
36
- "@particle-academy/react-fancy": "^1.5.0"
37
- },
38
- "dependencies": {
39
- "@codemirror/autocomplete": "^6.0.0",
40
- "@codemirror/commands": "^6.0.0",
41
- "@codemirror/lang-html": "^6.0.0",
42
- "@codemirror/lang-javascript": "^6.0.0",
43
- "@codemirror/lang-php": "^6.0.0",
44
- "@codemirror/language": "^6.0.0",
45
- "@codemirror/search": "^6.0.0",
46
- "@codemirror/state": "^6.0.0",
47
- "@codemirror/view": "^6.0.0",
48
- "@lezer/highlight": "^1.0.0"
49
- },
50
- "devDependencies": {
51
- "@particle-academy/react-fancy": "workspace:*",
52
- "@types/react": "^19.0.0",
53
- "@types/react-dom": "^19.0.0",
54
- "react": "^19.0.0",
55
- "react-dom": "^19.0.0",
56
- "tsup": "^8.5.0",
57
- "typescript": "^5.8.0"
58
- },
59
- "publishConfig": {
60
- "access": "public"
61
- },
62
- "license": "MIT",
63
- "sideEffects": [
64
- "**/*.css",
65
- "src/languages/builtin.ts",
66
- "src/languages/index.ts",
67
- "src/themes/light.ts",
68
- "src/themes/dark.ts",
69
- "src/themes/index.ts"
70
- ]
71
- }
1
+ {
2
+ "name": "@particle-academy/fancy-code",
3
+ "version": "0.2.0",
4
+ "description": "Lightweight embedded code editor with syntax highlighting and extensible language/theme registries",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "require": {
16
+ "types": "./dist/index.d.cts",
17
+ "default": "./dist/index.cjs"
18
+ }
19
+ },
20
+ "./styles.css": "./dist/styles.css"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md"
25
+ ],
26
+ "scripts": {
27
+ "build": "tsup",
28
+ "dev": "tsup --watch",
29
+ "lint": "tsc --noEmit",
30
+ "clean": "rm -rf dist",
31
+ "prepublishOnly": "tsup"
32
+ },
33
+ "peerDependencies": {
34
+ "react": "^18.0.0 || ^19.0.0",
35
+ "react-dom": "^18.0.0 || ^19.0.0",
36
+ "@particle-academy/react-fancy": "^1.5.0"
37
+ },
38
+ "dependencies": {},
39
+ "devDependencies": {
40
+ "@particle-academy/react-fancy": "workspace:*",
41
+ "@types/react": "^19.0.0",
42
+ "@types/react-dom": "^19.0.0",
43
+ "react": "^19.0.0",
44
+ "react-dom": "^19.0.0",
45
+ "tsup": "^8.5.0",
46
+ "typescript": "^5.8.0"
47
+ },
48
+ "publishConfig": {
49
+ "access": "public"
50
+ },
51
+ "license": "MIT",
52
+ "sideEffects": [
53
+ "**/*.css",
54
+ "src/languages/builtin.ts",
55
+ "src/languages/index.ts",
56
+ "src/engine/**/*.ts",
57
+ "src/themes/light.ts",
58
+ "src/themes/dark.ts",
59
+ "src/themes/index.ts"
60
+ ]
61
+ }