├── .browserslistrc ├── .editorconfig ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json └── tasks.json ├── README.md ├── angular.json ├── karma.conf.js ├── ngsw-config.json ├── package.json ├── pnpm-lock.yaml ├── screenshot └── screenshot.png ├── src ├── app │ ├── app.component.html │ ├── app.component.less │ ├── app.component.ts │ ├── app.module.ts │ ├── capture-area │ │ ├── capture-area.component.html │ │ ├── capture-area.component.less │ │ └── capture-area.component.ts │ ├── clipboard-copy │ │ ├── clipboard-copy.component.html │ │ ├── clipboard-copy.component.less │ │ └── clipboard-copy.component.ts │ ├── interface.ts │ ├── option │ │ ├── option.component.html │ │ ├── option.component.less │ │ ├── option.component.spec.ts │ │ └── option.component.ts │ └── shortcuts-render │ │ ├── shortcuts-render.component.html │ │ ├── shortcuts-render.component.less │ │ └── shortcuts-render.component.ts ├── assets │ ├── .gitkeep │ └── icons │ │ ├── android │ │ ├── android-launchericon-144-144.png │ │ ├── android-launchericon-192-192.png │ │ ├── android-launchericon-48-48.png │ │ ├── android-launchericon-512-512.png │ │ ├── android-launchericon-72-72.png │ │ └── android-launchericon-96-96.png │ │ ├── icons.json │ │ ├── ios │ │ ├── 100.png │ │ ├── 1024.png │ │ ├── 114.png │ │ ├── 120.png │ │ ├── 128.png │ │ ├── 144.png │ │ ├── 152.png │ │ ├── 16.png │ │ ├── 167.png │ │ ├── 180.png │ │ ├── 192.png │ │ ├── 20.png │ │ ├── 256.png │ │ ├── 29.png │ │ ├── 32.png │ │ ├── 40.png │ │ ├── 50.png │ │ ├── 512.png │ │ ├── 57.png │ │ ├── 58.png │ │ ├── 60.png │ │ ├── 64.png │ │ ├── 72.png │ │ ├── 76.png │ │ ├── 80.png │ │ └── 87.png │ │ └── windows11 │ │ ├── LargeTile.scale-100.png │ │ ├── LargeTile.scale-125.png │ │ ├── LargeTile.scale-150.png │ │ ├── LargeTile.scale-200.png │ │ ├── LargeTile.scale-400.png │ │ ├── SmallTile.scale-100.png │ │ ├── SmallTile.scale-125.png │ │ ├── SmallTile.scale-150.png │ │ ├── SmallTile.scale-200.png │ │ ├── SmallTile.scale-400.png │ │ ├── SplashScreen.scale-100.png │ │ ├── SplashScreen.scale-125.png │ │ ├── SplashScreen.scale-150.png │ │ ├── SplashScreen.scale-200.png │ │ ├── SplashScreen.scale-400.png │ │ ├── Square150x150Logo.scale-100.png │ │ ├── Square150x150Logo.scale-125.png │ │ ├── Square150x150Logo.scale-150.png │ │ ├── Square150x150Logo.scale-200.png │ │ ├── Square150x150Logo.scale-400.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-20.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-30.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-36.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-40.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-44.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-60.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-64.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-72.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-80.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-96.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-16.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-20.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-24.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-256.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-30.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-32.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-36.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-40.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-44.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-48.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-60.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-64.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-72.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-80.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-96.png │ │ ├── Square44x44Logo.scale-100.png │ │ ├── Square44x44Logo.scale-125.png │ │ ├── Square44x44Logo.scale-150.png │ │ ├── Square44x44Logo.scale-200.png │ │ ├── Square44x44Logo.scale-400.png │ │ ├── Square44x44Logo.targetsize-16.png │ │ ├── Square44x44Logo.targetsize-20.png │ │ ├── Square44x44Logo.targetsize-24.png │ │ ├── Square44x44Logo.targetsize-256.png │ │ ├── Square44x44Logo.targetsize-30.png │ │ ├── Square44x44Logo.targetsize-32.png │ │ ├── Square44x44Logo.targetsize-36.png │ │ ├── Square44x44Logo.targetsize-40.png │ │ ├── Square44x44Logo.targetsize-44.png │ │ ├── Square44x44Logo.targetsize-48.png │ │ ├── Square44x44Logo.targetsize-60.png │ │ ├── Square44x44Logo.targetsize-64.png │ │ ├── Square44x44Logo.targetsize-72.png │ │ ├── Square44x44Logo.targetsize-80.png │ │ ├── Square44x44Logo.targetsize-96.png │ │ ├── StoreLogo.scale-100.png │ │ ├── StoreLogo.scale-125.png │ │ ├── StoreLogo.scale-150.png │ │ ├── StoreLogo.scale-200.png │ │ ├── StoreLogo.scale-400.png │ │ ├── Wide310x150Logo.scale-100.png │ │ ├── Wide310x150Logo.scale-125.png │ │ ├── Wide310x150Logo.scale-150.png │ │ ├── Wide310x150Logo.scale-200.png │ │ └── Wide310x150Logo.scale-400.png ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── google4df031098619c53a.html ├── index.html ├── main.ts ├── manifest.webmanifest ├── polyfills.ts ├── robots.txt ├── styles.less └── test.ts ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json /.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major versions 15 | last 2 iOS major versions 16 | Firefox ESR 17 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | # Only exists if Bazel was run 8 | /bazel-out 9 | 10 | # dependencies 11 | /node_modules 12 | 13 | # profiling files 14 | chrome-profiler-events*.json 15 | 16 | # IDEs and editors 17 | /.idea 18 | .project 19 | .classpath 20 | .c9/ 21 | *.launch 22 | .settings/ 23 | *.sublime-workspace 24 | 25 | # IDE - VSCode 26 | .vscode/* 27 | !.vscode/settings.json 28 | !.vscode/tasks.json 29 | !.vscode/launch.json 30 | !.vscode/extensions.json 31 | .history/* 32 | 33 | # misc 34 | /.angular/cache 35 | /.sass-cache 36 | /connect.lock 37 | /coverage 38 | /libpeerconnection.log 39 | npm-debug.log 40 | yarn-error.log 41 | testem.log 42 | /typings 43 | 44 | # System Files 45 | .DS_Store 46 | Thumbs.db 47 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template"] 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 3 | "version": "0.2.0", 4 | "configurations": [ 5 | { 6 | "name": "ng serve", 7 | "type": "pwa-chrome", 8 | "request": "launch", 9 | "preLaunchTask": "npm: start", 10 | "url": "http://localhost:4200/" 11 | }, 12 | { 13 | "name": "ng test", 14 | "type": "chrome", 15 | "request": "launch", 16 | "preLaunchTask": "npm: test", 17 | "url": "http://localhost:9876/debug.html" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 3 | "version": "2.0.0", 4 | "tasks": [ 5 | { 6 | "type": "npm", 7 | "script": "start", 8 | "isBackground": true, 9 | "problemMatcher": { 10 | "owner": "typescript", 11 | "pattern": "$tsc", 12 | "background": { 13 | "activeOnStart": true, 14 | "beginsPattern": { 15 | "regexp": "(.*?)" 16 | }, 17 | "endsPattern": { 18 | "regexp": "bundle generation complete" 19 | } 20 | } 21 | } 22 | }, 23 | { 24 | "type": "npm", 25 | "script": "test", 26 | "isBackground": true, 27 | "problemMatcher": { 28 | "owner": "typescript", 29 | "pattern": "$tsc", 30 | "background": { 31 | "activeOnStart": true, 32 | "beginsPattern": { 33 | "regexp": "(.*?)" 34 | }, 35 | "endsPattern": { 36 | "regexp": "bundle generation complete" 37 | } 38 | } 39 | } 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # KbdGenerator 2 | 3 | #### [kbd.hsuan.xyz](https://kbd.hsuan.xyz) is inspired by [kCaps](https://kcaps.app/), and thanks [@ftium4](https://twitter.com/ftium4) for letting me know about it 4 | 5 |

6 | web site screenshot 7 |

