{"version":3,"file":"js-editor.cjs","sources":["../../app/js-editor.tsx"],"sourcesContent":["import { useMemo } from \"react\"\nimport { ViewUpdate } from \"@codemirror/view\"\nimport { tcx } from \"@choiceform/design-system\"\nimport { useJsEditor } from \"./hooks\"\nimport { JsEditorTv } from \"./tv\"\n\nimport \"./styles/style.scss\"\n\nexport interface JsEditorProps {\n  autoFocus?: boolean\n  /**\n   * 是否在编辑器内部捕获 Tab 键：\n   * - true: Tab 用于缩进/补全，焦点不会跳出编辑器\n   * - false: Tab 按浏览器默认行为在可聚焦元素之间切换\n   */\n  captureTabKey?: boolean\n  className?: string\n  debouncedDelayMs?: number\n  disabled?: boolean\n  lineWrapping?: boolean\n  onChange?(value: string, viewUpdate: ViewUpdate): void\n  /**\n   * 延迟触发的变更回调（防抖），适合避免每次输入都触发。\n   * 当你只关心用户停顿后的结果时，可以只使用这个回调。\n   */\n  onDebouncedChange?(value: string, viewUpdate: ViewUpdate): void\n  /**\n   * 结束触发回调：在编辑结束（例如编辑器失焦）时触发一次，返回最终代码内容。\n   * 适合只在用户完成编辑后进行保存或校验。\n   */\n  onEndChange?(value: string): void\n  onFormat?: (formattedCode: string) => void\n  placeholder?: string\n  readonly?: boolean\n  selected?: boolean\n  value?: string\n  variant?: \"default\" | \"light\" | \"dark\" | \"reset\"\n}\n\nexport function JsEditor(props: JsEditorProps) {\n  const { \n    value, \n    onChange, \n    onDebouncedChange,\n    onEndChange,\n    debouncedDelayMs,\n    autoFocus, \n    className, \n    readonly, \n    disabled,\n    lineWrapping,\n    placeholder,\n    onFormat,\n    captureTabKey,\n    variant = \"default\",\n    selected = false,\n  } = props\n\n  const { containerRef } = useJsEditor({\n    value,\n    onChange,\n    onDebouncedChange,\n    onEndChange,\n    debouncedDelayMs,\n    autoFocus,\n    readonly: readonly || disabled,\n    lineWrapping,\n    placeholder,\n    onFormat,\n    captureTabKey,\n  })\n\n  const tx = useMemo(() => {\n    return JsEditorTv({ variant, selected, disabled, readOnly: readonly })\n  }, [variant, selected, disabled, readonly])\n\n  return (\n    <div\n      ref={containerRef}\n      className={tcx(tx.container(), tx.editor(), \"js-editor-container\", className)}\n    />\n  )\n}\n\n"],"names":["useJsEditor","useMemo","JsEditorTv","jsx","tcx"],"mappings":";;;;;;;;AAuCO,SAAS,SAAS,OAAsB;AAC7C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,WAAW;AAAA,EAAA,IACT;AAEJ,QAAM,EAAE,aAAA,IAAiBA,wBAAY;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,YAAY;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,KAAKC,MAAAA,QAAQ,MAAM;AACvB,WAAOC,GAAAA,WAAW,EAAE,SAAS,UAAU,UAAU,UAAU,UAAU;AAAA,EACvE,GAAG,CAAC,SAAS,UAAU,UAAU,QAAQ,CAAC;AAE1C,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAWC,aAAAA,IAAI,GAAG,UAAA,GAAa,GAAG,OAAA,GAAU,uBAAuB,SAAS;AAAA,IAAA;AAAA,EAAA;AAGlF;;"}