├── .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 |
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 |
4 |
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 |
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 |
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 |
--------------------------------------------------------------------------------