Continue kiosk work

This commit is contained in:
2024-12-16 21:38:24 +00:00
parent d563e89c6b
commit 7b24f82436
6 changed files with 496 additions and 152 deletions

View File

@@ -27,9 +27,9 @@
"devDependencies": {
"@babel/types": "^7.26.3",
"@types/node": "^20.17.9",
"@typescript-eslint/parser": "8.17.0",
"@vitejs/plugin-vue": "^4.6.2",
"@vue/eslint-config-typescript": "^14.1.4",
"@typescript-eslint/parser": "8.17.0",
"cross-env": "^7.0.3",
"eslint": "^9.16.0",
"eslint-plugin-import": "^2.31.0",
@@ -45,6 +45,7 @@
"vite": "^5.4.11",
"vite-plugin-vuetify": "^2.0.4",
"vue-router": "^4.5.0",
"vue-tsc": "^2.1.10"
"vue-tsc": "^2.1.10",
"websocketstream-polyfill": "^1.0.1"
}
}

View File

@@ -22,7 +22,7 @@ importers:
version: 8.8.1(vue@3.5.13(typescript@5.6.2))
apexcharts:
specifier: ^4.1.0
version: 4.1.0
version: 4.2.0
axios:
specifier: ^1.7.9
version: 1.7.9
@@ -46,7 +46,7 @@ importers:
version: 3.5.13(typescript@5.6.2)
vue3-apexcharts:
specifier: ^1.8.0
version: 1.8.0(apexcharts@4.1.0)(vue@3.5.13(typescript@5.6.2))
version: 1.8.0(apexcharts@4.2.0)(vue@3.5.13(typescript@5.6.2))
vuetify:
specifier: ^3.7.5
version: 3.7.5(typescript@5.6.2)(vite-plugin-vuetify@2.0.4)(vue@3.5.13(typescript@5.6.2))
@@ -56,13 +56,13 @@ importers:
version: 7.26.3
'@types/node':
specifier: ^20.17.9
version: 20.17.9
version: 20.17.10
'@typescript-eslint/parser':
specifier: 8.17.0
version: 8.17.0(eslint@9.16.0)(typescript@5.6.2)
'@vitejs/plugin-vue':
specifier: ^4.6.2
version: 4.6.2(vite@5.4.11(@types/node@20.17.9)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))
version: 4.6.2(vite@5.4.11(@types/node@20.17.10)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))
'@vue/eslint-config-typescript':
specifier: ^14.1.4
version: 14.1.4(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.2))(eslint-plugin-vue@9.32.0(eslint@9.16.0))(eslint@9.16.0)(typescript@5.6.2)
@@ -95,7 +95,7 @@ importers:
version: 5.6.2
unplugin-fonts:
specifier: ^1.3.1
version: 1.3.1(vite@5.4.11(@types/node@20.17.9)(sass@1.82.0))
version: 1.3.1(vite@5.4.11(@types/node@20.17.10)(sass@1.82.0))
unplugin-vue-components:
specifier: ^0.26.0
version: 0.26.0(@babel/parser@7.26.3)(rollup@4.28.1)(vue@3.5.13(typescript@5.6.2))
@@ -104,16 +104,19 @@ importers:
version: 0.7.0(rollup@4.28.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.6.2)))(vue@3.5.13(typescript@5.6.2))
vite:
specifier: ^5.4.11
version: 5.4.11(@types/node@20.17.9)(sass@1.82.0)
version: 5.4.11(@types/node@20.17.10)(sass@1.82.0)
vite-plugin-vuetify:
specifier: ^2.0.4
version: 2.0.4(vite@5.4.11(@types/node@20.17.9)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))(vuetify@3.7.5)
version: 2.0.4(vite@5.4.11(@types/node@20.17.10)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))(vuetify@3.7.5)
vue-router:
specifier: ^4.5.0
version: 4.5.0(vue@3.5.13(typescript@5.6.2))
vue-tsc:
specifier: ^2.1.10
version: 2.1.10(typescript@5.6.2)
websocketstream-polyfill:
specifier: ^1.0.1
version: 1.0.1
packages:
@@ -573,22 +576,19 @@ packages:
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
'@types/node@20.17.9':
resolution: {integrity: sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==}
'@types/node@20.17.10':
resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==}
'@types/suncalc@1.9.2':
resolution: {integrity: sha512-ATAGBHHfA1TlE2tjfidLyTcysjoT2JHHEAmWRULh73SU9UTn++j5fqHEW16X6Y/2Li87jEQXzgu4R/OOdlDqzw==}
'@typescript-eslint/eslint-plugin@8.17.0':
resolution: {integrity: sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==}
'@typescript-eslint/eslint-plugin@8.18.0':
resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <5.8.0'
'@typescript-eslint/parser@8.17.0':
resolution: {integrity: sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==}
@@ -600,24 +600,36 @@ packages:
typescript:
optional: true
'@typescript-eslint/parser@8.18.0':
resolution: {integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
'@typescript-eslint/scope-manager@8.17.0':
resolution: {integrity: sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.17.0':
resolution: {integrity: sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==}
'@typescript-eslint/scope-manager@8.18.0':
resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.18.0':
resolution: {integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <5.8.0'
'@typescript-eslint/types@8.17.0':
resolution: {integrity: sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/types@8.18.0':
resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.17.0':
resolution: {integrity: sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -627,20 +639,27 @@ packages:
typescript:
optional: true
'@typescript-eslint/utils@8.17.0':
resolution: {integrity: sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==}
'@typescript-eslint/typescript-estree@8.18.0':
resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.8.0'
'@typescript-eslint/utils@8.18.0':
resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <5.8.0'
'@typescript-eslint/visitor-keys@8.17.0':
resolution: {integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/visitor-keys@8.18.0':
resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@vitejs/plugin-vue@4.6.2':
resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -657,8 +676,8 @@ packages:
'@volar/typescript@2.4.10':
resolution: {integrity: sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==}
'@vue-macros/common@1.15.0':
resolution: {integrity: sha512-yg5VqW7+HRfJGimdKvFYzx8zorHUYo0hzPwuraoC1DWa7HHazbTMoVsHDvk3JHa1SGfSL87fRnzmlvgjEHhszA==}
'@vue-macros/common@1.15.1':
resolution: {integrity: sha512-O0ZXaladWXwHplQnSjxLbB/G1KpdWCUNJPNYVHIxHonGex1BGpoB4fBZZLgddHgAiy18VZG/Iu5L0kwG+SV7JQ==}
engines: {node: '>=16.14.0'}
peerDependencies:
vue: ^2.7.0 || ^3.2.25
@@ -762,8 +781,8 @@ packages:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
apexcharts@4.1.0:
resolution: {integrity: sha512-TE0q0cXeS5k/AByLqlZAQ/aRQfdD3z0Ajd1uQWWZEjxiIC5qcBpMrTaG+aT+c3golqkvLH3u6kxDW8HBrggpLw==}
apexcharts@4.2.0:
resolution: {integrity: sha512-MQ5o8KnwMGcAlo+LhXlAjWGk8wBNBK2O1gFv+JiB6w3oJeuDJUFqa6FLTDlXvdhtObNQ3vIfAtv0AbMSkDv0DQ==}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -841,14 +860,18 @@ packages:
builtins@5.1.0:
resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==}
call-bind-apply-helpers@1.0.0:
resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==}
call-bind-apply-helpers@1.0.1:
resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==}
engines: {node: '>= 0.4'}
call-bind@1.0.8:
resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
engines: {node: '>= 0.4'}
call-bound@1.0.2:
resolution: {integrity: sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==}
engines: {node: '>= 0.4'}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@@ -1219,8 +1242,8 @@ packages:
functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
get-intrinsic@1.2.5:
resolution: {integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==}
get-intrinsic@1.2.6:
resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==}
engines: {node: '>= 0.4'}
get-symbol-description@1.0.2:
@@ -1338,8 +1361,8 @@ packages:
resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
engines: {node: '>= 0.4'}
is-data-view@1.0.1:
resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
is-data-view@1.0.2:
resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
engines: {node: '>= 0.4'}
is-date-object@1.0.5:
@@ -1378,8 +1401,8 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
is-regex@1.2.0:
resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==}
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
is-set@2.0.3:
@@ -1470,8 +1493,12 @@ packages:
resolution: {integrity: sha512-C9sgUzVZtUtzCBoMdYtwrIRQ4IucGRFGgdhkjL7PXsVfPYmTuWtewqzk7dlipaCMWH/gOYehW9rgMoa4Oebtpw==}
engines: {node: '>=16.14.0'}
magic-string@0.30.14:
resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==}
magic-string@0.30.15:
resolution: {integrity: sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==}
math-intrinsics@1.0.0:
resolution: {integrity: sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==}
engines: {node: '>= 0.4'}
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
@@ -1696,12 +1723,12 @@ packages:
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
safe-array-concat@1.1.2:
resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
safe-array-concat@1.1.3:
resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
engines: {node: '>=0.4'}
safe-regex-test@1.0.3:
resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
safe-regex-test@1.1.0:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
sass@1.82.0:
@@ -1740,20 +1767,33 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
side-channel-map@1.0.1:
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
engines: {node: '>= 0.4'}
side-channel-weakmap@1.0.2:
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
engines: {node: '>= 0.4'}
side-channel@1.1.0:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
string.prototype.trim@1.2.9:
resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
string.prototype.trim@1.2.10:
resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
engines: {node: '>= 0.4'}
string.prototype.trimend@1.0.8:
resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
string.prototype.trimend@1.0.9:
resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
engines: {node: '>= 0.4'}
string.prototype.trimstart@1.0.8:
resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
@@ -1822,15 +1862,12 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
typescript-eslint@8.17.0:
resolution: {integrity: sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==}
typescript-eslint@8.18.0:
resolution: {integrity: sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <5.8.0'
typescript@5.6.2:
resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
@@ -2007,6 +2044,9 @@ packages:
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
websocketstream-polyfill@1.0.1:
resolution: {integrity: sha512-SV0AG8yN3YDwCVCex/oBQli7vrezGQ0stgo5suKMTthjPQv2wuMsNvwUWDAvNmDGGb9VIm5WsW99x57GW06gLQ==}
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
@@ -2381,26 +2421,42 @@ snapshots:
'@types/json5@0.0.29': {}
'@types/node@20.17.9':
'@types/node@20.17.10':
dependencies:
undici-types: 6.19.8
'@types/suncalc@1.9.2': {}
'@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.2))(eslint@9.16.0)(typescript@5.6.2)':
'@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.2))(eslint@9.16.0)(typescript@5.6.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.17.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/scope-manager': 8.17.0
'@typescript-eslint/type-utils': 8.17.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.17.0
'@typescript-eslint/scope-manager': 8.18.0
'@typescript-eslint/type-utils': 8.18.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/utils': 8.18.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.18.0
eslint: 9.16.0
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
ts-api-utils: 1.4.3(typescript@5.6.2)
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.6.2))(eslint@9.16.0)(typescript@5.6.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.18.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/scope-manager': 8.18.0
'@typescript-eslint/type-utils': 8.18.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/utils': 8.18.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.18.0
eslint: 9.16.0
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
ts-api-utils: 1.4.3(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
@@ -2418,25 +2474,43 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.6.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.18.0
'@typescript-eslint/types': 8.18.0
'@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.18.0
debug: 4.4.0
eslint: 9.16.0
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.17.0':
dependencies:
'@typescript-eslint/types': 8.17.0
'@typescript-eslint/visitor-keys': 8.17.0
'@typescript-eslint/type-utils@8.17.0(eslint@9.16.0)(typescript@5.6.2)':
'@typescript-eslint/scope-manager@8.18.0':
dependencies:
'@typescript-eslint/typescript-estree': 8.17.0(typescript@5.6.2)
'@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/types': 8.18.0
'@typescript-eslint/visitor-keys': 8.18.0
'@typescript-eslint/type-utils@8.18.0(eslint@9.16.0)(typescript@5.6.2)':
dependencies:
'@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.2)
'@typescript-eslint/utils': 8.18.0(eslint@9.16.0)(typescript@5.6.2)
debug: 4.4.0
eslint: 9.16.0
ts-api-utils: 1.4.3(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.17.0': {}
'@typescript-eslint/types@8.18.0': {}
'@typescript-eslint/typescript-estree@8.17.0(typescript@5.6.2)':
dependencies:
'@typescript-eslint/types': 8.17.0
@@ -2452,14 +2526,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.17.0(eslint@9.16.0)(typescript@5.6.2)':
'@typescript-eslint/typescript-estree@8.18.0(typescript@5.6.2)':
dependencies:
'@typescript-eslint/types': 8.18.0
'@typescript-eslint/visitor-keys': 8.18.0
debug: 4.4.0
fast-glob: 3.3.2
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
ts-api-utils: 1.4.3(typescript@5.6.2)
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.18.0(eslint@9.16.0)(typescript@5.6.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0)
'@typescript-eslint/scope-manager': 8.17.0
'@typescript-eslint/types': 8.17.0
'@typescript-eslint/typescript-estree': 8.17.0(typescript@5.6.2)
'@typescript-eslint/scope-manager': 8.18.0
'@typescript-eslint/types': 8.18.0
'@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.2)
eslint: 9.16.0
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
@@ -2469,9 +2556,14 @@ snapshots:
'@typescript-eslint/types': 8.17.0
eslint-visitor-keys: 4.2.0
'@vitejs/plugin-vue@4.6.2(vite@5.4.11(@types/node@20.17.9)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))':
'@typescript-eslint/visitor-keys@8.18.0':
dependencies:
vite: 5.4.11(@types/node@20.17.9)(sass@1.82.0)
'@typescript-eslint/types': 8.18.0
eslint-visitor-keys: 4.2.0
'@vitejs/plugin-vue@4.6.2(vite@5.4.11(@types/node@20.17.10)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))':
dependencies:
vite: 5.4.11(@types/node@20.17.10)(sass@1.82.0)
vue: 3.5.13(typescript@5.6.2)
'@volar/language-core@2.4.10':
@@ -2486,7 +2578,7 @@ snapshots:
path-browserify: 1.0.1
vscode-uri: 3.0.8
'@vue-macros/common@1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.6.2))':
'@vue-macros/common@1.15.1(rollup@4.28.1)(vue@3.5.13(typescript@5.6.2))':
dependencies:
'@babel/types': 7.26.3
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
@@ -2520,7 +2612,7 @@ snapshots:
'@vue/compiler-ssr': 3.5.13
'@vue/shared': 3.5.13
estree-walker: 2.0.2
magic-string: 0.30.14
magic-string: 0.30.15
postcss: 8.4.49
source-map-js: 1.2.1
@@ -2538,11 +2630,11 @@ snapshots:
'@vue/eslint-config-typescript@14.1.4(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.2))(eslint-plugin-vue@9.32.0(eslint@9.16.0))(eslint@9.16.0)(typescript@5.6.2)':
dependencies:
'@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.2))(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.2))(eslint@9.16.0)(typescript@5.6.2)
eslint: 9.16.0
eslint-plugin-vue: 9.32.0(eslint@9.16.0)
fast-glob: 3.3.2
typescript-eslint: 8.17.0(eslint@9.16.0)(typescript@5.6.2)
typescript-eslint: 8.18.0(eslint@9.16.0)(typescript@5.6.2)
vue-eslint-parser: 9.4.3(eslint@9.16.0)
optionalDependencies:
typescript: 5.6.2
@@ -2628,7 +2720,7 @@ snapshots:
normalize-path: 3.0.0
picomatch: 2.3.1
apexcharts@4.1.0:
apexcharts@4.2.0:
dependencies:
'@svgdotjs/svg.draggable.js': 3.0.4(@svgdotjs/svg.js@3.2.4)
'@svgdotjs/svg.filter.js': 3.0.8
@@ -2650,7 +2742,7 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.23.5
es-object-atoms: 1.0.0
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
is-string: 1.1.0
array.prototype.findlastindex@1.2.5:
@@ -2683,7 +2775,7 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.23.5
es-errors: 1.3.0
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
is-array-buffer: 3.0.4
is-shared-array-buffer: 1.0.3
@@ -2746,18 +2838,23 @@ snapshots:
dependencies:
semver: 7.6.3
call-bind-apply-helpers@1.0.0:
call-bind-apply-helpers@1.0.1:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
call-bind@1.0.8:
dependencies:
call-bind-apply-helpers: 1.0.0
call-bind-apply-helpers: 1.0.1
es-define-property: 1.0.1
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
set-function-length: 1.2.2
call-bound@1.0.2:
dependencies:
call-bind: 1.0.8
get-intrinsic: 1.2.6
callsites@3.1.0: {}
chalk@4.1.2:
@@ -2815,19 +2912,19 @@ snapshots:
dependencies:
call-bind: 1.0.8
es-errors: 1.3.0
is-data-view: 1.0.1
is-data-view: 1.0.2
data-view-byte-length@1.0.1:
dependencies:
call-bind: 1.0.8
es-errors: 1.3.0
is-data-view: 1.0.1
is-data-view: 1.0.2
data-view-byte-offset@1.0.0:
dependencies:
call-bind: 1.0.8
es-errors: 1.3.0
is-data-view: 1.0.1
is-data-view: 1.0.2
date-fns@3.6.0: {}
@@ -2866,7 +2963,7 @@ snapshots:
dunder-proto@1.0.0:
dependencies:
call-bind-apply-helpers: 1.0.0
call-bind-apply-helpers: 1.0.1
es-errors: 1.3.0
gopd: 1.2.0
@@ -2887,7 +2984,7 @@ snapshots:
es-set-tostringtag: 2.0.3
es-to-primitive: 1.3.0
function.prototype.name: 1.1.6
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
get-symbol-description: 1.0.2
globalthis: 1.0.4
gopd: 1.2.0
@@ -2898,9 +2995,9 @@ snapshots:
internal-slot: 1.0.7
is-array-buffer: 3.0.4
is-callable: 1.2.7
is-data-view: 1.0.1
is-data-view: 1.0.2
is-negative-zero: 2.0.3
is-regex: 1.2.0
is-regex: 1.2.1
is-shared-array-buffer: 1.0.3
is-string: 1.1.0
is-typed-array: 1.1.13
@@ -2909,10 +3006,10 @@ snapshots:
object-keys: 1.1.1
object.assign: 4.1.5
regexp.prototype.flags: 1.5.3
safe-array-concat: 1.1.2
safe-regex-test: 1.0.3
string.prototype.trim: 1.2.9
string.prototype.trimend: 1.0.8
safe-array-concat: 1.1.3
safe-regex-test: 1.1.0
string.prototype.trim: 1.2.10
string.prototype.trimend: 1.0.9
string.prototype.trimstart: 1.0.8
typed-array-buffer: 1.0.2
typed-array-byte-length: 1.0.1
@@ -2931,7 +3028,7 @@ snapshots:
es-set-tostringtag@2.0.3:
dependencies:
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
has-tostringtag: 1.0.2
hasown: 2.0.2
@@ -3029,7 +3126,7 @@ snapshots:
object.groupby: 1.0.3
object.values: 1.2.0
semver: 6.3.1
string.prototype.trimend: 1.0.8
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
'@typescript-eslint/parser': 8.17.0(eslint@9.16.0)(typescript@5.6.2)
@@ -3239,22 +3336,24 @@ snapshots:
functions-have-names@1.2.3: {}
get-intrinsic@1.2.5:
get-intrinsic@1.2.6:
dependencies:
call-bind-apply-helpers: 1.0.0
call-bind-apply-helpers: 1.0.1
dunder-proto: 1.0.0
es-define-property: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.0.0
function-bind: 1.1.2
gopd: 1.2.0
has-symbols: 1.1.0
hasown: 2.0.2
math-intrinsics: 1.0.0
get-symbol-description@1.0.2:
dependencies:
call-bind: 1.0.8
es-errors: 1.3.0
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
get-tsconfig@4.8.1:
dependencies:
@@ -3322,12 +3421,12 @@ snapshots:
dependencies:
es-errors: 1.3.0
hasown: 2.0.2
side-channel: 1.0.6
side-channel: 1.1.0
is-array-buffer@3.0.4:
dependencies:
call-bind: 1.0.8
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
is-async-function@2.0.0:
dependencies:
@@ -3356,8 +3455,10 @@ snapshots:
dependencies:
hasown: 2.0.2
is-data-view@1.0.1:
is-data-view@1.0.2:
dependencies:
call-bound: 1.0.2
get-intrinsic: 1.2.6
is-typed-array: 1.1.13
is-date-object@1.0.5:
@@ -3389,9 +3490,9 @@ snapshots:
is-number@7.0.0: {}
is-regex@1.2.0:
is-regex@1.2.1:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.2
gopd: 1.2.0
has-tostringtag: 1.0.2
hasown: 2.0.2
@@ -3411,7 +3512,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
has-symbols: 1.1.0
safe-regex-test: 1.0.3
safe-regex-test: 1.1.0
is-typed-array@1.1.13:
dependencies:
@@ -3426,7 +3527,7 @@ snapshots:
is-weakset@2.0.3:
dependencies:
call-bind: 1.0.8
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
isarray@2.0.5: {}
@@ -3474,12 +3575,14 @@ snapshots:
magic-string-ast@0.6.3:
dependencies:
magic-string: 0.30.14
magic-string: 0.30.15
magic-string@0.30.14:
magic-string@0.30.15:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
math-intrinsics@1.0.0: {}
merge2@1.4.1: {}
micromatch@4.0.8:
@@ -3654,7 +3757,7 @@ snapshots:
dunder-proto: 1.0.0
es-abstract: 1.23.5
es-errors: 1.3.0
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
gopd: 1.2.0
which-builtin-type: 1.2.0
@@ -3712,18 +3815,19 @@ snapshots:
dependencies:
queue-microtask: 1.2.3
safe-array-concat@1.1.2:
safe-array-concat@1.1.3:
dependencies:
call-bind: 1.0.8
get-intrinsic: 1.2.5
call-bound: 1.0.2
get-intrinsic: 1.2.6
has-symbols: 1.1.0
isarray: 2.0.5
safe-regex-test@1.0.3:
safe-regex-test@1.1.0:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.2
es-errors: 1.3.0
is-regex: 1.2.0
is-regex: 1.2.1
sass@1.82.0:
dependencies:
@@ -3746,7 +3850,7 @@ snapshots:
define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.2.5
get-intrinsic: 1.2.6
gopd: 1.2.0
has-property-descriptors: 1.0.2
@@ -3763,25 +3867,50 @@ snapshots:
shebang-regex@3.0.0: {}
side-channel@1.0.6:
side-channel-list@1.0.0:
dependencies:
call-bind: 1.0.8
es-errors: 1.3.0
get-intrinsic: 1.2.5
object-inspect: 1.13.3
side-channel-map@1.0.1:
dependencies:
call-bound: 1.0.2
es-errors: 1.3.0
get-intrinsic: 1.2.6
object-inspect: 1.13.3
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.2
es-errors: 1.3.0
get-intrinsic: 1.2.6
object-inspect: 1.13.3
side-channel-map: 1.0.1
side-channel@1.1.0:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.3
side-channel-list: 1.0.0
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
source-map-js@1.2.1: {}
string.prototype.trim@1.2.9:
string.prototype.trim@1.2.10:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.2
define-data-property: 1.1.4
define-properties: 1.2.1
es-abstract: 1.23.5
es-object-atoms: 1.0.0
has-property-descriptors: 1.0.2
string.prototype.trimend@1.0.8:
string.prototype.trimend@1.0.9:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.2
define-properties: 1.2.1
es-object-atoms: 1.0.0
@@ -3866,13 +3995,12 @@ snapshots:
possible-typed-array-names: 1.0.0
reflect.getprototypeof: 1.0.8
typescript-eslint@8.17.0(eslint@9.16.0)(typescript@5.6.2):
typescript-eslint@8.18.0(eslint@9.16.0)(typescript@5.6.2):
dependencies:
'@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.2))(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/parser': 8.17.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0)(typescript@5.6.2))(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/parser': 8.18.0(eslint@9.16.0)(typescript@5.6.2)
'@typescript-eslint/utils': 8.18.0(eslint@9.16.0)(typescript@5.6.2)
eslint: 9.16.0
optionalDependencies:
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
@@ -3892,11 +4020,11 @@ snapshots:
universalify@0.2.0: {}
unplugin-fonts@1.3.1(vite@5.4.11(@types/node@20.17.9)(sass@1.82.0)):
unplugin-fonts@1.3.1(vite@5.4.11(@types/node@20.17.10)(sass@1.82.0)):
dependencies:
fast-glob: 3.3.2
unplugin: 2.0.0-beta.1
vite: 5.4.11(@types/node@20.17.9)(sass@1.82.0)
vite: 5.4.11(@types/node@20.17.10)(sass@1.82.0)
unplugin-vue-components@0.26.0(@babel/parser@7.26.3)(rollup@4.28.1)(vue@3.5.13(typescript@5.6.2)):
dependencies:
@@ -3906,7 +4034,7 @@ snapshots:
debug: 4.4.0
fast-glob: 3.3.2
local-pkg: 0.4.3
magic-string: 0.30.14
magic-string: 0.30.15
minimatch: 9.0.5
resolve: 1.22.8
unplugin: 1.16.0
@@ -3921,7 +4049,7 @@ snapshots:
dependencies:
'@babel/types': 7.26.3
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.6.2))
'@vue-macros/common': 1.15.1(rollup@4.28.1)(vue@3.5.13(typescript@5.6.2))
ast-walker-scope: 0.5.0(rollup@4.28.1)
chokidar: 3.6.0
fast-glob: 3.3.2
@@ -3961,24 +4089,24 @@ snapshots:
util-deprecate@1.0.2: {}
vite-plugin-vuetify@2.0.4(vite@5.4.11(@types/node@20.17.9)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))(vuetify@3.7.5):
vite-plugin-vuetify@2.0.4(vite@5.4.11(@types/node@20.17.10)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))(vuetify@3.7.5):
dependencies:
'@vuetify/loader-shared': 2.0.3(vue@3.5.13(typescript@5.6.2))(vuetify@3.7.5)
debug: 4.4.0
upath: 2.0.1
vite: 5.4.11(@types/node@20.17.9)(sass@1.82.0)
vite: 5.4.11(@types/node@20.17.10)(sass@1.82.0)
vue: 3.5.13(typescript@5.6.2)
vuetify: 3.7.5(typescript@5.6.2)(vite-plugin-vuetify@2.0.4)(vue@3.5.13(typescript@5.6.2))
transitivePeerDependencies:
- supports-color
vite@5.4.11(@types/node@20.17.9)(sass@1.82.0):
vite@5.4.11(@types/node@20.17.10)(sass@1.82.0):
dependencies:
esbuild: 0.21.5
postcss: 8.4.49
rollup: 4.28.1
optionalDependencies:
'@types/node': 20.17.9
'@types/node': 20.17.10
fsevents: 2.3.3
sass: 1.82.0
@@ -4013,9 +4141,9 @@ snapshots:
semver: 7.6.3
typescript: 5.6.2
vue3-apexcharts@1.8.0(apexcharts@4.1.0)(vue@3.5.13(typescript@5.6.2)):
vue3-apexcharts@1.8.0(apexcharts@4.2.0)(vue@3.5.13(typescript@5.6.2)):
dependencies:
apexcharts: 4.1.0
apexcharts: 4.2.0
vue: 3.5.13(typescript@5.6.2)
vue@3.5.13(typescript@5.6.2):
@@ -4033,12 +4161,14 @@ snapshots:
vue: 3.5.13(typescript@5.6.2)
optionalDependencies:
typescript: 5.6.2
vite-plugin-vuetify: 2.0.4(vite@5.4.11(@types/node@20.17.9)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))(vuetify@3.7.5)
vite-plugin-vuetify: 2.0.4(vite@5.4.11(@types/node@20.17.10)(sass@1.82.0))(vue@3.5.13(typescript@5.6.2))(vuetify@3.7.5)
webidl-conversions@3.0.1: {}
webpack-virtual-modules@0.6.2: {}
websocketstream-polyfill@1.0.1: {}
whatwg-url@5.0.0:
dependencies:
tr46: 0.0.3
@@ -4061,7 +4191,7 @@ snapshots:
is-date-object: 1.0.5
is-finalizationregistry: 1.1.0
is-generator-function: 1.0.10
is-regex: 1.2.0
is-regex: 1.2.1
is-weakref: 1.0.2
isarray: 2.0.5
which-boxed-primitive: 1.1.0

