@limetech/lime-elements 38.17.0 → 38.18.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.
Files changed (50) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/limel-markdown.cjs.entry.js +1 -1
  3. package/dist/cjs/limel-markdown.cjs.entry.js.map +1 -1
  4. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +1 -1
  5. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js.map +1 -1
  6. package/dist/cjs/limel-table.cjs.entry.js +1 -5
  7. package/dist/cjs/limel-table.cjs.entry.js.map +1 -1
  8. package/dist/collection/components/chart/chart.types.js.map +1 -1
  9. package/dist/collection/components/chip-set/chip.types.js.map +1 -1
  10. package/dist/collection/components/list/list-item.types.js.map +1 -1
  11. package/dist/collection/components/markdown/markdown.css +37 -12
  12. package/dist/collection/components/menu/menu.types.js.map +1 -1
  13. package/dist/collection/components/progress-flow/progress-flow.types.js.map +1 -1
  14. package/dist/collection/components/select/option.types.js.map +1 -1
  15. package/dist/collection/components/tab-bar/tab.types.js.map +1 -1
  16. package/dist/collection/components/table/table.js +1 -5
  17. package/dist/collection/components/table/table.js.map +1 -1
  18. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.css +25 -12
  19. package/dist/collection/global/shared-types/color.types.js +2 -0
  20. package/dist/collection/global/shared-types/color.types.js.map +1 -0
  21. package/dist/collection/global/shared-types/file.types.js.map +1 -1
  22. package/dist/collection/global/shared-types/icon.types.js.map +1 -1
  23. package/dist/collection/interface.js +1 -0
  24. package/dist/collection/interface.js.map +1 -1
  25. package/dist/esm/limel-markdown.entry.js +1 -1
  26. package/dist/esm/limel-markdown.entry.js.map +1 -1
  27. package/dist/esm/limel-prosemirror-adapter.entry.js +1 -1
  28. package/dist/esm/limel-prosemirror-adapter.entry.js.map +1 -1
  29. package/dist/esm/limel-table.entry.js +1 -5
  30. package/dist/esm/limel-table.entry.js.map +1 -1
  31. package/dist/lime-elements/lime-elements.esm.js +1 -1
  32. package/dist/lime-elements/p-1e7cec06.entry.js +2 -0
  33. package/dist/lime-elements/p-1e7cec06.entry.js.map +1 -0
  34. package/dist/lime-elements/{p-dd056e15.entry.js → p-466bf5f4.entry.js} +2 -2
  35. package/dist/lime-elements/{p-dd056e15.entry.js.map → p-466bf5f4.entry.js.map} +1 -1
  36. package/dist/lime-elements/p-b0d3099c.entry.js.map +1 -1
  37. package/dist/types/components/chart/chart.types.d.ts +2 -1
  38. package/dist/types/components/chip-set/chip.types.d.ts +3 -2
  39. package/dist/types/components/list/list-item.types.d.ts +2 -1
  40. package/dist/types/components/menu/menu.types.d.ts +2 -1
  41. package/dist/types/components/progress-flow/progress-flow.types.d.ts +4 -3
  42. package/dist/types/components/select/option.types.d.ts +2 -1
  43. package/dist/types/components/tab-bar/tab.types.d.ts +2 -1
  44. package/dist/types/global/shared-types/color.types.d.ts +51 -0
  45. package/dist/types/global/shared-types/file.types.d.ts +3 -2
  46. package/dist/types/global/shared-types/icon.types.d.ts +3 -2
  47. package/dist/types/interface.d.ts +1 -0
  48. package/package.json +1 -1
  49. package/dist/lime-elements/p-895ae176.entry.js +0 -2
  50. package/dist/lime-elements/p-895ae176.entry.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { Color } from '../../global/shared-types/color.types';