8 | 9 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.1.2. 10 | 11 | ## Development server 12 | 13 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. 14 | 15 | ## Build 16 | 17 | Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. 18 | -------------------------------------------------------------------------------- /angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "cli": { 5 | "analytics": false, 6 | "packageManager": "pnpm" 7 | }, 8 | "newProjectRoot": "projects", 9 | "projects": { 10 | "kbd-generator": { 11 | "projectType": "application", 12 | "schematics": { 13 | "@schematics/angular:component": { 14 | "style": "less" 15 | }, 16 | "@schematics/angular:application": { 17 | "strict": true 18 | } 19 | }, 20 | "root": "", 21 | "sourceRoot": "src", 22 | "prefix": "app", 23 | "architect": { 24 | "build": { 25 | "builder": "@angular-devkit/build-angular:browser", 26 | "options": { 27 | "outputPath": "dist/kbd-generator", 28 | "index": "src/index.html", 29 | "main": "src/main.ts", 30 | "polyfills": "src/polyfills.ts", 31 | "tsConfig": "tsconfig.app.json", 32 | "inlineStyleLanguage": "less", 33 | "assets": [ 34 | "src/favicon.ico", 35 | "src/robots.txt", 36 | "src/assets", 37 | "src/manifest.webmanifest", 38 | "src/google4df031098619c53a.html" 39 | ], 40 | "styles": [ 41 | "src/styles.less" 42 | ], 43 | "scripts": [], 44 | "serviceWorker": true, 45 | "ngswConfigPath": "ngsw-config.json" 46 | }, 47 | "configurations": { 48 | "production": { 49 | "budgets": [ 50 | { 51 | "type": "initial", 52 | "maximumWarning": "500kb", 53 | "maximumError": "1mb" 54 | }, 55 | { 56 | "type": "anyComponentStyle", 57 | "maximumWarning": "2kb", 58 | "maximumError": "4kb" 59 | } 60 | ], 61 | "fileReplacements": [ 62 | { 63 | "replace": "src/environments/environment.ts", 64 | "with": "src/environments/environment.prod.ts" 65 | } 66 | ], 67 | "outputHashing": "all" 68 | }, 69 | "development": { 70 | "buildOptimizer": false, 71 | "optimization": false, 72 | "vendorChunk": true, 73 | "extractLicenses": false, 74 | "sourceMap": true, 75 | "namedChunks": true 76 | } 77 | }, 78 | "defaultConfiguration": "production" 79 | }, 80 | "serve": { 81 | "builder": "@angular-devkit/build-angular:dev-server", 82 | "configurations": { 83 | "production": { 84 | "browserTarget": "kbd-generator:build:production" 85 | }, 86 | "development": { 87 | "browserTarget": "kbd-generator:build:development" 88 | } 89 | }, 90 | "defaultConfiguration": "development" 91 | }, 92 | "extract-i18n": { 93 | "builder": "@angular-devkit/build-angular:extract-i18n", 94 | "options": { 95 | "browserTarget": "kbd-generator:build" 96 | } 97 | }, 98 | "test": { 99 | "builder": "@angular-devkit/build-angular:karma", 100 | "options": { 101 | "main": "src/test.ts", 102 | "polyfills": "src/polyfills.ts", 103 | "tsConfig": "tsconfig.spec.json", 104 | "karmaConfig": "karma.conf.js", 105 | "inlineStyleLanguage": "less", 106 | "assets": [ 107 | "src/favicon.ico", 108 | "src/assets", 109 | "src/manifest.webmanifest" 110 | ], 111 | "styles": [ 112 | "src/styles.less" 113 | ], 114 | "scripts": [] 115 | } 116 | } 117 | } 118 | } 119 | }, 120 | "defaultProject": "kbd-generator" 121 | } 122 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | jasmine: { 17 | // you can add configuration options for Jasmine here 18 | // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html 19 | // for example, you can disable the random execution with `random: false` 20 | // or set a specific seed with `seed: 4321` 21 | }, 22 | clearContext: false // leave Jasmine Spec Runner output visible in browser 23 | }, 24 | jasmineHtmlReporter: { 25 | suppressAll: true // removes the duplicated traces 26 | }, 27 | coverageReporter: { 28 | dir: require('path').join(__dirname, './coverage/kbd-generator'), 29 | subdir: '.', 30 | reporters: [ 31 | { type: 'html' }, 32 | { type: 'text-summary' } 33 | ] 34 | }, 35 | reporters: ['progress', 'kjhtml'], 36 | port: 9876, 37 | colors: true, 38 | logLevel: config.LOG_INFO, 39 | autoWatch: true, 40 | browsers: ['Chrome'], 41 | singleRun: false, 42 | restartOnFileChange: true 43 | }); 44 | }; 45 | -------------------------------------------------------------------------------- /ngsw-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/service-worker/config/schema.json", 3 | "index": "/index.html", 4 | "assetGroups": [ 5 | { 6 | "name": "app", 7 | "installMode": "prefetch", 8 | "resources": { 9 | "files": [ 10 | "/favicon.ico", 11 | "/index.html", 12 | "/manifest.webmanifest", 13 | "/*.css", 14 | "/*.js" 15 | ] 16 | } 17 | }, 18 | { 19 | "name": "assets", 20 | "installMode": "lazy", 21 | "updateMode": "prefetch", 22 | "resources": { 23 | "files": [ 24 | "/assets/**", 25 | "/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2)" 26 | ] 27 | } 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kbd-generator", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "ng": "ng", 6 | "start": "ng serve", 7 | "build": "ng build", 8 | "watch": "ng build --watch --configuration development", 9 | "test": "ng test" 10 | }, 11 | "private": true, 12 | "dependencies": { 13 | "@angular/animations": "~13.3.4", 14 | "@angular/cdk": "~13.3.4", 15 | "@angular/common": "~13.3.4", 16 | "@angular/compiler": "~13.3.4", 17 | "@angular/core": "~13.3.4", 18 | "@angular/forms": "~13.3.4", 19 | "@angular/platform-browser": "~13.3.4", 20 | "@angular/platform-browser-dynamic": "~13.3.4", 21 | "@angular/router": "~13.3.4", 22 | "@angular/service-worker": "~13.3.4", 23 | "github-markdown-css": "^5.1.0", 24 | "hotkeys-js": "^3.9.0", 25 | "mousetrap": "^1.6.5", 26 | "rxjs": "~7.4.0", 27 | "tslib": "^2.3.0", 28 | "zone.js": "~0.11.4" 29 | }, 30 | "devDependencies": { 31 | "@angular-devkit/build-angular": "~13.3.3", 32 | "@angular/cli": "~13.3.3", 33 | "@angular/compiler-cli": "~13.3.4", 34 | "@types/jasmine": "~3.10.0", 35 | "@types/mousetrap": "^1.6.9", 36 | "@types/node": "^12.11.1", 37 | "jasmine-core": "~3.10.0", 38 | "karma": "~6.3.0", 39 | "karma-chrome-launcher": "~3.1.0", 40 | "karma-coverage": "~2.1.0", 41 | "karma-jasmine": "~4.0.0", 42 | "karma-jasmine-html-reporter": "~1.7.0", 43 | "typescript": "~4.5.2" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /screenshot/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/screenshot/screenshot.png -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 |
2 |

<kbd> Generator </kbd>