View File

@@ -4,4 +4,20 @@ export default class Environment {
public static getUrlPrefix(): string {
return config.API_PREFIX;
}
public static getHomeAssistantUrl(): string {
return config.HOME_ASSISTANT_URL;
}
public static getHomeAssistantToken(): string {
return config.HOME_ASSISTANT_TOKEN;
}
public static getGarageDevice(): string {
return config.GARAGE_DEVICE;
}
public static getAlarmDevice(): string {
return config.ALARM_DEVICE;
}
}

View File

@@ -0,0 +1,64 @@
let messageId: number = 1;
export enum MessageType {
auth_invalid = 'auth_invalid',
auth_ok = 'auth_ok',
auth_required = 'auth_required',
event = 'event',
pong = 'pong',
result = 'result'
}
export interface OutgoingMessage {
id: number | undefined;
type: string;
}
export interface IncomingMessage {
id: number | undefined;
type: string;
success: boolean | undefined;
result: any;
}
export class AuthMessage implements OutgoingMessage {
id = undefined;
type: string = 'auth';
access_token: string | null = null;
constructor(access_token: string) {
this.access_token = access_token;
}
}
export class SubscribeEntitiesMessage implements OutgoingMessage {
id = messageId++;
type = 'subscribe_entities';
entity_ids: string[] = [];
constructor(entity_ids: string[]) {
this.entity_ids = entity_ids;
}
}
export interface EventMessage extends IncomingMessage {
event: StatesUpdates;
}
export interface EntityState {
/** state */
s: string;
/** attributes */
a: { [key: string]: any };
/** last_changed; if set, also applies to lu */
lc: number;
/** last_updated */
lu: number;
}
export interface StatesUpdates {
/** add */
a?: Record<string, EntityState>;
/** remove */
r?: string[]; // remove
}

