@signalk/app-dock 1.4.0 → 1.4.2

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/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
- <link rel="stylesheet" href="dock.css" />
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>
@@ -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)}}]);
@@ -1,9 +0,0 @@
1
- /**
2
- * @license React
3
- * react.production.js
4
- *
5
- * Copyright (c) Meta Platforms, Inc. and affiliates.
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */
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)})();