3 | 4 | 5 | 6 | 15 |
16 | -------------------------------------------------------------------------------- /src/app/app.component.less: -------------------------------------------------------------------------------- 1 | :host { 2 | 3 | .main { 4 | display: flex; 5 | flex-direction: column; 6 | } 7 | 8 | .markdown-body { 9 | box-sizing: border-box; 10 | min-width: 200px; 11 | max-width: 980px; 12 | margin: 0 auto; 13 | padding: 20px 45px; 14 | } 15 | 16 | @media (max-width: 767px) { 17 | .markdown-body { 18 | padding: 15px; 19 | } 20 | } 21 | 22 | footer { 23 | font-size: 12px; 24 | margin-top: 20px; 25 | .author { 26 | text-align: center; 27 | margin: auto; 28 | color: #3e3e3e; 29 | } 30 | .source_code { 31 | display: flex; 32 | text-align: center; 33 | height: 14px; 34 | line-height: 14px; 35 | justify-content: center; 36 | margin-bottom: 4px; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import {ChangeDetectionStrategy, ChangeDetectorRef, Component} from '@angular/core'; 2 | import {FormatOption, SymbolsFormat} from "./interface"; 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | templateUrl: './app.component.html', 7 | styleUrls: ['./app.component.less'], 8 | changeDetection: ChangeDetectionStrategy.OnPush 9 | }) 10 | export class AppComponent { 11 | keys: number[] = [16, 83, 221] 12 | 13 | option: FormatOption = { 14 | symbols: SymbolsFormat.SymbolsAndCharacters, 15 | separator: true, 16 | shiftIn: false 17 | }; 18 | 19 | constructor(private cdr: ChangeDetectorRef) { 20 | } 21 | 22 | setShortcuts(keys: number[]): void { 23 | this.keys = keys; 24 | this.cdr.markForCheck(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { ReactiveFormsModule } from '@angular/forms'; 3 | import { BrowserModule } from '@angular/platform-browser'; 4 | 5 | import { AppComponent } from './app.component'; 6 | import { CaptureAreaComponent } from './capture-area/capture-area.component'; 7 | import { ShortcutsRenderComponent } from './shortcuts-render/shortcuts-render.component'; 8 | import { OptionComponent } from './option/option.component'; 9 | import { ClipboardCopyComponent } from './clipboard-copy/clipboard-copy.component'; 10 | import { ServiceWorkerModule } from '@angular/service-worker'; 11 | import { environment } from '../environments/environment'; 12 | 13 | @NgModule({ 14 | declarations: [ 15 | AppComponent, 16 | CaptureAreaComponent, 17 | ShortcutsRenderComponent, 18 | OptionComponent, 19 | ClipboardCopyComponent 20 | ], 21 | imports: [ 22 | BrowserModule, 23 | ReactiveFormsModule, 24 | ServiceWorkerModule.register('ngsw-worker.js', { 25 | enabled: environment.production, 26 | // Register the ServiceWorker as soon as the application is stable 27 | // or after 30 seconds (whichever comes first). 28 | registrationStrategy: 'registerWhenStable:30000' 29 | }) 30 | ], 31 | providers: [], 32 | bootstrap: [AppComponent] 33 | }) 34 | export class AppModule { } 35 | -------------------------------------------------------------------------------- /src/app/capture-area/capture-area.component.html: -------------------------------------------------------------------------------- 1 |

Focus this area (click here) and press the shortcut key(s) you want

2 | -------------------------------------------------------------------------------- /src/app/capture-area/capture-area.component.less: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | width: 100%; 4 | height: 80px; 5 | background: #eee; 6 | 7 | &:focus, &:active { 8 | outline: rgb(0, 95, 204) auto 1px; 9 | } 10 | 11 | p { 12 | font-size: 24px; 13 | color: #3e3e3e; 14 | line-height: 80px; 15 | text-align: center; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/app/capture-area/capture-area.component.ts: -------------------------------------------------------------------------------- 1 | import {ChangeDetectionStrategy, Component, ElementRef, EventEmitter, OnInit, Output, NgZone} from '@angular/core'; 2 | import hotkeys from "hotkeys-js"; 3 | 4 | @Component({ 5 | selector: 'app-capture-area', 6 | templateUrl: './capture-area.component.html', 7 | styleUrls: ['./capture-area.component.less'], 8 | changeDetection: ChangeDetectionStrategy.OnPush, 9 | host: { 10 | 'tabindex': "0" 11 | } 12 | }) 13 | export class CaptureAreaComponent implements OnInit { 14 | 15 | @Output() keysCaptured = new EventEmitter() 16 | 17 | constructor(private elementRef: ElementRef, private ngZone: NgZone) { } 18 | 19 | ngOnInit(): void { 20 | this.elementRef.nativeElement.focus(); 21 | 22 | this.ngZone.runOutsideAngular(() => { 23 | hotkeys('*', { 24 | element: this.elementRef.nativeElement 25 | }, (e) => { 26 | e.preventDefault(); 27 | this.ngZone.run(() => { 28 | this.keysCaptured.emit(hotkeys.getPressedKeyCodes()) 29 | }) 30 | }) 31 | }) 32 | } 33 | 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/app/clipboard-copy/clipboard-copy.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/app/clipboard-copy/clipboard-copy.component.less: -------------------------------------------------------------------------------- 1 | :host { 2 | color: #24292f; 3 | background: #f6f8fa; 4 | position: relative; 5 | display: inline-block; 6 | padding: 5px 10px; 7 | font-size: 14px; 8 | font-weight: 500; 9 | line-height: 14px; 10 | white-space: nowrap; 11 | vertical-align: middle; 12 | cursor: pointer; 13 | user-select: none; 14 | border: 1px solid rgba(27,31,36,0.15); 15 | border-radius: 6px; 16 | appearance: none; 17 | opacity: .8; 18 | 19 | &:hover, &:focus, &:active { 20 | opacity: 1; 21 | } 22 | 23 | .copy { 24 | fill: #57606a; 25 | } 26 | 27 | .check { 28 | fill: #1a7f37; 29 | } 30 | 31 | &.copying { 32 | pointer-events: none; 33 | } 34 | 35 | &.disabled { 36 | display: none; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/app/clipboard-copy/clipboard-copy.component.ts: -------------------------------------------------------------------------------- 1 | import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit} from '@angular/core'; 2 | import {Clipboard} from '@angular/cdk/clipboard'; 3 | 4 | @Component({ 5 | selector: 'app-clipboard-copy', 6 | templateUrl: './clipboard-copy.component.html', 7 | styleUrls: ['./clipboard-copy.component.less'], 8 | changeDetection: ChangeDetectionStrategy.OnPush, 9 | host: { 10 | "aria-label": "Copy", 11 | role: "button", 12 | tabindex: "0", 13 | '[class.copying]': "copying", 14 | '[class.disabled]': "value === ''", 15 | '(click)': "copy()" 16 | } 17 | }) 18 | export class ClipboardCopyComponent implements OnInit { 19 | 20 | @Input() value: string = ""; 21 | copying = false; 22 | successTime = -1; 23 | 24 | constructor(private clipboard: Clipboard, private cdr: ChangeDetectorRef) { } 25 | 26 | ngOnInit(): void { 27 | } 28 | 29 | copy(): void { 30 | this.copying = true; 31 | this.clipboard.copy(this.value); 32 | this.successTime = setTimeout(() => { 33 | this.copying = false; 34 | this.cdr.markForCheck(); 35 | }, 1000); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/app/interface.ts: -------------------------------------------------------------------------------- 1 | export enum SymbolsFormat { 2 | OnlySymbols = "ONLY_SYMBOLS", 3 | OnlyCharacters = "ONLY_CHARACTERS", 4 | SymbolsAndCharacters = "SYMBOLS_AND_CHARACTERS", 5 | } 6 | 7 | 8 | export interface FormatOption { 9 | symbols: SymbolsFormat; 10 | separator: boolean; 11 | shiftIn: boolean; 12 | } 13 | -------------------------------------------------------------------------------- /src/app/option/option.component.html: -------------------------------------------------------------------------------- 1 |

Options

2 |
3 | Choose format: 4 | 5 |
6 |
7 | 9 | 11 |
12 | 13 |
14 | 15 | 16 |
17 | 18 |
19 | 20 | 21 |
22 | 23 |
24 | 25 |
26 | 27 | 28 |
29 | 30 |
31 | 32 | 33 |
34 |
35 |
36 | -------------------------------------------------------------------------------- /src/app/option/option.component.less: -------------------------------------------------------------------------------- 1 | :host { 2 | input { 3 | margin: 0.4rem 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/app/option/option.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { OptionComponent } from './option.component'; 4 | 5 | describe('OptionComponent', () => { 6 | let component: OptionComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ OptionComponent ] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(OptionComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/option/option.component.ts: -------------------------------------------------------------------------------- 1 | import {Component, EventEmitter, OnDestroy, Output} from '@angular/core'; 2 | import {FormBuilder, FormGroup} from "@angular/forms"; 3 | import {Subject, takeUntil} from "rxjs"; 4 | import {FormatOption, SymbolsFormat} from "../interface"; 5 | 6 | @Component({ 7 | selector: 'app-option', 8 | templateUrl: './option.component.html', 9 | styleUrls: ['./option.component.less'] 10 | }) 11 | export class OptionComponent implements OnDestroy { 12 | 13 | readonly symbolsFormats = SymbolsFormat; 14 | 15 | @Output() optionChanged = new EventEmitter(); 16 | 17 | form: FormGroup; 18 | 19 | private destroy$ = new Subject(); 20 | 21 | constructor(private fb: FormBuilder) { 22 | this.form = fb.group({ 23 | symbols: [SymbolsFormat.SymbolsAndCharacters], 24 | separator: [true], 25 | shiftIn: [false] 26 | }); 27 | 28 | this.form.valueChanges.pipe( 29 | takeUntil(this.destroy$) 30 | ).subscribe((data) => { 31 | this.optionChanged.emit(data) 32 | }) 33 | } 34 | 35 | ngOnDestroy(): void { 36 | this.destroy$.next(); 37 | this.destroy$.complete(); 38 | } 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/app/shortcuts-render/shortcuts-render.component.html: -------------------------------------------------------------------------------- 1 |

Source code

2 |
3 |
{{code}}
4 | 5 |
6 | 7 |

Previews

8 | 9 |

Github

10 | 11 |

12 | 13 | {{key}} 14 | 15 | + 16 | &ngsp; 17 | 18 | 19 |

20 | 21 |

Stackoverflow

22 | 23 |

24 | 25 | {{key}} 26 | 27 | + 28 | &ngsp; 29 | 30 | 31 |

32 | -------------------------------------------------------------------------------- /src/app/shortcuts-render/shortcuts-render.component.less: -------------------------------------------------------------------------------- 1 | :host { 2 | 3 | display: flex; 4 | flex-direction: column; 5 | 6 | .highlight { 7 | position: relative; 8 | margin-bottom: 0; 9 | app-clipboard-copy { 10 | position: absolute; 11 | right: 8px; 12 | top: 8px; 13 | } 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/shortcuts-render/shortcuts-render.component.ts: -------------------------------------------------------------------------------- 1 | import {ChangeDetectionStrategy, Component, Input, OnChanges} from '@angular/core'; 2 | import {FormatOption, SymbolsFormat} from "../interface"; 3 | 4 | 5 | const keyCodeData = [ 6 | { keycode: 27, name: ['Escape', '⎋'] }, 7 | { keycode: 112, name: ['F1'] }, 8 | { keycode: 113, name: ['F2'] }, 9 | { keycode: 114, name: ['F3'] }, 10 | { keycode: 115, name: ['F4'] }, 11 | { keycode: 116, name: ['F5'] }, 12 | { keycode: 117, name: ['F6'] }, 13 | { keycode: 118, name: ['F7'] }, 14 | { keycode: 119, name: ['F8'] }, 15 | { keycode: 120, name: ['F9'] }, 16 | { keycode: 121, name: ['F10'] }, 17 | { keycode: 122, name: ['F11'] }, 18 | { keycode: 123, name: ['F12'] }, 19 | { keycode: 192, name: ['`'], shiftName: ['~'] }, 20 | { keycode: 49, name: ['1'], shiftName: ['!'] }, 21 | { keycode: 50, name: ['2'], shiftName: ['@'] }, 22 | { keycode: 51, name: ['3'], shiftName: ['#'] }, 23 | { keycode: 52, name: ['4'], shiftName: ['$'] }, 24 | { keycode: 53, name: ['5'], shiftName: ['%'] }, 25 | { keycode: 54, name: ['6'], shiftName: ['^'] }, 26 | { keycode: 55, name: ['7'], shiftName: ['&'] }, 27 | { keycode: 56, name: ['8'], shiftName: ['*'] }, 28 | { keycode: 57, name: ['9'], shiftName: ['('] }, 29 | { keycode: 48, name: ['0'], shiftName: [')'] }, 30 | { keycode: 189, name: ['-'], shiftName: ['_'] }, 31 | { keycode: 187, name: ['='], shiftName: ['+'] }, 32 | { keycode: 219, name: ['['], shiftName: ['{'] }, 33 | { keycode: 221, name: [']'], shiftName: ['}'] }, 34 | { keycode: 220, name: ['\\'], shiftName: ['|'] }, 35 | { keycode: 186, name: [';'] , shiftName: [':']}, 36 | { keycode: 222, name: ['\''], shiftName: ['"'] }, 37 | { keycode: 188, name: [','] , shiftName: ['<']}, 38 | { keycode: 190, name: ['.'] , shiftName: ['>']}, 39 | { keycode: 191, name: ['/'] , shiftName: ['?']}, 40 | { keycode: 8, name: ['Delete', '⌫'] }, 41 | { keycode: 9, name: ['Tab', '⇥'] }, 42 | { keycode: 81, name: ['Q'] }, 43 | { keycode: 87, name: ['W'] }, 44 | { keycode: 69, name: ['E'] }, 45 | { keycode: 82, name: ['R'] }, 46 | { keycode: 84, name: ['T'] }, 47 | { keycode: 89, name: ['Y'] }, 48 | { keycode: 85, name: ['U'] }, 49 | { keycode: 73, name: ['I'] }, 50 | { keycode: 79, name: ['O'] }, 51 | { keycode: 80, name: ['P'] }, 52 | { keycode: 20, name: ['CapsLock', '⇪'] }, 53 | { keycode: 65, name: ['A'] }, 54 | { keycode: 83, name: ['S'] }, 55 | { keycode: 68, name: ['D'] }, 56 | { keycode: 70, name: ['F'] }, 57 | { keycode: 71, name: ['G'] }, 58 | { keycode: 72, name: ['H'] }, 59 | { keycode: 74, name: ['J'] }, 60 | { keycode: 75, name: ['K'] }, 61 | { keycode: 76, name: ['L'] }, 62 | { keycode: 13, name: ['Enter', '⏎'] }, 63 | { keycode: 16, name: ['Shift', '⇧'] }, 64 | { keycode: 90, name: ['Z'] }, 65 | { keycode: 88, name: ['X'] }, 66 | { keycode: 67, name: ['C'] }, 67 | { keycode: 86, name: ['V'] }, 68 | { keycode: 66, name: ['B'] }, 69 | { keycode: 78, name: ['N'] }, 70 | { keycode: 77, name: ['M'] }, 71 | { keycode: 17, name: ['Control', '⌃'] }, 72 | { keycode: 18, name: ['Option', '⌥'] }, 73 | { keycode: 91, name: ['Command', '⌘'] }, 74 | { keycode: 32, name: ['Space'] }, 75 | { keycode: 37, name: ['←'] }, 76 | { keycode: 38, name: ['↑'] }, 77 | { keycode: 39, name: ['→'] }, 78 | { keycode: 40, name: ['↓'] }, 79 | ]; 80 | 81 | 82 | @Component({ 83 | selector: 'app-shortcuts-render', 84 | templateUrl: './shortcuts-render.component.html', 85 | styleUrls: ['./shortcuts-render.component.less'], 86 | preserveWhitespaces: true, 87 | changeDetection: ChangeDetectionStrategy.OnPush 88 | }) 89 | export class ShortcutsRenderComponent implements OnChanges { 90 | 91 | @Input() keys: number[] = [] 92 | @Input() option: FormatOption | null = null; 93 | 94 | symbolizeKeys: string[] = []; 95 | code: string = ""; 96 | 97 | constructor() { } 98 | 99 | 100 | ngOnChanges(): void { 101 | const shift = this.keys.indexOf(16) !== -1; 102 | this.symbolizeKeys = this.keys 103 | .map(keycode => keyCodeData.find(key => key.keycode === keycode)) 104 | .filter(key => !!key).map(key => { 105 | let c: string; 106 | let s: string; 107 | if(shift && key!.shiftName && this.option?.shiftIn) { 108 | c = key!.shiftName[0] 109 | } else { 110 | c = key!.name[0] 111 | } 112 | s = key!.name?.[1] ? `${key!.name?.[1]}` : ''; 113 | switch (this.option?.symbols) { 114 | case SymbolsFormat.SymbolsAndCharacters: 115 | return `${s}${s ? ' ' : ''}${c}`; 116 | case SymbolsFormat.OnlyCharacters: 117 | return c; 118 | case SymbolsFormat.OnlySymbols: 119 | default: 120 | return s ? s : c; 121 | } 122 | }) 123 | this.code = this.symbolizeKeys.map(s => `${s}`).join(this.option?.separator ? " + " : ""); 124 | } 125 | 126 | } 127 | -------------------------------------------------------------------------------- /src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/.gitkeep -------------------------------------------------------------------------------- /src/assets/icons/android/android-launchericon-144-144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/android/android-launchericon-144-144.png -------------------------------------------------------------------------------- /src/assets/icons/android/android-launchericon-192-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/android/android-launchericon-192-192.png -------------------------------------------------------------------------------- /src/assets/icons/android/android-launchericon-48-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/android/android-launchericon-48-48.png -------------------------------------------------------------------------------- /src/assets/icons/android/android-launchericon-512-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/android/android-launchericon-512-512.png -------------------------------------------------------------------------------- /src/assets/icons/android/android-launchericon-72-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/android/android-launchericon-72-72.png -------------------------------------------------------------------------------- /src/assets/icons/android/android-launchericon-96-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/android/android-launchericon-96-96.png -------------------------------------------------------------------------------- /src/assets/icons/icons.json: -------------------------------------------------------------------------------- 1 | { 2 | "icons": [ 3 | { 4 | "src": "windows11/SmallTile.scale-100.png", 5 | "sizes": "71x71" 6 | }, 7 | { 8 | "src": "windows11/SmallTile.scale-125.png", 9 | "sizes": "89x89" 10 | }, 11 | { 12 | "src": "windows11/SmallTile.scale-150.png", 13 | "sizes": "107x107" 14 | }, 15 | { 16 | "src": "windows11/SmallTile.scale-200.png", 17 | "sizes": "142x142" 18 | }, 19 | { 20 | "src": "windows11/SmallTile.scale-400.png", 21 | "sizes": "284x284" 22 | }, 23 | { 24 | "src": "windows11/Square150x150Logo.scale-100.png", 25 | "sizes": "150x150" 26 | }, 27 | { 28 | "src": "windows11/Square150x150Logo.scale-125.png", 29 | "sizes": "188x188" 30 | }, 31 | { 32 | "src": "windows11/Square150x150Logo.scale-150.png", 33 | "sizes": "225x225" 34 | }, 35 | { 36 | "src": "windows11/Square150x150Logo.scale-200.png", 37 | "sizes": "300x300" 38 | }, 39 | { 40 | "src": "windows11/Square150x150Logo.scale-400.png", 41 | "sizes": "600x600" 42 | }, 43 | { 44 | "src": "windows11/Wide310x150Logo.scale-100.png", 45 | "sizes": "310x150" 46 | }, 47 | { 48 | "src": "windows11/Wide310x150Logo.scale-125.png", 49 | "sizes": "388x188" 50 | }, 51 | { 52 | "src": "windows11/Wide310x150Logo.scale-150.png", 53 | "sizes": "465x225" 54 | }, 55 | { 56 | "src": "windows11/Wide310x150Logo.scale-200.png", 57 | "sizes": "620x300" 58 | }, 59 | { 60 | "src": "windows11/Wide310x150Logo.scale-400.png", 61 | "sizes": "1240x600" 62 | }, 63 | { 64 | "src": "windows11/LargeTile.scale-100.png", 65 | "sizes": "310x310" 66 | }, 67 | { 68 | "src": "windows11/LargeTile.scale-125.png", 69 | "sizes": "388x388" 70 | }, 71 | { 72 | "src": "windows11/LargeTile.scale-150.png", 73 | "sizes": "465x465" 74 | }, 75 | { 76 | "src": "windows11/LargeTile.scale-200.png", 77 | "sizes": "620x620" 78 | }, 79 | { 80 | "src": "windows11/LargeTile.scale-400.png", 81 | "sizes": "1240x1240" 82 | }, 83 | { 84 | "src": "windows11/Square44x44Logo.scale-100.png", 85 | "sizes": "44x44" 86 | }, 87 | { 88 | "src": "windows11/Square44x44Logo.scale-125.png", 89 | "sizes": "55x55" 90 | }, 91 | { 92 | "src": "windows11/Square44x44Logo.scale-150.png", 93 | "sizes": "66x66" 94 | }, 95 | { 96 | "src": "windows11/Square44x44Logo.scale-200.png", 97 | "sizes": "88x88" 98 | }, 99 | { 100 | "src": "windows11/Square44x44Logo.scale-400.png", 101 | "sizes": "176x176" 102 | }, 103 | { 104 | "src": "windows11/StoreLogo.scale-100.png", 105 | "sizes": "50x50" 106 | }, 107 | { 108 | "src": "windows11/StoreLogo.scale-125.png", 109 | "sizes": "63x63" 110 | }, 111 | { 112 | "src": "windows11/StoreLogo.scale-150.png", 113 | "sizes": "75x75" 114 | }, 115 | { 116 | "src": "windows11/StoreLogo.scale-200.png", 117 | "sizes": "100x100" 118 | }, 119 | { 120 | "src": "windows11/StoreLogo.scale-400.png", 121 | "sizes": "200x200" 122 | }, 123 | { 124 | "src": "windows11/SplashScreen.scale-100.png", 125 | "sizes": "620x300" 126 | }, 127 | { 128 | "src": "windows11/SplashScreen.scale-125.png", 129 | "sizes": "775x375" 130 | }, 131 | { 132 | "src": "windows11/SplashScreen.scale-150.png", 133 | "sizes": "930x450" 134 | }, 135 | { 136 | "src": "windows11/SplashScreen.scale-200.png", 137 | "sizes": "1240x600" 138 | }, 139 | { 140 | "src": "windows11/SplashScreen.scale-400.png", 141 | "sizes": "2480x1200" 142 | }, 143 | { 144 | "src": "windows11/Square44x44Logo.targetsize-16.png", 145 | "sizes": "16x16" 146 | }, 147 | { 148 | "src": "windows11/Square44x44Logo.targetsize-20.png", 149 | "sizes": "20x20" 150 | }, 151 | { 152 | "src": "windows11/Square44x44Logo.targetsize-24.png", 153 | "sizes": "24x24" 154 | }, 155 | { 156 | "src": "windows11/Square44x44Logo.targetsize-30.png", 157 | "sizes": "30x30" 158 | }, 159 | { 160 | "src": "windows11/Square44x44Logo.targetsize-32.png", 161 | "sizes": "32x32" 162 | }, 163 | { 164 | "src": "windows11/Square44x44Logo.targetsize-36.png", 165 | "sizes": "36x36" 166 | }, 167 | { 168 | "src": "windows11/Square44x44Logo.targetsize-40.png", 169 | "sizes": "40x40" 170 | }, 171 | { 172 | "src": "windows11/Square44x44Logo.targetsize-44.png", 173 | "sizes": "44x44" 174 | }, 175 | { 176 | "src": "windows11/Square44x44Logo.targetsize-48.png", 177 | "sizes": "48x48" 178 | }, 179 | { 180 | "src": "windows11/Square44x44Logo.targetsize-60.png", 181 | "sizes": "60x60" 182 | }, 183 | { 184 | "src": "windows11/Square44x44Logo.targetsize-64.png", 185 | "sizes": "64x64" 186 | }, 187 | { 188 | "src": "windows11/Square44x44Logo.targetsize-72.png", 189 | "sizes": "72x72" 190 | }, 191 | { 192 | "src": "windows11/Square44x44Logo.targetsize-80.png", 193 | "sizes": "80x80" 194 | }, 195 | { 196 | "src": "windows11/Square44x44Logo.targetsize-96.png", 197 | "sizes": "96x96" 198 | }, 199 | { 200 | "src": "windows11/Square44x44Logo.targetsize-256.png", 201 | "sizes": "256x256" 202 | }, 203 | { 204 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-16.png", 205 | "sizes": "16x16" 206 | }, 207 | { 208 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-20.png", 209 | "sizes": "20x20" 210 | }, 211 | { 212 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-24.png", 213 | "sizes": "24x24" 214 | }, 215 | { 216 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-30.png", 217 | "sizes": "30x30" 218 | }, 219 | { 220 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-32.png", 221 | "sizes": "32x32" 222 | }, 223 | { 224 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-36.png", 225 | "sizes": "36x36" 226 | }, 227 | { 228 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-40.png", 229 | "sizes": "40x40" 230 | }, 231 | { 232 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-44.png", 233 | "sizes": "44x44" 234 | }, 235 | { 236 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-48.png", 237 | "sizes": "48x48" 238 | }, 239 | { 240 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-60.png", 241 | "sizes": "60x60" 242 | }, 243 | { 244 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-64.png", 245 | "sizes": "64x64" 246 | }, 247 | { 248 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-72.png", 249 | "sizes": "72x72" 250 | }, 251 | { 252 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-80.png", 253 | "sizes": "80x80" 254 | }, 255 | { 256 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-96.png", 257 | "sizes": "96x96" 258 | }, 259 | { 260 | "src": "windows11/Square44x44Logo.altform-unplated_targetsize-256.png", 261 | "sizes": "256x256" 262 | }, 263 | { 264 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png", 265 | "sizes": "16x16" 266 | }, 267 | { 268 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png", 269 | "sizes": "20x20" 270 | }, 271 | { 272 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png", 273 | "sizes": "24x24" 274 | }, 275 | { 276 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png", 277 | "sizes": "30x30" 278 | }, 279 | { 280 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png", 281 | "sizes": "32x32" 282 | }, 283 | { 284 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png", 285 | "sizes": "36x36" 286 | }, 287 | { 288 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png", 289 | "sizes": "40x40" 290 | }, 291 | { 292 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png", 293 | "sizes": "44x44" 294 | }, 295 | { 296 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png", 297 | "sizes": "48x48" 298 | }, 299 | { 300 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png", 301 | "sizes": "60x60" 302 | }, 303 | { 304 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png", 305 | "sizes": "64x64" 306 | }, 307 | { 308 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png", 309 | "sizes": "72x72" 310 | }, 311 | { 312 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png", 313 | "sizes": "80x80" 314 | }, 315 | { 316 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png", 317 | "sizes": "96x96" 318 | }, 319 | { 320 | "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png", 321 | "sizes": "256x256" 322 | }, 323 | { 324 | "src": "android/android-launchericon-512-512.png", 325 | "sizes": "512x512" 326 | }, 327 | { 328 | "src": "android/android-launchericon-192-192.png", 329 | "sizes": "192x192" 330 | }, 331 | { 332 | "src": "android/android-launchericon-144-144.png", 333 | "sizes": "144x144" 334 | }, 335 | { 336 | "src": "android/android-launchericon-96-96.png", 337 | "sizes": "96x96" 338 | }, 339 | { 340 | "src": "android/android-launchericon-72-72.png", 341 | "sizes": "72x72" 342 | }, 343 | { 344 | "src": "android/android-launchericon-48-48.png", 345 | "sizes": "48x48" 346 | }, 347 | { 348 | "src": "ios/16.png", 349 | "sizes": "16x16" 350 | }, 351 | { 352 | "src": "ios/20.png", 353 | "sizes": "20x20" 354 | }, 355 | { 356 | "src": "ios/29.png", 357 | "sizes": "29x29" 358 | }, 359 | { 360 | "src": "ios/32.png", 361 | "sizes": "32x32" 362 | }, 363 | { 364 | "src": "ios/40.png", 365 | "sizes": "40x40" 366 | }, 367 | { 368 | "src": "ios/50.png", 369 | "sizes": "50x50" 370 | }, 371 | { 372 | "src": "ios/57.png", 373 | "sizes": "57x57" 374 | }, 375 | { 376 | "src": "ios/58.png", 377 | "sizes": "58x58" 378 | }, 379 | { 380 | "src": "ios/60.png", 381 | "sizes": "60x60" 382 | }, 383 | { 384 | "src": "ios/64.png", 385 | "sizes": "64x64" 386 | }, 387 | { 388 | "src": "ios/72.png", 389 | "sizes": "72x72" 390 | }, 391 | { 392 | "src": "ios/76.png", 393 | "sizes": "76x76" 394 | }, 395 | { 396 | "src": "ios/80.png", 397 | "sizes": "80x80" 398 | }, 399 | { 400 | "src": "ios/87.png", 401 | "sizes": "87x87" 402 | }, 403 | { 404 | "src": "ios/100.png", 405 | "sizes": "100x100" 406 | }, 407 | { 408 | "src": "ios/114.png", 409 | "sizes": "114x114" 410 | }, 411 | { 412 | "src": "ios/120.png", 413 | "sizes": "120x120" 414 | }, 415 | { 416 | "src": "ios/128.png", 417 | "sizes": "128x128" 418 | }, 419 | { 420 | "src": "ios/144.png", 421 | "sizes": "144x144" 422 | }, 423 | { 424 | "src": "ios/152.png", 425 | "sizes": "152x152" 426 | }, 427 | { 428 | "src": "ios/167.png", 429 | "sizes": "167x167" 430 | }, 431 | { 432 | "src": "ios/180.png", 433 | "sizes": "180x180" 434 | }, 435 | { 436 | "src": "ios/192.png", 437 | "sizes": "192x192" 438 | }, 439 | { 440 | "src": "ios/256.png", 441 | "sizes": "256x256" 442 | }, 443 | { 444 | "src": "ios/512.png", 445 | "sizes": "512x512" 446 | }, 447 | { 448 | "src": "ios/1024.png", 449 | "sizes": "1024x1024" 450 | } 451 | ] 452 | } -------------------------------------------------------------------------------- /src/assets/icons/ios/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/100.png -------------------------------------------------------------------------------- /src/assets/icons/ios/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/1024.png -------------------------------------------------------------------------------- /src/assets/icons/ios/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/114.png -------------------------------------------------------------------------------- /src/assets/icons/ios/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/120.png -------------------------------------------------------------------------------- /src/assets/icons/ios/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/128.png -------------------------------------------------------------------------------- /src/assets/icons/ios/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/144.png -------------------------------------------------------------------------------- /src/assets/icons/ios/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/152.png -------------------------------------------------------------------------------- /src/assets/icons/ios/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/16.png -------------------------------------------------------------------------------- /src/assets/icons/ios/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/167.png -------------------------------------------------------------------------------- /src/assets/icons/ios/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/180.png -------------------------------------------------------------------------------- /src/assets/icons/ios/192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/192.png -------------------------------------------------------------------------------- /src/assets/icons/ios/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/20.png -------------------------------------------------------------------------------- /src/assets/icons/ios/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/256.png -------------------------------------------------------------------------------- /src/assets/icons/ios/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/29.png -------------------------------------------------------------------------------- /src/assets/icons/ios/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/32.png -------------------------------------------------------------------------------- /src/assets/icons/ios/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/40.png -------------------------------------------------------------------------------- /src/assets/icons/ios/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/50.png -------------------------------------------------------------------------------- /src/assets/icons/ios/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/512.png -------------------------------------------------------------------------------- /src/assets/icons/ios/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/57.png -------------------------------------------------------------------------------- /src/assets/icons/ios/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/58.png -------------------------------------------------------------------------------- /src/assets/icons/ios/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/60.png -------------------------------------------------------------------------------- /src/assets/icons/ios/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/64.png -------------------------------------------------------------------------------- /src/assets/icons/ios/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/72.png -------------------------------------------------------------------------------- /src/assets/icons/ios/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/76.png -------------------------------------------------------------------------------- /src/assets/icons/ios/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/80.png -------------------------------------------------------------------------------- /src/assets/icons/ios/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/ios/87.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/LargeTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/LargeTile.scale-100.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/LargeTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/LargeTile.scale-125.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/LargeTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/LargeTile.scale-150.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/LargeTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/LargeTile.scale-200.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/LargeTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/LargeTile.scale-400.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SmallTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SmallTile.scale-100.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SmallTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SmallTile.scale-125.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SmallTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SmallTile.scale-150.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SmallTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SmallTile.scale-200.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SmallTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SmallTile.scale-400.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SplashScreen.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SplashScreen.scale-100.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SplashScreen.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SplashScreen.scale-125.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SplashScreen.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SplashScreen.scale-150.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SplashScreen.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SplashScreen.scale-200.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/SplashScreen.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/SplashScreen.scale-400.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square150x150Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square150x150Logo.scale-100.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square150x150Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square150x150Logo.scale-125.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square150x150Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square150x150Logo.scale-150.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square150x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square150x150Logo.scale-200.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square150x150Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square150x150Logo.scale-400.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-16.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-20.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-24.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-256.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-30.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-32.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-36.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-40.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-44.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-48.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-60.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-64.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-72.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-80.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-96.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.scale-100.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.scale-125.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.scale-150.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.scale-200.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.scale-400.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-16.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-20.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-24.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-256.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-30.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-32.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-36.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-40.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-44.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-48.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-60.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-64.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-72.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-80.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Square44x44Logo.targetsize-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Square44x44Logo.targetsize-96.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/StoreLogo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/StoreLogo.scale-100.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/StoreLogo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/StoreLogo.scale-125.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/StoreLogo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/StoreLogo.scale-150.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/StoreLogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/StoreLogo.scale-200.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/StoreLogo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/StoreLogo.scale-400.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Wide310x150Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Wide310x150Logo.scale-100.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Wide310x150Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Wide310x150Logo.scale-125.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Wide310x150Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Wide310x150Logo.scale-150.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Wide310x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Wide310x150Logo.scale-200.png -------------------------------------------------------------------------------- /src/assets/icons/windows11/Wide310x150Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/assets/icons/windows11/Wide310x150Logo.scale-400.png -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false 7 | }; 8 | 9 | /* 10 | * For easier debugging in development mode, you can import the following file 11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 12 | * 13 | * This import should be commented out in production mode because it will have a negative impact 14 | * on performance if an error is thrown. 15 | */ 16 | // import 'zone.js/plugins/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsuanxyz/kbd-generator/5314aa29c6088a849e1a25ecfcd484aa52f6f009/src/favicon.ico -------------------------------------------------------------------------------- /src/google4df031098619c53a.html: -------------------------------------------------------------------------------- 1 | google-site-verification: google4df031098619c53a.html -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Kbd Generator - Quickly generate kbd tags by keyboard shortcuts 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.error(err)); 13 | -------------------------------------------------------------------------------- /src/manifest.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kbd-generator", 3 | "short_name": "kbd-generator", 4 | "theme_color": "#1976d2", 5 | "background_color": "#fafafa", 6 | "display": "standalone", 7 | "scope": "./", 8 | "start_url": "./", 9 | "icons": [ 10 | { 11 | "src": "assets/icons/windows11/SmallTile.scale-100.png", 12 | "sizes": "71x71" 13 | }, 14 | { 15 | "src": "assets/icons/windows11/SmallTile.scale-125.png", 16 | "sizes": "89x89" 17 | }, 18 | { 19 | "src": "assets/icons/windows11/SmallTile.scale-150.png", 20 | "sizes": "107x107" 21 | }, 22 | { 23 | "src": "assets/icons/windows11/SmallTile.scale-200.png", 24 | "sizes": "142x142" 25 | }, 26 | { 27 | "src": "assets/icons/windows11/SmallTile.scale-400.png", 28 | "sizes": "284x284" 29 | }, 30 | { 31 | "src": "assets/icons/windows11/Square150x150Logo.scale-100.png", 32 | "sizes": "150x150" 33 | }, 34 | { 35 | "src": "assets/icons/windows11/Square150x150Logo.scale-125.png", 36 | "sizes": "188x188" 37 | }, 38 | { 39 | "src": "assets/icons/windows11/Square150x150Logo.scale-150.png", 40 | "sizes": "225x225" 41 | }, 42 | { 43 | "src": "assets/icons/windows11/Square150x150Logo.scale-200.png", 44 | "sizes": "300x300" 45 | }, 46 | { 47 | "src": "assets/icons/windows11/Square150x150Logo.scale-400.png", 48 | "sizes": "600x600" 49 | }, 50 | { 51 | "src": "assets/icons/windows11/Wide310x150Logo.scale-100.png", 52 | "sizes": "310x150" 53 | }, 54 | { 55 | "src": "assets/icons/windows11/Wide310x150Logo.scale-125.png", 56 | "sizes": "388x188" 57 | }, 58 | { 59 | "src": "assets/icons/windows11/Wide310x150Logo.scale-150.png", 60 | "sizes": "465x225" 61 | }, 62 | { 63 | "src": "assets/icons/windows11/Wide310x150Logo.scale-200.png", 64 | "sizes": "620x300" 65 | }, 66 | { 67 | "src": "assets/icons/windows11/Wide310x150Logo.scale-400.png", 68 | "sizes": "1240x600" 69 | }, 70 | { 71 | "src": "assets/icons/windows11/LargeTile.scale-100.png", 72 | "sizes": "310x310" 73 | }, 74 | { 75 | "src": "assets/icons/windows11/LargeTile.scale-125.png", 76 | "sizes": "388x388" 77 | }, 78 | { 79 | "src": "assets/icons/windows11/LargeTile.scale-150.png", 80 | "sizes": "465x465" 81 | }, 82 | { 83 | "src": "assets/icons/windows11/LargeTile.scale-200.png", 84 | "sizes": "620x620" 85 | }, 86 | { 87 | "src": "assets/icons/windows11/LargeTile.scale-400.png", 88 | "sizes": "1240x1240" 89 | }, 90 | { 91 | "src": "assets/icons/windows11/Square44x44Logo.scale-100.png", 92 | "sizes": "44x44" 93 | }, 94 | { 95 | "src": "assets/icons/windows11/Square44x44Logo.scale-125.png", 96 | "sizes": "55x55" 97 | }, 98 | { 99 | "src": "assets/icons/windows11/Square44x44Logo.scale-150.png", 100 | "sizes": "66x66" 101 | }, 102 | { 103 | "src": "assets/icons/windows11/Square44x44Logo.scale-200.png", 104 | "sizes": "88x88" 105 | }, 106 | { 107 | "src": "assets/icons/windows11/Square44x44Logo.scale-400.png", 108 | "sizes": "176x176" 109 | }, 110 | { 111 | "src": "assets/icons/windows11/StoreLogo.scale-100.png", 112 | "sizes": "50x50" 113 | }, 114 | { 115 | "src": "assets/icons/windows11/StoreLogo.scale-125.png", 116 | "sizes": "63x63" 117 | }, 118 | { 119 | "src": "assets/icons/windows11/StoreLogo.scale-150.png", 120 | "sizes": "75x75" 121 | }, 122 | { 123 | "src": "assets/icons/windows11/StoreLogo.scale-200.png", 124 | "sizes": "100x100" 125 | }, 126 | { 127 | "src": "assets/icons/windows11/StoreLogo.scale-400.png", 128 | "sizes": "200x200" 129 | }, 130 | { 131 | "src": "assets/icons/windows11/SplashScreen.scale-100.png", 132 | "sizes": "620x300" 133 | }, 134 | { 135 | "src": "assets/icons/windows11/SplashScreen.scale-125.png", 136 | "sizes": "775x375" 137 | }, 138 | { 139 | "src": "assets/icons/windows11/SplashScreen.scale-150.png", 140 | "sizes": "930x450" 141 | }, 142 | { 143 | "src": "assets/icons/windows11/SplashScreen.scale-200.png", 144 | "sizes": "1240x600" 145 | }, 146 | { 147 | "src": "assets/icons/windows11/SplashScreen.scale-400.png", 148 | "sizes": "2480x1200" 149 | }, 150 | { 151 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-16.png", 152 | "sizes": "16x16" 153 | }, 154 | { 155 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-20.png", 156 | "sizes": "20x20" 157 | }, 158 | { 159 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-24.png", 160 | "sizes": "24x24" 161 | }, 162 | { 163 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-30.png", 164 | "sizes": "30x30" 165 | }, 166 | { 167 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-32.png", 168 | "sizes": "32x32" 169 | }, 170 | { 171 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-36.png", 172 | "sizes": "36x36" 173 | }, 174 | { 175 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-40.png", 176 | "sizes": "40x40" 177 | }, 178 | { 179 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-44.png", 180 | "sizes": "44x44" 181 | }, 182 | { 183 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-48.png", 184 | "sizes": "48x48" 185 | }, 186 | { 187 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-60.png", 188 | "sizes": "60x60" 189 | }, 190 | { 191 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-64.png", 192 | "sizes": "64x64" 193 | }, 194 | { 195 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-72.png", 196 | "sizes": "72x72" 197 | }, 198 | { 199 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-80.png", 200 | "sizes": "80x80" 201 | }, 202 | { 203 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-96.png", 204 | "sizes": "96x96" 205 | }, 206 | { 207 | "src": "assets/icons/windows11/Square44x44Logo.targetsize-256.png", 208 | "sizes": "256x256" 209 | }, 210 | { 211 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-16.png", 212 | "sizes": "16x16" 213 | }, 214 | { 215 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-20.png", 216 | "sizes": "20x20" 217 | }, 218 | { 219 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-24.png", 220 | "sizes": "24x24" 221 | }, 222 | { 223 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-30.png", 224 | "sizes": "30x30" 225 | }, 226 | { 227 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-32.png", 228 | "sizes": "32x32" 229 | }, 230 | { 231 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-36.png", 232 | "sizes": "36x36" 233 | }, 234 | { 235 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-40.png", 236 | "sizes": "40x40" 237 | }, 238 | { 239 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-44.png", 240 | "sizes": "44x44" 241 | }, 242 | { 243 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-48.png", 244 | "sizes": "48x48" 245 | }, 246 | { 247 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-60.png", 248 | "sizes": "60x60" 249 | }, 250 | { 251 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-64.png", 252 | "sizes": "64x64" 253 | }, 254 | { 255 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-72.png", 256 | "sizes": "72x72" 257 | }, 258 | { 259 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-80.png", 260 | "sizes": "80x80" 261 | }, 262 | { 263 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-96.png", 264 | "sizes": "96x96" 265 | }, 266 | { 267 | "src": "assets/icons/windows11/Square44x44Logo.altform-unplated_targetsize-256.png", 268 | "sizes": "256x256" 269 | }, 270 | { 271 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png", 272 | "sizes": "16x16" 273 | }, 274 | { 275 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png", 276 | "sizes": "20x20" 277 | }, 278 | { 279 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png", 280 | "sizes": "24x24" 281 | }, 282 | { 283 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png", 284 | "sizes": "30x30" 285 | }, 286 | { 287 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png", 288 | "sizes": "32x32" 289 | }, 290 | { 291 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png", 292 | "sizes": "36x36" 293 | }, 294 | { 295 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png", 296 | "sizes": "40x40" 297 | }, 298 | { 299 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png", 300 | "sizes": "44x44" 301 | }, 302 | { 303 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png", 304 | "sizes": "48x48" 305 | }, 306 | { 307 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png", 308 | "sizes": "60x60" 309 | }, 310 | { 311 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png", 312 | "sizes": "64x64" 313 | }, 314 | { 315 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png", 316 | "sizes": "72x72" 317 | }, 318 | { 319 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png", 320 | "sizes": "80x80" 321 | }, 322 | { 323 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png", 324 | "sizes": "96x96" 325 | }, 326 | { 327 | "src": "assets/icons/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png", 328 | "sizes": "256x256" 329 | }, 330 | { 331 | "src": "assets/icons/android/android-launchericon-512-512.png", 332 | "sizes": "512x512" 333 | }, 334 | { 335 | "src": "assets/icons/android/android-launchericon-192-192.png", 336 | "sizes": "192x192" 337 | }, 338 | { 339 | "src": "assets/icons/android/android-launchericon-144-144.png", 340 | "sizes": "144x144" 341 | }, 342 | { 343 | "src": "assets/icons/android/android-launchericon-96-96.png", 344 | "sizes": "96x96" 345 | }, 346 | { 347 | "src": "assets/icons/android/android-launchericon-72-72.png", 348 | "sizes": "72x72" 349 | }, 350 | { 351 | "src": "assets/icons/android/android-launchericon-48-48.png", 352 | "sizes": "48x48" 353 | }, 354 | { 355 | "src": "assets/icons/ios/16.png", 356 | "sizes": "16x16" 357 | }, 358 | { 359 | "src": "assets/icons/ios/20.png", 360 | "sizes": "20x20" 361 | }, 362 | { 363 | "src": "assets/icons/ios/29.png", 364 | "sizes": "29x29" 365 | }, 366 | { 367 | "src": "assets/icons/ios/32.png", 368 | "sizes": "32x32" 369 | }, 370 | { 371 | "src": "assets/icons/ios/40.png", 372 | "sizes": "40x40" 373 | }, 374 | { 375 | "src": "assets/icons/ios/50.png", 376 | "sizes": "50x50" 377 | }, 378 | { 379 | "src": "assets/icons/ios/57.png", 380 | "sizes": "57x57" 381 | }, 382 | { 383 | "src": "assets/icons/ios/58.png", 384 | "sizes": "58x58" 385 | }, 386 | { 387 | "src": "assets/icons/ios/60.png", 388 | "sizes": "60x60" 389 | }, 390 | { 391 | "src": "assets/icons/ios/64.png", 392 | "sizes": "64x64" 393 | }, 394 | { 395 | "src": "assets/icons/ios/72.png", 396 | "sizes": "72x72" 397 | }, 398 | { 399 | "src": "assets/icons/ios/76.png", 400 | "sizes": "76x76" 401 | }, 402 | { 403 | "src": "assets/icons/ios/80.png", 404 | "sizes": "80x80" 405 | }, 406 | { 407 | "src": "assets/icons/ios/87.png", 408 | "sizes": "87x87" 409 | }, 410 | { 411 | "src": "assets/icons/ios/100.png", 412 | "sizes": "100x100" 413 | }, 414 | { 415 | "src": "assets/icons/ios/114.png", 416 | "sizes": "114x114" 417 | }, 418 | { 419 | "src": "assets/icons/ios/120.png", 420 | "sizes": "120x120" 421 | }, 422 | { 423 | "src": "assets/icons/ios/128.png", 424 | "sizes": "128x128" 425 | }, 426 | { 427 | "src": "assets/icons/ios/144.png", 428 | "sizes": "144x144" 429 | }, 430 | { 431 | "src": "assets/icons/ios/152.png", 432 | "sizes": "152x152" 433 | }, 434 | { 435 | "src": "assets/icons/ios/167.png", 436 | "sizes": "167x167" 437 | }, 438 | { 439 | "src": "assets/icons/ios/180.png", 440 | "sizes": "180x180" 441 | }, 442 | { 443 | "src": "assets/icons/ios/192.png", 444 | "sizes": "192x192" 445 | }, 446 | { 447 | "src": "assets/icons/ios/256.png", 448 | "sizes": "256x256" 449 | }, 450 | { 451 | "src": "assets/icons/ios/512.png", 452 | "sizes": "512x512" 453 | }, 454 | { 455 | "src": "assets/icons/ios/1024.png", 456 | "sizes": "1024x1024" 457 | } 458 | ] 459 | } 460 | -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes recent versions of Safari, Chrome (including 12 | * Opera), Edge on the desktop, and iOS and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/guide/browser-support 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** 22 | * By default, zone.js will patch all possible macroTask and DomEvents 23 | * user can disable parts of macroTask/DomEvents patch by setting following flags 24 | * because those flags need to be set before `zone.js` being loaded, and webpack 25 | * will put import in the top of bundle, so user need to create a separate file 26 | * in this directory (for example: zone-flags.ts), and put the following flags 27 | * into that file, and then add the following code before importing zone.js. 28 | * import './zone-flags'; 29 | * 30 | * The flags allowed in zone-flags.ts are listed here. 31 | * 32 | * The following flags will work for all browsers. 33 | * 34 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 35 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 36 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 37 | * 38 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 39 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 40 | * 41 | * (window as any).__Zone_enable_cross_context_check = true; 42 | * 43 | */ 44 | 45 | /*************************************************************************************************** 46 | * Zone JS is required by default for Angular itself. 47 | */ 48 | import 'zone.js'; // Included with Angular CLI. 49 | 50 | 51 | /*************************************************************************************************** 52 | * APPLICATION IMPORTS 53 | */ 54 | -------------------------------------------------------------------------------- /src/robots.txt: -------------------------------------------------------------------------------- 1 | user-agent: * 2 | -------------------------------------------------------------------------------- /src/styles.less: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | @import "~github-markdown-css/github-markdown-light.css"; 3 | 4 | html, body { 5 | --br-sm: 3px; 6 | --ff-sans: -apple-system,BlinkMacSystemFont,"Segoe UI Adjusted","Segoe UI","Liberation Sans",sans-serif; 7 | --fs-fine: 11px; 8 | --black-800: hsl(210,8%,15%); 9 | --white: hsl(0,0%,100%); 10 | --black-075: hsl(210,8%,90%); 11 | --black-300: hsl(210,8%,65%); 12 | --s-prose-line-height: 1.5; 13 | --highlight-color: var(--black-750); 14 | 15 | .stackoverflow { 16 | kbd { 17 | display: inline-block; 18 | margin: 0 0.1em; 19 | padding: 0.1em 0.6em; 20 | font-family: var(--ff-sans); 21 | font-size: var(--fs-fine); 22 | line-height: var(--s-prose-line-height); 23 | color: var(--black-800); 24 | text-shadow: 0 1px 0 var(--white); 25 | background-color: var(--black-075); 26 | border: 1px solid var(--black-300); 27 | border-radius: var(--br-sm); 28 | box-shadow: 0 1px 1px hsl(210deg 8% 5% / 15%), inset 0 1px 0 0 hsl(0deg 0% 100%); 29 | overflow-wrap: break-word; 30 | white-space: nowrap; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: { 11 | context(path: string, deep?: boolean, filter?: RegExp): { 12 | (id: string): T; 13 | keys(): string[]; 14 | }; 15 | }; 16 | 17 | // First, initialize the Angular testing environment. 18 | getTestBed().initTestEnvironment( 19 | BrowserDynamicTestingModule, 20 | platformBrowserDynamicTesting(), 21 | ); 22 | 23 | // Then we find all the tests. 24 | const context = require.context('./', true, /\.spec\.ts$/); 25 | // And load the modules. 26 | context.keys().map(context); 27 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": [ 9 | "src/main.ts", 10 | "src/polyfills.ts" 11 | ], 12 | "include": [ 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "compileOnSave": false, 4 | "compilerOptions": { 5 | "baseUrl": "./", 6 | "outDir": "./dist/out-tsc", 7 | "forceConsistentCasingInFileNames": true, 8 | "strict": true, 9 | "noImplicitOverride": true, 10 | "noPropertyAccessFromIndexSignature": true, 11 | "noImplicitReturns": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "sourceMap": true, 14 | "declaration": false, 15 | "downlevelIteration": true, 16 | "experimentalDecorators": true, 17 | "moduleResolution": "node", 18 | "importHelpers": true, 19 | "target": "es2017", 20 | "module": "es2020", 21 | "lib": [ 22 | "es2020", 23 | "dom" 24 | ] 25 | }, 26 | "angularCompilerOptions": { 27 | "enableI18nLegacyMessageIdFormat": false, 28 | "strictInjectionParameters": true, 29 | "strictInputAccessModifiers": true, 30 | "strictTemplates": true 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "types": [ 7 | "jasmine" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | --------------------------------------------------------------------------------