igniteui-webcomponents 6.4.0 → 6.5.0
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/CHANGELOG.md +62 -0
- package/components/calendar/base.d.ts +7 -3
- package/components/calendar/base.js +10 -14
- package/components/calendar/base.js.map +1 -1
- package/components/calendar/calendar.d.ts +48 -46
- package/components/calendar/calendar.js +259 -242
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.d.ts +49 -27
- package/components/calendar/days-view/days-view.js +169 -160
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/helpers.js +40 -28
- package/components/calendar/helpers.js.map +1 -1
- package/components/calendar/model.d.ts +9 -3
- package/components/calendar/model.js +29 -19
- package/components/calendar/model.js.map +1 -1
- package/components/calendar/months-view/months-view.d.ts +6 -7
- package/components/calendar/months-view/months-view.js +24 -27
- package/components/calendar/months-view/months-view.js.map +1 -1
- package/components/calendar/years-view/years-view.d.ts +6 -5
- package/components/calendar/years-view/years-view.js +11 -14
- package/components/calendar/years-view/years-view.js.map +1 -1
- package/components/checkbox/checkbox-base.d.ts +1 -1
- package/components/chip/themes/dark/chip.fluent.css.js +1 -1
- package/components/chip/themes/dark/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/dark/chip.indigo.css.js +1 -1
- package/components/chip/themes/dark/chip.indigo.css.js.map +1 -1
- package/components/chip/themes/light/chip.fluent.css.js +1 -1
- package/components/chip/themes/light/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/light/chip.indigo.css.js +1 -1
- package/components/chip/themes/light/chip.indigo.css.js.map +1 -1
- package/components/chip/themes/light/chip.shared.css.js +1 -1
- package/components/chip/themes/light/chip.shared.css.js.map +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
- package/components/common/definitions/defineAllComponents.js +2 -0
- package/components/common/definitions/defineAllComponents.js.map +1 -1
- package/components/date-range-picker/date-range-picker.js +1 -1
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-time-input/date-time-input.d.ts +4 -1
- package/components/date-time-input/date-time-input.js +17 -6
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/file-input/file-input.d.ts +15 -13
- package/components/file-input/file-input.js +49 -47
- package/components/file-input/file-input.js.map +1 -1
- package/components/input/input-base.d.ts +31 -34
- package/components/input/input-base.js +58 -83
- package/components/input/input-base.js.map +1 -1
- package/components/input/input.d.ts +18 -7
- package/components/input/input.js +34 -19
- package/components/input/input.js.map +1 -1
- package/components/mask-input/mask-input-base.d.ts +10 -4
- package/components/mask-input/mask-input-base.js +18 -14
- package/components/mask-input/mask-input-base.js.map +1 -1
- package/components/mask-input/mask-input.d.ts +9 -3
- package/components/mask-input/mask-input.js +26 -6
- package/components/mask-input/mask-input.js.map +1 -1
- package/components/mask-input/validators.js +1 -1
- package/components/mask-input/validators.js.map +1 -1
- package/components/theme-provider/theme-provider.d.ts +65 -0
- package/components/theme-provider/theme-provider.js +58 -0
- package/components/theme-provider/theme-provider.js.map +1 -0
- package/components/tile-manager/tile.js +6 -3
- package/components/tile-manager/tile.js.map +1 -1
- package/custom-elements.json +2136 -1596
- package/extras/chat-markdown-renderer.d.ts +72 -4
- package/extras/chat-markdown-renderer.js +19 -7
- package/extras/chat-markdown-renderer.js.map +1 -1
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +3 -0
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/themes/dark/bootstrap.css +1 -1
- package/themes/dark/fluent.css +1 -1
- package/themes/dark/indigo.css +1 -1
- package/themes/dark/material.css +1 -1
- package/themes/light/bootstrap.css +1 -1
- package/themes/light/fluent.css +1 -1
- package/themes/light/indigo.css +1 -1
- package/themes/light/material.css +1 -1
- package/theming/context.d.ts +36 -0
- package/theming/context.js +3 -0
- package/theming/context.js.map +1 -0
- package/theming/theming-controller.d.ts +7 -1
- package/theming/theming-controller.js +48 -12
- package/theming/theming-controller.js.map +1 -1
- package/theming/utils.d.ts +10 -0
- package/theming/utils.js +8 -42
- package/theming/utils.js.map +1 -1
- package/web-types.json +1 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { Marked } from 'marked';
|
|
1
2
|
import type { IgcChatMessage } from '../components/chat/types.js';
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
+
* Configuration options for setting up the markdown parser and highlighter.
|
|
5
|
+
* This provides more granular control over the markdown processing pipeline.
|
|
4
6
|
*/
|
|
5
7
|
export interface MarkdownRendererOptions {
|
|
6
8
|
/**
|
|
@@ -9,18 +11,84 @@ export interface MarkdownRendererOptions {
|
|
|
9
11
|
noHighlighter?: boolean;
|
|
10
12
|
/**
|
|
11
13
|
* List of programming languages to support in syntax highlighting.
|
|
14
|
+
* @default ['javascript', 'typescript', 'html', 'css']
|
|
12
15
|
*/
|
|
13
16
|
languages?: string[];
|
|
14
17
|
/**
|
|
15
|
-
* The theme used by the syntax highlighter
|
|
18
|
+
* The theme(s) used by the syntax highlighter.
|
|
19
|
+
* Can be a single theme name or separate themes for light and dark modes.
|
|
20
|
+
* @default { light: 'github-light', dark: 'github-dark' }
|
|
16
21
|
*/
|
|
17
|
-
theme?: {
|
|
22
|
+
theme?: string | {
|
|
18
23
|
light?: string;
|
|
19
24
|
dark?: string;
|
|
20
25
|
};
|
|
21
26
|
/**
|
|
22
|
-
* A custom HTML sanitization function.
|
|
27
|
+
* A custom HTML sanitization function.
|
|
28
|
+
* @default DOMPurify.sanitize
|
|
23
29
|
*/
|
|
24
30
|
sanitizer?: (html: string) => string;
|
|
31
|
+
/**
|
|
32
|
+
* Custom color replacements for syntax highlighting.
|
|
33
|
+
* Maps hex colors to CSS variable names.
|
|
34
|
+
*/
|
|
35
|
+
colorReplacements?: Record<string, string>;
|
|
25
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Represents a markdown renderer instance that can process markdown text.
|
|
39
|
+
*/
|
|
40
|
+
export interface MarkdownRenderer {
|
|
41
|
+
/**
|
|
42
|
+
* Parses markdown text and returns rendered HTML.
|
|
43
|
+
* @param text - The markdown text to parse
|
|
44
|
+
* @returns The sanitized HTML string
|
|
45
|
+
*/
|
|
46
|
+
parse(text: string): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* The underlying marked instance for advanced usage.
|
|
49
|
+
*/
|
|
50
|
+
readonly marked: Marked;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Sets up a markdown renderer with syntax highlighting and sanitization.
|
|
54
|
+
* This is the core setup function that can be used in any framework.
|
|
55
|
+
*
|
|
56
|
+
* @param options - Configuration options for the markdown renderer
|
|
57
|
+
* @returns A MarkdownRenderer instance
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* // Basic usage
|
|
62
|
+
* const renderer = await setupMarkdownRenderer();
|
|
63
|
+
* const html = await renderer.parse('# Hello **World**');
|
|
64
|
+
*
|
|
65
|
+
* // With custom options
|
|
66
|
+
* const renderer = await setupMarkdownRenderer({
|
|
67
|
+
* languages: ['javascript', 'python', 'rust'],
|
|
68
|
+
* theme: 'monokai',
|
|
69
|
+
* noHighlighter: false
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* // With custom sanitizer
|
|
73
|
+
* const renderer = await setupMarkdownRenderer({
|
|
74
|
+
* sanitizer: (html) => myCustomSanitizer(html)
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function setupMarkdownRenderer(options?: MarkdownRendererOptions): Promise<MarkdownRenderer>;
|
|
79
|
+
/**
|
|
80
|
+
* Creates a markdown renderer specifically for igc-chat messages.
|
|
81
|
+
* This function wraps the renderer to work with IgcChatMessage objects
|
|
82
|
+
* and returns Lit's unsafeHTML directive for rendering.
|
|
83
|
+
*
|
|
84
|
+
* @param options - Configuration options for the markdown renderer
|
|
85
|
+
* @returns A function that takes an IgcChatMessage and returns a Lit template result
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* const renderer = await createMarkdownRenderer();
|
|
90
|
+
* const message = { text: '# Hello **World**' };
|
|
91
|
+
* const template = await renderer(message);
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
26
94
|
export declare function createMarkdownRenderer(options?: MarkdownRendererOptions): Promise<(message: IgcChatMessage) => Promise<unknown>>;
|
|
@@ -8,8 +8,11 @@ const DEFAULT_THEME = {
|
|
|
8
8
|
light: 'github-light',
|
|
9
9
|
dark: 'github-dark',
|
|
10
10
|
};
|
|
11
|
-
export async function
|
|
11
|
+
export async function setupMarkdownRenderer(options) {
|
|
12
12
|
const sanitizer = options?.sanitizer ?? DOMPurify.sanitize;
|
|
13
|
+
const theme = typeof options?.theme === 'string'
|
|
14
|
+
? { light: options.theme, dark: options.theme }
|
|
15
|
+
: (options?.theme ?? DEFAULT_THEME);
|
|
13
16
|
const markdown = new Marked({
|
|
14
17
|
breaks: true,
|
|
15
18
|
gfm: true,
|
|
@@ -23,9 +26,8 @@ export async function createMarkdownRenderer(options) {
|
|
|
23
26
|
],
|
|
24
27
|
});
|
|
25
28
|
if (!options?.noHighlighter) {
|
|
26
|
-
const themes = options?.theme ?? DEFAULT_THEME;
|
|
27
29
|
const langs = options?.languages ?? DEFAULT_LANGUAGES;
|
|
28
|
-
const colorReplacements = {
|
|
30
|
+
const colorReplacements = options?.colorReplacements ?? {
|
|
29
31
|
'#6f42c1': 'var(--shiki-purple)',
|
|
30
32
|
'#032f62': 'var(--shiki-dark-blue)',
|
|
31
33
|
'#24292e': 'var(--shiki-navy)',
|
|
@@ -43,7 +45,7 @@ export async function createMarkdownRenderer(options) {
|
|
|
43
45
|
try {
|
|
44
46
|
return highlighter.codeToHtml(code, {
|
|
45
47
|
lang,
|
|
46
|
-
themes,
|
|
48
|
+
themes: theme,
|
|
47
49
|
colorReplacements: {
|
|
48
50
|
'github-light': {
|
|
49
51
|
...colorReplacements,
|
|
@@ -65,10 +67,20 @@ export async function createMarkdownRenderer(options) {
|
|
|
65
67
|
},
|
|
66
68
|
}));
|
|
67
69
|
}
|
|
70
|
+
return {
|
|
71
|
+
async parse(text) {
|
|
72
|
+
const result = await markdown.parse(text);
|
|
73
|
+
return sanitizer(String(result));
|
|
74
|
+
},
|
|
75
|
+
get marked() {
|
|
76
|
+
return markdown;
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export async function createMarkdownRenderer(options) {
|
|
81
|
+
const renderer = await setupMarkdownRenderer(options);
|
|
68
82
|
return async (message) => {
|
|
69
|
-
return message.text
|
|
70
|
-
? unsafeHTML(sanitizer(await markdown.parse(message.text)))
|
|
71
|
-
: '';
|
|
83
|
+
return message.text ? unsafeHTML(await renderer.parse(message.text)) : '';
|
|
72
84
|
};
|
|
73
85
|
}
|
|
74
86
|
//# sourceMappingURL=chat-markdown-renderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-markdown-renderer.js","sourceRoot":"","sources":["../../src/extras/chat-markdown-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGpE,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACtE,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE,cAAc;IACrB,IAAI,EAAE,aAAa;CACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-markdown-renderer.js","sourceRoot":"","sources":["../../src/extras/chat-markdown-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import DOMPurify from 'dompurify';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { Marked } from 'marked';\nimport markedShiki from 'marked-shiki';\nimport { bundledThemes, createHighlighter } from 'shiki/bundle/web';\nimport type { IgcChatMessage } from '../components/chat/types.js';\n\nconst DEFAULT_LANGUAGES = ['javascript', 'typescript', 'html', 'css'];\nconst DEFAULT_THEME = {\n light: 'github-light',\n dark: 'github-dark',\n};\n\n/**\n * Configuration options for setting up the markdown parser and highlighter.\n * This provides more granular control over the markdown processing pipeline.\n */\nexport interface MarkdownRendererOptions {\n /**\n * If true, disables syntax highlighting entirely.\n */\n noHighlighter?: boolean;\n\n /**\n * List of programming languages to support in syntax highlighting.\n * @default ['javascript', 'typescript', 'html', 'css']\n */\n languages?: string[];\n\n /**\n * The theme(s) used by the syntax highlighter.\n * Can be a single theme name or separate themes for light and dark modes.\n * @default { light: 'github-light', dark: 'github-dark' }\n */\n theme?: string | { light?: string; dark?: string };\n\n /**\n * A custom HTML sanitization function.\n * @default DOMPurify.sanitize\n */\n sanitizer?: (html: string) => string;\n\n /**\n * Custom color replacements for syntax highlighting.\n * Maps hex colors to CSS variable names.\n */\n colorReplacements?: Record<string, string>;\n}\n\n/**\n * Represents a markdown renderer instance that can process markdown text.\n */\nexport interface MarkdownRenderer {\n /**\n * Parses markdown text and returns rendered HTML.\n * @param text - The markdown text to parse\n * @returns The sanitized HTML string\n */\n parse(text: string): Promise<string>;\n\n /**\n * The underlying marked instance for advanced usage.\n */\n readonly marked: Marked;\n}\n\n/**\n * Sets up a markdown renderer with syntax highlighting and sanitization.\n * This is the core setup function that can be used in any framework.\n *\n * @param options - Configuration options for the markdown renderer\n * @returns A MarkdownRenderer instance\n *\n * @example\n * ```typescript\n * // Basic usage\n * const renderer = await setupMarkdownRenderer();\n * const html = await renderer.parse('# Hello **World**');\n *\n * // With custom options\n * const renderer = await setupMarkdownRenderer({\n * languages: ['javascript', 'python', 'rust'],\n * theme: 'monokai',\n * noHighlighter: false\n * });\n *\n * // With custom sanitizer\n * const renderer = await setupMarkdownRenderer({\n * sanitizer: (html) => myCustomSanitizer(html)\n * });\n * ```\n */\nexport async function setupMarkdownRenderer(\n options?: MarkdownRendererOptions\n): Promise<MarkdownRenderer> {\n const sanitizer = options?.sanitizer ?? DOMPurify.sanitize;\n\n // Normalize theme option\n const theme =\n typeof options?.theme === 'string'\n ? { light: options.theme, dark: options.theme }\n : (options?.theme ?? DEFAULT_THEME);\n\n // Create marked instance with default configuration\n const markdown = new Marked({\n breaks: true,\n gfm: true,\n extensions: [\n {\n name: 'link',\n renderer({ href, title, text }) {\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\" ${title ? `title=\"${title}\"` : ''}>${text}</a>`;\n },\n },\n ],\n });\n\n // Setup syntax highlighting if not disabled\n if (!options?.noHighlighter) {\n const langs = options?.languages ?? DEFAULT_LANGUAGES;\n const colorReplacements = options?.colorReplacements ?? {\n '#6f42c1': 'var(--shiki-purple)',\n '#032f62': 'var(--shiki-dark-blue)',\n '#24292e': 'var(--shiki-navy)',\n '#d73a49': 'var(--shiki-red)',\n '#005cc5': 'var(--shiki-blue)',\n '#22863a': 'var(--shiki-green)',\n '#e36209': 'var(--shiki-orange)',\n };\n\n const highlighter = await createHighlighter({\n langs,\n themes: Object.keys(bundledThemes),\n });\n\n markdown.use(\n markedShiki({\n highlight(code, lang, _) {\n try {\n return highlighter.codeToHtml(code, {\n lang,\n themes: theme,\n colorReplacements: {\n 'github-light': {\n ...colorReplacements,\n '#fff': 'var(--shiki-bg)',\n '#24292e': 'var(--shiki-fg)',\n },\n 'github-dark': {\n ...colorReplacements,\n '#24292e': 'var(--shiki-bg)',\n '#e1e4e8': 'var(--shiki-fg)',\n },\n },\n defaultColor: 'light-dark()',\n });\n } catch {\n return `<pre><code>${sanitizer(code)}</code></pre>`;\n }\n },\n })\n );\n }\n\n return {\n async parse(text: string): Promise<string> {\n const result = await markdown.parse(text);\n return sanitizer(String(result));\n },\n get marked(): Marked<string, string> {\n return markdown;\n },\n };\n}\n\n/**\n * Creates a markdown renderer specifically for igc-chat messages.\n * This function wraps the renderer to work with IgcChatMessage objects\n * and returns Lit's unsafeHTML directive for rendering.\n *\n * @param options - Configuration options for the markdown renderer\n * @returns A function that takes an IgcChatMessage and returns a Lit template result\n *\n * @example\n * ```typescript\n * const renderer = await createMarkdownRenderer();\n * const message = { text: '# Hello **World**' };\n * const template = await renderer(message);\n * ```\n */\nexport async function createMarkdownRenderer(\n options?: MarkdownRendererOptions\n) {\n const renderer = await setupMarkdownRenderer(options);\n\n return async (message: IgcChatMessage): Promise<unknown> => {\n return message.text ? unsafeHTML(await renderer.parse(message.text)) : '';\n };\n}\n"]}
|