@signalk/app-dock 1.3.3 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -13
- package/app-icon.svg +21 -0
- package/dist/plugin/index.js +141 -0
- package/dist/plugin/schema.js +58 -0
- package/package.json +32 -14
- package/public/config.html +4 -437
- package/public/config.js +22 -0
- package/public/configpanel/PluginConfigurationPanel.js +1 -0
- package/public/configpanel/_virtual_mf-localSharedImportMap___mfe_internal___signalk_app_dock__mf_owner__1-_R-vaMcG.js +1 -0
- package/public/configpanel/dist-D1jGdgWH.js +4 -0
- package/public/configpanel/hostInit-D-z9PzRy.js +1 -0
- package/public/configpanel/pendingShares-BqCOmgFj.js +1 -0
- package/public/configpanel/vite-preload-helper-DHhhL8Zf.js +1 -0
- package/public/dock.css +1 -610
- package/public/dock.js +1 -1107
- package/public/index.html +6 -6
- package/public/remoteEntry.js +1 -1
- package/plugin/index.js +0 -273
- package/public/540.js +0 -2
- package/public/540.js.LICENSE.txt +0 -9
- package/public/805.js +0 -1
- package/public/main.js +0 -1
package/public/index.html
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, viewport-fit=cover" />
|
|
6
6
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
7
|
-
<link rel="manifest" href="manifest.webmanifest" />
|
|
8
|
-
<link rel="icon" type="image/svg+xml" href="app-icon.svg" />
|
|
9
|
-
<link rel="apple-touch-icon" href="app-icon-180.png" />
|
|
7
|
+
<link rel="manifest" href="./manifest.webmanifest" />
|
|
8
|
+
<link rel="icon" type="image/svg+xml" href="./app-icon.svg" />
|
|
9
|
+
<link rel="apple-touch-icon" href="./app-icon-180.png" />
|
|
10
10
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
11
11
|
<meta name="apple-mobile-web-app-title" content="App Dock" />
|
|
12
12
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
|
|
15
15
|
<meta http-equiv="Pragma" content="no-cache" />
|
|
16
16
|
<title>SK Dock</title>
|
|
17
|
-
<
|
|
17
|
+
<script type="module" crossorigin src="./dock.js"></script>
|
|
18
|
+
<link rel="stylesheet" crossorigin href="./dock.css">
|
|
18
19
|
</head>
|
|
19
20
|
<body>
|
|
20
21
|
<!-- Full-screen iframe container: only the active iframe is visible -->
|
|
@@ -22,7 +23,7 @@
|
|
|
22
23
|
|
|
23
24
|
<!-- Welcome screen shown before any app is opened -->
|
|
24
25
|
<div id="idle-hint">
|
|
25
|
-
<img id="idle-logo" src="app-icon.svg" alt="App Dock" />
|
|
26
|
+
<img id="idle-logo" src="./app-icon.svg" alt="App Dock" />
|
|
26
27
|
<div id="idle-title">App Dock</div>
|
|
27
28
|
<div id="idle-version"></div>
|
|
28
29
|
<div id="idle-hint-text"></div>
|
|
@@ -68,6 +69,5 @@
|
|
|
68
69
|
</div>
|
|
69
70
|
</div>
|
|
70
71
|
|
|
71
|
-
<script src="dock.js"></script>
|
|
72
72
|
</body>
|
|
73
73
|
</html>
|
package/public/remoteEntry.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var _signalk_app_dock;(()=>{"use strict";var e,r,t,n,o,a,i,u,l,s,p,f,c,d,h,v,g,m,b,y={623(e,r,t){var n={"./PluginConfigurationPanel":()=>t.e(805).then(()=>()=>t(805))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),a=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>a})}},k={};function w(e){var r=k[e];if(void 0!==r)return r.exports;var t=k[e]={exports:{}};return y[e](t,t.exports,w),t.exports}w.m=y,w.c=k,w.d=(e,r)=>{for(var t in r)w.o(r,t)&&!w.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},w.f={},w.e=e=>Promise.all(Object.keys(w.f).reduce((r,t)=>(w.f[t](e,r),r),[])),w.u=e=>e+".js",w.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),w.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@signalk/app-dock:",w.l=(t,n,o,a)=>{if(e[t])e[t].push(n);else{var i,u;if(void 0!==o)for(var l=document.getElementsByTagName("script"),s=0;s<l.length;s++){var p=l[s];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==r+o){i=p;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",w.nc&&i.setAttribute("nonce",w.nc),i.setAttribute("data-webpack",r+o),i.src=t),e[t]=[n];var f=(r,n)=>{i.onerror=i.onload=null,clearTimeout(c);var o=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(e=>e(n)),r)return r(n)},c=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),u&&document.head.appendChild(i)}},w.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{w.S={};var e={},r={};w.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];w.o(w.S,t)||(w.S[t]={});var a=w.S[t],i="@signalk/app-dock",u=[];return"default"===t&&((e,r,t,n)=>{var o=a[e]=a[e]||{},u=o[r];(!u||!u.loaded&&(1!=!u.eager?n:i>u.from))&&(o[r]={get:()=>w.e(540).then(()=>()=>w(540)),from:i,eager:!1})})("react","19.2.4"),e[t]=u.length?Promise.all(u).then(()=>e[t]=1):1}}})(),(()=>{var e;w.g.importScripts&&(e=w.g.location+"");var r=w.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),w.p=e})(),t=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},n=(e,r)=>{e=t(e),r=t(r);for(var n=0;;){if(n>=e.length)return n<r.length&&"u"!=(typeof r[n])[0];var o=e[n],a=(typeof o)[0];if(n>=r.length)return"u"==a;var i=r[n],u=(typeof i)[0];if(a!=u)return"o"==a&&"n"==u||"s"==u||"u"==a;if("o"!=a&&"u"!=a&&o!=i)return o<i;n++}},o=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,a=1;a<e.length;a++)n--,t+="u"==(typeof(u=e[a]))[0]?"-":(n>0?".":"")+(n=2,u);return t}var i=[];for(a=1;a<e.length;a++){var u=e[a];i.push(0===u?"not("+l()+")":1===u?"("+l()+" || "+l()+")":2===u?i.pop()+" "+i.pop():o(u))}return l();function l(){return i.pop().replace(/^\((.+)\)$/,"$1")}},a=(e,r)=>{if(0 in e){r=t(r);var n=e[0],o=n<0;o&&(n=-n-1);for(var i=0,u=1,l=!0;;u++,i++){var s,p,f=u<e.length?(typeof e[u])[0]:"";if(i>=r.length||"o"==(p=(typeof(s=r[i]))[0]))return!l||("u"==f?u>n&&!o:""==f!=o);if("u"==p){if(!l||"u"!=f)return!1}else if(l)if(f==p)if(u<=n){if(s!=e[u])return!1}else{if(o?s>e[u]:s<e[u])return!1;s!=e[u]&&(l=!1)}else if("s"!=f&&"n"!=f){if(o||u<=n)return!1;l=!1,u--}else{if(u<=n||p<f!=o)return!1;l=!1}else"s"!=f&&"n"!=f&&(l=!1,u--)}}var c=[],d=c.pop.bind(c);for(i=1;i<e.length;i++){var h=e[i];c.push(1==h?d()|d():2==h?d()&d():h?a(h,r):!d())}return!!d()},i=(e,r)=>e&&w.o(e,r),u=e=>(e.loaded=1,e.get()),l=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),s=(e,r,t)=>{var o=t?l(e[r]):e[r];return Object.keys(o).reduce((e,r)=>!e||!o[e].loaded&&n(e,r)?r:e,0)},p=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+o(n)+")",f=e=>{throw new Error(e)},c=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},d=(e,r,t)=>t?t():((e,r)=>f("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),h=(e=>function(r,t,n,o,a){var i=w.I(r);return i&&i.then&&!n?i.then(e.bind(e,r,w.S[r],t,!1,o,a)):e(r,w.S[r],t,n,o,a)})((e,r,t,n,o,l)=>{if(!i(r,t))return d(e,t,l);var f=s(r,t,n);return a(o,f)||c(p(r,t,f,o)),u(r[t][f])}),v={},g={231:()=>h("default","react",!1,[1,19],()=>w.e(540).then(()=>()=>w(540)))},m={805:[231]},b={},w.f.consumes=(e,r)=>{w.o(m,e)&&m[e].forEach(e=>{if(w.o(v,e))return r.push(v[e]);if(!b[e]){var t=r=>{v[e]=0,w.m[e]=t=>{delete w.c[e],t.exports=r()}};b[e]=!0;var n=r=>{delete v[e],w.m[e]=t=>{throw delete w.c[e],r}};try{var o=g[e]();o.then?r.push(v[e]=o.then(t).catch(n)):t(o)}catch(e){n(e)}}})},(()=>{var e={489:0};w.f.j=(r,t)=>{var n=w.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else{var o=new Promise((t,o)=>n=e[r]=[t,o]);t.push(n[2]=o);var a=w.p+w.u(r),i=new Error;w.l(a,t=>{if(w.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}},"chunk-"+r,r)}};var r=(r,t)=>{var n,o,[a,i,u]=t,l=0;if(a.some(r=>0!==e[r])){for(n in i)w.o(i,n)&&(w.m[n]=i[n]);u&&u(w)}for(r&&r(t);l<a.length;l++)o=a[l],w.o(e,o)&&e[o]&&e[o][0](),e[o]=0},t=self.webpackChunk_signalk_app_dock=self.webpackChunk_signalk_app_dock||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})();var S=w(623);_signalk_app_dock=S})();
|
|
1
|
+
import{t as e}from"./configpanel/dist-D1jGdgWH.js";import{t}from"./configpanel/vite-preload-helper-DHhhL8Zf.js";var n={},r=new Set,i=new Map;function a(e,t){let n=i.get(e);return n||(n=Promise.resolve().then(t).catch(t=>{throw i.delete(e),t}),i.set(e,n)),n}async function o(e){if(typeof document>`u`)return;let t=n[e]||[];await Promise.all(t.map(e=>{let t=new URL(e,import.meta.url).href;return r.has(t)||(r.add(t),document.querySelector(`link[rel="stylesheet"][href="${t}"]`))?Promise.resolve():new Promise((e,n)=>{let r=document.createElement(`link`);r.rel=`stylesheet`,r.href=t,r.onload=()=>e(),r.onerror=()=>n(Error(`[Module Federation] Failed to load CSS asset: ${t}`)),document.head.appendChild(r)})}))}var s={"./PluginConfigurationPanel":async()=>{await o(`./PluginConfigurationPanel`),await Promise.all([]);let e=await a(`./PluginConfigurationPanel`,()=>t(()=>import(`./configpanel/PluginConfigurationPanel.js`),[])),n=e&&e.__mf_remote_dependency_pending;n&&typeof n.then==`function`&&await n;let r={};return Object.assign(r,e),Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),r}};typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var c=`__mf_init__virtual:mf:__mfe_internal___signalk_app_dock__mf_owner__279176739321140__mf_v__runtimeInit__mf_v__.js__`,l=globalThis[c];if(!l){let e,t,n=new Promise((n,r)=>{e=n,t=r});l=globalThis[c]={initPromise:n,initResolve:e,initReject:t}}var u=l.initResolve,{initReject:d}=l,f=e=>{throw d(e),e},p=`__mf_module_cache__`;globalThis[p]||={share:{},remote:{}},globalThis[p].share||={},globalThis[p].remote||={};var m=globalThis[p];for(let e of Object.keys(m.share))if(e.startsWith(`default:`)){let t=e.slice(8);m.share[t]===void 0&&(m.share[t]=m.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;m.share[t]===void 0&&(m.share[t]=m.share[e])}var h={},g=Array.isArray(`default`)?`default`:[`default`],_=`default`,v=`_signalk_app_dock`,y=[],b,x;async function S(e){for(let t=0;;t++)try{return await e()}catch(e){throw e}}async function C(){return b||=S(()=>t(()=>import(`./configpanel/_virtual_mf-localSharedImportMap___mfe_internal___signalk_app_dock__mf_owner__1-_R-vaMcG.js`),[])).catch(e=>{throw b=void 0,e}),b}async function w(){return s}async function T(t={},n=[],r={}){let i=(e,t,n,r)=>{let i=(Array.isArray(r)?r[0]:r)||`default`,a=t||!n?e:e+`@`+n,o={canonical:i+`:`+a};return i==="default"&&(o.aliases=[a]),o},a=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},o=Symbol.for(`module-federation.shared-cache-listeners`),s=Symbol.for(`module-federation.shared-cache-owners`),c=e=>{let t=e[s];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,s,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},d=(e,t)=>e[s]?.[t.canonical],p=e=>{let t=[e,e?.default];for(let e of t)if(e&&typeof e==`object`){for(let t of[`__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE`,`__TEST_INTERNALS`,`__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`]){let n=e[t];if(n&&typeof n==`object`)return{internals:n}}if(typeof e.useState==`function`)return{hook:e.useState}}},b=(e,t)=>{if(e===t)return!0;let n=p(e),r=p(t);if(!n||!r)return!1;let i=n.internals,a=r.internals;return i!==void 0||a!==void 0?i!==void 0&&i===a:typeof n.hook==`function`&&n.hook===r.hook},w=(e,t,n,r)=>{let i=a(e,t);if(i!==void 0&&b(i,n))return n;e[t.canonical]=n;let l=t.aliases||[];for(let t of l)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let u=e[s];r===void 0?u&&delete u[t.canonical]:c(e)[t.canonical]=r;let d=e[o]?.[t.canonical];if(d)for(let e of d)e(n);return n},T=Symbol.for(`module-federation.tree-shaking-shared-cache`),E=e=>{let t=e[T];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,T,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},D=(e,t,n,r)=>{if(!Array.isArray(n))return r;let i=[...new Set(n)].sort(),a=E(e),o=a[t.canonical]||=[],s=o.find(e=>e.providedExports.length===i.length&&e.providedExports.every((e,t)=>e===i[t]));return s?s.value=r:o.push({providedExports:i,value:r}),r},O=Symbol.for(`module-federation.tree-shaking-shared-selection-cache`),k=e=>{let t=e[O];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,O,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},A=(e,t,n)=>{let r=a(e,t);return r===void 0?e[O]?.[t.canonical]?.[n]:r},ee=(e,t,n,r)=>{let i=k(e),a=i[t.canonical]||=Object.create(null);return a[n]=r,r},j=globalThis.__FEDERATION__?.__INSTANCES__||[],M=n.find(e=>e?.from)?.from,N=j.find(e=>e?.options?.name===M&&e?.shareScopeMap?.default===t)||j.find(e=>e?.options?.name!==v&&e?.shareScopeMap?.default===t),te=Object.create(null),ne=e=>{let t=Object.create(null);for(let[n,r]of Object.entries(e||{}))t[n]=Object.assign(Object.create(null),r);return t},re=(e,t)=>{for(let[n,r]of Object.entries(U.shareScopeMap?.[e]||{}))for(let[e,i]of Object.entries(r||{})){if(!i||i.get===F[n]?.get)continue;let r=t[n]||={};r[e]===void 0&&(r[e]=i)}},ie=(e,t)=>{re(e,t);let n=!N&&Object.values(t||{}).some(e=>Object.values(e||{}).some(I)),r=n?ne(t):t;return te[e]={host:t,runtime:r,isWebpackScope:n},r},ae=()=>{let e=Object.values(te).filter(({isWebpackScope:e})=>e);if(e.length!==0)for(let{host:t,runtime:n}of e)for(let[e,r]of Object.entries(t||{})){let t=n[e]||=Object.create(null);for(let[e,n]of Object.entries(r||{}))t[e]=n}},P=Object.create(null);for(let[e,n]of Object.entries(t)){let t=P[e]=Object.create(null);for(let[e,r]of Object.entries(n))t[e]=Object.assign({},r)}let{usedShared:F,usedRemotes:oe}=await C();function I(e){if(typeof e?.get!=`function`)return!1;let t=Function.prototype.toString.call(e.get);return t.includes(`__webpack_require__`)||/\.\s*e\s*\([^)]*\)\s*\.then\s*\(/.test(t)}let se=Object.values(P).some(e=>Object.values(e||{}).some(I)),ce=e=>{let t=e.split(`/`);return e.startsWith(`@`)?t.slice(0,2).join(`/`):t[0]},L=(e,n,r,i)=>{if(typeof __mfSelectExternalSharedProvider!=`function`)return;let a=ce(e),o=!i||a===e?[[e,n]]:[[e,n],[a,F[a]]];for(let[n,i]of o){if(!i)continue;let a=r?n===e?r:P[n]:P[n]??t[n],o=__mfSelectExternalSharedProvider(a,n,i,`version-first`);if(o)return o}},le=(e,t,n)=>{let r=L(e,t,n,!0);return r&&I(r)&&!r.lib&&!r.loaded?r:void 0};var R=h[_];if(R||=h[_]={from:v},n.indexOf(R)>=0)return;n.push(R);let z=e=>{let t=e;for(let e=0;e<5;e++){let e=t?.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},ue=[],de=globalThis.window===void 0?await Promise.all([]):[],B=`__mf_vite_runtime_share_load_id__`,fe=0,V=new Map,H=new Map,U=e({name:v,remotes:oe,shared:F,plugins:[pe(),me(),...ue,...de],shareStrategy:`version-first`});U.initShareScopeMap(`default`,ie(`default`,t));function pe(){return{name:`vite-share-pin-lifecycle-plugin`,resolveShare(e){let t=e.shareInfo?.[B],n=t===void 0?void 0:H.get(t);if(!n)return e;let r=e.resolver;return e.resolver=(...e)=>(n.pinned.reapply(),r(...e)),n.pinned.reveal(),e}}}function me(){return{name:`vite-real-name-snapshot-plugin`,afterLoadSnapshot(e){let t=e&&e.remoteSnapshot,n=t&&t.globalName,r=t&&t.version;if(!n||!r||!t.remoteEntry)return e;let i=globalThis.__FEDERATION__&&globalThis.__FEDERATION__.moduleInfo,a=n+`:`+r;return i&&!i[a]&&(i[a]=t),e}}}let he=U.sharedHandler.hooks.lifecycle.resolveShare;U.__mfKeepAdoptedProviders||(U.__mfKeepAdoptedProviders=!0,U.sharedHandler?.hooks?.lifecycle?.afterRegisterShare?.on?.(e=>{let{shared:t,previousShared:n,registeredShared:r}=e||{},i=U.shareScopeMap?.[e.scope]?.[e.pkgName];t&&i&&(t.shareConfig?.import===!1?r===t&&n&&n.shareConfig?.import!==!1&&i[t.version]===t&&(i[t.version]=n):r!==t&&r?.shareConfig?.import===!1&&!r.loaded&&i[t.version]===r&&(i[t.version]=t))}));let W=new WeakMap;he.on(e=>{let t=e.shareInfo?.[B],n=e.resolver;return typeof n==`function`&&(e.resolver=(...r)=>{let i=n(...r);if(i?.shared?.shareConfig?.import===!1&&typeof __mfSelectSharedProvider==`function`&&F[e.pkgName]){let t=__mfSelectSharedProvider(e.shareScopeMap?.[e.scope]?.[e.pkgName],e.pkgName,F[e.pkgName],`version-first`);t&&t.shareConfig?.import!==!1&&(i={shared:t,useTreesShaking:i.useTreesShaking})}let a=i?.shared;return a&&(typeof a==`object`||typeof a==`function`)&&!W.has(a)&&W.set(a,{from:a.from}),t!==void 0&&a&&V.set(t,a),i}),e});let ge=(e,t,n,r)=>{if(!e||e[t]!==n)return;let i=Object.assign({},r,{version:r.version??t,scope:r.scope??n?.scope??[`default`],strategy:`loaded-first`}),a=r.from;e[t]=i;let o=()=>n===void 0?e[t]===void 0:e[t]===n;return{provider:i,reveal(){return e[t]===i&&(n===void 0?delete e[t]:e[t]=n,!0)},reapply(){return o()?(e[t]=i,!0):!1},release(s,c=!0){return r.from=a,e[t]===i?c?s?(i.from=a,s&&i.lib&&(i.loaded=!0),r.strategy===void 0?delete i.strategy:i.strategy=r.strategy,!0):(n===void 0?delete e[t]:e[t]=n,!1):(n===void 0?delete e[t]:e[t]=n,!0):!c&&o()}}},_e=e=>Object.entries(e||{}).map(([e,t])=>({provider:t,version:e,from:t.from,registered:!0})),ve=(e,t)=>{if(t===void 0)return;let n;for(let r of e){let e=r.provider,i=e.treeShaking||e;if(r.loadedFactory===t||e.lib===t||i.lib===t){if(n)return;n=r}}return n},ye=async(e,t,n)=>{let r=++fe;H.set(r,{pinned:n});try{let n=await U.loadShare(e,{customShareInfo:{shareConfig:t,[B]:r}});return{factory:n===!1?void 0:n,selectedProvider:V.get(r)}}finally{V.delete(r),H.delete(r)}},G=async(e,t,n,r,i,a,o=!0)=>{let s=a.from,c=ge(n,r,i,a);if(!c)return;let l;try{l=await ye(e,t,c)}catch(e){throw c.release(!1),e}let u=l?.factory;if(u===void 0){c.release(!1);return}let d=_e(n),f=c.provider.treeShaking||c.provider,p=c.provider.lib===u||f.lib===u;if(!o&&p){let e=d.findIndex(e=>e.provider===c.provider);e!==-1&&d.splice(e,1)}!o&&!d.some(e=>e.provider===a)&&d.push({provider:a,version:r,from:s,registered:!1,loadedFactory:p?u:void 0});let m=!o&&l.selectedProvider===c.provider&&p?a:l.selectedProvider;if(m&&!d.some(e=>e.provider===m)){let e=W.get(m),t=typeof m.version==`string`&&m.version?m.version:r;d.push({provider:m,version:t,from:e?e.from:m.from,registered:n?.[t]===m,loadedFactory:u})}let h=d.find(e=>e.provider===m)??ve(d,u);if(!c.release(!0,h?.provider===c.provider)||!h)return;let g=W.get(h.provider);h.from=h.provider===a?s:g?g.from:h.provider.from,g&&(h.provider.from=g.from);let _=typeof u==`function`?u():u,v=await Promise.resolve(_);if(!(h.registered&&n?.[h.version]!==h.provider))return{provider:h.provider,selection:h,resolved:v}},K=new Set,q=new Map,be=async(e,n,r)=>{let o=!!n.shareConfig?.singleton;if(!o&&n.canLiveRebind!==!1)try{let s=__mfSelectExternalSharedProvider(r,e,n,`version-first`),c=__mfFindSharedProviderEntry(r,s);if(!c||n.shareConfig?.import===!1&&__mfMatchesSharedProvider(s,n)||s?.shareConfig?.import===!1)return;let{version:l}=c;if(!o&&l!==n.version||!s.lib&&!s.loading&&!(s.loaded&&typeof s.get==`function`))return;let u=i(e,o,n.version,n.scope);if(a(m.share,u)!==void 0)return;let d=t[e],f=d?.[l];if(c.registered&&!__mfMatchesSharedProvider(f,s))return;let p,h=s.lib;if(!h&&I(s)||(!h&&s.loading&&(h=await s.loading),!h&&s.loaded&&typeof s.get==`function`&&(h=await s.get()),!h))return;let g=typeof h==`function`?h():h,_=await Promise.resolve(g),v=c.registered?f:s;p={provider:v,selection:{provider:v,version:l,from:s.from,registered:c.registered},resolved:_};let y=p?.provider,b=p?.selection;if(!b)return;let x=p?.resolved;if(x===void 0||a(m.share,u)!==void 0||b.registered&&d?.[b.version]!==y)return;w(m.share,u,z(x),b.from),K.add(y)}catch(t){console.error(`[Module Federation] Failed to bridge materialized shared module "`+e+`"`,t)}},J=async(e,n,r,o,s)=>{try{let c=i(e,n.shareConfig?.singleton,n.version,n.scope),l=a(m.share,c),u=d(m.share,c),f=__mfSelectExternalSharedProvider(r,e,n,`version-first`),p=f||__mfSelectSharedProvider(r,e,n,`version-first`)||n,h=__mfFindSharedProviderEntry(r,p);if(!h)return;let g=__mfMatchesSharedProvider(p,n),{version:_}=h;if(!n.shareConfig?.singleton&&_!==n.version)return;let y=o?.[_],b=__mfResolveExternalSharedProvider(j,N,t,`default`,e,h,f,y,`version-first`);if(!b&&!g)return;let{provider:x,scopeRootProvider:S}=b||{provider:p,scopeRootProvider:void 0};if(n.canLiveRebind===!1||n.shareConfig?.import===!1&&__mfMatchesSharedProvider(x,n)||x?.shareConfig?.import===!1||l!==void 0&&u!==v)return;let C=t[e],T=C?.[_];if(h.registered&&!S&&!__mfMatchesSharedProvider(T,x))return;let E=await G(e,n.shareConfig,C,_,T,x,h.registered&&!g),D=E?.provider,O=E?.selection;if(!O||__mfMatchesSharedProvider(D,n)||s&&(s.version!==O.version||!__mfMatchesSharedProvider({from:O.from},s.provider))||K.has(D))return;let k=E?.resolved;if(k===void 0)return;let A=a(m.share,c),ee=d(m.share,c);if(A!==void 0&&ee!==v||O.registered&&C?.[O.version]!==D)return;s||q.set(e,{version:O.version,provider:{from:O.from}}),K.add(D);let M=z(k);w(m.share,c,M,O.from)}catch(t){console.error(`[Module Federation] Failed to bridge external shared module "`+e+`"`,t)}};for(let e of y)await Promise.all(e.map(async e=>{let t=F[e];t&&t.materialize!==!1&&!t.treeShaking&&await be(e,t,P[e])}));for(let[e,t]of Object.entries(F)){if(t.treeShaking)continue;let n=i(e,t.shareConfig?.singleton,t.version,t.scope);if(a(m.share,n)!==void 0)continue;let r=i(e,!0,t.version,t.scope),o=a(m.share,r);o!==void 0&&w(m.share,n,o,d(m.share,r))}let xe=[],Se=[],Y=new Map(xe.map((e,t)=>[e,t])),Ce={},X=xe.filter(e=>F[e]&&(F[e].materialize!==!1||F[e].shareConfig?.import===!1&&!F[e].lazy));m.providerInit||=new Map;let we=(e,t)=>{let n=m.providerInit.get(e);if(n)return n;let r=Promise.resolve().then(t);return m.providerInit.set(e,r),r.catch(()=>m.providerInit.delete(e)),r};var Te=async e=>{let t=new Set(e);for(let e of Se)await Promise.all(e.filter(e=>t.has(e)).map(async e=>{let t=F[e],n=i(e,t.shareConfig?.singleton,t.version,t.scope);if(t.shareConfig?.import===!1||t.treeShaking||a(m.share,n)!==void 0)return;let r=i(e,!0,t.version,t.scope),o=a(m.share,r);if(o!==void 0){w(m.share,n,o,d(m.share,r));return}let s=typeof L==`function`?L(e,t):void 0;if(s){let r=s.lib;if(!r&&s.loading&&(r=await s.loading),!r&&s.loaded&&typeof s.get==`function`&&(r=await s.get()),r){let e=typeof r==`function`?r():r,t=await Promise.resolve(e);w(m.share,n,(e=>{let t=e;for(let e=0;e<5;e++){let e=t?.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(t),s.from);return}if(typeof I==`function`&&I(s)&&(t.shareConfig?.singleton||__mfFindSharedProviderEntry(P[e],s)?.version===t.version))return}let c=n.canonical,l=await we(c,async()=>{let e=await t.get(),n=typeof e==`function`?e():e;return Promise.resolve(n)});for(let n of U.options.shared?.[e]||[])n.get===t.get&&(n.eager=!0);let u=(e=>{let t=e;for(let e=0;e<5;e++){let e=t?.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(l),f=u===l?{...l}:u;f.__esModule!==!0&&Object.defineProperty(f,"__esModule",{value:!0,enumerable:!1}),w(m.share,n,f,v)}))};let Z=e=>{let t=F[e];if(!t.treeShaking&&t.shareConfig?.import!==!1)return!1;let n=i(e,t.shareConfig?.singleton,t.version,t.scope);return t.treeShaking?A(m.share,n,v)===void 0&&a(m.share,n)===void 0:a(m.share,n)===void 0},Ee=e=>{let t=F[e],n=i(e,t.shareConfig?.singleton,t.version,t.scope);return(t.treeShaking?A(m.share,n,v)??a(m.share,n):a(m.share,n))===void 0?t.treeShaking||t.shareConfig?.import===!1?!0:typeof __mfSelectExternalSharedProvider==`function`&&!!__mfSelectExternalSharedProvider(P[e],e,t,`version-first`):!1},De=e=>{let t=!0;for(;t;){t=!1;for(let n of X){let r=Y.get(n);e.has(r)||(Ce[r]||[]).some(t=>e.has(t))&&(e.add(r),t=!0)}}return e},Oe=De(new Set(X.filter(Ee).map(e=>Y.get(e)))),ke=X.filter(e=>!Oe.has(Y.get(e)));var Ae=X.filter(e=>Oe.has(Y.get(e)));await Te(ke).catch(f);try{await S(async()=>{await Promise.all(await U.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:n}))})}catch(e){console.error(`[Module Federation]`,e)}ae();let je=async()=>{for(let e of y)await Promise.all(e.map(async e=>{let n=F[e];n&&n.materialize!==!1&&!n.treeShaking&&await J(e,n,t[e],P[e],void 0)}))};se?x=je:await je();try{let e=globalThis.__FEDERATION__?.__SHARE__,t=Object.create(null);if(e)for(let[,n]of Object.entries(e))for(let e of g){let r=n?.[e];if(r)for(let[e,n]of Object.entries(r)){let r=F?.[e],i=P[e],a=q.get(e);if(!r||!i||!a||r.treeShaking)continue;let o=t[e]||(t[e]=Object.create(null));for(let[e,t]of Object.entries(n)){if(!t.lib||a.version!==e||!__mfMatchesSharedProvider(t,a.provider))continue;let n=i[e];(t===n||n?.from&&t.from===n.from)&&(t===r||r.from&&t.from===r.from||o[e]===void 0&&(o[e]=t))}}}for(let e of y)await Promise.all(e.map(async e=>{let n=t[e];n&&await J(e,F[e],n,P[e],q.get(e))}))}catch(e){console.error(`[Module Federation] Failed to bridge external shared modules`,e)}let Me=async()=>{},Ne=async(e,n)=>{let r=i(e,n.shareConfig?.singleton,n.version,n.scope),o=n.treeShaking?A(m.share,r,v):a(m.share,r);if(n.shareConfig?.import!==!1||o!==void 0||le(e,n,P[e]))return;let s=e=>{let t=e;for(let e=0;e<5;e++){let e=t?.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},c=t?.[e],l=__mfSelectSharedProvider(c,e,n,`version-first`)||n,u=__mfFindSharedProviderEntry(c,l);if(!u)return;let d=e=>e===n||e?.shareConfig?.import===!1;if(d(l))return;let{version:f}=u,p=c?.[f],h=await G(e,n.shareConfig,c,f,p,l,u.registered),g=h?.selection,_=h?.provider,y=h?.resolved;if(!g||d(_)||y===void 0||(n.treeShaking?A(m.share,r,v):a(m.share,r))!==void 0||g.registered&&c?.[g.version]!==_)return;let b=s(y);if(n.treeShaking){let e=n.treeShaking.providedExports??n.treeShaking.usedExports??[];D(m.share,r,e,b),ee(m.share,r,v,b)}else w(m.share,r,b,g.from)},Pe=[],Q=new Set;for(let e of Ae){let t=F[e],n=Y.get(e);if(Z(e))try{t.treeShaking?await Me(e,t):t.shareConfig?.import===!1&&await Ne(e,t)}catch(t){console.error(`[Module Federation] Failed to resolve runtime-only shared module "${e}"`,t)}Z(e)&&Q.add(n)}De(Q),Pe.push(...Ae.filter(e=>!Q.has(Y.get(e)))),await Te(Pe).catch(f);let $=new Map;return l.loadLazyShares=async e=>{let n=new Set(e);for(let e of y)await Promise.all(e.filter(e=>n.has(e)).map(e=>{let n=F[e];if(!n||!n.lazy||!Z(e))return;let r=$.get(e);return r||(r=J(e,n,t[e],P[e],void 0).then(()=>Z(e)?Ne(e,n):void 0),r.catch(()=>$.delete(e)),$.set(e,r)),r}))},u(U),U}async function E(e){let t=await w();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return x&&await x(),m.pendingShareLoads&&await Promise.all(m.pendingShareLoads),t[e]().then(e=>()=>e)}export{E as get,T as init};
|
package/plugin/index.js
DELETED
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const DEFAULT_APPS = [
|
|
4
|
-
{
|
|
5
|
-
enabled: true,
|
|
6
|
-
autostart: true,
|
|
7
|
-
url: '/@signalk/freeboard-sk/',
|
|
8
|
-
label: 'Freeboard-SK',
|
|
9
|
-
icon: '/@signalk/freeboard-sk/assets/icons/icon-72x72.png',
|
|
10
|
-
color: ''
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
enabled: true,
|
|
14
|
-
autostart: false,
|
|
15
|
-
url: '/@halos-org/skip/',
|
|
16
|
-
label: 'Skip',
|
|
17
|
-
icon: '/@halos-org/skip/assets/icon-72x72.png',
|
|
18
|
-
color: ''
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
enabled: true,
|
|
22
|
-
autostart: false,
|
|
23
|
-
url: '/admin/',
|
|
24
|
-
label: 'Settings',
|
|
25
|
-
icon: '/@signalk/app-dock/icon-settings.svg',
|
|
26
|
-
color: '#78788c'
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
|
|
30
|
-
module.exports = (app) => {
|
|
31
|
-
let pluginSettings = {}
|
|
32
|
-
let resolvedApps = []
|
|
33
|
-
let running = false
|
|
34
|
-
|
|
35
|
-
function resolveApps(settings) {
|
|
36
|
-
return (Array.isArray(settings.apps) ? settings.apps : [])
|
|
37
|
-
.filter((a) => a.enabled !== false)
|
|
38
|
-
.map((a) => ({
|
|
39
|
-
label: a.label || a.url,
|
|
40
|
-
url: a.url,
|
|
41
|
-
icon: a.icon || null,
|
|
42
|
-
color: a.color || null,
|
|
43
|
-
autostart: a.autostart || false
|
|
44
|
-
}))
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// The configuration as saved, the one /config serves. While the plugin is
|
|
48
|
-
// not running, pluginSettings is empty (never started) or holds what the
|
|
49
|
-
// last start() got, which a later save may have replaced.
|
|
50
|
-
function savedSettings() {
|
|
51
|
-
return app.readPluginOptions().configuration || {}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function getWebapps() {
|
|
55
|
-
return (app.webapps || [])
|
|
56
|
-
.filter((w) => w.name !== '@signalk/app-dock' && w.name !== '@signalk/server-admin-ui')
|
|
57
|
-
.map((w) => ({
|
|
58
|
-
name: w.name,
|
|
59
|
-
label: w.signalk?.displayName || w.name,
|
|
60
|
-
url: `/${w.name}/`,
|
|
61
|
-
icon: w.signalk?.appIcon ? `/${w.name}/${w.signalk.appIcon.replace(/^\.\//, '')}` : null
|
|
62
|
-
}))
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const plugin = {
|
|
66
|
-
id: 'signalk-app-dock',
|
|
67
|
-
name: 'App Dock',
|
|
68
|
-
|
|
69
|
-
start(settings) {
|
|
70
|
-
if (!Array.isArray(settings.apps)) {
|
|
71
|
-
const seeded = DEFAULT_APPS.map((a) => ({ ...a }))
|
|
72
|
-
const seededSettings = {
|
|
73
|
-
showNightModeButton: true,
|
|
74
|
-
showFullscreenButton: false,
|
|
75
|
-
showExitButton: false,
|
|
76
|
-
...settings,
|
|
77
|
-
apps: seeded
|
|
78
|
-
}
|
|
79
|
-
app.debug('App Dock: first run, seeding %d default apps', seeded.length)
|
|
80
|
-
app.savePluginOptions(seededSettings, (err) => {
|
|
81
|
-
if (err) app.error('App Dock: failed to save default apps: ' + err.message)
|
|
82
|
-
else app.debug('App Dock: saved default apps to config')
|
|
83
|
-
})
|
|
84
|
-
settings = seededSettings
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
pluginSettings = settings
|
|
88
|
-
|
|
89
|
-
if (settings.showNightModeButton) {
|
|
90
|
-
app.registerPutHandler(
|
|
91
|
-
'vessels.self',
|
|
92
|
-
'environment.mode',
|
|
93
|
-
(context, path, value, _callback) => {
|
|
94
|
-
if (value !== 'day' && value !== 'night') {
|
|
95
|
-
return { state: 'COMPLETED', statusCode: 400, message: 'Invalid mode' }
|
|
96
|
-
}
|
|
97
|
-
app.handleMessage(plugin.id, {
|
|
98
|
-
updates: [{ values: [{ path: 'environment.mode', value }] }]
|
|
99
|
-
})
|
|
100
|
-
return { state: 'COMPLETED', statusCode: 200 }
|
|
101
|
-
},
|
|
102
|
-
plugin.id
|
|
103
|
-
)
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
resolvedApps = resolveApps(settings)
|
|
107
|
-
running = true
|
|
108
|
-
|
|
109
|
-
app.debug('App Dock: resolved %d apps: %s', resolvedApps.length, resolvedApps.map((a) => a.label).join(', '))
|
|
110
|
-
},
|
|
111
|
-
|
|
112
|
-
stop() {
|
|
113
|
-
running = false
|
|
114
|
-
},
|
|
115
|
-
|
|
116
|
-
registerWithRouter(router) {
|
|
117
|
-
// Routes registered on the router itself are admin-only. signalk-server
|
|
118
|
-
// 2.31 and later add router.access(), which opens a route to readonly or
|
|
119
|
-
// readwrite users; on older servers every route stays admin-only.
|
|
120
|
-
const openTo = (level) => (typeof router.access === 'function' ? router.access(level) : router)
|
|
121
|
-
|
|
122
|
-
openTo('readonly').get('/settings', (req, res) => {
|
|
123
|
-
const settings = running ? pluginSettings : savedSettings()
|
|
124
|
-
res.json({
|
|
125
|
-
...settings,
|
|
126
|
-
apps: running ? resolvedApps : resolveApps(settings)
|
|
127
|
-
})
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
router.get('/webapps', (req, res) => {
|
|
131
|
-
res.json(getWebapps())
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
openTo('readonly').get('/mode', (req, res) => {
|
|
135
|
-
const current = app.getSelfPath('environment.mode')
|
|
136
|
-
res.json({ value: (current && current.value) || 'day' })
|
|
137
|
-
})
|
|
138
|
-
|
|
139
|
-
openTo('readwrite').post('/dismiss-tour', (req, res) => {
|
|
140
|
-
// savePluginOptions replaces the whole saved configuration, so the
|
|
141
|
-
// update starts from a complete one.
|
|
142
|
-
const updated = { ...(running ? pluginSettings : savedSettings()), tourDismissed: true }
|
|
143
|
-
app.savePluginOptions(updated, (err) => {
|
|
144
|
-
if (err) {
|
|
145
|
-
app.error('App Dock: failed to save tourDismissed: ' + err.message)
|
|
146
|
-
res.status(500).json({ error: err.message })
|
|
147
|
-
return
|
|
148
|
-
}
|
|
149
|
-
pluginSettings = updated
|
|
150
|
-
res.json({ tourDismissed: true })
|
|
151
|
-
})
|
|
152
|
-
})
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
schema: {
|
|
156
|
-
type: 'object',
|
|
157
|
-
description:
|
|
158
|
-
'Open /@signalk/app-dock/config.html for the visual configurator with discover button and drag-to-reorder.',
|
|
159
|
-
required: [],
|
|
160
|
-
properties: {
|
|
161
|
-
position: {
|
|
162
|
-
type: 'string',
|
|
163
|
-
title: 'Dock position',
|
|
164
|
-
enum: ['bottom', 'top', 'left', 'right'],
|
|
165
|
-
default: 'bottom'
|
|
166
|
-
},
|
|
167
|
-
|
|
168
|
-
iframeMode: {
|
|
169
|
-
type: 'string',
|
|
170
|
-
title: 'iFrame lifecycle',
|
|
171
|
-
description:
|
|
172
|
-
'keep-alive: load once and hide/show (faster switching, more RAM). ' +
|
|
173
|
-
'destroy: reload on every switch (slower, minimal RAM).',
|
|
174
|
-
enum: ['keep-alive', 'destroy'],
|
|
175
|
-
default: 'keep-alive'
|
|
176
|
-
},
|
|
177
|
-
|
|
178
|
-
iconSize: {
|
|
179
|
-
type: 'number',
|
|
180
|
-
title: 'Icon size (px)',
|
|
181
|
-
default: 56
|
|
182
|
-
},
|
|
183
|
-
|
|
184
|
-
magnification: {
|
|
185
|
-
type: 'boolean',
|
|
186
|
-
title: 'Enable dock magnification effect',
|
|
187
|
-
default: true
|
|
188
|
-
},
|
|
189
|
-
|
|
190
|
-
magnificationScale: {
|
|
191
|
-
type: 'number',
|
|
192
|
-
title: 'Magnification scale (1.0 = none, 2.5 = maximum)',
|
|
193
|
-
default: 1.7
|
|
194
|
-
},
|
|
195
|
-
|
|
196
|
-
showNightModeButton: {
|
|
197
|
-
type: 'boolean',
|
|
198
|
-
title: 'Show night/day mode toggle',
|
|
199
|
-
description: 'Adds a sun/moon button to the dock that toggles environment.mode',
|
|
200
|
-
default: true
|
|
201
|
-
},
|
|
202
|
-
|
|
203
|
-
showFullscreenButton: {
|
|
204
|
-
type: 'boolean',
|
|
205
|
-
title: 'Show fullscreen toggle',
|
|
206
|
-
description:
|
|
207
|
-
'Adds a button to the dock that toggles browser fullscreen. ' +
|
|
208
|
-
'Hidden automatically when the Fullscreen API is not available (e.g. iPadOS Safari — use Add to Home Screen instead).',
|
|
209
|
-
default: false
|
|
210
|
-
},
|
|
211
|
-
|
|
212
|
-
showExitButton: {
|
|
213
|
-
type: 'boolean',
|
|
214
|
-
title: 'Show exit button',
|
|
215
|
-
description: 'Adds an X button to the dock that returns to Signal K admin UI',
|
|
216
|
-
default: false
|
|
217
|
-
},
|
|
218
|
-
|
|
219
|
-
tourDismissed: {
|
|
220
|
-
type: 'boolean',
|
|
221
|
-
title: 'Welcome tour dismissed',
|
|
222
|
-
description:
|
|
223
|
-
'Set automatically when a user clicks "Don\'t show again" in the welcome tour. Uncheck to show the tour again on all devices.',
|
|
224
|
-
default: false
|
|
225
|
-
},
|
|
226
|
-
|
|
227
|
-
apps: {
|
|
228
|
-
type: 'array',
|
|
229
|
-
title: 'Dock Apps',
|
|
230
|
-
description:
|
|
231
|
-
'Installed webapps are added here automatically. Reorder, disable, or override labels/icons as needed.',
|
|
232
|
-
items: {
|
|
233
|
-
type: 'object',
|
|
234
|
-
required: ['url'],
|
|
235
|
-
properties: {
|
|
236
|
-
enabled: {
|
|
237
|
-
type: 'boolean',
|
|
238
|
-
title: 'Enabled',
|
|
239
|
-
default: true
|
|
240
|
-
},
|
|
241
|
-
autostart: {
|
|
242
|
-
type: 'boolean',
|
|
243
|
-
title: 'Autostart',
|
|
244
|
-
description: 'Load this app automatically when the dock page opens',
|
|
245
|
-
default: false
|
|
246
|
-
},
|
|
247
|
-
url: {
|
|
248
|
-
type: 'string',
|
|
249
|
-
title: 'URL'
|
|
250
|
-
},
|
|
251
|
-
label: {
|
|
252
|
-
type: 'string',
|
|
253
|
-
title: 'Label override'
|
|
254
|
-
},
|
|
255
|
-
icon: {
|
|
256
|
-
type: 'string',
|
|
257
|
-
title: 'Icon override',
|
|
258
|
-
description: 'Emoji or image path'
|
|
259
|
-
},
|
|
260
|
-
color: {
|
|
261
|
-
type: 'string',
|
|
262
|
-
title: 'Background color'
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
},
|
|
266
|
-
default: []
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
return plugin
|
|
273
|
-
}
|
package/public/540.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! For license information please see 540.js.LICENSE.txt */
|
|
2
|
-
"use strict";(self.webpackChunk_signalk_app_dock=self.webpackChunk_signalk_app_dock||[]).push([[540],{869(e,t){var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),u=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),i=Symbol.for("react.consumer"),s=Symbol.for("react.context"),a=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),l=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),d=Symbol.iterator,h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,b={};function m(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||h}function v(){}function S(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||h}m.prototype.isReactComponent={},m.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},m.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=m.prototype;var E=S.prototype=new v;E.constructor=S,_(E,m.prototype),E.isPureReactComponent=!0;var g=Array.isArray;function k(){}var w={H:null,A:null,T:null,S:null},H=Object.prototype.hasOwnProperty;function j(e,t,r){var o=r.ref;return{$$typeof:n,type:e,key:t,ref:void 0!==o?o:null,props:r}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var R=/\/+/g;function $(e,t){return"object"==typeof e&&null!==e&&null!=e.key?(n=""+e.key,r={"=":"=0",":":"=2"},"$"+n.replace(/[=:]/g,function(e){return r[e]})):t.toString(36);var n,r}function T(e,t,o,u,c){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var s,a,f=!1;if(null===e)f=!0;else switch(i){case"bigint":case"string":case"number":f=!0;break;case"object":switch(e.$$typeof){case n:case r:f=!0;break;case p:return T((f=e._init)(e._payload),t,o,u,c)}}if(f)return c=c(e),f=""===u?"."+$(e,0):u,g(c)?(o="",null!=f&&(o=f.replace(R,"$&/")+"/"),T(c,t,o,"",function(e){return e})):null!=c&&(C(c)&&(s=c,a=o+(null==c.key||e&&e.key===c.key?"":(""+c.key).replace(R,"$&/")+"/")+f,c=j(s.type,a,s.props)),t.push(c)),1;f=0;var l,y=""===u?".":u+":";if(g(e))for(var h=0;h<e.length;h++)f+=T(u=e[h],t,o,i=y+$(u,h),c);else if("function"==typeof(h=null===(l=e)||"object"!=typeof l?null:"function"==typeof(l=d&&l[d]||l["@@iterator"])?l:null))for(e=h.call(e),h=0;!(u=e.next()).done;)f+=T(u=u.value,t,o,i=y+$(u,h++),c);else if("object"===i){if("function"==typeof e.then)return T(function(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch("string"==typeof e.status?e.then(k,k):(e.status="pending",e.then(function(t){"pending"===e.status&&(e.status="fulfilled",e.value=t)},function(t){"pending"===e.status&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}(e),t,o,u,c);throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return f}function x(e,t,n){if(null==e)return e;var r=[],o=0;return T(e,r,"","",function(e){return t.call(n,e,o++)}),r}function A(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)},function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var O="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"==typeof process&&"function"==typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)},I={map:x,forEach:function(e,t,n){x(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return x(e,function(){t++}),t},toArray:function(e){return x(e,function(e){return e})||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};t.Activity=y,t.Children=I,t.Component=m,t.Fragment=o,t.Profiler=c,t.PureComponent=S,t.StrictMode=u,t.Suspense=f,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,t.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},t.cache=function(e){return function(){return e.apply(null,arguments)}},t.cacheSignal=function(){return null},t.cloneElement=function(e,t,n){if(null==e)throw Error("The argument must be a React element, but you passed "+e+".");var r=_({},e.props),o=e.key;if(null!=t)for(u in void 0!==t.key&&(o=""+t.key),t)!H.call(t,u)||"key"===u||"__self"===u||"__source"===u||"ref"===u&&void 0===t.ref||(r[u]=t[u]);var u=arguments.length-2;if(1===u)r.children=n;else if(1<u){for(var c=Array(u),i=0;i<u;i++)c[i]=arguments[i+2];r.children=c}return j(e.type,o,r)},t.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:i,_context:e},e},t.createElement=function(e,t,n){var r,o={},u=null;if(null!=t)for(r in void 0!==t.key&&(u=""+t.key),t)H.call(t,r)&&"key"!==r&&"__self"!==r&&"__source"!==r&&(o[r]=t[r]);var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){for(var i=Array(c),s=0;s<c;s++)i[s]=arguments[s+2];o.children=i}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===o[r]&&(o[r]=c[r]);return j(e,u,o)},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:a,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:l,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),o=w.S;null!==o&&o(n,r),"object"==typeof r&&null!==r&&"function"==typeof r.then&&r.then(k,O)}catch(e){O(e)}finally{null!==t&&null!==n.types&&(t.types=n.types),w.T=t}},t.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},t.use=function(e){return w.H.use(e)},t.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},t.useCallback=function(e,t){return w.H.useCallback(e,t)},t.useContext=function(e){return w.H.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},t.useEffect=function(e,t){return w.H.useEffect(e,t)},t.useEffectEvent=function(e){return w.H.useEffectEvent(e)},t.useId=function(){return w.H.useId()},t.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},t.useMemo=function(e,t){return w.H.useMemo(e,t)},t.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},t.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},t.useRef=function(e){return w.H.useRef(e)},t.useState=function(e){return w.H.useState(e)},t.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},t.useTransition=function(){return w.H.useTransition()},t.version="19.2.4"},540(e,t,n){e.exports=n(869)}}]);
|
package/public/805.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_signalk_app_dock=self.webpackChunk_signalk_app_dock||[]).push([[805],{805(e,t,n){n.r(t),n.d(t,{default:()=>s});var a=n(231);const l={root:{fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',color:"#333",padding:"16px 0"},sectionTitle:{fontSize:13,fontWeight:600,color:"#888",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:10,marginTop:24},btn:{display:"inline-flex",alignItems:"center",gap:8,padding:"8px 16px",border:"none",borderRadius:6,fontSize:13,fontWeight:600,cursor:"pointer"},btnPrimary:{background:"#3b82f6",color:"#fff"},btnSave:{background:"#10b981",color:"#fff"},btnDanger:{background:"#ef4444",color:"#fff",padding:"4px 10px",fontSize:11},status:{marginTop:8,fontSize:12,minHeight:18},item:{display:"flex",alignItems:"center",gap:10,padding:"8px 12px",background:"#f8f9fa",border:"1px solid #e0e0e0",borderRadius:8,marginBottom:6,cursor:"grab"},itemDisabled:{opacity:.4},dragOver:{borderColor:"#3b82f6",background:"#eef4ff"},handle:{color:"#bbb",fontSize:16,cursor:"grab",userSelect:"none",flexShrink:0,width:18,textAlign:"center"},iconBox:{width:36,height:36,borderRadius:8,display:"flex",alignItems:"center",justifyContent:"center",background:"#e2e8f0",overflow:"hidden",flexShrink:0,fontSize:18},iconImg:{width:"100%",height:"100%",objectFit:"contain",padding:5},info:{flex:1,minWidth:0},name:{fontSize:13,fontWeight:600,color:"#333"},url:{fontSize:10,color:"#999",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},toggle:{flexShrink:0},checkbox:{width:16,height:16,cursor:"pointer",accentColor:"#3b82f6"},preview:{display:"flex",alignItems:"flex-end",justifyContent:"center",gap:6,padding:"12px 18px",background:"rgba(30,30,32,0.85)",border:"1px solid rgba(255,255,255,0.18)",borderRadius:18,margin:"16px auto",width:"fit-content"},actions:{display:"flex",gap:10,alignItems:"center",marginTop:16},empty:{textAlign:"center",padding:"30px 16px",color:"#999",fontSize:13},fieldRow:{display:"flex",alignItems:"center",gap:12,marginBottom:10},label:{fontSize:13,fontWeight:500,color:"#555",width:160,flexShrink:0},select:{padding:"6px 10px",borderRadius:6,border:"1px solid #ccc",fontSize:13,background:"#fff",color:"#333"},input:{padding:"6px 10px",borderRadius:6,border:"1px solid #ccc",fontSize:13,width:80,background:"#fff",color:"#333"},checkboxField:{width:16,height:16,accentColor:"#3b82f6"},hint:{fontSize:11,color:"#aaa",marginLeft:8}};function o({icon:e,label:t,color:n,size:o}){const i=o||36,r={...l.iconBox,width:i,height:i,borderRadius:.22*i,...n?{background:n}:{}},c=e||"";return c.startsWith("/")||c.startsWith("http")?a.createElement("div",{style:r},a.createElement("img",{src:c,alt:t,style:{...l.iconImg,padding:.12*i},onError:e=>{e.target.style.display="none",e.target.parentNode.textContent=(t||"??").slice(0,2).toUpperCase()}})):a.createElement("div",{style:r},c||(t||"??").slice(0,2).toUpperCase())}function i({label:e,value:t,options:n,onChange:o,hint:i}){return a.createElement("div",{style:l.fieldRow},a.createElement("span",{style:l.label},e),a.createElement("select",{style:l.select,value:t,onChange:e=>o(e.target.value)},n.map(e=>a.createElement("option",{key:e.value,value:e.value},e.label))),i&&a.createElement("span",{style:l.hint},i))}function r({label:e,value:t,onChange:n,hint:o}){return a.createElement("div",{style:l.fieldRow},a.createElement("span",{style:l.label},e),a.createElement("input",{style:l.input,type:"number",value:t,onChange:e=>n(Number(e.target.value))}),o&&a.createElement("span",{style:l.hint},o))}function c({label:e,checked:t,onChange:n,hint:o}){return a.createElement("div",{style:l.fieldRow},a.createElement("span",{style:l.label},e),a.createElement("input",{type:"checkbox",style:l.checkboxField,checked:t,onChange:e=>n(e.target.checked)}),o&&a.createElement("span",{style:l.hint},o))}function s({configuration:e,save:t}){const n=e||{},[s,d]=(0,a.useState)(()=>n.apps||[]),[u,g]=(0,a.useState)(n.position||"bottom"),[p,m]=(0,a.useState)(n.iframeMode||"keep-alive"),[b,f]=(0,a.useState)(n.iconSize||56),[h,y]=(0,a.useState)(!1!==n.magnification),[v,k]=(0,a.useState)(n.magnificationScale||1.7),[E,S]=(0,a.useState)(n.showNightModeButton||!1),[x,w]=(0,a.useState)(n.showFullscreenButton||!1),[C,z]=(0,a.useState)(n.showExitButton||!1),[D,R]=(0,a.useState)(n.tourDismissed||!1),[B,I]=(0,a.useState)(""),[T,F]=(0,a.useState)(!1),[A,M]=(0,a.useState)(!1),[N,W]=(0,a.useState)(!1),[O,$]=(0,a.useState)(null),[_,P]=(0,a.useState)(null),U=(0,a.useRef)(s);U.current=s;const j=(0,a.useRef)(null);(0,a.useEffect)(()=>()=>{j.current&&clearTimeout(j.current)},[]);const L=(0,a.useCallback)(e=>({position:u,iframeMode:p,iconSize:b,magnification:h,magnificationScale:v,showNightModeButton:E,showFullscreenButton:x,showExitButton:C,tourDismissed:D,apps:e}),[u,p,b,h,v,E,x,C,D]),H=(0,a.useCallback)(async()=>{j.current&&clearTimeout(j.current),W(!0),I("Saving…"),F(!1);try{const e=t(L(s));e&&"function"==typeof e.then&&await e,I("Configuration saved — plugin will restart"),F(!1),j.current=setTimeout(()=>I(""),5e3)}catch(e){I("Save failed: "+(e.message||e)),F(!0)}finally{W(!1)}},[s,L,t]),K=()=>P(null),X=()=>{$(null),P(null)},q=s.filter(e=>!1!==e.enabled);return a.createElement("div",{style:l.root},a.createElement("div",{style:l.sectionTitle},"Dock Settings"),a.createElement(i,{label:"Dock position",value:u,onChange:g,options:[{value:"bottom",label:"Bottom"},{value:"top",label:"Top"},{value:"left",label:"Left"},{value:"right",label:"Right"}]}),a.createElement(i,{label:"iFrame lifecycle",value:p,onChange:m,options:[{value:"keep-alive",label:"Keep-alive (faster switching, more RAM)"},{value:"destroy",label:"Destroy (reload each time, less RAM)"}]}),a.createElement(r,{label:"Icon size",value:b,onChange:f,hint:"px"}),a.createElement(c,{label:"Magnification effect",checked:h,onChange:y}),h&&a.createElement(r,{label:"Magnification scale",value:v,onChange:k,hint:"1.0 - 2.5"}),a.createElement("div",{style:l.sectionTitle},"Utility Buttons"),a.createElement(c,{label:"Night/Day mode toggle",checked:E,onChange:S,hint:"Sun/moon button to toggle environment.mode"}),a.createElement(c,{label:"Fullscreen toggle",checked:x,onChange:w,hint:"Toggles browser fullscreen. Hidden on devices without Fullscreen API support (e.g. iPadOS Safari)."}),a.createElement(c,{label:"Exit button",checked:C,onChange:z,hint:"X button to return to Signal K admin UI"}),a.createElement("div",{style:l.sectionTitle},"Webapps"),a.createElement("button",{style:{...l.btn,...l.btnPrimary,...A?{opacity:.6}:{}},onClick:async()=>{M(!0),I(""),F(!1);try{const e=await fetch("/skServer/webapps"),t=(await e.json()).filter(e=>"@signalk/app-dock"!==e.name).map(e=>"@signalk/server-admin-ui"===e.name?{name:e.name,label:"Settings",url:"/admin/",icon:"/@signalk/app-dock/icon-settings.svg",isAdmin:!0}:{name:e.name,label:e.signalk?.displayName||e.name,url:`/${e.name}/`,icon:e.signalk?.appIcon?`/${e.name}/${e.signalk.appIcon}`:null});if(0===t.length)return I("No webapps found. Is the server fully started?"),F(!0),void M(!1);const n=U.current,a=new Set(n.map(e=>e.url));let l=0;const o=[...n];for(const e of t)a.has(e.url)||(o.push({enabled:!0,autostart:!1,url:e.url,label:e.label||"",icon:e.icon||"",color:e.isAdmin?"#78788c":""}),l++);d(o),I(l>0?`Found ${t.length} webapps, added ${l} new.`:`All ${t.length} webapps already in list.`),F(!1)}catch(e){I("Discovery failed: "+e.message),F(!0)}M(!1)},disabled:A},A?"Discovering…":"Discover Installed Webapps"),B&&a.createElement("div",{style:{...l.status,color:T?"#ef4444":"#10b981"}},B),a.createElement("div",{style:l.sectionTitle},"Dock Apps (drag to reorder)"),0===s.length?a.createElement("div",{style:l.empty},"No apps yet. Click Discover above."):a.createElement("div",null,s.map((e,t)=>a.createElement("div",{key:e.url+t,draggable:!0,onDragStart:()=>(e=>$(e))(t),onDragOver:e=>((e,t)=>{e.preventDefault(),P(t)})(e,t),onDragLeave:K,onDrop:e=>((e,t)=>{if(e.preventDefault(),P(null),null!==O&&O!==t){const e=[...s],[n]=e.splice(O,1);e.splice(t,0,n),d(e)}$(null)})(e,t),onDragEnd:X,style:{...l.item,...!1===e.enabled?l.itemDisabled:{},..._===t?l.dragOver:{},...O===t?{opacity:.4}:{}}},a.createElement("span",{style:l.handle},"≡"),a.createElement(o,{icon:e.icon,label:e.label||e.url,color:e.color}),a.createElement("div",{style:l.info},a.createElement("div",{style:l.name},e.label||e.url),a.createElement("div",{style:l.url},e.url)),a.createElement("div",{style:l.toggle,title:"Enabled"},a.createElement("input",{type:"checkbox",checked:!1!==e.enabled,onChange:()=>(e=>d(s.map((t,n)=>n===e?{...t,enabled:!t.enabled}:t)))(t),style:l.checkbox})),a.createElement("div",{style:{...l.toggle,cursor:"pointer",fontSize:16,opacity:e.autostart?1:.25},onClick:()=>(e=>d(s.map((t,n)=>n===e?{...t,autostart:!t.autostart}:{...t,autostart:!1})))(t),title:e.autostart?"Autostart: ON (click to disable)":"Click to set as autostart app"},"▶"),a.createElement("button",{style:{...l.btn,...l.btnDanger},onClick:()=>(e=>d(s.filter((t,n)=>n!==e)))(t)},"Remove")))),(q.length>0||E||x||C)&&a.createElement(a.Fragment,null,a.createElement("div",{style:l.sectionTitle},"Preview"),a.createElement("div",{style:l.preview},E&&a.createElement("div",{style:{...l.iconBox,width:40,height:40,background:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.12)",fontSize:20,borderRadius:10}},"☀️"),x&&a.createElement("div",{style:{...l.iconBox,width:40,height:40,background:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.12)",fontSize:20,borderRadius:10,color:"#fff"}},"⛶"),(E||x)&&a.createElement("div",{style:{width:1,height:24,background:"rgba(255,255,255,0.15)",alignSelf:"center"}}),q.map((e,t)=>a.createElement(o,{key:t,icon:e.icon,label:e.label||e.url,color:e.color,size:40})),C&&a.createElement(a.Fragment,null,a.createElement("div",{style:{width:1,height:24,background:"rgba(255,255,255,0.15)",alignSelf:"center"}}),a.createElement("div",{style:{...l.iconBox,width:40,height:40,background:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.12)",fontSize:16,borderRadius:10,color:"#fff"}},"✕")))),a.createElement("div",{style:l.actions},a.createElement("button",{style:{...l.btn,...l.btnSave,...N?{opacity:.6}:{}},onClick:H,disabled:N},N?"Saving…":"Save Configuration"),B&&a.createElement("div",{style:{...l.status,color:T?"#ef4444":"#10b981"}},B)))}}}]);
|
package/public/main.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(()=>{var e,r,t={316(){}},a={};function o(e){var r=a[e];if(void 0!==r)return r.exports;var n=a[e]={exports:{}};return t[e](n,n.exports,o),n.exports}o.m=t,o.c=a,o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce((r,t)=>(o.f[t](e,r),r),[])),o.u=e=>e+".js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@signalk/app-dock:",o.l=(t,a,n,i)=>{if(e[t])e[t].push(a);else{var l,c;if(void 0!==n)for(var s=document.getElementsByTagName("script"),p=0;p<s.length;p++){var u=s[p];if(u.getAttribute("src")==t||u.getAttribute("data-webpack")==r+n){l=u;break}}l||(c=!0,(l=document.createElement("script")).charset="utf-8",o.nc&&l.setAttribute("nonce",o.nc),l.setAttribute("data-webpack",r+n),l.src=t),e[t]=[a];var d=(r,a)=>{l.onerror=l.onload=null,clearTimeout(f);var o=e[t];if(delete e[t],l.parentNode&&l.parentNode.removeChild(l),o&&o.forEach(e=>e(a)),r)return r(a)},f=setTimeout(d.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=d.bind(null,l.onerror),l.onload=d.bind(null,l.onload),c&&document.head.appendChild(l)}},(()=>{o.S={};var e={},r={};o.I=(t,a)=>{a||(a=[]);var n=r[t];if(n||(n=r[t]={}),!(a.indexOf(n)>=0)){if(a.push(n),e[t])return e[t];o.o(o.S,t)||(o.S[t]={});var i=o.S[t],l="@signalk/app-dock",c=[];return"default"===t&&((e,r,t,a)=>{var n=i[e]=i[e]||{},c=n[r];(!c||!c.loaded&&(1!=!c.eager?a:l>c.from))&&(n[r]={get:()=>o.e(540).then(()=>()=>o(540)),from:l,eager:!1})})("react","19.2.4"),e[t]=c.length?Promise.all(c).then(()=>e[t]=1):1}}})(),(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var r=o.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),(()=>{var e={792:0};o.f.j=(r,t)=>{var a=o.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else{var n=new Promise((t,o)=>a=e[r]=[t,o]);t.push(a[2]=n);var i=o.p+o.u(r),l=new Error;o.l(i,t=>{if(o.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var n=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;l.message="Loading chunk "+r+" failed.\n("+n+": "+i+")",l.name="ChunkLoadError",l.type=n,l.request=i,a[1](l)}},"chunk-"+r,r)}};var r=(r,t)=>{var a,n,[i,l,c]=t,s=0;if(i.some(r=>0!==e[r])){for(a in l)o.o(l,a)&&(o.m[a]=l[a]);c&&c(o)}for(r&&r(t);s<i.length;s++)n=i[s],o.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunk_signalk_app_dock=self.webpackChunk_signalk_app_dock||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),o(316)})();
|