View File

@@ -1,8 +1,9 @@
<script lang="ts" setup>
import { ref } from 'vue';
import { capitalize, ref } from 'vue';
import { useWeatherStore } from '@/stores/weatherStore';
import { useLaundryStore } from '@/stores/laundryStore';
import { usePowerStore } from '@/stores/powerStore';
import { useHomeAssistantStore } from '@/stores/homeAssistantStore';
const weatherStore = useWeatherStore();
weatherStore.start();
@@ -13,6 +14,9 @@
const powerStore = usePowerStore();
powerStore.start();
const homeAssistantStore = useHomeAssistantStore();
homeAssistantStore.start();
const currentTime = ref(new Date());
const timeFormatter = new Intl.DateTimeFormat('en-US', { hour: 'numeric', minute: '2-digit' });
@@ -45,40 +49,68 @@
{{ weatherStore.current?.Humidity?.toFixed(0) + '%' }}
</div>
<div
class="kiosk-generation pl-2 pt-4"
class="kiosk-generation text-center pt-4"
v-if="powerStore.current">
<v-icon
class="kiosk-device"
icon="mdi-solar-power-variant" />
<div>
{{ (powerStore.current!.Generation < 0 ? 0 : powerStore.current!.Generation) + '&thinsp;W' }}
</div>
</div>
<div
class="kiosk-consumption pl-2 pt-4"
class="kiosk-consumption text-center pt-4"
v-if="powerStore.current">
<v-icon
class="kiosk-device"
icon="mdi-home-lightning-bolt" />
<div>
{{ powerStore.current.Consumption + '&thinsp;W' }}
</div>
</div>
<div
class="kiosk-washer pl-2 pt-4"
class="kiosk-washer text-center pt-4"
v-if="laundryStore?.current?.washer !== undefined"
:class="laundryStore.current.washer.toString()">
<v-icon
class="kiosk-device"
icon="mdi-washing-machine" />
<div>
{{ laundryStore.current.washer ? 'On' : 'Off' }}
</div>
</div>
<div
class="kiosk-dryer pl-2 pt-4"
class="kiosk-dryer text-center pt-4"
v-if="laundryStore?.current?.dryer !== undefined"
:class="laundryStore.current.dryer.toString()">
<v-icon
class="kiosk-device"
icon="mdi-tumble-dryer" />
<div>
{{ laundryStore.current.dryer ? 'On' : 'Off' }}
</div>
</div>
<div
class="kiosk-garage-door text-center pt-4"
v-if="homeAssistantStore?.garageState">
<v-icon
class="kiosk-device"
:icon="homeAssistantStore.garageState === 'closed' ? 'mdi-garage' : 'mdi-garage-open'" />
<div>
{{ capitalize(homeAssistantStore.garageState) }}
</div>
</div>
<div
class="kiosk-house-alarm text-center pt-4"
v-if="homeAssistantStore?.houseAlarmState">
<v-icon
class="kiosk-device"
icon="mdi-shield-home" />
<div>
{{ capitalize(homeAssistantStore.houseAlarmState) }}
</div>
</div>
</div>
</v-container>
</template>
@@ -114,7 +146,7 @@
display: grid;
grid-template-columns: repeat(2, 50%);
grid-template-rows: repeat(5, auto) 1fr;
grid-template-rows: repeat(6, auto) 1fr;
grid-column-gap: 0px;
grid-row-gap: 0px;
@@ -123,7 +155,8 @@
'kiosk-date kiosk-date'
'kiosk-temperature kiosk-humidity'
'kiosk-generation kiosk-consumption'
'kiosk-washer kiosk-dryer';
'kiosk-washer kiosk-dryer'
'kiosk-garage-door kiosk-house-alarm';
}
.kiosk-time {
@@ -162,6 +195,14 @@
grid-area: kiosk-dryer;
}
.kiosk-garage-door {
grid-area: kiosk-garage-door;
}
.kiosk-house-alarm {
grid-area: kiosk-house-alarm;
}
.kiosk-device {
font-size: 2.5rem;
}

