{"version":3,"file":"code-block-root.cjs","sources":["../../../components/code-block/code-block-root.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'class-variance-authority';\nimport {\n  ComponentProps,\n  createContext,\n  useCallback,\n  useContext,\n  useState\n} from 'react';\nimport styles from './code-block.module.css';\n\ninterface CodeBlockCommonProps {\n  hideLineNumbers?: boolean;\n  value?: string;\n  maxLines?: number;\n  collapsed?: boolean;\n}\n\ninterface CodeBlockContextValue extends CodeBlockCommonProps {\n  setValue: (value: string) => void;\n  code?: string;\n  setCode: (code: string) => void;\n  toggleCollapsed: () => void;\n}\n\nconst CodeBlockContext = createContext<CodeBlockContextValue | undefined>(\n  undefined\n);\n\nexport const useCodeBlockContext = () => {\n  const context = useContext(CodeBlockContext);\n  if (!context) {\n    throw new Error('useCodeBlockContext must be used within a CodeBlock');\n  }\n  return context;\n};\n\nexport interface CodeBlockProps\n  extends ComponentProps<'div'>,\n    CodeBlockCommonProps {\n  defaultValue?: string;\n  maxHeight?: string | number;\n  onValueChange?: (value: string) => void;\n  defaultCollapsed?: boolean;\n  onCollapseChange?: (value: boolean) => void;\n}\n\nexport const CodeBlockRoot = ({\n  children,\n  value: providedValue,\n  onValueChange,\n  defaultValue,\n  hideLineNumbers = false,\n  maxLines,\n  maxHeight,\n  className,\n  collapsed: providedCollapsed,\n  defaultCollapsed = true,\n  onCollapseChange,\n  ...props\n}: CodeBlockProps) => {\n  const [internalValue, setInternalValue] = useState<string | undefined>(\n    defaultValue\n  );\n  const [code, setCode] = useState<string | undefined>();\n  const [internalCollapsed, setInternalCollapsed] = useState<boolean>(\n    defaultCollapsed ?? false\n  );\n\n  const collapsed = providedCollapsed ?? internalCollapsed;\n\n  const value = providedValue ?? internalValue ?? defaultValue;\n\n  const setValue = useCallback(\n    (newValue: string) => {\n      setInternalValue(newValue);\n      onValueChange?.(newValue);\n    },\n    [onValueChange]\n  );\n\n  const toggleCollapsed = useCallback(() => {\n    setInternalCollapsed(_internalCollapsed => {\n      onCollapseChange?.(!_internalCollapsed);\n      return !_internalCollapsed;\n    });\n  }, [onCollapseChange]);\n\n  return (\n    <CodeBlockContext\n      value={{\n        hideLineNumbers,\n        value,\n        setValue,\n        code,\n        setCode,\n        maxLines: maxLines && maxLines + 1, // to compensate for the absolute collapse trigger\n        collapsed,\n        toggleCollapsed\n      }}\n    >\n      <div\n        className={cx(styles.container, className)}\n        data-slot='code-block'\n        {...props}\n      >\n        {children}\n      </div>\n    </CodeBlockContext>\n  );\n};\n\nCodeBlockRoot.displayName = 'CodeBlock';\n"],"names":[],"mappings":";;;;;;;;AA0BA;AAIO;AACL;;AAEE;;AAEF;AACF;AAYa;;;AAkBX;AAIA;AAEA;AAEA;;AAGI;AACF;AAIF;;AAEI;;AAEF;AACF;AAEA;;;;;;AAQM;;;;AAcR;AAEA;;;"}