1
2
  /**
2
3
  * Chart component props.
3
4
  * @beta
@@ -20,7 +21,7 @@ export interface ChartItem<T extends number | [number, number] = number | [numbe
20
21
  * It is recommended to use distinct colors for each item,
21
22
  * and make sure there is enough contrast between colors of adjacent items.
22
23
  */
23
- color?: string;
24
+ color?: Color;
24
25
  /**
25
26
  * When set to `true`, the item will become clickable,
26
27
  * which provides visual and accessible feedback when hovered, or focused,
@@ -2,6 +2,7 @@ import { Image } from '../../global/shared-types/image.types';
2
2
  import { Icon } from '../../global/shared-types/icon.types';
3
3
  import { MenuItem } from '../menu/menu.types';
4
4
  import { ListSeparator } from '../list/list-item.types';
5
+ import { Color } from '../../global/shared-types/color.types';
5
6
  /**
6
7
  * @public
7
8
  */
@@ -35,7 +36,7 @@ export interface Chip<T = any> {
35
36
  * },
36
37
  * ```
37
38
  */
38
- iconFillColor?: string;
39
+ iconFillColor?: Color;
39
40
  /**
40
41
  * `title` attribute of the icon
41
42
  *
@@ -63,7 +64,7 @@ export interface Chip<T = any> {
63
64
  * },
64
65
  * ```
65
66
  */
66
- iconBackgroundColor?: string;
67
+ iconBackgroundColor?: Color;
67
68
  /**
68
69
  * Whether the chip should be removable. Not valid for `choice`.
69
70
  */
@@ -2,6 +2,7 @@ import { ListSeparator } from '../../global/shared-types/separator.types';
2
2
  import { Icon } from '../../global/shared-types/icon.types';
3
3
  import { MenuItem } from '../menu/menu.types';
4
4
  import { Image } from '../../global/shared-types/image.types';
5
+ import { Color } from '../../global/shared-types/color.types';
5
6
  export { ListSeparator };
6
7
  /**
7
8
  * List item.
@@ -37,7 +38,7 @@ export interface ListItem<T = any> {
37
38
  * },
38
39
  * ```
39
40
  */
40
- iconColor?: string;
41
+ iconColor?: Color;
41
42
  /**
42
43
  * True if the list item should be selected.
43
44
  */
@@ -1,5 +1,6 @@
1
1
  import { ListSeparator } from '../../global/shared-types/separator.types';
2
2
  import { Icon } from '../../global/shared-types/icon.types';
3
+ import { Color } from '../../global/shared-types/color.types';
3
4
  /**
4
5
  * The direction in which the menu should open.
5
6
  * - `left-start`: Menu opens to the left, aligned with the start of the trigger.
@@ -70,7 +71,7 @@ export interface MenuItem<T = any> {
70
71
  * },
71
72
  * ```
72
73
  */
73
- iconColor?: string;
74
+ iconColor?: Color;
74
75
  /**
75
76
  * True if the menu item should be selected.
76
77
  */
@@ -1,3 +1,4 @@
1
+ import { Color } from '../../global/shared-types/color.types';
1
2
  import { ListItem } from '../list/list-item.types';
2
3
  /**
3
4
  * A step in a progress flow.
@@ -12,11 +13,11 @@ export interface FlowItem extends ListItem {
12
13
  /**
13
14
  * Background color of selected step.
14
15
  */
15
- selectedColor?: string;
16
+ selectedColor?: Color;
16
17
  /**
17
18
  * Background color of the step, when it is passed.
18
19
  */
19
- passedColor?: string;
20
+ passedColor?: Color;
20
21
  /**
21
22
  * Fill color of the icon on the step,
22
23
  * when it is neither selected nor passed.
@@ -31,6 +32,6 @@ export interface FlowItem extends ListItem {
31
32
  * },
32
33
  * ```
33
34
  */
34
- iconColor?: string;
35
+ iconColor?: Color;
35
36
  }
36
37
  //# sourceMappingURL=progress-flow.types.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { Color } from '../../global/shared-types/color.types';
