@openremote/or-icon 1.0.0 → 1.2.0-snapshot.20240512154942

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,24 +1,61 @@
1
+ # @openremote/or-icon \<or-icon\>
1
2
  [![NPM Version][npm-image]][npm-url]
2
3
  [![Linux Build][travis-image]][travis-url]
3
4
  [![Test Coverage][coveralls-image]][coveralls-url]
4
5
 
5
- ## Install
6
+ Web Component for displaying an icon from a loaded iconset.
6
7
 
8
+ ## Install
7
9
  ```bash
8
- npm i -S @openremote/or-map
10
+ npm i @openremote/or-icon
11
+ yarn add @openremote/or-icon
9
12
  ```
10
13
 
11
14
  ## Usage
15
+ For a full list of properties, methods and options refer to the TypeDoc generated [documentation]().
12
16
 
13
- TODO
17
+ Icons are defined in iconsets, there are two iconsets provided by default and new ones can be created as required (see
18
+ [demo-core](../../demo/demo-core)), The `mdi` iconset is quite large and it is possible to prevent loading of this
19
+ when initialising the OpenRemote `Manager` via the `ManagerConfig`:
14
20
 
15
- ## License
21
+ * `mdi` - [Material Design Icons](https://materialdesignicons.com/)
22
+ * `or` - OpenRemote icons (see [here](./or-iconset.ts))
23
+
24
+ The default iconset is `mdi` but this can be changed by setting `OrIcon.DEFAULT_ICONSET`, to load an icon use the
25
+ following HTML:
26
+
27
+ ```$html
28
+ <or-icon icon="mdi:access-point" />
29
+ ```
30
+
31
+ If using the default iconset then the iconset prefix can be omitted:
32
+ ```$html
33
+ <or-icon icon="access-point" />
34
+ ```
16
35
 
36
+ Styling is done through CSS, the following CSS variables can be used:
37
+
38
+ ```$css
39
+ --or-icon-fill (default: currentcolor)
40
+ --or-icon-stroke (default: none)
41
+ --or-icon-height (default: 24px)
42
+ --or-icon-width (default: 24px)
43
+ --or-icon-pointer-events (default: none)
44
+ ```
45
+
46
+ When an iconset is added then any `or-icon` components in the DOM will be notified and refresh as required.
47
+
48
+ ## Supported Browsers
49
+ The last 2 versions of all modern browsers are supported, including Chrome, Safari, Opera, Firefox, Edge. In addition,
50
+ Internet Explorer 11 is also supported.
51
+
52
+
53
+ ## License
17
54
  [GNU AGPL](https://www.gnu.org/licenses/agpl-3.0.en.html)
18
55
 
19
56
  [npm-image]: https://img.shields.io/npm/v/live-xxx.svg
20
- [npm-url]: https://npmjs.org/package/live-xxx
57
+ [npm-url]: https://npmjs.org/package/@openremote/or-icon
21
58
  [travis-image]: https://img.shields.io/travis/live-js/live-xxx/master.svg
22
59
  [travis-url]: https://travis-ci.org/live-js/live-xxx
23
60
  [coveralls-image]: https://img.shields.io/coveralls/live-js/live-xxx/master.svg
24
- [coveralls-url]: https://coveralls.io/r/live-js/live-xxx?branch=master
61
+ [coveralls-url]: https://coveralls.io/r/live-js/live-xxx?branch=master
package/lib/index.d.ts ADDED
@@ -0,0 +1,40 @@
1
+ import { LitElement, PropertyValues, TemplateResult } from "lit";
2
+ import { AssetDescriptor } from "@openremote/model";
3
+ import OrIconSet from "./or-icon-set";
4
+ export { OrIconSet };
5
+ export declare class IconSetAddedEvent extends CustomEvent<void> {
6
+ static readonly NAME = "or-iconset-added";
7
+ constructor();
8
+ }
9
+ declare global {
10
+ export interface HTMLElementEventMap {
11
+ [IconSetAddedEvent.NAME]: IconSetAddedEvent;
12
+ }
13
+ }
14
+ export interface IconSet {
15
+ getIconTemplate: (icon: string) => TemplateResult;
16
+ onAdd?: () => void;
17
+ }
18
+ export declare function createSvgIconSet(size: number, icons: {
19
+ [name: string]: string;
20
+ }): IconSet;
21
+ export declare function createMdiIconSet(managerUrl: string): IconSet;
22
+ declare class ORIconSets {
23
+ private _icons;
24
+ private _defaultIconSet?;
25
+ addIconSet(name: string, iconSet: IconSet): void;
26
+ getIconSet(name: string): IconSet;
27
+ getIconTemplate(icon: string | undefined): TemplateResult;
28
+ }
29
+ export declare const IconSets: ORIconSets;
30
+ export declare function getAssetDescriptorIconTemplate(descriptor: AssetDescriptor | undefined, fallbackColor?: string | undefined, fallbackIcon?: string | undefined, overrideColor?: string | undefined, overrideIcon?: string | undefined): TemplateResult;
31
+ export declare class OrIcon extends LitElement {
32
+ static get styles(): import("lit").CSSResult[];
33
+ icon?: string;
34
+ protected _iconTemplate?: TemplateResult;
35
+ protected _handler: (evt: Event) => void;
36
+ protected render(): TemplateResult;
37
+ disconnectedCallback(): void;
38
+ protected shouldUpdate(changedProperties: PropertyValues): boolean;
39
+ protected _updateIcon(): void;
40
+ }
package/lib/index.js ADDED
@@ -0,0 +1,49 @@
1
+ var __decorate=this&&this.__decorate||function(t,e,o,n){var r,i=arguments.length,s=i<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,o,n);else for(var c=t.length-1;c>=0;c--)(r=t[c])&&(s=(i<3?r(s):i>3?r(e,o,s):r(e,o))||s);return i>3&&s&&Object.defineProperty(e,o,s),s};import{css,html,LitElement,unsafeCSS}from"lit";import{unsafeSVG}from"lit/directives/unsafe-svg.js";import{customElement,property,state}from"lit/decorators.js";import{AssetModelUtil}from"@openremote/model";import OrIconSet from"./or-icon-set";export{OrIconSet};const mdiFontStyle=require("@mdi/font/css/materialdesignicons.min.css");export class IconSetAddedEvent extends CustomEvent{constructor(){super(IconSetAddedEvent.NAME,{bubbles:!0,composed:!0})}}IconSetAddedEvent.NAME="or-iconset-added";export function createSvgIconSet(t,e){return{getIconTemplate:o=>{const n=e[o];return n?html`
2
+ <svg xmlns="http://www.w3.org/2000/svg"
3
+ viewBox="0 0 ${t} ${t}" preserveAspectRatio="xMidYMid meet" focusable="false">
4
+ ${unsafeSVG(n.startsWith("<")?n:'<path xmlns="http://www.w3.org/2000/svg" d="'+n+'" />')}
5
+ </svg>
6
+ `:html``},onAdd:void 0}}export function createMdiIconSet(t){return{getIconTemplate:t=>html`<span style="font-family: 'Material Design Icons';" class="mdi-${t}"></span>`,onAdd(){const e=document.createElement("style");e.id="mdiFontStyle",e.textContent='@font-face {\n font-family: "Material Design Icons";\n src: url("'+t+'/shared/fonts/Material Design Icons/fonts/materialdesignicons-webfont.eot");\n src: url("'+t+'/shared/fonts/Material Design Icons/fonts/materialdesignicons-webfont.eot") format("embedded-opentype"), url("'+t+'/shared/fonts/Material Design Icons/fonts/materialdesignicons-webfont.woff2") format("woff2"), url("'+t+'/shared/fonts/Material Design Icons/fonts/materialdesignicons-webfont.woff") format("woff"), url("'+t+'/shared/fonts/Material Design Icons//fonts/materialdesignicons-webfont.ttf") format("truetype");\n font-weight: normal;\n font-style: normal;\n}',document.head.appendChild(e)}}}class ORIconSets{constructor(){this._icons={}}addIconSet(t,e){this._icons[t]=e,this._defaultIconSet||(this._defaultIconSet=e),e.onAdd&&e.onAdd(),window.dispatchEvent(new IconSetAddedEvent)}getIconSet(t){return this._icons[t]}getIconTemplate(t){if(!t)return html``;const e=(t||"").split(":"),o=e.pop(),n=e.pop();let r=this._defaultIconSet;return n&&(r=this.getIconSet(n)),o&&r?r.getIconTemplate(o):html``}}export const IconSets=new ORIconSets;export function getAssetDescriptorIconTemplate(t,e,o,n,r){const i=n||AssetModelUtil.getAssetDescriptorColour(t,e);let s=r||AssetModelUtil.getAssetDescriptorIcon(t,o);return s||(s=AssetModelUtil.getAssetDescriptorIcon("ThingAsset")),html`<or-icon style="--or-icon-fill: ${i?"#"+i:"unset"}" icon="${s}"></or-icon>`}let OrIcon=class extends LitElement{constructor(){super(...arguments),this._handler=t=>{this._updateIcon()}}static get styles(){return[css`
7
+ :host {
8
+ --internal-or-icon-width: var(--or-icon-width, 24px);
9
+ --internal-or-icon-height: var(--or-icon-height, 24px);
10
+ --internal-or-icon-fill: var(--or-icon-fill, currentColor);
11
+ --internal-or-icon-stroke: var(--or-icon-fill, none);
12
+ --internal-or-icon-stroke-width: var(--or-icon-stroke-width, 0);
13
+
14
+ display: inline-block;
15
+ color: var(--internal-or-icon-fill);
16
+ fill: var(--internal-or-icon-fill);
17
+ stroke: var(--internal-or-icon-stroke);
18
+ stroke-width: var(--internal-or-icon-stroke-width);
19
+ vertical-align: text-bottom;
20
+ font-weight: normal;
21
+ font-style: normal;
22
+ font-size: var(--internal-or-icon-width);
23
+ line-height: 1;
24
+ letter-spacing: normal;
25
+ text-transform: none;
26
+ white-space: nowrap;
27
+ word-wrap: normal;
28
+ direction: ltr;
29
+ /* Support for all WebKit browsers. */
30
+ -webkit-font-smoothing: antialiased;
31
+ /* Support for Safari and Chrome. */
32
+ text-rendering: optimizeLegibility;
33
+ /* Support for Firefox. */
34
+ -moz-osx-font-smoothing: grayscale;
35
+ /* Support for IE. */
36
+ font-feature-settings: 'liga';
37
+ }
38
+
39
+ :host([hidden]) {
40
+ display: none;
41
+ }
42
+
43
+ svg {
44
+ pointer-events: none;
45
+ display: block;
46
+ width: var(--internal-or-icon-width);
47
+ height: var(--internal-or-icon-height);
48
+ }
49
+ `,css`${unsafeCSS(mdiFontStyle)}`]}render(){return this._iconTemplate||html``}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(IconSetAddedEvent.NAME,this._handler)}shouldUpdate(t){return t.has("icon")&&this._updateIcon(),!0}_updateIcon(){this._iconTemplate=void 0,window.removeEventListener(IconSetAddedEvent.NAME,this._handler),this._iconTemplate=IconSets.getIconTemplate(this.icon),this.icon&&!this._iconTemplate&&window.addEventListener(IconSetAddedEvent.NAME,this._handler)}};__decorate([property({type:String,reflect:!0})],OrIcon.prototype,"icon",void 0),__decorate([state()],OrIcon.prototype,"_iconTemplate",void 0),OrIcon=__decorate([customElement("or-icon")],OrIcon);export{OrIcon};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ declare const orIconSet: {
2
+ size: number;
3
+ icons: {
4
+ logo: string;
5
+ "logo-plain": string;
6
+ marker: string;
7
+ };
8
+ };
9
+ export default orIconSet;
@@ -0,0 +1 @@
1
+ const orIconSet={size:24,icons:{logo:'<path style=\'pointer-events: var(--or-icon-pointer-events, none);\' fill="#C4D600" d="m11.96125,23.85096c-6.56773,0 -11.90971,-5.34202 -11.90971,-11.90862l2.49411,0c0,5.19176 4.22389,9.41568 9.41561,9.41568c5.19053,0 9.41561,-4.22392 9.41561,-9.41568c0,-5.19176 -4.22389,-9.41568 -9.41561,-9.41568l0,-2.49413c6.56655,0 11.90971,5.34439 11.90971,11.9098c0,6.5666 -5.34316,11.90862 -11.90971,11.90862l0,0z" /><path fill="#4E9D2D" d="m10.25094,20.38647c-2.26848,-0.47231 -4.21822,-1.80199 -5.48741,-3.74009s-1.70892,-4.25777 -1.23545,-6.52625c0.47347,-2.26965 1.80315,-4.21822 3.74242,-5.48857c1.93926,-1.27035 4.25661,-1.70892 6.52625,-1.23545c4.68471,0.97719 7.70121,5.5828 6.72286,10.26635l-2.39994,-0.49907c0.70149,-3.36085 -1.4623,-6.66585 -4.82431,-7.36734c-1.62866,-0.33969 -3.29105,-0.02559 -4.68238,0.88645c-1.39134,0.91088 -2.34526,2.3092 -2.68495,3.93786c-0.33853,1.62633 -0.02443,3.28988 0.88645,4.68122c0.91088,1.39134 2.3092,2.34526 3.93786,2.68379l-0.50139,2.4011l0,0z"/><path fill="#1D5632"d="m12.03064,17.49616c-0.09524,0 -0.19048,-0.00116 -0.28457,-0.00465c-1.49833,-0.0755 -2.87818,-0.72942 -3.88636,-1.84097c-1.00818,-1.11271 -1.52156,-2.54948 -1.44722,-4.05013l2.44378,0.12196c-0.04181,0.84557 0.24856,1.65745 0.81769,2.28466c0.56681,0.62721 1.34733,0.99656 2.1929,1.03838c0.84208,0.03833 1.65629,-0.2474 2.2835,-0.81653c0.62837,-0.56797 0.99656,-1.34617 1.03954,-2.19174c0.08711,-1.74573 -1.26371,-3.23708 -3.00943,-3.3242l0.12196,-2.44378c3.09422,0.15332 5.4869,2.79455 5.33358,5.88877c-0.07434,1.49949 -0.72942,2.87818 -1.84097,3.8852c-1.04186,0.94313 -2.36945,1.45303 -3.7644,1.45303l0,0z"/>',"logo-plain":"m11.9925,23.91349c-6.58498,0 -11.94099,-5.35605 -11.94099,-11.9399l2.50066,0c0,5.20539 4.23498,9.44041 9.44033,9.44041c5.20416,0 9.44033,-4.23502 9.44033,-9.44041c0,-5.20539 -4.23498,-9.44041 -9.44033,-9.44041l0,-2.50068c6.5838,0 11.94099,5.35842 11.94099,11.94108c0,6.58385 -5.35719,11.9399 -11.94099,11.9399l0,0zm-1.80787,-3.27769c-2.31323,-0.48163 -4.30141,-1.83755 -5.59563,-3.81389s-1.74263,-4.34178 -1.25982,-6.65502c0.48281,-2.31443 1.83872,-4.30145 3.81623,-5.59686c1.97751,-1.29542 4.34056,-1.74264 6.65497,-1.25983c4.77711,0.99647 7.8531,5.69295 6.85545,10.46891l-2.44727,-0.50891c0.71532,-3.42716 -1.49114,-6.79738 -4.91946,-7.5127c-1.66078,-0.34639 -3.35596,-0.0261 -4.77474,0.90394c-1.41878,0.92886 -2.39152,2.35476 -2.73791,4.01555c-0.3452,1.65842 -0.02491,3.3548 0.90394,4.77359c0.92885,1.41879 2.35475,2.39154 4.01552,2.73675l-0.51128,2.44848l0,0zm1.81499,-2.92536c-0.09727,0 -0.19455,-0.00119 -0.29064,-0.00475c-1.53029,-0.07711 -2.93958,-0.74498 -3.96926,-1.88025c-1.02968,-1.13646 -1.55401,-2.60388 -1.47809,-4.13655l2.49591,0.12456c-0.04271,0.86361 0.25386,1.69282 0.83513,2.33341c0.5789,0.64059 1.37607,1.01783 2.23968,1.06053c0.86005,0.03915 1.69162,-0.25268 2.33221,-0.83395c0.64177,-0.58009 1.01782,-1.3749 1.06171,-2.23851c0.08897,-1.78298 -1.29066,-3.30616 -3.07362,-3.39513l0.12456,-2.49593c3.16022,0.15659 5.60394,2.85419 5.44735,6.01443c-0.07592,1.53149 -0.74498,2.9396 -1.88024,3.9681c-1.06408,0.96326 -2.41999,1.48403 -3.8447,1.48403l0,0z",marker:'<ellipse fill="#000" opacity="0.2" ry="1.5" rx="4" cy="22.5" cx="12" /><path style=\'pointer-events: var(--or-icon-pointer-events, none);\' d="m11.999999,0a8.437501,8.344057 0 0 1 8.437501,8.344057c0,6.500779 -5.798864,6.280799 -8.437501,14.412461c-2.638637,-8.131662 -8.437501,-7.911683 -8.437501,-14.412461a8.437501,8.344057 0 0 1 8.437501,-8.344057z" />'}};export default orIconSet;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"or-icon-set.js","sourceRoot":"","sources":["../src/or-icon-set.ts"],"names":[],"mappings":"AACA,MAAM,SAAS,GAAG;IACd,IAAI,EAAE,EAAE;IACR,KAAK,EAAE;QACH,MAAM,EAAE,0lDAA0lD;QAClmD,YAAY,EAAE,+7CAA+7C;QAC78C,QAAQ,EAAE,kXAAkX;KAC/X;CACJ,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,17 @@
1
+ // Script for copying @mdi/font files into dist dir
2
+ var fs = require("fs");
3
+ var path = require("path");
4
+
5
+ if (!fs.existsSync("dist")) {
6
+ fs.mkdirSync("dist");
7
+ }
8
+
9
+ let fontDir = path.join(path.dirname(require.resolve("@mdi/font/package.json")), "fonts");
10
+ let cssDir = path.join(path.dirname(require.resolve("@mdi/font/package.json")), "css");
11
+
12
+ if (!fs.existsSync("dist/Material Design Icons")) {
13
+ fs.mkdirSync("dist/Material Design Icons", {recursive: true});
14
+ }
15
+
16
+ fs.cpSync(fontDir, "./dist/Material Design Icons/fonts", {recursive: true});
17
+ fs.cpSync(cssDir, "./dist/Material Design Icons/css", {recursive: true});
@@ -1,13 +1,21 @@
1
+ // Script for collating mdi svg icons (@mdi/svg) into a single JSON file
1
2
  var fs = require('fs');
