From 53d3a315744b4e99477ea017c0d1e25e78e8fb69 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Tue, 30 Mar 2021 18:52:38 +0430 Subject: [PATCH 01/39] Add lucide-angular --- package.json | 20 +- packages/lucide-angular/.gitignore | 51 +++++ packages/lucide-angular/angular.json | 48 +++++ packages/lucide-angular/package.json | 65 ++++++ .../projects/lucide-angular/README.md | 189 ++++++++++++++++++ .../lucide-angular/default-attributes.ts | 11 + .../projects/lucide-angular/icons-index.ts | 4 + .../lucide-angular/icons/package.json | 7 + .../projects/lucide-angular/karma.conf.js | 51 +++++ .../projects/lucide-angular/lib-index.ts | 4 + .../projects/lucide-angular/lucide.ts | 10 + .../projects/lucide-angular/ng-package.json | 7 + .../projects/lucide-angular/package.json | 11 + .../lucide-angular/src/lib/icons.provider.ts | 3 + .../src/lib/lucide-angular.component.spec.ts | 29 +++ .../src/lib/lucide-angular.component.ts | 68 +++++++ .../src/lib/lucide-angular.module.ts | 27 +++ .../projects/lucide-angular/src/test.ts | 26 +++ .../projects/lucide-angular/tsconfig.lib.json | 26 +++ .../lucide-angular/tsconfig.lib.prod.json | 10 + .../lucide-angular/tsconfig.spec.json | 17 ++ .../projects/lucide-angular/tslint.json | 17 ++ .../lucide-angular/scripts/buildIconsIndex.js | 39 ++++ .../lucide-angular/scripts/exportTemplate.js | 10 + packages/lucide-angular/tsconfig.json | 31 +++ packages/lucide-angular/tslint.json | 140 +++++++++++++ 26 files changed, 917 insertions(+), 4 deletions(-) create mode 100644 packages/lucide-angular/.gitignore create mode 100644 packages/lucide-angular/angular.json create mode 100644 packages/lucide-angular/package.json create mode 100644 packages/lucide-angular/projects/lucide-angular/README.md create mode 100644 packages/lucide-angular/projects/lucide-angular/default-attributes.ts create mode 100644 packages/lucide-angular/projects/lucide-angular/icons-index.ts create mode 100644 packages/lucide-angular/projects/lucide-angular/icons/package.json create mode 100644 packages/lucide-angular/projects/lucide-angular/karma.conf.js create mode 100644 packages/lucide-angular/projects/lucide-angular/lib-index.ts create mode 100644 packages/lucide-angular/projects/lucide-angular/lucide.ts create mode 100644 packages/lucide-angular/projects/lucide-angular/ng-package.json create mode 100644 packages/lucide-angular/projects/lucide-angular/package.json create mode 100755 packages/lucide-angular/projects/lucide-angular/src/lib/icons.provider.ts create mode 100644 packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.spec.ts create mode 100644 packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.ts create mode 100644 packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.module.ts create mode 100644 packages/lucide-angular/projects/lucide-angular/src/test.ts create mode 100644 packages/lucide-angular/projects/lucide-angular/tsconfig.lib.json create mode 100644 packages/lucide-angular/projects/lucide-angular/tsconfig.lib.prod.json create mode 100644 packages/lucide-angular/projects/lucide-angular/tsconfig.spec.json create mode 100644 packages/lucide-angular/projects/lucide-angular/tslint.json create mode 100644 packages/lucide-angular/scripts/buildIconsIndex.js create mode 100644 packages/lucide-angular/scripts/exportTemplate.js create mode 100644 packages/lucide-angular/tsconfig.json create mode 100644 packages/lucide-angular/tslint.json diff --git a/package.json b/package.json index d362729a8..dd792a4c6 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,25 @@ { "private": true, - "workspaces": [ - "packages/*", - "site" - ], + "workspaces": { + "packages": [ + "packages/*", + "site" + ], + "nohoist": [ + "**/jest", "**/jest/**", + "**/jasmine", "**/jasmine/**", + "**/react", "**/react/**", + "**/testing-library__jest-dom", "**/testing-library__jest-dom/**", + "**/testing-library__react-hooks", "**/testing-library__react-hooks/**", + "**/react-dom", "**/react-dom/**", + "**/react-test-renderer", "**/react-test-renderer/**" + ] + }, "scripts": { "build": "yarn lucide build && yarn lucide-react build && yarn lucide-vue build", "test": "yarn lucide build:icons && yarn lucide-react build:icons && yarn lucide-vue build:icons && jest", "lucide": "yarn workspace lucide", + "lucide-angular": "yarn workspace lucide-angular", "lucide-react": "yarn workspace lucide-react", "lucide-vue": "yarn workspace lucide-vue", "build:icons": "babel-node ./scripts/buildIcons.js --presets @babel/env", diff --git a/packages/lucide-angular/.gitignore b/packages/lucide-angular/.gitignore new file mode 100644 index 000000000..5d67e7fda --- /dev/null +++ b/packages/lucide-angular/.gitignore @@ -0,0 +1,51 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* +.editorconfig + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db + +#npm-yarn +package-lock.json +yarn.lock diff --git a/packages/lucide-angular/angular.json b/packages/lucide-angular/angular.json new file mode 100644 index 000000000..059734448 --- /dev/null +++ b/packages/lucide-angular/angular.json @@ -0,0 +1,48 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "lucide-angular": { + "projectType": "library", + "root": "projects/lucide-angular", + "sourceRoot": "projects/lucide-angular/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "tsConfig": "projects/lucide-angular/tsconfig.lib.json", + "project": "projects/lucide-angular/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/lucide-angular/tsconfig.lib.prod.json" + } + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "projects/lucide-angular/src/test.ts", + "tsConfig": "projects/lucide-angular/tsconfig.spec.json", + "karmaConfig": "projects/lucide-angular/karma.conf.js" + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "projects/lucide-angular/tsconfig.lib.json", + "projects/lucide-angular/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } + } + }, + "defaultProject": "lucide-angular" +} diff --git a/packages/lucide-angular/package.json b/packages/lucide-angular/package.json new file mode 100644 index 000000000..0274cdd71 --- /dev/null +++ b/packages/lucide-angular/package.json @@ -0,0 +1,65 @@ +{ + "name": "lucide-angular", + "description": "Lucide Angular package, Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.", + "version": "0.15.0", + "author": "SMAH1", + "license": "ISC", + "homepage": "https://lucide.dev", + "bugs": "https://github.com/lucide-icons/lucide/issues", + "repository": { + "type": "git", + "url": "https://github.com/lucide-icons/lucide.git", + "directory": "packages/lucide-vue" + }, + "keywords": [ + "Lucide", + "Angular", + "Feather", + "Icons", + "Icon", + "Feather Icons", + "Fontawesome", + "Font Awesome" + ], + "scripts": { + "build": "yarn clean && yarn build:js && yarn build:icons && yarn build:iconsindex && yarn build:ng", + "clean": "rm -rf dist && rm -rf projects/lucide-angular/build", + "build:js": "mkdir -p projects/lucide-angular/build && cp -av ../lucide/src/createElement.js projects/lucide-angular/build/", + "build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-angular/projects/lucide-angular/build --templateSrc=../packages/lucide-angular/scripts/exportTemplate && for f in projects/lucide-angular/build/icons/*.js; do mv -- \"$f\" \"${f%.js}.ts\"; done", + "build:iconsindex": "yarn --cwd ../../ babel-node packages/lucide-angular/scripts/buildIconsIndex.js", + "build:ng": "ng build --prod", + "test:headless": "ng test --no-watch --no-progress --browsers=ChromeHeadlessCI", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "dependencies": { + "@angular/common": "~11.2.6", + "@angular/compiler": "~11.2.6", + "@angular/core": "~11.2.6", + "@angular/platform-browser": "~11.2.6", + "@angular/platform-browser-dynamic": "~11.2.6", + "tslib": "^2.0.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.1102.5", + "@angular/cli": "~11.2.5", + "@angular/compiler-cli": "~11.2.6", + "@types/jasmine": "~3.6.0", + "@types/node": "^12.11.1", + "codelyzer": "^6.0.0", + "jasmine-core": "~3.6.0", + "jasmine-spec-reporter": "~5.0.0", + "karma": "~6.1.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.0.3", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "^1.5.0", + "ng-packagr": "^11.0.0", + "protractor": "~7.0.0", + "puppeteer": "^8.0.0", + "ts-node": "~8.3.0", + "tslint": "~6.1.0", + "typescript": "~4.1.5" + } +} diff --git a/packages/lucide-angular/projects/lucide-angular/README.md b/packages/lucide-angular/projects/lucide-angular/README.md new file mode 100644 index 000000000..1141976be --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/README.md @@ -0,0 +1,189 @@ +# Lucide Angular + +Use the lucide icon library in you angular app. + +## Installation + +``` sh +yarn add lucide-angular + +# or + +npm install lucide-angular +``` + +## How to use + +There are three ways for use this library. + +### Method 1: createElement + +After install `lucide-angular` change content of file `app.component.html` and `app.component.ts`. + +``` xml + +
+``` + +``` js +// app.component.ts + +import { Component, OnInit } from '@angular/core'; +import { createElement } from 'lucide-angular'; +import { Activity } from 'lucide-angular/icons'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'] +}) +export class AppComponent implements OnInit { + + ngOnInit(): void { + const div = document.getElementById('ico'); + const elm = createElement(Activity); + elm.setAttribute('color', 'red'); // or set `width`, `height`, `fill`, `stroke-width`, ... + div.appendChild(elm); + } +} +``` + +### Method 2: User __Tag__ with __name__ property + +After install `lucide-angular` change content of file `app.component.html`, `app.component.ts`, `app.component.css` and `app.module.ts`. + +``` js +// app.module.ts +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { LucideAngularModule } from 'lucide-angular'; +import { AlarmCheck, Edit } from 'lucide-angular/icons'; // or import other icons + +@NgModule({ + declarations: [ + AppComponent + ], + imports: [ + BrowserModule, + AppRoutingModule, + LucideAngularModule.pick({ AlarmCheck, Edit }) // add all of icons that is imported. + ], + providers: [], + bootstrap: [AppComponent] +}) +export class AppModule { } +``` + +``` css +/* app.component.css */ +.myicon { + /* Be sure to set these values */ + width: 48px; + height: 48px; + /* or other properties like `color`, `fill`, `stroke-width` */ +} +``` + +``` xml + + + +``` + +``` js +// app.component.ts + +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'] +}) +export class AppComponent { + +} +``` + +### Method 3: User __Tag__ with __img__ property + +After install `lucide-angular` change content of file `app.component.html`, `app.component.ts`, `app.component.css` and `app.module.ts`. + +``` js +// app.module.ts +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { LucideAngularModule } from 'lucide-angular'; + +@NgModule({ + declarations: [ + AppComponent + ], + imports: [ + BrowserModule, + AppRoutingModule, + LucideAngularModule.pick({ }) + ], + providers: [], + bootstrap: [AppComponent] +}) +export class AppModule { } +``` + +``` css +/* app.component.css */ +.myicon { + /* Be sure to set these values */ + width: 48px; + height: 48px; + /* or other properties like `color`, `fill`, `stroke-width` */ +} +``` + +``` xml + + + +``` + +``` js +// app.component.ts +import { Component } from '@angular/core'; +import { Airplay, Circle } from 'lucide-angular/icons'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'] +}) +export class AppComponent { + ico1 = Airplay; + ico2 = Circle; +} +``` + +## Notes + +### Import all icons + +In `Method 2`: import all icons in `app.module.ts` by: +``` js +... +import { icons } from 'lucide-angular/icons'; +.... +LucideAngularModule.pick(icons) +.... +``` +### Tags +You can use the following tags instead of `lucide-icon`: + * lucide-angular + * i-lucide + * span-lucide + +All of the above are the same diff --git a/packages/lucide-angular/projects/lucide-angular/default-attributes.ts b/packages/lucide-angular/projects/lucide-angular/default-attributes.ts new file mode 100644 index 000000000..8ae7d46ea --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/default-attributes.ts @@ -0,0 +1,11 @@ +export default { + xmlns: 'http://www.w3.org/2000/svg', + width: 24, + height: 24, + viewBox: '0 0 24 24', + fill: 'none', + stroke: 'currentColor', + 'stroke-width': 2, + 'stroke-linecap': 'round', + 'stroke-linejoin': 'round', +}; diff --git a/packages/lucide-angular/projects/lucide-angular/icons-index.ts b/packages/lucide-angular/projects/lucide-angular/icons-index.ts new file mode 100644 index 000000000..9b54f0f0b --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/icons-index.ts @@ -0,0 +1,4 @@ +export * from './build/icons-index'; + +import * as icons from './build/icons-index'; +export { icons }; diff --git a/packages/lucide-angular/projects/lucide-angular/icons/package.json b/packages/lucide-angular/projects/lucide-angular/icons/package.json new file mode 100644 index 000000000..84efc25d1 --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/icons/package.json @@ -0,0 +1,7 @@ +{ + "ngPackage": { + "lib": { + "entryFile": "../icons-index.ts" + } + } +} diff --git a/packages/lucide-angular/projects/lucide-angular/karma.conf.js b/packages/lucide-angular/projects/lucide-angular/karma.conf.js new file mode 100644 index 000000000..5fe10e39f --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/karma.conf.js @@ -0,0 +1,51 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html +process.env.CHROME_BIN = require('puppeteer').executablePath(); + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, '../../coverage/lucide-angular'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['ChromeHeadlessCI'], + customLaunchers: { + ChromeHeadlessCI: { + base: 'ChromeHeadless', + flags: ['--no-sandbox'] + } + }, + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/packages/lucide-angular/projects/lucide-angular/lib-index.ts b/packages/lucide-angular/projects/lucide-angular/lib-index.ts new file mode 100644 index 000000000..74e83bebf --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/lib-index.ts @@ -0,0 +1,4 @@ + +export * from './src/lib/lucide-angular.component'; +export * from './src/lib/lucide-angular.module'; +export * from './lucide'; diff --git a/packages/lucide-angular/projects/lucide-angular/lucide.ts b/packages/lucide-angular/projects/lucide-angular/lucide.ts new file mode 100644 index 000000000..dd773b473 --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/lucide.ts @@ -0,0 +1,10 @@ +export type IconNode = readonly [string, object]; +export type IconData = readonly [string, object, IconNode[] ]; + +export declare const icons: { [key: string]: IconData }; + +import { default as createElementTmp } from './build/createElement'; + +export function createElement(ico: IconData): HTMLElement { + return createElementTmp(ico as any); +} diff --git a/packages/lucide-angular/projects/lucide-angular/ng-package.json b/packages/lucide-angular/projects/lucide-angular/ng-package.json new file mode 100644 index 000000000..3b1643920 --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/lucide-angular", + "lib": { + "entryFile": "./lib-index.ts" + } +} \ No newline at end of file diff --git a/packages/lucide-angular/projects/lucide-angular/package.json b/packages/lucide-angular/projects/lucide-angular/package.json new file mode 100644 index 000000000..d39258c39 --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/package.json @@ -0,0 +1,11 @@ +{ + "name": "lucide-angular", + "version": "0.15.0", + "peerDependencies": { + "@angular/common": "^11.2.6", + "@angular/core": "^11.2.6" + }, + "dependencies": { + "tslib": "^2.0.0" + } +} \ No newline at end of file diff --git a/packages/lucide-angular/projects/lucide-angular/src/lib/icons.provider.ts b/packages/lucide-angular/projects/lucide-angular/src/lib/icons.provider.ts new file mode 100755 index 000000000..e1d765d8b --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/src/lib/icons.provider.ts @@ -0,0 +1,3 @@ +export class Icons { + constructor(private icons: object) {} +} diff --git a/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.spec.ts b/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.spec.ts new file mode 100644 index 000000000..6fea47079 --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.spec.ts @@ -0,0 +1,29 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { LucideAngularModule } from './lucide-angular.module'; + +import { LucideAngularComponent } from './lucide-angular.component'; + +describe('LucideAngularComponent', () => { + let component: LucideAngularComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LucideAngularComponent ], + imports: [ + LucideAngularModule.pick({ }) + ], + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(LucideAngularComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.ts b/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.ts new file mode 100644 index 000000000..065a21964 --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.ts @@ -0,0 +1,68 @@ +import { Component, ElementRef, Input, Inject, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core'; +import { Icons } from './icons.provider'; +import { createElement, IconData } from '../../lucide'; + +@Component({ + selector: 'lucide-angular, lucide-icon, i-lucide, span-lucide', + template: ``, + styles: [` + :host { + display: inline-block; + fill: none; + stroke: inherit; + stroke-width: inherit; + stroke-linecap: round; + stroke-linejoin: round; + } + `] +}) +export class LucideAngularComponent implements OnChanges { + @Input() name!: string; + @Input() img!: IconData; + + constructor( + @Inject(ElementRef) private elem: ElementRef, + @Inject(ChangeDetectorRef) private changeDetector: ChangeDetectorRef, + @Inject(Icons) private icons: Icons + ) { } + + ngOnChanges(changes: SimpleChanges): void { + if (changes.name) { + // icons are provided as an array of objects because of "multi: true" + const icons = Object.assign({}, ...(this.icons as any as object[])); + const icoOfName = icons[this.toPascalCase(changes.name.currentValue)] || ''; + + if (!icoOfName) { + console.warn( + `Icon not found: ${changes.name.currentValue}\n` + + `Please check icon name or \'lucide icon list\'` + ); + } else { + const icoElement = createElement(icoOfName); + icoElement.setAttribute('stroke-width', 'inherit'); + icoElement.setAttribute('fill', 'inherit'); + icoElement.removeAttribute('width'); + icoElement.removeAttribute('height'); + + this.elem.nativeElement.innerHTML = ''; + this.elem.nativeElement.append(icoElement); + } + } + else if (changes.img) { + const icoElement = createElement(changes.img.currentValue); + icoElement.setAttribute('stroke-width', 'inherit'); + icoElement.setAttribute('fill', 'inherit'); + icoElement.removeAttribute('width'); + icoElement.removeAttribute('height'); + + this.elem.nativeElement.innerHTML = ''; + this.elem.nativeElement.append(icoElement); + } + + this.changeDetector.markForCheck(); + } + + toPascalCase(str: string): string { + return str.replace(/(\w)([a-z0-9]*)(_|-|\s*)/g, (g0, g1, g2) => g1.toUpperCase() + g2.toLowerCase()); + } +} diff --git a/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.module.ts b/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.module.ts new file mode 100644 index 000000000..40cfa629b --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.module.ts @@ -0,0 +1,27 @@ +import { NgModule, ModuleWithProviders, Optional } from '@angular/core'; +import { LucideAngularComponent } from './lucide-angular.component'; +import { Icons } from './icons.provider'; +import { IconData } from '../../lucide'; + +@NgModule({ + declarations: [LucideAngularComponent], + exports: [LucideAngularComponent] +}) +export class LucideAngularModule { + constructor(@Optional() private icons: Icons) { + if (!this.icons) { + throw new Error( + `No icon provided. Make sure to use 'LucideAngularModule.pick({ ... })' when importing the module\n` + ); + } + } + + static pick(icons: { [key: string]: IconData }): ModuleWithProviders { + return { + ngModule: LucideAngularModule, + providers: [ + { provide: Icons, multi: true, useValue: icons } + ] + }; + } +} diff --git a/packages/lucide-angular/projects/lucide-angular/src/test.ts b/packages/lucide-angular/projects/lucide-angular/src/test.ts new file mode 100644 index 000000000..303b32a22 --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/src/test.ts @@ -0,0 +1,26 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone'; +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + keys(): string[]; + (id: string): T; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.json b/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.json new file mode 100644 index 000000000..16fc7bfef --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.json @@ -0,0 +1,26 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ + "dom", + "es2018" + ] + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true + }, + "exclude": [ + "src/test.ts", + "**/*.spec.ts" + ] +} diff --git a/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.prod.json b/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.prod.json new file mode 100644 index 000000000..5615c27df --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.prod.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "enableIvy": false + } +} diff --git a/packages/lucide-angular/projects/lucide-angular/tsconfig.spec.json b/packages/lucide-angular/projects/lucide-angular/tsconfig.spec.json new file mode 100644 index 000000000..715dd0a5d --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/tsconfig.spec.json @@ -0,0 +1,17 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/packages/lucide-angular/projects/lucide-angular/tslint.json b/packages/lucide-angular/projects/lucide-angular/tslint.json new file mode 100644 index 000000000..920be84fc --- /dev/null +++ b/packages/lucide-angular/projects/lucide-angular/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "lib", + "camelCase" + ], + "component-selector": [ + true, + "element", + "", + "kebab-case" + ] + } +} diff --git a/packages/lucide-angular/scripts/buildIconsIndex.js b/packages/lucide-angular/scripts/buildIconsIndex.js new file mode 100644 index 000000000..84a6cc483 --- /dev/null +++ b/packages/lucide-angular/scripts/buildIconsIndex.js @@ -0,0 +1,39 @@ +import path from 'path'; + +import { + writeFile, + resetFile, + appendFile, + readSvgDirectory, +} from '../../../scripts/helpers'; + +const TARGET_DIR = path.join(__dirname, '../projects/lucide-angular/build'); +const ICONS_DIR = path.resolve(__dirname, '../../../icons'); +const TYPES_FILE_NAME = 'icons-index.ts'; + +// Generates header of d.ts file include some types and functions +const typeDefinitions = `\ +export type IconNode = readonly [string, object]; +export type IconData = readonly [string, object, IconNode[] ]; + +export declare const icons: { [key: string]: IconData }; + +// Generated icons +`; + +resetFile(TYPES_FILE_NAME, TARGET_DIR); +writeFile(typeDefinitions, TYPES_FILE_NAME, TARGET_DIR); + +const svgFiles = readSvgDirectory(ICONS_DIR); + +svgFiles.forEach(svgFile => { + const kebab = path.basename(svgFile, '.svg'); + + appendFile( + `export * from './icons/${kebab}';\n`, + TYPES_FILE_NAME, + TARGET_DIR, + ); +}); + +console.log(`Generated ${TYPES_FILE_NAME} file with`, svgFiles.length, 'icons'); diff --git a/packages/lucide-angular/scripts/exportTemplate.js b/packages/lucide-angular/scripts/exportTemplate.js new file mode 100644 index 000000000..0687be845 --- /dev/null +++ b/packages/lucide-angular/scripts/exportTemplate.js @@ -0,0 +1,10 @@ +export default ({ componentName, children }) => ` +import { IconData } from '../../lucide'; +import defaultAttributes from '../../default-attributes'; + +export const ${componentName}: IconData = [ + 'svg', + defaultAttributes, + ${JSON.stringify(children)} +]; +`; diff --git a/packages/lucide-angular/tsconfig.json b/packages/lucide-angular/tsconfig.json new file mode 100644 index 000000000..0f0bbfdaa --- /dev/null +++ b/packages/lucide-angular/tsconfig.json @@ -0,0 +1,31 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": true, + "downlevelIteration": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowJs": true, + "paths": { + "lucide-angular": [ + "dist/lucide-angular/lucide-angular", + "dist/lucide-angular" + ] + }, + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "module": "es2020", + "lib": [ + "es2018", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false + } +} diff --git a/packages/lucide-angular/tslint.json b/packages/lucide-angular/tslint.json new file mode 100644 index 000000000..733008b75 --- /dev/null +++ b/packages/lucide-angular/tslint.json @@ -0,0 +1,140 @@ +{ + "extends": "tslint:recommended", + "rulesDirectory": [ + "codelyzer" + ], + "rules": { + "align": { + "options": [ + "parameters", + "statements" + ] + }, + "array-type": false, + "arrow-return-shorthand": true, + "curly": true, + "deprecation": { + "severity": "warning" + }, + "eofline": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "import-spacing": true, + "indent": { + "options": [ + "spaces" + ] + }, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "quotemark": [ + true, + "single" + ], + "semicolon": { + "options": [ + "always" + ] + }, + "space-before-function-paren": { + "options": { + "anonymous": "never", + "asyncArrow": "always", + "constructor": "never", + "method": "never", + "named": "never" + } + }, + "typedef": [ + true, + "call-signature" + ], + "typedef-whitespace": { + "options": [ + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ] + }, + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-pascal-case" + ] + }, + "whitespace": { + "options": [ + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ] + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true + } +} From ef3da7d14df9e68a9219b741437d25908db60ec9 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Wed, 31 Mar 2021 11:52:23 +0430 Subject: [PATCH 02/39] Build d.ts for use in typescript --- packages/lucide/scripts/buildTypes.js | 52 ++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index d1abfc65a..79cea3ae5 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -8,16 +8,52 @@ const TYPES_FILE_NAME = 'lucide.d.ts'; // Generates header of d.ts file include some types and functions const typeDefinitions = `\ -export type IconName = string; -export type IconNode = readonly [tag: string, object:SVGProps, children:IconNode?]; -export type IconsObj = { [IconName]: IconNode } +export interface Attributes { + width?: number; + height?: number; + viewBox?: string; + fill?: string; + stroke?: string; + 'stroke-width'?: number; + 'stroke-linecap'?: string; + 'stroke-linejoin'?: string; +} -export interface Attributes extends Partial> {} +export declare type IconNode = readonly [string, object]; +export declare type IconData = readonly [tag: string, object: object, children: IconNode[]]; +export type Icons = { [key: string]: IconData } -export function createElement(icon: IconNode): SVGSVGElement; -export function createIcons({ icons: IconsObj, nameAttr: string = 'icon-name', attrs: Attributes = {} }): VoidFunction; +export interface CreateIconsOptions { + /** + * List of icons you want to replace + * + * For example: \`{ Menu, Circle}\`. + * + * For replace all icons in lucide library, import \`icons\` and use it. + */ + icons: Icons; -export declare const icons: IconsObj; + /** + * Search HTML emelemt by \`nameAttr\` property. + * + * For example if define \`\`, fill by \`lucide-icon\`. + * + * @default 'icon-name' + */ + nameAttr?: string; + + /** + * Change defult attribute for show like color, fill, width , ... + * + * @default undefined + */ + attrs?: Attributes; +} + +export function createElement(icon: IconData): SVGSVGElement; +export function createIcons(options: CreateIconsOptions): VoidFunction; + +export declare const icons: Icons; // Generated icons `; @@ -31,7 +67,7 @@ svgFiles.forEach(svgFile => { const nameSvg = path.basename(svgFile, '.svg'); const namePascal = toPascalCase(nameSvg); - appendFile(`export declare const ${namePascal}: IconNode;\n`, TYPES_FILE_NAME, TARGET_DIR); + appendFile(`export declare const ${namePascal}: IconData;\n`, TYPES_FILE_NAME, TARGET_DIR); }); console.log(`Generated ${TYPES_FILE_NAME} file with`, svgFiles.length, 'icons'); From c40df12e054176624cd292e6c54f411c3deae684 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sat, 3 Apr 2021 10:59:17 +0430 Subject: [PATCH 03/39] Update packages/lucide/scripts/buildTypes.js Co-authored-by: Eric Fennis --- packages/lucide/scripts/buildTypes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index 79cea3ae5..8d8926a1a 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -5,7 +5,7 @@ import { readSvgDirectory, resetFile, appendFile, toPascalCase } from '../../../ const TARGET_DIR = path.join(__dirname, '../dist'); const ICONS_DIR = path.resolve(__dirname, '../../../icons'); const TYPES_FILE_NAME = 'lucide.d.ts'; - +import defaultAttributes from '../src/defaultAttributes'; // Generates header of d.ts file include some types and functions const typeDefinitions = `\ export interface Attributes { From 7e676e35e47facc81f14b4130a58dcfbd0ed4da6 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sat, 3 Apr 2021 10:59:36 +0430 Subject: [PATCH 04/39] Update packages/lucide/scripts/buildTypes.js Co-authored-by: Eric Fennis --- packages/lucide/scripts/buildTypes.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index 8d8926a1a..518ee379f 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -8,16 +8,7 @@ const TYPES_FILE_NAME = 'lucide.d.ts'; import defaultAttributes from '../src/defaultAttributes'; // Generates header of d.ts file include some types and functions const typeDefinitions = `\ -export interface Attributes { - width?: number; - height?: number; - viewBox?: string; - fill?: string; - stroke?: string; - 'stroke-width'?: number; - 'stroke-linecap'?: string; - 'stroke-linejoin'?: string; -} +export interface SVGProps extends Partial ${JSON.stringify(defaultAttributes, null, 2)} export declare type IconNode = readonly [string, object]; export declare type IconData = readonly [tag: string, object: object, children: IconNode[]]; From d883fc2c79ae8eb8c9bcbd9e0472b2ad2b6170fd Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sat, 3 Apr 2021 10:59:42 +0430 Subject: [PATCH 05/39] Update packages/lucide/scripts/buildTypes.js Co-authored-by: Eric Fennis --- packages/lucide/scripts/buildTypes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index 518ee379f..26ecbe71a 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -10,7 +10,7 @@ import defaultAttributes from '../src/defaultAttributes'; const typeDefinitions = `\ export interface SVGProps extends Partial ${JSON.stringify(defaultAttributes, null, 2)} -export declare type IconNode = readonly [string, object]; +export declare type IconNode = readonly [tag: string, attrs:SVGProps, children?:IconNode]; export declare type IconData = readonly [tag: string, object: object, children: IconNode[]]; export type Icons = { [key: string]: IconData } From d9981fc309a4d246c2ecb5f89e9534eaab0720d1 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sat, 3 Apr 2021 10:59:48 +0430 Subject: [PATCH 06/39] Update packages/lucide/scripts/buildTypes.js Co-authored-by: Eric Fennis --- packages/lucide/scripts/buildTypes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index 26ecbe71a..0f22ebe12 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -11,7 +11,7 @@ const typeDefinitions = `\ export interface SVGProps extends Partial ${JSON.stringify(defaultAttributes, null, 2)} export declare type IconNode = readonly [tag: string, attrs:SVGProps, children?:IconNode]; -export declare type IconData = readonly [tag: string, object: object, children: IconNode[]]; +export declare type CustomAttrs = { [attr:string]: any } export type Icons = { [key: string]: IconData } export interface CreateIconsOptions { From 08e4ff1e85117acad79a07adb3fa926a0c46b894 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sat, 3 Apr 2021 10:59:54 +0430 Subject: [PATCH 07/39] Update packages/lucide/scripts/buildTypes.js Co-authored-by: Eric Fennis --- packages/lucide/scripts/buildTypes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index 0f22ebe12..e40982300 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -38,7 +38,7 @@ export interface CreateIconsOptions { * * @default undefined */ - attrs?: Attributes; + attrs?: CustomAttrs; } export function createElement(icon: IconData): SVGSVGElement; From b07c5fe0cbc6810e3bfb82689ad0fa359cfa1510 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sat, 3 Apr 2021 11:00:02 +0430 Subject: [PATCH 08/39] Update packages/lucide/scripts/buildTypes.js Co-authored-by: Eric Fennis --- packages/lucide/scripts/buildTypes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index e40982300..25bbe7cfc 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -41,7 +41,7 @@ export interface CreateIconsOptions { attrs?: CustomAttrs; } -export function createElement(icon: IconData): SVGSVGElement; +export function createElement(icon: IconNode): SVGSVGElement; export function createIcons(options: CreateIconsOptions): VoidFunction; export declare const icons: Icons; From 9de8e78460d6d1e5002e46b25db5480d7541b688 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sat, 3 Apr 2021 11:00:09 +0430 Subject: [PATCH 09/39] Update packages/lucide/scripts/buildTypes.js Co-authored-by: Eric Fennis --- packages/lucide/scripts/buildTypes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index 25bbe7cfc..824e3d85d 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -42,7 +42,7 @@ export interface CreateIconsOptions { } export function createElement(icon: IconNode): SVGSVGElement; -export function createIcons(options: CreateIconsOptions): VoidFunction; +export function createIcons(options: CreateIconsOptions): void; export declare const icons: Icons; From a01d5c6f1e4b2c6676158950b85fd7bc05bc91cc Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sat, 3 Apr 2021 11:05:08 +0430 Subject: [PATCH 10/39] Update packages/lucide/scripts/buildTypes.js --- packages/lucide/scripts/buildTypes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index 824e3d85d..dc41ce94d 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -12,7 +12,7 @@ export interface SVGProps extends Partial ${JSON.stringify(defaultAt export declare type IconNode = readonly [tag: string, attrs:SVGProps, children?:IconNode]; export declare type CustomAttrs = { [attr:string]: any } -export type Icons = { [key: string]: IconData } +export type Icons = { [key: string]: IconNode } export interface CreateIconsOptions { /** From ecc1b1262a2587a4b3be51d51d140092a2ba8079 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:28:50 +0430 Subject: [PATCH 11/39] Update package.json --- package.json | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index dd792a4c6..4c2091cb7 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,9 @@ { "private": true, - "workspaces": { - "packages": [ - "packages/*", - "site" - ], + "workspaces": [ + "packages/*", + "site" + ], "nohoist": [ "**/jest", "**/jest/**", "**/jasmine", "**/jasmine/**", @@ -19,7 +18,6 @@ "build": "yarn lucide build && yarn lucide-react build && yarn lucide-vue build", "test": "yarn lucide build:icons && yarn lucide-react build:icons && yarn lucide-vue build:icons && jest", "lucide": "yarn workspace lucide", - "lucide-angular": "yarn workspace lucide-angular", "lucide-react": "yarn workspace lucide-react", "lucide-vue": "yarn workspace lucide-vue", "build:icons": "babel-node ./scripts/buildIcons.js --presets @babel/env", From 486f4fa26026eb5ae9da9dfc7075b75c4068bc54 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:29:17 +0430 Subject: [PATCH 12/39] Update package.json --- package.json | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/package.json b/package.json index 4c2091cb7..d362729a8 100644 --- a/package.json +++ b/package.json @@ -4,16 +4,6 @@ "packages/*", "site" ], - "nohoist": [ - "**/jest", "**/jest/**", - "**/jasmine", "**/jasmine/**", - "**/react", "**/react/**", - "**/testing-library__jest-dom", "**/testing-library__jest-dom/**", - "**/testing-library__react-hooks", "**/testing-library__react-hooks/**", - "**/react-dom", "**/react-dom/**", - "**/react-test-renderer", "**/react-test-renderer/**" - ] - }, "scripts": { "build": "yarn lucide build && yarn lucide-react build && yarn lucide-vue build", "test": "yarn lucide build:icons && yarn lucide-react build:icons && yarn lucide-vue build:icons && jest", From 3fa2ca378915b04f737d8b87fdb292ec3a00a960 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:29:48 +0430 Subject: [PATCH 13/39] Delete .gitignore --- packages/lucide-angular/.gitignore | 51 ------------------------------ 1 file changed, 51 deletions(-) delete mode 100644 packages/lucide-angular/.gitignore diff --git a/packages/lucide-angular/.gitignore b/packages/lucide-angular/.gitignore deleted file mode 100644 index 5d67e7fda..000000000 --- a/packages/lucide-angular/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/dist -/tmp -/out-tsc -# Only exists if Bazel was run -/bazel-out - -# dependencies -/node_modules - -# profiling files -chrome-profiler-events*.json -speed-measure-plugin*.json - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* -.editorconfig - -# misc -/.sass-cache -/connect.lock -/coverage -/libpeerconnection.log -npm-debug.log -yarn-error.log -testem.log -/typings - -# System Files -.DS_Store -Thumbs.db - -#npm-yarn -package-lock.json -yarn.lock From ded1a24668ead92530d2874ee711fefb4b7833be Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:30:01 +0430 Subject: [PATCH 14/39] Delete angular.json --- packages/lucide-angular/angular.json | 48 ---------------------------- 1 file changed, 48 deletions(-) delete mode 100644 packages/lucide-angular/angular.json diff --git a/packages/lucide-angular/angular.json b/packages/lucide-angular/angular.json deleted file mode 100644 index 059734448..000000000 --- a/packages/lucide-angular/angular.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "lucide-angular": { - "projectType": "library", - "root": "projects/lucide-angular", - "sourceRoot": "projects/lucide-angular/src", - "prefix": "lib", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:ng-packagr", - "options": { - "tsConfig": "projects/lucide-angular/tsconfig.lib.json", - "project": "projects/lucide-angular/ng-package.json" - }, - "configurations": { - "production": { - "tsConfig": "projects/lucide-angular/tsconfig.lib.prod.json" - } - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "projects/lucide-angular/src/test.ts", - "tsConfig": "projects/lucide-angular/tsconfig.spec.json", - "karmaConfig": "projects/lucide-angular/karma.conf.js" - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "projects/lucide-angular/tsconfig.lib.json", - "projects/lucide-angular/tsconfig.spec.json" - ], - "exclude": [ - "**/node_modules/**" - ] - } - } - } - } - }, - "defaultProject": "lucide-angular" -} From 4eb483705226ef0b3cc0935b26edc0b5c36dd0c7 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:30:17 +0430 Subject: [PATCH 15/39] Delete package.json --- packages/lucide-angular/package.json | 65 ---------------------------- 1 file changed, 65 deletions(-) delete mode 100644 packages/lucide-angular/package.json diff --git a/packages/lucide-angular/package.json b/packages/lucide-angular/package.json deleted file mode 100644 index 0274cdd71..000000000 --- a/packages/lucide-angular/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "lucide-angular", - "description": "Lucide Angular package, Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.", - "version": "0.15.0", - "author": "SMAH1", - "license": "ISC", - "homepage": "https://lucide.dev", - "bugs": "https://github.com/lucide-icons/lucide/issues", - "repository": { - "type": "git", - "url": "https://github.com/lucide-icons/lucide.git", - "directory": "packages/lucide-vue" - }, - "keywords": [ - "Lucide", - "Angular", - "Feather", - "Icons", - "Icon", - "Feather Icons", - "Fontawesome", - "Font Awesome" - ], - "scripts": { - "build": "yarn clean && yarn build:js && yarn build:icons && yarn build:iconsindex && yarn build:ng", - "clean": "rm -rf dist && rm -rf projects/lucide-angular/build", - "build:js": "mkdir -p projects/lucide-angular/build && cp -av ../lucide/src/createElement.js projects/lucide-angular/build/", - "build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-angular/projects/lucide-angular/build --templateSrc=../packages/lucide-angular/scripts/exportTemplate && for f in projects/lucide-angular/build/icons/*.js; do mv -- \"$f\" \"${f%.js}.ts\"; done", - "build:iconsindex": "yarn --cwd ../../ babel-node packages/lucide-angular/scripts/buildIconsIndex.js", - "build:ng": "ng build --prod", - "test:headless": "ng test --no-watch --no-progress --browsers=ChromeHeadlessCI", - "test": "ng test", - "lint": "ng lint", - "e2e": "ng e2e" - }, - "dependencies": { - "@angular/common": "~11.2.6", - "@angular/compiler": "~11.2.6", - "@angular/core": "~11.2.6", - "@angular/platform-browser": "~11.2.6", - "@angular/platform-browser-dynamic": "~11.2.6", - "tslib": "^2.0.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "~0.1102.5", - "@angular/cli": "~11.2.5", - "@angular/compiler-cli": "~11.2.6", - "@types/jasmine": "~3.6.0", - "@types/node": "^12.11.1", - "codelyzer": "^6.0.0", - "jasmine-core": "~3.6.0", - "jasmine-spec-reporter": "~5.0.0", - "karma": "~6.1.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.0.3", - "karma-jasmine": "~4.0.0", - "karma-jasmine-html-reporter": "^1.5.0", - "ng-packagr": "^11.0.0", - "protractor": "~7.0.0", - "puppeteer": "^8.0.0", - "ts-node": "~8.3.0", - "tslint": "~6.1.0", - "typescript": "~4.1.5" - } -} From e968bf51e3fdf8fd09d430148fc465e1eb948d05 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:31:08 +0430 Subject: [PATCH 16/39] Delete README.md --- .../projects/lucide-angular/README.md | 189 ------------------ 1 file changed, 189 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/README.md diff --git a/packages/lucide-angular/projects/lucide-angular/README.md b/packages/lucide-angular/projects/lucide-angular/README.md deleted file mode 100644 index 1141976be..000000000 --- a/packages/lucide-angular/projects/lucide-angular/README.md +++ /dev/null @@ -1,189 +0,0 @@ -# Lucide Angular - -Use the lucide icon library in you angular app. - -## Installation - -``` sh -yarn add lucide-angular - -# or - -npm install lucide-angular -``` - -## How to use - -There are three ways for use this library. - -### Method 1: createElement - -After install `lucide-angular` change content of file `app.component.html` and `app.component.ts`. - -``` xml - -
-``` - -``` js -// app.component.ts - -import { Component, OnInit } from '@angular/core'; -import { createElement } from 'lucide-angular'; -import { Activity } from 'lucide-angular/icons'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] -}) -export class AppComponent implements OnInit { - - ngOnInit(): void { - const div = document.getElementById('ico'); - const elm = createElement(Activity); - elm.setAttribute('color', 'red'); // or set `width`, `height`, `fill`, `stroke-width`, ... - div.appendChild(elm); - } -} -``` - -### Method 2: User __Tag__ with __name__ property - -After install `lucide-angular` change content of file `app.component.html`, `app.component.ts`, `app.component.css` and `app.module.ts`. - -``` js -// app.module.ts -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { LucideAngularModule } from 'lucide-angular'; -import { AlarmCheck, Edit } from 'lucide-angular/icons'; // or import other icons - -@NgModule({ - declarations: [ - AppComponent - ], - imports: [ - BrowserModule, - AppRoutingModule, - LucideAngularModule.pick({ AlarmCheck, Edit }) // add all of icons that is imported. - ], - providers: [], - bootstrap: [AppComponent] -}) -export class AppModule { } -``` - -``` css -/* app.component.css */ -.myicon { - /* Be sure to set these values */ - width: 48px; - height: 48px; - /* or other properties like `color`, `fill`, `stroke-width` */ -} -``` - -``` xml - - - -``` - -``` js -// app.component.ts - -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] -}) -export class AppComponent { - -} -``` - -### Method 3: User __Tag__ with __img__ property - -After install `lucide-angular` change content of file `app.component.html`, `app.component.ts`, `app.component.css` and `app.module.ts`. - -``` js -// app.module.ts -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { LucideAngularModule } from 'lucide-angular'; - -@NgModule({ - declarations: [ - AppComponent - ], - imports: [ - BrowserModule, - AppRoutingModule, - LucideAngularModule.pick({ }) - ], - providers: [], - bootstrap: [AppComponent] -}) -export class AppModule { } -``` - -``` css -/* app.component.css */ -.myicon { - /* Be sure to set these values */ - width: 48px; - height: 48px; - /* or other properties like `color`, `fill`, `stroke-width` */ -} -``` - -``` xml - - - -``` - -``` js -// app.component.ts -import { Component } from '@angular/core'; -import { Airplay, Circle } from 'lucide-angular/icons'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] -}) -export class AppComponent { - ico1 = Airplay; - ico2 = Circle; -} -``` - -## Notes - -### Import all icons - -In `Method 2`: import all icons in `app.module.ts` by: -``` js -... -import { icons } from 'lucide-angular/icons'; -.... -LucideAngularModule.pick(icons) -.... -``` -### Tags -You can use the following tags instead of `lucide-icon`: - * lucide-angular - * i-lucide - * span-lucide - -All of the above are the same From 49e0889b633b0fcb4adef125a25b87930b985747 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:31:19 +0430 Subject: [PATCH 17/39] Delete default-attributes.ts --- .../projects/lucide-angular/default-attributes.ts | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/default-attributes.ts diff --git a/packages/lucide-angular/projects/lucide-angular/default-attributes.ts b/packages/lucide-angular/projects/lucide-angular/default-attributes.ts deleted file mode 100644 index 8ae7d46ea..000000000 --- a/packages/lucide-angular/projects/lucide-angular/default-attributes.ts +++ /dev/null @@ -1,11 +0,0 @@ -export default { - xmlns: 'http://www.w3.org/2000/svg', - width: 24, - height: 24, - viewBox: '0 0 24 24', - fill: 'none', - stroke: 'currentColor', - 'stroke-width': 2, - 'stroke-linecap': 'round', - 'stroke-linejoin': 'round', -}; From 80239f7c8aede64186ac48a8b7470245dd5da56a Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:31:26 +0430 Subject: [PATCH 18/39] Delete icons-index.ts --- .../lucide-angular/projects/lucide-angular/icons-index.ts | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/icons-index.ts diff --git a/packages/lucide-angular/projects/lucide-angular/icons-index.ts b/packages/lucide-angular/projects/lucide-angular/icons-index.ts deleted file mode 100644 index 9b54f0f0b..000000000 --- a/packages/lucide-angular/projects/lucide-angular/icons-index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './build/icons-index'; - -import * as icons from './build/icons-index'; -export { icons }; From 74dfc929dfbaf54a3386e6e04bfb5926fc0f2428 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:31:33 +0430 Subject: [PATCH 19/39] Delete package.json --- .../projects/lucide-angular/icons/package.json | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/icons/package.json diff --git a/packages/lucide-angular/projects/lucide-angular/icons/package.json b/packages/lucide-angular/projects/lucide-angular/icons/package.json deleted file mode 100644 index 84efc25d1..000000000 --- a/packages/lucide-angular/projects/lucide-angular/icons/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ngPackage": { - "lib": { - "entryFile": "../icons-index.ts" - } - } -} From 49dffc9f43572a6a09dda9a756b1eedd548ab50d Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:31:45 +0430 Subject: [PATCH 20/39] Delete karma.conf.js --- .../projects/lucide-angular/karma.conf.js | 51 ------------------- 1 file changed, 51 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/karma.conf.js diff --git a/packages/lucide-angular/projects/lucide-angular/karma.conf.js b/packages/lucide-angular/projects/lucide-angular/karma.conf.js deleted file mode 100644 index 5fe10e39f..000000000 --- a/packages/lucide-angular/projects/lucide-angular/karma.conf.js +++ /dev/null @@ -1,51 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html -process.env.CHROME_BIN = require('puppeteer').executablePath(); - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, '../../coverage/lucide-angular'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['ChromeHeadlessCI'], - customLaunchers: { - ChromeHeadlessCI: { - base: 'ChromeHeadless', - flags: ['--no-sandbox'] - } - }, - singleRun: false, - restartOnFileChange: true - }); -}; From 8aa0295c9e0e041e64bf10bf0d958d3b526a812e Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:31:55 +0430 Subject: [PATCH 21/39] Delete lucide.ts --- .../lucide-angular/projects/lucide-angular/lucide.ts | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/lucide.ts diff --git a/packages/lucide-angular/projects/lucide-angular/lucide.ts b/packages/lucide-angular/projects/lucide-angular/lucide.ts deleted file mode 100644 index dd773b473..000000000 --- a/packages/lucide-angular/projects/lucide-angular/lucide.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type IconNode = readonly [string, object]; -export type IconData = readonly [string, object, IconNode[] ]; - -export declare const icons: { [key: string]: IconData }; - -import { default as createElementTmp } from './build/createElement'; - -export function createElement(ico: IconData): HTMLElement { - return createElementTmp(ico as any); -} From 7a088181cc3c40309e7b2f6a6e4704e5a6193672 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:32:02 +0430 Subject: [PATCH 22/39] Delete ng-package.json --- .../lucide-angular/projects/lucide-angular/ng-package.json | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/ng-package.json diff --git a/packages/lucide-angular/projects/lucide-angular/ng-package.json b/packages/lucide-angular/projects/lucide-angular/ng-package.json deleted file mode 100644 index 3b1643920..000000000 --- a/packages/lucide-angular/projects/lucide-angular/ng-package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/lucide-angular", - "lib": { - "entryFile": "./lib-index.ts" - } -} \ No newline at end of file From b6e474908f4bcf8bf0577e48004bd6832be8d47f Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:32:17 +0430 Subject: [PATCH 23/39] Delete package.json --- .../projects/lucide-angular/package.json | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/package.json diff --git a/packages/lucide-angular/projects/lucide-angular/package.json b/packages/lucide-angular/projects/lucide-angular/package.json deleted file mode 100644 index d39258c39..000000000 --- a/packages/lucide-angular/projects/lucide-angular/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "lucide-angular", - "version": "0.15.0", - "peerDependencies": { - "@angular/common": "^11.2.6", - "@angular/core": "^11.2.6" - }, - "dependencies": { - "tslib": "^2.0.0" - } -} \ No newline at end of file From 9266183e957baf510ee2174340426b2e9011145b Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:32:26 +0430 Subject: [PATCH 24/39] Delete lib-index.ts --- packages/lucide-angular/projects/lucide-angular/lib-index.ts | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/lib-index.ts diff --git a/packages/lucide-angular/projects/lucide-angular/lib-index.ts b/packages/lucide-angular/projects/lucide-angular/lib-index.ts deleted file mode 100644 index 74e83bebf..000000000 --- a/packages/lucide-angular/projects/lucide-angular/lib-index.ts +++ /dev/null @@ -1,4 +0,0 @@ - -export * from './src/lib/lucide-angular.component'; -export * from './src/lib/lucide-angular.module'; -export * from './lucide'; From 8cdd66a1db0bfeb1358fd0cade4e5263d794bf76 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:32:43 +0430 Subject: [PATCH 25/39] Delete icons.provider.ts --- .../projects/lucide-angular/src/lib/icons.provider.ts | 3 --- 1 file changed, 3 deletions(-) delete mode 100755 packages/lucide-angular/projects/lucide-angular/src/lib/icons.provider.ts diff --git a/packages/lucide-angular/projects/lucide-angular/src/lib/icons.provider.ts b/packages/lucide-angular/projects/lucide-angular/src/lib/icons.provider.ts deleted file mode 100755 index e1d765d8b..000000000 --- a/packages/lucide-angular/projects/lucide-angular/src/lib/icons.provider.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class Icons { - constructor(private icons: object) {} -} From 4021f6954dcb65f5152b7ffc6a5002ba55191c07 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:32:50 +0430 Subject: [PATCH 26/39] Delete lucide-angular.component.spec.ts --- .../src/lib/lucide-angular.component.spec.ts | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.spec.ts diff --git a/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.spec.ts b/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.spec.ts deleted file mode 100644 index 6fea47079..000000000 --- a/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { LucideAngularModule } from './lucide-angular.module'; - -import { LucideAngularComponent } from './lucide-angular.component'; - -describe('LucideAngularComponent', () => { - let component: LucideAngularComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ LucideAngularComponent ], - imports: [ - LucideAngularModule.pick({ }) - ], - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(LucideAngularComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); From 78cbae10612788ec8028d400ffa3e4084b8f02c1 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:32:57 +0430 Subject: [PATCH 27/39] Delete lucide-angular.component.ts --- .../src/lib/lucide-angular.component.ts | 68 ------------------- 1 file changed, 68 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.ts diff --git a/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.ts b/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.ts deleted file mode 100644 index 065a21964..000000000 --- a/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.component.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Component, ElementRef, Input, Inject, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core'; -import { Icons } from './icons.provider'; -import { createElement, IconData } from '../../lucide'; - -@Component({ - selector: 'lucide-angular, lucide-icon, i-lucide, span-lucide', - template: ``, - styles: [` - :host { - display: inline-block; - fill: none; - stroke: inherit; - stroke-width: inherit; - stroke-linecap: round; - stroke-linejoin: round; - } - `] -}) -export class LucideAngularComponent implements OnChanges { - @Input() name!: string; - @Input() img!: IconData; - - constructor( - @Inject(ElementRef) private elem: ElementRef, - @Inject(ChangeDetectorRef) private changeDetector: ChangeDetectorRef, - @Inject(Icons) private icons: Icons - ) { } - - ngOnChanges(changes: SimpleChanges): void { - if (changes.name) { - // icons are provided as an array of objects because of "multi: true" - const icons = Object.assign({}, ...(this.icons as any as object[])); - const icoOfName = icons[this.toPascalCase(changes.name.currentValue)] || ''; - - if (!icoOfName) { - console.warn( - `Icon not found: ${changes.name.currentValue}\n` + - `Please check icon name or \'lucide icon list\'` - ); - } else { - const icoElement = createElement(icoOfName); - icoElement.setAttribute('stroke-width', 'inherit'); - icoElement.setAttribute('fill', 'inherit'); - icoElement.removeAttribute('width'); - icoElement.removeAttribute('height'); - - this.elem.nativeElement.innerHTML = ''; - this.elem.nativeElement.append(icoElement); - } - } - else if (changes.img) { - const icoElement = createElement(changes.img.currentValue); - icoElement.setAttribute('stroke-width', 'inherit'); - icoElement.setAttribute('fill', 'inherit'); - icoElement.removeAttribute('width'); - icoElement.removeAttribute('height'); - - this.elem.nativeElement.innerHTML = ''; - this.elem.nativeElement.append(icoElement); - } - - this.changeDetector.markForCheck(); - } - - toPascalCase(str: string): string { - return str.replace(/(\w)([a-z0-9]*)(_|-|\s*)/g, (g0, g1, g2) => g1.toUpperCase() + g2.toLowerCase()); - } -} From 686d6f8aec9db5c0d3cae5c7500d9c47ca73f45c Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:33:05 +0430 Subject: [PATCH 28/39] Delete lucide-angular.module.ts --- .../src/lib/lucide-angular.module.ts | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.module.ts diff --git a/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.module.ts b/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.module.ts deleted file mode 100644 index 40cfa629b..000000000 --- a/packages/lucide-angular/projects/lucide-angular/src/lib/lucide-angular.module.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NgModule, ModuleWithProviders, Optional } from '@angular/core'; -import { LucideAngularComponent } from './lucide-angular.component'; -import { Icons } from './icons.provider'; -import { IconData } from '../../lucide'; - -@NgModule({ - declarations: [LucideAngularComponent], - exports: [LucideAngularComponent] -}) -export class LucideAngularModule { - constructor(@Optional() private icons: Icons) { - if (!this.icons) { - throw new Error( - `No icon provided. Make sure to use 'LucideAngularModule.pick({ ... })' when importing the module\n` - ); - } - } - - static pick(icons: { [key: string]: IconData }): ModuleWithProviders { - return { - ngModule: LucideAngularModule, - providers: [ - { provide: Icons, multi: true, useValue: icons } - ] - }; - } -} From e9d24e0086e6b72fb7bff1dbfd73849da1fce15a Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:33:28 +0430 Subject: [PATCH 29/39] Delete test.ts --- .../projects/lucide-angular/src/test.ts | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/src/test.ts diff --git a/packages/lucide-angular/projects/lucide-angular/src/test.ts b/packages/lucide-angular/projects/lucide-angular/src/test.ts deleted file mode 100644 index 303b32a22..000000000 --- a/packages/lucide-angular/projects/lucide-angular/src/test.ts +++ /dev/null @@ -1,26 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/dist/zone'; -import 'zone.js/dist/zone-testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { - keys(): string[]; - (id: string): T; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); From bd0bdda5f2be8cc72e558aef69db210f8862c87d Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:33:37 +0430 Subject: [PATCH 30/39] Delete tsconfig.lib.json --- .../projects/lucide-angular/tsconfig.lib.json | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/tsconfig.lib.json diff --git a/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.json b/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.json deleted file mode 100644 index 16fc7bfef..000000000 --- a/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.json +++ /dev/null @@ -1,26 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/lib", - "target": "es2015", - "declaration": true, - "declarationMap": true, - "inlineSources": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "lib": [ - "dom", - "es2018" - ] - }, - "angularCompilerOptions": { - "skipTemplateCodegen": true, - "strictMetadataEmit": true, - "enableResourceInlining": true - }, - "exclude": [ - "src/test.ts", - "**/*.spec.ts" - ] -} From c707c9438b70c46b68a05ab2a300bda16a7685c8 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:33:42 +0430 Subject: [PATCH 31/39] Delete tsconfig.lib.prod.json --- .../projects/lucide-angular/tsconfig.lib.prod.json | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/tsconfig.lib.prod.json diff --git a/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.prod.json b/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.prod.json deleted file mode 100644 index 5615c27df..000000000 --- a/packages/lucide-angular/projects/lucide-angular/tsconfig.lib.prod.json +++ /dev/null @@ -1,10 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.lib.json", - "compilerOptions": { - "declarationMap": false - }, - "angularCompilerOptions": { - "enableIvy": false - } -} From a3345217c22129bd3bb5dd86397b12d2e2cd8156 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:33:49 +0430 Subject: [PATCH 32/39] Delete tsconfig.spec.json --- .../projects/lucide-angular/tsconfig.spec.json | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/tsconfig.spec.json diff --git a/packages/lucide-angular/projects/lucide-angular/tsconfig.spec.json b/packages/lucide-angular/projects/lucide-angular/tsconfig.spec.json deleted file mode 100644 index 715dd0a5d..000000000 --- a/packages/lucide-angular/projects/lucide-angular/tsconfig.spec.json +++ /dev/null @@ -1,17 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "files": [ - "src/test.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] -} From a7e2399621ba75b407f7cf442627e8242c2011f3 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:33:56 +0430 Subject: [PATCH 33/39] Delete tslint.json --- .../projects/lucide-angular/tslint.json | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 packages/lucide-angular/projects/lucide-angular/tslint.json diff --git a/packages/lucide-angular/projects/lucide-angular/tslint.json b/packages/lucide-angular/projects/lucide-angular/tslint.json deleted file mode 100644 index 920be84fc..000000000 --- a/packages/lucide-angular/projects/lucide-angular/tslint.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tslint.json", - "rules": { - "directive-selector": [ - true, - "attribute", - "lib", - "camelCase" - ], - "component-selector": [ - true, - "element", - "", - "kebab-case" - ] - } -} From 1c0d763f701eda526e6277a4d1c2153fce9e9edc Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:34:14 +0430 Subject: [PATCH 34/39] Delete buildIconsIndex.js --- .../lucide-angular/scripts/buildIconsIndex.js | 39 ------------------- 1 file changed, 39 deletions(-) delete mode 100644 packages/lucide-angular/scripts/buildIconsIndex.js diff --git a/packages/lucide-angular/scripts/buildIconsIndex.js b/packages/lucide-angular/scripts/buildIconsIndex.js deleted file mode 100644 index 84a6cc483..000000000 --- a/packages/lucide-angular/scripts/buildIconsIndex.js +++ /dev/null @@ -1,39 +0,0 @@ -import path from 'path'; - -import { - writeFile, - resetFile, - appendFile, - readSvgDirectory, -} from '../../../scripts/helpers'; - -const TARGET_DIR = path.join(__dirname, '../projects/lucide-angular/build'); -const ICONS_DIR = path.resolve(__dirname, '../../../icons'); -const TYPES_FILE_NAME = 'icons-index.ts'; - -// Generates header of d.ts file include some types and functions -const typeDefinitions = `\ -export type IconNode = readonly [string, object]; -export type IconData = readonly [string, object, IconNode[] ]; - -export declare const icons: { [key: string]: IconData }; - -// Generated icons -`; - -resetFile(TYPES_FILE_NAME, TARGET_DIR); -writeFile(typeDefinitions, TYPES_FILE_NAME, TARGET_DIR); - -const svgFiles = readSvgDirectory(ICONS_DIR); - -svgFiles.forEach(svgFile => { - const kebab = path.basename(svgFile, '.svg'); - - appendFile( - `export * from './icons/${kebab}';\n`, - TYPES_FILE_NAME, - TARGET_DIR, - ); -}); - -console.log(`Generated ${TYPES_FILE_NAME} file with`, svgFiles.length, 'icons'); From dcef099aca0439062dcb7f18119ace67e432bccd Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:34:27 +0430 Subject: [PATCH 35/39] Delete exportTemplate.js --- packages/lucide-angular/scripts/exportTemplate.js | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 packages/lucide-angular/scripts/exportTemplate.js diff --git a/packages/lucide-angular/scripts/exportTemplate.js b/packages/lucide-angular/scripts/exportTemplate.js deleted file mode 100644 index 0687be845..000000000 --- a/packages/lucide-angular/scripts/exportTemplate.js +++ /dev/null @@ -1,10 +0,0 @@ -export default ({ componentName, children }) => ` -import { IconData } from '../../lucide'; -import defaultAttributes from '../../default-attributes'; - -export const ${componentName}: IconData = [ - 'svg', - defaultAttributes, - ${JSON.stringify(children)} -]; -`; From 676ded84ac72af03a3fa113f50aca341bad9ab77 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:34:46 +0430 Subject: [PATCH 36/39] Delete tsconfig.json --- packages/lucide-angular/tsconfig.json | 31 --------------------------- 1 file changed, 31 deletions(-) delete mode 100644 packages/lucide-angular/tsconfig.json diff --git a/packages/lucide-angular/tsconfig.json b/packages/lucide-angular/tsconfig.json deleted file mode 100644 index 0f0bbfdaa..000000000 --- a/packages/lucide-angular/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "sourceMap": true, - "declaration": true, - "downlevelIteration": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "allowJs": true, - "paths": { - "lucide-angular": [ - "dist/lucide-angular/lucide-angular", - "dist/lucide-angular" - ] - }, - "moduleResolution": "node", - "importHelpers": true, - "target": "es2015", - "module": "es2020", - "lib": [ - "es2018", - "dom" - ] - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false - } -} From d95e2170c5cbea5e31fc15adc453841714b9e72f Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:34:55 +0430 Subject: [PATCH 37/39] Delete tslint.json --- packages/lucide-angular/tslint.json | 140 ---------------------------- 1 file changed, 140 deletions(-) delete mode 100644 packages/lucide-angular/tslint.json diff --git a/packages/lucide-angular/tslint.json b/packages/lucide-angular/tslint.json deleted file mode 100644 index 733008b75..000000000 --- a/packages/lucide-angular/tslint.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "extends": "tslint:recommended", - "rulesDirectory": [ - "codelyzer" - ], - "rules": { - "align": { - "options": [ - "parameters", - "statements" - ] - }, - "array-type": false, - "arrow-return-shorthand": true, - "curly": true, - "deprecation": { - "severity": "warning" - }, - "eofline": true, - "import-blacklist": [ - true, - "rxjs/Rx" - ], - "import-spacing": true, - "indent": { - "options": [ - "spaces" - ] - }, - "max-classes-per-file": false, - "max-line-length": [ - true, - 140 - ], - "member-ordering": [ - true, - { - "order": [ - "static-field", - "instance-field", - "static-method", - "instance-method" - ] - } - ], - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-empty": false, - "no-inferrable-types": [ - true, - "ignore-params" - ], - "no-non-null-assertion": true, - "no-redundant-jsdoc": true, - "no-switch-case-fall-through": true, - "no-var-requires": false, - "object-literal-key-quotes": [ - true, - "as-needed" - ], - "quotemark": [ - true, - "single" - ], - "semicolon": { - "options": [ - "always" - ] - }, - "space-before-function-paren": { - "options": { - "anonymous": "never", - "asyncArrow": "always", - "constructor": "never", - "method": "never", - "named": "never" - } - }, - "typedef": [ - true, - "call-signature" - ], - "typedef-whitespace": { - "options": [ - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - }, - { - "call-signature": "onespace", - "index-signature": "onespace", - "parameter": "onespace", - "property-declaration": "onespace", - "variable-declaration": "onespace" - } - ] - }, - "variable-name": { - "options": [ - "ban-keywords", - "check-format", - "allow-pascal-case" - ] - }, - "whitespace": { - "options": [ - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type", - "check-typecast" - ] - }, - "component-class-suffix": true, - "contextual-lifecycle": true, - "directive-class-suffix": true, - "no-conflicting-lifecycle": true, - "no-host-metadata-property": true, - "no-input-rename": true, - "no-inputs-metadata-property": true, - "no-output-native": true, - "no-output-on-prefix": true, - "no-output-rename": true, - "no-outputs-metadata-property": true, - "template-banana-in-box": true, - "template-no-negated-async": true, - "use-lifecycle-interface": true, - "use-pipe-transform-interface": true - } -} From 9ca395c9ba832e088a49c88b1890fa15fadfe411 Mon Sep 17 00:00:00 2001 From: SMAH1 Date: Sun, 4 Apr 2021 09:38:09 +0430 Subject: [PATCH 38/39] Update buildTypes.js Pretty code --- packages/lucide/scripts/buildTypes.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index dc41ce94d..9dfc4f031 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -5,7 +5,9 @@ import { readSvgDirectory, resetFile, appendFile, toPascalCase } from '../../../ const TARGET_DIR = path.join(__dirname, '../dist'); const ICONS_DIR = path.resolve(__dirname, '../../../icons'); const TYPES_FILE_NAME = 'lucide.d.ts'; + import defaultAttributes from '../src/defaultAttributes'; + // Generates header of d.ts file include some types and functions const typeDefinitions = `\ export interface SVGProps extends Partial ${JSON.stringify(defaultAttributes, null, 2)} From 1dba15f03b47ffeb028c529d7b8a42508a90cefc Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Mon, 5 Apr 2021 16:48:25 +0200 Subject: [PATCH 39/39] Fix bugs in types --- packages/lucide/scripts/buildTypes.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/lucide/scripts/buildTypes.js b/packages/lucide/scripts/buildTypes.js index 9dfc4f031..04b954ec3 100644 --- a/packages/lucide/scripts/buildTypes.js +++ b/packages/lucide/scripts/buildTypes.js @@ -2,14 +2,15 @@ import path from 'path'; import { readSvgDirectory, resetFile, appendFile, toPascalCase } from '../../../scripts/helpers'; +import defaultAttributes from '../src/defaultAttributes'; + const TARGET_DIR = path.join(__dirname, '../dist'); const ICONS_DIR = path.resolve(__dirname, '../../../icons'); const TYPES_FILE_NAME = 'lucide.d.ts'; -import defaultAttributes from '../src/defaultAttributes'; - // Generates header of d.ts file include some types and functions const typeDefinitions = `\ +declare module 'lucide' export interface SVGProps extends Partial ${JSON.stringify(defaultAttributes, null, 2)} export declare type IconNode = readonly [tag: string, attrs:SVGProps, children?:IconNode]; @@ -19,16 +20,16 @@ export type Icons = { [key: string]: IconNode } export interface CreateIconsOptions { /** * List of icons you want to replace - * + * * For example: \`{ Menu, Circle}\`. - * + * * For replace all icons in lucide library, import \`icons\` and use it. */ icons: Icons; /** * Search HTML emelemt by \`nameAttr\` property. - * + * * For example if define \`\`, fill by \`lucide-icon\`. * * @default 'icon-name' @@ -60,7 +61,7 @@ svgFiles.forEach(svgFile => { const nameSvg = path.basename(svgFile, '.svg'); const namePascal = toPascalCase(nameSvg); - appendFile(`export declare const ${namePascal}: IconData;\n`, TYPES_FILE_NAME, TARGET_DIR); + appendFile(`export declare const ${namePascal}: IconNode;\n`, TYPES_FILE_NAME, TARGET_DIR); }); console.log(`Generated ${TYPES_FILE_NAME} file with`, svgFiles.length, 'icons');