1
2
  import { Icon } from '../../global/shared-types/icon.types';
2
3
  /**
3
4
  * Describes an option for limel-select.
@@ -46,6 +47,6 @@ export interface Option<T extends string = string> {
46
47
  * },
47
48
  * ```
48
49
  */
49
- iconColor?: string;
50
+ iconColor?: Color;
50
51
  }
51
52
  //# sourceMappingURL=option.types.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { Color } from '../../global/shared-types/color.types';
1
2
  import { Icon } from '../../global/shared-types/icon.types';
2
3
  /**
3
4
  * Tab interface.
@@ -33,7 +34,7 @@ export interface Tab {
33
34
  * },
34
35
  * ```
35
36
  */
36
- iconColor?: string;
37
+ iconColor?: Color;
37
38
  /**
38
39
  * Shows a badge within the tab with a specified label
39
40
  */
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Defined colors and any color that can be used.
3
+ *
4
+ * Will auto-complete to any defined color from Lime Elements, while still
5
+ * allowing any valid CSS color value to be used.
6
+ *
7
+ * @public
8
+ */
9
+ export type Color = `rgb(var(${_Internal.HueColor | _Internal.BlackColor | _Internal.WhiteColor | _Internal.ContrastColor | _Internal.BrandColor}))` | (string & {});
10
+ /**
11
+ * @internal
12
+ */
13
+ export declare namespace _Internal {
14
+ /**
15
+ * @internal
16
+ */
17
+ type Hue = 'red' | 'pink' | 'magenta' | 'purple' | 'violet' | 'indigo' | 'blue' | 'cyan' | 'teal' | 'green' | 'lime' | 'yellow' | 'amber' | 'orange' | 'coral' | 'brown' | 'grey' | 'glaucous';
18
+ /**
19
+ * @internal
20
+ */
21
+ type Brightness = 'lighter' | 'light' | 'default' | 'dark' | 'darker';
22
+ /**
23
+ * @internal
24
+ */
25
+ type HueColor = `--color-${Hue}-${Brightness}`;
26
+ /**
27
+ * @internal
28
+ */
29
+ type BlackColor = '--color-black';
30
+ /**
31
+ * @internal
32
+ */
33
+ type WhiteColor = '--color-white';
34
+ /**
35
+ * @internal
36
+ */
37
+ type ContrastValue = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 1000 | 1100 | 1200 | 1300 | 1400 | 1500 | 1600 | 1700;
38
+ /**
39
+ * @internal
40
+ */
41
+ type ContrastColor = `--contrast-${ContrastValue}`;
42
+ /**
43
+ * @internal
44
+ */
45
+ type BrandHue = 'lime-green' | 'ocean-teal' | 'aqua' | 'bubblegum' | 'sunny-orange' | 'cool-grey';
46
+ /**
47
+ * @internal
48
+ */
49
+ type BrandColor = `--lime-brand-color-${BrandHue}`;
50
+ }
51
+ //# sourceMappingURL=color.types.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import { Icon } from '../../global/shared-types/icon.types';
2
+ import { Color } from './color.types';
2
3
  /**
3
4
  * @public
4
5
  */
@@ -48,7 +49,7 @@ export interface FileInfo {
48
49
  * },
49
50
  * ```
50
51
  */
51
- iconColor?: string;
52
+ iconColor?: Color;
52
53
  /**
53
54
  * Background color of the icon. Overrides `--icon-background-color`.
54
55
  *
@@ -62,7 +63,7 @@ export interface FileInfo {
62
63
  * },
63
64
  * ```
64
65
  */
