├── .github
└── workflows
│ └── release.yml
├── .gitignore
├── HomeAssistant
├── _locales
│ ├── en
│ │ └── messages.json
│ └── zh_CN
│ │ └── messages.json
├── icons
│ ├── 128.png
│ ├── 16.png
│ ├── 32.png
│ ├── 48.png
│ └── homeassistant.svg
├── manifest.json
└── popup
│ ├── ha
│ ├── home-assistant.es.js
│ └── style.css
│ ├── index.js
│ └── popup.html
├── LICENSE
├── README.md
├── package-lock.json
├── package.json
├── privacy-policy.md
├── screenshots
├── 1.png
├── 2.png
└── 3.png
├── src
└── home-assistant.js
└── vite.config.js
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: 发布版本
2 |
3 | on:
4 | release:
5 | types: [published]
6 |
7 | jobs:
8 | publish:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Checkout
12 | uses: actions/checkout@v2
13 |
14 | - name: Setup
15 | uses: actions/setup-node@v2
16 |
17 | - name: Install zip
18 | uses: montudor/action-zip@v1
19 |
20 | - name: Dependencies
21 | run: npm ci
22 |
23 | - name: Build for Edge
24 | run: npm run build
25 |
26 | - name: Zip for Edge
27 | if: startsWith(github.ref, 'refs/tags/')
28 | run: zip -q -r ../home-assistant-edge.zip *
29 | working-directory: HomeAssistant
30 |
31 | - name: Upload assets
32 | if: startsWith(github.ref, 'refs/tags/')
33 | uses: svenstaro/upload-release-action@v2
34 | with:
35 | repo_token: ${{ secrets.GITHUB_TOKEN }}
36 | file: home-assistant-*
37 | tag: ${{ github.ref }}
38 | file_glob: true
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # TypeScript v1 declaration files
45 | typings/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 |
78 | # Next.js build output
79 | .next
80 |
81 | # Nuxt.js build / generate output
82 | .nuxt
83 | dist
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 |
106 | HomeAssistant.zip
--------------------------------------------------------------------------------
/HomeAssistant/_locales/en/messages.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": {
3 | "message": "HomeAssistant",
4 | "description": "extension name"
5 | },
6 | "description": {
7 | "message": "Control my smart device anytime, anywhere",
8 | "description": "extension description"
9 | },
10 | "link_ha": {
11 | "message": "Connect to your homeassistant",
12 | "description": "text"
13 | },
14 | "error_tips": {
15 | "message": "not homeassistant page",
16 | "description": "text"
17 | },
18 | "add": {
19 | "message": "add",
20 | "description": "text"
21 | },
22 | "cancel": {
23 | "message": "cancel",
24 | "description": "text"
25 | },
26 | "delete": {
27 | "message": "delete",
28 | "description": "text"
29 | }
30 | }
--------------------------------------------------------------------------------
/HomeAssistant/_locales/zh_CN/messages.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": {
3 | "message": "家庭助理",
4 | "description": "扩展名称"
5 | },
6 | "description": {
7 | "message": "随时随地控制我的智能设备",
8 | "description": "扩展描述"
9 | },
10 | "link_ha": {
11 | "message": "连接到你的HomeAssistant",
12 | "description": "文本"
13 | },
14 | "error_tips": {
15 | "message": "当前不是HomeAssistant页面",
16 | "description": "文本"
17 | },
18 | "add": {
19 | "message": "添加",
20 | "description": "文本"
21 | },
22 | "cancel": {
23 | "message": "取消",
24 | "description": "文本"
25 | },
26 | "delete": {
27 | "message": "删除",
28 | "description": "文本"
29 | }
30 | }
--------------------------------------------------------------------------------
/HomeAssistant/icons/128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shaonianzhentan/ha-extension/4c9d9b70230f7d64db9a87780d262a9e45f68258/HomeAssistant/icons/128.png
--------------------------------------------------------------------------------
/HomeAssistant/icons/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shaonianzhentan/ha-extension/4c9d9b70230f7d64db9a87780d262a9e45f68258/HomeAssistant/icons/16.png
--------------------------------------------------------------------------------
/HomeAssistant/icons/32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shaonianzhentan/ha-extension/4c9d9b70230f7d64db9a87780d262a9e45f68258/HomeAssistant/icons/32.png
--------------------------------------------------------------------------------
/HomeAssistant/icons/48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shaonianzhentan/ha-extension/4c9d9b70230f7d64db9a87780d262a9e45f68258/HomeAssistant/icons/48.png
--------------------------------------------------------------------------------
/HomeAssistant/icons/homeassistant.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/HomeAssistant/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "HomeAssistant",
3 | "version": "0.0.0.3",
4 | "default_locale": "zh_CN",
5 | "manifest_version": 3,
6 | "description": "__MSG_description__",
7 | "author": "shaonianzhentan",
8 | "homepage_url": "https://github.com/shaonianzhentan/ha-extension",
9 | "icons": {
10 | "16": "icons/16.png",
11 | "32": "icons/32.png",
12 | "48": "icons/48.png",
13 | "128": "icons/128.png"
14 | },
15 | "action": {
16 | "default_icon": "icons/48.png",
17 | "default_title": "__MSG_title__",
18 | "default_popup": "popup/popup.html"
19 | },
20 | "commands": {
21 | "_execute_action": {
22 | "suggested_key": {
23 | "default": "Alt+H"
24 | },
25 | "description": "HomeAssistant"
26 | }
27 | },
28 | "permissions": [
29 | "scripting",
30 | "activeTab"
31 | ]
32 | }
--------------------------------------------------------------------------------
/HomeAssistant/popup/index.js:
--------------------------------------------------------------------------------
1 | window.onload = ()=>{
2 | const ha = document.createElement('home-assistant')
3 | ha.logo = '../icons/homeassistant.svg'
4 | document.body.appendChild(ha)
5 | }
--------------------------------------------------------------------------------
/HomeAssistant/popup/popup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | HomeAssistant
7 |
8 |
9 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 shaonianzhentan
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # HomeAssistant浏览器扩展
2 |
3 | [](https://microsoftedge.microsoft.com/addons/detail/hbagofhaigojgcjmonkaljffiebdkkdn)
4 |
5 | 
6 | [](https://microsoftedge.microsoft.com/addons/detail/hbagofhaigojgcjmonkaljffiebdkkdn)
7 | [](https://microsoftedge.microsoft.com/addons/detail/hbagofhaigojgcjmonkaljffiebdkkdn)
8 |
9 | ## 使用方式
10 | 1. 打开你的`HomeAssistant页面`,登录并保存状态
11 | 2. 点击扩展图标(也可使用`Alt+H`快捷键)显示小窗口
12 | 3. 初次使用点击添加,会自动将当前`HomeAssistant页面`显示到扩展之中
13 | 4. 之后在任何页面,都可以打开扩展显示`HomeAssistant页面`
14 | 5. 点击扩展界面右下解绿色菜单按钮,可对添加的`HomeAssistant页面`进行操作选择
15 | 6. 在菜单面板中点击蓝色标题在当前小窗口打开,橙色链接则打开新页面
16 |
17 |
18 | 在配置文件`configuration.yaml`中添加以下节点才能嵌套使用
19 | ```yaml
20 | http:
21 | use_x_frame_options: false
22 | ```
23 |
24 |
25 | ## 截图
26 | 
27 | 
28 | 
29 |
30 | ## 灵感来源
31 |
32 | - [https://github.com/warwickofthegh/Browser-Extension-Home-Assistant-Quick-Restart](https://github.com/warwickofthegh/Browser-Extension-Home-Assistant-Quick-Restart)
33 | - [https://github.com/bokub/home-assistant-extension](https://github.com/bokub/home-assistant-extension)
34 |
35 | ## 如果这个项目对你有帮助,请我喝杯咖啡奶茶吧😘
36 | | |支付宝|微信|
37 | |---|---|---|
38 | 奶茶= |
|
39 |
40 | #### 关注我的微信订阅号,了解更多HomeAssistant相关知识
41 |
42 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "home-assistant",
3 | "version": "0.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@lit/reactive-element": {
8 | "version": "1.3.2",
9 | "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.2.tgz",
10 | "integrity": "sha512-A2e18XzPMrIh35nhIdE4uoqRzoIpEU5vZYuQN4S3Ee1zkGdYC27DP12pewbw/RLgPHzaE4kx/YqxMzebOpm0dA=="
11 | },
12 | "@material/animation": {
13 | "version": "14.0.0-canary.261f2db59.0",
14 | "resolved": "https://registry.npmjs.org/@material/animation/-/animation-14.0.0-canary.261f2db59.0.tgz",
15 | "integrity": "sha512-OjxWJYSRNs4vnPe8NclaNn+TsNc8TR/wHusGtezF5F+wl+5mh+K69BMXAmURtq3idoRg4XaOSC/Ohk1ovD1fMQ==",
16 | "requires": {
17 | "tslib": "^2.1.0"
18 | }
19 | },
20 | "@material/base": {
21 | "version": "14.0.0-canary.261f2db59.0",
22 | "resolved": "https://registry.npmjs.org/@material/base/-/base-14.0.0-canary.261f2db59.0.tgz",
23 | "integrity": "sha512-vy5SQt+jcwwdRFfBvtpVdpULUBujecVUKOXcopaQoi2XIzI5EBHuR4gPN0cd1yfmVEucD6p2fvVv2FJ3Ngr61w==",
24 | "requires": {
25 | "tslib": "^2.1.0"
26 | }
27 | },
28 | "@material/button": {
29 | "version": "14.0.0-canary.261f2db59.0",
30 | "resolved": "https://registry.npmjs.org/@material/button/-/button-14.0.0-canary.261f2db59.0.tgz",
31 | "integrity": "sha512-DB0MAvdIGWKuFwlQ57hjv7ZuHIioT2mnG7RWtL7ZoCWoY45nCrsbJirmX5zZFipm9gIOJ3YnIkIrUyMVSrDX+g==",
32 | "requires": {
33 | "@material/density": "14.0.0-canary.261f2db59.0",
34 | "@material/dom": "14.0.0-canary.261f2db59.0",
35 | "@material/elevation": "14.0.0-canary.261f2db59.0",
36 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
37 | "@material/ripple": "14.0.0-canary.261f2db59.0",
38 | "@material/rtl": "14.0.0-canary.261f2db59.0",
39 | "@material/shape": "14.0.0-canary.261f2db59.0",
40 | "@material/theme": "14.0.0-canary.261f2db59.0",
41 | "@material/tokens": "14.0.0-canary.261f2db59.0",
42 | "@material/touch-target": "14.0.0-canary.261f2db59.0",
43 | "@material/typography": "14.0.0-canary.261f2db59.0",
44 | "tslib": "^2.1.0"
45 | }
46 | },
47 | "@material/density": {
48 | "version": "14.0.0-canary.261f2db59.0",
49 | "resolved": "https://registry.npmjs.org/@material/density/-/density-14.0.0-canary.261f2db59.0.tgz",
50 | "integrity": "sha512-zOR5wISqPVr8KS/ERNC1jdRV9O832lzclyS9Ea20rDrWfuOiYsQ9bbIk12xWlxpgsn7r9fxQJyd1O2SURoHdRA==",
51 | "requires": {
52 | "tslib": "^2.1.0"
53 | }
54 | },
55 | "@material/dom": {
56 | "version": "14.0.0-canary.261f2db59.0",
57 | "resolved": "https://registry.npmjs.org/@material/dom/-/dom-14.0.0-canary.261f2db59.0.tgz",
58 | "integrity": "sha512-iUpZG6Bb2l/PfNV2Fb/pXfG1p4Bz4PC9A7ATPlKfcU5HioObcnYVc/+Hrtaw8eu28BNIc+VVROtbfpqG/YgKSQ==",
59 | "requires": {
60 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
61 | "tslib": "^2.1.0"
62 | }
63 | },
64 | "@material/elevation": {
65 | "version": "14.0.0-canary.261f2db59.0",
66 | "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0-canary.261f2db59.0.tgz",
67 | "integrity": "sha512-AqN/tsTGGyBzZ7CtoSMBY9bDYvCuUt98EUfiGjZGXcf4HgoHV3Cn/JSLrhru5Cq8Nx6HF6AmHh3dQCfNCQduew==",
68 | "requires": {
69 | "@material/animation": "14.0.0-canary.261f2db59.0",
70 | "@material/base": "14.0.0-canary.261f2db59.0",
71 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
72 | "@material/rtl": "14.0.0-canary.261f2db59.0",
73 | "@material/theme": "14.0.0-canary.261f2db59.0",
74 | "tslib": "^2.1.0"
75 | }
76 | },
77 | "@material/feature-targeting": {
78 | "version": "14.0.0-canary.261f2db59.0",
79 | "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0-canary.261f2db59.0.tgz",
80 | "integrity": "sha512-CrVoGNu0ym52OPEKy3kgeNL2oSWOCBYbYxSH3GhERxCq5FwGBN+XmK/ZDLFVQlHYy3v8x4TqVEwXviCeumNTxQ==",
81 | "requires": {
82 | "tslib": "^2.1.0"
83 | }
84 | },
85 | "@material/icon-button": {
86 | "version": "14.0.0-canary.261f2db59.0",
87 | "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-14.0.0-canary.261f2db59.0.tgz",
88 | "integrity": "sha512-9P6cjRqKtjE6ML+r5yz0ExU/f2KLdNabHQxmO6RpKd/FnjTyP1NcWqqj8dsvo/DZ7mOtT1MIThgkQDdiMqcYLg==",
89 | "requires": {
90 | "@material/base": "14.0.0-canary.261f2db59.0",
91 | "@material/density": "14.0.0-canary.261f2db59.0",
92 | "@material/elevation": "14.0.0-canary.261f2db59.0",
93 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
94 | "@material/ripple": "14.0.0-canary.261f2db59.0",
95 | "@material/rtl": "14.0.0-canary.261f2db59.0",
96 | "@material/theme": "14.0.0-canary.261f2db59.0",
97 | "@material/touch-target": "14.0.0-canary.261f2db59.0",
98 | "tslib": "^2.1.0"
99 | }
100 | },
101 | "@material/list": {
102 | "version": "14.0.0-canary.261f2db59.0",
103 | "resolved": "https://registry.npmjs.org/@material/list/-/list-14.0.0-canary.261f2db59.0.tgz",
104 | "integrity": "sha512-bjHXXk2ZeWxAFs4cJxy5J5A5ClUd3FGjRv/LwCYpsh7Dm7e8kSe8Lw2MWb6FXyF3mDJM6xqN3xXQWOh6UEu5wA==",
105 | "requires": {
106 | "@material/base": "14.0.0-canary.261f2db59.0",
107 | "@material/density": "14.0.0-canary.261f2db59.0",
108 | "@material/dom": "14.0.0-canary.261f2db59.0",
109 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
110 | "@material/ripple": "14.0.0-canary.261f2db59.0",
111 | "@material/rtl": "14.0.0-canary.261f2db59.0",
112 | "@material/shape": "14.0.0-canary.261f2db59.0",
113 | "@material/theme": "14.0.0-canary.261f2db59.0",
114 | "@material/typography": "14.0.0-canary.261f2db59.0",
115 | "tslib": "^2.1.0"
116 | }
117 | },
118 | "@material/menu": {
119 | "version": "14.0.0-canary.261f2db59.0",
120 | "resolved": "https://registry.npmjs.org/@material/menu/-/menu-14.0.0-canary.261f2db59.0.tgz",
121 | "integrity": "sha512-x59UHoTLvEsPKjFdffrKTgEyc0T4W3m58RsizAmapXr59Uthq8+PTFOkAv9R1PV/ZCzxay7Vx+QcekC4qOr40A==",
122 | "requires": {
123 | "@material/base": "14.0.0-canary.261f2db59.0",
124 | "@material/dom": "14.0.0-canary.261f2db59.0",
125 | "@material/elevation": "14.0.0-canary.261f2db59.0",
126 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
127 | "@material/list": "14.0.0-canary.261f2db59.0",
128 | "@material/menu-surface": "14.0.0-canary.261f2db59.0",
129 | "@material/ripple": "14.0.0-canary.261f2db59.0",
130 | "@material/rtl": "14.0.0-canary.261f2db59.0",
131 | "@material/theme": "14.0.0-canary.261f2db59.0",
132 | "tslib": "^2.1.0"
133 | }
134 | },
135 | "@material/menu-surface": {
136 | "version": "14.0.0-canary.261f2db59.0",
137 | "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-14.0.0-canary.261f2db59.0.tgz",
138 | "integrity": "sha512-zv/fv/W3zdSb+c/p6GNcOqA3+wAc/r8MOtV53WJPLlvZZSpGoTwHUp+GPiNeovfbsTSxN95XOXuVQBEfKEb8vA==",
139 | "requires": {
140 | "@material/animation": "14.0.0-canary.261f2db59.0",
141 | "@material/base": "14.0.0-canary.261f2db59.0",
142 | "@material/elevation": "14.0.0-canary.261f2db59.0",
143 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
144 | "@material/rtl": "14.0.0-canary.261f2db59.0",
145 | "@material/shape": "14.0.0-canary.261f2db59.0",
146 | "@material/theme": "14.0.0-canary.261f2db59.0",
147 | "tslib": "^2.1.0"
148 | }
149 | },
150 | "@material/mwc-base": {
151 | "version": "0.25.3",
152 | "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.25.3.tgz",
153 | "integrity": "sha512-4wvxZ9dhPr0O4jjOHPmFyn77pafe+h1gHPlT9sbQ+ly8NY/fSn/TXn7/PbxgL8g4ZHxMvD3o7PJopg+6cbHp8Q==",
154 | "requires": {
155 | "@lit/reactive-element": "1.0.0-rc.4",
156 | "@material/base": "=14.0.0-canary.261f2db59.0",
157 | "@material/dom": "=14.0.0-canary.261f2db59.0",
158 | "lit": "^2.0.0",
159 | "tslib": "^2.0.1"
160 | },
161 | "dependencies": {
162 | "@lit/reactive-element": {
163 | "version": "1.0.0-rc.4",
164 | "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.0.0-rc.4.tgz",
165 | "integrity": "sha512-dJMha+4NFYdpnUJzRrWTFV5Hdp9QHWFuPnaoqonrKl4lGJVnYez9mu8ev9F/5KM47tjAjh22DuRHrdFDHfOijA=="
166 | }
167 | }
168 | },
169 | "@material/mwc-button": {
170 | "version": "0.25.3",
171 | "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.25.3.tgz",
172 | "integrity": "sha512-usHEKchj9hqetY7n0yebTz1Pk9Z+9W/sNZheFoSaiWQCv9XhtCdKkHH0MXTv8SpwxWuEKUf/XjtyvikGIcIn7w==",
173 | "requires": {
174 | "@material/mwc-icon": "^0.25.3",
175 | "@material/mwc-ripple": "^0.25.3",
176 | "lit": "^2.0.0",
177 | "tslib": "^2.0.1"
178 | }
179 | },
180 | "@material/mwc-checkbox": {
181 | "version": "0.25.3",
182 | "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.25.3.tgz",
183 | "integrity": "sha512-PSh9IAgQK4XiDzBwgclheejkA4cbZ3K9V1JTTl/YVRDD/OLLM+Bh8tbnAg/1kGVlPWOUfDrYCcZ0gg472ca7gw==",
184 | "requires": {
185 | "@material/mwc-base": "^0.25.3",
186 | "@material/mwc-ripple": "^0.25.3",
187 | "lit": "^2.0.0",
188 | "tslib": "^2.0.1"
189 | }
190 | },
191 | "@material/mwc-fab": {
192 | "version": "0.25.3",
193 | "resolved": "https://registry.npmjs.org/@material/mwc-fab/-/mwc-fab-0.25.3.tgz",
194 | "integrity": "sha512-XE1BQNKAEear+Uq58s+DjZe6yw7kiiQofdayXjbKVRf5VS4Kdd0PDfb8sIYyRbwszknVB9jmisk9LQjHTfzs7w==",
195 | "requires": {
196 | "@material/mwc-ripple": "^0.25.3",
197 | "lit": "^2.0.0",
198 | "tslib": "^2.0.1"
199 | }
200 | },
201 | "@material/mwc-icon": {
202 | "version": "0.25.3",
203 | "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.25.3.tgz",
204 | "integrity": "sha512-36076AWZIRSr8qYOLjuDDkxej/HA0XAosrj7TS1ZeLlUBnLUtbDtvc1S7KSa0hqez7ouzOqGaWK24yoNnTa2OA==",
205 | "requires": {
206 | "lit": "^2.0.0",
207 | "tslib": "^2.0.1"
208 | }
209 | },
210 | "@material/mwc-icon-button": {
211 | "version": "0.25.3",
212 | "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.25.3.tgz",
213 | "integrity": "sha512-FexkMpK3ZSHh7NF+PIqvVhvAbBOgFDYPck/lqnxIDC3VGJ0rjD/1MqevDy2fY6IcHGlc8Ai7VuYbdQ6Cvw8WcQ==",
214 | "requires": {
215 | "@material/mwc-ripple": "^0.25.3",
216 | "lit": "^2.0.0",
217 | "tslib": "^2.0.1"
218 | }
219 | },
220 | "@material/mwc-list": {
221 | "version": "0.25.3",
222 | "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.25.3.tgz",
223 | "integrity": "sha512-2T297qVaQsKv+QDNP2ag9g04RLKO1tm2F6BwwqvdbXTsY+LKYOJe2/aSe0kX2tQLayX4ydy2RnTevo9Ld+c+4g==",
224 | "requires": {
225 | "@material/base": "=14.0.0-canary.261f2db59.0",
226 | "@material/dom": "=14.0.0-canary.261f2db59.0",
227 | "@material/list": "=14.0.0-canary.261f2db59.0",
228 | "@material/mwc-base": "^0.25.3",
229 | "@material/mwc-checkbox": "^0.25.3",
230 | "@material/mwc-radio": "^0.25.3",
231 | "@material/mwc-ripple": "^0.25.3",
232 | "lit": "^2.0.0",
233 | "tslib": "^2.0.1"
234 | }
235 | },
236 | "@material/mwc-menu": {
237 | "version": "0.25.3",
238 | "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.25.3.tgz",
239 | "integrity": "sha512-jr5R61BfqrJC0lsAI63y4BsEM2eY3n6kiCy2ZnwinmxrfFrS709T/zuSUUW/xG9b9inSku4WjjSkDhPzQrmS3g==",
240 | "requires": {
241 | "@material/menu": "=14.0.0-canary.261f2db59.0",
242 | "@material/menu-surface": "=14.0.0-canary.261f2db59.0",
243 | "@material/mwc-base": "^0.25.3",
244 | "@material/mwc-list": "^0.25.3",
245 | "@material/shape": "=14.0.0-canary.261f2db59.0",
246 | "@material/theme": "=14.0.0-canary.261f2db59.0",
247 | "lit": "^2.0.0",
248 | "tslib": "^2.0.1"
249 | }
250 | },
251 | "@material/mwc-radio": {
252 | "version": "0.25.3",
253 | "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.25.3.tgz",
254 | "integrity": "sha512-SXpVDrsQnz7+2w/kfBxcOJ4P+uJ0RxBd9mCLE7wVyN53gDLkNHqA0npdl2PNpRaaMavVrt27L8wWo5QIT+7zWA==",
255 | "requires": {
256 | "@material/mwc-base": "^0.25.3",
257 | "@material/mwc-ripple": "^0.25.3",
258 | "@material/radio": "=14.0.0-canary.261f2db59.0",
259 | "lit": "^2.0.0",
260 | "tslib": "^2.0.1"
261 | }
262 | },
263 | "@material/mwc-ripple": {
264 | "version": "0.25.3",
265 | "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.25.3.tgz",
266 | "integrity": "sha512-G/gt/csxgME6/sAku3GiuB0O2LLvoPWsRTLq/9iABpaGLJjqaKHvNg/IVzNDdF3YZT7EORgR9cBWWl7umA4i4Q==",
267 | "requires": {
268 | "@material/dom": "=14.0.0-canary.261f2db59.0",
269 | "@material/mwc-base": "^0.25.3",
270 | "@material/ripple": "=14.0.0-canary.261f2db59.0",
271 | "lit": "^2.0.0",
272 | "tslib": "^2.0.1"
273 | }
274 | },
275 | "@material/mwc-snackbar": {
276 | "version": "0.25.3",
277 | "resolved": "https://registry.npmjs.org/@material/mwc-snackbar/-/mwc-snackbar-0.25.3.tgz",
278 | "integrity": "sha512-DJyWQl1rksv502qLQta81YQ3q3iy0GlVQcXZq88nBG9o64070qZW92rfZmiQ63MRwGbdNmrUFZ3QBoClY1JpFg==",
279 | "requires": {
280 | "@material/mwc-base": "^0.25.3",
281 | "@material/snackbar": "=14.0.0-canary.261f2db59.0",
282 | "lit": "^2.0.0",
283 | "tslib": "^2.0.1"
284 | }
285 | },
286 | "@material/radio": {
287 | "version": "14.0.0-canary.261f2db59.0",
288 | "resolved": "https://registry.npmjs.org/@material/radio/-/radio-14.0.0-canary.261f2db59.0.tgz",
289 | "integrity": "sha512-AvrsOqhP8UZ5d58RWgaTmQVlWQRULwk2BXhsEhtxz56CmTsyVM49thNbaNnc/TzuY9Ssxv/L2wYVbR2B3BX9Yw==",
290 | "requires": {
291 | "@material/animation": "14.0.0-canary.261f2db59.0",
292 | "@material/base": "14.0.0-canary.261f2db59.0",
293 | "@material/density": "14.0.0-canary.261f2db59.0",
294 | "@material/dom": "14.0.0-canary.261f2db59.0",
295 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
296 | "@material/ripple": "14.0.0-canary.261f2db59.0",
297 | "@material/theme": "14.0.0-canary.261f2db59.0",
298 | "@material/touch-target": "14.0.0-canary.261f2db59.0",
299 | "tslib": "^2.1.0"
300 | }
301 | },
302 | "@material/ripple": {
303 | "version": "14.0.0-canary.261f2db59.0",
304 | "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0-canary.261f2db59.0.tgz",
305 | "integrity": "sha512-3FLCLj8X7KrFfuYBHJg1b7Odb3V/AW7fxk3m1i1zhDnygKmlQ/abVucH1s2qbX3Y+JIiq+5/C5407h9BFtOf+A==",
306 | "requires": {
307 | "@material/animation": "14.0.0-canary.261f2db59.0",
308 | "@material/base": "14.0.0-canary.261f2db59.0",
309 | "@material/dom": "14.0.0-canary.261f2db59.0",
310 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
311 | "@material/rtl": "14.0.0-canary.261f2db59.0",
312 | "@material/theme": "14.0.0-canary.261f2db59.0",
313 | "tslib": "^2.1.0"
314 | }
315 | },
316 | "@material/rtl": {
317 | "version": "14.0.0-canary.261f2db59.0",
318 | "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0-canary.261f2db59.0.tgz",
319 | "integrity": "sha512-bVnXBbUsHs57+EXdeFbcwaKy3lT/itI/qTLmJ88ar0qaGEujO1GmESHm3ioqkeo4kQpTfDhBwQGeEi1aDaTdFg==",
320 | "requires": {
321 | "@material/theme": "14.0.0-canary.261f2db59.0",
322 | "tslib": "^2.1.0"
323 | }
324 | },
325 | "@material/shape": {
326 | "version": "14.0.0-canary.261f2db59.0",
327 | "resolved": "https://registry.npmjs.org/@material/shape/-/shape-14.0.0-canary.261f2db59.0.tgz",
328 | "integrity": "sha512-VjcQltd1uF9ugvLExMy00SMISjy/370o8lsZlb1T+xHyhXHL3UxeuWYLW5Amq6mbx65+c9Df9WmlXXOdebpEkw==",
329 | "requires": {
330 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
331 | "@material/rtl": "14.0.0-canary.261f2db59.0",
332 | "@material/theme": "14.0.0-canary.261f2db59.0",
333 | "tslib": "^2.1.0"
334 | }
335 | },
336 | "@material/snackbar": {
337 | "version": "14.0.0-canary.261f2db59.0",
338 | "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-14.0.0-canary.261f2db59.0.tgz",
339 | "integrity": "sha512-RLxO0dWBmhU+3y/PCYN0oiQUvzw8cdeFLmiUN9BPn2unwmTPp5nUdaTde7TQ93vRNidyPtDnkEFnflunDCk2Ew==",
340 | "requires": {
341 | "@material/animation": "14.0.0-canary.261f2db59.0",
342 | "@material/base": "14.0.0-canary.261f2db59.0",
343 | "@material/button": "14.0.0-canary.261f2db59.0",
344 | "@material/dom": "14.0.0-canary.261f2db59.0",
345 | "@material/elevation": "14.0.0-canary.261f2db59.0",
346 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
347 | "@material/icon-button": "14.0.0-canary.261f2db59.0",
348 | "@material/ripple": "14.0.0-canary.261f2db59.0",
349 | "@material/rtl": "14.0.0-canary.261f2db59.0",
350 | "@material/shape": "14.0.0-canary.261f2db59.0",
351 | "@material/theme": "14.0.0-canary.261f2db59.0",
352 | "@material/typography": "14.0.0-canary.261f2db59.0",
353 | "tslib": "^2.1.0"
354 | }
355 | },
356 | "@material/theme": {
357 | "version": "14.0.0-canary.261f2db59.0",
358 | "resolved": "https://registry.npmjs.org/@material/theme/-/theme-14.0.0-canary.261f2db59.0.tgz",
359 | "integrity": "sha512-bUqyFT0QF8Nxx02fekt3CXIfC9DEPOPdo2hjgdtvhrNP+vftbkI2tKZ5/uRUnVA+zqQAOyIl5z6FOMg4fyemCA==",
360 | "requires": {
361 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
362 | "tslib": "^2.1.0"
363 | }
364 | },
365 | "@material/tokens": {
366 | "version": "14.0.0-canary.261f2db59.0",
367 | "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-14.0.0-canary.261f2db59.0.tgz",
368 | "integrity": "sha512-mgar9gsLv00HTvXIDvNR1vEEXpfKgeWhVTO8a7aWofSNyENNOVc5ImJwBgCAMb5SgLHBi6w8/c1tPzjOewBfCA==",
369 | "requires": {
370 | "@material/elevation": "14.0.0-canary.261f2db59.0"
371 | }
372 | },
373 | "@material/touch-target": {
374 | "version": "14.0.0-canary.261f2db59.0",
375 | "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0-canary.261f2db59.0.tgz",
376 | "integrity": "sha512-xA6TTHN7aOTXg/+c6mQJlogzTD+Sp8WPC5TK8RBXbQxEykGXGW15p+H9pG+rX/gzD5iehnHRBrDUFmAGoskhcQ==",
377 | "requires": {
378 | "@material/base": "14.0.0-canary.261f2db59.0",
379 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
380 | "@material/rtl": "14.0.0-canary.261f2db59.0",
381 | "tslib": "^2.1.0"
382 | }
383 | },
384 | "@material/typography": {
385 | "version": "14.0.0-canary.261f2db59.0",
386 | "resolved": "https://registry.npmjs.org/@material/typography/-/typography-14.0.0-canary.261f2db59.0.tgz",
387 | "integrity": "sha512-WOCdcNkD5KBRAwICcRqWBRG3cDkyrwK5USTNmG0oxnwnZAN7daOpPTdLppVAhadE7faj8d67ON+V9pH7+T62FQ==",
388 | "requires": {
389 | "@material/feature-targeting": "14.0.0-canary.261f2db59.0",
390 | "@material/theme": "14.0.0-canary.261f2db59.0",
391 | "tslib": "^2.1.0"
392 | }
393 | },
394 | "@types/trusted-types": {
395 | "version": "2.0.2",
396 | "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz",
397 | "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg=="
398 | },
399 | "esbuild": {
400 | "version": "0.14.44",
401 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.44.tgz",
402 | "integrity": "sha512-Rn+lRRfj60r/3svI6NgAVnetzp3vMOj17BThuhshSj/gS1LR03xrjkDYyfPmrYG/0c3D68rC6FNYMQ3yRbiXeQ==",
403 | "dev": true,
404 | "requires": {
405 | "esbuild-android-64": "0.14.44",
406 | "esbuild-android-arm64": "0.14.44",
407 | "esbuild-darwin-64": "0.14.44",
408 | "esbuild-darwin-arm64": "0.14.44",
409 | "esbuild-freebsd-64": "0.14.44",
410 | "esbuild-freebsd-arm64": "0.14.44",
411 | "esbuild-linux-32": "0.14.44",
412 | "esbuild-linux-64": "0.14.44",
413 | "esbuild-linux-arm": "0.14.44",
414 | "esbuild-linux-arm64": "0.14.44",
415 | "esbuild-linux-mips64le": "0.14.44",
416 | "esbuild-linux-ppc64le": "0.14.44",
417 | "esbuild-linux-riscv64": "0.14.44",
418 | "esbuild-linux-s390x": "0.14.44",
419 | "esbuild-netbsd-64": "0.14.44",
420 | "esbuild-openbsd-64": "0.14.44",
421 | "esbuild-sunos-64": "0.14.44",
422 | "esbuild-windows-32": "0.14.44",
423 | "esbuild-windows-64": "0.14.44",
424 | "esbuild-windows-arm64": "0.14.44"
425 | }
426 | },
427 | "esbuild-android-64": {
428 | "version": "0.14.44",
429 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.44.tgz",
430 | "integrity": "sha512-dFPHBXmx385zuJULAD/Cmq/LyPRXiAWbf9ylZtY0wJ8iVyWfKYaCYxeJx8OAZUuj46ZwNa7MzW2GBAQLOeiemg==",
431 | "dev": true,
432 | "optional": true
433 | },
434 | "esbuild-android-arm64": {
435 | "version": "0.14.44",
436 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.44.tgz",
437 | "integrity": "sha512-qqaqqyxHXjZ/0ddKU3I3Nb7lAvVM69ELMhb8+91FyomAUmQPlHtxe+TTiWxXGHE72XEzcgTEGq4VauqLNkN22g==",
438 | "dev": true,
439 | "optional": true
440 | },
441 | "esbuild-darwin-64": {
442 | "version": "0.14.44",
443 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.44.tgz",
444 | "integrity": "sha512-RBmtGKGY06+AW6IOJ1LE/dEeF7HH34C1/Ces9FSitU4bIbIpL4KEuQpTFoxwb4ry5s2hyw7vbPhhtyOd18FH9g==",
445 | "dev": true,
446 | "optional": true
447 | },
448 | "esbuild-darwin-arm64": {
449 | "version": "0.14.44",
450 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.44.tgz",
451 | "integrity": "sha512-Bmhx5Cfo4Hdb7WyyyDupTB8HPmnFZ8baLfPlzLdYvF6OzsIbV+CY+m/AWf0OQvY40BlkzCLJ/7Lfwbb71Tngmg==",
452 | "dev": true,
453 | "optional": true
454 | },
455 | "esbuild-freebsd-64": {
456 | "version": "0.14.44",
457 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.44.tgz",
458 | "integrity": "sha512-O4HpWa5ZgxbNPQTF7URicLzYa+TidGlmGT/RAC3GjbGEQQYkd0R1Slyh69Yrmb2qmcOcPAgWHbNo1UhK4WmZ4w==",
459 | "dev": true,
460 | "optional": true
461 | },
462 | "esbuild-freebsd-arm64": {
463 | "version": "0.14.44",
464 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.44.tgz",
465 | "integrity": "sha512-f0/jkAKccnDY7mg1F9l/AMzEm+VXWXK6c3IrOEmd13jyKfpTZKTIlt+yI04THPDCDZTzXHTRUBLozqp+m8Mg5Q==",
466 | "dev": true,
467 | "optional": true
468 | },
469 | "esbuild-linux-32": {
470 | "version": "0.14.44",
471 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.44.tgz",
472 | "integrity": "sha512-WSIhzLldMR7YUoEL7Ix319tC+NFmW9Pu7NgFWxUfOXeWsT0Wg484hm6bNgs7+oY2pGzg715y/Wrqi1uNOMmZJw==",
473 | "dev": true,
474 | "optional": true
475 | },
476 | "esbuild-linux-64": {
477 | "version": "0.14.44",
478 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.44.tgz",
479 | "integrity": "sha512-zgscTrCMcRZRIsVugqBTP/B5lPLNchBlWjQ8sQq2Epnv+UDtYKgXEq1ctWAmibZNy2E9QRCItKMeIEqeTUT5kA==",
480 | "dev": true,
481 | "optional": true
482 | },
483 | "esbuild-linux-arm": {
484 | "version": "0.14.44",
485 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.44.tgz",
486 | "integrity": "sha512-laPBPwGfsbBxGw6F6jnqic2CPXLyC1bPrmnSOeJ9oEnx1rcKkizd4HWCRUc0xv+l4z/USRfx/sEfYlWSLeqoJQ==",
487 | "dev": true,
488 | "optional": true
489 | },
490 | "esbuild-linux-arm64": {
491 | "version": "0.14.44",
492 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.44.tgz",
493 | "integrity": "sha512-H0H/2/wgiScTwBve/JR8/o+Zhabx5KPk8T2mkYZFKQGl1hpUgC+AOmRyqy/Js3p66Wim4F4Akv3I3sJA1sKg0w==",
494 | "dev": true,
495 | "optional": true
496 | },
497 | "esbuild-linux-mips64le": {
498 | "version": "0.14.44",
499 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.44.tgz",
500 | "integrity": "sha512-ri3Okw0aleYy7o5n9zlIq+FCtq3tcMlctN6X1H1ucILjBJuH8pan2trJPKWeb8ppntFvE28I9eEXhwkWh6wYKg==",
501 | "dev": true,
502 | "optional": true
503 | },
504 | "esbuild-linux-ppc64le": {
505 | "version": "0.14.44",
506 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.44.tgz",
507 | "integrity": "sha512-96TqL/MvFRuIVXz+GtCIXzRQ43ZwEk4XTn0RWUNJduXXMDQ/V1iOV28U6x6Oe3NesK4xkoKSaK2+F3VHcU8ZrA==",
508 | "dev": true,
509 | "optional": true
510 | },
511 | "esbuild-linux-riscv64": {
512 | "version": "0.14.44",
513 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.44.tgz",
514 | "integrity": "sha512-rrK9qEp2M8dhilsPn4T9gxUsAumkITc1kqYbpyNMr9EWo+J5ZBj04n3GYldULrcCw4ZCHAJ+qPjqr8b6kG2inA==",
515 | "dev": true,
516 | "optional": true
517 | },
518 | "esbuild-linux-s390x": {
519 | "version": "0.14.44",
520 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.44.tgz",
521 | "integrity": "sha512-2YmTm9BrW5aUwBSe8wIEARd9EcnOQmkHp4+IVaO09Ez/C5T866x+ABzhG0bwx0b+QRo9q97CRMaQx2Ngb6/hfw==",
522 | "dev": true,
523 | "optional": true
524 | },
525 | "esbuild-netbsd-64": {
526 | "version": "0.14.44",
527 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.44.tgz",
528 | "integrity": "sha512-zypdzPmZTCqYS30WHxbcvtC0E6e/ECvl4WueUdbdWhs2dfWJt5RtCBME664EpTznixR3lSN1MQ2NhwQF8MQryw==",
529 | "dev": true,
530 | "optional": true
531 | },
532 | "esbuild-openbsd-64": {
533 | "version": "0.14.44",
534 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.44.tgz",
535 | "integrity": "sha512-8J43ab9ByYl7KteC03HGQjr2HY1ge7sN04lFnwMFWYk2NCn8IuaeeThvLeNjzOYhyT3I6K8puJP0uVXUu+D1xw==",
536 | "dev": true,
537 | "optional": true
538 | },
539 | "esbuild-sunos-64": {
540 | "version": "0.14.44",
541 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.44.tgz",
542 | "integrity": "sha512-OH1/09CGUJwffA+HNM6mqPkSIyHVC3ZnURU/4CCIx7IqWUBn1Sh1HRLQC8/TWNgcs0/1u7ygnc2pgf/AHZJ/Ow==",
543 | "dev": true,
544 | "optional": true
545 | },
546 | "esbuild-windows-32": {
547 | "version": "0.14.44",
548 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.44.tgz",
549 | "integrity": "sha512-mCAOL9/rRqwfOfxTu2sjq/eAIs7eAXGiU6sPBnowggI7QS953Iq6o3/uDu010LwfN7zr18c/lEj6/PTwwTB3AA==",
550 | "dev": true,
551 | "optional": true
552 | },
553 | "esbuild-windows-64": {
554 | "version": "0.14.44",
555 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.44.tgz",
556 | "integrity": "sha512-AG6BH3+YG0s2Q/IfB1cm68FdyFnoE1P+GFbmgFO3tA4UIP8+BKsmKGGZ5I3+ZjcnzOwvT74bQRVrfnQow2KO5Q==",
557 | "dev": true,
558 | "optional": true
559 | },
560 | "esbuild-windows-arm64": {
561 | "version": "0.14.44",
562 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.44.tgz",
563 | "integrity": "sha512-ygYPfYE5By4Sd6szsNr10B0RtWVNOSGmZABSaj4YQBLqh9b9i45VAjVWa8tyIy+UAbKF7WGwybi2wTbSVliO8A==",
564 | "dev": true,
565 | "optional": true
566 | },
567 | "fsevents": {
568 | "version": "2.3.2",
569 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
570 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
571 | "dev": true,
572 | "optional": true
573 | },
574 | "function-bind": {
575 | "version": "1.1.1",
576 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
577 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
578 | "dev": true
579 | },
580 | "has": {
581 | "version": "1.0.3",
582 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
583 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
584 | "dev": true,
585 | "requires": {
586 | "function-bind": "^1.1.1"
587 | }
588 | },
589 | "is-core-module": {
590 | "version": "2.9.0",
591 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
592 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
593 | "dev": true,
594 | "requires": {
595 | "has": "^1.0.3"
596 | }
597 | },
598 | "lit": {
599 | "version": "2.2.6",
600 | "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.6.tgz",
601 | "integrity": "sha512-K2vkeGABfSJSfkhqHy86ujchJs3NR9nW1bEEiV+bXDkbiQ60Tv5GUausYN2mXigZn8lC1qXuc46ArQRKYmumZw==",
602 | "requires": {
603 | "@lit/reactive-element": "^1.3.0",
604 | "lit-element": "^3.2.0",
605 | "lit-html": "^2.2.0"
606 | }
607 | },
608 | "lit-element": {
609 | "version": "3.2.0",
610 | "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.0.tgz",
611 | "integrity": "sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==",
612 | "requires": {
613 | "@lit/reactive-element": "^1.3.0",
614 | "lit-html": "^2.2.0"
615 | }
616 | },
617 | "lit-html": {
618 | "version": "2.2.6",
619 | "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.6.tgz",
620 | "integrity": "sha512-xOKsPmq/RAKJ6dUeOxhmOYFjcjf0Q7aSdfBJgdJkOfCUnkmmJPxNrlZpRBeVe1Gg50oYWMlgm6ccAE/SpJgSdw==",
621 | "requires": {
622 | "@types/trusted-types": "^2.0.2"
623 | }
624 | },
625 | "material-icons": {
626 | "version": "1.11.2",
627 | "resolved": "https://registry.npmjs.org/material-icons/-/material-icons-1.11.2.tgz",
628 | "integrity": "sha512-maKSVQNQEHrHXjKTPTwH0141hR2bC8fFUaX4bJzzwVRs7jY+9A+jx0kH/lpgEGIPoYR8gho4iLDvWN3mBRL53A=="
629 | },
630 | "nanoid": {
631 | "version": "3.3.4",
632 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
633 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
634 | "dev": true
635 | },
636 | "path-parse": {
637 | "version": "1.0.7",
638 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
639 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
640 | "dev": true
641 | },
642 | "picocolors": {
643 | "version": "1.0.0",
644 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
645 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
646 | "dev": true
647 | },
648 | "postcss": {
649 | "version": "8.4.14",
650 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
651 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
652 | "dev": true,
653 | "requires": {
654 | "nanoid": "^3.3.4",
655 | "picocolors": "^1.0.0",
656 | "source-map-js": "^1.0.2"
657 | }
658 | },
659 | "resolve": {
660 | "version": "1.22.0",
661 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
662 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
663 | "dev": true,
664 | "requires": {
665 | "is-core-module": "^2.8.1",
666 | "path-parse": "^1.0.7",
667 | "supports-preserve-symlinks-flag": "^1.0.0"
668 | }
669 | },
670 | "rollup": {
671 | "version": "2.75.6",
672 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz",
673 | "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==",
674 | "dev": true,
675 | "requires": {
676 | "fsevents": "~2.3.2"
677 | }
678 | },
679 | "source-map-js": {
680 | "version": "1.0.2",
681 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
682 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
683 | "dev": true
684 | },
685 | "supports-preserve-symlinks-flag": {
686 | "version": "1.0.0",
687 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
688 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
689 | "dev": true
690 | },
691 | "tslib": {
692 | "version": "2.3.1",
693 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
694 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
695 | },
696 | "vite": {
697 | "version": "2.9.12",
698 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.12.tgz",
699 | "integrity": "sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew==",
700 | "dev": true,
701 | "requires": {
702 | "esbuild": "^0.14.27",
703 | "fsevents": "~2.3.2",
704 | "postcss": "^8.4.13",
705 | "resolve": "^1.22.0",
706 | "rollup": "^2.59.0"
707 | }
708 | }
709 | }
710 | }
711 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "home-assistant",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "dev": "vite",
6 | "build": "vite build"
7 | },
8 | "dependencies": {
9 | "@material/mwc-button": "^0.25.3",
10 | "@material/mwc-fab": "^0.25.3",
11 | "@material/mwc-icon": "^0.25.3",
12 | "@material/mwc-icon-button": "^0.25.3",
13 | "@material/mwc-menu": "^0.25.3",
14 | "@material/mwc-snackbar": "^0.25.3",
15 | "lit": "^2.2.6",
16 | "material-icons": "^1.11.2"
17 | },
18 | "devDependencies": {
19 | "vite": "^2.9.12"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/privacy-policy.md:
--------------------------------------------------------------------------------
1 | # 隐私策略
2 |
3 | *上次更新:2021年11月22日*
4 |
5 | 我认真对待您的隐私。为了更好地保护您的隐私,我提供了本隐私政策声明,解释了收集和使用您的个人信息的方式。
6 |
7 |
8 | ## 收集日常信息
9 |
10 | 此扩展不会收集、存储或发送浏览器选项卡范围之外的任何信息,也不会在浏览器选项卡和内部检测到的家庭助理实例的范围之外收集、存储或发送任何信息。此信息包括但不限于 IP 地址、浏览器或应用程序详细信息、时间戳和引用页面。这些信息都无法识别特定访问者或用户的个人身份。默认情况下,Edge 会跟踪扩展程序的安装和使用情况,并且可以在 Edge 网上应用店的扩展程序页面以及开发者控制台中查看,但使用扩展程序的用户无法识别这些详细信息。
11 |
12 |
13 | ## Cookies
14 |
15 | 此扩展程序不会存储或使用任何 Cookie。
16 |
17 |
18 | ## 广告和其他第三方
19 |
20 | 此扩展程序中未使用任何广告。
21 |
22 |
23 | ## 安全
24 |
25 | 您的个人信息的安全性对我来说很重要,但请记住,没有任何通过互联网传输的方法或电子存储方法是100%安全的。虽然我努力使用商业上可接受的方式来保护您的个人信息,但我无法保证其绝对安全。如果数据已配置且可用,则在浏览器标签页和家庭助理之间通过 HTTPS 使用 SSL 加密发送。
26 |
27 |
28 | ## 本隐私政策的变更
29 |
30 | 本隐私政策自2021年11月22日起生效,并将继续有效,除非将来对其条款进行任何更改,这些更改将在此页面上发布后立即生效。
31 |
32 | 我保留随时更新或更改我的隐私政策的权利,您应定期查看本隐私政策。如果我对本隐私政策进行任何重大更改,我会通过在扩展说明中突出显示通知来通知您。
33 |
34 |
35 | ## 联系方式
36 |
37 | 有关隐私政策的任何问题或疑虑,请给我发送电子邮件至 ilovevar@gmail.com
38 |
--------------------------------------------------------------------------------
/screenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shaonianzhentan/ha-extension/4c9d9b70230f7d64db9a87780d262a9e45f68258/screenshots/1.png
--------------------------------------------------------------------------------
/screenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shaonianzhentan/ha-extension/4c9d9b70230f7d64db9a87780d262a9e45f68258/screenshots/2.png
--------------------------------------------------------------------------------
/screenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shaonianzhentan/ha-extension/4c9d9b70230f7d64db9a87780d262a9e45f68258/screenshots/3.png
--------------------------------------------------------------------------------
/src/home-assistant.js:
--------------------------------------------------------------------------------
1 | import 'material-icons/iconfont/material-icons.css';
2 | import '@material/mwc-icon';
3 | import '@material/mwc-button';
4 | import '@material/mwc-fab';
5 | import '@material/mwc-menu';
6 | import '@material/mwc-snackbar';
7 | import '@material/mwc-list/mwc-list-item';
8 |
9 | import { html, css, LitElement } from 'lit';
10 |
11 | export class HomeAssistant extends LitElement {
12 | static get styles() {
13 | return css`
14 | .link-home {
15 | padding: 30px;
16 | padding-top: 140px;
17 | text-align: center;
18 | color: #42bdf5;
19 | --mdc-theme-secondary: #42bdf5;
20 | --mdc-theme-on-secondary: white;
21 | }
22 | .menu-footer {
23 | text-align:center;
24 | display: block;
25 | padding-top: 20px;
26 | }
27 | .item-title:hover{color:#03a9f4;}
28 | .selected{color:#03a9f4;}
29 | .item-link:hover{color:#ff9800;}
30 | #pos{
31 | position: fixed; bottom: 10px; right: 10px
32 | }
33 | iframe{ border:none;width:100%;height:100vh; }
34 | `;
35 | }
36 |
37 | static properties = {
38 | list: {},
39 | logo: {},
40 | url: {},
41 | i18n: {}
42 | };
43 |
44 | constructor() {
45 | super();
46 | this.i18n = {
47 | title: chrome.i18n.getMessage("title"),
48 | description: chrome.i18n.getMessage("description"),
49 | error_tips: chrome.i18n.getMessage("error_tips"),
50 | add: chrome.i18n.getMessage("add"),
51 | cancel: chrome.i18n.getMessage("cancel"),
52 | delete: chrome.i18n.getMessage("delete")
53 | }
54 |
55 | try {
56 | const arr = JSON.parse(localStorage['list'])
57 | this.list = Array.isArray(arr) ? arr : []
58 | } catch {
59 | this.list = []
60 | }
61 | this.url = ''
62 | }
63 |
64 | render() {
65 | let { logo, url, list } = this
66 | if (list.length === 0) {
67 | return html`
68 |

69 |
${this.i18n.title}
70 |
${this.i18n.description}
71 |
72 |
`
73 | }
74 | if (!url) {
75 | const obj = list.find(ele => ele.show === 1)
76 | if (obj) {
77 | url = obj.url
78 | } else {
79 | url = list[list.length - 1].url
80 | }
81 | }
82 | return html`
83 |
84 |
85 |
86 |
109 |
`;
110 | }
111 |
112 | get _list() {
113 | return JSON.parse(JSON.stringify(this.list));
114 | }
115 |
116 | _mousedown(ev) {
117 | let x = ev.clientX
118 | let y = ev.clientY
119 | document.onmouseup = (event) => {
120 | document.onmousemove = null;
121 | if (x === event.clientX && y === event.clientY) {
122 | this.openClick()
123 | }
124 | };
125 | const pos = this.shadowRoot.querySelector('#pos');
126 | document.onmousemove = (event) => {
127 | pos.style.left = `${event.clientX - 20}px`;
128 | pos.style.top = `${event.clientY - 20}px`;
129 | };
130 | }
131 |
132 | openClick() {
133 | const menu = this.shadowRoot.querySelector('#menu');
134 | const button = this.shadowRoot.querySelector('#button');
135 | menu.anchor = button;
136 | menu.open = true;
137 | }
138 |
139 | addClick() {
140 | chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
141 | chrome.scripting.executeScript({
142 | target: { tabId: tabs[0].id },
143 | func: () => {
144 | const ha = document.body.querySelector('home-assistant')
145 | if (ha) {
146 | return {
147 | title: document.title,
148 | url: location.href
149 | }
150 | }
151 | }
152 | }).then((res) => {
153 | const { result } = res[0]
154 | if (result) {
155 | const list = this._list;
156 | if (!list.find(ele => ele.url === result.url)) {
157 | this.url = result.url
158 | list.forEach(ele => ele.show = 0)
159 | list.push(Object.assign(result, {
160 | show: 1
161 | }));
162 | this.list = list;
163 | this.saveList()
164 | }
165 | } else {
166 | this.toast(this.i18n.error_tips)
167 | }
168 | }).catch(() => {
169 | this.toast(this.i18n.error_tips)
170 | });
171 | });
172 | }
173 |
174 | toast(text) {
175 | const snackbar = document.createElement('mwc-snackbar')
176 | snackbar.labelText = text
177 | document.body.appendChild(snackbar)
178 | snackbar.show();
179 | setTimeout(() => {
180 | snackbar.remove()
181 | }, 3000)
182 | }
183 |
184 | selectClick(data, index) {
185 | this.url = data.url
186 | const list = this._list;
187 | list.forEach(ele => ele.show = 0)
188 | list[index].show = 1
189 | this.list = list;
190 | this.saveList()
191 | }
192 |
193 | removeClick(index) {
194 | const list = this._list;
195 | list.splice(index, 1);
196 | this.list = list;
197 | this.saveList()
198 | }
199 |
200 | saveList() {
201 | localStorage['list'] = JSON.stringify(this.list)
202 | }
203 | }
204 |
205 | window.customElements.define('home-assistant', HomeAssistant);
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 |
3 | // https://vitejs.dev/config/
4 | export default defineConfig({
5 | build: {
6 | lib: {
7 | entry: 'src/home-assistant.js',
8 | formats: ['es'],
9 | },
10 | rollupOptions: {
11 | // external: /^lit/,
12 | },
13 | outDir: 'HomeAssistant/popup/ha'
14 | },
15 | });
16 |
--------------------------------------------------------------------------------