2
3
  var path = require("path");
3
4
  var xpath = require('xpath');
4
5
  var dom = require('xmldom').DOMParser;
5
6
 
7
+ if (!fs.existsSync("src")){
8
+ fs.mkdirSync("src");
9
+ }
10
+
6
11
  let mdiSvgDir = path.join(path.dirname(require.resolve("@mdi/svg/package.json")), "svg");
7
- let mdiStream = fs.createWriteStream("./src/mdi-icons.ts" ,{flags: "w+"});
8
- mdiStream.write("import {IconSetSvg} from \"./icon-set-svg\"; let mdi: IconSetSvg = new IconSetSvg(24, {");
12
+ if (!fs.existsSync("dist")) {
13
+ fs.mkdirSync("dist");
14
+ }
15
+ let mdiStream = fs.createWriteStream("./dist/mdi-icons.json" ,{flags: "w+"});
16
+ mdiStream.write("{\"size\":24,\"icons\":{");
9
17
 
10
- let files = fs.readdirSync(mdiSvgDir);
18
+ let files = fs.readdirSync(mdiSvgDir).sort();
11
19
 
12
20
  for (let i=0; i<files.length; i++) {
13
21
 
@@ -19,9 +27,9 @@ for (let i=0; i<files.length; i++) {
19
27
  let pathAttrs = select("//svg:path/@d", svg);
20
28
  let pathData = pathAttrs[0].value;
21
29
  let name = file.substr(0, file.length-4);
22
- if (!mdiStream.write("\"" + name + "\":\"" + pathData + "\"" + (i < files.length-1 ? "," : "")));
30
+ //name = name.replace(/-([\w])/g, function (g) { return g[1].toUpperCase(); });
31
+ mdiStream.write("\"" + name + "\":\"" + pathData + "\"" + (i < files.length-1 ? "," : ""));
23
32
  }
24
33
 
25
- mdiStream.write("});export default mdi;");
26
-
27
- mdiStream.close();
34
+ mdiStream.write("}}");
35
+ mdiStream.close();
package/package.json CHANGED
@@ -1,28 +1,33 @@
1
1
  {
2
2
  "name": "@openremote/or-icon",
3
- "version": "1.0.0",
4
- "description": "Displays s vector or raster map",
5
- "main": "dist/index.js",
6
- "types": "src/index.ts",
3
+ "version": "1.2.0-snapshot.20240512154942",
4
+ "description": "Icon component for displaying an icon from an icon set",
5
+ "main": "dist/umd/index.bundle.js",
6
+ "module": "lib/index.js",
7
+ "exports": {
8
+ ".": "./lib/index.js",
9
+ "./*": "./lib/*.js"
10
+ },
11
+ "types": "lib/index.d.ts",
7
12
  "scripts": {
8
- "build": "node mdi-iconset-generator.js && npx tsc -b",
9
- "test": "echo \"No tests\" && exit 0"
13
+ "copyMdiFont": "node mdi-font-copy.js",
14
+ "build": "npx tsc -b",
15
+ "test": "echo \"No tests\" && exit 0",
16
+ "prepublishOnly": "npx webpack"
10
17
  },
11
18
  "author": "OpenRemote",
12
19
  "license": "AGPL-3.0-or-later",
13
20
  "dependencies": {
14
- "lit-element": "^2.1.0"
21
+ "@mdi/font": "latest",
22
+ "lit": "^2.0.2"
15
23
  },
16
24
  "devDependencies": {
17
- "xmldom": "^0.1.27",
18
- "@mdi/svg": "^3.5.95",
19
- "@webcomponents/webcomponentsjs": "^2.0.0",
20
- "css-loader": "^2.0.0",
21
- "style-loader": "^0.23.1",
22
- "tslint": "^5.11.0",
23
- "typescript": "^3.2.2",
24
- "wct-browser-legacy": "^1.0.0",
25
- "xpath": "^0.0.27"
25
+ "terser-webpack-plugin": "^5.2.5",
26
+ "typescript": "^5.3.3",
27
+ "webpack": "^5.90.1",
28
+ "webpack-cli": "^5.1.4"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
26
32
  }
27
- }
28
-
33
+ }
@@ -1,11 +0,0 @@
1
- import { IconSet } from "./index";
2
- export declare class IconSetSvg implements IconSet {
3
- icons: {
4
- [icon: string]: string;
5
- };
6
- size: number;
7
- constructor(size: number, icons: {
8
- [icon: string]: string;
9
- });
10
- getIcon(icon: string): Element | undefined;
11
- }
@@ -1,31 +0,0 @@
1
- export class IconSetSvg {
2
- constructor(size, icons) {
3
- this.size = size;
4
- this.icons = icons;
5
- }
6
- getIcon(icon) {
7
- if (!icon) {
8
- return undefined;
9
- }
10
- if (!this.icons.hasOwnProperty(icon)) {
11
- return undefined;
12
- }
13
- const iconData = this.icons[icon];
14
- const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
15
- svg.setAttribute("viewBox", "0 0 " + this.size + " " + this.size);
16
- svg.style.cssText = "pointer-events: none; display: block; width: 100%; height: 100%;";
17
- svg.setAttribute("preserveAspectRatio", "xMidYMid meet");
18
- svg.setAttribute("focusable", "false");
19
- if (iconData.startsWith("<")) {
20
- svg.innerHTML = iconData;
21
- }
22
- else {
23
- const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
24
- path.setAttribute("d", iconData);
25
- path.style.pointerEvents = "pointer-events: var(--or-icon-pointer-events, none);";
26
- svg.appendChild(path);
27
- }
28
- return svg;
29
- }
30
- }
31
- //# sourceMappingURL=icon-set-svg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon-set-svg.js","sourceRoot":"","sources":["../src/icon-set-svg.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IAInB,YAAY,IAAY,EAAE,KAAiC;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEM,OAAO,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,SAAS,CAAC;SACpB;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAClC,OAAO,SAAS,CAAC;SACpB;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QAC1E,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,kEAAkE,CAAC;QACvF,GAAG,CAAC,YAAY,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;QACzD,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC1B,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;SAC5B;aAAM;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;YAC5E,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,sDAAsD,CAAC;YAClF,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ"}
package/dist/index.d.ts DELETED
@@ -1,29 +0,0 @@
1
- import { LitElement, PropertyValues } from 'lit-element';
2
- export interface IconSets {
3
- [name: string]: IconSet;
4
- }
5
- export interface IconSet {
6
- getIcon(icon: string): Element | undefined;
7
- }
8
- export declare enum IconEvent {
9
- ICONSET_ADDED = "or-icon-iconset-added"
10
- }
11
- declare class Icons {
12
- private _icons;
13
- addIconSet(name: string, iconset: IconSet): void;
14
- getIconSet(name: string): IconSet;
15
- }
16
- export declare var IconSets: Icons;
17
- export declare class OrIcon extends LitElement {
18
- static _DEFAULT_ICONSET: string;
19
- static styles: import("lit-element").CSSResult;
20
- icon?: string;
21
- protected _iconElement?: Element;
22
- protected _handler: (evt: Event) => void;
23
- protected render(): import("lit-element").TemplateResult;
24
- disconnectedCallback(): void;
25
- protected shouldUpdate(changedProperties: PropertyValues): boolean;
26
- protected _updateIcon(requestUpdate: boolean): void;
27
- protected _onIconsetAdded(evt: Event): void;
28
- }
29
- export {};
package/dist/index.js DELETED
@@ -1,97 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var OrIcon_1;
8
- import { css, customElement, html, LitElement, property } from 'lit-element';
9
- import orIcons from "./or-icons";
10
- export var IconEvent;
11
- (function (IconEvent) {
12
- IconEvent["ICONSET_ADDED"] = "or-icon-iconset-added";
13
- })(IconEvent || (IconEvent = {}));
14
- class Icons {
15
- constructor() {
16
- this._icons = {
17
- or: orIcons
18
- };
19
- }
20
- addIconSet(name, iconset) {
21
- this._icons[name] = iconset;
22
- window.dispatchEvent(new CustomEvent(IconEvent.ICONSET_ADDED));
23
- }
24
- getIconSet(name) {
25
- return this._icons[name];
26
- }
27
- }
28
- export var IconSets = new Icons();
29
- let OrIcon = OrIcon_1 = class OrIcon extends LitElement {
30
- constructor() {
31
- super(...arguments);
32
- this._handler = (evt) => {
33
- this._onIconsetAdded(evt);
34
- };
35
- }
36
- render() {
37
- return html `
38
- ${this._iconElement}
39
- `;
40
- }
41
- disconnectedCallback() {
42
- super.disconnectedCallback();
43
- window.removeEventListener(IconEvent.ICONSET_ADDED, this._handler);
44
- }
45
- shouldUpdate(changedProperties) {
46
- if (changedProperties.has("icon")) {
47
- this._updateIcon(false);
48
- }
49
- return true;
50
- }
51
- _updateIcon(requestUpdate) {
52
- this._iconElement = undefined;
53
- window.removeEventListener(IconEvent.ICONSET_ADDED, this._handler);
54
- let parts = (this.icon || "").split(":");
55
- let iconName = parts.pop();
56
- let iconSetName = parts.pop() || OrIcon_1._DEFAULT_ICONSET;
57
- if (!iconSetName || iconSetName === "" || !iconName || iconName === "") {
58
- return;
59
- }
60
- let iconSet = IconSets.getIconSet(iconSetName);
61
- if (!iconSet) {
62
- window.addEventListener(IconEvent.ICONSET_ADDED, this._handler);
63
- return;
64
- }
65
- this._iconElement = iconSet.getIcon(iconName);
66
- if (requestUpdate) {
67
- this.requestUpdate();
68
- }
69
- }
70
- _onIconsetAdded(evt) {
71
- this._updateIcon(true);
72
- }
73
- };
74
- OrIcon._DEFAULT_ICONSET = "mdi";
75
- OrIcon.styles = css `
76
- :host {
77
- display: inline-block;
78
- position: relative;
79
- vertical-align: middle;
80
- fill: var(--or-icon-fill-color, currentcolor);
81
- stroke: var(--or-icon-stroke-color, none);
82
- width: var(--or-icon-width, 24px);
83
- height: var(--or-icon-height, 24px);
84
- }
85
-
86
- :host([hidden]) {
87
- display: none;
88
- }
89
- `;
90
- __decorate([
91
- property({ type: String, reflect: true })
92
- ], OrIcon.prototype, "icon", void 0);
93
- OrIcon = OrIcon_1 = __decorate([
94
- customElement('or-icon')
95
- ], OrIcon);
96
- export { OrIcon };
97
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { IconSetSvg } from "./icon-set-svg";
2
- declare let mdi: IconSetSvg;
3
- export default mdi;