{"version":3,"file":"CodeHighlightProvider.mjs","sources":["../../src/CodeHighlightProvider/CodeHighlightProvider.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, JSX } from 'solid-js';\nimport { createOptionalContext } from '@empoleon/core';\nimport { plainTextAdapter } from './adapters/plain-text-adapter';\n\ninterface HighlighterInput {\n  colorScheme: 'light' | 'dark';\n  code: string;\n  language?: string;\n}\n\ntype Highlighter = (input: HighlighterInput) => {\n  /** Highlighted code (html markup) */\n  highlightedCode: string;\n\n  /** `true` if the code is represented with html string, `false` for plain text string */\n  isHighlighted: boolean;\n\n  /** Props to pass down to `<code>` tag */\n  codeElementProps?: Record<string, any>;\n};\n\nexport interface CodeHighlightAdapter {\n  loadContext?: () => Promise<any>;\n  getHighlighter: (ctx: any) => Highlighter;\n}\n\ninterface CodeHighlightProviderContext {\n  adapter: CodeHighlightAdapter;\n  highlight: Highlighter;\n}\n\nexport const [CodeHighlightProvider, useCodeHighlight] =\n  createOptionalContext<CodeHighlightProviderContext>({\n    adapter: plainTextAdapter,\n    highlight: plainTextAdapter.getHighlighter(null),\n  });\n\nexport interface CodeHighlightAdapterProviderProps {\n  adapter: CodeHighlightAdapter;\n  children: JSX.Element;\n}\n\nexport function CodeHighlightAdapterProvider({\n  adapter,\n  children,\n}: CodeHighlightAdapterProviderProps) {\n  const [ctx, setCtx] = createSignal<any>(null);\n  const highlight = createMemo(() => adapter.getHighlighter(ctx));\n\n  createEffect(() => {\n    if (adapter.loadContext) {\n      adapter.loadContext().then(setCtx);\n    }\n  });\n\n  return <CodeHighlightProvider value={{ adapter, highlight: highlight() }}>{children}</CodeHighlightProvider>;\n}\n\nexport function useHighlight() {\n  const ctx = useCodeHighlight();\n  return ctx?.highlight || plainTextAdapter.getHighlighter(null);\n}\n"],"names":["CodeHighlightProvider","useCodeHighlight","createOptionalContext","adapter","plainTextAdapter","highlight","getHighlighter","CodeHighlightAdapterProvider","_ref","children","ctx","setCtx","createSignal","createMemo","createEffect","loadContext","then","_$createComponent","value","useHighlight"],"mappings":";;;;;AA+BO,MAAM,CAACA,qBAAA,EAAuBC,gBAAgB,CAAA,GACnDC,qBAAA,CAAoD;AAClDC,EAAAA,OAAA,EAASC,gBAAA;AACTC,EAAAA,SAAA,EAAWD,gBAAA,CAAiBE,cAAA,CAAe,IAAI;AACjD,CAAC;AAOI,SAASC,4BAAAA,CAAAC,IAAA,EAGsB;EAAA,IAHO;IAC3CL,OAAA;AACAM,IAAAA;AACF,GAAA,GAAAD,IAAA;EACE,MAAM,CAACE,GAAA,EAAKC,MAAM,CAAA,GAAIC,aAAkB,IAAI,CAAA;EAC5C,MAAMP,YAAYQ,UAAA,CAAW,MAAMV,OAAA,CAAQG,cAAA,CAAeI,GAAG,CAAC,CAAA;AAE9DI,EAAAA,YAAA,CAAa,MAAM;IACjB,IAAIX,QAAQY,WAAA,EAAa;MACvBZ,OAAA,CAAQY,WAAA,EAAY,CAAEC,IAAA,CAAKL,MAAM,CAAA;AACnC,IAAA;AACF,EAAA,CAAC,CAAA;EAED,OAAAM,eAAA,CAAQjB,qBAAA,EAAA;AAAA,IAAA,IAAsBkB,KAAAA,GAAA;MAAA,OAAO;QAAEf,OAAA;QAASE,WAAWA,SAAA;OAAY;AAAA,IAAA,CAAA;AAAAI,IAAAA,QAAA,EAAIA;AAAA,GAAA,CAAA;AAC7E;AAEO,SAASU,YAAAA,GAAe;AAC7B,EAAA,MAAMT,MAAMT,gBAAA,EAAiB;EAC7B,OAAOS,GAAA,EAAKL,SAAA,IAAaD,gBAAA,CAAiBE,cAAA,CAAe,IAAI,CAAA;AAC/D;;;;"}