signalk-backup 1.0.0 → 1.0.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 +2 -2
- package/package.json +7 -5
- package/public/assets/AppPanel-DIJpLQjX.js +3 -0
- package/public/assets/AppPanel-DIJpLQjX.js.map +1 -0
- package/public/assets/_virtual_mf-localSharedImportMap___mfe_internal__signalk_mf_2_backup__mf_owner__1-Du7wMbis.js +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__mf_owner__1__loadShare__react__loadShare__.js-h6Wc3FqT.js +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__mf_owner__1__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-BVtcTS_R.js +2 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__mf_owner__1__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-BVtcTS_R.js.map +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__mf_owner__1__loadShare__react_mf_2_dom__loadShare__.js-DXBr3ZZh.js +1 -0
- package/public/assets/dist-DWxKLhdH.js +5 -0
- package/public/assets/dist-DWxKLhdH.js.map +1 -0
- package/public/assets/hostInit-kjS4q64P.js +1 -0
- package/public/assets/jsx-dev-runtime-DqDQgAbA.js +2 -0
- package/public/assets/jsx-dev-runtime-DqDQgAbA.js.map +1 -0
- package/public/assets/remote-BW4TuO4P.js +2 -0
- package/public/assets/remote-BW4TuO4P.js.map +1 -0
- package/public/assets/remote-BvRk9kiK.js +0 -0
- package/public/assets/{rolldown-runtime-Bh1tDfsg.js → rolldown-runtime-CbXtAM7H.js} +1 -1
- package/public/assets/virtualExposes-vcMKMvCt.js +2 -0
- package/public/assets/virtualExposes-vcMKMvCt.js.map +1 -0
- package/public/assets/vite-preload-helper-Fl0ucuR7.js +1 -0
- package/public/index.html +12 -14
- package/public/remoteEntry.js +1 -1
- package/public/remoteEntry.js.map +1 -1
- package/public/assets/App-jHrc2yzu.js +0 -3
- package/public/assets/App-jHrc2yzu.js.map +0 -1
- package/public/assets/AppPanel-D0iGGeiX.js +0 -2
- package/public/assets/AppPanel-D0iGGeiX.js.map +0 -1
- package/public/assets/_virtual_mf-localSharedImportMap___mfe_internal__signalk_mf_2_backup-B9dkCYcU.js +0 -1
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react__loadShare__.mjs-CRDWkJnD.js +0 -1
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_dev_mf_2_runtime__loadShare__-CZEusA_v.js +0 -1
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_dev_mf_2_runtime__loadShare__.mjs-C5oceaDt.js +0 -2
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_dev_mf_2_runtime__loadShare__.mjs-C5oceaDt.js.map +0 -1
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__-Dh2Je4Q8.js +0 -1
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.mjs-BJsP72ov.js +0 -2
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.mjs-BJsP72ov.js.map +0 -1
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_2_dom__loadShare__.mjs-COVU9tAo.js +0 -1
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-F9Hr43sq.js +0 -1
- package/public/assets/dist-Cr3RQpe1.js +0 -5
- package/public/assets/dist-Cr3RQpe1.js.map +0 -1
- package/public/assets/hostInit-CBfbRWDG.js +0 -1
- package/public/assets/index-BvOjez90.js +0 -2
- package/public/assets/index-BvOjez90.js.map +0 -1
- package/public/assets/jsx-dev-runtime-BvApC5zd.js +0 -1
- package/public/assets/jsx-runtime-4HRoLdzw.js +0 -1
- package/public/assets/main-BZOfKcLT.js +0 -2
- package/public/assets/main-BZOfKcLT.js.map +0 -1
- package/public/assets/preload-helper-DCSm9-xi.js +0 -1
- package/public/assets/virtualExposes-E_ORVUj7.js +0 -2
- package/public/assets/virtualExposes-E_ORVUj7.js.map +0 -1
- package/public/mf-entry-bootstrap-0.js +0 -17
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ The plugin pulls `ghcr.io/dirkwa/signalk-backup-server` at a server version it p
|
|
|
37
37
|
|
|
38
38
|
```text
|
|
39
39
|
Browser
|
|
40
|
-
└── /
|
|
40
|
+
└── /admin/#/e/signalk_backup ← plugin webapp (React, embedded in the admin UI)
|
|
41
41
|
└── /plugins/signalk-backup/api/* ← plugin's reverse proxy
|
|
42
42
|
├── /api/db-export/staging ← plugin-local (file lister)
|
|
43
43
|
├── /api/restore-partial-host ← plugin-local (writes to host fs)
|
|
@@ -49,7 +49,7 @@ Browser
|
|
|
49
49
|
|
|
50
50
|
The plugin is most of the user experience:
|
|
51
51
|
|
|
52
|
-
- The **webapp**
|
|
52
|
+
- The **webapp** is a React panel bundled by Vite and embedded in the SignalK admin UI at `/admin/#/e/signalk_backup` (the bare `/signalk-backup/` URL redirects there). It shares the admin's React, runs in the admin origin and reads/writes via `fetch('/plugins/signalk-backup/api/*')`. No CORS dance, no separate auth — it inherits SignalK's.
|
|
53
53
|
- The **plugin process** owns three things directly: the database-export scheduler tick, an HTTP route that lists / streams files from the staging tree (so the webapp can show "live" exports), and an HTTP route that performs host-side file writes for custom-path restores.
|
|
54
54
|
- Everything else — Kopia snapshots, restore-with-rollback, cloud sync, scheduling — runs in the [signalk-backup-server](https://github.com/dirkwa/signalk-backup-server) container. The plugin reverse-proxies `/api/*` through to it, and adds a small set of explicit overrides above the catch-all proxy.
|
|
55
55
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "signalk-backup",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Scheduled deduplicated backups of SignalK config to local storage and Google Drive (via Kopia + rclone)",
|
|
5
5
|
"main": "plugin/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\" \"webapp/**/*.{ts,tsx}\"",
|
|
11
11
|
"typecheck:webapp": "tsc -p tsconfig.webapp.json",
|
|
12
12
|
"build:plugin": "tsc",
|
|
13
|
-
"build:webapp": "vite build",
|
|
13
|
+
"build:webapp": "vite build && node scripts/check-federation-shares.mjs",
|
|
14
14
|
"build": "npm run build:plugin && npm run typecheck:webapp && npm run build:webapp",
|
|
15
15
|
"build:all": "npm run lint && npm run build && npm run test",
|
|
16
16
|
"dev": "vite",
|
|
17
17
|
"test": "vitest run",
|
|
18
|
-
"prepublishOnly": "npm run build"
|
|
18
|
+
"prepublishOnly": "npm run build",
|
|
19
|
+
"test:e2e": "vitest run --config vitest.e2e.config.ts"
|
|
19
20
|
},
|
|
20
21
|
"keywords": [
|
|
21
22
|
"signalk-node-server-plugin",
|
|
@@ -62,7 +63,7 @@
|
|
|
62
63
|
},
|
|
63
64
|
"devDependencies": {
|
|
64
65
|
"@eslint/js": "^10.0.1",
|
|
65
|
-
"@module-federation/vite": "
|
|
66
|
+
"@module-federation/vite": "^1.20.7",
|
|
66
67
|
"@signalk/server-admin-ui-dependencies": "^2.23.0",
|
|
67
68
|
"@signalk/server-api": "^2.24.0",
|
|
68
69
|
"@types/express": "^5.0.0",
|
|
@@ -77,6 +78,7 @@
|
|
|
77
78
|
"eslint-config-prettier": "^10.0.0",
|
|
78
79
|
"eslint-plugin-prettier": "^5.0.0",
|
|
79
80
|
"express": "^5.2.1",
|
|
81
|
+
"playwright": "^1.62.1",
|
|
80
82
|
"prettier": "^3.0.0",
|
|
81
83
|
"react": "^19.2.6",
|
|
82
84
|
"react-dom": "^19.2.6",
|
|
@@ -84,7 +86,7 @@
|
|
|
84
86
|
"supertest": "^7.2.2",
|
|
85
87
|
"typescript": "^6.0.3",
|
|
86
88
|
"typescript-eslint": "^8.0.0",
|
|
87
|
-
"vite": "
|
|
89
|
+
"vite": "^8.2.1",
|
|
88
90
|
"vitest": "^4.1.5"
|
|
89
91
|
},
|
|
90
92
|
"repository": {
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{n as e,t}from"./rolldown-runtime-CbXtAM7H.js";import{n,r,t as i}from"./_virtual_mf___mfe_internal__signalk_mf_2_backup__mf_owner__1__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-BVtcTS_R.js";import{a,i as o,n as s,o as c,r as l,s as u,t as d}from"./_virtual_mf___mfe_internal__signalk_mf_2_backup__mf_owner__1__loadShare__react__loadShare__.js-h6Wc3FqT.js";import{t as f}from"./_virtual_mf___mfe_internal__signalk_mf_2_backup__mf_owner__1__loadShare__react_mf_2_dom__loadShare__.js-DXBr3ZZh.js";var p=t(((e,t)=>{t.exports=`SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED`})),m=t(((e,t)=>{var n=p();function r(){}function i(){}i.resetWarningCache=r,t.exports=function(){function e(e,t,r,i,a,o){if(o!==n){var s=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name=`Invariant Violation`,s}}e.isRequired=e;function t(){return e}var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return a.PropTypes=a,a}})),h=t(((e,t)=>{t.exports=m()()})),g=t(((e,t)=>{(function(){var e={}.hasOwnProperty;function n(){for(var e=``,t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,r(n)))}return e}function r(t){if(typeof t==`string`||typeof t==`number`)return t;if(typeof t!=`object`)return``;if(Array.isArray(t))return n.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes(`[native code]`))return t.toString();var r=``;for(var a in t)e.call(t,a)&&t[a]&&(r=i(r,a));return r}function i(e,t){return t?e?e+` `+t:e+t:e}t!==void 0&&t.exports?(n.default=n,t.exports=n):typeof define==`function`&&typeof define.amd==`object`&&define.amd?define(`classnames`,[],function(){return n}):window.classNames=n})()})),_=e(h());function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?v(Object(n),!0).forEach(function(t){b(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x(e){"@babel/helpers - typeof";return x=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},x(e)}function S(){var e=document.createElement(`div`);e.style.position=`absolute`,e.style.top=`-9999px`,e.style.width=`50px`,e.style.height=`50px`,e.style.overflow=`scroll`,document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t}function C(e){document.body.style.paddingRight=e>0?`${e}px`:null}function w(){return document.body.clientWidth<window.innerWidth}function T(){var e=window.getComputedStyle(document.body,null);return parseInt(e&&e.getPropertyValue(`padding-right`)||0,10)}function E(){var e=S(),t=document.querySelectorAll(`.fixed-top, .fixed-bottom, .is-fixed, .sticky-top`)[0],n=t?parseInt(t.style.paddingRight||0,10):0;w()&&C(n+e)}var D;function O(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:``,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:D;return t?e.split(` `).map(function(e){return t[e]||e}).join(` `):e}function ee(e,t){var n={};return Object.keys(e).forEach(function(r){t.indexOf(r)===-1&&(n[r]=e[r])}),n}function te(e,t){for(var n=Array.isArray(t)?t:[t],r=n.length,i,a={};r>0;)--r,i=n[r],a[i]=e[i];return a}var ne={};function re(e){ne[e]||(typeof console<`u`&&console.error(e),ne[e]=!0)}function ie(e,t){return function(n,r,i){n[r]!==null&&n[r]!==void 0&&re(`"${r}" property of "${i}" has been deprecated.
|
|
2
|
+
${t}`);var a=[...arguments].slice(3);return e.apply(void 0,[n,r,i].concat(a))}}var ae=(typeof window>`u`?`undefined`:x(window))===`object`&&window.Element||function(){};function oe(e,t,n){if(!(e[t]instanceof ae))return Error("Invalid prop `"+t+"` supplied to `"+n+"`. Expected prop to be an instance of Element. Validation failed.")}var se=_.default.oneOfType([_.default.string,_.default.func,oe,_.default.shape({current:_.default.any})]),k=_.default.oneOfType([_.default.func,_.default.string,_.default.shape({$$typeof:_.default.symbol,render:_.default.func}),_.default.arrayOf(_.default.oneOfType([_.default.func,_.default.string,_.default.shape({$$typeof:_.default.symbol,render:_.default.func})]))]),ce={Fade:150,Collapse:350,Modal:300,Carousel:600,Offcanvas:300},le=[`in`,`mountOnEnter`,`unmountOnExit`,`appear`,`enter`,`exit`,`timeout`,`onEnter`,`onEntering`,`onEntered`,`onExit`,`onExiting`,`onExited`],ue={esc:27,space:32,enter:13,tab:9,up:38,down:40,home:36,end:35,n:78,p:80},de=!!(typeof window<`u`&&window.document&&window.document.createElement);function fe(e){return e&&x(e)===`object`?`current`in e:!1}function pe(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}function me(e){var t=x(e);return e!=null&&(t===`object`||t===`function`)}function he(e){var t=x(e),n=NaN;if(t===`number`)return e;if(t===`symbol`||t===`object`&&pe(e)===`[object Symbol]`)return n;if(me(e)){var r=typeof e.valueOf==`function`?e.valueOf():e;e=me(r)?`${r}`:r}if(t!==`string`)return e===0?e:+e;e=e.replace(/^\s+|\s+$/g,``);var i=/^0b[01]+$/i.test(e);return i||/^0o[0-7]+$/i.test(e)?parseInt(e.slice(2),i?2:8):/^[-+]0x[0-9a-f]+$/i.test(e)?n:+e}function ge(e){if(!me(e))return!1;var t=pe(e);return t===`[object Function]`||t===`[object AsyncFunction]`||t===`[object GeneratorFunction]`||t===`[object Proxy]`}function _e(e){if(fe(e))return e.current;if(ge(e))return e();if(typeof e==`string`&&de){var t=document.querySelectorAll(e);if(t.length||(t=document.querySelectorAll(`#${e}`)),!t.length)throw Error(`The target '${e}' could not be identified in the dom, tip: check spelling`);return t}return e}function ve(e){return e===null?!1:Array.isArray(e)||de&&typeof e.length==`number`}function ye(e,t){var n=_e(e);return t?ve(n)?n:n===null?[]:[n]:ve(n)?n[0]:n}var be=[`a[href]`,`area[href]`,`input:not([disabled]):not([type=hidden])`,`select:not([disabled])`,`textarea:not([disabled])`,`button:not([disabled])`,`object`,`embed`,`[tabindex]:not(.modal):not(.offcanvas)`,`audio[controls]`,`video[controls]`,`[contenteditable]:not([contenteditable="false"])`];function xe(e,t){if(!e||!t)return t;var n=y({},t);return Object.keys(e).forEach(function(t){n[t]===void 0&&(n[t]=e[t]),Object.keys(e[t]||{}).length>0&&x(e[t])===`object`&&xe(e[t],n)}),n}var A=e(g()),Se=[`className`,`cssModule`,`fluid`,`tag`];function Ce(){return Ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ce.apply(this,arguments)}function we(e,t){if(e==null)return{};var n=Te(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Te(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var Ee={tag:k,fluid:_.default.oneOfType([_.default.bool,_.default.string]),className:_.default.string,cssModule:_.default.object};function De(e){var t=e.className,n=e.cssModule,r=e.fluid,i=e.tag,a=i===void 0?`div`:i,o=we(e,Se),s=`container`;r===!0?s=`container-fluid`:r&&(s=`container-${r}`);var c=O((0,A.default)(t,s),n);return u.createElement(a,Ce({},o,{className:c}))}De.propTypes=Ee;var Oe=[`className`,`cssModule`,`noGutters`,`tag`,`widths`];function ke(){return ke=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ke.apply(this,arguments)}function Ae(e,t){if(e==null)return{};var n=je(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function je(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var Me=[`xs`,`sm`,`md`,`lg`,`xl`,`xxl`],Ne=_.default.oneOfType([_.default.number,_.default.string]),Pe={tag:k,noGutters:ie(_.default.bool,`Please use Bootstrap 5 gutter utility classes. https://getbootstrap.com/docs/5.0/layout/gutters/`),className:_.default.string,cssModule:_.default.object,xs:Ne,sm:Ne,md:Ne,lg:Ne,xl:Ne,xxl:Ne,widths:_.default.array};function j(e){var t=e.className,n=e.cssModule,r=e.noGutters,i=e.tag,a=i===void 0?`div`:i,o=e.widths,s=o===void 0?Me:o,c=Ae(e,Oe),l=[];s.forEach(function(t,n){var r=e[t];if(delete c[t],r){var i=!n;l.push(i?`row-cols-${r}`:`row-cols-${t}-${r}`)}});var d=O((0,A.default)(t,r?`gx-0`:null,`row`,l),n);return u.createElement(a,ke({},c,{className:d}))}j.propTypes=Pe;var Fe=[`className`,`cssModule`,`widths`,`tag`];function Ie(){return Ie=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ie.apply(this,arguments)}function Le(e,t){if(e==null)return{};var n=Re(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Re(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}function ze(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Be=[`xs`,`sm`,`md`,`lg`,`xl`,`xxl`],Ve=_.default.oneOfType([_.default.number,_.default.string]),M=_.default.oneOfType([_.default.bool,_.default.number,_.default.string,_.default.shape({size:_.default.oneOfType([_.default.bool,_.default.number,_.default.string]),order:Ve,offset:Ve})]),He={tag:k,xs:M,sm:M,md:M,lg:M,xl:M,xxl:M,className:_.default.string,cssModule:_.default.object,widths:_.default.array},Ue=function(e,t,n){return n===!0||n===``?e?`col`:`col-${t}`:n===`auto`?e?`col-auto`:`col-${t}-auto`:e?`col-${n}`:`col-${t}-${n}`},We=function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Be,r=e,i=[];return n.forEach(function(e,n){var a=r[e];if(delete r[e],!(!a&&a!==``)){var o=!n;if(me(a)){var s,c=o?`-`:`-${e}-`,l=Ue(o,e,a.size);i.push(O((0,A.default)((s={},ze(s,l,a.size||a.size===``),ze(s,`order${c}${a.order}`,a.order||a.order===0),ze(s,`offset${c}${a.offset}`,a.offset||a.offset===0),s)),t))}else{var u=Ue(o,e,a);i.push(u)}}}),{colClasses:i,modifiedAttributes:r}};function N(e){var t=e.className,n=e.cssModule,r=e.widths,i=r===void 0?Be:r,a=e.tag,o=a===void 0?`div`:a,s=We(Le(e,Fe),n,i),c=s.modifiedAttributes,l=s.colClasses;l.length||l.push(`col`);var d=O((0,A.default)(t,l),n);return u.createElement(o,Ie({},c,{className:d}))}N.propTypes=He;var Ge=[`className`,`cssModule`,`tabs`,`pills`,`vertical`,`horizontal`,`justified`,`fill`,`navbar`,`card`,`tag`];function Ke(){return Ke=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ke.apply(this,arguments)}function qe(e,t){if(e==null)return{};var n=Je(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Je(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var Ye={card:_.default.bool,className:_.default.string,cssModule:_.default.object,fill:_.default.bool,horizontal:_.default.oneOf([`center`,`end`]),justified:_.default.bool,navbar:_.default.bool,pills:_.default.bool,tabs:_.default.bool,tag:k,vertical:_.default.oneOfType([_.default.bool,_.default.string])},Xe=function(e){return e===!1?!1:e===!0||e===`xs`?`flex-column`:`flex-${e}-column`};function Ze(e){var t=e.className,n=e.cssModule,r=e.tabs,i=e.pills,a=e.vertical,o=a!==void 0&&a,s=e.horizontal,c=e.justified,l=e.fill,d=e.navbar,f=e.card,p=e.tag,m=p===void 0?`ul`:p,h=qe(e,Ge),g=O((0,A.default)(t,d?`navbar-nav`:`nav`,s?`justify-content-${s}`:!1,Xe(o),{"nav-tabs":r,"card-header-tabs":f&&r,"nav-pills":i,"card-header-pills":f&&i,"nav-justified":c,"nav-fill":l}),n);return u.createElement(m,Ke({},h,{className:g}))}Ze.propTypes=Ye;var Qe=[`className`,`cssModule`,`active`,`tag`];function $e(){return $e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},$e.apply(this,arguments)}function et(e,t){if(e==null)return{};var n=tt(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tt(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var nt={active:_.default.bool,className:_.default.string,cssModule:_.default.object,tag:k};function rt(e){var t=e.className,n=e.cssModule,r=e.active,i=e.tag,a=i===void 0?`li`:i,o=et(e,Qe),s=O((0,A.default)(t,`nav-item`,r?`active`:!1),n);return u.createElement(a,$e({},o,{className:s}))}rt.propTypes=nt;function it(e){"@babel/helpers - typeof";return it=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},it(e)}var at=[`className`,`cssModule`,`active`,`tag`,`innerRef`];function ot(){return ot=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ot.apply(this,arguments)}function st(e,t){if(e==null)return{};var n=ct(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ct(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}function lt(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function ut(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function dt(e,t,n){return t&&ut(e.prototype,t),n&&ut(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function ft(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&pt(e,t)}function pt(e,t){return pt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},pt(e,t)}function mt(e){var t=_t();return function(){var n=vt(e),r;if(t){var i=vt(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return ht(this,r)}}function ht(e,t){if(t&&(it(t)===`object`||typeof t==`function`))return t;if(t!==void 0)throw TypeError(`Derived constructors may only return object or undefined`);return gt(e)}function gt(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function _t(){if(typeof Reflect>`u`||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vt(e){return vt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},vt(e)}var yt={active:_.default.bool,className:_.default.string,cssModule:_.default.object,disabled:_.default.bool,href:_.default.any,innerRef:_.default.oneOfType([_.default.object,_.default.func,_.default.string]),onClick:_.default.func,tag:k},bt=function(e){ft(n,e);var t=mt(n);function n(e){var r;return lt(this,n),r=t.call(this,e),r.onClick=r.onClick.bind(gt(r)),r}return dt(n,[{key:`onClick`,value:function(e){if(this.props.disabled){e.preventDefault();return}this.props.href===`#`&&e.preventDefault(),this.props.onClick&&this.props.onClick(e)}},{key:`render`,value:function(){var e=this.props,t=e.className,n=e.cssModule,r=e.active,i=e.tag,a=i===void 0?`a`:i,o=e.innerRef,s=st(e,at),c=O((0,A.default)(t,`nav-link`,{disabled:s.disabled,active:r}),n);return u.createElement(a,ot({},s,{ref:o,onClick:this.onClick,className:c}))}}]),n}(u.Component);bt.propTypes=yt;var xt=[`className`,`cssModule`,`variant`,`innerRef`];function St(){return St=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},St.apply(this,arguments)}function Ct(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function wt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Ct(Object(n),!0).forEach(function(t){Tt(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ct(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Tt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Et(e,t){if(e==null)return{};var n=Dt(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dt(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var Ot={active:_.default.bool,"aria-label":_.default.string,onClick:_.default.func,variant:_.default.oneOf([`white`]),className:_.default.string,cssModule:_.default.object,innerRef:_.default.oneOfType([_.default.object,_.default.string,_.default.func])};function kt(e){var t=e.className;e.cssModule;var n=e.variant,r=e.innerRef,i=Et(e,xt),a=O((0,A.default)(t,`btn-close`,n&&`btn-close-${n}`));return u.createElement(`button`,St({ref:r,type:`button`,className:a},wt({"aria-label":`close`},i)))}kt.propTypes=Ot;var At=[`active`,`aria-label`,`block`,`className`,`close`,`cssModule`,`color`,`outline`,`size`,`tag`,`innerRef`];function jt(){return jt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},jt.apply(this,arguments)}function Mt(e,t){if(e==null)return{};var n=Nt(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nt(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var Pt={active:_.default.bool,"aria-label":_.default.string,block:_.default.bool,children:_.default.node,className:_.default.string,cssModule:_.default.object,close:_.default.bool,color:_.default.string,disabled:_.default.bool,innerRef:_.default.oneOfType([_.default.object,_.default.func,_.default.string]),onClick:_.default.func,outline:_.default.bool,size:_.default.string,tag:k};function P(e){var t=s(function(t){if(e.disabled){t.preventDefault();return}if(e.onClick)return e.onClick(t)},[e.onClick,e.disabled]),n=e.active,r=e[`aria-label`],i=e.block,a=e.className,o=e.close,c=e.cssModule,l=e.color,d=l===void 0?`secondary`:l,f=e.outline,p=e.size,m=e.tag,h=m===void 0?`button`:m,g=e.innerRef,_=Mt(e,At);if(o)return u.createElement(kt,_);var v=`btn${f?`-outline`:``}-${d}`,y=O((0,A.default)(a,`btn`,v,p?`btn-${p}`:!1,i?`d-block w-100`:!1,{active:n,disabled:e.disabled}),c);return _.href&&h===`button`&&(h=`a`),u.createElement(h,jt({type:h===`button`&&_.onClick?`button`:void 0},_,{className:y,ref:g,onClick:t,"aria-label":r}))}P.propTypes=Pt;function Ft(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function It(e,t){return It=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},It(e,t)}function Lt(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,It(e,t)}var Rt={disabled:!1},zt=u.createContext(null),Bt=function(e){return e.scrollTop},Vt=`unmounted`,Ht=`exited`,Ut=`entering`,Wt=`entered`,Gt=`exiting`,F=function(e){Lt(t,e);function t(t,n){var r=e.call(this,t,n)||this,i=n,a=i&&!i.isMounting?t.enter:t.appear,o;return r.appearStatus=null,t.in?a?(o=Ht,r.appearStatus=Ut):o=Wt:o=t.unmountOnExit||t.mountOnEnter?Vt:Ht,r.state={status:o},r.nextCallback=null,r}t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===`unmounted`?{status:Ht}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==`entering`&&n!==`entered`&&(t=Ut):(n===`entering`||n===`entered`)&&(t=Gt)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e=this.props.timeout,t=n=r=e,n,r;return e!=null&&typeof e!=`number`&&(t=e.exit,n=e.enter,r=e.appear===void 0?n:e.appear),{exit:t,enter:n,appear:r}},n.updateStatus=function(e,t){if(e===void 0&&(e=!1),t!==null){if(this.cancelNextCallback(),t===`entering`){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:f.findDOMNode(this);n&&Bt(n)}this.performEnter(e)}else this.performExit()}else this.props.unmountOnExit&&this.state.status===`exited`&&this.setState({status:Vt})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,i=this.props.nodeRef?[r]:[f.findDOMNode(this),r],a=i[0],o=i[1],s=this.getTimeouts(),c=r?s.appear:s.enter;if(!e&&!n||Rt.disabled){this.safeSetState({status:Wt},function(){t.props.onEntered(a)});return}this.props.onEnter(a,o),this.safeSetState({status:Ut},function(){t.props.onEntering(a,o),t.onTransitionEnd(c,function(){t.safeSetState({status:Wt},function(){t.props.onEntered(a,o)})})})},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:f.findDOMNode(this);if(!t||Rt.disabled){this.safeSetState({status:Ht},function(){e.props.onExited(r)});return}this.props.onExit(r),this.safeSetState({status:Gt},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:Ht},function(){e.props.onExited(r)})})})},n.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:f.findDOMNode(this),r=e==null&&!this.props.addEndListener;if(!n||r){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var i=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=i[0],o=i[1];this.props.addEndListener(a,o)}e!=null&&setTimeout(this.nextCallback,e)},n.render=function(){var e=this.state.status;if(e===`unmounted`)return null;var t=this.props,n=t.children;t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef;var r=Ft(t,[`children`,`in`,`mountOnEnter`,`unmountOnExit`,`appear`,`enter`,`exit`,`timeout`,`addEndListener`,`onEnter`,`onEntering`,`onEntered`,`onExit`,`onExiting`,`onExited`,`nodeRef`]);return u.createElement(zt.Provider,{value:null},typeof n==`function`?n(e,r):u.cloneElement(u.Children.only(n),r))},t}(u.Component);F.contextType=zt,F.propTypes={};function Kt(){}F.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:Kt,onEntering:Kt,onEntered:Kt,onExit:Kt,onExiting:Kt,onExited:Kt},F.UNMOUNTED=Vt,F.EXITED=Ht,F.ENTERING=Ut,F.ENTERED=Wt,F.EXITING=Gt;var qt=[`tag`,`baseClass`,`baseClassActive`,`className`,`cssModule`,`children`,`innerRef`];function Jt(){return Jt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Jt.apply(this,arguments)}function Yt(e,t){if(e==null)return{};var n=Xt(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xt(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}function Zt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Qt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Zt(Object(n),!0).forEach(function(t){$t(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function $t(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var en=Qt(Qt({},F.propTypes),{},{children:_.default.oneOfType([_.default.arrayOf(_.default.node),_.default.node]),tag:k,baseClass:_.default.string,baseClassActive:_.default.string,className:_.default.string,cssModule:_.default.object,innerRef:_.default.oneOfType([_.default.object,_.default.string,_.default.func])}),tn=Qt(Qt({},F.defaultProps),{},{timeout:ce.Fade,appear:!0,enter:!0,exit:!0,in:!0});function I(e){var t=a(null),n=xe(tn,e),r=n.tag,i=r===void 0?`div`:r,o=n.baseClass,s=o===void 0?`fade`:o,c=n.baseClassActive,l=c===void 0?`show`:c,d=n.className,f=n.cssModule,p=n.children,m=n.innerRef,h=m===void 0?t:m,g=Yt(n,qt),_=te(Qt({defaultProps:tn},g),le),v=ee(g,le);return u.createElement(F,Jt({nodeRef:h},_),function(e){var t=O((0,A.default)(d,s,e===`entered`&&l),f);return u.createElement(i,Jt({className:t},v,{ref:h}),p)})}I.propTypes=en;var nn=[`className`,`cssModule`,`color`,`innerRef`,`pill`,`tag`];function rn(){return rn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},rn.apply(this,arguments)}function an(e,t){if(e==null)return{};var n=on(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function on(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var sn={children:_.default.node,className:_.default.string,color:_.default.string,cssModule:_.default.object,innerRef:_.default.oneOfType([_.default.object,_.default.func,_.default.string]),pill:_.default.bool,tag:k};function L(e){var t=e.className,n=e.cssModule,r=e.color,i=r===void 0?`secondary`:r,a=e.innerRef,o=e.pill,s=o!==void 0&&o,c=e.tag,l=c===void 0?`span`:c,d=an(e,nn),f=O((0,A.default)(t,`badge`,`bg-`+i,s?`rounded-pill`:!1),n);return d.href&&l===`span`&&(l=`a`),u.createElement(l,rn({},d,{className:f,ref:a}))}L.propTypes=sn;var cn=[`className`,`cssModule`,`color`,`body`,`inverse`,`outline`,`tag`,`innerRef`];function ln(){return ln=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ln.apply(this,arguments)}function un(e,t){if(e==null)return{};var n=dn(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dn(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var fn={body:_.default.bool,className:_.default.string,color:_.default.string,cssModule:_.default.object,innerRef:_.default.oneOfType([_.default.object,_.default.string,_.default.func]),inverse:_.default.bool,outline:_.default.bool,tag:k};function R(e){var t=e.className,n=e.cssModule,r=e.color,i=e.body,a=e.inverse,o=e.outline,s=e.tag,c=s===void 0?`div`:s,l=e.innerRef,d=un(e,cn),f=O((0,A.default)(t,`card`,a?`text-white`:!1,i?`card-body`:!1,r?`${o?`border`:`bg`}-${r}`:!1),n);return u.createElement(c,ln({},d,{className:f,ref:l}))}R.propTypes=fn;var pn=[`className`,`cssModule`,`innerRef`,`tag`];function mn(){return mn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},mn.apply(this,arguments)}function hn(e,t){if(e==null)return{};var n=gn(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gn(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var _n={className:_.default.string,cssModule:_.default.object,innerRef:_.default.oneOfType([_.default.object,_.default.string,_.default.func]),tag:k};function z(e){var t=e.className,n=e.cssModule,r=e.innerRef,i=e.tag,a=i===void 0?`div`:i,o=hn(e,pn),s=O((0,A.default)(t,`card-body`),n);return u.createElement(a,mn({},o,{className:s,ref:r}))}z.propTypes=_n;var vn=[`className`,`cssModule`,`tag`];function yn(){return yn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},yn.apply(this,arguments)}function bn(e,t){if(e==null)return{};var n=xn(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xn(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var Sn={className:_.default.string,cssModule:_.default.object,tag:k};function B(e){var t=e.className,n=e.cssModule,r=e.tag,i=r===void 0?`div`:r,a=bn(e,vn),o=O((0,A.default)(t,`card-header`),n);return u.createElement(i,yn({},a,{className:o}))}B.propTypes=Sn;var Cn=[`children`,`className`,`barClassName`,`cssModule`,`value`,`min`,`max`,`animated`,`striped`,`color`,`bar`,`multi`,`tag`,`style`,`barStyle`,`barAriaValueText`,`barAriaLabelledBy`];function wn(){return wn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},wn.apply(this,arguments)}function Tn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function En(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Tn(Object(n),!0).forEach(function(t){Dn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Tn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Dn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function On(e,t){if(e==null)return{};var n=kn(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kn(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var An={animated:_.default.bool,bar:_.default.bool,barAriaLabelledBy:_.default.string,barAriaValueText:_.default.string,barClassName:_.default.string,barStyle:_.default.object,children:_.default.node,className:_.default.string,cssModule:_.default.object,color:_.default.string,max:_.default.oneOfType([_.default.string,_.default.number]),min:_.default.oneOfType([_.default.string,_.default.number]),multi:_.default.bool,striped:_.default.bool,style:_.default.object,tag:k,value:_.default.oneOfType([_.default.string,_.default.number])};function jn(e){var t=e.children,n=e.className,r=e.barClassName,i=e.cssModule,a=e.value,o=a===void 0?0:a,s=e.min,c=s===void 0?0:s,l=e.max,d=l===void 0?100:l,f=e.animated,p=e.striped,m=e.color,h=e.bar,g=e.multi,_=e.tag,v=_===void 0?`div`:_,y=e.style,b=y===void 0?{}:y,x=e.barStyle,S=x===void 0?{}:x,C=e.barAriaValueText,w=e.barAriaLabelledBy,T=On(e,Cn),E=he(o)/he(d)*100,D=O((0,A.default)(n,`progress`),i),ee={className:O((0,A.default)(`progress-bar`,h&&n||r,f?`progress-bar-animated`:null,m?`bg-${m}`:null,p||f?`progress-bar-striped`:null),i),style:En(En(En({},h?b:{}),S),{},{width:`${E}%`}),role:`progressbar`,"aria-valuenow":o,"aria-valuemin":c,"aria-valuemax":d,"aria-valuetext":C,"aria-labelledby":w,children:t};return h?u.createElement(v,wn({},T,ee)):u.createElement(v,wn({},T,{style:b,className:D}),g?t:u.createElement(`div`,ee))}jn.propTypes=An;function Mn(e){"@babel/helpers - typeof";return Mn=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Mn(e)}function Nn(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function Pn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Fn(e,t,n){return t&&Pn(e.prototype,t),n&&Pn(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function In(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ln(e,t)}function Ln(e,t){return Ln=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ln(e,t)}function Rn(e){var t=Vn();return function(){var n=Hn(e),r;if(t){var i=Hn(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return zn(this,r)}}function zn(e,t){if(t&&(Mn(t)===`object`||typeof t==`function`))return t;if(t!==void 0)throw TypeError(`Derived constructors may only return object or undefined`);return Bn(e)}function Bn(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function Vn(){if(typeof Reflect>`u`||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Hn(e){return Hn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Hn(e)}var Un={children:_.default.node.isRequired,node:_.default.any},Wn=function(e){In(n,e);var t=Rn(n);function n(){return Nn(this,n),t.apply(this,arguments)}return Fn(n,[{key:`componentWillUnmount`,value:function(){this.defaultNode&&document.body.removeChild(this.defaultNode),this.defaultNode=null}},{key:`render`,value:function(){return de?(!this.props.node&&!this.defaultNode&&(this.defaultNode=document.createElement(`div`),document.body.appendChild(this.defaultNode)),f.createPortal(this.props.children,this.props.node||this.defaultNode)):null}}]),n}(u.Component);Wn.propTypes=Un;function Gn(e){"@babel/helpers - typeof";return Gn=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Gn(e)}function Kn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function V(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Kn(Object(n),!0).forEach(function(t){H(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Kn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function qn(){return qn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},qn.apply(this,arguments)}function H(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jn(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function Yn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Xn(e,t,n){return t&&Yn(e.prototype,t),n&&Yn(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Zn(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Qn(e,t)}function Qn(e,t){return Qn=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Qn(e,t)}function $n(e){var t=tr();return function(){var n=nr(e),r;if(t){var i=nr(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return er(this,r)}}function er(e,t){if(t&&(Gn(t)===`object`||typeof t==`function`))return t;if(t!==void 0)throw TypeError(`Derived constructors may only return object or undefined`);return U(e)}function U(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function tr(){if(typeof Reflect>`u`||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function nr(e){return nr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},nr(e)}function rr(){}var ir=_.default.shape(I.propTypes),ar={autoFocus:_.default.bool,backdrop:_.default.oneOfType([_.default.bool,_.default.oneOf([`static`])]),backdropClassName:_.default.string,backdropTransition:ir,centered:_.default.bool,children:_.default.node,contentClassName:_.default.string,className:_.default.string,container:se,cssModule:_.default.object,external:_.default.node,fade:_.default.bool,fullscreen:_.default.oneOfType([_.default.bool,_.default.oneOf([`sm`,`md`,`lg`,`xl`])]),innerRef:_.default.oneOfType([_.default.object,_.default.string,_.default.func]),isOpen:_.default.bool,keyboard:_.default.bool,labelledBy:_.default.string,modalClassName:_.default.string,modalTransition:ir,onClosed:_.default.func,onEnter:_.default.func,onExit:_.default.func,onOpened:_.default.func,returnFocusAfterClose:_.default.bool,role:_.default.string,scrollable:_.default.bool,size:_.default.string,toggle:_.default.func,trapFocus:_.default.bool,unmountOnClose:_.default.bool,wrapClassName:_.default.string,zIndex:_.default.oneOfType([_.default.number,_.default.string])},or=Object.keys(ar),sr={isOpen:!1,autoFocus:!0,centered:!1,scrollable:!1,role:`dialog`,backdrop:!0,keyboard:!0,zIndex:1050,fade:!0,onOpened:rr,onClosed:rr,modalTransition:{timeout:ce.Modal},backdropTransition:{mountOnEnter:!0,timeout:ce.Fade},unmountOnClose:!0,returnFocusAfterClose:!0,container:`body`,trapFocus:!1},cr=function(e){Zn(n,e);var t=$n(n);function n(e){var r;return Jn(this,n),r=t.call(this,e),r._element=null,r._originalBodyPadding=null,r.getFocusableChildren=r.getFocusableChildren.bind(U(r)),r.handleBackdropClick=r.handleBackdropClick.bind(U(r)),r.handleBackdropMouseDown=r.handleBackdropMouseDown.bind(U(r)),r.handleEscape=r.handleEscape.bind(U(r)),r.handleStaticBackdropAnimation=r.handleStaticBackdropAnimation.bind(U(r)),r.handleTab=r.handleTab.bind(U(r)),r.onOpened=r.onOpened.bind(U(r)),r.onClosed=r.onClosed.bind(U(r)),r.manageFocusAfterClose=r.manageFocusAfterClose.bind(U(r)),r.clearBackdropAnimationTimeout=r.clearBackdropAnimationTimeout.bind(U(r)),r.trapFocus=r.trapFocus.bind(U(r)),r.state={isOpen:!1,showStaticBackdropAnimation:!1},r}return Xn(n,[{key:`componentDidMount`,value:function(){var e=this.props,t=e.isOpen,n=e.autoFocus,r=e.onEnter;t&&(this.init(),this.setState({isOpen:!0}),n&&this.setFocus()),r&&r(),document.addEventListener(`focus`,this.trapFocus,!0),this._isMounted=!0}},{key:`componentDidUpdate`,value:function(e,t){if(this.props.isOpen&&!e.isOpen){this.init(),this.setState({isOpen:!0});return}this.props.autoFocus&&this.state.isOpen&&!t.isOpen&&this.setFocus(),this._element&&e.zIndex!==this.props.zIndex&&(this._element.style.zIndex=this.props.zIndex)}},{key:`componentWillUnmount`,value:function(){this.clearBackdropAnimationTimeout(),this.props.onExit&&this.props.onExit(),this._element&&(this.destroy(),(this.props.isOpen||this.state.isOpen)&&this.close()),document.removeEventListener(`focus`,this.trapFocus,!0),this._isMounted=!1}},{key:`handleBackdropClick`,value:function(e){if(e.target===this._mouseDownElement){e.stopPropagation();var t=this._dialog?this._dialog.parentNode:null;if(t&&e.target===t&&this.props.backdrop===`static`&&this.handleStaticBackdropAnimation(),!this.props.isOpen||this.props.backdrop!==!0)return;t&&e.target===t&&this.props.toggle&&this.props.toggle(e)}}},{key:`handleTab`,value:function(e){if(e.which===9&&!(this.modalIndex<n.openCount-1)){var t=this.getFocusableChildren(),r=t.length;if(r!==0){for(var i=this.getFocusedChild(),a=0,o=0;o<r;o+=1)if(t[o]===i){a=o;break}e.shiftKey&&a===0?(e.preventDefault(),t[r-1].focus()):!e.shiftKey&&a===r-1&&(e.preventDefault(),t[0].focus())}}}},{key:`handleBackdropMouseDown`,value:function(e){this._mouseDownElement=e.target}},{key:`handleEscape`,value:function(e){this.props.isOpen&&e.keyCode===ue.esc&&this.props.toggle&&(this.props.keyboard?(e.preventDefault(),e.stopPropagation(),this.props.toggle(e)):this.props.backdrop===`static`&&(e.preventDefault(),e.stopPropagation(),this.handleStaticBackdropAnimation()))}},{key:`handleStaticBackdropAnimation`,value:function(){var e=this;this.clearBackdropAnimationTimeout(),this.setState({showStaticBackdropAnimation:!0}),this._backdropAnimationTimeout=setTimeout(function(){e.setState({showStaticBackdropAnimation:!1})},100)}},{key:`onOpened`,value:function(e,t){this.props.onOpened(),(this.props.modalTransition.onEntered||rr)(e,t)}},{key:`onClosed`,value:function(e){var t=this.props.unmountOnClose;this.props.onClosed(),(this.props.modalTransition.onExited||rr)(e),t&&this.destroy(),this.close(),this._isMounted&&this.setState({isOpen:!1})}},{key:`setFocus`,value:function(){this._dialog&&this._dialog.parentNode&&typeof this._dialog.parentNode.focus==`function`&&this._dialog.parentNode.focus()}},{key:`getFocusableChildren`,value:function(){return this._element.querySelectorAll(be.join(`, `))}},{key:`getFocusedChild`,value:function(){var e,t=this.getFocusableChildren();try{e=document.activeElement}catch{e=t[0]}return e}},{key:`trapFocus`,value:function(e){if(this.props.trapFocus&&this._element&&!(this._dialog&&this._dialog.parentNode===e.target)&&!(this.modalIndex<n.openCount-1)){for(var t=this.getFocusableChildren(),r=0;r<t.length;r+=1)if(t[r]===e.target)return;t.length>0&&(e.preventDefault(),e.stopPropagation(),t[0].focus())}}},{key:`init`,value:function(){try{this._triggeringElement=document.activeElement}catch{this._triggeringElement=null}this._element||(this._element=document.createElement(`div`),this._element.setAttribute(`tabindex`,`-1`),this._element.style.position=`relative`,this._element.style.zIndex=this.props.zIndex,this._mountContainer=ye(this.props.container),this._mountContainer.appendChild(this._element)),this._originalBodyPadding=T(),n.openCount<1&&(n.originalBodyOverflow=window.getComputedStyle(document.body).overflow),E(),n.openCount===0&&(document.body.className=(0,A.default)(document.body.className,O(`modal-open`,this.props.cssModule)),document.body.style.overflow=`hidden`),this.modalIndex=n.openCount,n.openCount+=1}},{key:`destroy`,value:function(){this._element&&=(this._mountContainer.removeChild(this._element),null),this.manageFocusAfterClose()}},{key:`manageFocusAfterClose`,value:function(){if(this._triggeringElement){var e=this.props.returnFocusAfterClose;this._triggeringElement.focus&&e&&this._triggeringElement.focus(),this._triggeringElement=null}}},{key:`close`,value:function(){if(n.openCount<=1){var e=O(`modal-open`,this.props.cssModule),t=RegExp(`(^| )${e}( |\$)`);document.body.className=document.body.className.replace(t,` `).trim(),document.body.style.overflow=n.originalBodyOverflow}this.manageFocusAfterClose(),n.openCount=Math.max(0,n.openCount-1),C(this._originalBodyPadding)}},{key:`clearBackdropAnimationTimeout`,value:function(){this._backdropAnimationTimeout&&=(clearTimeout(this._backdropAnimationTimeout),void 0)}},{key:`renderModalDialog`,value:function(){var e,t=this,n=ee(this.props,or),r=`modal-dialog`;return u.createElement(`div`,qn({},n,{className:O((0,A.default)(r,this.props.className,(e={},H(e,`modal-${this.props.size}`,this.props.size),H(e,`${r}-centered`,this.props.centered),H(e,`${r}-scrollable`,this.props.scrollable),H(e,`modal-fullscreen`,this.props.fullscreen===!0),H(e,`modal-fullscreen-${this.props.fullscreen}-down`,typeof this.props.fullscreen==`string`),e)),this.props.cssModule),role:`document`,ref:function(e){t._dialog=e}}),u.createElement(`div`,{className:O((0,A.default)(`modal-content`,this.props.contentClassName),this.props.cssModule)},this.props.children))}},{key:`render`,value:function(){var e=this.props.unmountOnClose;if(this._element&&(this.state.isOpen||!e)){var t=!!this._element&&!this.state.isOpen&&!e;this._element.style.display=t?`none`:`block`;var n=this.props,r=n.wrapClassName,i=n.modalClassName,a=n.backdropClassName,o=n.cssModule,s=n.isOpen,c=n.backdrop,l=n.role,d=n.labelledBy,f=n.external,p=n.innerRef,m={onClick:this.handleBackdropClick,onMouseDown:this.handleBackdropMouseDown,onKeyUp:this.handleEscape,onKeyDown:this.handleTab,style:{display:`block`},"aria-labelledby":d,"aria-modal":!0,role:l,tabIndex:`-1`},h=this.props.fade,g=V(V(V({},I.defaultProps),this.props.modalTransition),{},{baseClass:h?this.props.modalTransition.baseClass:``,timeout:h?this.props.modalTransition.timeout:0}),_=V(V(V({},I.defaultProps),this.props.backdropTransition),{},{baseClass:h?this.props.backdropTransition.baseClass:``,timeout:h?this.props.backdropTransition.timeout:0}),v=c&&(h?u.createElement(I,qn({},_,{in:s&&!!c,cssModule:o,className:O((0,A.default)(`modal-backdrop`,a),o)})):u.createElement(`div`,{className:O((0,A.default)(`modal-backdrop`,`show`,a),o)}));return u.createElement(Wn,{node:this._element},u.createElement(`div`,{className:O(r)},u.createElement(I,qn({},m,g,{in:s,onEntered:this.onOpened,onExited:this.onClosed,cssModule:o,className:O((0,A.default)(`modal`,i,this.state.showStaticBackdropAnimation&&`modal-static`),o),innerRef:p}),f,this.renderModalDialog()),v))}return null}}]),n}(u.Component);cr.propTypes=ar,cr.defaultProps=sr,cr.openCount=0,cr.originalBodyOverflow=null;var lr=[`className`,`cssModule`,`children`,`toggle`,`tag`,`wrapTag`,`closeAriaLabel`,`close`];function ur(){return ur=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ur.apply(this,arguments)}function dr(e,t){if(e==null)return{};var n=fr(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fr(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var pr={children:_.default.node,className:_.default.string,close:_.default.object,closeAriaLabel:_.default.string,cssModule:_.default.object,tag:k,toggle:_.default.func,wrapTag:k};function mr(e){var t,n=e.className,r=e.cssModule,i=e.children,a=e.toggle,o=e.tag,s=o===void 0?`h5`:o,c=e.wrapTag,l=c===void 0?`div`:c,d=e.closeAriaLabel,f=d===void 0?`Close`:d,p=e.close,m=dr(e,lr),h=O((0,A.default)(n,`modal-header`),r);return!p&&a&&(t=u.createElement(`button`,{type:`button`,onClick:a,className:O(`btn-close`,r),"aria-label":f})),u.createElement(l,ur({},m,{className:h}),u.createElement(s,{className:O(`modal-title`,r)},i),p||t)}mr.propTypes=pr;var hr=[`className`,`cssModule`,`tag`];function gr(){return gr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},gr.apply(this,arguments)}function _r(e,t){if(e==null)return{};var n=vr(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vr(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var yr={className:_.default.string,cssModule:_.default.object,tag:k};function br(e){var t=e.className,n=e.cssModule,r=e.tag,i=r===void 0?`div`:r,a=_r(e,hr),o=O((0,A.default)(t,`modal-body`),n);return u.createElement(i,gr({},a,{className:o}))}br.propTypes=yr;var xr=[`className`,`cssModule`,`tag`];function Sr(){return Sr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Sr.apply(this,arguments)}function Cr(e,t){if(e==null)return{};var n=wr(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wr(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var Tr={className:_.default.string,cssModule:_.default.object,tag:k};function Er(e){var t=e.className,n=e.cssModule,r=e.tag,i=r===void 0?`div`:r,a=Cr(e,xr),o=O((0,A.default)(t,`modal-footer`),n);return u.createElement(i,Sr({},a,{className:o}))}Er.propTypes=Tr;var Dr=[`className`,`cssModule`,`size`,`bordered`,`borderless`,`striped`,`dark`,`hover`,`responsive`,`tag`,`responsiveTag`,`innerRef`];function Or(){return Or=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Or.apply(this,arguments)}function kr(e,t){if(e==null)return{};var n=Ar(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ar(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var jr={bordered:_.default.bool,borderless:_.default.bool,className:_.default.string,cssModule:_.default.object,dark:_.default.bool,hover:_.default.bool,innerRef:_.default.oneOfType([_.default.func,_.default.string,_.default.object]),responsive:_.default.oneOfType([_.default.bool,_.default.string]),responsiveTag:k,size:_.default.string,striped:_.default.bool,tag:k};function Mr(e){var t=e.className,n=e.cssModule,r=e.size,i=e.bordered,a=e.borderless,o=e.striped,s=e.dark,c=e.hover,l=e.responsive,d=e.tag,f=d===void 0?`table`:d,p=e.responsiveTag,m=p===void 0?`div`:p,h=e.innerRef,g=kr(e,Dr),_=O((0,A.default)(t,`table`,r?`table-`+r:!1,i?`table-bordered`:!1,a?`table-borderless`:!1,o?`table-striped`:!1,s?`table-dark`:!1,c?`table-hover`:!1),n),v=u.createElement(f,Or({},g,{ref:h,className:_}));if(l){var y=O(l===!0?`table-responsive`:`table-responsive-${l}`,n);return u.createElement(m,{className:y},v)}return v}Mr.propTypes=jr;function Nr(e){"@babel/helpers - typeof";return Nr=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Nr(e)}var Pr=[`className`,`cssModule`,`tag`,`innerRef`];function Fr(){return Fr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Fr.apply(this,arguments)}function Ir(e,t){if(e==null)return{};var n=Lr(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lr(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}function Rr(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function zr(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Br(e,t,n){return t&&zr(e.prototype,t),n&&zr(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Vr(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Hr(e,t)}function Hr(e,t){return Hr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Hr(e,t)}function Ur(e){var t=Kr();return function(){var n=qr(e),r;if(t){var i=qr(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return Wr(this,r)}}function Wr(e,t){if(t&&(Nr(t)===`object`||typeof t==`function`))return t;if(t!==void 0)throw TypeError(`Derived constructors may only return object or undefined`);return Gr(e)}function Gr(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function Kr(){if(typeof Reflect>`u`||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function qr(e){return qr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},qr(e)}var Jr={children:_.default.node,tag:k,innerRef:_.default.oneOfType([_.default.object,_.default.func,_.default.string]),className:_.default.string,cssModule:_.default.object},Yr=function(e){Vr(n,e);var t=Ur(n);function n(e){var r;return Rr(this,n),r=t.call(this,e),r.getRef=r.getRef.bind(Gr(r)),r.submit=r.submit.bind(Gr(r)),r}return Br(n,[{key:`getRef`,value:function(e){this.props.innerRef&&this.props.innerRef(e),this.ref=e}},{key:`submit`,value:function(){this.ref&&this.ref.submit()}},{key:`render`,value:function(){var e=this.props,t=e.className,n=e.cssModule,r=e.tag,i=r===void 0?`form`:r,a=e.innerRef,o=Ir(e,Pr),s=O(t,n);return u.createElement(i,Fr({},o,{ref:a,className:s}))}}]),n}(d);Yr.propTypes=Jr;var Xr=[`className`,`cssModule`,`row`,`disabled`,`check`,`inline`,`floating`,`noMargin`,`tag`,`switch`];function Zr(){return Zr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Zr.apply(this,arguments)}function Qr(e,t){if(e==null)return{};var n=$r(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $r(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var ei={children:_.default.node,row:_.default.bool,check:_.default.bool,switch:_.default.bool,inline:_.default.bool,floating:_.default.bool,noMargin:_.default.bool,disabled:_.default.bool,tag:k,className:_.default.string,cssModule:_.default.object};function W(e){var t=e.className,n=e.cssModule,r=e.row,i=e.disabled,a=e.check,o=e.inline,s=e.floating,c=e.noMargin,l=e.tag,d=l===void 0?`div`:l,f=e.switch,p=Qr(e,Xr),m=a||f,h=O((0,A.default)(t,r?`row`:!1,m?`form-check`:!1,f?`form-switch`:!1,m||c?!1:`mb-3`,m&&o?`form-check-inline`:!1,m&&i?`disabled`:!1,s&&`form-floating`),n);return d===`fieldset`&&(p.disabled=i),u.createElement(d,Zr({},p,{className:h}))}W.propTypes=ei;function ti(e){"@babel/helpers - typeof";return ti=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},ti(e)}var ni=[`className`,`cssModule`,`type`,`bsSize`,`valid`,`invalid`,`tag`,`addon`,`plaintext`,`innerRef`];function ri(){return ri=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ri.apply(this,arguments)}function ii(e,t){if(e==null)return{};var n=ai(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ai(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}function oi(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function si(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function ci(e,t,n){return t&&si(e.prototype,t),n&&si(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function li(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ui(e,t)}function ui(e,t){return ui=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ui(e,t)}function di(e){var t=mi();return function(){var n=hi(e),r;if(t){var i=hi(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return fi(this,r)}}function fi(e,t){if(t&&(ti(t)===`object`||typeof t==`function`))return t;if(t!==void 0)throw TypeError(`Derived constructors may only return object or undefined`);return pi(e)}function pi(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function mi(){if(typeof Reflect>`u`||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function hi(e){return hi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},hi(e)}var gi={children:_.default.node,type:_.default.string,size:_.default.oneOfType([_.default.number,_.default.string]),bsSize:_.default.string,valid:_.default.bool,invalid:_.default.bool,tag:k,innerRef:_.default.oneOfType([_.default.object,_.default.func,_.default.string]),plaintext:_.default.bool,addon:_.default.bool,className:_.default.string,cssModule:_.default.object},G=function(e){li(n,e);var t=di(n);function n(e){var r;return oi(this,n),r=t.call(this,e),r.getRef=r.getRef.bind(pi(r)),r.focus=r.focus.bind(pi(r)),r}return ci(n,[{key:`getRef`,value:function(e){this.props.innerRef&&this.props.innerRef(e),this.ref=e}},{key:`focus`,value:function(){this.ref&&this.ref.focus()}},{key:`render`,value:function(){var e=this.props,t=e.className,n=e.cssModule,r=e.type,i=r===void 0?`text`:r,a=e.bsSize,o=e.valid,s=e.invalid,c=e.tag,l=e.addon,d=e.plaintext,f=e.innerRef,p=ii(e,ni),m=[`switch`,`radio`,`checkbox`].indexOf(i)>-1,h=/\D/g,g=i===`textarea`,_=i===`select`,v=i===`range`,y=c||(_||g?i:`input`),b=`form-control`;d?(b=`${b}-plaintext`,y=c||`input`):v?b=`form-range`:_?b=`form-select`:m&&(b=l?null:`form-check-input`),p.size&&h.test(p.size)&&(re(`Please use the prop "bsSize" instead of the "size" to bootstrap's input sizing.`),a=p.size,delete p.size);var x=O((0,A.default)(t,s&&`is-invalid`,o&&`is-valid`,a?_?`form-select-${a}`:`form-control-${a}`:!1,b),n);return(y===`input`||c&&typeof c==`function`)&&(p.type=i===`switch`?`checkbox`:i),p.children&&!(d||i===`select`||typeof y!=`string`||y===`select`)&&(re(`Input with a type of "${i}" cannot have children. Please use "value"/"defaultValue" instead.`),delete p.children),u.createElement(y,ri({},p,{ref:f,className:x,"aria-invalid":s}))}}]),n}(u.Component);G.propTypes=gi;var _i=[`className`,`cssModule`,`hidden`,`widths`,`tag`,`check`,`size`,`for`];function vi(){return vi=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},vi.apply(this,arguments)}function yi(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bi(e,t){if(e==null)return{};var n=xi(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xi(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var Si=[`xs`,`sm`,`md`,`lg`,`xl`,`xxl`],Ci=_.default.oneOfType([_.default.number,_.default.string]),wi=_.default.oneOfType([_.default.bool,_.default.string,_.default.number,_.default.shape({size:Ci,order:Ci,offset:Ci})]),Ti={children:_.default.node,hidden:_.default.bool,check:_.default.bool,size:_.default.string,for:_.default.string,tag:k,className:_.default.string,cssModule:_.default.object,xs:wi,sm:wi,md:wi,lg:wi,xl:wi,xxl:wi,widths:_.default.array},Ei=function(e,t,n){return n===!0||n===``?e?`col`:`col-${t}`:n===`auto`?e?`col-auto`:`col-${t}-auto`:e?`col-${n}`:`col-${t}-${n}`};function K(e){var t=e.className,n=e.cssModule,r=e.hidden,i=e.widths,a=i===void 0?Si:i,o=e.tag,s=o===void 0?`label`:o,c=e.check,l=e.size,d=e.for,f=bi(e,_i),p=[];a.forEach(function(t,r){var i=e[t];if(delete f[t],!(!i&&i!==``)){var a=!r,o;if(me(i)){var s,c=a?`-`:`-${t}-`;o=Ei(a,t,i.size),p.push(O((0,A.default)((s={},yi(s,o,i.size||i.size===``),yi(s,`order${c}${i.order}`,i.order||i.order===0),yi(s,`offset${c}${i.offset}`,i.offset||i.offset===0),s))),n)}else o=Ei(a,t,i),p.push(o)}});var m=l||p.length,h=!(c||m),g=O((0,A.default)(t,r?`visually-hidden`:!1,c?`form-check-label`:!1,l?`col-form-label-${l}`:!1,p,m?`col-form-label`:!1,h?`form-label`:!1),n);return u.createElement(s,vi({htmlFor:d},f,{className:g}))}K.propTypes=Ti;var Di=[`className`,`closeClassName`,`closeAriaLabel`,`cssModule`,`tag`,`color`,`isOpen`,`toggle`,`children`,`transition`,`fade`,`innerRef`];function Oi(){return Oi=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Oi.apply(this,arguments)}function ki(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ai(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?ki(Object(n),!0).forEach(function(t){ji(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ki(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ji(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Mi(e,t){if(e==null)return{};var n=Ni(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ni(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var Pi={children:_.default.node,className:_.default.string,closeClassName:_.default.string,closeAriaLabel:_.default.string,color:_.default.string,cssModule:_.default.object,fade:_.default.bool,innerRef:_.default.oneOfType([_.default.object,_.default.string,_.default.func]),isOpen:_.default.bool,tag:k,toggle:_.default.func,transition:_.default.shape(I.propTypes)};function q(e){var t=e.className,n=e.closeClassName,r=e.closeAriaLabel,i=r===void 0?`Close`:r,a=e.cssModule,o=e.tag,s=o===void 0?`div`:o,c=e.color,l=c===void 0?`success`:c,d=e.isOpen,f=d===void 0||d,p=e.toggle,m=e.children,h=e.transition,g=h===void 0?Ai(Ai({},I.defaultProps),{},{unmountOnExit:!0}):h,_=e.fade,v=_===void 0||_,y=e.innerRef,b=Mi(e,Di),x=O((0,A.default)(t,`alert`,`alert-${l}`,{"alert-dismissible":p}),a),S=O((0,A.default)(`btn-close`,n),a),C=Ai(Ai(Ai({},I.defaultProps),g),{},{baseClass:v?g.baseClass:``,timeout:v?g.timeout:0});return u.createElement(I,Oi({},b,C,{tag:s,className:x,in:f,role:`alert`,innerRef:y}),p?u.createElement(`button`,{type:`button`,className:S,"aria-label":i,onClick:p}):null,m)}q.propTypes=Pi;var Fi=[`className`,`cssModule`,`type`,`size`,`color`,`children`,`tag`];function Ii(){return Ii=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ii.apply(this,arguments)}function Li(e,t){if(e==null)return{};var n=Ri(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ri(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}var zi={tag:k,type:_.default.oneOf([`border`,`grow`]),size:_.default.oneOf([`sm`]),color:_.default.oneOf([`primary`,`secondary`,`success`,`danger`,`warning`,`info`,`light`,`dark`]),className:_.default.string,cssModule:_.default.object,children:_.default.string};function J(e){var t=e.className,n=e.cssModule,r=e.type,i=r===void 0?`border`:r,a=e.size,o=e.color,s=e.children,c=s===void 0?`Loading...`:s,l=e.tag,d=l===void 0?`div`:l,f=Li(e,Fi),p=O((0,A.default)(t,a?`spinner-${i}-${a}`:!1,`spinner-${i}`,o?`text-${o}`:!1),n);return u.createElement(d,Ii({role:`status`},f,{className:p}),c&&u.createElement(`span`,{className:O(`visually-hidden`,n)},c))}J.propTypes=zi;var Bi=`/plugins/signalk-backup/api`,Vi=class extends Error{conflict;constructor(e,t){super(e),this.conflict=t,this.name=`PartialRestoreConflictError`}},Hi=class extends Error{status;code;constructor(e,t,n){super(e),this.status=t,this.code=n,this.name=`ApiError`}};async function Y(e,t){let n=await fetch(Bi+e,t),r=await n.json().catch(()=>null);if(typeof r==`object`&&r&&`success`in r){let e=r;if(e.success===!1){let t=e.error?.code;throw new Hi(e.error?.message??`unknown server error`,n.status,t)}if(e.success===!0&&`data`in r)return e.data}if(!n.ok)throw new Hi(`HTTP ${n.status}`,n.status,void 0);return r}var X={health:()=>Y(`/health`),listBackups:()=>Y(`/backups`),scheduler:()=>Y(`/backups/scheduler`),repository:()=>Y(`/backups/repository`),createBackup:e=>Y(`/backups`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({description:e})}),deleteBackup:e=>Y(`/backups/${encodeURIComponent(e)}`,{method:`DELETE`}),uploadBackup:(e,t)=>{let n=new FormData;return n.append(`file`,e),t&&n.append(`description`,t),n.append(`restoreImmediately`,`false`),Y(`/backups/upload`,{method:`POST`,body:n})},startRestore:e=>Y(`/backups/${encodeURIComponent(e)}/restore`,{method:`POST`}),restoreStatus:()=>Y(`/backups/restore/status`),resetRestoreState:()=>Y(`/backups/restore/reset`,{method:`POST`}),downloadUrl:e=>`${Bi}/backups/${encodeURIComponent(e)}/download`,listBackupTree:(e,t)=>Y(`/backups/${encodeURIComponent(e)}/tree?path=${encodeURIComponent(t)}`),downloadSubtreeUrl:(e,t)=>`${Bi}/backups/${encodeURIComponent(e)}/download-subtree?path=${encodeURIComponent(t)}`,restorePartial:async(e,t)=>{let n=`${Bi}/backups/${encodeURIComponent(e)}/restore-partial`,r=await fetch(n,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(r.status===409){let e=await r.json().catch(()=>null),t=e?.data?.conflict,n=e?.error?.code;throw n===`TARGET_EXISTS`&&t?new Vi(e.error?.message??`Target already exists`,t):Error(`restore-partial → 409${n?` [${n}]`:``}: ${e?.error?.message??`conflict`}`)}if(!r.ok){let e=await r.text().catch(()=>``);throw Error(`restore-partial → ${r.status}: ${e.slice(0,200)}`)}let i=await r.json();if(i.success===!1)throw Error(`restore-partial: ${i.error?.message??`unknown error`}`);return i.data??{started:!0}},restorePartialStatus:()=>Y(`/backups/restore-partial/status`),resetRestorePartialState:()=>Y(`/backups/restore-partial/reset`,{method:`POST`}),restorePartialHost:async e=>{let t=await fetch(`${Bi}/restore-partial-host`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(t.status===409){let e=await t.json().catch(()=>null),n=e?.data?.conflict,r=e?.error?.code;throw r===`TARGET_EXISTS`&&n?new Vi(e.error?.message??`Target already exists`,n):Error(`restore-partial-host → 409${r?` [${r}]`:``}: ${e?.error?.message??`conflict`}`)}if(!t.ok){let e=await t.text().catch(()=>``);throw Error(`restore-partial-host → ${t.status}: ${e.slice(0,200)}`)}let n=await t.json();if(n.success===!1)throw Error(`restore-partial-host: ${n.error?.message??`unknown error`}`);return n.data??{started:!0}},restorePartialHostStatus:()=>Y(`/restore-partial-host/status`),resetRestorePartialHostState:()=>Y(`/restore-partial-host/reset`,{method:`POST`}),listStaging:()=>Y(`/db-export/staging`),stagingDownloadUrl:e=>`${Bi}/db-export/staging/download?file=${encodeURIComponent(e)}`,cloudStatus:async()=>{let e=await Y(`/cloud/status`);return{...e,provider:e.provider??`gdrive`}},gdriveStatus:()=>Y(`/cloud/gdrive/status`),gdriveAuthState:()=>Y(`/cloud/gdrive/auth-state`),gdriveConnect:()=>Y(`/cloud/gdrive/connect`,{method:`POST`}),gdriveCancel:()=>Y(`/cloud/gdrive/cancel`,{method:`POST`}),gdriveAuthCallback:e=>Y(`/cloud/gdrive/auth-callback`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({url:e})}),gdriveDisconnect:()=>Y(`/cloud/gdrive/disconnect`,{method:`POST`}),localStatus:()=>Y(`/cloud/local/status`),localDiscover:()=>Y(`/cloud/local/discover`),localConfigure:(e,t)=>Y(`/cloud/local/configure`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({containerPath:e,hostPath:t})}),localDisconnect:()=>Y(`/cloud/local/disconnect`,{method:`POST`}),smbStatus:()=>Y(`/cloud/smb/status`),smbDiscover:()=>Y(`/cloud/smb/discover`),smbConnect:e=>Y(`/cloud/smb/connect`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),smbDisconnect:()=>Y(`/cloud/smb/disconnect`,{method:`POST`}),dbExportConfig:()=>Y(`/db-export/config`),dbExportConfigSet:e=>Y(`/db-export/config`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),cloudSync:()=>Y(`/cloud/sync`,{method:`POST`}),cloudSyncCancel:()=>Y(`/cloud/sync/cancel`,{method:`POST`}),cloudConfig:e=>Y(`/cloud/config`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),schedulerStart:()=>Y(`/backups/scheduler/start`,{method:`POST`}),schedulerStop:()=>Y(`/backups/scheduler/stop`,{method:`POST`}),retention:()=>Y(`/backups/retention`),setRetention:e=>Y(`/backups/retention`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),exclusions:()=>Y(`/backups/exclusions`),setExclusions:e=>Y(`/backups/exclusions`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({exclusions:e})}),dataDirs:()=>Y(`/backups/data-dirs`),pluginDataDirs:()=>Y(`/backups/plugin-data-dirs`),passwordStatus:()=>Y(`/backups/password`),setPassword:e=>Y(`/backups/password`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({password:e,confirmPassword:e})}),resetPassword:()=>Y(`/backups/password`,{method:`DELETE`}),pluginStatus:async()=>{let e=await fetch(`/plugins/signalk-backup/status`);if(!e.ok)throw Error(`/status → ${e.status}`);return e.json()}};function Z(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(1)} ${t[r]}`}function Ui(e,t){if(!e||!t)return e;let n=e=>e.replace(/\/+$/,``)||`/`,r=n(t.containerPath),i=n(t.hostPath);if(n(e)===r)return i;let a=r===`/`?`/`:r+`/`;return e.startsWith(a)?i+`/`+e.slice(a.length):e}function Q(e){if(!e)return`Never`;let t=new Date(e);return isNaN(t.getTime())?e:t.toLocaleString(void 0,{year:`numeric`,month:`short`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function $(e,t={}){let{intervalMs:n}=t,[r,i]=c(null),[o,u]=c(!0),[d,f]=c(null),p=a(e);p.current=e;let m=s(async e=>{try{let t=await p.current();if(e.current)return;i(t),f(null)}catch(t){if(e.current)return;f(t instanceof Error?t.message:String(t))}finally{e.current||u(!1)}},[]),[h,g]=c(0),_=s(()=>{g(e=>e+1)},[]);return l(()=>{let e={current:!1};u(!0),m(e);let t;return n&&n>0&&(t=setInterval(()=>{m(e)},n)),()=>{e.current=!0,t&&clearInterval(t)}},[n,m,h]),{data:r,loading:o,error:d,refresh:_}}function Wi({status:e}){return e?e.ready?n(L,{color:`success`,children:`Ready`}):n(L,{color:`warning`,children:`Not ready`}):n(L,{color:`secondary`,children:`Unknown`})}function Gi({stats:e}){let t=e.totalSize>0?e.originalSize/e.totalSize:0;return r(j,{className:`g-2`,children:[r(N,{xs:6,children:[n(`small`,{className:`text-muted d-block`,children:`On disk`}),n(`div`,{children:Z(e.totalSize)})]}),r(N,{xs:6,children:[n(`small`,{className:`text-muted d-block`,children:`Logical`}),n(`div`,{children:Z(e.originalSize)})]}),n(N,{xs:12,className:`mt-2`,children:n(`small`,{className:`text-muted d-block`,children:t>=1.1?`${t.toFixed(1)}× dedup (${Z(e.dedupSavings)} saved)`:`No significant dedup yet`})})]})}function Ki({scheduler:e}){return r(j,{className:`g-2 mt-2`,children:[r(N,{xs:3,children:[n(`small`,{className:`text-muted d-block`,children:`Hourly`}),n(`div`,{children:e.backupCounts.hourly})]}),r(N,{xs:3,children:[n(`small`,{className:`text-muted d-block`,children:`Daily`}),n(`div`,{children:e.backupCounts.daily})]}),r(N,{xs:3,children:[n(`small`,{className:`text-muted d-block`,children:`Weekly`}),n(`div`,{children:e.backupCounts.weekly})]}),r(N,{xs:3,children:[n(`small`,{className:`text-muted d-block`,children:`Manual`}),n(`div`,{children:e.backupCounts.manual})]})]})}function qi(){let e=$(()=>X.pluginStatus(),{intervalMs:5e3}),t=$(()=>X.scheduler(),{intervalMs:15e3}),a=$(()=>X.listBackups(),{intervalMs:3e4}),o=$(()=>X.repository(),{intervalMs:6e4});return r(i,{children:[r(`div`,{className:`d-flex justify-content-between align-items-center mb-3`,children:[n(`h2`,{className:`mb-0`,children:`Dashboard`}),n(P,{color:`secondary`,outline:!0,size:`sm`,onClick:()=>{e.refresh(),t.refresh(),a.refresh(),o.refresh()},disabled:e.loading||t.loading||a.loading||o.loading,children:`Refresh`})]}),r(j,{children:[n(N,{xs:12,md:6,children:r(R,{className:`mb-3`,children:[n(B,{children:n(`strong`,{children:`Plugin status`})}),n(z,{children:e.loading&&!e.data?n(J,{size:`sm`}):e.error?n(q,{color:`danger`,className:`mb-0`,children:e.error}):r(i,{children:[n(`div`,{className:`mb-2`,children:n(Wi,{status:e.data})}),e.data&&r(`dl`,{className:`row mb-0`,children:[n(`dt`,{className:`col-sm-4`,children:`Image`}),n(`dd`,{className:`col-sm-8 text-truncate`,children:n(`code`,{children:e.data.container.image})}),n(`dt`,{className:`col-sm-4`,children:`Container`}),r(`dd`,{className:`col-sm-8`,children:[e.data.container.state,` `,e.data.container.managed&&n(`small`,{className:`text-muted`,children:`(managed)`})]})]})]})})]})}),n(N,{xs:12,md:6,children:r(R,{className:`mb-3`,children:[n(B,{children:n(`strong`,{children:`Scheduler`})}),n(z,{children:t.loading&&!t.data?n(J,{size:`sm`}):t.error?n(q,{color:`danger`,className:`mb-0`,children:t.error}):t.data?r(i,{children:[n(`div`,{className:`mb-2`,children:n(L,{color:t.data.enabled?`success`:`secondary`,children:t.data.enabled?`Running`:`Stopped`})}),r(j,{className:`g-2`,children:[r(N,{xs:6,children:[n(`small`,{className:`text-muted d-block`,children:`Last backup`}),n(`div`,{children:Q(t.data.lastBackup)})]}),r(N,{xs:6,children:[n(`small`,{className:`text-muted d-block`,children:`Total snapshots`}),n(`div`,{children:t.data.backupCounts.total})]})]}),n(Ki,{scheduler:t.data})]}):null})]})}),n(N,{xs:12,md:6,children:r(R,{className:`mb-3`,children:[n(B,{children:n(`strong`,{children:`Local repository`})}),n(z,{children:o.loading&&!o.data?n(J,{size:`sm`}):o.error?n(q,{color:`danger`,className:`mb-0`,children:o.error}):o.data?n(Gi,{stats:o.data}):null})]})})]}),r(R,{children:[n(B,{children:n(`strong`,{children:`Recent backups`})}),n(z,{children:a.loading&&!a.data?n(J,{size:`sm`}):a.error?n(q,{color:`danger`,className:`mb-0`,children:a.error}):a.data&&a.data.backups.length>0?n(`ul`,{className:`list-unstyled mb-0`,children:a.data.backups.slice(0,5).map(e=>r(`li`,{className:`d-flex justify-content-between border-bottom py-2`,children:[r(`span`,{children:[n(L,{color:`light`,className:`text-dark me-2`,children:e.type}),Q(e.createdAt)]}),n(`code`,{className:`text-muted small`,children:e.id.slice(0,12)})]},e.id))}):n(`p`,{className:`text-muted mb-0`,children:`No backups yet.`})})]})]})}function Ji({backup:e,sourceEntry:t,sourcePath:a,pathMapping:o,onClose:s,onSubmitted:l}){let[u,d]=c(`original`),[f,p]=c(``),[m,h]=c(!1),[g,_]=c(null),[v,y]=c(null),b=e=>({sourcePath:a,targetMode:u,...u===`custom`?{customPath:f.trim()}:{},confirmOverwrite:e}),x=async n=>{h(!0),_(null);try{u===`custom`?await X.restorePartialHost({backupId:e.id,sourcePath:a,customPath:f.trim(),isDir:t.isDir,confirmOverwrite:n}):await X.restorePartial(e.id,b(n)),l()}catch(e){e instanceof Vi?y(e.conflict):_(e instanceof Error?e.message:String(e))}finally{h(!1)}},S=m||u===`custom`&&f.trim().length===0;return r(cr,{isOpen:!0,toggle:m?void 0:s,size:`md`,backdrop:`static`,children:[r(mr,{toggle:m?void 0:s,children:[`Restore `,t.isDir?`directory`:`file`]}),r(br,{children:[r(`div`,{className:`mb-3 small text-muted`,children:[`Source:`,` `,r(`code`,{children:[a,t.isDir?`/`:``]}),` `,`(`,Z(t.size),`)`]}),r(W,{tag:`fieldset`,disabled:m,children:[n(`legend`,{className:`h6`,children:`Restore target`}),n(W,{check:!0,children:r(K,{check:!0,children:[n(G,{type:`radio`,name:`partial-restore-mode`,checked:u===`original`,onChange:()=>{d(`original`),y(null)}}),` `,`Original location (under SignalK config root)`]})}),n(W,{check:!0,children:r(K,{check:!0,children:[n(G,{type:`radio`,name:`partial-restore-mode`,checked:u===`custom`,onChange:()=>{d(`custom`),y(null)}}),` `,`Custom path (anywhere the SignalK user can write)`]})}),u===`custom`&&r(W,{className:`mt-2`,children:[n(K,{for:`partial-restore-custom-path`,children:`Custom path`}),n(G,{id:`partial-restore-custom-path`,value:f,onChange:e=>{p(e.target.value),y(null)},placeholder:`e.g. /tmp/restored or /media/usb/backups/`}),n(`small`,{className:`text-muted`,children:`Relative or absolute. The plugin writes locally under the SignalK process's permissions, so anywhere your user can write works — including /tmp, /media/usb/…, or under your home directory. Add a trailing slash to land inside as a directory.`})]})]}),v&&r(q,{color:`warning`,className:`mt-3 mb-0`,children:[n(`div`,{className:`fw-semibold`,children:`Target already exists`}),n(`div`,{className:`small mb-2`,children:n(`code`,{children:Ui(v.targetPath,o)})}),r(`div`,{className:`small`,children:[r(`div`,{children:[`Existing size: `,v.size==null?`unknown`:Z(v.size)]}),r(`div`,{children:[`Existing mtime: `,v.mtime?Q(v.mtime):`unknown`]}),r(`div`,{children:[`Snapshot entry size: `,Z(t.size)]}),r(`div`,{children:[`Snapshot entry mtime: `,t.mtime]})]}),r(`div`,{className:`mt-2 d-flex gap-2`,children:[n(P,{color:`danger`,size:`sm`,disabled:m,onClick:()=>void x(!0),children:m?n(J,{size:`sm`}):`Overwrite`}),n(P,{color:`secondary`,outline:!0,size:`sm`,disabled:m,onClick:()=>{y(null)},children:`Cancel`})]})]}),g&&n(q,{color:`danger`,className:`mt-3 mb-0`,children:g})]}),r(Er,{children:[n(P,{color:`secondary`,outline:!0,disabled:m,onClick:s,children:`Cancel`}),n(P,{color:`primary`,disabled:S||v!==null,onClick:()=>void x(!1),children:m?r(i,{children:[n(J,{size:`sm`}),` Starting…`]}):`Restore`})]})]})}function Yi(e,t){return e?`${e}/${t}`:t}function Xi({backup:e,isOpen:t,onClose:o,initialPath:u,restoreLocked:d,pathMapping:f,onRestoreStarted:p}){let m=(u??``).replace(/^\/+|\/+$/g,``),[h,g]=c({}),[_,v]=c(()=>new Set([m])),[y,b]=c(null),x=a(0);l(()=>{t&&(x.current+=1,g({}),v(new Set([m])),b(null))},[t,e.id,m]);let S=s(async t=>{let n=x.current;g(e=>({...e,[t]:{entries:null,error:null,errorCode:null}}));try{let r=await X.listBackupTree(e.id,t);if(n!==x.current)return;g(e=>({...e,[t]:{entries:r.entries,error:null,errorCode:null}}))}catch(e){if(n!==x.current)return;let r=e instanceof Error?e.message:String(e),i=e instanceof Hi?e.code??null:null;g(e=>({...e,[t]:{entries:null,error:r,errorCode:i}}))}},[e.id]);return l(()=>{t&&h[m]===void 0&&S(m)},[t,m,h,S]),r(cr,{isOpen:t,toggle:o,size:`lg`,scrollable:!0,children:[r(mr,{toggle:o,children:[`Browse backup `,n(`code`,{className:`small ms-1`,children:e.id.slice(0,12)})]}),r(br,{children:[n(`div`,{className:`text-muted small mb-2`,children:m?r(i,{children:[`Scoped to `,r(`code`,{children:[m,`/`]})]}):n(i,{children:`Showing snapshot root`})}),n(Zi,{backupId:e.id,path:m,rootPath:m,depth:0,cache:h,expanded:_,restoreLocked:d===!0,onToggle:e=>{let t=new Set(_);t.has(e)?t.delete(e):(t.add(e),h[e]===void 0&&S(e)),v(t)},onRetry:S,onStartRestore:(e,t)=>{b({...e,fullPath:t})}})]}),n(Er,{children:n(P,{color:`secondary`,outline:!0,onClick:o,children:`Close`})}),y&&n(Ji,{backup:e,sourceEntry:y,sourcePath:y.fullPath,pathMapping:f,onClose:()=>{b(null)},onSubmitted:()=>{b(null),p?.()}})]})}function Zi({backupId:e,path:t,rootPath:i,depth:a,cache:o,expanded:s,restoreLocked:c,onToggle:l,onRetry:u,onStartRestore:d}){let f=o[t];if(!f||f.entries===null&&!f.error)return r(`div`,{className:`ps-3 py-1`,children:[n(J,{size:`sm`}),` Loading…`]});if(f.error)return f.errorCode===`ENTRY_NOT_FOUND`&&a===0&&t===i&&i!==``?r(`div`,{className:`ps-3 py-3 text-muted small`,children:[n(`div`,{children:`This backup doesn’t contain any files at this path.`}),r(`div`,{className:`mt-1`,children:[`The subtree `,r(`code`,{children:[i,`/`]}),` may not have existed when this snapshot was taken.`]})]}):r(`div`,{className:`ps-3 py-1`,children:[n(q,{color:`danger`,className:`mb-1 py-1 small`,children:f.error}),n(P,{size:`sm`,color:`secondary`,outline:!0,onClick:()=>void u(t),children:`Retry`})]});let p=f.entries??[];if(p.length===0)return n(`div`,{className:`ps-3 py-1 text-muted small`,children:`(empty)`});let m=[...p].sort((e,t)=>e.isDir===t.isDir?e.name.localeCompare(t.name):e.isDir?-1:1);return n(`ul`,{className:`list-unstyled mb-0`,style:{marginLeft:a===0?0:`1rem`},children:m.map(f=>{let p=Yi(t,f.name),m=f.isDir&&s.has(p);return r(`li`,{className:`py-1`,children:[r(`div`,{className:`d-flex align-items-center gap-2 flex-wrap`,children:[f.isDir?n(P,{color:`link`,size:`sm`,className:`p-0 text-decoration-none`,onClick:()=>{l(p)},style:{minWidth:`1.2em`},"aria-expanded":m,"aria-label":m?`Collapse folder`:`Expand folder`,children:m?`▾`:`▸`}):n(`span`,{"aria-hidden":`true`,style:{minWidth:`1.2em`,display:`inline-block`}}),r(`span`,{className:f.isDir?`fw-semibold`:``,onClick:()=>{f.isDir&&l(p)},style:f.isDir?{cursor:`pointer`}:void 0,children:[f.name,f.isDir?`/`:``]}),!f.isDir&&n(`span`,{className:`text-muted small`,children:Z(f.size)}),r(`span`,{className:`ms-auto`,children:[r(`a`,{href:X.downloadSubtreeUrl(e,p),className:`btn btn-outline-secondary btn-sm me-1`,download:!0,children:[`Download`,f.isDir&&n(L,{color:`light`,className:`text-dark ms-1`,children:`ZIP`})]}),n(P,{color:`warning`,outline:!0,size:`sm`,disabled:c,title:c?`A restore is already in progress`:void 0,onClick:()=>{d(f,p)},children:`Restore…`})]})]}),f.isDir&&m&&n(Zi,{backupId:e,path:p,rootPath:i,depth:a+1,cache:o,expanded:s,restoreLocked:c,onToggle:l,onRetry:u,onStartRestore:d})]},f.name)})})}var Qi=new Set([`preparing`,`safety_snapshotting`,`extracting`,`verifying`,`rolling_back`]),$i=new Set([`preparing`,`streaming`,`extracting`,`rolling_back`]);function ea(e){return Qi.has(e)||$i.has(e)}function ta({status:e,title:t,pathMapping:a,mapTargetPath:o=!0,onReset:s}){if(e.state===`idle`)return null;let c=ea(e.state),l=e.state===`failed`||e.state===`rolled_back`,u=e.state===`completed`,d=o?Ui(e.targetPath,a):e.targetPath;return r(q,{color:l?`danger`:u?`success`:`info`,className:`d-flex flex-column gap-2`,children:[r(`div`,{className:`d-flex justify-content-between align-items-start`,children:[r(`div`,{children:[r(`strong`,{children:[t??`Partial restore`,`: `,e.state]}),n(`div`,{className:`small`,children:e.statusMessage}),e.sourcePath&&r(`div`,{className:`small text-muted`,children:[`source `,n(`code`,{children:e.sourcePath}),d&&r(i,{children:[` `,`→ target `,n(`code`,{children:d})]})]}),e.error&&r(`div`,{className:`small text-danger`,children:[`Error: `,e.error]})]}),!c&&n(P,{size:`sm`,outline:!0,color:l?`danger`:`success`,onClick:s,children:`Dismiss`})]}),c&&n(jn,{animated:!0,striped:!0,value:e.progress,max:100,color:l?`danger`:`info`,children:e.progress>0?`${e.progress.toFixed(0)}%`:``})]})}var na=new Set([`preparing`,`extracting`,`installing`,`restarting`,`verifying`,`rolling_back`]);function ra({status:e,onReset:t}){if(e.state===`idle`)return null;let i=na.has(e.state),a=e.state===`failed`||e.state===`rolled_back`,o=e.state===`completed`;return r(q,{color:a?`danger`:o?`success`:`info`,className:`d-flex flex-column gap-2`,children:[r(`div`,{className:`d-flex justify-content-between align-items-start`,children:[r(`div`,{children:[r(`strong`,{children:[`Restore: `,e.state]}),n(`div`,{className:`small`,children:e.statusMessage}),e.error&&r(`div`,{className:`small text-danger`,children:[`Error: `,e.error]})]}),!i&&n(P,{size:`sm`,outline:!0,color:a?`danger`:`success`,onClick:t,children:`Dismiss`})]}),i&&n(jn,{animated:!0,striped:!0,value:e.progress,max:100,color:a?`danger`:`info`,children:e.progress>0?`${e.progress.toFixed(0)}%`:``})]})}function ia(){let e=$(()=>X.listBackups(),{intervalMs:3e4}),t=$(()=>X.restoreStatus(),{intervalMs:2e3}),o=$(()=>X.restorePartialStatus(),{intervalMs:2e3}),s=$(()=>X.restorePartialHostStatus(),{intervalMs:2e3}),l=$(()=>X.pluginStatus(),{intervalMs:6e4}),[u,d]=c(``),[f,p]=c(!1),[m,h]=c(null),[g,_]=c(null),[v,y]=c(null),[b,x]=c(null),S=a(null),[C,w]=c(``),[T,E]=c(!1),[D,O]=c(null),ee=async()=>{p(!0),h(null);try{await X.createBackup(u.trim()||void 0),d(``),e.refresh()}catch(e){h(e instanceof Error?e.message:String(e))}finally{p(!1)}},te=async()=>{let t=S.current?.files?.[0];if(!t){O(`Select a file first.`);return}E(!0),O(null);try{await X.uploadBackup(t,C.trim()||void 0),w(``),S.current&&(S.current.value=``),e.refresh()}catch(e){O(e instanceof Error?e.message:String(e))}finally{E(!1)}},ne=async t=>{if(window.confirm(`Delete backup ${t.id.slice(0,12)} (${Q(t.createdAt)})?`)){_(t.id);try{await X.deleteBackup(t.id),e.refresh()}catch(e){window.alert(`Delete failed: ${e instanceof Error?e.message:String(e)}`)}finally{_(null)}}},re=async e=>{if(window.confirm(`Restore backup ${e.id.slice(0,12)} (${Q(e.createdAt)})?\n\nThis OVERWRITES the current SignalK config and restarts the server. A safety backup is taken first, so the operation can be rolled back on failure — but any in-flight changes since the safety backup will be lost.`)){y(e.id);try{await X.startRestore(e.id),t.refresh()}catch(e){window.alert(`Restore failed to start: ${e instanceof Error?e.message:String(e)}`)}finally{y(null)}}},ie=async()=>{try{await X.resetRestoreState(),t.refresh()}catch(e){window.alert(`Reset failed: ${e instanceof Error?e.message:String(e)}`)}},ae=async()=>{try{await X.resetRestorePartialState(),o.refresh()}catch(e){window.alert(`Reset failed: ${e instanceof Error?e.message:String(e)}`)}},oe=async()=>{try{await X.resetRestorePartialHostState(),s.refresh()}catch(e){window.alert(`Reset failed: ${e instanceof Error?e.message:String(e)}`)}},se=e.data?.backups??[],k=t.data?na.has(t.data.state):!1,ce=o.data?Qi.has(o.data.state):!1,le=s.data?$i.has(s.data.state):!1,ue=k||ce||le||v!==null;return r(i,{children:[n(`h2`,{className:`mb-3`,children:`Backups`}),t.data&&n(ra,{status:t.data,onReset:()=>void ie()}),o.data&&n(ta,{status:o.data,pathMapping:l.data?.pathMapping,onReset:()=>void ae()}),s.data&&n(ta,{status:s.data,title:`Host restore`,pathMapping:l.data?.pathMapping,mapTargetPath:!1,onReset:()=>void oe()}),r(j,{className:`mb-3`,children:[n(N,{xs:12,md:6,children:r(R,{children:[n(B,{children:n(`strong`,{children:`Create new backup`})}),n(z,{children:r(Yr,{onSubmit:e=>{e.preventDefault(),ee()},children:[r(W,{children:[n(K,{for:`backup-description`,children:`Description (optional)`}),n(G,{id:`backup-description`,value:u,onChange:e=>{d(e.target.value)},placeholder:`e.g. before plugin upgrade`,disabled:f})]}),n(P,{color:`primary`,type:`submit`,disabled:f,children:f?r(i,{children:[n(J,{size:`sm`}),` Creating…`]}):`Create backup`}),m&&n(q,{color:`danger`,className:`mt-3 mb-0`,children:m})]})})]})}),n(N,{xs:12,md:6,children:r(R,{children:[n(B,{children:n(`strong`,{children:`Upload backup`})}),n(z,{children:r(Yr,{onSubmit:e=>{e.preventDefault(),te()},children:[r(W,{children:[n(K,{for:`backup-upload-file`,children:`Backup ZIP file`}),n(G,{id:`backup-upload-file`,type:`file`,accept:`.zip,application/zip`,innerRef:S,disabled:T})]}),r(W,{children:[n(K,{for:`backup-upload-description`,children:`Description (optional)`}),n(G,{id:`backup-upload-description`,value:C,onChange:e=>{w(e.target.value)},placeholder:`e.g. recovered from external drive`,disabled:T})]}),n(P,{color:`primary`,type:`submit`,disabled:T,children:T?r(i,{children:[n(J,{size:`sm`}),` Uploading…`]}):`Upload`}),D&&n(q,{color:`danger`,className:`mt-3 mb-0`,children:D})]})})]})})]}),r(R,{children:[r(B,{className:`d-flex justify-content-between align-items-center`,children:[r(`strong`,{children:[`All backups (`,se.length,`)`]}),n(P,{color:`secondary`,outline:!0,size:`sm`,onClick:e.refresh,disabled:e.loading,children:`Refresh`})]}),n(z,{className:`p-0`,children:e.loading&&!e.data?n(`div`,{className:`text-center py-3`,children:n(J,{size:`sm`})}):e.error?n(q,{color:`danger`,className:`m-3 mb-0`,children:e.error}):se.length===0?n(`p`,{className:`text-muted m-3 mb-0`,children:`No backups yet. Create one above, or wait for the scheduler.`}):r(Mr,{responsive:!0,striped:!0,className:`mb-0`,children:[n(`thead`,{children:r(`tr`,{children:[n(`th`,{children:`Type`}),n(`th`,{children:`Created`}),n(`th`,{children:`Size`}),n(`th`,{children:`Description`}),n(`th`,{children:`ID`}),n(`th`,{className:`text-end`,children:`Actions`})]})}),n(`tbody`,{children:se.map(e=>r(`tr`,{children:[n(`td`,{children:n(L,{color:`light`,className:`text-dark`,children:e.type})}),n(`td`,{children:Q(e.createdAt)}),n(`td`,{children:Z(e.size)}),n(`td`,{className:`text-muted`,children:e.description??``}),n(`td`,{children:n(`code`,{className:`small`,children:e.id.slice(0,12)})}),r(`td`,{className:`text-end`,children:[n(`a`,{href:X.downloadUrl(e.id),className:`btn btn-outline-secondary btn-sm me-1`,download:!0,children:`Download`}),n(P,{color:`info`,outline:!0,size:`sm`,className:`me-1`,onClick:()=>{x(e)},children:`Browse…`}),n(P,{color:`warning`,outline:!0,size:`sm`,className:`me-1`,disabled:ue,onClick:()=>void re(e),children:v===e.id?n(J,{size:`sm`}):`Restore`}),n(P,{color:`danger`,outline:!0,size:`sm`,disabled:ue||g===e.id,onClick:()=>void ne(e),children:g===e.id?n(J,{size:`sm`}):`Delete`})]})]},e.id))})]})})]}),b&&n(Xi,{backup:b,isOpen:!0,restoreLocked:ue,pathMapping:l.data?.pathMapping,onClose:()=>{x(null)},onRestoreStarted:()=>{o.refresh(),s.refresh()}})]})}var aa=1048576;function oa(e){return`${(e/aa).toFixed(1)} MB`}function sa(e){let t=Math.max(0,Math.floor(e/1e3)),n=Math.floor(t/60),r=t%60;return n>0?`${n}m ${r}s`:`${r}s`}function ca(e,t,n=Date.now()){let r=e?.processedBlobs,i=e?.totalBlobs,a=e?.processedBytes;return typeof r==`number`&&typeof i==`number`&&i>0?{phase:`determinate`,percent:Math.min(100,r/i*100),label:`${r} / ${i} blobs${typeof a==`number`?` (${oa(a)})`:``}`}:typeof a==`number`?{phase:`bytes-only`,percent:100,label:`Syncing… ${oa(a)} transferred so far`}:{phase:`elapsed-only`,percent:100,label:`Syncing… (elapsed ${sa(t===null?0:Math.max(0,n-t))})`}}function la({syncProgress:e,startedAt:t,now:i}){let a=ca(e,t,i),o=a.phase===`determinate`;return r(`div`,{className:`mb-3`,children:[n(`div`,{className:`small text-body mb-1`,children:a.label}),n(jn,{animated:!o,striped:!o,value:a.percent,max:100,color:`info`})]})}function ua(e){if(e==null)return``;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(+(n<10&&r>0))} ${t[r]}`}function da(e){let t=e.trim().replace(/\/+$/,``);return t.split(`/`).some(e=>e===`..`)?null:t===`/media`||t.startsWith(`/media/`)?`/host-media`+t.slice(6):t===`/mnt`||t.startsWith(`/mnt/`)?`/host-mnt`+t.slice(4):null}function fa({onConfigured:e,onError:t}){let[i,a]=c(null),[o,s]=c(!1),[u,d]=c(``),[f,p]=c(``),[m,h]=c(!1),g=async()=>{s(!0);try{let{candidates:e}=await X.localDiscover();a(e);let t=u&&e.some(e=>e.containerPath===u&&e.writable!==!1);if(u&&!t&&d(``),(!u||!t)&&e.length>0){let[t]=[...e.filter(e=>e.writable!==!1)].sort((e,t)=>(t.freeBytes??0)-(e.freeBytes??0));t&&d(t.containerPath)}}catch(e){t(e instanceof Error?e.message:String(e))}finally{s(!1)}};l(()=>{g()},[]);let _=async(n,r)=>{h(!0);try{await X.localConfigure(n,r),e()}catch(e){t(e instanceof Error?e.message:String(e))}finally{h(!1)}};return r(`div`,{children:[r(W,{children:[n(K,{for:`local-candidate`,children:`Pick a drive or mounted folder`}),r(`div`,{className:`d-flex gap-2`,children:[r(G,{id:`local-candidate`,type:`select`,value:u,disabled:o||m,onChange:e=>{d(e.target.value)},children:[n(`option`,{value:``,children:`— select —`}),(i??[]).map(e=>{let t=e.freeBytes!=null&&e.totalBytes!=null?` (${ua(e.freeBytes)} free of ${ua(e.totalBytes)})`:``,n=e.writable===!1?` — not writable`:``;return r(`option`,{value:e.containerPath,disabled:e.writable===!1,children:[e.hostPath,t,n]},e.containerPath)})]}),n(P,{color:`secondary`,outline:!0,disabled:o||m,onClick:()=>void g(),title:`Re-scan /media and /mnt`,children:o?n(J,{size:`sm`}):`Re-scan`})]})]}),i!==null&&i.length===0&&r(q,{color:`warning`,className:`mt-2 mb-2`,children:[`No candidates found. Plug in a USB drive (and mount it under`,n(`code`,{children:` /media`}),`), or mount a network share under `,n(`code`,{children:`/mnt`}),`on the host, then click `,n(`strong`,{children:`Re-scan`}),`.`]}),n(P,{color:`primary`,disabled:!u||m,onClick:()=>{let e=i?.find(e=>e.containerPath===u);e&&_(e.containerPath,e.hostPath)},className:`me-2`,children:m?n(J,{size:`sm`}):`Use this`}),n(`hr`,{className:`my-3`}),r(W,{children:[n(K,{for:`manual-path`,children:`Or type a host path manually`}),r(`div`,{className:`d-flex gap-2`,children:[n(G,{id:`manual-path`,type:`text`,placeholder:`/media/dirk/USB-SSD or /mnt/nfs-share`,value:f,disabled:m,onChange:e=>{p(e.target.value)}}),n(P,{color:`secondary`,disabled:!f.trim()||m,onClick:()=>{let e=f.trim();if(!e)return;let n=da(e);if(!n){t(`Path must live under /media or /mnt — those are the only host locations the backup engine can see. Plug a USB drive in (it auto-mounts under /media), or have the system administrator mount your destination under /mnt.`);return}_(n,e)},children:`Use`})]}),r(`small`,{className:`text-muted`,children:[`Enter the path the way you see it on the host — `,n(`code`,{children:`/media/...`}),` for plugged-in USB drives, `,n(`code`,{children:`/mnt/...`}),` for network shares mounted by the system. Inside the backup engine these are remapped to `,n(`code`,{children:`/host-media/...`}),` and `,n(`code`,{children:`/host-mnt/...`}),`, but you don't need to type that yourself.`]})]})]})}function pa({onConnected:e,onError:t}){let[i,a]=c(null),[o,s]=c(!1),[u,d]=c(!1),[f,p]=c(``),[m,h]=c(``),[g,_]=c(``),[v,y]=c(``),[b,x]=c(``),S=async()=>{s(!0);try{let{hosts:e}=await X.smbDiscover();a(e)}catch(e){console.debug(`SMB mDNS discovery failed:`,e),a([])}finally{s(!1)}};l(()=>{S()},[]);let C=async n=>{if(n?.preventDefault(),!(!f.trim()||!m.trim())){d(!0);try{await X.smbConnect({host:f.trim(),share:m.trim(),user:g.trim(),password:v,...b.trim()?{domain:b.trim()}:{}}),y(``),e()}catch(e){t(e instanceof Error?e.message:String(e))}finally{d(!1)}}};return r(`form`,{onSubmit:e=>void C(e),children:[r(q,{color:`warning`,className:`mb-3 small`,children:[n(`strong`,{children:`Heads up:`}),` SMB credentials are stored in rclone's obfuscated form (mode 0o600, owner-only). The obfuscation is reversible by anyone with read access to the backup-server container — treat it as protection against casual reading, not as encryption.`]}),r(W,{children:[n(K,{for:`smb-host`,children:`Host`}),r(`div`,{className:`d-flex gap-2`,children:[n(G,{id:`smb-host`,type:`text`,placeholder:`synology.local or 192.168.1.50`,value:f,disabled:u,onChange:e=>{p(e.target.value)},list:`smb-discovered-hosts`,required:!0}),n(P,{color:`secondary`,outline:!0,type:`button`,disabled:o||u,onClick:()=>void S(),title:`Re-scan _smb._tcp.local on the LAN`,children:o?n(J,{size:`sm`}):`Scan LAN`})]}),i!==null&&i.length>0&&n(`datalist`,{id:`smb-discovered-hosts`,children:i.map(e=>n(`option`,{value:e.address,children:e.name},e.address))}),i!==null&&i.length===0&&!o&&n(`small`,{className:`text-muted`,children:`No SMB devices announced on the LAN — type the host manually.`})]}),r(W,{children:[n(K,{for:`smb-share`,children:`Share`}),n(G,{id:`smb-share`,type:`text`,placeholder:`backups`,value:m,disabled:u,onChange:e=>{h(e.target.value)},required:!0})]}),r(W,{children:[n(K,{for:`smb-user`,children:`Username`}),n(G,{id:`smb-user`,type:`text`,autoComplete:`off`,value:g,disabled:u,onChange:e=>{_(e.target.value)}})]}),r(W,{children:[n(K,{for:`smb-password`,children:`Password`}),n(G,{id:`smb-password`,type:`password`,autoComplete:`new-password`,value:v,disabled:u,onChange:e=>{y(e.target.value)}}),n(`small`,{className:`text-muted`,children:`Leave Username and Password empty for guest / anonymous shares.`})]}),r(W,{children:[n(K,{for:`smb-domain`,children:`Domain (optional)`}),n(G,{id:`smb-domain`,type:`text`,placeholder:`WORKGROUP`,value:b,disabled:u,onChange:e=>{x(e.target.value)}})]}),n(P,{color:`primary`,type:`submit`,disabled:u,children:u?n(J,{size:`sm`}):`Connect`})]})}function ma(e){switch(e){case`gdrive`:return`Drive`;case`local`:return`Local destination`;case`smb`:return`SMB share`}}function ha({status:e}){let t=e.provider===`local`||e.provider===`smb`;return r(`div`,{className:`mb-2 d-flex gap-2 flex-wrap`,children:[n(L,{color:e.connected?`success`:`secondary`,children:e.connected?`Active: ${ma(e.provider)}`:`${ma(e.provider)} not configured`}),e.syncing&&n(L,{color:`info`,children:`Syncing`}),!t&&e.internetAvailable===!1&&n(L,{color:`warning`,children:`Offline`})]})}function ga({onDone:e,onError:t}){let[i,o]=c(!1),[s,u]=c(!1),[d,f]=c(``),[p,m]=c(!1),h=a(0),g=a(void 0),_=a(null),v=a(!1),y=()=>{g.current&&=(clearInterval(g.current),void 0),o(!1)};l(()=>()=>{y(),v.current=!1},[]);let b=async()=>{if(!v.current){v.current=!0,_.current=window.open(`about:blank`,`_blank`);try{let{authUrl:n}=await X.gdriveConnect();_.current&&!_.current.closed?_.current.location.href=n:u(!0),o(!0),h.current=Date.now(),g.current=setInterval(()=>{(async()=>{try{let n=await X.gdriveAuthState();n.state===`completed`?(y(),v.current=!1,u(!1),f(``),e()):n.state===`failed`?(y(),v.current=!1,u(!1),t(n.error??`Authorization failed`)):Date.now()-h.current>15e3&&u(!0)}catch{}})()},2e3)}catch(e){_.current?.close(),v.current=!1,t(e instanceof Error?e.message:String(e))}}},x=async()=>{y(),v.current=!1,u(!1),f(``);try{await X.gdriveCancel()}catch{}},S=async()=>{if(d.trim()){m(!0);try{await X.gdriveAuthCallback(d.trim()),f(``)}catch(e){t(e instanceof Error?e.message:String(e))}finally{m(!1)}}};return i?r(`div`,{children:[r(`div`,{className:`d-flex align-items-center gap-2 mb-3`,children:[n(J,{size:`sm`}),n(`span`,{children:`Waiting for Google authorization…`}),n(P,{color:`secondary`,outline:!0,size:`sm`,onClick:()=>void x(),children:`Cancel`})]}),s&&r(q,{color:`info`,className:`mb-0`,children:[n(`p`,{className:`mb-2`,children:n(`strong`,{children:`Browser on a different machine than this server?`})}),r(`p`,{className:`small mb-2`,children:[`After granting access in Google, your browser is redirected to a URL starting with`,n(`code`,{children:` http://127.0.0.1:53682/`}),`. Copy that whole URL from your browser's address bar and paste it here.`]}),r(W,{children:[n(K,{for:`callback-url`,children:`Callback URL`}),n(G,{id:`callback-url`,type:`text`,value:d,onChange:e=>{f(e.target.value)},placeholder:`http://127.0.0.1:53682/?code=...`,disabled:p})]}),n(P,{color:`primary`,size:`sm`,disabled:p||!d.trim(),onClick:()=>void S(),children:p?n(J,{size:`sm`}):`Submit callback`})]})]}):n(P,{color:`primary`,onClick:()=>void b(),children:`Connect Google Drive`})}function _a(){let[e,t]=c(5e3),a=$(()=>X.cloudStatus(),{intervalMs:e}),o=$(()=>X.localStatus(),{intervalMs:5e3}),s=$(()=>X.smbStatus(),{intervalMs:5e3}),[u,d]=c(null);l(()=>{let e=a.data?.syncing===!0;t(e?2e3:5e3),d(t=>e&&t===null?Date.now():!e&&t!==null?null:t)},[a.data?.syncing]);let[f,p]=c(null),[m,h]=c(null),[g,_]=c(null),[v,y]=c(!1),[b,x]=c(null),S=b??a.data?.provider??`gdrive`,C=async()=>{let e=a.data?.provider;if(e===`gdrive`||!e){x(null);return}_(`switch`),p(null);try{switch(e){case`local`:await X.localDisconnect();break;case`smb`:await X.smbDisconnect()}x(null),a.refresh(),o.refresh(),s.refresh()}catch(e){p(e instanceof Error?e.message:String(e))}finally{_(null)}},w=async()=>{_(`sync`),p(null),h(null);try{await X.cloudSync(),a.refresh(),h(`Sync started`)}catch(e){p(e instanceof Error?e.message:String(e))}finally{_(null)}},T=async()=>{_(`cancel`);try{await X.cloudSyncCancel(),a.refresh()}catch(e){p(e instanceof Error?e.message:String(e))}finally{_(null)}},E=async()=>{_(`disconnect`),p(null);try{await X.gdriveDisconnect(),a.refresh(),y(!1),h(`Google Drive disconnected`)}catch(e){p(e instanceof Error?e.message:String(e))}finally{_(null)}},D=async e=>{_(`config`),p(null);try{await X.cloudConfig(e),a.refresh()}catch(e){p(e instanceof Error?e.message:String(e))}finally{_(null)}};return r(i,{children:[n(`h2`,{className:`mb-3`,children:`Cloud sync`}),f&&n(q,{color:`danger`,toggle:()=>{p(null)},children:f}),m&&n(q,{color:`success`,toggle:()=>{h(null)},children:m}),r(R,{className:`mb-3`,children:[n(B,{children:n(`strong`,{children:`Destination`})}),n(z,{children:a.loading&&!a.data?n(J,{size:`sm`}):a.error?n(q,{color:`danger`,className:`mb-0`,children:a.error}):a.data?r(i,{children:[n(ha,{status:a.data}),r(W,{className:`mb-3`,children:[n(K,{for:`provider-select`,children:`Where backups go`}),r(G,{id:`provider-select`,type:`select`,value:S,disabled:g!==null,onChange:e=>{let t=e.target.value;t!==S&&(t===`gdrive`?C():x(t))},children:[n(`option`,{value:`gdrive`,children:`Google Drive`}),n(`option`,{value:`local`,children:`Local drive / mounted folder`}),n(`option`,{value:`smb`,children:`SMB share`})]})]}),S===`gdrive`&&r(i,{children:[a.data.email&&r(`p`,{className:`text-muted small mb-2`,children:[`Account: `,a.data.email]}),a.data.connected?n(i,{children:v?r(`div`,{className:`d-flex gap-2 align-items-center`,children:[n(`span`,{children:`Really disconnect?`}),n(P,{color:`danger`,size:`sm`,disabled:g===`disconnect`,onClick:()=>void E(),children:g===`disconnect`?n(J,{size:`sm`}):`Disconnect`}),n(P,{color:`secondary`,outline:!0,size:`sm`,onClick:()=>{y(!1)},children:`Cancel`})]}):n(P,{color:`danger`,outline:!0,onClick:()=>{y(!0)},children:`Disconnect`})}):n(ga,{onDone:()=>{a.refresh(),h(`Google Drive connected`)},onError:p})]}),S===`local`&&r(i,{children:[o.error&&r(q,{color:`danger`,className:`mb-2`,children:[`Failed to read local destination status: `,o.error]}),o.data?.connected?r(i,{children:[r(`p`,{className:`text-muted small mb-2`,children:[`Backing up to `,n(`code`,{children:o.data.hostPath??o.data.containerPath}),o.data.freeBytes!=null&&r(i,{children:[` — `,Math.round(o.data.freeBytes/1e9),` GB free`]})]}),n(P,{color:`danger`,outline:!0,disabled:g!==null,onClick:()=>void C(),children:g===`switch`?n(J,{size:`sm`}):`Switch back to Google Drive`})]}):r(i,{children:[o.data?.error&&n(q,{color:`warning`,className:`mb-2`,children:o.data.error}),n(fa,{onConfigured:()=>{x(null),a.refresh(),o.refresh(),h(`Local destination configured`)},onError:p})]})]}),S===`smb`&&r(i,{children:[s.error&&r(q,{color:`danger`,className:`mb-2`,children:[`Failed to read SMB status: `,s.error]}),s.data?.connected?r(i,{children:[r(`p`,{className:`text-muted small mb-2`,children:[`Backing up to`,` `,r(`code`,{children:[`\\\\`,s.data.host??`?`,`\\`,s.data.share??`?`]}),` `,`as `,n(`code`,{children:s.data.user??`?`})]}),n(P,{color:`danger`,outline:!0,disabled:g!==null,onClick:()=>void C(),children:g===`switch`?n(J,{size:`sm`}):`Switch back to Google Drive`})]}):n(pa,{onConnected:()=>{x(null),a.refresh(),s.refresh(),h(`SMB share connected`)},onError:p})]})]}):null})]}),a.data?.connected&&r(R,{className:`mb-3`,children:[n(B,{children:n(`strong`,{children:`Sync`})}),r(z,{children:[r(j,{className:`g-3 mb-3`,children:[n(N,{xs:12,md:6,children:r(W,{children:[n(K,{for:`sync-mode`,children:`Sync mode`}),r(G,{id:`sync-mode`,type:`select`,value:a.data.syncMode??`manual`,disabled:g===`config`,onChange:e=>{let t=e.target.value,n={syncMode:t};t===`scheduled`&&!a.data?.syncFrequency&&(n.syncFrequency=`daily`),D(n)},children:[n(`option`,{value:`manual`,children:`Manual only`}),n(`option`,{value:`after_backup`,children:`After every backup`}),n(`option`,{value:`scheduled`,children:`On a schedule`})]})]})}),a.data.syncMode===`scheduled`&&n(N,{xs:12,md:6,children:r(W,{children:[n(K,{for:`sync-frequency`,children:`Schedule`}),r(G,{id:`sync-frequency`,type:`select`,value:a.data.syncFrequency??`daily`,disabled:g===`config`,onChange:e=>{D({syncFrequency:e.target.value})},children:[n(`option`,{value:`daily`,children:`Daily`}),n(`option`,{value:`weekly`,children:`Weekly`})]})]})})]}),a.data.syncing&&n(la,{syncProgress:a.data.syncProgress,startedAt:u}),n(`div`,{className:`d-flex gap-2 align-items-center mb-3`,children:a.data.syncing?n(P,{color:`warning`,outline:!0,disabled:g===`cancel`,onClick:()=>void T(),children:g===`cancel`?n(J,{size:`sm`}):`Cancel sync`}):n(P,{color:`primary`,disabled:g===`sync`,onClick:()=>void w(),children:g===`sync`?n(J,{size:`sm`}):`Sync now`})}),r(`dl`,{className:`row mb-0`,children:[n(`dt`,{className:`col-sm-3`,children:`Last sync`}),n(`dd`,{className:`col-sm-9`,children:Q(a.data.lastSync)}),a.data.lastSyncError&&r(i,{children:[n(`dt`,{className:`col-sm-3`,children:`Last error`}),n(`dd`,{className:`col-sm-9 text-danger`,children:a.data.lastSyncError})]})]})]})]})]})}var va=`plugin-config-data/signalk-backup/database-exports`,ya=new Set([`preparing`,`extracting`,`installing`,`restarting`,`verifying`,`rolling_back`]);function ba(){let e=$(()=>X.listStaging(),{intervalMs:3e4}),t=$(()=>X.listBackups(),{intervalMs:6e4}),a=$(()=>X.pluginStatus(),{intervalMs:6e4}),o=$(()=>X.restoreStatus(),{intervalMs:2e3}),s=$(()=>X.restorePartialStatus(),{intervalMs:2e3}),l=$(()=>X.restorePartialHostStatus(),{intervalMs:2e3}),[u,d]=c(null),[f,p]=c(``),m=e.data?.entries??[],h=t.data?.backups??[],g=()=>{let e=h.find(e=>e.id===f);e&&d(e)},_=async()=>{try{await X.resetRestorePartialState(),s.refresh()}catch(e){window.alert(`Reset failed: ${e instanceof Error?e.message:String(e)}`)}},v=async()=>{try{await X.resetRestorePartialHostState(),l.refresh()}catch(e){window.alert(`Reset failed: ${e instanceof Error?e.message:String(e)}`)}},y=o.data?ya.has(o.data.state):!1,b=s.data?Qi.has(s.data.state):!1,x=l.data?$i.has(l.data.state):!1,S=y||b||x;return r(i,{children:[n(`h2`,{className:`mb-3`,children:`Database exports`}),s.data&&n(ta,{status:s.data,pathMapping:a.data?.pathMapping,onReset:()=>void _()}),l.data&&n(ta,{status:l.data,title:`Host restore`,pathMapping:a.data?.pathMapping,mapTargetPath:!1,onReset:()=>void v()}),n(`p`,{className:`text-muted`,children:`QuestDB, Grafana and signalk-database exports staged by the plugin. The top card extracts the database-exports subtree from any historical backup without pulling the whole snapshot; the live list below shows what's on disk right now (the next backup will include these).`}),r(R,{className:`mb-3`,children:[r(B,{children:[n(`strong`,{children:`Extract from a historical backup`}),` `,r(L,{color:`light`,className:`text-dark ms-1`,children:[`Browser scoped to `,va]})]}),r(z,{children:[n(`p`,{className:`small text-muted mb-3`,children:`Pick a backup and open the database-exports subtree. From there you can download individual files (octet-stream) or whole subdirectories (ZIP) without pulling the full snapshot.`}),t.loading&&!t.data?n(J,{size:`sm`}):t.error?n(q,{color:`danger`,className:`mb-0`,children:t.error}):h.length===0?n(`p`,{className:`text-muted mb-0`,children:`No backups yet. Once the scheduler runs (or you create a manual one), it will appear here.`}):r(`div`,{className:`d-flex gap-2 align-items-end flex-wrap`,children:[r(`div`,{style:{minWidth:`20rem`,flex:`1 1 20rem`},children:[n(K,{for:`db-export-backup-picker`,children:`Backup`}),r(G,{id:`db-export-backup-picker`,type:`select`,value:f,onChange:e=>{p(e.target.value)},children:[n(`option`,{value:``,children:`— select a backup —`}),h.map(e=>r(`option`,{value:e.id,children:[Q(e.createdAt),` · `,e.type,` · `,e.id.slice(0,12)]},e.id))]})]}),n(P,{color:`primary`,disabled:!f,onClick:g,children:`Open browser`})]})]})]}),r(R,{children:[r(B,{className:`d-flex justify-content-between align-items-center`,children:[r(`strong`,{children:[`Live staging (`,m.length,`)`]}),n(P,{color:`secondary`,outline:!0,size:`sm`,onClick:e.refresh,disabled:e.loading,children:`Refresh`})]}),r(z,{className:`p-0`,children:[e.loading&&!e.data?n(`div`,{className:`text-center py-3`,children:n(J,{size:`sm`})}):e.error?n(q,{color:`danger`,className:`m-3 mb-0`,children:e.error}):m.length===0?n(`p`,{className:`text-muted m-3 mb-0`,children:`Nothing staged yet. Enable the relevant exporter in Settings → Database export, or wait for the next scheduler tick.`}):r(Mr,{responsive:!0,striped:!0,className:`mb-0`,children:[n(`thead`,{children:r(`tr`,{children:[n(`th`,{children:`Path`}),n(`th`,{children:`Size`}),n(`th`,{children:`Modified`}),n(`th`,{className:`text-end`,children:`Actions`})]})}),n(`tbody`,{children:m.map(e=>r(`tr`,{children:[n(`td`,{children:n(`code`,{className:`small`,children:e.path})}),n(`td`,{children:Z(e.size)}),n(`td`,{className:`small text-muted`,children:Q(e.mtime)}),n(`td`,{className:`text-end`,children:n(`a`,{href:X.stagingDownloadUrl(e.path),className:`btn btn-outline-secondary btn-sm`,download:!0,children:`Download`})})]},e.path))})]}),e.data?.stagingRoot&&r(`div`,{className:`px-3 py-2 small text-muted border-top`,children:[`Staging root: `,n(`code`,{children:e.data.stagingRoot})]})]})]}),u&&n(Xi,{backup:u,isOpen:!0,initialPath:va,pathMapping:a.data?.pathMapping,restoreLocked:S,onClose:()=>{d(null)},onRestoreStarted:()=>{s.refresh(),l.refresh()}})]})}function xa(){let e=$(()=>X.scheduler(),{intervalMs:15e3}),[t,a]=c(!1),[o,s]=c(null),l=async t=>{a(!0),s(null);try{t?await X.schedulerStart():await X.schedulerStop(),e.refresh()}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}};return r(R,{className:`mb-3`,children:[n(B,{children:n(`strong`,{children:`Scheduler`})}),n(z,{children:e.loading&&!e.data?n(J,{size:`sm`}):e.error?n(q,{color:`danger`,className:`mb-0`,children:e.error}):e.data?r(i,{children:[n(`div`,{className:`mb-2`,children:n(L,{color:e.data.enabled?`success`:`secondary`,children:e.data.enabled?`Running`:`Stopped`})}),n(`p`,{className:`text-muted small mb-3`,children:`When running, the backup-server creates hourly, daily, and weekly snapshots automatically per its retention policy. Manual backups still work either way.`}),e.data.enabled?n(P,{color:`warning`,outline:!0,disabled:t,onClick:()=>void l(!1),children:t?n(J,{size:`sm`}):`Stop scheduler`}):n(P,{color:`primary`,disabled:t,onClick:()=>void l(!0),children:t?n(J,{size:`sm`}):`Start scheduler`}),o&&n(q,{color:`danger`,className:`mt-2 mb-0`,children:o})]}):null})]})}function Sa(e){let{rows:t,isExcluded:i,toggle:a,stripPrefix:o,showNote:s}=e;return t.length===0?null:r(Mr,{responsive:!0,striped:!0,size:`sm`,className:`mb-2`,children:[n(`thead`,{children:r(`tr`,{children:[n(`th`,{style:{width:`4em`},children:`Include`}),n(`th`,{children:`Directory`}),n(`th`,{style:{width:`7em`},children:`Size`}),s&&n(`th`,{children:`Note`})]})}),n(`tbody`,{children:t.map(e=>{let t=i(e.name,e.excluded),c=o&&e.name.startsWith(o)?e.name.slice(o.length):e.name;return r(`tr`,{children:[n(`td`,{children:n(G,{type:`checkbox`,checked:!t,disabled:e.locked,onChange:()=>{a(e.name,t,e.excluded)},"aria-label":`Include ${e.name}`})}),n(`td`,{children:n(`code`,{className:`small`,children:c})}),n(`td`,{children:Z(e.size)}),s&&n(`td`,{className:`text-muted small`,title:e.lockReason??``,children:e.lockReason?`🔒 ${e.lockReason}`:``})]},e.name)})})]})}function Ca(){let e=$(()=>X.dataDirs()),t=$(()=>X.pluginDataDirs()),a=$(()=>X.exclusions()),[s,u]=c({}),[d,f]=c(!1),[p,m]=c(null),[h,g]=c(null);l(()=>{u({})},[a.data,e.data,t.data]);let _=o(()=>(e.data??[]).filter(e=>e.name!==`plugin-config-data`).map(e=>({name:e.name,size:e.size,excluded:e.excluded})),[e.data]),v=o(()=>(t.data??[]).filter(e=>!e.lockedExcluded).map(e=>({name:`plugin-config-data/${e.name}/`,size:e.size,excluded:e.excluded})),[t.data]),y=o(()=>(t.data??[]).filter(e=>e.lockedExcluded===!0).map(e=>({name:`plugin-config-data/${e.name}/`,size:e.size,excluded:e.excluded,locked:!0,lockReason:e.lockReason})),[t.data]),b=(e,t)=>s[e]??t,x=(e,t,n)=>{let r=!t;u(t=>r===n?e in t?Object.fromEntries(Object.entries(t).filter(([t])=>t!==e)):t:t[e]===r?t:{...t,[e]:r})},S=async()=>{f(!0),m(null);try{let n=new Set;for(let t of e.data??[])n.add(t.name+`/`);for(let e of t.data??[])n.add(`plugin-config-data/${e.name}/`);let r=(a.data?.exclusions??[]).filter(e=>!n.has(e)),i=[];for(let t of e.data??[])b(t.name,t.excluded)&&i.push(t.name+`/`);for(let e of t.data??[]){let t=`plugin-config-data/${e.name}/`;b(t,e.excluded)&&i.push(t)}let o=[...r,...i];await X.setExclusions(o),a.refresh(),e.refresh(),t.refresh(),g(Date.now())}catch(e){m(e instanceof Error?e.message:String(e))}finally{f(!1)}},C=Object.keys(s).length>0;return r(R,{className:`mb-3`,children:[n(B,{children:n(`strong`,{children:`Backup exclusions`})}),n(z,{children:e.loading||t.loading||a.loading?n(J,{size:`sm`}):e.error||t.error||a.error?n(q,{color:`danger`,className:`mb-0`,children:e.error??t.error??a.error}):r(i,{children:[n(`p`,{className:`text-muted small mb-3`,children:`Uncheck a directory to exclude it from backups. Some plugin directories are locked-excluded by the server (live database state, our own kopia repo); see the note next to each.`}),n(`h6`,{className:`mb-2`,children:`Top-level directories`}),n(Sa,{rows:_,isExcluded:b,toggle:x}),r(`h6`,{className:`mt-4 mb-1`,children:[`Plugin data `,n(`code`,{className:`small text-muted`,children:`plugin-config-data/`})]}),n(`p`,{className:`text-muted small mb-2`,children:`Per-plugin state under your SignalK config root.`}),v.length>0&&r(i,{children:[n(`div`,{className:`small text-muted fw-bold mb-1`,children:`Editable`}),n(Sa,{rows:v,isExcluded:b,toggle:x,stripPrefix:`plugin-config-data/`})]}),y.length>0&&r(i,{children:[n(`div`,{className:`small text-muted fw-bold mt-3 mb-1`,children:`Always excluded`}),n(Sa,{rows:y,isExcluded:b,toggle:x,stripPrefix:`plugin-config-data/`,showNote:!0})]}),r(`div`,{className:`d-flex align-items-center gap-2`,children:[n(P,{color:`primary`,disabled:!C||d,onClick:()=>void S(),children:d?n(J,{size:`sm`}):`Save`}),C&&n(P,{color:`secondary`,outline:!0,disabled:d,onClick:()=>{u({})},children:`Discard changes`}),h&&!C&&n(`small`,{className:`text-success`,children:`Saved.`})]}),p&&n(q,{color:`danger`,className:`mt-2 mb-0`,children:p})]})})]})}function wa(){let e=$(()=>X.passwordStatus(),{intervalMs:0}),[t,a]=c(!1),[o,s]=c(``),[l,u]=c(``),[d,f]=c(!1),[p,m]=c(null),[h,g]=c(null),[_,v]=c(!1),[y,b]=c(!1),[x,S]=c(!1),[C,w]=c(!1),T=async e=>{try{await navigator.clipboard.writeText(e),w(!0),setTimeout(()=>{w(!1)},1500)}catch{}},E=async()=>{if(m(null),g(null),o.length<8){m(`Password must be at least 8 characters.`);return}if(o!==l){m(`Passwords don't match.`);return}f(!0);try{await X.setPassword(o),a(!1),s(``),u(``),e.refresh(),g(`Password updated.`)}catch(e){m(e instanceof Error?e.message:String(e))}finally{f(!1)}},D=async()=>{v(!0),m(null);try{await X.resetPassword(),b(!1),e.refresh(),g(`Password reset to default.`)}catch(e){m(e instanceof Error?e.message:String(e))}finally{v(!1)}},O=e.data?.hasCustomPassword??!1;return r(R,{children:[n(B,{children:n(`strong`,{children:`Encryption password`})}),r(z,{children:[r(`p`,{className:`text-muted small mb-3`,children:[`The kopia repository is encrypted at rest with this password. The default is publicly known; set a custom one if your backup destination (cloud sync, external drive) is accessible to anyone besides you.`,` `,n(`strong`,{children:`Forgetting your custom password makes existing backups unreadable.`})]}),e.loading&&!e.data?n(J,{size:`sm`}):e.error?n(q,{color:`danger`,className:`mb-0`,children:e.error}):r(i,{children:[n(`div`,{className:`mb-3`,children:n(L,{color:O?`success`:`warning`,children:O?`Custom password set`:`Default password (publicly known)`})}),!t&&e.data?.password?(()=>{let t=e.data.password;return r(W,{children:[n(K,{for:`current-password`,children:`Current password`}),r(`div`,{className:`d-flex gap-2 align-items-center`,children:[n(G,{id:`current-password`,type:x?`text`:`password`,value:t,readOnly:!0,style:{fontFamily:`monospace`,maxWidth:`24rem`}}),n(P,{size:`sm`,color:`secondary`,outline:!0,onClick:()=>{S(e=>!e)},"aria-label":x?`Hide password`:`Show password`,children:x?`Hide`:`Show`}),n(P,{size:`sm`,color:`secondary`,outline:!0,onClick:()=>{T(t)},children:C?`Copied!`:`Copy`})]})]})})():null,t?r(Yr,{onSubmit:e=>{e.preventDefault(),E()},children:[r(W,{children:[n(K,{for:`new-password`,children:`New password`}),n(G,{id:`new-password`,type:`password`,value:o,onChange:e=>{s(e.target.value)},minLength:8,required:!0,disabled:d,autoComplete:`new-password`})]}),r(W,{children:[n(K,{for:`confirm-password`,children:`Confirm password`}),n(G,{id:`confirm-password`,type:`password`,value:l,onChange:e=>{u(e.target.value)},minLength:8,required:!0,disabled:d,autoComplete:`new-password`})]}),r(`div`,{className:`d-flex gap-2`,children:[n(P,{color:`primary`,type:`submit`,disabled:d,children:d?n(J,{size:`sm`}):`Save`}),n(P,{color:`secondary`,outline:!0,type:`button`,disabled:d,onClick:()=>{a(!1),s(``),u(``),m(null)},children:`Cancel`})]})]}):r(`div`,{className:`d-flex flex-wrap gap-2 align-items-center`,children:[n(P,{color:`primary`,onClick:()=>{a(!0),m(null),g(null)},children:O?`Change password`:`Set custom password`}),O&&(y?r(i,{children:[n(`span`,{children:`Reset to default?`}),n(P,{color:`warning`,size:`sm`,disabled:_,onClick:()=>void D(),children:_?n(J,{size:`sm`}):`Reset`}),n(P,{color:`secondary`,outline:!0,size:`sm`,disabled:_,onClick:()=>{b(!1)},children:`Cancel`})]}):n(P,{color:`warning`,outline:!0,onClick:()=>{b(!0)},children:`Reset to default`}))]}),p&&n(q,{color:`danger`,className:`mt-3 mb-0`,children:p}),h&&n(q,{color:`success`,className:`mt-3 mb-0`,toggle:()=>{g(null)},children:h})]})]})]})}function Ta(){let e=$(()=>X.dbExportConfig(),{intervalMs:6e4}),[t,a]=c(!1),[o,s]=c(null),[u,d]=c(null),[f,p]=c(``);l(()=>{e.data&&p(String(e.data.intervalMinutes))},[e.data]);let m=async t=>{a(!0),s(null),d(null);try{await X.dbExportConfigSet({questdb:t}),e.refresh(),d(t?`QuestDB export enabled`:`QuestDB export disabled`)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}},h=async t=>{a(!0),s(null),d(null);try{await X.dbExportConfigSet({grafana:t}),e.refresh(),d(t?`Grafana export enabled`:`Grafana export disabled`)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}},g=async t=>{a(!0),s(null),d(null);try{await X.dbExportConfigSet({signalkDatabase:t}),e.refresh(),d(t?`SignalK Database export enabled`:`SignalK Database export disabled`)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}},_=async()=>{let t=parseInt(f,10);if(!Number.isFinite(t)||t<5||t>1440){s(`Interval must be between 5 and 1440 minutes.`);return}a(!0),s(null),d(null);try{await X.dbExportConfigSet({intervalMinutes:t}),e.refresh(),d(`Export interval set to ${t} minutes`)}catch(e){s(e instanceof Error?e.message:String(e))}finally{a(!1)}},v=e.data,y=v?String(v.intervalMinutes)!==f:!1;return r(R,{className:`mb-3`,children:[n(B,{children:n(`strong`,{children:`Database export`})}),n(z,{children:e.loading&&!v?n(J,{size:`sm`}):e.error?n(q,{color:`danger`,className:`mb-0`,children:e.error}):v?r(i,{children:[n(`p`,{className:`text-muted small mb-3`,children:`When enabled, the plugin periodically exports database tables to Parquet files inside the SignalK config root. The next backup-server snapshot then captures them as part of the regular backup. Filesystem-level database files (WAL etc.) are still excluded.`}),r(W,{switch:!0,className:`mb-3`,children:[n(G,{id:`db-export-questdb`,type:`switch`,role:`switch`,checked:v.questdb,disabled:t,onChange:e=>void m(e.target.checked)}),n(K,{for:`db-export-questdb`,check:!0,children:`Export QuestDB tables to backup`})]}),r(W,{switch:!0,className:`mb-3`,children:[n(G,{id:`db-export-grafana`,type:`switch`,role:`switch`,checked:v.grafana,disabled:t,onChange:e=>void h(e.target.checked)}),n(K,{for:`db-export-grafana`,check:!0,children:`Export Grafana dashboards, provisioning, and SQLite checkpoint`})]}),r(W,{switch:!0,className:`mb-3`,children:[n(G,{id:`db-export-signalk-database`,type:`switch`,role:`switch`,checked:v.signalkDatabase,disabled:t,onChange:e=>void g(e.target.checked)}),n(K,{for:`db-export-signalk-database`,check:!0,children:`Export SignalK Database plugin DBs (VACUUM INTO per plugin)`})]}),r(W,{children:[n(K,{for:`db-export-interval`,children:`Export interval (minutes)`}),r(`div`,{className:`d-flex gap-2`,children:[n(G,{id:`db-export-interval`,type:`number`,min:5,max:1440,step:5,value:f,disabled:t,onChange:e=>{p(e.target.value)},style:{maxWidth:`12em`}}),n(P,{color:`primary`,disabled:t||!y,onClick:()=>void _(),children:t?n(J,{size:`sm`}):`Save`})]}),n(`small`,{className:`text-muted`,children:`Default 60. Lower values keep DB data fresher in backups but write more often. Effective freshness is bounded by max(this interval, the snapshot interval).`})]}),o&&n(q,{color:`danger`,className:`mt-2 mb-0`,children:o}),u&&n(q,{color:`success`,className:`mt-2 mb-0`,children:u})]}):null})]})}function Ea(){let e=$(()=>X.retention(),{intervalMs:6e4}),[t,o]=c(!1),[s,u]=c(null),[d,f]=c(null),[p,m]=c({hourly:``,daily:``,weekly:``,startup:``}),[h,g]=c({hourly:``,daily:``,weekly:``,startup:``}),_=a(p),v=a(h);l(()=>{_.current=p},[p]),l(()=>{v.current=h},[h]),l(()=>{if(!e.data)return;let t={hourly:String(e.data.hourly),daily:String(e.data.daily),weekly:String(e.data.weekly),startup:String(e.data.startup)},n=_.current,r=v.current;n.hourly===r.hourly&&n.daily===r.daily&&n.weekly===r.weekly&&n.startup===r.startup&&m(t),g(t)},[e.data]);let y=async()=>{u(null),f(null);let t=/^\d+$/,n=[`hourly`,`daily`,`weekly`,`startup`],r={};for(let e of n){let n=p[e].trim();if(!t.test(n)){u(`${e} must be a whole number between 1 and 365`);return}let i=Number(n);if(i<1||i>365){u(`${e} must be a whole number between 1 and 365`);return}r[e]=i}o(!0);try{await X.setRetention(r),e.refresh(),f(`Retention policy saved`)}catch(e){u(e instanceof Error?e.message:String(e))}finally{o(!1)}},b=e.data!==null&&(String(e.data.hourly)!==p.hourly||String(e.data.daily)!==p.daily||String(e.data.weekly)!==p.weekly||String(e.data.startup)!==p.startup);return r(R,{className:`mb-3`,children:[n(B,{children:n(`strong`,{children:`Retention`})}),n(z,{children:e.loading&&!e.data?n(J,{size:`sm`}):e.error?n(q,{color:`danger`,className:`mb-0`,children:e.error}):e.data?r(i,{children:[n(`p`,{className:`text-muted small mb-3`,children:`How many backups of each scheduled tier to keep. Older ones get pruned after the next scheduled backup. Manual backups are never auto-pruned.`}),r(Yr,{onSubmit:e=>{e.preventDefault(),y()},children:[[{key:`hourly`,label:`Hourly`,help:`24 = one full day at 1-per-hour`},{key:`daily`,label:`Daily`,help:`7 = one full week at 1-per-day`},{key:`weekly`,label:`Weekly`,help:`4 = roughly one month`},{key:`startup`,label:`On startup`,help:`Created when SignalK boots after >24h offline`}].map(e=>r(W,{className:`mb-2`,children:[n(K,{for:`retention-${e.key}`,children:e.label}),r(`div`,{className:`d-flex gap-2 align-items-center`,children:[n(G,{id:`retention-${e.key}`,type:`number`,min:1,max:365,step:1,value:p[e.key],disabled:t,onChange:t=>{m(n=>({...n,[e.key]:t.target.value}))},style:{maxWidth:`8em`}}),n(`small`,{className:`text-muted`,children:e.help})]})]},e.key)),n(P,{color:`primary`,type:`submit`,disabled:t||!b,className:`mt-2`,children:t?n(J,{size:`sm`}):`Save retention policy`})]}),s&&n(q,{color:`danger`,className:`mt-3 mb-0`,children:s}),d&&n(q,{color:`success`,className:`mt-3 mb-0`,children:d})]}):null})]})}function Da(){return r(i,{children:[n(`h2`,{className:`mb-3`,children:`Settings`}),n(xa,{}),n(Ea,{}),n(Ca,{}),n(Ta,{}),n(wa,{})]})}var Oa=[{id:`dashboard`,label:`Dashboard`},{id:`backups`,label:`Backups`},{id:`database-exports`,label:`Database exports`},{id:`cloud`,label:`Cloud sync`},{id:`settings`,label:`Settings`}];function ka(){let[e,t]=c(`dashboard`);return r(De,{className:`py-4`,children:[r(`div`,{className:`d-flex align-items-center mb-4`,children:[n(`img`,{src:`/signalk-backup/icon.svg`,alt:``,width:40,height:40,className:`me-3`}),n(`h1`,{className:`mb-0`,children:`SignalK Backup`}),r(`small`,{className:`text-muted ms-3 align-self-end mb-2`,children:[`v`,`1.0.1`]})]}),n(Ze,{tabs:!0,className:`mb-3`,children:Oa.map(r=>n(rt,{children:n(bt,{href:`#`,active:e===r.id,onClick:e=>{e.preventDefault(),t(r.id)},children:r.label})},r.id))}),e===`dashboard`&&n(qi,{}),e===`backups`&&n(ia,{}),e===`database-exports`&&n(ba,{}),e===`cloud`&&n(_a,{}),e===`settings`&&n(Da,{})]})}function Aa(){return n(ka,{})}export{Aa as default};
|
|
3
|
+
//# sourceMappingURL=AppPanel-DIJpLQjX.js.map
|