65
- iconBackgroundColor?: string;
66
+ iconBackgroundColor?: Color;
66
67
  /**
67
68
  * URL where the file can be downloaded. Note that this is optional. If the
68
69
  * file cannot be directly accessed via a unique url, this property should
@@ -1,3 +1,4 @@
1
+ import { Color } from './color.types';
1
2
  /**
2
3
  * This interface is used to specify which icon to use in many components,
3
4
  * along with related properties, like color.
@@ -11,11 +12,11 @@ export interface Icon {
11
12
  /**
12
13
  * Color of the icon.
13
14
  */
14
- color?: string;
15
+ color?: Color;
15
16
  /**
16
17
  * Background color of the icon.
17
18
  */
18
- backgroundColor?: string;
19
+ backgroundColor?: Color;
19
20
  /**
20
21
  * Used primarily to improve accessibility for users who
21
22
  * take advantage of assistive technologies; but also
@@ -31,5 +31,6 @@ export * from './components/table/table.types';
31
31
  export * from './global/shared-types/separator.types';
32
32
  export * from './global/shared-types/icon.types';
33
33
  export * from './global/shared-types/image.types';
34
+ export * from './global/shared-types/color.types';
34
35
  export * from './components/text-editor/text-editor.types';
35
36
  //# sourceMappingURL=interface.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@limetech/lime-elements",
3
- "version": "38.17.0",
3
+ "version": "38.18.0",
4
4
  "description": "Lime Elements",
5
5
  "author": "Lime Technologies",
6
6
  "license": "Apache-2.0",
@@ -1,2 +0,0 @@
1
- import{r as e,h as t}from"./p-288f0842.js";import{m as r}from"./p-95a71e89.js";import{g as o}from"./p-2c35fb9d.js";import"./p-4e9b4087.js";class a{constructor(e){this.handleIntersection=e=>{e.forEach((e=>{if(e.isIntersecting){const t=e.target;const r=t.getAttribute("data-src");if(r){t.setAttribute("src",r);t.removeAttribute("data-src")}this.observer.unobserve(t)}}))};this.observer=new IntersectionObserver(this.handleIntersection);const t=e.querySelectorAll("img");t.forEach((e=>{this.observer.observe(e)}))}disconnect(){this.observer.disconnect()}}const l='@charset "UTF-8";code{font-family:ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace;font-size:0.8125rem;letter-spacing:-0.0125rem;color:rgb(var(--contrast-1300));-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;display:inline-block;border-radius:0.25rem;padding:0.03125rem 0.25rem;background-color:rgb(var(--contrast-600))}pre>code{display:block;margin:0.5rem 0;padding:0.5rem 0.75rem;overflow:auto;white-space:pre-wrap}h1{font-size:1.5rem}h2{font-size:1.25rem}h3{font-size:1.125rem}h4{font-size:1rem}h5{font-size:0.875rem}h6{font-size:0.75rem}h1,h2{margin-top:0.5rem;margin-bottom:0.5rem;letter-spacing:-0.03125rem;font-weight:500}h3,h4{margin-top:0.75rem;margin-bottom:0.25rem;font-weight:600}h5,h6{margin-top:0.5rem;margin-bottom:0.125rem;font-weight:600}h1,h2,h3,h4,h5,h6{word-break:break-word;hyphens:auto;-webkit-hyphens:auto}:not([contenteditable=true]) h1,:not([contenteditable=true]) h2,:not([contenteditable=true]) h3,:not([contenteditable=true]) h4,:not([contenteditable=true]) h5,:not([contenteditable=true]) h6{text-wrap:balance}[contenteditable=true] h1,[contenteditable=true] h2,[contenteditable=true] h3,[contenteditable=true] h4,[contenteditable=true] h5,[contenteditable=true] h6{text-wrap:initial}:host(limel-markdown.truncate-paragraphs) p{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}p,li{font-size:0.875rem;word-break:break-word}a{word-break:break-all}p{margin-top:0;margin-bottom:0.5rem}p:only-child{margin-bottom:0}a{transition:color 0.2s ease;color:var(--markdown-hyperlink-color, rgb(var(--color-blue-dark)));text-decoration:none}a:hover{color:var(--markdown-hyperlink-color--hovered, rgb(var(--color-blue-default)))}hr{margin:1.75rem 0 2rem 0;border-width:0;border-top:1px solid rgb(var(--contrast-500))}ul{list-style:none}ul li{position:relative;margin-left:0.75rem}ul li:before{content:"";position:absolute;left:-0.5rem;top:0.5rem;width:0.25rem;height:0.25rem;border-radius:50%;background-color:rgb(var(--contrast-700));display:block}ol{margin-top:0.25rem;padding-left:1rem}ul{margin-top:0.25rem;padding-left:0}ul ul,ul ol,ol ol,ol ul{margin-left:0}li{margin-bottom:0.25rem}:host(limel-markdown:not(.no-table-styles)) table{table-layout:auto;min-width:100%;border-collapse:collapse;border-spacing:0;background:transparent;margin:0.75rem 0}:host(limel-markdown:not(.no-table-styles)) tbody{border:1px solid rgb(var(--contrast-400));border-radius:0.25rem}:host(limel-markdown:not(.no-table-styles)) th,:host(limel-markdown:not(.no-table-styles)) td{text-align:left;vertical-align:top;transition:background-color 0.2s ease;font-size:0.875rem}:host(limel-markdown:not(.no-table-styles)) td{padding:0.5rem 0.375rem 0.75rem 0.375rem}:host(limel-markdown:not(.no-table-styles)) tr th{background-color:rgb(var(--contrast-400));padding:0.25rem 0.375rem;font-weight:normal}:host(limel-markdown:not(.no-table-styles)) tr th:only-child{text-align:center}:host(limel-markdown:not(.no-table-styles)) tbody tr:nth-child(odd) td{background-color:rgb(var(--contrast-200))}:host(limel-markdown:not(.no-table-styles)) tbody tr:hover td{background-color:rgb(var(--contrast-300))}table{display:block;box-sizing:border-box;overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}blockquote{position:relative;font-weight:100;font-size:0.875rem;max-width:100%;line-height:1.4;margin:0;padding:0.5rem 1.25rem;border-radius:0.05rem 0.75rem;background-color:rgb(var(--contrast-300))}blockquote:before,blockquote:after{position:absolute;font-size:2.75rem;opacity:0.4}blockquote:before{content:"“";left:0;top:-0.75rem}blockquote:after{content:"”";right:0;bottom:-2rem}dl{display:grid;grid-template-columns:1fr 2fr;grid-template-rows:1fr;margin-bottom:2rem;border:1px solid rgb(var(--contrast-400));border-radius:0.375rem;background-color:rgb(var(--contrast-200))}dl dt,dl dd{padding:0.375rem 0.5rem;font-size:0.875rem;margin:0}dl dt:nth-of-type(even),dl dd:nth-of-type(even){background-color:rgb(var(--contrast-300))}dl dt:first-child{border-top-left-radius:0.375rem}dl dt:last-child{border-bottom-left-radius:0.375rem}dl dd:first-child{border-top-right-radius:0.375rem}dl dd:last-child{border-bottom-right-radius:0.375rem}img{max-width:100%;border-radius:0.25rem}kbd{font-family:ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace;font-weight:600;color:rgb(var(--contrast-1100));background-color:rgb(var(--contrast-200));white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:normal;padding:0.125rem 0.5rem;margin:0 0.25rem;box-shadow:var(--button-shadow-normal), 0 0.03125rem 0.21875rem 0 rgba(var(--contrast-100), 0.5) inset;border-radius:0.125rem;border-style:solid;border-color:rgba(var(--contrast-600), 0.8);border-width:0 1px 0.125rem 1px}:host(limel-markdown.adjust-for-table-cell) img{max-height:1.25rem;vertical-align:middle}:host(limel-markdown.adjust-for-table-cell) p{display:inline}:host(limel-markdown.adjust-for-table-cell) h1,:host(limel-markdown.adjust-for-table-cell) h2,:host(limel-markdown.adjust-for-table-cell) h3,:host(limel-markdown.adjust-for-table-cell) h4,:host(limel-markdown.adjust-for-table-cell) h5,:host(limel-markdown.adjust-for-table-cell) h6{display:inline-block;vertical-align:bottom;font-size:0.875rem;margin:0 0.25rem 0 0;letter-spacing:normal;font-weight:500}:host(limel-markdown.adjust-for-table-cell) h1:before,:host(limel-markdown.adjust-for-table-cell) h2:before,:host(limel-markdown.adjust-for-table-cell) h3:before,:host(limel-markdown.adjust-for-table-cell) h4:before,:host(limel-markdown.adjust-for-table-cell) h5:before,:host(limel-markdown.adjust-for-table-cell) h6:before{opacity:0.6;vertical-align:middle;font-size:0.5rem;border-radius:0.25rem 0 0 0.25rem;padding:0.25rem;padding-right:2rem;margin-right:-1.75rem;background:linear-gradient(to right, rgb(var(--contrast-800), 0.6), rgb(var(--contrast-800), 0))}:host(limel-markdown.adjust-for-table-cell) h1:before{content:"H1"}:host(limel-markdown.adjust-for-table-cell) h2:before{content:"H2"}:host(limel-markdown.adjust-for-table-cell) h3:before{content:"H3"}:host(limel-markdown.adjust-for-table-cell) h4:before{content:"H4"}:host(limel-markdown.adjust-for-table-cell) h5:before{content:"H5"}:host(limel-markdown.adjust-for-table-cell) h6:before{content:"H6"}:host(limel-markdown.adjust-for-table-cell) pre{margin:0}:host(limel-markdown.adjust-for-table-cell) pre>code{padding:0.125rem;margin:0}:host(limel-markdown.adjust-for-table-cell) dl{margin:0}:host(limel-markdown.adjust-for-table-cell) dl dt,:host(limel-markdown.adjust-for-table-cell) dl dd{padding:0.00625rem 0.125rem}hr{border-top:1px solid rgb(var(--contrast-700))}.MsoNormal{margin:0}';const n=class{constructor(t){e(this,t);this.imageIntersectionObserver=null;this.value=undefined;this.whitelist=o.markdownWhitelist;this.lazyLoadImages=false}async textChanged(){var e;try{this.cleanupImageIntersectionObserver();const t=await r(this.value,{forceHardLineBreaks:true,whitelist:(e=this.whitelist)!==null&&e!==void 0?e:[],lazyLoadImages:this.lazyLoadImages});this.rootElement.innerHTML=t;this.setupImageIntersectionObserver()}catch(e){console.error(e)}}async componentDidLoad(){this.textChanged()}disconnectedCallback(){this.cleanupImageIntersectionObserver()}render(){return[t("div",{id:"markdown",ref:e=>this.rootElement=e})]}setupImageIntersectionObserver(){if(this.lazyLoadImages){this.imageIntersectionObserver=new a(this.rootElement)}}cleanupImageIntersectionObserver(){if(this.imageIntersectionObserver){this.imageIntersectionObserver.disconnect();this.imageIntersectionObserver=null}}static get watchers(){return{value:["textChanged"]}}};n.style=l;export{n as limel_markdown};
2
- //# sourceMappingURL=p-895ae176.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["ImageIntersectionObserver","constructor","containerElement","this","handleIntersection","entries","forEach","entry","isIntersecting","img","target","dataSrc","getAttribute","setAttribute","removeAttribute","observer","unobserve","IntersectionObserver","images","querySelectorAll","observe","disconnect","markdownCss","Markdown","imageIntersectionObserver","globalConfig","markdownWhitelist","async","cleanupImageIntersectionObserver","html","markdownToHTML","value","forceHardLineBreaks","whitelist","_a","lazyLoadImages","rootElement","innerHTML","setupImageIntersectionObserver","error","console","textChanged","disconnectedCallback","render","h","id","ref","el"],"sources":["./src/components/markdown/image-intersection-observer.ts","./src/components/markdown/markdown.scss?tag=limel-markdown&encapsulation=shadow","./src/components/markdown/markdown.tsx"],"sourcesContent":["export class ImageIntersectionObserver {\n private observer: IntersectionObserver;\n\n /**\n * @param containerElement - The element containing images to observe.\n */\n public constructor(containerElement: HTMLElement) {\n this.observer = new IntersectionObserver(this.handleIntersection);\n\n const images = containerElement.querySelectorAll('img');\n images.forEach((img) => {\n this.observer.observe(img);\n });\n }\n\n public disconnect() {\n this.observer.disconnect();\n }\n\n private readonly handleIntersection = (\n entries: IntersectionObserverEntry[],\n ) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const img = entry.target as HTMLImageElement;\n const dataSrc = img.getAttribute('data-src');\n\n if (dataSrc) {\n img.setAttribute('src', dataSrc);\n img.removeAttribute('data-src');\n }\n\n this.observer.unobserve(img);\n }\n });\n };\n}\n","/**\n* @prop --markdown-hyperlink-color: color of text for hyperlinks. Defaults to `--color-blue-dark`;\n* @prop --markdown-hyperlink-color--hovered: color of text for hyperlinks when hovered. Defaults to `--color-blue-default`;\n*/\n\n@forward './partial-styles/pre-code';\n@forward './partial-styles/headings';\n@forward './partial-styles/body-text';\n@forward './partial-styles/lists';\n@forward './partial-styles/tables';\n@forward './partial-styles/blockquotes';\n@forward './partial-styles/definition-lists';\n@forward './partial-styles/img';\n@forward './partial-styles/kbd';\n@forward './partial-styles/_adjust-for-table-cell';\n\n// body-text\nhr {\n border-top: 1px solid rgb(var(--contrast-700));\n}\n\n.MsoNormal {\n margin: 0;\n}\n","import { Component, h, Prop, Watch } from '@stencil/core';\nimport { markdownToHTML } from './markdown-parser';\nimport { globalConfig } from '../../global/config';\nimport { CustomElementDefinition } from '../../global/shared-types/custom-element.types';\nimport { ImageIntersectionObserver } from './image-intersection-observer';\n\n/**\n * The Markdown component receives markdown syntax\n * and renders it as HTML.\n *\n * @exampleComponent limel-example-markdown-headings\n * @exampleComponent limel-example-markdown-emphasis\n * @exampleComponent limel-example-markdown-lists\n * @exampleComponent limel-example-markdown-links\n * @exampleComponent limel-example-markdown-images\n * @exampleComponent limel-example-markdown-code\n * @exampleComponent limel-example-markdown-footnotes\n * @exampleComponent limel-example-markdown-tables\n * @exampleComponent limel-example-markdown-html\n * @exampleComponent limel-example-markdown-keys\n * @exampleComponent limel-example-markdown-blockquotes\n * @exampleComponent limel-example-markdown-horizontal-rule\n * @exampleComponent limel-example-markdown-composite\n * @exampleComponent limel-example-markdown-custom-component\n */\n@Component({\n tag: 'limel-markdown',\n styleUrl: 'markdown.scss',\n shadow: true,\n})\nexport class Markdown {\n /**\n * The input text. Treated as GitHub Flavored Markdown, with the addition\n * that any included HTML will be parsed and rendered as HTML, rather than\n * as text.\n */\n @Prop()\n public value: string;\n\n /**\n * Whitelisted html elements.\n *\n * Any custom element added here will not be sanitized and thus rendered.\n * Can also be set via `limel-config`. Setting this property will override\n * the global config.\n * @alpha\n */\n @Prop()\n public whitelist?: CustomElementDefinition[] =\n globalConfig.markdownWhitelist;\n\n /**\n * Enable lazy loading for images\n */\n @Prop()\n public lazyLoadImages = false;\n\n @Watch('value')\n public async textChanged() {\n try {\n this.cleanupImageIntersectionObserver();\n\n const html = await markdownToHTML(this.value, {\n forceHardLineBreaks: true,\n whitelist: this.whitelist ?? [],\n lazyLoadImages: this.lazyLoadImages,\n });\n\n this.rootElement.innerHTML = html;\n\n this.setupImageIntersectionObserver();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n\n private rootElement: HTMLDivElement;\n private imageIntersectionObserver: ImageIntersectionObserver | null = null;\n\n public async componentDidLoad() {\n this.textChanged();\n }\n\n public disconnectedCallback() {\n this.cleanupImageIntersectionObserver();\n }\n\n public render() {\n return [\n <div\n id=\"markdown\"\n ref={(el) => (this.rootElement = el as HTMLDivElement)}\n />,\n ];\n }\n\n private setupImageIntersectionObserver() {\n if (this.lazyLoadImages) {\n this.imageIntersectionObserver = new ImageIntersectionObserver(\n this.rootElement,\n );\n }\n }\n\n private cleanupImageIntersectionObserver() {\n if (this.imageIntersectionObserver) {\n this.imageIntersectionObserver.disconnect();\n this.imageIntersectionObserver = null;\n }\n }\n}\n"],"mappings":"iJAAaA,EAMTC,YAAmBC,GAaFC,KAAAC,mBACbC,IAEAA,EAAQC,SAASC,IACb,GAAIA,EAAMC,eAAgB,CACtB,MAAMC,EAAMF,EAAMG,OAClB,MAAMC,EAAUF,EAAIG,aAAa,YAEjC,GAAID,EAAS,CACTF,EAAII,aAAa,MAAOF,GACxBF,EAAIK,gBAAgB,W,CAGxBX,KAAKY,SAASC,UAAUP,E,IAE9B,EA3BFN,KAAKY,SAAW,IAAIE,qBAAqBd,KAAKC,oBAE9C,MAAMc,EAAShB,EAAiBiB,iBAAiB,OACjDD,EAAOZ,SAASG,IACZN,KAAKY,SAASK,QAAQX,EAAI,G,CAI3BY,aACHlB,KAAKY,SAASM,Y,EChBtB,MAAMC,EAAc,smN,MC8BPC,EAAQ,M,yBAgDTpB,KAAAqB,0BAA8D,K,oCA7BlEC,EAAaC,kB,oBAMO,K,CAGjBC,oB,MACH,IACIxB,KAAKyB,mCAEL,MAAMC,QAAaC,EAAe3B,KAAK4B,MAAO,CAC1CC,oBAAqB,KACrBC,WAAWC,EAAA/B,KAAK8B,aAAS,MAAAC,SAAA,EAAAA,EAAI,GAC7BC,eAAgBhC,KAAKgC,iBAGzBhC,KAAKiC,YAAYC,UAAYR,EAE7B1B,KAAKmC,gC,CACP,MAAOC,GAELC,QAAQD,MAAMA,E,EAOfZ,yBACHxB,KAAKsC,a,CAGFC,uBACHvC,KAAKyB,kC,CAGFe,SACH,MAAO,CACHC,EAAA,OACIC,GAAG,WACHC,IAAMC,GAAQ5C,KAAKiC,YAAcW,I,CAKrCT,iCACJ,GAAInC,KAAKgC,eAAgB,CACrBhC,KAAKqB,0BAA4B,IAAIxB,EACjCG,KAAKiC,Y,EAKTR,mCACJ,GAAIzB,KAAKqB,0BAA2B,CAChCrB,KAAKqB,0BAA0BH,aAC/BlB,KAAKqB,0BAA4B,I"}