diff --git a/samples/layouts/icon/references/.prettierrc b/samples/layouts/icon/references/.prettierrc new file mode 100644 index 000000000..15a7c7c6c --- /dev/null +++ b/samples/layouts/icon/references/.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/layouts/icon/references/ReadMe.md b/samples/layouts/icon/references/ReadMe.md new file mode 100644 index 000000000..6cc890bc7 --- /dev/null +++ b/samples/layouts/icon/references/ReadMe.md @@ -0,0 +1,56 @@ +<!-- NOTE: do not change this file because it's auto re-generated from template: --> +<!-- https://github.com/IgniteUI/igniteui-wc-examples/tree/vnext/templates/browser/sample/ReadMe.md --> + +This folder contains implementation of Web Components application with example of Sizing feature using [Icon](https://infragistics.com/webcomponentssite/components/general-getting-started.html) component. + + +<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> + <body> + <a target="_blank" href="https://infragistics.com/webcomponentssite/components/general-getting-started.html" rel="noopener noreferrer"> + <img height="40px" style="border-radius: 0rem" alt="View Docs" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-docs.png"/> + </a> + <a target="_blank" href="./src/index.ts" rel="noopener noreferrer"> + <img height="40px" style="border-radius: 0rem; max-width: 100%;" alt="View Code" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-code.png"/> + </a> + <a target="_blank" href="https://www.infragistics.com/webcomponents-demos/samples/layouts/icon/sizing" rel="noopener noreferrer"> + <img height="40px" style="border-radius: 0rem; max-width: 100%;" alt="Run Sample" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-run.png"/> + </a> + <a target="_blank" href="https://codesandbox.io/s/github/IgniteUI/igniteui-wc-examples/tree/master/samples/layouts/icon/sizing?fontsize=14&hidenavigation=1&theme=dark&view=preview&file=/src/{SampleFile}" rel="noopener noreferrer"> + <img height="40px" style="border-radius: 0rem; max-width: 100%;" alt="Run Sample" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-sandbox.png"/> + </a> + </body> +</html> + +## 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/layouts/icon/sizing +``` + +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/layouts/icon/references/index.html b/samples/layouts/icon/references/index.html new file mode 100644 index 000000000..1e3c9477d --- /dev/null +++ b/samples/layouts/icon/references/index.html @@ -0,0 +1,29 @@ +<!doctype html> +<html> + <head> + <title>Icon References</title> + <meta charset="UTF-8" /> + + <link rel="shortcut icon" href="https://static.infragistics.com/xplatform/images/browsers/wc.png" /> + <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" /> + <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /> + <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Titillium Web" /> + <link rel="stylesheet" href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" type="text/css" /> + </head> + + <body> + <div id="root"> + <div class="container sample"> + <div class="controls"> + <igc-icon name="rewind" collection="player"></igc-icon> + <igc-icon name="control" collection="player"></igc-icon> + <igc-icon name="forward" collection="player"></igc-icon> + </div> + </div> + </div> + <!-- This script is needed only for parcel and it will be excluded for webpack --> + <% if (false) { %> + <script src="src/index.ts"></script> + <% } %> + </body> +</html> diff --git a/samples/layouts/icon/references/package.json b/samples/layouts/icon/references/package.json new file mode 100644 index 000000000..b35b471fe --- /dev/null +++ b/samples/layouts/icon/references/package.json @@ -0,0 +1,60 @@ +{ + "name": "example-ignite-ui-web-components", + "description": "This project provides example of using Ignite UI for Web Components", + "author": "Infragistics", + "version": "1.0.0", + "license": "", + "private": true, + "homepage": ".", + "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" + }, + "dependencies": { + "@webcomponents/custom-elements": "^1.4.1", + "@webcomponents/template": "^1.4.2", + "babel-runtime": "^6.26.0", + "core-js": "^3.6.5", + "igniteui-webcomponents": "file:../../../../../igniteui-webcomponents/dist/igniteui-webcomponents-0.0.0.tgz", + "lit": "^2.0.0", + "lit-html": "^2.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", + "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.74.0", + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.11.1", + "worker-loader": "^3.0.8", + "xml-loader": "^1.2.1" + } +} diff --git a/samples/layouts/icon/references/sandbox.config.json b/samples/layouts/icon/references/sandbox.config.json new file mode 100644 index 000000000..52c787510 --- /dev/null +++ b/samples/layouts/icon/references/sandbox.config.json @@ -0,0 +1,6 @@ +{ + "infiniteLoopProtection": false, + "hardReloadOnChange": false, + "view": "browser", + "template": "parcel" +} \ No newline at end of file diff --git a/samples/layouts/icon/references/src/index.css b/samples/layouts/icon/references/src/index.css new file mode 100644 index 000000000..edb96af06 --- /dev/null +++ b/samples/layouts/icon/references/src/index.css @@ -0,0 +1,50 @@ +/* shared styles are loaded from: */ +/* https://static.infragistics.com/xplatform/css/samples */ +.controls { + display: flex; + gap: 1rem; + flex-direction: row; + border: 1px solid hsl(var(--ig-gray-300)); + justify-items: center; + justify-content: center; +} + +igc-icon { + --size: 3rem; + color: hsl(var(--ig-gray-600)); +} + +igc-icon[name="control"] { + position: relative; + --size: 4rem; + cursor: pointer; + color: hsl(var(--ig-gray-800)); + z-index: 0; + + &::after { + position: absolute; + content: ''; + inset: 0; + background: hsl(var(--ig-warn-500)); + border-radius: 50%; + animation: pulse 1.25s ease-in-out infinite both; + z-index: -1; + } +} + +@keyframes pulse { + 0% { + transform: scale(.5); + opacity: 0; + } + + 50% { + transform: scale(1); + opacity: .5; + } + + 100% { + transform: scale(.5); + opacity: 0; + } +} diff --git a/samples/layouts/icon/references/src/index.ts b/samples/layouts/icon/references/src/index.ts new file mode 100644 index 000000000..b22d82adf --- /dev/null +++ b/samples/layouts/icon/references/src/index.ts @@ -0,0 +1,50 @@ +import { defineComponents, IgcIconComponent, registerIcon, setIconRef } from "igniteui-webcomponents"; +import "igniteui-webcomponents/themes/light/bootstrap.css"; +import "./index.css"; + +defineComponents(IgcIconComponent); + +export class IconReferences { + private playing = false; + + constructor() { + const icon = document.querySelector("igc-icon[name='control']"); + icon?.addEventListener("click", this.togglePlayer.bind(this)); + this.setIcon(); + } + + public static async build() { + await registerIcon("rewind", "https://cdn.jsdelivr.net/npm/material-design-icons@3.0.1/av/svg/production/ic_fast_rewind_24px.svg", "material"); + await registerIcon("forward", "https://cdn.jsdelivr.net/npm/material-design-icons@3.0.1/av/svg/production/ic_fast_forward_24px.svg", "material"); + await registerIcon("play", "https://cdn.jsdelivr.net/npm/material-design-icons@3.0.1/av/svg/production/ic_play_circle_filled_24px.svg", "material"); + await registerIcon("pause", "https://cdn.jsdelivr.net/npm/material-design-icons@3.0.1/av/svg/production/ic_pause_circle_filled_24px.svg", "material"); + + setIconRef("rewind", "player", { + name: "rewind", + collection: "material" + }); + + setIconRef("forward", "player", { + name: "forward", + collection: "material" + }); + + return new IconReferences(); + } + + private setIcon() { + setIconRef("control", "player", { + name: this.playing ? "pause" : "play", + collection: "material" + }); + } + + private togglePlayer() { + this.playing = !this.playing; + this.setIcon(); + } +} + +(async () => { + await IconReferences.build(); +})(); diff --git a/samples/layouts/icon/references/tsconfig.json b/samples/layouts/icon/references/tsconfig.json new file mode 100644 index 000000000..7c639d7f0 --- /dev/null +++ b/samples/layouts/icon/references/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" + ] +} diff --git a/samples/layouts/icon/references/tslint.json b/samples/layouts/icon/references/tslint.json new file mode 100644 index 000000000..18e202b1f --- /dev/null +++ b/samples/layouts/icon/references/tslint.json @@ -0,0 +1,53 @@ +{ + "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"], + "linterOptions": { + "exclude": [ + "node_modules/**/*.ts", + "**/odatajs-4.0.0.js", + "src/images/*.*" + ] + }, + "rules": { + "only-arrow-functions": false, + "jsx-self-close": false, + "jsx-wrap-multiline": false, + "no-var-requires": false, + "no-var": false, + "no-var-keyword": false, + "no-console": false, + "no-string-literal": false, + "no-unused-vars": false, + "@typescript-eslint/no-unused-vars": "off", + "jsx-no-lambda": false, + "ordered-imports": false, + "object-literal-sort-keys": false, + "object-literal-shorthand": false, + "member-ordering": false, + "curly": [false, "ignore-same-line"], + "max-classes-per-file": [true, 10], + "prefer-const": false, + "prefer-for-of": false, + "no-useless-constructor": false, + "@typescript-eslint/no-useless-constructor": "off", + "@typescript-eslint/type-annotation-spacing": "off" + }, + "jsRules": { + "only-arrow-functions": false, + "jsx-self-close": false, + "jsx-wrap-multiline": false, + "no-var-requires": false, + "no-console": false, + "no-unused-vars": false, + "@typescript-eslint/no-unused-vars": "off", + "jsx-no-lambda": false, + "ordered-imports": false, + "object-literal-sort-keys": false, + "object-literal-shorthand": false, + "curly": [false, "ignore-same-line"], + "max-classes-per-file": [true, 10], + "prefer-const": false, + "prefer-for-of": false, + "no-useless-constructor": false, + "@typescript-eslint/no-useless-constructor": "off" + } + } \ No newline at end of file diff --git a/samples/layouts/icon/references/webpack.config.js b/samples/layouts/icon/references/webpack.config.js new file mode 100644 index 000000000..9d11a6155 --- /dev/null +++ b/samples/layouts/icon/references/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() + ] + }; +};