diff --git a/src/components/chat/extras/markdown-renderer.ts b/src/components/chat/extras/markdown-renderer.ts index 553ad5099..d03fbc0fe 100644 --- a/src/components/chat/extras/markdown-renderer.ts +++ b/src/components/chat/extras/markdown-renderer.ts @@ -60,6 +60,15 @@ export async function createMarkdownRenderer( if (!options?.noHighlighter) { const themes = options?.theme ?? DEFAULT_THEME; const langs = options?.languages ?? DEFAULT_LANGUAGES; + const colorReplacements = { + '#6f42c1': 'var(--shiki-purple)', + '#032f62': 'var(--shiki-dark-blue)', + '#24292e': 'var(--shiki-navy)', + '#d73a49': 'var(--shiki-red)', + '#005cc5': 'var(--shiki-blue)', + '#22863a': 'var(--shiki-green)', + '#e36209': 'var(--shiki-orange)', + }; const highlighter = await createHighlighter({ langs, @@ -70,7 +79,23 @@ export async function createMarkdownRenderer( markedShiki({ highlight(code, lang, _) { try { - return highlighter.codeToHtml(code, { lang, themes }); + return highlighter.codeToHtml(code, { + lang, + themes, + colorReplacements: { + 'github-light': { + ...colorReplacements, + '#fff': 'var(--shiki-bg)', + '#24292e': 'var(--shiki-fg)', + }, + 'github-dark': { + ...colorReplacements, + '#24292e': 'var(--shiki-bg)', + '#e1e4e8': 'var(--shiki-fg)', + }, + }, + defaultColor: 'light-dark()', + }); } catch { return `
${sanitizer(code)}`;
}
diff --git a/src/components/chat/themes/dark/_themes.scss b/src/components/chat/themes/dark/_themes.scss
index ac7c2a0a1..0ab0b39db 100644
--- a/src/components/chat/themes/dark/_themes.scss
+++ b/src/components/chat/themes/dark/_themes.scss
@@ -1,6 +1,7 @@
@use 'styles/utilities' as *;
@use 'igniteui-theming/sass/themes/schemas/components/dark/chat' as *;
+$base: digest-schema($dark-base-chat);
$material: digest-schema($dark-material-chat);
$bootstrap: digest-schema($dark-bootstrap-chat);
$fluent: digest-schema($dark-fluent-chat);
diff --git a/src/components/chat/themes/dark/chat.bootstrap.scss b/src/components/chat/themes/dark/chat.bootstrap.scss
index 8ae2decc7..d9580a4b5 100644
--- a/src/components/chat/themes/dark/chat.bootstrap.scss
+++ b/src/components/chat/themes/dark/chat.bootstrap.scss
@@ -1,9 +1,8 @@
@use 'styles/utilities' as *;
@use 'themes' as *;
-@use '../light/themes' as light;
$theme: $bootstrap;
:host {
- @include css-vars-from-theme(diff(light.$base, $theme), 'ig-chat');
+ @include css-vars-from-theme(diff($base, $theme), 'ig-chat');
}
diff --git a/src/components/chat/themes/dark/chat.fluent.scss b/src/components/chat/themes/dark/chat.fluent.scss
index de7767075..d1c3e4abb 100644
--- a/src/components/chat/themes/dark/chat.fluent.scss
+++ b/src/components/chat/themes/dark/chat.fluent.scss
@@ -1,9 +1,8 @@
@use 'styles/utilities' as *;
@use 'themes' as *;
-@use '../light/themes' as light;
$theme: $fluent;
:host {
- @include css-vars-from-theme(diff(light.$base, $theme), 'ig-chat');
+ @include css-vars-from-theme(diff($base, $theme), 'ig-chat');
}
diff --git a/src/components/chat/themes/dark/chat.indigo.scss b/src/components/chat/themes/dark/chat.indigo.scss
index 20a6f366e..c0a2f2917 100644
--- a/src/components/chat/themes/dark/chat.indigo.scss
+++ b/src/components/chat/themes/dark/chat.indigo.scss
@@ -1,9 +1,8 @@
@use 'styles/utilities' as *;
@use 'themes' as *;
-@use '../light/themes' as light;
$theme: $indigo;
:host {
- @include css-vars-from-theme(diff(light.$base, $theme), 'ig-chat');
+ @include css-vars-from-theme(diff($base, $theme), 'ig-chat');
}
diff --git a/src/components/chat/themes/dark/chat.material.scss b/src/components/chat/themes/dark/chat.material.scss
index 2f8acca66..6a388bd8d 100644
--- a/src/components/chat/themes/dark/chat.material.scss
+++ b/src/components/chat/themes/dark/chat.material.scss
@@ -1,9 +1,8 @@
@use 'styles/utilities' as *;
@use 'themes' as *;
-@use '../light/themes' as light;
$theme: $material;
:host {
- @include css-vars-from-theme(diff(light.$base, $theme), 'ig-chat');
+ @include css-vars-from-theme(diff($base, $theme), 'ig-chat');
}
diff --git a/src/components/chat/themes/dark/chat.shared.scss b/src/components/chat/themes/dark/chat.shared.scss
new file mode 100644
index 000000000..fcd84baf1
--- /dev/null
+++ b/src/components/chat/themes/dark/chat.shared.scss
@@ -0,0 +1,20 @@
+@use 'styles/utilities' as *;
+@use './themes' as *;
+
+$theme: $base;
+
+:host {
+ color-scheme: dark;
+
+ @include css-vars-from-theme($theme, 'ig-chat');
+
+ igc-chat-message::part(message-container) {
+ --shiki-purple: #b392f0;
+ --shiki-navy: #e1e4e8;
+ --shiki-dark-blue: #9ecbff;
+ --shiki-red: #f97583;
+ --shiki-blue: #79bbff;
+ --shiki-green: #85e89d;
+ --shiki-orange: #ffab70;
+ }
+}
diff --git a/src/components/chat/themes/light/chat.shared.scss b/src/components/chat/themes/light/chat.shared.scss
index d2e557ef4..0fd9c40d0 100644
--- a/src/components/chat/themes/light/chat.shared.scss
+++ b/src/components/chat/themes/light/chat.shared.scss
@@ -4,5 +4,17 @@
$theme: $base;
:host {
+ color-scheme: light;
+
@include css-vars-from-theme($theme, 'ig-chat');
+
+ igc-chat-message::part(message-container) {
+ --shiki-purple: #6f42c1;
+ --shiki-navy: #24292e;
+ --shiki-dark-blue: #032f62;
+ --shiki-red: #d73a49;
+ --shiki-blue: #005cc5;
+ --shiki-green: #22863a;
+ --shiki-orange: #e36209;
+ }
}
diff --git a/src/components/chat/themes/message.base.scss b/src/components/chat/themes/message.base.scss
index ca4217968..9548c7819 100644
--- a/src/components/chat/themes/message.base.scss
+++ b/src/components/chat/themes/message.base.scss
@@ -35,17 +35,21 @@
color: color(primary, 500);
}
- pre, code {
- white-space: pre-wrap;
- overflow-wrap: break-word;
- overflow-x: auto;
- margin-block: unset;
+ pre.shiki {
+ font-size: rem(14px);
+ line-height: rem(24px);
+ padding: rem(16px);
+ border-radius: rem(4px);
+ max-height: rem(320px);
+ max-width: rem(680px);
+ overflow-y: auto;
}
}
[part~='message-header'],
[part~='message-attachments'],
-[part~='message-actions'] {
+[part~='message-actions'],
+[part~='plain-text'] {
&:empty {
display: none;
}
diff --git a/src/components/chat/themes/shared/chat-message/chat-message.common.scss b/src/components/chat/themes/shared/chat-message/chat-message.common.scss
index 6523bc6d0..bf00202d8 100644
--- a/src/components/chat/themes/shared/chat-message/chat-message.common.scss
+++ b/src/components/chat/themes/shared/chat-message/chat-message.common.scss
@@ -3,16 +3,24 @@
$theme: $material;
+:host {
+ --shiki-bg: #{var-get($theme, 'code-background')};
+}
+
[part~='sent'] {
background: var-get($theme, 'message-background');
}
[part~='message-container'] {
color: var-get($theme, 'message-color');
+
+ pre.shiki {
+ border: rem(1px) solid var-get($theme, 'code-border');
+ }
}
[part~='message-actions'] {
igc-icon-button::part(icon) {
color: var-get($theme, 'message-actions-color');
}
-}
\ No newline at end of file
+}
diff --git a/src/components/chat/themes/themes.ts b/src/components/chat/themes/themes.ts
index 02e2dd5f1..8e5b1fe7d 100644
--- a/src/components/chat/themes/themes.ts
+++ b/src/components/chat/themes/themes.ts
@@ -6,20 +6,21 @@ import { styles as bootstrapDark } from './dark/chat.bootstrap.css.js';
import { styles as fluentDark } from './dark/chat.fluent.css.js';
import { styles as indigoDark } from './dark/chat.indigo.css.js';
import { styles as materialDark } from './dark/chat.material.css.js';
+import { styles as sharedDark } from './dark/chat.shared.css.js';
// Light Overrides
import { styles as bootstrapLight } from './light/chat.bootstrap.css.js';
import { styles as fluentLight } from './light/chat.fluent.css.js';
import { styles as indigoLight } from './light/chat.indigo.css.js';
import { styles as materialLight } from './light/chat.material.css.js';
+import { styles as sharedLight } from './light/chat.shared.css.js';
// Shared Styles
-import { styles as shared } from './light/chat.shared.css.js';
import { styles as bootstrap } from './shared/chat.bootstrap.css.js';
import { styles as fluent } from './shared/chat.fluent.css.js';
import { styles as indigo } from './shared/chat.indigo.css.js';
const light = {
shared: css`
- ${shared}
+ ${sharedLight}
`,
bootstrap: css`
${bootstrap} ${bootstrapLight}
@@ -37,7 +38,7 @@ const light = {
const dark = {
shared: css`
- ${shared}
+ ${sharedDark}
`,
bootstrap: css`
${bootstrap} ${bootstrapDark}