@octaviaflow/core 3.1.0-beta.113 → 3.1.0-beta.115
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/chunk-75JAQ4ZG.js +2694 -0
- package/dist/chunk-75JAQ4ZG.js.map +1 -0
- package/dist/chunk-LQVPNIO5.js +6789 -0
- package/dist/chunk-LQVPNIO5.js.map +1 -0
- package/dist/chunk-P46JGJC2.js +5619 -0
- package/dist/chunk-P46JGJC2.js.map +1 -0
- package/dist/chunk-ZALBYWCU.js +1547 -0
- package/dist/chunk-ZALBYWCU.js.map +1 -0
- package/dist/components/Accordion/Accordion.d.ts.map +1 -1
- package/dist/components/AgentAppMark/AgentAppMark.d.ts +28 -0
- package/dist/components/AgentAppMark/AgentAppMark.d.ts.map +1 -0
- package/dist/components/AgentAppMark/index.d.ts +3 -0
- package/dist/components/AgentAppMark/index.d.ts.map +1 -0
- package/dist/components/AgentCard/AgentCard.d.ts.map +1 -1
- package/dist/components/AlertCard/AlertCard.d.ts.map +1 -1
- package/dist/components/AuthCard/AuthCard.d.ts.map +1 -1
- package/dist/components/AuthScreen/AuthScreen.d.ts.map +1 -1
- package/dist/components/Badge/Badge.d.ts.map +1 -1
- package/dist/components/Banner/Banner.d.ts.map +1 -1
- package/dist/components/BarChart/BarChart.d.ts.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/components/CalendarHeatmap/CalendarHeatmap.d.ts.map +1 -1
- package/dist/components/CalendarHeatmap/index.d.ts +1 -1
- package/dist/components/CalendarHeatmap/index.d.ts.map +1 -1
- package/dist/components/Callout/Callout.d.ts.map +1 -1
- package/dist/components/Card/Card.d.ts.map +1 -1
- package/dist/components/Catalog/Catalog.d.ts.map +1 -1
- package/dist/components/Catalog/index.d.ts +1 -1
- package/dist/components/Catalog/index.d.ts.map +1 -1
- package/dist/components/ChatAttachment/ChatAttachment.d.ts.map +1 -1
- package/dist/components/ChatAttachment/index.d.ts +1 -1
- package/dist/components/ChatAttachment/index.d.ts.map +1 -1
- package/dist/components/ChatBubble/ChatBubble.d.ts.map +1 -1
- package/dist/components/ChatCodeBlock/ChatCodeBlock.d.ts.map +1 -1
- package/dist/components/ChatDayDivider/ChatDayDivider.d.ts.map +1 -1
- package/dist/components/ChatFeedback/ChatFeedback.d.ts.map +1 -1
- package/dist/components/ChatPanel/ChatPanel.d.ts +1 -1
- package/dist/components/ChatPanel/ChatPanel.d.ts.map +1 -1
- package/dist/components/ChatScrollToBottom/ChatScrollToBottom.d.ts.map +1 -1
- package/dist/components/ChatSources/ChatSources.d.ts.map +1 -1
- package/dist/components/ChatSources/index.d.ts +1 -1
- package/dist/components/ChatSources/index.d.ts.map +1 -1
- package/dist/components/ChatSuggestions/ChatSuggestions.d.ts.map +1 -1
- package/dist/components/ChatSuggestions/index.d.ts +1 -1
- package/dist/components/ChatSuggestions/index.d.ts.map +1 -1
- package/dist/components/ChatThinking/ChatThinking.d.ts.map +1 -1
- package/dist/components/ChatThinking/index.d.ts +1 -1
- package/dist/components/ChatThinking/index.d.ts.map +1 -1
- package/dist/components/ChatThread/ChatThread.d.ts.map +1 -1
- package/dist/components/ChatThread/index.d.ts +1 -1
- package/dist/components/ChatThread/index.d.ts.map +1 -1
- package/dist/components/ChatToolTrace/ChatToolTrace.d.ts.map +1 -1
- package/dist/components/ChatToolTrace/index.d.ts +1 -1
- package/dist/components/ChatToolTrace/index.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Chip/Chip.d.ts.map +1 -1
- package/dist/components/ChoiceCard/ChoiceCard.d.ts.map +1 -1
- package/dist/components/Coachmark/Coachmark.d.ts.map +1 -1
- package/dist/components/CodeEditor/CodeEditor.d.ts +15 -0
- package/dist/components/CodeEditor/CodeEditor.d.ts.map +1 -1
- package/dist/components/ColorPicker/ColorPicker.d.ts.map +1 -1
- package/dist/components/Combobox/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox/index.d.ts +1 -1
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
- package/dist/components/ConfigPanel/ConfigPanel.d.ts.map +1 -1
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -1
- package/dist/components/ConnectorCard/ConnectorCard.d.ts.map +1 -1
- package/dist/components/ConnectorCard/index.d.ts +1 -1
- package/dist/components/ConnectorCard/index.d.ts.map +1 -1
- package/dist/components/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/components/CountUp/CountUp.d.ts.map +1 -1
- package/dist/components/CsvViewer/CsvViewer.d.ts.map +1 -1
- package/dist/components/DataMapper/DataMapper.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.d.ts.map +1 -1
- package/dist/components/DatasetCard/DatasetCard.d.ts.map +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/components/DescriptionList/DescriptionList.d.ts.map +1 -1
- package/dist/components/Dialog/Dialog.d.ts +7 -0
- package/dist/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/components/Divider/Divider.d.ts.map +1 -1
- package/dist/components/DonutChart/DonutChart.d.ts.map +1 -1
- package/dist/components/Drawer/Drawer.d.ts.map +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/components/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/components/ExecutionConsole/ExecutionConsole.d.ts.map +1 -1
- package/dist/components/ExpressionField/ExpressionField.d.ts +21 -3
- package/dist/components/ExpressionField/ExpressionField.d.ts.map +1 -1
- package/dist/components/ExpressionField/dataRefTokens.d.ts +52 -0
- package/dist/components/ExpressionField/dataRefTokens.d.ts.map +1 -0
- package/dist/components/ExpressionField/index.d.ts +3 -2
- package/dist/components/ExpressionField/index.d.ts.map +1 -1
- package/dist/components/FeatureCard/FeatureCard.d.ts.map +1 -1
- package/dist/components/FieldPicker/FieldPicker.d.ts.map +1 -1
- package/dist/components/FieldPicker/index.d.ts +1 -1
- package/dist/components/FieldPicker/index.d.ts.map +1 -1
- package/dist/components/FileBrowser/FileBrowser.d.ts.map +1 -1
- package/dist/components/FileDropzone/FileDropzone.d.ts.map +1 -1
- package/dist/components/FileList/FileList.d.ts.map +1 -1
- package/dist/components/FilePicker/FilePicker.d.ts +6 -1
- package/dist/components/FilePicker/FilePicker.d.ts.map +1 -1
- package/dist/components/FileViewer/FileViewer.d.ts.map +1 -1
- package/dist/components/FlowMinimap/FlowMinimap.d.ts.map +1 -1
- package/dist/components/Gauge/Gauge.d.ts.map +1 -1
- package/dist/components/Grid/Grid.d.ts.map +1 -1
- package/dist/components/GroupByBuilder/index.d.ts +1 -1
- package/dist/components/GroupByBuilder/index.d.ts.map +1 -1
- package/dist/components/Heatmap/Heatmap.d.ts.map +1 -1
- package/dist/components/IconCard/IconCard.d.ts.map +1 -1
- package/dist/components/InlineMessage/InlineMessage.d.ts.map +1 -1
- package/dist/components/IntegrationCard/IntegrationCard.d.ts.map +1 -1
- package/dist/components/ItemDetail/ItemDetail.d.ts.map +1 -1
- package/dist/components/ItemDetail/index.d.ts +1 -1
- package/dist/components/ItemDetail/index.d.ts.map +1 -1
- package/dist/components/JsonViewer/JsonViewer.d.ts.map +1 -1
- package/dist/components/Kbd/Kbd.d.ts.map +1 -1
- package/dist/components/KeyValueEditor/KeyValueEditor.d.ts +22 -1
- package/dist/components/KeyValueEditor/KeyValueEditor.d.ts.map +1 -1
- package/dist/components/KeyValueEditor/index.d.ts +1 -1
- package/dist/components/KeyValueEditor/index.d.ts.map +1 -1
- package/dist/components/LinkButton/LinkButton.d.ts.map +1 -1
- package/dist/components/MetricCard/MetricCard.d.ts.map +1 -1
- package/dist/components/MonacoEditor/MonacoDiffEditor.d.ts.map +1 -1
- package/dist/components/MonacoEditor/MonacoEditor.d.ts.map +1 -1
- package/dist/components/MultiSelect/MultiSelect.d.ts.map +1 -1
- package/dist/components/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/components/OnboardingFlow/OnboardingFlow.d.ts.map +1 -1
- package/dist/components/OrgSwitcher/OrgSwitcher.d.ts.map +1 -1
- package/dist/components/PageHeader/PageHeader.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/PasswordInput/PasswordInput.d.ts.map +1 -1
- package/dist/components/PhoneInput/PhoneInput.d.ts.map +1 -1
- package/dist/components/PhoneInput/countries.d.ts.map +1 -1
- package/dist/components/PhoneInput/index.d.ts +1 -1
- package/dist/components/PhoneInput/index.d.ts.map +1 -1
- package/dist/components/PipelineCard/PipelineCard.d.ts +1 -1
- package/dist/components/PipelineCard/PipelineCard.d.ts.map +1 -1
- package/dist/components/PlanCard/PlanCard.d.ts.map +1 -1
- package/dist/components/PlanPicker/PlanPicker.d.ts.map +1 -1
- package/dist/components/PlanPicker/context.d.ts.map +1 -1
- package/dist/components/PresenceBar/PresenceBar.d.ts +11 -0
- package/dist/components/PresenceBar/PresenceBar.d.ts.map +1 -1
- package/dist/components/PricingCard/PricingCard.d.ts.map +1 -1
- package/dist/components/ProductCard/ProductCard.d.ts.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/components/ProgressRing/ProgressRing.d.ts.map +1 -1
- package/dist/components/PromptInput/PromptInput.d.ts.map +1 -1
- package/dist/components/Quote/Quote.d.ts.map +1 -1
- package/dist/components/Radio/Radio.d.ts.map +1 -1
- package/dist/components/Radio/RadioGroup.d.ts.map +1 -1
- package/dist/components/RangeSlider/RangeSlider.d.ts.map +1 -1
- package/dist/components/Rating/BinaryRating.d.ts.map +1 -1
- package/dist/components/Rating/Rating.d.ts.map +1 -1
- package/dist/components/Rating/index.d.ts +1 -1
- package/dist/components/Rating/index.d.ts.map +1 -1
- package/dist/components/Resizable/Resizable.d.ts.map +1 -1
- package/dist/components/Ribbon/Ribbon.d.ts.map +1 -1
- package/dist/components/Sankey/Sankey.d.ts.map +1 -1
- package/dist/components/ScheduleBuilder/ScheduleBuilder.d.ts.map +1 -1
- package/dist/components/ScheduleBuilder/index.d.ts +1 -1
- package/dist/components/ScheduleBuilder/index.d.ts.map +1 -1
- package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Sheet/Sheet.d.ts +9 -1
- package/dist/components/Sheet/Sheet.d.ts.map +1 -1
- package/dist/components/Show/Show.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/SlideoutPanel/SlideoutPanel.d.ts.map +1 -1
- package/dist/components/Slider/Slider.d.ts.map +1 -1
- package/dist/components/SocialButton/SocialButton.d.ts.map +1 -1
- package/dist/components/SortBuilder/index.d.ts +1 -1
- package/dist/components/SortBuilder/index.d.ts.map +1 -1
- package/dist/components/Sortable/Sortable.d.ts.map +1 -1
- package/dist/components/Sparkline/Sparkline.d.ts.map +1 -1
- package/dist/components/Spinner/Spinner.d.ts.map +1 -1
- package/dist/components/Spotlight/Spotlight.d.ts.map +1 -1
- package/dist/components/Stack/Stack.d.ts.map +1 -1
- package/dist/components/Stat/Stat.d.ts.map +1 -1
- package/dist/components/StatusList/StatusList.d.ts +1 -1
- package/dist/components/StatusList/StatusList.d.ts.map +1 -1
- package/dist/components/StatusList/index.d.ts +1 -1
- package/dist/components/StatusList/index.d.ts.map +1 -1
- package/dist/components/StatusTiles/StatusTiles.d.ts.map +1 -1
- package/dist/components/StatusTiles/index.d.ts +1 -1
- package/dist/components/StatusTiles/index.d.ts.map +1 -1
- package/dist/components/Stepper/Stepper.d.ts.map +1 -1
- package/dist/components/Switch/Switch.d.ts.map +1 -1
- package/dist/components/Table/Table.d.ts.map +1 -1
- package/dist/components/TagsInput/TagsInput.d.ts.map +1 -1
- package/dist/components/TemplateDetail/TemplateDetail.d.ts +92 -0
- package/dist/components/TemplateDetail/TemplateDetail.d.ts.map +1 -0
- package/dist/components/TemplateDetail/index.d.ts +2 -0
- package/dist/components/TemplateDetail/index.d.ts.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts.map +1 -1
- package/dist/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/components/Timeline/Timeline.d.ts.map +1 -1
- package/dist/components/TimezonePicker/TimezonePicker.d.ts.map +1 -1
- package/dist/components/Toggle/Toggle.d.ts.map +1 -1
- package/dist/components/ToolCard/ToolCard.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/TraceStep/TraceStep.d.ts.map +1 -1
- package/dist/components/TreeView/TreeView.d.ts.map +1 -1
- package/dist/components/TreeView/index.d.ts +1 -1
- package/dist/components/TreeView/index.d.ts.map +1 -1
- package/dist/components/UsageMeter/UsageMeter.d.ts.map +1 -1
- package/dist/components/VersionHistory/VersionHistory.d.ts.map +1 -1
- package/dist/components/VersionHistory/index.d.ts +1 -1
- package/dist/components/VersionHistory/index.d.ts.map +1 -1
- package/dist/components/XmlViewer/XmlViewer.d.ts.map +1 -1
- package/dist/components/YamlViewer/YamlViewer.d.ts.map +1 -1
- package/dist/email/emailPalette.d.ts.map +1 -1
- package/dist/email/emailSystem.d.ts +3 -3
- package/dist/email/emailSystem.d.ts.map +1 -1
- package/dist/email/emailTemplates.d.ts +1 -1
- package/dist/email/emailTemplates.d.ts.map +1 -1
- package/dist/hooks/useRating.d.ts.map +1 -1
- package/dist/hooks/useTextareaCommands.d.ts.map +1 -1
- package/dist/hooks/useTextareaSelection.d.ts.map +1 -1
- package/dist/hooks/useTextareaTools.d.ts.map +1 -1
- package/dist/hooks/useTraceTimeline.d.ts.map +1 -1
- package/dist/index.cjs +17176 -18061
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13603 -15501
- package/dist/index.js.map +1 -1
- package/dist/marketing.cjs +580 -726
- package/dist/marketing.cjs.map +1 -1
- package/dist/marketing.js +2 -2
- package/dist/monaco.cjs +364 -389
- package/dist/monaco.cjs.map +1 -1
- package/dist/monaco.js +381 -410
- package/dist/monaco.js.map +1 -1
- package/dist/notifications/components/NotificationBell/NotificationBell.d.ts.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utils/Slot.d.ts.map +1 -1
- package/dist/utils/gradients.d.ts.map +1 -1
- package/dist/utils/useAnchoredPopover.d.ts +8 -1
- package/dist/utils/useAnchoredPopover.d.ts.map +1 -1
- package/dist/workflow/components/ConfigPanel/ConfigPanel.d.ts.map +1 -1
- package/dist/workflow/components/FlowNode/FlowNode.d.ts.map +1 -1
- package/dist/workflow/components/FxPanel/DataRefButton.d.ts +1 -1
- package/dist/workflow/components/FxPanel/DataRefButton.d.ts.map +1 -1
- package/dist/workflow/components/FxPanel/FxPanel.d.ts.map +1 -1
- package/dist/workflow/editor.d.ts +22 -0
- package/dist/workflow/editor.d.ts.map +1 -1
- package/dist/workflow/index.d.ts +6 -6
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/types.d.ts.map +1 -1
- package/dist/workflow.cjs +10310 -9355
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.js +1932 -1963
- package/dist/workflow.js.map +1 -1
- package/package.json +2 -2
package/dist/monaco.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/monaco.ts","../src/components/MonacoEditor/MonacoDiffEditor.tsx","../src/utils/cn.ts","../src/components/MonacoEditor/octaviaflowTheme.ts","../src/components/MonacoEditor/MonacoEditor.tsx"],"sourcesContent":["// `@octaviaflow/core/monaco` — opt-in entry for the Monaco-based editor\n// components. Pulled into a consumer's bundle only when explicitly imported,\n// so the rest of @octaviaflow/core stays free of any `@monaco-editor/react`\n// peer-dep dependency.\n//\n// Usage:\n// import { MonacoEditor, MonacoDiffEditor } from \"@octaviaflow/core/monaco\";\n//\n// Required peer deps when this subpath is used:\n// - @monaco-editor/react\n// - monaco-editor\n//\n// Lazy-loading is still preserved inside the editor components themselves —\n// the actual `@monaco-editor/react` import happens only when the editor first\n// renders, not at module-evaluation time.\n\nexport {\n MonacoDiffEditor,\n type MonacoDiffEditorHandle,\n type MonacoDiffEditorProps,\n MonacoEditor,\n type MonacoEditorHandle,\n type MonacoEditorProps,\n type MonacoLanguage,\n type MonacoMarker,\n OCTAVIAFLOW_LIGHT,\n OCTAVIAFLOW_THEME_ID,\n} from \"./components/MonacoEditor\";\n","\"use client\";\n// Same lazy-load rationale as MonacoEditor.tsx — keep Monaco out of the\n// synchronous module graph so consumers without @monaco-editor/react can\n// still import @octaviaflow/core safely.\nimport type { Monaco } from \"@monaco-editor/react\";\nimport type { editor } from \"monaco-editor\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n lazy,\n type ReactNode,\n Suspense,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport {\n RenewIcon,\n SplitIcon,\n SquareOutlineIcon,\n} from \"@octaviaflow/icons\";\nimport { cn } from \"../../utils/cn\";\nimport type { MonacoLanguage } from \"./MonacoEditor\";\nimport { OCTAVIAFLOW_LIGHT, OCTAVIAFLOW_THEME_ID } from \"./octaviaflowTheme\";\n\nconst DiffEditor = lazy(() =>\n import(\"@monaco-editor/react\").then((mod) => ({ default: mod.DiffEditor })),\n);\n\n/* ---------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/** Imperative handle returned via `ref` — gives consumers programmatic\n * access to both sides of the diff without exposing the lazy-loaded\n * module type to their build graph. */\nexport interface MonacoDiffEditorHandle {\n /** Move keyboard focus to the modified-side editor. */\n focus(): void;\n /** Access the raw Monaco diff editor (null until mounted). */\n getDiffEditor(): editor.IStandaloneDiffEditor | null;\n /** Access the Monaco namespace (null until mounted). */\n getMonaco(): Monaco | null;\n /** Read the original-side value. */\n getOriginalValue(): string;\n /** Read the modified-side value. */\n getModifiedValue(): string;\n /** Replace the modified-side value. */\n setModifiedValue(value: string): void;\n}\n\ntype DivPropsBase = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onChange\" | \"children\"\n>;\n\nexport interface MonacoDiffEditorProps extends DivPropsBase {\n original: string;\n modified: string;\n onModifiedChange?: (value: string) => void;\n language?: MonacoLanguage;\n /** Side-by-side vs inline diff. Default \"side-by-side\". */\n renderSideBySide?: boolean;\n /** Read-only on the right side. Default false. */\n readOnly?: boolean;\n /** Show only changed regions. */\n hideUnchangedRegions?: boolean;\n /** Editor height. Default 360. */\n height?: number | string;\n minHeight?: number;\n /** Labels above each side. */\n originalLabel?: ReactNode;\n modifiedLabel?: ReactNode;\n toolbar?: ReactNode;\n /** Pass-through Monaco diff editor options. */\n options?: editor.IDiffEditorConstructionOptions;\n onMount?: (\n editor: editor.IStandaloneDiffEditor,\n monaco: Monaco,\n ) => void;\n theme?: string;\n hideToolbar?: boolean;\n}\n\n/* ---------------------------------------------------------------------------\n * Helpers\n * ------------------------------------------------------------------------- */\n\nfunction LoadingPlaceholder() {\n return (\n <div className=\"ods-monaco__loading\">\n <span className=\"ods-monaco__loading-spin\" aria-hidden=\"true\">\n <RenewIcon />\n </span>\n <span>Loading diff…</span>\n </div>\n );\n}\n\n/* ---------------------------------------------------------------------------\n * Component\n * ------------------------------------------------------------------------- */\n\nexport const MonacoDiffEditor = forwardRef<\n MonacoDiffEditorHandle,\n MonacoDiffEditorProps\n>(function MonacoDiffEditor(\n {\n original,\n modified,\n onModifiedChange,\n language = \"plaintext\",\n renderSideBySide = true,\n readOnly = false,\n hideUnchangedRegions = false,\n height = 360,\n minHeight = 200,\n originalLabel = \"Original\",\n modifiedLabel = \"Modified\",\n toolbar,\n options,\n onMount,\n className,\n theme,\n hideToolbar = false,\n ...rest\n },\n ref,\n) {\n const editorRef = useRef<editor.IStandaloneDiffEditor | null>(null);\n const monacoRef = useRef<Monaco | null>(null);\n const [sideBySide, setSideBySide] = useState(renderSideBySide);\n\n useImperativeHandle(\n ref,\n (): MonacoDiffEditorHandle => ({\n focus: () => editorRef.current?.getModifiedEditor().focus(),\n getDiffEditor: () => editorRef.current,\n getMonaco: () => monacoRef.current,\n getOriginalValue: () =>\n editorRef.current?.getOriginalEditor().getValue() ?? \"\",\n getModifiedValue: () =>\n editorRef.current?.getModifiedEditor().getValue() ?? \"\",\n setModifiedValue: (v: string) =>\n editorRef.current?.getModifiedEditor().setValue(v),\n }),\n [],\n );\n\n const handleMount = (\n diffEditor: editor.IStandaloneDiffEditor,\n monaco: Monaco,\n ) => {\n editorRef.current = diffEditor;\n monacoRef.current = monaco;\n monaco.editor.defineTheme(OCTAVIAFLOW_THEME_ID, OCTAVIAFLOW_LIGHT);\n monaco.editor.setTheme(theme ?? OCTAVIAFLOW_THEME_ID);\n\n const modifiedEditor = diffEditor.getModifiedEditor();\n modifiedEditor.onDidChangeModelContent(() => {\n onModifiedChange?.(modifiedEditor.getValue());\n });\n\n onMount?.(diffEditor, monaco);\n };\n\n const mergedOptions: editor.IDiffEditorConstructionOptions = {\n readOnly,\n originalEditable: false,\n renderSideBySide: sideBySide,\n fontFamily:\n \"ui-monospace, SFMono-Regular, 'JetBrains Mono', 'Fira Code', Menlo, Consolas, monospace\",\n fontSize: 13,\n lineHeight: 20,\n automaticLayout: true,\n lineNumbersMinChars: 3,\n lineDecorationsWidth: 6,\n folding: true,\n glyphMargin: false,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n smoothScrolling: true,\n renderOverviewRuler: true,\n diffWordWrap: \"off\",\n padding: { top: 8, bottom: 8 },\n hideUnchangedRegions: {\n enabled: hideUnchangedRegions,\n revealLineCount: 20,\n minimumLineCount: 3,\n contextLineCount: 3,\n },\n scrollbar: {\n verticalScrollbarSize: 8,\n horizontalScrollbarSize: 8,\n useShadows: false,\n },\n ...options,\n };\n\n return (\n <div\n {...rest}\n className={cn(\n \"ods-monaco-diff\",\n `ods-monaco-diff--${language}`,\n className,\n )}\n >\n {!hideToolbar && (\n <div className=\"ods-monaco__toolbar\">\n <div className=\"ods-monaco__toolbar-left\">\n <span className=\"ods-monaco__lang\">\n DIFF · {language.toUpperCase()}\n </span>\n <span className=\"ods-monaco-diff__labels\">\n <span className=\"ods-monaco-diff__label ods-monaco-diff__label--orig\">\n {originalLabel}\n </span>\n <span className=\"ods-monaco-diff__arrow\" aria-hidden=\"true\">\n →\n </span>\n <span className=\"ods-monaco-diff__label ods-monaco-diff__label--mod\">\n {modifiedLabel}\n </span>\n </span>\n {toolbar}\n </div>\n <div className=\"ods-monaco__toolbar-right\">\n <button\n type=\"button\"\n className={cn(\n \"ods-monaco__btn\",\n sideBySide && \"ods-monaco__btn--active\",\n )}\n onClick={() => setSideBySide((s) => !s)}\n aria-pressed={sideBySide}\n aria-label={\n sideBySide ? \"Switch to inline diff\" : \"Switch to side-by-side\"\n }\n title={sideBySide ? \"Inline\" : \"Side-by-side\"}\n >\n {sideBySide ? <SplitIcon /> : <SquareOutlineIcon />}\n </button>\n </div>\n </div>\n )}\n\n <div className=\"ods-monaco__body\" style={{ minHeight }}>\n <Suspense fallback={<LoadingPlaceholder />}>\n <DiffEditor\n original={original}\n modified={modified}\n language={language}\n height={height}\n theme={theme ?? OCTAVIAFLOW_THEME_ID}\n options={mergedOptions}\n onMount={handleMount}\n loading={<LoadingPlaceholder />}\n />\n </Suspense>\n </div>\n </div>\n );\n});\n\nMonacoDiffEditor.displayName = \"MonacoDiffEditor\";\n","import { type ClassValue, clsx } from \"clsx\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return clsx(inputs);\n}\n","import type { editor } from \"monaco-editor\";\n\n/**\n * OctaviaFlow v1 Monaco theme — light, Linear-tight, accent-driven.\n * Hex values mirror the canonical v1 tokens (see packages/styles/src/02-tokens/_v1.scss).\n */\nexport const OCTAVIAFLOW_LIGHT: editor.IStandaloneThemeData = {\n base: \"vs\",\n inherit: true,\n rules: [\n { token: \"\", foreground: \"161616\", background: \"FFFFFF\" },\n { token: \"comment\", foreground: \"6F6F6F\", fontStyle: \"italic\" },\n { token: \"string\", foreground: \"198038\" },\n { token: \"string.key.json\", foreground: \"0F62FE\" },\n { token: \"string.value.json\", foreground: \"198038\" },\n { token: \"number\", foreground: \"0043CE\" },\n { token: \"keyword\", foreground: \"8A3FFC\" },\n { token: \"keyword.sql\", foreground: \"8A3FFC\" },\n { token: \"operator\", foreground: \"393939\" },\n { token: \"delimiter\", foreground: \"525252\" },\n { token: \"type\", foreground: \"0F62FE\" },\n { token: \"type.identifier\", foreground: \"0F62FE\" },\n { token: \"identifier\", foreground: \"161616\" },\n { token: \"constant\", foreground: \"0043CE\" },\n { token: \"boolean\", foreground: \"F1C21B\", fontStyle: \"bold\" },\n { token: \"tag\", foreground: \"DA1E28\" },\n { token: \"attribute.name\", foreground: \"8A3FFC\" },\n { token: \"attribute.value\", foreground: \"198038\" },\n { token: \"regexp\", foreground: \"DA1E28\" },\n { token: \"function\", foreground: \"0F62FE\" },\n { token: \"variable\", foreground: \"161616\" },\n { token: \"variable.parameter\", foreground: \"393939\", fontStyle: \"italic\" },\n { token: \"namespace\", foreground: \"0F62FE\" },\n ],\n colors: {\n \"editor.background\": \"#FFFFFF\",\n \"editor.foreground\": \"#161616\",\n \"editor.lineHighlightBackground\": \"#F4F4F4\",\n \"editor.lineHighlightBorder\": \"#00000000\",\n \"editorLineNumber.foreground\": \"#A8A8A8\",\n \"editorLineNumber.activeForeground\": \"#0F62FE\",\n \"editorCursor.foreground\": \"#0F62FE\",\n \"editor.selectionBackground\": \"#D0E2FF\",\n \"editor.selectionHighlightBackground\": \"#EDF5FF\",\n \"editor.wordHighlightBackground\": \"#EDF5FF\",\n \"editor.wordHighlightStrongBackground\": \"#D0E2FF\",\n \"editor.findMatchBackground\": \"#FFD7D9\",\n \"editor.findMatchHighlightBackground\": \"#FFE9EB\",\n \"editorIndentGuide.background1\": \"#F4F4F4\",\n \"editorIndentGuide.activeBackground1\": \"#E0E0E0\",\n \"editorWhitespace.foreground\": \"#E0E0E0\",\n \"editorBracketMatch.background\": \"#D0E2FF\",\n \"editorBracketMatch.border\": \"#0F62FE\",\n \"editor.foldBackground\": \"#F4F4F4\",\n\n \"editorGutter.background\": \"#F4F4F4\",\n \"editorGutter.modifiedBackground\": \"#0F62FE\",\n \"editorGutter.addedBackground\": \"#198038\",\n \"editorGutter.deletedBackground\": \"#DA1E28\",\n\n \"editorWidget.background\": \"#FFFFFF\",\n \"editorWidget.foreground\": \"#161616\",\n \"editorWidget.border\": \"#E0E0E0\",\n \"editorSuggestWidget.background\": \"#FFFFFF\",\n \"editorSuggestWidget.border\": \"#E0E0E0\",\n \"editorSuggestWidget.foreground\": \"#161616\",\n \"editorSuggestWidget.selectedBackground\": \"#EDF5FF\",\n \"editorSuggestWidget.selectedForeground\": \"#161616\",\n \"editorSuggestWidget.highlightForeground\": \"#0F62FE\",\n\n \"editorHoverWidget.background\": \"#FFFFFF\",\n \"editorHoverWidget.border\": \"#E0E0E0\",\n\n \"editorError.foreground\": \"#DA1E28\",\n \"editorWarning.foreground\": \"#F1C21B\",\n \"editorInfo.foreground\": \"#0F62FE\",\n\n \"diffEditor.insertedTextBackground\": \"#A7F0BA40\",\n \"diffEditor.removedTextBackground\": \"#FFB3B840\",\n \"diffEditor.insertedLineBackground\": \"#DEFBE640\",\n \"diffEditor.removedLineBackground\": \"#FFD7D940\",\n\n \"scrollbar.shadow\": \"#00000000\",\n \"scrollbarSlider.background\": \"#0F62FE20\",\n \"scrollbarSlider.hoverBackground\": \"#0F62FE40\",\n \"scrollbarSlider.activeBackground\": \"#0F62FE60\",\n\n \"minimap.background\": \"#FAFAFA\",\n \"minimap.selectionHighlight\": \"#0F62FE\",\n \"minimapSlider.background\": \"#0F62FE15\",\n \"minimapSlider.hoverBackground\": \"#0F62FE30\",\n \"minimapSlider.activeBackground\": \"#0F62FE50\",\n\n \"input.background\": \"#FFFFFF\",\n \"input.foreground\": \"#161616\",\n \"input.border\": \"#C6C6C6\",\n \"inputOption.activeBorder\": \"#0F62FE\",\n\n focusBorder: \"#0F62FE\",\n },\n};\n\nexport const OCTAVIAFLOW_THEME_ID = \"octaviaflow-light\";\n","\"use client\";\n// IMPORTANT: `@monaco-editor/react` and `monaco-editor` are optional peer deps.\n// Consumers that don't install them must still be able to import the rest of\n// `@octaviaflow/core` without crashing. Using `React.lazy` + dynamic import\n// keeps Monaco out of the synchronous module graph — it only resolves when a\n// MonacoEditor is actually rendered, deferring the require to that moment.\n//\n// Type-only imports for `editor` and `Monaco` are erased at build time, so\n// they impose no runtime dependency.\nimport type { Monaco, OnMount } from \"@monaco-editor/react\";\nimport type { editor } from \"monaco-editor\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n lazy,\n type ReactNode,\n Suspense,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport {\n CheckmarkIcon,\n CopyIcon,\n MagicWandIcon,\n MinimapOffIcon,\n MinimapOnIcon,\n RenewIcon,\n TextWrapIcon,\n} from \"@octaviaflow/icons\";\nimport { cn } from \"../../utils/cn\";\nimport { OCTAVIAFLOW_LIGHT, OCTAVIAFLOW_THEME_ID } from \"./octaviaflowTheme\";\n\nconst Editor = lazy(() =>\n import(\"@monaco-editor/react\").then((mod) => ({ default: mod.Editor })),\n);\n\n/* ---------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\nexport type MonacoLanguage =\n | \"sql\"\n | \"json\"\n | \"javascript\"\n | \"typescript\"\n | \"tsx\"\n | \"yaml\"\n | \"xml\"\n | \"html\"\n | \"css\"\n | \"scss\"\n | \"markdown\"\n | \"python\"\n | \"go\"\n | \"rust\"\n | \"java\"\n | \"csharp\"\n | \"shell\"\n | \"plaintext\";\n\nexport interface MonacoMarker {\n /** 1-based line number. */\n line: number;\n /** 1-based column. */\n column?: number;\n /** 1-based end line. Defaults to `line`. */\n endLine?: number;\n /** 1-based end column. */\n endColumn?: number;\n severity?: \"error\" | \"warning\" | \"info\" | \"hint\";\n message: string;\n /** Optional source label, e.g. \"json-schema\". */\n source?: string;\n}\n\n/** Imperative handle returned via `ref` — gives consumers programmatic\n * access to the underlying Monaco editor without exposing the lazy-loaded\n * module type to their build graph. */\nexport interface MonacoEditorHandle {\n /** Move keyboard focus to the editor surface. */\n focus(): void;\n /** Access the raw Monaco standalone editor (null until mounted). */\n getEditor(): editor.IStandaloneCodeEditor | null;\n /** Access the Monaco namespace (null until mounted). */\n getMonaco(): Monaco | null;\n /** Current model value, or \"\" if not mounted. */\n getValue(): string;\n /** Replace the editor's value (preserves undo history when used via the\n * model's `setValue`). */\n setValue(value: string): void;\n /** Trigger the built-in `editor.action.formatDocument` action. */\n format(): void;\n}\n\ntype DivPropsBase = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onChange\" | \"onCopy\" | \"children\"\n>;\n\nexport interface MonacoEditorProps extends DivPropsBase {\n value: string;\n onChange?: (value: string) => void;\n language?: MonacoLanguage;\n /** Read-only mode. */\n readOnly?: boolean;\n /** Editor height — number (px) or any CSS length. Default 320. */\n height?: number | string;\n /** Min height when auto-sizing is disabled. */\n minHeight?: number;\n /** Custom toolbar slot above the editor. */\n toolbar?: ReactNode;\n /** Status pill on the right side of the toolbar. */\n status?: ReactNode;\n /** Hide the toolbar entirely. */\n hideToolbar?: boolean;\n /** Hide the footer (cursor pos + shortcut hints). */\n hideFooter?: boolean;\n /** Show built-in Copy button. */\n showCopy?: boolean;\n /** Show built-in Format button. Uses Monaco's `editor.action.formatDocument`. */\n showFormat?: boolean;\n /** Show built-in word-wrap toggle. */\n showWordWrapToggle?: boolean;\n /** Show built-in minimap toggle. */\n showMinimapToggle?: boolean;\n /** Initial word wrap. Default false. */\n wordWrap?: boolean;\n /** Initial minimap state. Default false (off — Linear-tight). */\n minimap?: boolean;\n /** Show line numbers. Default true. */\n showLineNumbers?: boolean;\n /** Diagnostic markers (errors, warnings, info, hints). */\n markers?: MonacoMarker[];\n /** Pass-through Monaco editor options. Merged after the defaults. */\n options?: editor.IStandaloneEditorConstructionOptions;\n /** Called once Monaco has mounted with the editor + monaco namespace. */\n onMount?: OnMount;\n /** Called after the built-in Copy button writes to the clipboard. */\n onCopy?: (value: string) => void;\n /** How long the Copy button shows the \"copied\" state. Default 1200ms. */\n copySuccessTimeoutMs?: number;\n ariaLabel?: string;\n /** Theme override. Defaults to \"octaviaflow-light\". */\n theme?: string;\n}\n\n/* ---------------------------------------------------------------------------\n * Helpers\n * ------------------------------------------------------------------------- */\n\nconst MARKER_SEVERITY: Record<Required<MonacoMarker>[\"severity\"], number> = {\n hint: 1,\n info: 2,\n warning: 4,\n error: 8,\n};\n\nfunction LoadingPlaceholder({ label }: { label: string }) {\n return (\n <div className=\"ods-monaco__loading\">\n <span className=\"ods-monaco__loading-spin\" aria-hidden=\"true\">\n <RenewIcon />\n </span>\n <span>{label}</span>\n </div>\n );\n}\n\n/* ---------------------------------------------------------------------------\n * Component\n * ------------------------------------------------------------------------- */\n\nexport const MonacoEditor = forwardRef<MonacoEditorHandle, MonacoEditorProps>(\n function MonacoEditor(\n {\n value,\n onChange,\n language = \"plaintext\",\n readOnly = false,\n height = 320,\n minHeight = 120,\n toolbar,\n status,\n hideToolbar = false,\n hideFooter = false,\n showCopy = true,\n showFormat = true,\n showWordWrapToggle = true,\n showMinimapToggle = true,\n wordWrap: wordWrapProp,\n minimap: minimapProp,\n showLineNumbers = true,\n markers,\n options,\n onMount,\n onCopy,\n copySuccessTimeoutMs = 1200,\n className,\n ariaLabel = \"Code editor\",\n theme,\n ...rest\n },\n ref,\n ) {\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const monacoRef = useRef<Monaco | null>(null);\n\n const [wordWrap, setWordWrap] = useState<boolean>(wordWrapProp ?? false);\n const [minimap, setMinimap] = useState<boolean>(minimapProp ?? false);\n const [copied, setCopied] = useState(false);\n const [cursor, setCursor] = useState({ line: 1, column: 1 });\n const [selection, setSelection] = useState({ chars: 0, lines: 0 });\n const [lineCount, setLineCount] = useState(value.split(\"\\n\").length);\n\n // Imperative handle — exposes only the surface consumers need.\n useImperativeHandle(\n ref,\n (): MonacoEditorHandle => ({\n focus: () => editorRef.current?.focus(),\n getEditor: () => editorRef.current,\n getMonaco: () => monacoRef.current,\n getValue: () => editorRef.current?.getValue() ?? \"\",\n setValue: (v: string) => editorRef.current?.setValue(v),\n format: () =>\n editorRef.current?.getAction(\"editor.action.formatDocument\")?.run(),\n }),\n [],\n );\n\n // Keep prop-driven state in sync if controlled\n useEffect(() => {\n if (wordWrapProp !== undefined) setWordWrap(wordWrapProp);\n }, [wordWrapProp]);\n useEffect(() => {\n if (minimapProp !== undefined) setMinimap(minimapProp);\n }, [minimapProp]);\n\n // Apply word wrap / minimap changes to the live editor\n useEffect(() => {\n editorRef.current?.updateOptions({\n wordWrap: wordWrap ? \"on\" : \"off\",\n minimap: { enabled: minimap },\n });\n }, [wordWrap, minimap]);\n\n // Apply markers when they change\n useEffect(() => {\n const ed = editorRef.current;\n const monaco = monacoRef.current;\n if (!ed || !monaco || !markers) return;\n const model = ed.getModel();\n if (!model) return;\n monaco.editor.setModelMarkers(\n model,\n \"octaviaflow\",\n markers.map((m) => ({\n severity: MARKER_SEVERITY[m.severity ?? \"error\"],\n message: m.message,\n startLineNumber: m.line,\n startColumn: m.column ?? 1,\n endLineNumber: m.endLine ?? m.line,\n endColumn: m.endColumn ?? (m.column ?? 1) + 1,\n source: m.source,\n })),\n );\n }, [markers]);\n\n const handleMount: OnMount = useCallback(\n (ed, monaco) => {\n editorRef.current = ed;\n monacoRef.current = monaco;\n monaco.editor.defineTheme(OCTAVIAFLOW_THEME_ID, OCTAVIAFLOW_LIGHT);\n monaco.editor.setTheme(theme ?? OCTAVIAFLOW_THEME_ID);\n\n // Cursor + selection tracking\n ed.onDidChangeCursorPosition((e) => {\n setCursor({ line: e.position.lineNumber, column: e.position.column });\n });\n ed.onDidChangeCursorSelection((e) => {\n const sel = e.selection;\n if (sel.isEmpty()) {\n setSelection({ chars: 0, lines: 0 });\n return;\n }\n const model = ed.getModel();\n if (!model) return;\n const text = model.getValueInRange(sel);\n setSelection({\n chars: text.length,\n lines: text.split(\"\\n\").length,\n });\n });\n // Track line count for footer\n const model = ed.getModel();\n if (model) {\n setLineCount(model.getLineCount());\n model.onDidChangeContent(() => setLineCount(model.getLineCount()));\n }\n\n onMount?.(ed, monaco);\n },\n [onMount, theme],\n );\n\n const handleCopy = async () => {\n if (typeof navigator === \"undefined\") return;\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n onCopy?.(value);\n setTimeout(() => setCopied(false), copySuccessTimeoutMs);\n } catch {\n /* ignore — clipboard permission denied or insecure context */\n }\n };\n\n const handleFormat = () => {\n editorRef.current?.getAction(\"editor.action.formatDocument\")?.run();\n };\n\n const mergedOptions: editor.IStandaloneEditorConstructionOptions = {\n readOnly,\n fontFamily:\n \"ui-monospace, SFMono-Regular, 'JetBrains Mono', 'Fira Code', Menlo, Consolas, monospace\",\n fontSize: 13,\n fontLigatures: true,\n lineHeight: 20,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n lineNumbersMinChars: 3,\n lineDecorationsWidth: 6,\n folding: true,\n glyphMargin: false,\n minimap: { enabled: minimap },\n wordWrap: wordWrap ? \"on\" : \"off\",\n scrollBeyondLastLine: false,\n smoothScrolling: true,\n cursorBlinking: \"smooth\",\n cursorSmoothCaretAnimation: \"on\",\n renderLineHighlight: \"line\",\n padding: { top: 8, bottom: 8 },\n bracketPairColorization: { enabled: true },\n guides: { bracketPairs: true, indentation: true },\n automaticLayout: true,\n tabSize: 2,\n insertSpaces: true,\n scrollbar: {\n verticalScrollbarSize: 8,\n horizontalScrollbarSize: 8,\n useShadows: false,\n },\n fixedOverflowWidgets: true,\n contextmenu: true,\n suggestOnTriggerCharacters: true,\n quickSuggestions: { other: true, comments: false, strings: false },\n formatOnPaste: false,\n formatOnType: false,\n \"semanticHighlighting.enabled\": true,\n ...options,\n };\n\n const showWrapBtn = showWordWrapToggle && wordWrapProp === undefined;\n const showMinimapBtn = showMinimapToggle && minimapProp === undefined;\n\n return (\n <div\n {...rest}\n className={cn(\n \"ods-monaco\",\n `ods-monaco--${language}`,\n readOnly && \"ods-monaco--readonly\",\n className,\n )}\n >\n {!hideToolbar && (\n <div className=\"ods-monaco__toolbar\">\n <div className=\"ods-monaco__toolbar-left\">\n <span className=\"ods-monaco__lang\">{language.toUpperCase()}</span>\n {toolbar}\n </div>\n <div className=\"ods-monaco__toolbar-right\">\n <span className=\"ods-monaco__lines\">\n {lineCount} line{lineCount === 1 ? \"\" : \"s\"}\n </span>\n {status && <span className=\"ods-monaco__status\">{status}</span>}\n {showWrapBtn && (\n <button\n type=\"button\"\n className={cn(\n \"ods-monaco__btn\",\n wordWrap && \"ods-monaco__btn--active\",\n )}\n onClick={() => setWordWrap((w) => !w)}\n aria-pressed={wordWrap}\n aria-label=\"Toggle word wrap\"\n title=\"Word wrap\"\n >\n <TextWrapIcon />\n </button>\n )}\n {showMinimapBtn && (\n <button\n type=\"button\"\n className={cn(\n \"ods-monaco__btn\",\n minimap && \"ods-monaco__btn--active\",\n )}\n onClick={() => setMinimap((m) => !m)}\n aria-pressed={minimap}\n aria-label=\"Toggle minimap\"\n title=\"Minimap\"\n >\n {minimap ? <MinimapOnIcon /> : <MinimapOffIcon />}\n </button>\n )}\n {showFormat && !readOnly && (\n <button\n type=\"button\"\n className=\"ods-monaco__btn\"\n onClick={handleFormat}\n aria-label=\"Format document\"\n title=\"Format (Shift+Alt+F)\"\n >\n <MagicWandIcon />\n </button>\n )}\n {showCopy && (\n <button\n type=\"button\"\n className={cn(\n \"ods-monaco__btn\",\n copied && \"ods-monaco__btn--success\",\n )}\n onClick={handleCopy}\n aria-label={copied ? \"Copied\" : \"Copy\"}\n title={copied ? \"Copied\" : \"Copy\"}\n >\n {copied ? <CheckmarkIcon /> : <CopyIcon />}\n </button>\n )}\n </div>\n </div>\n )}\n\n <div className=\"ods-monaco__body\" style={{ minHeight }}>\n <Suspense fallback={<LoadingPlaceholder label=\"Loading editor…\" />}>\n <Editor\n value={value}\n onChange={(v) => onChange?.(v ?? \"\")}\n language={language}\n height={height}\n theme={theme ?? OCTAVIAFLOW_THEME_ID}\n options={mergedOptions}\n onMount={handleMount}\n loading={<LoadingPlaceholder label=\"Loading editor…\" />}\n aria-label={ariaLabel}\n />\n </Suspense>\n </div>\n\n {!hideFooter && (\n <div className=\"ods-monaco__footer\">\n <span className=\"ods-monaco__pos\">\n Ln {cursor.line}, Col {cursor.column}\n {selection.chars > 0 && (\n <>\n {\" \"}\n · {selection.chars} char{selection.chars === 1 ? \"\" : \"s\"}\n {selection.lines > 1 && ` · ${selection.lines} lines`}\n </>\n )}\n </span>\n <span className=\"ods-monaco__shortcut-hint\">\n <kbd className=\"ods-monaco__kbd\">⌘F</kbd> find\n <span className=\"ods-monaco__sep\">·</span>\n <kbd className=\"ods-monaco__kbd\">⌘⇧F</kbd> replace\n <span className=\"ods-monaco__sep\">·</span>\n <kbd className=\"ods-monaco__kbd\">F1</kbd> commands\n </span>\n </div>\n )}\n </div>\n );\n },\n);\n\nMonacoEditor.displayName = \"MonacoEditor\";\n"],"mappings":"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","names":["MonacoDiffEditor","import_react","import_icons","import_jsx_runtime","LoadingPlaceholder","MonacoEditor","model"]}
|
|
1
|
+
{"version":3,"sources":["../src/monaco.ts","../src/components/MonacoEditor/MonacoDiffEditor.tsx","../src/utils/cn.ts","../src/components/MonacoEditor/octaviaflowTheme.ts","../src/components/MonacoEditor/MonacoEditor.tsx"],"sourcesContent":["// `@octaviaflow/core/monaco` — opt-in entry for the Monaco-based editor\n// components. Pulled into a consumer's bundle only when explicitly imported,\n// so the rest of @octaviaflow/core stays free of any `@monaco-editor/react`\n// peer-dep dependency.\n//\n// Usage:\n// import { MonacoEditor, MonacoDiffEditor } from \"@octaviaflow/core/monaco\";\n//\n// Required peer deps when this subpath is used:\n// - @monaco-editor/react\n// - monaco-editor\n//\n// Lazy-loading is still preserved inside the editor components themselves —\n// the actual `@monaco-editor/react` import happens only when the editor first\n// renders, not at module-evaluation time.\n\nexport {\n MonacoDiffEditor,\n type MonacoDiffEditorHandle,\n type MonacoDiffEditorProps,\n MonacoEditor,\n type MonacoEditorHandle,\n type MonacoEditorProps,\n type MonacoLanguage,\n type MonacoMarker,\n OCTAVIAFLOW_LIGHT,\n OCTAVIAFLOW_THEME_ID,\n} from \"./components/MonacoEditor\";\n","\"use client\";\n// Same lazy-load rationale as MonacoEditor.tsx — keep Monaco out of the\n// synchronous module graph so consumers without @monaco-editor/react can\n// still import @octaviaflow/core safely.\nimport type { Monaco } from \"@monaco-editor/react\";\nimport { RenewIcon, SplitIcon, SquareOutlineIcon } from \"@octaviaflow/icons\";\nimport type { editor } from \"monaco-editor\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n lazy,\n type ReactNode,\n Suspense,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { MonacoLanguage } from \"./MonacoEditor\";\nimport { OCTAVIAFLOW_LIGHT, OCTAVIAFLOW_THEME_ID } from \"./octaviaflowTheme\";\n\nconst DiffEditor = lazy(() =>\n import(\"@monaco-editor/react\").then((mod) => ({ default: mod.DiffEditor })),\n);\n\n/* ---------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/** Imperative handle returned via `ref` — gives consumers programmatic\n * access to both sides of the diff without exposing the lazy-loaded\n * module type to their build graph. */\nexport interface MonacoDiffEditorHandle {\n /** Move keyboard focus to the modified-side editor. */\n focus(): void;\n /** Access the raw Monaco diff editor (null until mounted). */\n getDiffEditor(): editor.IStandaloneDiffEditor | null;\n /** Access the Monaco namespace (null until mounted). */\n getMonaco(): Monaco | null;\n /** Read the original-side value. */\n getOriginalValue(): string;\n /** Read the modified-side value. */\n getModifiedValue(): string;\n /** Replace the modified-side value. */\n setModifiedValue(value: string): void;\n}\n\ntype DivPropsBase = Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\" | \"children\">;\n\nexport interface MonacoDiffEditorProps extends DivPropsBase {\n original: string;\n modified: string;\n onModifiedChange?: (value: string) => void;\n language?: MonacoLanguage;\n /** Side-by-side vs inline diff. Default \"side-by-side\". */\n renderSideBySide?: boolean;\n /** Read-only on the right side. Default false. */\n readOnly?: boolean;\n /** Show only changed regions. */\n hideUnchangedRegions?: boolean;\n /** Editor height. Default 360. */\n height?: number | string;\n minHeight?: number;\n /** Labels above each side. */\n originalLabel?: ReactNode;\n modifiedLabel?: ReactNode;\n toolbar?: ReactNode;\n /** Pass-through Monaco diff editor options. */\n options?: editor.IDiffEditorConstructionOptions;\n onMount?: (editor: editor.IStandaloneDiffEditor, monaco: Monaco) => void;\n theme?: string;\n hideToolbar?: boolean;\n}\n\n/* ---------------------------------------------------------------------------\n * Helpers\n * ------------------------------------------------------------------------- */\n\nfunction LoadingPlaceholder() {\n return (\n <div className=\"ods-monaco__loading\">\n <span className=\"ods-monaco__loading-spin\" aria-hidden=\"true\">\n <RenewIcon />\n </span>\n <span>Loading diff…</span>\n </div>\n );\n}\n\n/* ---------------------------------------------------------------------------\n * Component\n * ------------------------------------------------------------------------- */\n\nexport const MonacoDiffEditor = forwardRef<MonacoDiffEditorHandle, MonacoDiffEditorProps>(\n function MonacoDiffEditor(\n {\n original,\n modified,\n onModifiedChange,\n language = \"plaintext\",\n renderSideBySide = true,\n readOnly = false,\n hideUnchangedRegions = false,\n height = 360,\n minHeight = 200,\n originalLabel = \"Original\",\n modifiedLabel = \"Modified\",\n toolbar,\n options,\n onMount,\n className,\n theme,\n hideToolbar = false,\n ...rest\n },\n ref,\n ) {\n const editorRef = useRef<editor.IStandaloneDiffEditor | null>(null);\n const monacoRef = useRef<Monaco | null>(null);\n const [sideBySide, setSideBySide] = useState(renderSideBySide);\n\n useImperativeHandle(\n ref,\n (): MonacoDiffEditorHandle => ({\n focus: () => editorRef.current?.getModifiedEditor().focus(),\n getDiffEditor: () => editorRef.current,\n getMonaco: () => monacoRef.current,\n getOriginalValue: () => editorRef.current?.getOriginalEditor().getValue() ?? \"\",\n getModifiedValue: () => editorRef.current?.getModifiedEditor().getValue() ?? \"\",\n setModifiedValue: (v: string) => editorRef.current?.getModifiedEditor().setValue(v),\n }),\n [],\n );\n\n const handleMount = (diffEditor: editor.IStandaloneDiffEditor, monaco: Monaco) => {\n editorRef.current = diffEditor;\n monacoRef.current = monaco;\n monaco.editor.defineTheme(OCTAVIAFLOW_THEME_ID, OCTAVIAFLOW_LIGHT);\n monaco.editor.setTheme(theme ?? OCTAVIAFLOW_THEME_ID);\n\n const modifiedEditor = diffEditor.getModifiedEditor();\n modifiedEditor.onDidChangeModelContent(() => {\n onModifiedChange?.(modifiedEditor.getValue());\n });\n\n onMount?.(diffEditor, monaco);\n };\n\n const mergedOptions: editor.IDiffEditorConstructionOptions = {\n readOnly,\n originalEditable: false,\n renderSideBySide: sideBySide,\n fontFamily:\n \"ui-monospace, SFMono-Regular, 'JetBrains Mono', 'Fira Code', Menlo, Consolas, monospace\",\n fontSize: 13,\n lineHeight: 20,\n automaticLayout: true,\n lineNumbersMinChars: 3,\n lineDecorationsWidth: 6,\n folding: true,\n glyphMargin: false,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n smoothScrolling: true,\n renderOverviewRuler: true,\n diffWordWrap: \"off\",\n padding: { top: 8, bottom: 8 },\n hideUnchangedRegions: {\n enabled: hideUnchangedRegions,\n revealLineCount: 20,\n minimumLineCount: 3,\n contextLineCount: 3,\n },\n scrollbar: {\n verticalScrollbarSize: 8,\n horizontalScrollbarSize: 8,\n useShadows: false,\n },\n ...options,\n };\n\n return (\n <div {...rest} className={cn(\"ods-monaco-diff\", `ods-monaco-diff--${language}`, className)}>\n {!hideToolbar && (\n <div className=\"ods-monaco__toolbar\">\n <div className=\"ods-monaco__toolbar-left\">\n <span className=\"ods-monaco__lang\">DIFF · {language.toUpperCase()}</span>\n <span className=\"ods-monaco-diff__labels\">\n <span className=\"ods-monaco-diff__label ods-monaco-diff__label--orig\">\n {originalLabel}\n </span>\n <span className=\"ods-monaco-diff__arrow\" aria-hidden=\"true\">\n →\n </span>\n <span className=\"ods-monaco-diff__label ods-monaco-diff__label--mod\">\n {modifiedLabel}\n </span>\n </span>\n {toolbar}\n </div>\n <div className=\"ods-monaco__toolbar-right\">\n <button\n type=\"button\"\n className={cn(\"ods-monaco__btn\", sideBySide && \"ods-monaco__btn--active\")}\n onClick={() => setSideBySide((s) => !s)}\n aria-pressed={sideBySide}\n aria-label={sideBySide ? \"Switch to inline diff\" : \"Switch to side-by-side\"}\n title={sideBySide ? \"Inline\" : \"Side-by-side\"}\n >\n {sideBySide ? <SplitIcon /> : <SquareOutlineIcon />}\n </button>\n </div>\n </div>\n )}\n\n <div className=\"ods-monaco__body\" style={{ minHeight }}>\n <Suspense fallback={<LoadingPlaceholder />}>\n <DiffEditor\n original={original}\n modified={modified}\n language={language}\n height={height}\n theme={theme ?? OCTAVIAFLOW_THEME_ID}\n options={mergedOptions}\n onMount={handleMount}\n loading={<LoadingPlaceholder />}\n />\n </Suspense>\n </div>\n </div>\n );\n },\n);\n\nMonacoDiffEditor.displayName = \"MonacoDiffEditor\";\n","import { type ClassValue, clsx } from \"clsx\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return clsx(inputs);\n}\n","import type { editor } from \"monaco-editor\";\n\n/**\n * OctaviaFlow v1 Monaco theme — light, Linear-tight, accent-driven.\n * Hex values mirror the canonical v1 tokens (see packages/styles/src/02-tokens/_v1.scss).\n */\nexport const OCTAVIAFLOW_LIGHT: editor.IStandaloneThemeData = {\n base: \"vs\",\n inherit: true,\n rules: [\n { token: \"\", foreground: \"161616\", background: \"FFFFFF\" },\n { token: \"comment\", foreground: \"6F6F6F\", fontStyle: \"italic\" },\n { token: \"string\", foreground: \"198038\" },\n { token: \"string.key.json\", foreground: \"0F62FE\" },\n { token: \"string.value.json\", foreground: \"198038\" },\n { token: \"number\", foreground: \"0043CE\" },\n { token: \"keyword\", foreground: \"8A3FFC\" },\n { token: \"keyword.sql\", foreground: \"8A3FFC\" },\n { token: \"operator\", foreground: \"393939\" },\n { token: \"delimiter\", foreground: \"525252\" },\n { token: \"type\", foreground: \"0F62FE\" },\n { token: \"type.identifier\", foreground: \"0F62FE\" },\n { token: \"identifier\", foreground: \"161616\" },\n { token: \"constant\", foreground: \"0043CE\" },\n { token: \"boolean\", foreground: \"F1C21B\", fontStyle: \"bold\" },\n { token: \"tag\", foreground: \"DA1E28\" },\n { token: \"attribute.name\", foreground: \"8A3FFC\" },\n { token: \"attribute.value\", foreground: \"198038\" },\n { token: \"regexp\", foreground: \"DA1E28\" },\n { token: \"function\", foreground: \"0F62FE\" },\n { token: \"variable\", foreground: \"161616\" },\n { token: \"variable.parameter\", foreground: \"393939\", fontStyle: \"italic\" },\n { token: \"namespace\", foreground: \"0F62FE\" },\n ],\n colors: {\n \"editor.background\": \"#FFFFFF\",\n \"editor.foreground\": \"#161616\",\n \"editor.lineHighlightBackground\": \"#F4F4F4\",\n \"editor.lineHighlightBorder\": \"#00000000\",\n \"editorLineNumber.foreground\": \"#A8A8A8\",\n \"editorLineNumber.activeForeground\": \"#0F62FE\",\n \"editorCursor.foreground\": \"#0F62FE\",\n \"editor.selectionBackground\": \"#D0E2FF\",\n \"editor.selectionHighlightBackground\": \"#EDF5FF\",\n \"editor.wordHighlightBackground\": \"#EDF5FF\",\n \"editor.wordHighlightStrongBackground\": \"#D0E2FF\",\n \"editor.findMatchBackground\": \"#FFD7D9\",\n \"editor.findMatchHighlightBackground\": \"#FFE9EB\",\n \"editorIndentGuide.background1\": \"#F4F4F4\",\n \"editorIndentGuide.activeBackground1\": \"#E0E0E0\",\n \"editorWhitespace.foreground\": \"#E0E0E0\",\n \"editorBracketMatch.background\": \"#D0E2FF\",\n \"editorBracketMatch.border\": \"#0F62FE\",\n \"editor.foldBackground\": \"#F4F4F4\",\n\n \"editorGutter.background\": \"#F4F4F4\",\n \"editorGutter.modifiedBackground\": \"#0F62FE\",\n \"editorGutter.addedBackground\": \"#198038\",\n \"editorGutter.deletedBackground\": \"#DA1E28\",\n\n \"editorWidget.background\": \"#FFFFFF\",\n \"editorWidget.foreground\": \"#161616\",\n \"editorWidget.border\": \"#E0E0E0\",\n \"editorSuggestWidget.background\": \"#FFFFFF\",\n \"editorSuggestWidget.border\": \"#E0E0E0\",\n \"editorSuggestWidget.foreground\": \"#161616\",\n \"editorSuggestWidget.selectedBackground\": \"#EDF5FF\",\n \"editorSuggestWidget.selectedForeground\": \"#161616\",\n \"editorSuggestWidget.highlightForeground\": \"#0F62FE\",\n\n \"editorHoverWidget.background\": \"#FFFFFF\",\n \"editorHoverWidget.border\": \"#E0E0E0\",\n\n \"editorError.foreground\": \"#DA1E28\",\n \"editorWarning.foreground\": \"#F1C21B\",\n \"editorInfo.foreground\": \"#0F62FE\",\n\n \"diffEditor.insertedTextBackground\": \"#A7F0BA40\",\n \"diffEditor.removedTextBackground\": \"#FFB3B840\",\n \"diffEditor.insertedLineBackground\": \"#DEFBE640\",\n \"diffEditor.removedLineBackground\": \"#FFD7D940\",\n\n \"scrollbar.shadow\": \"#00000000\",\n \"scrollbarSlider.background\": \"#0F62FE20\",\n \"scrollbarSlider.hoverBackground\": \"#0F62FE40\",\n \"scrollbarSlider.activeBackground\": \"#0F62FE60\",\n\n \"minimap.background\": \"#FAFAFA\",\n \"minimap.selectionHighlight\": \"#0F62FE\",\n \"minimapSlider.background\": \"#0F62FE15\",\n \"minimapSlider.hoverBackground\": \"#0F62FE30\",\n \"minimapSlider.activeBackground\": \"#0F62FE50\",\n\n \"input.background\": \"#FFFFFF\",\n \"input.foreground\": \"#161616\",\n \"input.border\": \"#C6C6C6\",\n \"inputOption.activeBorder\": \"#0F62FE\",\n\n focusBorder: \"#0F62FE\",\n },\n};\n\nexport const OCTAVIAFLOW_THEME_ID = \"octaviaflow-light\";\n","\"use client\";\n// IMPORTANT: `@monaco-editor/react` and `monaco-editor` are optional peer deps.\n// Consumers that don't install them must still be able to import the rest of\n// `@octaviaflow/core` without crashing. Using `React.lazy` + dynamic import\n// keeps Monaco out of the synchronous module graph — it only resolves when a\n// MonacoEditor is actually rendered, deferring the require to that moment.\n//\n// Type-only imports for `editor` and `Monaco` are erased at build time, so\n// they impose no runtime dependency.\nimport type { Monaco, OnMount } from \"@monaco-editor/react\";\nimport {\n CheckmarkIcon,\n CopyIcon,\n MagicWandIcon,\n MinimapOffIcon,\n MinimapOnIcon,\n RenewIcon,\n TextWrapIcon,\n} from \"@octaviaflow/icons\";\nimport type { editor } from \"monaco-editor\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n lazy,\n type ReactNode,\n Suspense,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { OCTAVIAFLOW_LIGHT, OCTAVIAFLOW_THEME_ID } from \"./octaviaflowTheme\";\n\nconst Editor = lazy(() => import(\"@monaco-editor/react\").then((mod) => ({ default: mod.Editor })));\n\n/* ---------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\nexport type MonacoLanguage =\n | \"sql\"\n | \"json\"\n | \"javascript\"\n | \"typescript\"\n | \"tsx\"\n | \"yaml\"\n | \"xml\"\n | \"html\"\n | \"css\"\n | \"scss\"\n | \"markdown\"\n | \"python\"\n | \"go\"\n | \"rust\"\n | \"java\"\n | \"csharp\"\n | \"shell\"\n | \"plaintext\";\n\nexport interface MonacoMarker {\n /** 1-based line number. */\n line: number;\n /** 1-based column. */\n column?: number;\n /** 1-based end line. Defaults to `line`. */\n endLine?: number;\n /** 1-based end column. */\n endColumn?: number;\n severity?: \"error\" | \"warning\" | \"info\" | \"hint\";\n message: string;\n /** Optional source label, e.g. \"json-schema\". */\n source?: string;\n}\n\n/** Imperative handle returned via `ref` — gives consumers programmatic\n * access to the underlying Monaco editor without exposing the lazy-loaded\n * module type to their build graph. */\nexport interface MonacoEditorHandle {\n /** Move keyboard focus to the editor surface. */\n focus(): void;\n /** Access the raw Monaco standalone editor (null until mounted). */\n getEditor(): editor.IStandaloneCodeEditor | null;\n /** Access the Monaco namespace (null until mounted). */\n getMonaco(): Monaco | null;\n /** Current model value, or \"\" if not mounted. */\n getValue(): string;\n /** Replace the editor's value (preserves undo history when used via the\n * model's `setValue`). */\n setValue(value: string): void;\n /** Trigger the built-in `editor.action.formatDocument` action. */\n format(): void;\n}\n\ntype DivPropsBase = Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\" | \"onCopy\" | \"children\">;\n\nexport interface MonacoEditorProps extends DivPropsBase {\n value: string;\n onChange?: (value: string) => void;\n language?: MonacoLanguage;\n /** Read-only mode. */\n readOnly?: boolean;\n /** Editor height — number (px) or any CSS length. Default 320. */\n height?: number | string;\n /** Min height when auto-sizing is disabled. */\n minHeight?: number;\n /** Custom toolbar slot above the editor. */\n toolbar?: ReactNode;\n /** Status pill on the right side of the toolbar. */\n status?: ReactNode;\n /** Hide the toolbar entirely. */\n hideToolbar?: boolean;\n /** Hide the footer (cursor pos + shortcut hints). */\n hideFooter?: boolean;\n /** Show built-in Copy button. */\n showCopy?: boolean;\n /** Show built-in Format button. Uses Monaco's `editor.action.formatDocument`. */\n showFormat?: boolean;\n /** Show built-in word-wrap toggle. */\n showWordWrapToggle?: boolean;\n /** Show built-in minimap toggle. */\n showMinimapToggle?: boolean;\n /** Initial word wrap. Default false. */\n wordWrap?: boolean;\n /** Initial minimap state. Default false (off — Linear-tight). */\n minimap?: boolean;\n /** Show line numbers. Default true. */\n showLineNumbers?: boolean;\n /** Diagnostic markers (errors, warnings, info, hints). */\n markers?: MonacoMarker[];\n /** Pass-through Monaco editor options. Merged after the defaults. */\n options?: editor.IStandaloneEditorConstructionOptions;\n /** Called once Monaco has mounted with the editor + monaco namespace. */\n onMount?: OnMount;\n /** Called after the built-in Copy button writes to the clipboard. */\n onCopy?: (value: string) => void;\n /** How long the Copy button shows the \"copied\" state. Default 1200ms. */\n copySuccessTimeoutMs?: number;\n ariaLabel?: string;\n /** Theme override. Defaults to \"octaviaflow-light\". */\n theme?: string;\n}\n\n/* ---------------------------------------------------------------------------\n * Helpers\n * ------------------------------------------------------------------------- */\n\nconst MARKER_SEVERITY: Record<Required<MonacoMarker>[\"severity\"], number> = {\n hint: 1,\n info: 2,\n warning: 4,\n error: 8,\n};\n\nfunction LoadingPlaceholder({ label }: { label: string }) {\n return (\n <div className=\"ods-monaco__loading\">\n <span className=\"ods-monaco__loading-spin\" aria-hidden=\"true\">\n <RenewIcon />\n </span>\n <span>{label}</span>\n </div>\n );\n}\n\n/* ---------------------------------------------------------------------------\n * Component\n * ------------------------------------------------------------------------- */\n\nexport const MonacoEditor = forwardRef<MonacoEditorHandle, MonacoEditorProps>(function MonacoEditor(\n {\n value,\n onChange,\n language = \"plaintext\",\n readOnly = false,\n height = 320,\n minHeight = 120,\n toolbar,\n status,\n hideToolbar = false,\n hideFooter = false,\n showCopy = true,\n showFormat = true,\n showWordWrapToggle = true,\n showMinimapToggle = true,\n wordWrap: wordWrapProp,\n minimap: minimapProp,\n showLineNumbers = true,\n markers,\n options,\n onMount,\n onCopy,\n copySuccessTimeoutMs = 1200,\n className,\n ariaLabel = \"Code editor\",\n theme,\n ...rest\n },\n ref,\n) {\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const monacoRef = useRef<Monaco | null>(null);\n\n const [wordWrap, setWordWrap] = useState<boolean>(wordWrapProp ?? false);\n const [minimap, setMinimap] = useState<boolean>(minimapProp ?? false);\n const [copied, setCopied] = useState(false);\n const [cursor, setCursor] = useState({ line: 1, column: 1 });\n const [selection, setSelection] = useState({ chars: 0, lines: 0 });\n const [lineCount, setLineCount] = useState(value.split(\"\\n\").length);\n\n // Imperative handle — exposes only the surface consumers need.\n useImperativeHandle(\n ref,\n (): MonacoEditorHandle => ({\n focus: () => editorRef.current?.focus(),\n getEditor: () => editorRef.current,\n getMonaco: () => monacoRef.current,\n getValue: () => editorRef.current?.getValue() ?? \"\",\n setValue: (v: string) => editorRef.current?.setValue(v),\n format: () => editorRef.current?.getAction(\"editor.action.formatDocument\")?.run(),\n }),\n [],\n );\n\n // Keep prop-driven state in sync if controlled\n useEffect(() => {\n if (wordWrapProp !== undefined) setWordWrap(wordWrapProp);\n }, [wordWrapProp]);\n useEffect(() => {\n if (minimapProp !== undefined) setMinimap(minimapProp);\n }, [minimapProp]);\n\n // Apply word wrap / minimap changes to the live editor\n useEffect(() => {\n editorRef.current?.updateOptions({\n wordWrap: wordWrap ? \"on\" : \"off\",\n minimap: { enabled: minimap },\n });\n }, [wordWrap, minimap]);\n\n // Apply markers when they change\n useEffect(() => {\n const ed = editorRef.current;\n const monaco = monacoRef.current;\n if (!ed || !monaco || !markers) return;\n const model = ed.getModel();\n if (!model) return;\n monaco.editor.setModelMarkers(\n model,\n \"octaviaflow\",\n markers.map((m) => ({\n severity: MARKER_SEVERITY[m.severity ?? \"error\"],\n message: m.message,\n startLineNumber: m.line,\n startColumn: m.column ?? 1,\n endLineNumber: m.endLine ?? m.line,\n endColumn: m.endColumn ?? (m.column ?? 1) + 1,\n source: m.source,\n })),\n );\n }, [markers]);\n\n const handleMount: OnMount = useCallback(\n (ed, monaco) => {\n editorRef.current = ed;\n monacoRef.current = monaco;\n monaco.editor.defineTheme(OCTAVIAFLOW_THEME_ID, OCTAVIAFLOW_LIGHT);\n monaco.editor.setTheme(theme ?? OCTAVIAFLOW_THEME_ID);\n\n // Cursor + selection tracking\n ed.onDidChangeCursorPosition((e) => {\n setCursor({ line: e.position.lineNumber, column: e.position.column });\n });\n ed.onDidChangeCursorSelection((e) => {\n const sel = e.selection;\n if (sel.isEmpty()) {\n setSelection({ chars: 0, lines: 0 });\n return;\n }\n const model = ed.getModel();\n if (!model) return;\n const text = model.getValueInRange(sel);\n setSelection({\n chars: text.length,\n lines: text.split(\"\\n\").length,\n });\n });\n // Track line count for footer\n const model = ed.getModel();\n if (model) {\n setLineCount(model.getLineCount());\n model.onDidChangeContent(() => setLineCount(model.getLineCount()));\n }\n\n onMount?.(ed, monaco);\n },\n [onMount, theme],\n );\n\n const handleCopy = async () => {\n if (typeof navigator === \"undefined\") return;\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n onCopy?.(value);\n setTimeout(() => setCopied(false), copySuccessTimeoutMs);\n } catch {\n /* ignore — clipboard permission denied or insecure context */\n }\n };\n\n const handleFormat = () => {\n editorRef.current?.getAction(\"editor.action.formatDocument\")?.run();\n };\n\n const mergedOptions: editor.IStandaloneEditorConstructionOptions = {\n readOnly,\n fontFamily:\n \"ui-monospace, SFMono-Regular, 'JetBrains Mono', 'Fira Code', Menlo, Consolas, monospace\",\n fontSize: 13,\n fontLigatures: true,\n lineHeight: 20,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n lineNumbersMinChars: 3,\n lineDecorationsWidth: 6,\n folding: true,\n glyphMargin: false,\n minimap: { enabled: minimap },\n wordWrap: wordWrap ? \"on\" : \"off\",\n scrollBeyondLastLine: false,\n smoothScrolling: true,\n cursorBlinking: \"smooth\",\n cursorSmoothCaretAnimation: \"on\",\n renderLineHighlight: \"line\",\n padding: { top: 8, bottom: 8 },\n bracketPairColorization: { enabled: true },\n guides: { bracketPairs: true, indentation: true },\n automaticLayout: true,\n tabSize: 2,\n insertSpaces: true,\n scrollbar: {\n verticalScrollbarSize: 8,\n horizontalScrollbarSize: 8,\n useShadows: false,\n },\n fixedOverflowWidgets: true,\n contextmenu: true,\n suggestOnTriggerCharacters: true,\n quickSuggestions: { other: true, comments: false, strings: false },\n formatOnPaste: false,\n formatOnType: false,\n \"semanticHighlighting.enabled\": true,\n ...options,\n };\n\n const showWrapBtn = showWordWrapToggle && wordWrapProp === undefined;\n const showMinimapBtn = showMinimapToggle && minimapProp === undefined;\n\n return (\n <div\n {...rest}\n className={cn(\n \"ods-monaco\",\n `ods-monaco--${language}`,\n readOnly && \"ods-monaco--readonly\",\n className,\n )}\n >\n {!hideToolbar && (\n <div className=\"ods-monaco__toolbar\">\n <div className=\"ods-monaco__toolbar-left\">\n <span className=\"ods-monaco__lang\">{language.toUpperCase()}</span>\n {toolbar}\n </div>\n <div className=\"ods-monaco__toolbar-right\">\n <span className=\"ods-monaco__lines\">\n {lineCount} line{lineCount === 1 ? \"\" : \"s\"}\n </span>\n {status && <span className=\"ods-monaco__status\">{status}</span>}\n {showWrapBtn && (\n <button\n type=\"button\"\n className={cn(\"ods-monaco__btn\", wordWrap && \"ods-monaco__btn--active\")}\n onClick={() => setWordWrap((w) => !w)}\n aria-pressed={wordWrap}\n aria-label=\"Toggle word wrap\"\n title=\"Word wrap\"\n >\n <TextWrapIcon />\n </button>\n )}\n {showMinimapBtn && (\n <button\n type=\"button\"\n className={cn(\"ods-monaco__btn\", minimap && \"ods-monaco__btn--active\")}\n onClick={() => setMinimap((m) => !m)}\n aria-pressed={minimap}\n aria-label=\"Toggle minimap\"\n title=\"Minimap\"\n >\n {minimap ? <MinimapOnIcon /> : <MinimapOffIcon />}\n </button>\n )}\n {showFormat && !readOnly && (\n <button\n type=\"button\"\n className=\"ods-monaco__btn\"\n onClick={handleFormat}\n aria-label=\"Format document\"\n title=\"Format (Shift+Alt+F)\"\n >\n <MagicWandIcon />\n </button>\n )}\n {showCopy && (\n <button\n type=\"button\"\n className={cn(\"ods-monaco__btn\", copied && \"ods-monaco__btn--success\")}\n onClick={handleCopy}\n aria-label={copied ? \"Copied\" : \"Copy\"}\n title={copied ? \"Copied\" : \"Copy\"}\n >\n {copied ? <CheckmarkIcon /> : <CopyIcon />}\n </button>\n )}\n </div>\n </div>\n )}\n\n <div className=\"ods-monaco__body\" style={{ minHeight }}>\n <Suspense fallback={<LoadingPlaceholder label=\"Loading editor…\" />}>\n <Editor\n value={value}\n onChange={(v) => onChange?.(v ?? \"\")}\n language={language}\n height={height}\n theme={theme ?? OCTAVIAFLOW_THEME_ID}\n options={mergedOptions}\n onMount={handleMount}\n loading={<LoadingPlaceholder label=\"Loading editor…\" />}\n aria-label={ariaLabel}\n />\n </Suspense>\n </div>\n\n {!hideFooter && (\n <div className=\"ods-monaco__footer\">\n <span className=\"ods-monaco__pos\">\n Ln {cursor.line}, Col {cursor.column}\n {selection.chars > 0 && (\n <>\n {\" \"}\n · {selection.chars} char{selection.chars === 1 ? \"\" : \"s\"}\n {selection.lines > 1 && ` · ${selection.lines} lines`}\n </>\n )}\n </span>\n <span className=\"ods-monaco__shortcut-hint\">\n <kbd className=\"ods-monaco__kbd\">⌘F</kbd> find\n <span className=\"ods-monaco__sep\">·</span>\n <kbd className=\"ods-monaco__kbd\">⌘⇧F</kbd> replace\n <span className=\"ods-monaco__sep\">·</span>\n <kbd className=\"ods-monaco__kbd\">F1</kbd> commands\n </span>\n </div>\n )}\n </div>\n );\n});\n\nMonacoEditor.displayName = \"MonacoEditor\";\n"],"mappings":"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","names":["MonacoDiffEditor","import_icons","import_react","import_jsx_runtime","LoadingPlaceholder","MonacoEditor","model"]}
|