View File

@@ -0,0 +1,92 @@
import { defineStore } from 'pinia';
import { WebSocketStream } from 'websocketstream-polyfill';
import { MessageType, AuthMessage, IncomingMessage, SubscribeEntitiesMessage, EventMessage } from '@/models/home-assistant/home-assistant';
import Environment from '@/environment';
export const useHomeAssistantStore = defineStore('home-assistant', {
state: () => {
return {
garageState: null as string | null,
houseAlarmState: null as string | null,
_wss: null as WebSocketStream | null
};
},
actions: {
async start() {
if (!Environment.getHomeAssistantUrl() || !Environment.getHomeAssistantToken()) {
return;
}
const garageDevice = Environment.getGarageDevice();
const alarmDevice = Environment.getAlarmDevice();
this._wss = new WebSocketStream(Environment.getHomeAssistantUrl());
const { readable, writable } = await this._wss.opened;
const reader = readable.getReader();
const writer = writable.getWriter();
while (true) {
const { value, done } = await reader.read();
const message = JSON.parse(value as string) as IncomingMessage;
console.info(message);
switch (message.type) {
case MessageType.auth_required:
const authMessage = new AuthMessage(Environment.getHomeAssistantToken());
writer.write(JSON.stringify(authMessage));
break;
case MessageType.auth_ok:
const subscribeEntitiesMessage = new SubscribeEntitiesMessage([
garageDevice,
alarmDevice
]);
writer.write(JSON.stringify(subscribeEntitiesMessage));
break;
case MessageType.event:
const eventMessage = message as EventMessage;
if (!eventMessage?.event?.a) {
break;
}
const garageEntity = eventMessage.event.a[garageDevice];
if (garageEntity) {
this.$patch({ garageState: garageEntity.s });
}
const houseAlarmEntity = eventMessage.event.a[alarmDevice];
if (houseAlarmEntity) {
this.$patch({ houseAlarmState: houseAlarmEntity.s });
}
break;
case MessageType.result:
// Handle result type
break;
default:
// Handle unknown message type
break;
}
if (done) {
break;
}
}
},
async stop() {
if (!this._wss) {
return;
}
this._wss.close();
this._wss = null;
}
}
});