├── .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 | [![Edge Add-on](https://img.shields.io/badge/Edge扩展-点击安装-%23049cdb?style=for-the-badge&logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjI1NDYxNTI3NTY0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI0MTQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTQ2NCA2NTZxLTQ4LTUyLTU2LTExNi0yMCAzMC4wMTYtMzIgNjQtMTguMDE2IDU4LjAxNi00Ljk5MiAxMjAuOTkydDUyLjk5MiAxMTQuMDE2IDk4LjAxNiA3MS4wMDhxNjggMjQgMTUyLTggNzAuMDE2LTI2LjAxNiAxMzQuMDE2LTgyLjAxNmwxNC4wMTYtMTZxMzItMzQuMDE2IDQyLjAxNi01MC4wMTYgMjAtMzItMi4wMTYtMzYtOTguMDE2IDUyLTIxMiAzNS4wMDhUNDY0LjAzMiA2NTZ6IG0yNC0yNDhxMjQgMCAyMC45OTItNi4wMTZ0LTIwLjk5Mi0xNmwtMTYtMTAuMDE2cS02Ni4wMTYtMzYtMTQ4LTM2dC0xNDQgMzQuMDE2VDk2IDQ2OHEtMjQgNjQgMi4wMTYgMTQ2LjAxNiAzMC4wMTYgMTI2LjAxNiAxMjguOTkyIDIxNS4wMDh0MjI0Ljk5MiAxMDQuOTkycS02Ni4wMTYtNDAtMTAzLjAwOC0xMTEuMDA4VDMxMiA2NzQuMDE2cTIuMDE2LTg2LjAxNiA1MC4wMTYtMTYyLjAxNiA1MC4wMTYtODIuMDE2IDEyNi4wMTYtMTA0ek0xMTguMDE2IDM1MnE2NC00OCAxNDgtNjAuOTkydDE2NC45OTIgMTEuMDA4IDEzNS4wMDggODIuMDE2cTM2IDQwIDQ4IDkwLjAxNiAxNC4wMTYgNTYtMTQuMDE2IDk2LTM0LjAxNiAzNiA0IDYwIDI4IDE2IDkwLjAxNiAyMi4wMTYgNTYgNCA4Mi4wMTYtMi4wMTYgNzYtMTYgMTIwLTc2IDQwLTU0LjAxNiA0Mi4wMTYtMTI4Ljk5MnQtMzYtMTM5LjAwOHEtNTQuMDE2LTEwNi4wMTYtMTY0LTE2Ni4wMTYtMTA0LTU2LTIyOC01NC4wMTYtMTI4LTIuMDE2LTIzNiA3MS4wMDh0LTE1NiAxOTUuMDA4eiIgcC1pZD0iMjQxNSIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjwvc3ZnPg==)](https://microsoftedge.microsoft.com/addons/detail/hbagofhaigojgcjmonkaljffiebdkkdn) 4 | 5 | ![visit](https://visitor-badge.glitch.me/badge?page_id=shaonianzhentan.ha-extension&left_text=visit) 6 | [![Microsoft Edge Add-ons](https://img.shields.io/badge/dynamic/json?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjI1NDYxNTI3NTY0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI0MTQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTQ2NCA2NTZxLTQ4LTUyLTU2LTExNi0yMCAzMC4wMTYtMzIgNjQtMTguMDE2IDU4LjAxNi00Ljk5MiAxMjAuOTkydDUyLjk5MiAxMTQuMDE2IDk4LjAxNiA3MS4wMDhxNjggMjQgMTUyLTggNzAuMDE2LTI2LjAxNiAxMzQuMDE2LTgyLjAxNmwxNC4wMTYtMTZxMzItMzQuMDE2IDQyLjAxNi01MC4wMTYgMjAtMzItMi4wMTYtMzYtOTguMDE2IDUyLTIxMiAzNS4wMDhUNDY0LjAzMiA2NTZ6IG0yNC0yNDhxMjQgMCAyMC45OTItNi4wMTZ0LTIwLjk5Mi0xNmwtMTYtMTAuMDE2cS02Ni4wMTYtMzYtMTQ4LTM2dC0xNDQgMzQuMDE2VDk2IDQ2OHEtMjQgNjQgMi4wMTYgMTQ2LjAxNiAzMC4wMTYgMTI2LjAxNiAxMjguOTkyIDIxNS4wMDh0MjI0Ljk5MiAxMDQuOTkycS02Ni4wMTYtNDAtMTAzLjAwOC0xMTEuMDA4VDMxMiA2NzQuMDE2cTIuMDE2LTg2LjAxNiA1MC4wMTYtMTYyLjAxNiA1MC4wMTYtODIuMDE2IDEyNi4wMTYtMTA0ek0xMTguMDE2IDM1MnE2NC00OCAxNDgtNjAuOTkydDE2NC45OTIgMTEuMDA4IDEzNS4wMDggODIuMDE2cTM2IDQwIDQ4IDkwLjAxNiAxNC4wMTYgNTYtMTQuMDE2IDk2LTM0LjAxNiAzNiA0IDYwIDI4IDE2IDkwLjAxNiAyMi4wMTYgNTYgNCA4Mi4wMTYtMi4wMTYgNzYtMTYgMTIwLTc2IDQwLTU0LjAxNiA0Mi4wMTYtMTI4Ljk5MnQtMzYtMTM5LjAwOHEtNTQuMDE2LTEwNi4wMTYtMTY0LTE2Ni4wMTYtMTA0LTU2LTIyOC01NC4wMTYtMTI4LTIuMDE2LTIzNiA3MS4wMDh0LTE1NiAxOTUuMDA4eiIgcC1pZD0iMjQxNSIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjwvc3ZnPg==&label=users&color=brightgreen&query=%24.activeInstallCount&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Fhbagofhaigojgcjmonkaljffiebdkkdn)](https://microsoftedge.microsoft.com/addons/detail/hbagofhaigojgcjmonkaljffiebdkkdn) 7 | [![Microsoft Edge Add-ons](https://img.shields.io/badge/dynamic/json?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjI1NDYxNTI3NTY0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI0MTQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTQ2NCA2NTZxLTQ4LTUyLTU2LTExNi0yMCAzMC4wMTYtMzIgNjQtMTguMDE2IDU4LjAxNi00Ljk5MiAxMjAuOTkydDUyLjk5MiAxMTQuMDE2IDk4LjAxNiA3MS4wMDhxNjggMjQgMTUyLTggNzAuMDE2LTI2LjAxNiAxMzQuMDE2LTgyLjAxNmwxNC4wMTYtMTZxMzItMzQuMDE2IDQyLjAxNi01MC4wMTYgMjAtMzItMi4wMTYtMzYtOTguMDE2IDUyLTIxMiAzNS4wMDhUNDY0LjAzMiA2NTZ6IG0yNC0yNDhxMjQgMCAyMC45OTItNi4wMTZ0LTIwLjk5Mi0xNmwtMTYtMTAuMDE2cS02Ni4wMTYtMzYtMTQ4LTM2dC0xNDQgMzQuMDE2VDk2IDQ2OHEtMjQgNjQgMi4wMTYgMTQ2LjAxNiAzMC4wMTYgMTI2LjAxNiAxMjguOTkyIDIxNS4wMDh0MjI0Ljk5MiAxMDQuOTkycS02Ni4wMTYtNDAtMTAzLjAwOC0xMTEuMDA4VDMxMiA2NzQuMDE2cTIuMDE2LTg2LjAxNiA1MC4wMTYtMTYyLjAxNiA1MC4wMTYtODIuMDE2IDEyNi4wMTYtMTA0ek0xMTguMDE2IDM1MnE2NC00OCAxNDgtNjAuOTkydDE2NC45OTIgMTEuMDA4IDEzNS4wMDggODIuMDE2cTM2IDQwIDQ4IDkwLjAxNiAxNC4wMTYgNTYtMTQuMDE2IDk2LTM0LjAxNiAzNiA0IDYwIDI4IDE2IDkwLjAxNiAyMi4wMTYgNTYgNCA4Mi4wMTYtMi4wMTYgNzYtMTYgMTIwLTc2IDQwLTU0LjAxNiA0Mi4wMTYtMTI4Ljk5MnQtMzYtMTM5LjAwOHEtNTQuMDE2LTEwNi4wMTYtMTY0LTE2Ni4wMTYtMTA0LTU2LTIyOC01NC4wMTYtMTI4LTIuMDE2LTIzNiA3MS4wMDh0LTE1NiAxOTUuMDA4eiIgcC1pZD0iMjQxNSIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjwvc3ZnPg==&label=rating&suffix=/5.0&color=brightgreen&query=%24.averageRating&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Fhbagofhaigojgcjmonkaljffiebdkkdn)](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 | ![screenshots/1.png](screenshots/1.png) 27 | ![screenshots/2.png](screenshots/2.png) 28 | ![screenshots/2.png](screenshots/3.png) 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 | HomeAssistant家庭助理 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`` 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 | 87 | 88 | ${this.i18n.title} 89 | ${this.i18n.description} 90 | 95 | 96 |
  • 97 | ${this.list.map((ele, index) => html` 98 | ${ele.title} 99 | ${ele.url} 100 | remove 101 | ` 102 | )} 103 |
  • 104 | 105 | 106 | 107 | 108 |
    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 | --------------------------------------------------------------------------------