diff --git a/browser/src/assets/delivery.png b/browser/src/assets/delivery.png
new file mode 100644
index 0000000000..2030ee4eb5
Binary files /dev/null and b/browser/src/assets/delivery.png differ
diff --git a/browser/src/router.ts b/browser/src/router.ts
index c9e8afbec4..b4a46a2708 100644
--- a/browser/src/router.ts
+++ b/browser/src/router.ts
@@ -9,6 +9,7 @@ import { RouterLayouts } from "./samples/layouts/router";
import { RouterMaps } from "./samples/maps/router";
import { RouterMenus } from "./samples/menus/router";
import { RouterNotifications } from "./samples/notifications/router";
+import { RouterOther } from "./samples/other/router";
import { RouterScheduling } from "./samples/scheduling/router";
// AutoRouterImportEnd
@@ -125,6 +126,9 @@ export class Router {
else if (route.indexOf("/notifications/") >= 0) {
this.displaySample(await RouterNotifications.get(route));
}
+ else if (route.indexOf("/other/") >= 0) {
+ this.displaySample(await RouterOther.get(route));
+ }
else if (route.indexOf("/scheduling/") >= 0) {
this.displaySample(await RouterScheduling.get(route));
}
diff --git a/package-lock.json b/package-lock.json
index c788af2fd6..84fbe48aab 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,9 +20,10 @@
"@webcomponents/custom-elements": "1.3.0",
"@webcomponents/webcomponentsjs": "2.3.0",
"core-js": "^3.6.5",
+ "dompurify": "^3.2.6",
"file-saver": "^2.0.2",
"igniteui-dockmanager": "1.16.0",
- "igniteui-webcomponents": "6.1.2",
+ "igniteui-webcomponents": "6.3.0-beta.1",
"igniteui-webcomponents-charts": "6.0.1-beta.1",
"igniteui-webcomponents-core": "6.0.1-beta.1",
"igniteui-webcomponents-dashboards": "6.0.1-beta.1",
@@ -37,7 +38,10 @@
"igniteui-webcomponents-spreadsheet": "6.0.1-beta.1",
"igniteui-webcomponents-spreadsheet-chart-adapter": "6.0.1-beta.1",
"lit": "^3.2.0",
- "lit-html": "^3.2.0"
+ "lit-html": "^3.2.0",
+ "marked": "^12.0.0",
+ "marked-shiki": "^1.2.0",
+ "shiki": "^3.0.0"
},
"devDependencies": {
"@babel/cli": "^7.8.3",
@@ -2462,6 +2466,73 @@
"node": ">= 8"
}
},
+ "node_modules/@shikijs/core": {
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.12.2.tgz",
+ "integrity": "sha512-L1Safnhra3tX/oJK5kYHaWmLEBJi1irASwewzY3taX5ibyXyMkkSDZlq01qigjryOBwrXSdFgTiZ3ryzSNeu7Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.12.2",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4",
+ "hast-util-to-html": "^9.0.5"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.12.2.tgz",
+ "integrity": "sha512-Nm3/azSsaVS7hk6EwtHEnTythjQfwvrO5tKqMlaH9TwG1P+PNaR8M0EAKZ+GaH2DFwvcr4iSfTveyxMIvXEHMw==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.12.2",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^4.3.3"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.12.2.tgz",
+ "integrity": "sha512-hozwnFHsLvujK4/CPVHNo3Bcg2EsnG8krI/ZQ2FlBlCRpPZW4XAEQmEwqegJsypsTAN9ehu2tEYe30lYKSZW/w==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.12.2",
+ "@shikijs/vscode-textmate": "^10.0.2"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.12.2.tgz",
+ "integrity": "sha512-bVx5PfuZHDSHoBal+KzJZGheFuyH4qwwcwG/n+MsWno5cTlKmaNtTsGzJpHYQ8YPbB5BdEdKU1rga5/6JGY8ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.12.2"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.12.2.tgz",
+ "integrity": "sha512-fTR3QAgnwYpfGczpIbzPjlRnxyONJOerguQv1iwpyQZ9QXX4qy/XFQqXlf17XTsorxnHoJGbH/LXBvwtqDsF5A==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "3.12.2"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.12.2.tgz",
+ "integrity": "sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "license": "MIT"
+ },
"node_modules/@socket.io/component-emitter": {
"version": "3.1.2",
"dev": true,
@@ -2578,6 +2649,15 @@
"@types/node": "*"
}
},
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"node_modules/@types/html-minifier-terser": {
"version": "6.1.0",
"dev": true,
@@ -2606,6 +2686,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"node_modules/@types/mime": {
"version": "1.3.5",
"dev": true,
@@ -2691,6 +2780,12 @@
"version": "2.0.7",
"license": "MIT"
},
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "license": "MIT"
+ },
"node_modules/@types/ws": {
"version": "8.18.1",
"dev": true,
@@ -2699,6 +2794,12 @@
"@types/node": "*"
}
},
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "license": "ISC"
+ },
"node_modules/@webassemblyjs/ast": {
"version": "1.14.1",
"dev": true,
@@ -3845,6 +3946,16 @@
],
"license": "CC-BY-4.0"
},
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/chalk": {
"version": "1.1.3",
"dev": true,
@@ -3860,6 +3971,26 @@
"node": ">=0.10.0"
}
},
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/chardet": {
"version": "0.7.0",
"dev": true,
@@ -4202,6 +4333,16 @@
"node": ">=0.1.90"
}
},
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/commander": {
"version": "6.2.1",
"dev": true,
@@ -4924,6 +5065,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/destroy": {
"version": "1.2.0",
"dev": true,
@@ -4946,6 +5096,19 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/di": {
"version": "0.0.1",
"dev": true,
@@ -5057,6 +5220,15 @@
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
+ "node_modules/dompurify": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz",
+ "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==",
+ "license": "(MPL-2.0 OR Apache-2.0)",
+ "optionalDependencies": {
+ "@types/trusted-types": "^2.0.7"
+ }
+ },
"node_modules/domutils": {
"version": "2.8.0",
"dev": true,
@@ -7605,6 +7777,42 @@
"node": ">= 0.4"
}
},
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/he": {
"version": "1.2.0",
"dev": true,
@@ -7702,6 +7910,16 @@
"node": ">=14"
}
},
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/html-webpack-plugin": {
"version": "5.6.3",
"dev": true,
@@ -7898,9 +8116,9 @@
"license": "Apache-2.0"
},
"node_modules/igniteui-webcomponents": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/igniteui-webcomponents/-/igniteui-webcomponents-6.1.2.tgz",
- "integrity": "sha512-q3a3Q28xzRwDBmfDprY0PsN9cs5xgqOJigXWWmbWAfcMgPg5dIrPyMDV6Aj6GD7u1RgPeoZmTP/pz9gTWNhHJA==",
+ "version": "6.3.0-beta.1",
+ "resolved": "https://registry.npmjs.org/igniteui-webcomponents/-/igniteui-webcomponents-6.3.0-beta.1.tgz",
+ "integrity": "sha512-dVVgCOSQnQu6sjBMfNg9ic9WC/LnDRUcVKU751Icap+VxQEy//UPXx92e1zXn1hJUgAlfW32Fyb4TPXHOWBejw==",
"license": "SEE LICENSE IN LICENSE",
"dependencies": {
"@floating-ui/dom": "^1.7.0",
@@ -9308,6 +9526,28 @@
"node": ">=0.10.0"
}
},
+ "node_modules/marked": {
+ "version": "12.0.2",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz",
+ "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==",
+ "license": "MIT",
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/marked-shiki": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/marked-shiki/-/marked-shiki-1.2.1.tgz",
+ "integrity": "sha512-yHxYQhPY5oYaIRnROn98foKhuClark7M373/VpLxiy5TrDu9Jd/LsMwo8w+U91Up4oDb9IXFrP0N1MFRz8W/DQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "marked": ">=7.0.0",
+ "shiki": ">=1.0.0"
+ }
+ },
"node_modules/matchdep": {
"version": "2.0.0",
"dev": true,
@@ -9512,6 +9752,27 @@
"node": ">= 0.4"
}
},
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+ "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/media-typer": {
"version": "0.3.0",
"dev": true,
@@ -9560,6 +9821,95 @@
"node": ">= 0.6"
}
},
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/micromatch": {
"version": "4.0.8",
"dev": true,
@@ -10088,6 +10438,23 @@
"node": ">=4"
}
},
+ "node_modules/oniguruma-parser": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
+ "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
+ "license": "MIT"
+ },
+ "node_modules/oniguruma-to-es": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz",
+ "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==",
+ "license": "MIT",
+ "dependencies": {
+ "oniguruma-parser": "^0.12.1",
+ "regex": "^6.0.1",
+ "regex-recursion": "^6.0.2"
+ }
+ },
"node_modules/open": {
"version": "8.4.2",
"dev": true,
@@ -10622,6 +10989,16 @@
"node": ">=0.4.0"
}
},
+ "node_modules/property-information": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
+ "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/proxy-addr": {
"version": "2.0.7",
"dev": true,
@@ -10861,6 +11238,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz",
+ "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
"node_modules/regex-not": {
"version": "1.0.2",
"dev": true,
@@ -10885,6 +11271,21 @@
"node": ">=0.10.0"
}
},
+ "node_modules/regex-recursion": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "license": "MIT"
+ },
"node_modules/regexpp": {
"version": "2.0.1",
"dev": true,
@@ -11611,6 +12012,22 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/shiki": {
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.12.2.tgz",
+ "integrity": "sha512-uIrKI+f9IPz1zDT+GMz+0RjzKJiijVr6WDWm9Pe3NNY6QigKCfifCEv9v9R2mDASKKjzjQ2QpFLcxaR3iHSnMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "3.12.2",
+ "@shikijs/engine-javascript": "3.12.2",
+ "@shikijs/engine-oniguruma": "3.12.2",
+ "@shikijs/langs": "3.12.2",
+ "@shikijs/themes": "3.12.2",
+ "@shikijs/types": "3.12.2",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
"node_modules/side-channel": {
"version": "1.1.0",
"dev": true,
@@ -12017,6 +12434,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/sparkles": {
"version": "1.0.1",
"dev": true,
@@ -12283,6 +12710,20 @@
"node": ">=4"
}
},
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/strip-ansi": {
"version": "3.0.1",
"dev": true,
@@ -12719,6 +13160,16 @@
"node": ">=0.6"
}
},
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/tsconfig-paths": {
"version": "4.2.0",
"dev": true,
@@ -13150,6 +13601,74 @@
"through2-filter": "^3.0.0"
}
},
+ "node_modules/unist-util-is": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
+ "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+ "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/universalify": {
"version": "2.0.1",
"dev": true,
@@ -13338,6 +13857,34 @@
"node": ">= 0.8"
}
},
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/vinyl": {
"version": "2.2.1",
"dev": true,
@@ -14208,6 +14755,16 @@
"engines": {
"node": ">=0.10.0"
}
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
}
}
}
diff --git a/package.json b/package.json
index a4382829b0..da51acb96e 100644
--- a/package.json
+++ b/package.json
@@ -40,9 +40,10 @@
"@webcomponents/custom-elements": "1.3.0",
"@webcomponents/webcomponentsjs": "2.3.0",
"core-js": "^3.6.5",
+ "dompurify": "^3.2.6",
"file-saver": "^2.0.2",
"igniteui-dockmanager": "1.16.0",
- "igniteui-webcomponents": "6.1.2",
+ "igniteui-webcomponents": "6.3.0-beta.1",
"igniteui-webcomponents-charts": "6.0.1-beta.1",
"igniteui-webcomponents-core": "6.0.1-beta.1",
"igniteui-webcomponents-dashboards": "6.0.1-beta.1",
@@ -57,7 +58,10 @@
"igniteui-webcomponents-spreadsheet": "6.0.1-beta.1",
"igniteui-webcomponents-spreadsheet-chart-adapter": "6.0.1-beta.1",
"lit": "^3.2.0",
- "lit-html": "^3.2.0"
+ "lit-html": "^3.2.0",
+ "marked": "^12.0.0",
+ "marked-shiki": "^1.2.0",
+ "shiki": "^3.0.0"
},
"devDependencies": {
"@babel/cli": "^7.8.3",
diff --git a/samples/charts/data-chart/trendline-layer/ReadMe.md b/samples/charts/data-chart/trendline-layer/ReadMe.md
new file mode 100644
index 0000000000..59af8f0c27
--- /dev/null
+++ b/samples/charts/data-chart/trendline-layer/ReadMe.md
@@ -0,0 +1,56 @@
+
+
+
+This folder contains implementation of Web Components application with example of Trendline Layer feature using [Data Chart](https://infragistics.com/webcomponentssite/components/general-getting-started.html) component.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Branches
+
+> **_NOTE:_** You should use [master](https://github.com/IgniteUI/igniteui-angular-examples/tree/master) branch of this repository if you want to run samples on your computer. Use the [vnext](https://github.com/IgniteUI/igniteui-angular-examples/tree/vnext) branch only when you want to contribute new samples to this repository.
+
+## Instructions
+
+To set up this project locally, execute these commands:
+
+```
+git clone https://github.com/IgniteUI/igniteui-wc-examples.git
+git checkout master
+cd ./igniteui-wc-examples
+cd ./samples/charts/data-chart/trendline-layer
+```
+
+open above folder in VS Code or type:
+```
+code .
+```
+
+In terminal window, run:
+
+```
+npm install
+npm run start
+```
+
+Then open http://localhost:4200/ in your browser
+
+
+## Learn More
+
+To learn more about **Ignite UI for Web Components**, check out the [Web Components documentation](https://infragistics.com/webcomponentssite/components/general-getting-started.html).
diff --git a/samples/other/chat/features/.prettierrc b/samples/other/chat/features/.prettierrc
new file mode 100644
index 0000000000..15a7c7c6cf
--- /dev/null
+++ b/samples/other/chat/features/.prettierrc
@@ -0,0 +1,11 @@
+{
+ "printWidth": 250,
+ "tabWidth": 4,
+ "useTabs": false,
+ "semi": true,
+ "singleQuote": false,
+ "trailingComma": "none",
+ "bracketSpacing": true,
+ "jsxBracketSameLine": false,
+ "fluid": false
+}
\ No newline at end of file
diff --git a/samples/other/chat/features/ReadMe.md b/samples/other/chat/features/ReadMe.md
new file mode 100644
index 0000000000..f2799a42b8
--- /dev/null
+++ b/samples/other/chat/features/ReadMe.md
@@ -0,0 +1,56 @@
+
+
+
+This folder contains implementation of Web Components application with example of Features feature using [Chat](https://infragistics.com/webcomponentssite/components/general-getting-started.html) component.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Branches
+
+> **_NOTE:_** You should use [master](https://github.com/IgniteUI/igniteui-angular-examples/tree/master) branch of this repository if you want to run samples on your computer. Use the [vnext](https://github.com/IgniteUI/igniteui-angular-examples/tree/vnext) branch only when you want to contribute new samples to this repository.
+
+## Instructions
+
+To set up this project locally, execute these commands:
+
+```
+git clone https://github.com/IgniteUI/igniteui-wc-examples.git
+git checkout master
+cd ./igniteui-wc-examples
+cd ./samples/other/chat/features
+```
+
+open above folder in VS Code or type:
+```
+code .
+```
+
+In terminal window, run:
+
+```
+npm install
+npm run start
+```
+
+Then open http://localhost:4200/ in your browser
+
+
+## Learn More
+
+To learn more about **Ignite UI for Web Components**, check out the [Web Components documentation](https://infragistics.com/webcomponentssite/components/general-getting-started.html).
diff --git a/samples/other/chat/features/index.html b/samples/other/chat/features/index.html
new file mode 100644
index 0000000000..9295833561
--- /dev/null
+++ b/samples/other/chat/features/index.html
@@ -0,0 +1,33 @@
+
+
+
+
+
Chat Features
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Get Priority Support
+ Suggested Actions
+
+
+
+
+
+ <% if (false) { %>
+
+ <% } %>
+
+
+
+
\ No newline at end of file
diff --git a/samples/other/chat/features/package.json b/samples/other/chat/features/package.json
new file mode 100644
index 0000000000..b80667c864
--- /dev/null
+++ b/samples/other/chat/features/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "wc-chat-features",
+ "version": "1.0.0",
+ "description": "This project provides example of Chat using IgniteUI for Web Components",
+ "main": "src/index.ts",
+ "scripts": {
+ "build": "npm run build:prod",
+ "build:dev": "webpack --mode development --config ./webpack.config.js --progress --color --display-error-details",
+ "build:prod": "webpack --env.NODE_ENV=production --mode production --config ./webpack.config.js --progress --color --display-error-details --bail",
+ "serve:dev": "node --max-old-space-size=8192 node_modules/webpack-dev-server/bin/webpack-dev-server.js --mode development --config ./webpack.config.js --hot --progress --open",
+ "serve:prod": "webpack-dev-server --env.NODE_ENV=production --mode production --config ./webpack.config.js --port 3000 --host 0.0.0.0 --hot --progress --open --content-base dist/",
+ "start": "npm run serve:dev",
+ "build:legacy": "npm run build:prod:legacy",
+ "build:dev:legacy": "webpack --env.legacy=true --mode development --config ./webpack.config.js --progress --color --display-error-details",
+ "build:prod:legacy": "webpack --env.NODE_ENV=production --env.legacy=true --mode production --config ./webpack.config.js --progress --color --display-error-details --bail",
+ "serve:dev:legacy": "node --max-old-space-size=8192 node_modules/webpack-dev-server/bin/webpack-dev-server.js --env.legacy=true --mode development --config ./webpack.config.js --hot --progress --open",
+ "serve:prod:legacy": "webpack-dev-server --env.NODE_ENV=production --env.legacy=true --mode production --config ./webpack.config.js --port 3000 --host 0.0.0.0 --hot --progress --open --content-base dist/",
+ "start:legacy": "npm run serve:dev:legacy"
+ },
+ "author": "Infragistics",
+ "dependencies": {
+ "@webcomponents/custom-elements": "^1.4.1",
+ "@webcomponents/template": "^1.4.2",
+ "igniteui-webcomponents": "6.3.0-beta.1",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^3.6.5",
+ "lit": "^3.2.0",
+ "lit-html": "^3.2.0",
+ "tslib": "^2.0.0",
+ "dompurify": "^3.2.6",
+ "marked": "^12.0.0",
+ "marked-shiki": "^1.2.0",
+ "shiki": "^3.0.0"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.8.3",
+ "@babel/core": "^7.8.3",
+ "@babel/plugin-proposal-class-properties": "^7.8.3",
+ "@babel/plugin-transform-runtime": "^7.10.0",
+ "@babel/preset-env": "^7.8.3",
+ "@babel/preset-typescript": "^7.8.3",
+ "@types/source-map": "^0.5.7",
+ "babel-loader": "^8.1.0",
+ "babel-plugin-transform-custom-element-classes": "^0.1.0",
+ "css-loader": "^1.0.0",
+ "csv-loader": "^3.0.2",
+ "file-loader": "^4.2.0",
+ "fork-ts-checker-webpack-plugin": "^4.1.5",
+ "html-webpack-plugin": "^4.3.0",
+ "parcel-bundler": "^1.6.1",
+ "source-map": "^0.7.3",
+ "style-loader": "^0.22.1",
+ "tsconfig-paths-webpack-plugin": "^4.0.0",
+ "typescript": "^4.4.4",
+ "webpack": "^5.96.1",
+ "webpack-cli": "^4.10.0",
+ "webpack-dev-server": "^4.11.1",
+ "worker-loader": "^3.0.8",
+ "xml-loader": "^1.2.1"
+ },
+ "license": "",
+ "homepage": "."
+}
diff --git a/samples/other/chat/features/sandbox.config.json b/samples/other/chat/features/sandbox.config.json
new file mode 100644
index 0000000000..5c5b54fe21
--- /dev/null
+++ b/samples/other/chat/features/sandbox.config.json
@@ -0,0 +1,7 @@
+{
+ "infiniteLoopProtection": false,
+ "hardReloadOnChange": false,
+ "view": "browser",
+ "template": "parcel"
+}
+
\ No newline at end of file
diff --git a/samples/other/chat/features/src/index.css b/samples/other/chat/features/src/index.css
new file mode 100644
index 0000000000..0fe9368715
--- /dev/null
+++ b/samples/other/chat/features/src/index.css
@@ -0,0 +1,2 @@
+/* shared styles are loaded from: */
+/* https://static.infragistics.com/xplatform/css/samples */
\ No newline at end of file
diff --git a/samples/other/chat/features/src/index.ts b/samples/other/chat/features/src/index.ts
new file mode 100644
index 0000000000..906d7451e5
--- /dev/null
+++ b/samples/other/chat/features/src/index.ts
@@ -0,0 +1,119 @@
+import { defineComponents, IgcChatComponent } from 'igniteui-webcomponents';
+import { createMarkdownRenderer } from 'igniteui-webcomponents/extras';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+import './layout.css'
+import { html } from 'lit-html';
+
+defineComponents(IgcChatComponent);
+
+export class ChatOverview {
+ private chat: IgcChatComponent;
+ private markdownRenderer: any;
+
+ private messages = [
+ {
+ id: '1',
+ text: `Hello. How can we assist you today?`,
+ sender: 'support',
+ timestamp: new Date(Date.now() - 3500000)
+ },
+ {
+ id: '2',
+ text: `Hello. I have problem with styling IgcAvatarComponent. Can you take a look at the attached file and help me?`,
+ sender: 'user',
+ timestamp: new Date(Date.now() - 3400000),
+ attachments: [
+ {
+ id: 'AvatarStyles.css',
+ name: 'AvatarStyles.css',
+ url: './styles/AvatarStyles.css',
+ type: 'text/css'
+ },
+ ],
+ },
+ {
+ id: '3',
+ text: `Sure, give me a moment to check the file.`,
+ sender: 'support',
+ timestamp: new Date(Date.now() - 3300000)
+ },
+ {
+ id: '4',
+ text:
+ `
+Thank you for your patience. It seems that the issue is the name of the CSS part. Here is the fixed code:
+\`\`\`css
+igc-avatar::part(base) {
+ --size: 60px;
+ color: var(--ig-success-500-contrast);
+ background: var(--ig-success-500);;
+ border-radius: 20px;
+}
+\`\`\`
+ `,
+ sender: 'support',
+ timestamp: new Date(Date.now() - 3200000)
+ }
+ ];
+
+ private options = {
+ disableAutoScroll: false,
+ disableInputAttachments: false,
+ inputPlaceholder: 'Type your message here...',
+ headerText: 'Developer Support',
+ suggestionsPosition: 'below-input',
+ renderers: {
+ messageHeader: (ctx: any) => this.messageHeaderTemplate(ctx.param, ctx),
+ messageContent: async (ctx: any) => this.markdownRenderer(ctx.param),
+ suggestionPrefix: () => this.suggestionPrefixTemplate()
+ },
+ suggestions: [ 'Send me an e-mail when support is available.' ]
+ };
+
+
+ private messageHeaderTemplate = (msg: any, ctx: any) => {
+ return msg.sender !== 'user'
+ ? html`
+
+ Developer Support
+
+ `
+ : ctx.defaults.messageHeader(ctx);
+ };
+
+ private suggestionPrefixTemplate = () => {
+ return html`
💡 `;
+ }
+
+ constructor() {
+ this.chat = document.querySelector('igc-chat') as IgcChatComponent;
+ this.init();
+ }
+
+ private async init() {
+ this.markdownRenderer = await createMarkdownRenderer();
+ this.chat.messages = this.messages;
+ this.chat.options = this.options;
+ this.chat.addEventListener('igcMessageCreated', this.onMessageCreated);
+ }
+
+ public onMessageCreated = (e: CustomEvent) => {
+ const newMessage = e.detail;
+ this.messages.push(newMessage);
+
+ const responseMessage = {
+ id: Date.now().toString(),
+ text: `Our support team is currently unavailable. We'll get back to you as soon as possible.`,
+ sender: 'support',
+ timestamp: new Date()
+ };
+ this.messages.push(responseMessage);
+ this.chat.messages = [...this.messages];
+ this.chat.options = { ...this.chat.options, suggestions: [] };
+ }
+}
+
+new ChatOverview();
diff --git a/samples/other/chat/features/src/layout.css b/samples/other/chat/features/src/layout.css
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/samples/other/chat/features/tsconfig.json b/samples/other/chat/features/tsconfig.json
new file mode 100644
index 0000000000..de23257dd8
--- /dev/null
+++ b/samples/other/chat/features/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "noImplicitReturns": true,
+ "esModuleInterop": true,
+ "noImplicitAny": true,
+ "declarationDir": "dist/types",
+ "moduleResolution": "node",
+ "declaration": true,
+ "target": "es2015",
+ "module": "es2015",
+ "strict": true
+ },
+ "include": [
+ "src/**/*"
+ ],
+ "exclude": [
+ "node_modules",
+ "dist"
+ ]
+}
\ No newline at end of file
diff --git a/samples/other/chat/features/webpack.config.js b/samples/other/chat/features/webpack.config.js
new file mode 100644
index 0000000000..9d11a6155c
--- /dev/null
+++ b/samples/other/chat/features/webpack.config.js
@@ -0,0 +1,105 @@
+const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
+const path = require('path');
+const webpack = require('webpack');
+
+module.exports = env => {
+ const nodeEnv = process.env.NODE_ENV || 'development';
+ const isProd = nodeEnv === 'production';
+ const isLegacy = !!process.env.legacy && !(process.env.legacy == "false");
+ console.log(">> webpack nodeEnv=" + nodeEnv);
+ console.log(">> webpack isProd=" + isProd);
+ console.log(">> webpack isLegacy=" + isLegacy);
+ const presets = [
+ ["@babel/preset-env", {
+ "useBuiltIns": "usage",
+ "corejs": 3,
+ "targets": {
+ "browsers": isLegacy ? ["defaults"] : [
+ "last 2 Chrome versions",
+ "last 2 Safari versions",
+ "last 2 iOS versions",
+ "last 2 Firefox versions",
+ "last 2 Edge versions"]
+ }
+ }],
+ "@babel/preset-typescript"
+ ];
+
+ return {
+ entry: isLegacy ? [
+ path.resolve(__dirname, 'node_modules/@webcomponents/custom-elements'),
+ path.resolve(__dirname, 'node_modules/@webcomponents/template'),
+ path.resolve(__dirname, 'src')
+ ] : path.resolve(__dirname, 'src'),
+ devtool: isProd ? false : 'source-map',
+ output: {
+ filename: isProd ? '[fullhash].bundle.js' : '[fullhash].bundle.js',
+ globalObject: 'this',
+ path: path.resolve(__dirname, 'dist'),
+ },
+
+ resolve: {
+ mainFields: ['esm2015', 'module', 'main'],
+ extensions: ['.ts', '.js', '.json'],
+ plugins: [new TsconfigPathsPlugin({
+ configFile: './tsconfig.json',
+ extensions: ['.ts', '.js'],
+ mainFields: ['esm2015', 'module', 'main']
+ })]
+ },
+
+ module: {
+ rules: [
+ { test: /\.(png|svg|jpg|gif)$/, use: ['file-loader'] },
+ { test: /\.(csv|tsv)$/, use: ['csv-loader'] },
+ { test: /\.xml$/, use: ['xml-loader'] },
+ { test: /\.css$/, sideEffects: true, use: ['style-loader', 'css-loader'] },
+ {
+ test: /worker\.(ts|js)$/,
+ use: [
+ { loader: 'worker-loader' },
+ {
+ loader: 'babel-loader', options: {
+ "compact": isProd ? true : false,
+ "presets": presets,
+ "plugins": [
+ "@babel/plugin-proposal-class-properties",
+ "@babel/plugin-transform-runtime"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ test: /\.(ts|js)$/, loader: 'babel-loader',
+ options: {
+ "compact": isProd ? true : false,
+ "presets": presets,
+ "plugins": [
+ "@babel/plugin-proposal-class-properties",
+ "@babel/plugin-transform-runtime"
+ ]
+ },
+ exclude:
+ function (modulePath) {
+ return /node_modules/.test(modulePath) &&
+ !/igniteui-webcomponents/.test(modulePath) &&
+ !/lit-html/.test(modulePath);
+ }
+ }],
+ },
+
+ plugins: [
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(nodeEnv)
+ }),
+ new HtmlWebpackPlugin({
+ title: 'for-cs',
+ template: 'index.html'
+ }),
+ new ForkTsCheckerWebpackPlugin()
+ ]
+ };
+};
diff --git a/samples/other/chat/overview/.prettierrc b/samples/other/chat/overview/.prettierrc
new file mode 100644
index 0000000000..15a7c7c6cf
--- /dev/null
+++ b/samples/other/chat/overview/.prettierrc
@@ -0,0 +1,11 @@
+{
+ "printWidth": 250,
+ "tabWidth": 4,
+ "useTabs": false,
+ "semi": true,
+ "singleQuote": false,
+ "trailingComma": "none",
+ "bracketSpacing": true,
+ "jsxBracketSameLine": false,
+ "fluid": false
+}
\ No newline at end of file
diff --git a/samples/other/chat/overview/ReadMe.md b/samples/other/chat/overview/ReadMe.md
new file mode 100644
index 0000000000..64983e2bd5
--- /dev/null
+++ b/samples/other/chat/overview/ReadMe.md
@@ -0,0 +1,56 @@
+
+
+
+This folder contains implementation of Web Components application with example of Overview feature using [Chat](https://infragistics.com/webcomponentssite/components/general-getting-started.html) component.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Branches
+
+> **_NOTE:_** You should use [master](https://github.com/IgniteUI/igniteui-angular-examples/tree/master) branch of this repository if you want to run samples on your computer. Use the [vnext](https://github.com/IgniteUI/igniteui-angular-examples/tree/vnext) branch only when you want to contribute new samples to this repository.
+
+## Instructions
+
+To set up this project locally, execute these commands:
+
+```
+git clone https://github.com/IgniteUI/igniteui-wc-examples.git
+git checkout master
+cd ./igniteui-wc-examples
+cd ./samples/other/chat/overview
+```
+
+open above folder in VS Code or type:
+```
+code .
+```
+
+In terminal window, run:
+
+```
+npm install
+npm run start
+```
+
+Then open http://localhost:4200/ in your browser
+
+
+## Learn More
+
+To learn more about **Ignite UI for Web Components**, check out the [Web Components documentation](https://infragistics.com/webcomponentssite/components/general-getting-started.html).
diff --git a/samples/other/chat/overview/index.html b/samples/other/chat/overview/index.html
new file mode 100644
index 0000000000..0186f146b2
--- /dev/null
+++ b/samples/other/chat/overview/index.html
@@ -0,0 +1,30 @@
+
+
+
+
+
Chat Overview
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <% if (false) { %>
+
+ <% } %>
+
+
+
+
\ No newline at end of file
diff --git a/samples/other/chat/overview/package.json b/samples/other/chat/overview/package.json
new file mode 100644
index 0000000000..4b0f03db67
--- /dev/null
+++ b/samples/other/chat/overview/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "wc-chat-overview",
+ "version": "1.0.0",
+ "description": "This project provides example of Chat using IgniteUI for Web Components",
+ "main": "src/index.ts",
+ "scripts": {
+ "build": "npm run build:prod",
+ "build:dev": "webpack --mode development --config ./webpack.config.js --progress --color --display-error-details",
+ "build:prod": "webpack --env.NODE_ENV=production --mode production --config ./webpack.config.js --progress --color --display-error-details --bail",
+ "serve:dev": "node --max-old-space-size=8192 node_modules/webpack-dev-server/bin/webpack-dev-server.js --mode development --config ./webpack.config.js --hot --progress --open",
+ "serve:prod": "webpack-dev-server --env.NODE_ENV=production --mode production --config ./webpack.config.js --port 3000 --host 0.0.0.0 --hot --progress --open --content-base dist/",
+ "start": "npm run serve:dev",
+ "build:legacy": "npm run build:prod:legacy",
+ "build:dev:legacy": "webpack --env.legacy=true --mode development --config ./webpack.config.js --progress --color --display-error-details",
+ "build:prod:legacy": "webpack --env.NODE_ENV=production --env.legacy=true --mode production --config ./webpack.config.js --progress --color --display-error-details --bail",
+ "serve:dev:legacy": "node --max-old-space-size=8192 node_modules/webpack-dev-server/bin/webpack-dev-server.js --env.legacy=true --mode development --config ./webpack.config.js --hot --progress --open",
+ "serve:prod:legacy": "webpack-dev-server --env.NODE_ENV=production --env.legacy=true --mode production --config ./webpack.config.js --port 3000 --host 0.0.0.0 --hot --progress --open --content-base dist/",
+ "start:legacy": "npm run serve:dev:legacy"
+ },
+ "author": "Infragistics",
+ "dependencies": {
+ "@webcomponents/custom-elements": "^1.4.1",
+ "@webcomponents/template": "^1.4.2",
+ "igniteui-webcomponents": "6.3.0-beta.1",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^3.6.5",
+ "lit": "^3.2.0",
+ "lit-html": "^3.2.0",
+ "tslib": "^2.0.0"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.8.3",
+ "@babel/core": "^7.8.3",
+ "@babel/plugin-proposal-class-properties": "^7.8.3",
+ "@babel/plugin-transform-runtime": "^7.10.0",
+ "@babel/preset-env": "^7.8.3",
+ "@babel/preset-typescript": "^7.8.3",
+ "@types/source-map": "^0.5.7",
+ "babel-loader": "^8.1.0",
+ "babel-plugin-transform-custom-element-classes": "^0.1.0",
+ "css-loader": "^1.0.0",
+ "csv-loader": "^3.0.2",
+ "dompurify": "^3.2.6",
+ "file-loader": "^4.2.0",
+ "fork-ts-checker-webpack-plugin": "^4.1.5",
+ "html-webpack-plugin": "^4.3.0",
+ "marked": "^12.0.0",
+ "marked-shiki": "^1.2.0",
+ "parcel-bundler": "^1.6.1",
+ "shiki": "^3.0.0",
+ "source-map": "^0.7.3",
+ "style-loader": "^0.22.1",
+ "tsconfig-paths-webpack-plugin": "^4.0.0",
+ "typescript": "^4.4.4",
+ "webpack": "^5.96.1",
+ "webpack-cli": "^4.10.0",
+ "webpack-dev-server": "^4.11.1",
+ "worker-loader": "^3.0.8",
+ "xml-loader": "^1.2.1"
+ },
+ "license": "",
+ "homepage": "."
+}
diff --git a/samples/other/chat/overview/sandbox.config.json b/samples/other/chat/overview/sandbox.config.json
new file mode 100644
index 0000000000..5c5b54fe21
--- /dev/null
+++ b/samples/other/chat/overview/sandbox.config.json
@@ -0,0 +1,7 @@
+{
+ "infiniteLoopProtection": false,
+ "hardReloadOnChange": false,
+ "view": "browser",
+ "template": "parcel"
+}
+
\ No newline at end of file
diff --git a/samples/other/chat/overview/src/assets/delivery.png b/samples/other/chat/overview/src/assets/delivery.png
new file mode 100644
index 0000000000..2cc6983932
Binary files /dev/null and b/samples/other/chat/overview/src/assets/delivery.png differ
diff --git a/samples/other/chat/overview/src/index.css b/samples/other/chat/overview/src/index.css
new file mode 100644
index 0000000000..0fe9368715
--- /dev/null
+++ b/samples/other/chat/overview/src/index.css
@@ -0,0 +1,2 @@
+/* shared styles are loaded from: */
+/* https://static.infragistics.com/xplatform/css/samples */
\ No newline at end of file
diff --git a/samples/other/chat/overview/src/index.ts b/samples/other/chat/overview/src/index.ts
new file mode 100644
index 0000000000..ad64b7283e
--- /dev/null
+++ b/samples/other/chat/overview/src/index.ts
@@ -0,0 +1,99 @@
+import { defineComponents, IgcAvatarComponent, IgcChatComponent } from 'igniteui-webcomponents';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+import './layout.css'
+import { html } from 'lit-html';
+
+defineComponents(IgcAvatarComponent, IgcChatComponent);
+
+export class ChatOverview {
+ private chat: IgcChatComponent;
+
+ private messages = [
+ {
+ id: '1',
+ text: `Hi, I have a question about my recent order, #7890.`,
+ sender: 'user',
+ timestamp: new Date(Date.now() - 3500000)
+ },
+ {
+ id: '2',
+ text: `Hello! I can help with that. What is your question regarding order #7890?`,
+ sender: 'support',
+ timestamp: new Date(Date.now() - 3400000)
+ },
+ {
+ id: '3',
+ text: `The tracking status shows 'delivered', but I haven't received it yet. Can you confirm the delivery location?`,
+ sender: 'user',
+ timestamp: new Date(Date.now() - 3300000)
+ },
+ {
+ id: '4',
+ text: `I've reviewed the delivery details. It seems the package was left in a different spot. Here's a photo from our delivery driver showing where it was placed. Please check your porch and side door.`,
+ sender: 'support',
+ timestamp: new Date(Date.now() - 3200000),
+ attachments: [
+ {
+ id: 'delivery-location-image',
+ name: 'Delivery location',
+ url: 'https://media.istockphoto.com/id/1207972183/photo/merchandise-delivery-from-online-ordering.jpg?s=612x612&w=0&k=20&c=cGcMqd_8FALv4Tueh7sllYZuDXurkfkqoJf6IAIWhJk=',
+ type: 'image'
+ },
+ ],
+ },
+ ];
+
+ private options = {
+ disableAutoScroll: false,
+ disableInputAttachments: false,
+ suggestions: [`It's there. Thanks.`, `It's not there.`],
+ inputPlaceholder: 'Type your message here...',
+ headerText: 'Customer Support',
+ renderers: {
+ messageHeader: (ctx: any) => this.messageHeaderTemplate(ctx.param, ctx),
+ }
+ };
+
+ private messageHeaderTemplate = (msg: any, ctx: any) => {
+ return msg.sender !== 'user'
+ ? html`
+
+
+
+ Customer Support
+
+ `
+ : ctx.defaults.messageHeader(ctx);
+ };
+
+ constructor() {
+ this.chat = document.querySelector('igc-chat') as IgcChatComponent;
+ this.chat.messages = this.messages;
+ this.chat.options = this.options;
+ this.chat.addEventListener('igcMessageCreated', this.onMessageCreated)
+ }
+
+ public onMessageCreated = (e: CustomEvent) => {
+ const newMessage = e.detail;
+ this.messages.push(newMessage);
+ this.chat.options = { ...this.chat.options, suggestions: [] };
+
+ const responseMessage = {
+ id: Date.now().toString(),
+ text: `Our support team is currently unavailable. We'll get back to you as soon as possible.`,
+ sender: 'support',
+ timestamp: new Date()
+ };
+ this.messages.push(responseMessage);
+ this.chat.messages = [...this.chat.messages];
+ }
+}
+
+new ChatOverview();
diff --git a/samples/other/chat/overview/src/layout.css b/samples/other/chat/overview/src/layout.css
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/samples/other/chat/overview/tsconfig.json b/samples/other/chat/overview/tsconfig.json
new file mode 100644
index 0000000000..de23257dd8
--- /dev/null
+++ b/samples/other/chat/overview/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "noImplicitReturns": true,
+ "esModuleInterop": true,
+ "noImplicitAny": true,
+ "declarationDir": "dist/types",
+ "moduleResolution": "node",
+ "declaration": true,
+ "target": "es2015",
+ "module": "es2015",
+ "strict": true
+ },
+ "include": [
+ "src/**/*"
+ ],
+ "exclude": [
+ "node_modules",
+ "dist"
+ ]
+}
\ No newline at end of file
diff --git a/samples/other/chat/overview/webpack.config.js b/samples/other/chat/overview/webpack.config.js
new file mode 100644
index 0000000000..9d11a6155c
--- /dev/null
+++ b/samples/other/chat/overview/webpack.config.js
@@ -0,0 +1,105 @@
+const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
+const path = require('path');
+const webpack = require('webpack');
+
+module.exports = env => {
+ const nodeEnv = process.env.NODE_ENV || 'development';
+ const isProd = nodeEnv === 'production';
+ const isLegacy = !!process.env.legacy && !(process.env.legacy == "false");
+ console.log(">> webpack nodeEnv=" + nodeEnv);
+ console.log(">> webpack isProd=" + isProd);
+ console.log(">> webpack isLegacy=" + isLegacy);
+ const presets = [
+ ["@babel/preset-env", {
+ "useBuiltIns": "usage",
+ "corejs": 3,
+ "targets": {
+ "browsers": isLegacy ? ["defaults"] : [
+ "last 2 Chrome versions",
+ "last 2 Safari versions",
+ "last 2 iOS versions",
+ "last 2 Firefox versions",
+ "last 2 Edge versions"]
+ }
+ }],
+ "@babel/preset-typescript"
+ ];
+
+ return {
+ entry: isLegacy ? [
+ path.resolve(__dirname, 'node_modules/@webcomponents/custom-elements'),
+ path.resolve(__dirname, 'node_modules/@webcomponents/template'),
+ path.resolve(__dirname, 'src')
+ ] : path.resolve(__dirname, 'src'),
+ devtool: isProd ? false : 'source-map',
+ output: {
+ filename: isProd ? '[fullhash].bundle.js' : '[fullhash].bundle.js',
+ globalObject: 'this',
+ path: path.resolve(__dirname, 'dist'),
+ },
+
+ resolve: {
+ mainFields: ['esm2015', 'module', 'main'],
+ extensions: ['.ts', '.js', '.json'],
+ plugins: [new TsconfigPathsPlugin({
+ configFile: './tsconfig.json',
+ extensions: ['.ts', '.js'],
+ mainFields: ['esm2015', 'module', 'main']
+ })]
+ },
+
+ module: {
+ rules: [
+ { test: /\.(png|svg|jpg|gif)$/, use: ['file-loader'] },
+ { test: /\.(csv|tsv)$/, use: ['csv-loader'] },
+ { test: /\.xml$/, use: ['xml-loader'] },
+ { test: /\.css$/, sideEffects: true, use: ['style-loader', 'css-loader'] },
+ {
+ test: /worker\.(ts|js)$/,
+ use: [
+ { loader: 'worker-loader' },
+ {
+ loader: 'babel-loader', options: {
+ "compact": isProd ? true : false,
+ "presets": presets,
+ "plugins": [
+ "@babel/plugin-proposal-class-properties",
+ "@babel/plugin-transform-runtime"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ test: /\.(ts|js)$/, loader: 'babel-loader',
+ options: {
+ "compact": isProd ? true : false,
+ "presets": presets,
+ "plugins": [
+ "@babel/plugin-proposal-class-properties",
+ "@babel/plugin-transform-runtime"
+ ]
+ },
+ exclude:
+ function (modulePath) {
+ return /node_modules/.test(modulePath) &&
+ !/igniteui-webcomponents/.test(modulePath) &&
+ !/lit-html/.test(modulePath);
+ }
+ }],
+ },
+
+ plugins: [
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(nodeEnv)
+ }),
+ new HtmlWebpackPlugin({
+ title: 'for-cs',
+ template: 'index.html'
+ }),
+ new ForkTsCheckerWebpackPlugin()
+ ]
+ };
+};
diff --git a/samples/other/chat/styling/.prettierrc b/samples/other/chat/styling/.prettierrc
new file mode 100644
index 0000000000..15a7c7c6cf
--- /dev/null
+++ b/samples/other/chat/styling/.prettierrc
@@ -0,0 +1,11 @@
+{
+ "printWidth": 250,
+ "tabWidth": 4,
+ "useTabs": false,
+ "semi": true,
+ "singleQuote": false,
+ "trailingComma": "none",
+ "bracketSpacing": true,
+ "jsxBracketSameLine": false,
+ "fluid": false
+}
\ No newline at end of file
diff --git a/samples/other/chat/styling/ReadMe.md b/samples/other/chat/styling/ReadMe.md
new file mode 100644
index 0000000000..7d10150699
--- /dev/null
+++ b/samples/other/chat/styling/ReadMe.md
@@ -0,0 +1,56 @@
+
+
+
+This folder contains implementation of Web Components application with example of Styling feature using [Chat](https://infragistics.com/webcomponentssite/components/general-getting-started.html) component.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Branches
+
+> **_NOTE:_** You should use [master](https://github.com/IgniteUI/igniteui-angular-examples/tree/master) branch of this repository if you want to run samples on your computer. Use the [vnext](https://github.com/IgniteUI/igniteui-angular-examples/tree/vnext) branch only when you want to contribute new samples to this repository.
+
+## Instructions
+
+To set up this project locally, execute these commands:
+
+```
+git clone https://github.com/IgniteUI/igniteui-wc-examples.git
+git checkout master
+cd ./igniteui-wc-examples
+cd ./samples/other/chat/styling
+```
+
+open above folder in VS Code or type:
+```
+code .
+```
+
+In terminal window, run:
+
+```
+npm install
+npm run start
+```
+
+Then open http://localhost:4200/ in your browser
+
+
+## Learn More
+
+To learn more about **Ignite UI for Web Components**, check out the [Web Components documentation](https://infragistics.com/webcomponentssite/components/general-getting-started.html).
diff --git a/samples/other/chat/styling/index.html b/samples/other/chat/styling/index.html
new file mode 100644
index 0000000000..0186f146b2
--- /dev/null
+++ b/samples/other/chat/styling/index.html
@@ -0,0 +1,30 @@
+
+
+
+
+
Chat Overview
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <% if (false) { %>
+
+ <% } %>
+
+
+
+
\ No newline at end of file
diff --git a/samples/other/chat/styling/package.json b/samples/other/chat/styling/package.json
new file mode 100644
index 0000000000..f5f95120c7
--- /dev/null
+++ b/samples/other/chat/styling/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "wc-chat-styling",
+ "version": "1.0.0",
+ "description": "This project provides example of Chat Styling using IgniteUI for Web Components",
+ "main": "src/index.ts",
+ "scripts": {
+ "build": "npm run build:prod",
+ "build:dev": "webpack --mode development --config ./webpack.config.js --progress --color --display-error-details",
+ "build:prod": "webpack --env.NODE_ENV=production --mode production --config ./webpack.config.js --progress --color --display-error-details --bail",
+ "serve:dev": "node --max-old-space-size=8192 node_modules/webpack-dev-server/bin/webpack-dev-server.js --mode development --config ./webpack.config.js --hot --progress --open",
+ "serve:prod": "webpack-dev-server --env.NODE_ENV=production --mode production --config ./webpack.config.js --port 3000 --host 0.0.0.0 --hot --progress --open --content-base dist/",
+ "start": "npm run serve:dev",
+ "build:legacy": "npm run build:prod:legacy",
+ "build:dev:legacy": "webpack --env.legacy=true --mode development --config ./webpack.config.js --progress --color --display-error-details",
+ "build:prod:legacy": "webpack --env.NODE_ENV=production --env.legacy=true --mode production --config ./webpack.config.js --progress --color --display-error-details --bail",
+ "serve:dev:legacy": "node --max-old-space-size=8192 node_modules/webpack-dev-server/bin/webpack-dev-server.js --env.legacy=true --mode development --config ./webpack.config.js --hot --progress --open",
+ "serve:prod:legacy": "webpack-dev-server --env.NODE_ENV=production --env.legacy=true --mode production --config ./webpack.config.js --port 3000 --host 0.0.0.0 --hot --progress --open --content-base dist/",
+ "start:legacy": "npm run serve:dev:legacy"
+ },
+ "author": "Infragistics",
+ "dependencies": {
+ "@webcomponents/custom-elements": "^1.4.1",
+ "@webcomponents/template": "^1.4.2",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^3.6.5",
+ "igniteui-webcomponents": "6.3.0-beta.1",
+ "lit": "^3.2.0",
+ "lit-html": "^3.2.0",
+ "tslib": "^2.0.0"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.8.3",
+ "@babel/core": "^7.8.3",
+ "@babel/plugin-proposal-class-properties": "^7.8.3",
+ "@babel/plugin-transform-runtime": "^7.10.0",
+ "@babel/preset-env": "^7.8.3",
+ "@babel/preset-typescript": "^7.8.3",
+ "@types/source-map": "^0.5.7",
+ "babel-loader": "^8.1.0",
+ "babel-plugin-transform-custom-element-classes": "^0.1.0",
+ "css-loader": "^1.0.0",
+ "csv-loader": "^3.0.2",
+ "dompurify": "^3.2.6",
+ "file-loader": "^4.2.0",
+ "fork-ts-checker-webpack-plugin": "^4.1.5",
+ "html-webpack-plugin": "^4.3.0",
+ "marked": "^12.0.0",
+ "marked-shiki": "^1.2.0",
+ "parcel-bundler": "^1.6.1",
+ "shiki": "^3.0.0",
+ "source-map": "^0.7.3",
+ "style-loader": "^0.22.1",
+ "tsconfig-paths-webpack-plugin": "^4.0.0",
+ "typescript": "^4.4.4",
+ "webpack": "^5.96.1",
+ "webpack-cli": "^4.10.0",
+ "webpack-dev-server": "^4.11.1",
+ "worker-loader": "^3.0.8",
+ "xml-loader": "^1.2.1"
+ },
+ "license": "",
+ "homepage": "."
+}
diff --git a/samples/other/chat/styling/sandbox.config.json b/samples/other/chat/styling/sandbox.config.json
new file mode 100644
index 0000000000..5c5b54fe21
--- /dev/null
+++ b/samples/other/chat/styling/sandbox.config.json
@@ -0,0 +1,7 @@
+{
+ "infiniteLoopProtection": false,
+ "hardReloadOnChange": false,
+ "view": "browser",
+ "template": "parcel"
+}
+
\ No newline at end of file
diff --git a/samples/other/chat/styling/src/ChatStyle.css b/samples/other/chat/styling/src/ChatStyle.css
new file mode 100644
index 0000000000..ddffb52613
--- /dev/null
+++ b/samples/other/chat/styling/src/ChatStyle.css
@@ -0,0 +1,72 @@
+ /*
+ * @csspart header - Styles the header container.
+ * @csspart prefix - Styles the element before the title (e.g., avatar).
+ * @csspart title - Styles the chat header title.
+ * @csspart suggestions - Styles the suggestion container.
+ * @csspart suggestion - Styles each suggestion item.
+ */
+
+ igc-chat {
+ border: 2px solid var(--ig-gray-300);
+ }
+
+igc-chat::part(header) {
+ display: flex;
+ align-items: center;
+ padding: 10px;
+ border-bottom: 1px solid var(--ig-gray-300);
+ background-color: var(--ig-gray-200);
+}
+
+igc-chat::part(prefix) {
+ margin-right: 10px;
+}
+
+igc-chat::part(message-container) {
+ background: var(--igc-chat-bubble-bg, #eee);
+ color: var(--igc-chat-text-color, #222);
+ padding: 12px;
+ border-radius: 8px;
+ transition: background .15s;
+}
+
+igc-chat::part(sent) {
+ background: var(--igc-chat-sent-bubble-bg, #e6f4ff);
+ color: var(--igc-chat-sent-text-color, #03396b);
+}
+
+igc-chat::part(message-actions) {
+ border-top: 1px solid var(--ig-gray-300);
+}
+
+igc-chat::part(title) {
+ font-family: 'Franklin Gothic Medium';
+ color: var(--ig-gray-700);
+}
+
+igc-chat::part(suggestions) {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ padding: 10px;
+ background-color: var(--ig-gray-50);
+}
+
+igc-chat::part(suggestion) {
+ background-color: var(--ig-primary-100);
+ color: var(--ig-primary-800);
+ padding: 8px 12px;
+ border-radius: 20px;
+ cursor: pointer;
+ transition: background-color 0.3s, color 0.3s;
+}
+
+/* TODO: Change after parts are fixed */
+igc-message-attachments::part(attachment) {
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5);
+}
+
+/* TODO: Change after parts are fixed */
+igc-chat::part(input-attachments-container) {
+ border: 5px solid var(--ig-gray-300);
+}
\ No newline at end of file
diff --git a/samples/other/chat/styling/src/assets/delivery.png b/samples/other/chat/styling/src/assets/delivery.png
new file mode 100644
index 0000000000..2030ee4eb5
Binary files /dev/null and b/samples/other/chat/styling/src/assets/delivery.png differ
diff --git a/samples/other/chat/styling/src/index.css b/samples/other/chat/styling/src/index.css
new file mode 100644
index 0000000000..0fe9368715
--- /dev/null
+++ b/samples/other/chat/styling/src/index.css
@@ -0,0 +1,2 @@
+/* shared styles are loaded from: */
+/* https://static.infragistics.com/xplatform/css/samples */
\ No newline at end of file
diff --git a/samples/other/chat/styling/src/index.ts b/samples/other/chat/styling/src/index.ts
new file mode 100644
index 0000000000..98faba37ba
--- /dev/null
+++ b/samples/other/chat/styling/src/index.ts
@@ -0,0 +1,100 @@
+import { defineComponents, IgcAvatarComponent, IgcChatComponent } from 'igniteui-webcomponents';
+import 'igniteui-webcomponents/themes/light/bootstrap.css';
+import './layout.css'
+import { html } from 'lit-html';
+import './ChatStyle.css';
+
+defineComponents(IgcAvatarComponent, IgcChatComponent);
+
+export class ChatOverview {
+ private chat: IgcChatComponent;
+
+ private messages = [
+ {
+ id: '1',
+ text: `Hi, I have a question about my recent order, #7890.`,
+ sender: 'user',
+ timestamp: new Date(Date.now() - 3500000)
+ },
+ {
+ id: '2',
+ text: `Hello! I can help with that. What is your question regarding order #7890?`,
+ sender: 'support',
+ timestamp: new Date(Date.now() - 3400000)
+ },
+ {
+ id: '3',
+ text: `The tracking status shows 'delivered', but I haven't received it yet. Can you confirm the delivery location?`,
+ sender: 'user',
+ timestamp: new Date(Date.now() - 3300000)
+ },
+ {
+ id: '4',
+ text: `I've reviewed the delivery details. It seems the package was left in a different spot. Here's a photo from our delivery driver showing where it was placed. Please check your porch and side door.`,
+ sender: 'support',
+ timestamp: new Date(Date.now() - 3200000),
+ attachments: [
+ {
+ id: 'delivery-location-image',
+ name: 'Delivery location',
+ url: 'https://media.istockphoto.com/id/1207972183/photo/merchandise-delivery-from-online-ordering.jpg?s=612x612&w=0&k=20&c=cGcMqd_8FALv4Tueh7sllYZuDXurkfkqoJf6IAIWhJk=',
+ type: 'image'
+ },
+ ],
+ },
+ ];
+
+ private options = {
+ disableAutoScroll: false,
+ disableInputAttachments: false,
+ suggestions: [`It's there. Thanks.`, `It's not there.`],
+ inputPlaceholder: 'Type your message here...',
+ headerText: 'Customer Support',
+ renderers: {
+ messageHeader: (ctx: any) => this.messageHeaderTemplate(ctx.param, ctx),
+ }
+ };
+
+ private messageHeaderTemplate = (msg: any, ctx: any) => {
+ return msg.sender !== 'user'
+ ? html`
+
+
+
+ Customer Support
+
+ `
+ : ctx.defaults.messageHeader(ctx);
+ };
+
+ constructor() {
+ this.chat = document.querySelector('igc-chat') as IgcChatComponent;
+ this.chat.messages = this.messages;
+ this.chat.options = this.options;
+ this.chat.addEventListener('igcMessageCreated', this.onMessageCreated)
+ }
+
+ public onMessageCreated = (e: CustomEvent) => {
+ const newMessage = e.detail;
+ this.messages.push(newMessage);
+ this.chat.options = { ...this.chat.options, suggestions: [] };
+
+ const responseMessage = {
+ id: Date.now().toString(),
+ text: `Our support team is currently unavailable. We'll get back to you as soon as possible.`,
+ sender: 'support',
+ timestamp: new Date()
+ };
+ this.messages.push(responseMessage);
+ this.chat.messages = [...this.chat.messages];
+ }
+}
+
+new ChatOverview();
diff --git a/samples/other/chat/styling/src/layout.css b/samples/other/chat/styling/src/layout.css
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/samples/other/chat/styling/tsconfig.json b/samples/other/chat/styling/tsconfig.json
new file mode 100644
index 0000000000..de23257dd8
--- /dev/null
+++ b/samples/other/chat/styling/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "noImplicitReturns": true,
+ "esModuleInterop": true,
+ "noImplicitAny": true,
+ "declarationDir": "dist/types",
+ "moduleResolution": "node",
+ "declaration": true,
+ "target": "es2015",
+ "module": "es2015",
+ "strict": true
+ },
+ "include": [
+ "src/**/*"
+ ],
+ "exclude": [
+ "node_modules",
+ "dist"
+ ]
+}
\ No newline at end of file
diff --git a/samples/other/chat/styling/webpack.config.js b/samples/other/chat/styling/webpack.config.js
new file mode 100644
index 0000000000..9d11a6155c
--- /dev/null
+++ b/samples/other/chat/styling/webpack.config.js
@@ -0,0 +1,105 @@
+const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
+const path = require('path');
+const webpack = require('webpack');
+
+module.exports = env => {
+ const nodeEnv = process.env.NODE_ENV || 'development';
+ const isProd = nodeEnv === 'production';
+ const isLegacy = !!process.env.legacy && !(process.env.legacy == "false");
+ console.log(">> webpack nodeEnv=" + nodeEnv);
+ console.log(">> webpack isProd=" + isProd);
+ console.log(">> webpack isLegacy=" + isLegacy);
+ const presets = [
+ ["@babel/preset-env", {
+ "useBuiltIns": "usage",
+ "corejs": 3,
+ "targets": {
+ "browsers": isLegacy ? ["defaults"] : [
+ "last 2 Chrome versions",
+ "last 2 Safari versions",
+ "last 2 iOS versions",
+ "last 2 Firefox versions",
+ "last 2 Edge versions"]
+ }
+ }],
+ "@babel/preset-typescript"
+ ];
+
+ return {
+ entry: isLegacy ? [
+ path.resolve(__dirname, 'node_modules/@webcomponents/custom-elements'),
+ path.resolve(__dirname, 'node_modules/@webcomponents/template'),
+ path.resolve(__dirname, 'src')
+ ] : path.resolve(__dirname, 'src'),
+ devtool: isProd ? false : 'source-map',
+ output: {
+ filename: isProd ? '[fullhash].bundle.js' : '[fullhash].bundle.js',
+ globalObject: 'this',
+ path: path.resolve(__dirname, 'dist'),
+ },
+
+ resolve: {
+ mainFields: ['esm2015', 'module', 'main'],
+ extensions: ['.ts', '.js', '.json'],
+ plugins: [new TsconfigPathsPlugin({
+ configFile: './tsconfig.json',
+ extensions: ['.ts', '.js'],
+ mainFields: ['esm2015', 'module', 'main']
+ })]
+ },
+
+ module: {
+ rules: [
+ { test: /\.(png|svg|jpg|gif)$/, use: ['file-loader'] },
+ { test: /\.(csv|tsv)$/, use: ['csv-loader'] },
+ { test: /\.xml$/, use: ['xml-loader'] },
+ { test: /\.css$/, sideEffects: true, use: ['style-loader', 'css-loader'] },
+ {
+ test: /worker\.(ts|js)$/,
+ use: [
+ { loader: 'worker-loader' },
+ {
+ loader: 'babel-loader', options: {
+ "compact": isProd ? true : false,
+ "presets": presets,
+ "plugins": [
+ "@babel/plugin-proposal-class-properties",
+ "@babel/plugin-transform-runtime"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ test: /\.(ts|js)$/, loader: 'babel-loader',
+ options: {
+ "compact": isProd ? true : false,
+ "presets": presets,
+ "plugins": [
+ "@babel/plugin-proposal-class-properties",
+ "@babel/plugin-transform-runtime"
+ ]
+ },
+ exclude:
+ function (modulePath) {
+ return /node_modules/.test(modulePath) &&
+ !/igniteui-webcomponents/.test(modulePath) &&
+ !/lit-html/.test(modulePath);
+ }
+ }],
+ },
+
+ plugins: [
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(nodeEnv)
+ }),
+ new HtmlWebpackPlugin({
+ title: 'for-cs',
+ template: 'index.html'
+ }),
+ new ForkTsCheckerWebpackPlugin()
+ ]
+ };
+};