signalk-backup 0.8.0 → 0.9.0
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/package.json +3 -6
- package/plugin/config/image-tag.d.ts +1 -1
- package/plugin/config/image-tag.js +1 -1
- package/public/assets/App-CamMgCYz.js +3 -0
- package/public/assets/App-CamMgCYz.js.map +1 -0
- package/public/assets/AppPanel-DP-tJzgX.js +2 -0
- package/public/assets/AppPanel-DP-tJzgX.js.map +1 -0
- package/public/assets/_virtual_mf-localSharedImportMap___mfe_internal__signalk_mf_2_backup-C2n2hIk1.js +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react__loadShare__.mjs-BC2D4UuM.js +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_dev_mf_2_runtime__loadShare__-BWS6jj3P.js +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_dev_mf_2_runtime__loadShare__.mjs-tYcLt6vX.js +2 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_dev_mf_2_runtime__loadShare__.mjs-tYcLt6vX.js.map +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__-BkXrC6cU.js +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.mjs-BRncJTRs.js +2 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.mjs-BRncJTRs.js.map +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_2_dom__loadShare__.mjs-BYNd5CgH.js +1 -0
- package/public/assets/_virtual_mf___mfe_internal__signalk_mf_2_backup__loadShare__react_mf_2_dom_mf_1_client__loadShare__.mjs-DQKQsK1P.js +1 -0
- package/public/assets/dist-DLVcTB4j.js +5 -0
- package/public/assets/dist-DLVcTB4j.js.map +1 -0
- package/public/assets/hostInit-BW_bT2un.js +1 -0
- package/public/assets/index-Dwi_Ahte.js +2 -0
- package/public/assets/index-Dwi_Ahte.js.map +1 -0
- package/public/assets/jsx-dev-runtime-BmqEwJcR.js +1 -0
- package/public/assets/jsx-runtime-uNZh9WvZ.js +1 -0
- package/public/assets/main-ihpgEYJD.js +2 -0
- package/public/assets/main-ihpgEYJD.js.map +1 -0
- package/public/assets/preload-helper-DDsTugmO.js +1 -0
- package/public/assets/rolldown-runtime-jpDsebLB.js +1 -0
- package/public/assets/virtualExposes-BFSKi7sG.js +2 -0
- package/public/assets/virtualExposes-BFSKi7sG.js.map +1 -0
- package/public/index.html +1 -1
- package/public/mf-entry-bootstrap-0.js +17 -0
- package/public/remoteEntry.js +2 -0
- package/public/remoteEntry.js.map +1 -0
- package/public/assets/index-hCy0XsSo.js +0 -2
- package/public/assets/index-hCy0XsSo.js.map +0 -1
- package/public/assets/main-DyOKLQ-L.js +0 -11
- package/public/assets/main-DyOKLQ-L.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App-CamMgCYz.js","names":["ownKeys","_objectSpread","_defineProperty","_typeof","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","PropTypes","propTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","_defineProperty","colWidths","stringOrNumberProp","PropTypes","columnProps","propTypes","getColumnSizeClass","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_typeof","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","_classCallCheck","_defineProperties","_createClass","_inherits","_setPrototypeOf","_createSuper","_isNativeReflectConstruct","_getPrototypeOf","_possibleConstructorReturn","_assertThisInitialized","propTypes","PropTypes","React","_excluded","_extends","ownKeys","_objectSpread","_defineProperty","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","useCallback","_objectWithoutPropertiesLoose","_setPrototypeOf","setPrototypeOf","React","ReactDOM","config","_objectWithoutPropertiesLoose","TransitionGroupContext","React","noop","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","ownKeys","_objectSpread","_defineProperty","propTypes","PropTypes","defaultProps","useRef","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","ownKeys","_objectSpread","_defineProperty","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_typeof","_classCallCheck","_defineProperties","_createClass","_inherits","_setPrototypeOf","_createSuper","_isNativeReflectConstruct","_getPrototypeOf","_possibleConstructorReturn","_assertThisInitialized","propTypes","PropTypes","React","_typeof","ownKeys","_objectSpread","_extends","_defineProperty","_classCallCheck","_defineProperties","_createClass","_inherits","_setPrototypeOf","_createSuper","_isNativeReflectConstruct","_getPrototypeOf","_possibleConstructorReturn","_assertThisInitialized","PropTypes","propTypes","React","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_typeof","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","_classCallCheck","_defineProperties","_createClass","_inherits","_setPrototypeOf","_createSuper","_isNativeReflectConstruct","_getPrototypeOf","_possibleConstructorReturn","_assertThisInitialized","propTypes","PropTypes","Component","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","React","_excluded","_extends","_defineProperty","_objectWithoutProperties","_objectWithoutPropertiesLoose","PropTypes","propTypes","_excluded","_extends","_objectWithoutProperties","_objectWithoutPropertiesLoose","propTypes","PropTypes","PropTypes"],"sources":["../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../node_modules/prop-types/factoryWithThrowingShims.js","../../node_modules/prop-types/index.js","../../node_modules/classnames/index.js","../../node_modules/reactstrap/esm/utils.js","../../node_modules/reactstrap/esm/Container.js","../../node_modules/reactstrap/esm/Row.js","../../node_modules/reactstrap/esm/Col.js","../../node_modules/reactstrap/esm/Nav.js","../../node_modules/reactstrap/esm/NavItem.js","../../node_modules/reactstrap/esm/NavLink.js","../../node_modules/reactstrap/esm/CloseButton.js","../../node_modules/reactstrap/esm/Button.js","../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../node_modules/react-transition-group/esm/config.js","../../node_modules/react-transition-group/esm/TransitionGroupContext.js","../../node_modules/react-transition-group/esm/utils/reflow.js","../../node_modules/react-transition-group/esm/Transition.js","../../node_modules/reactstrap/esm/Fade.js","../../node_modules/reactstrap/esm/Badge.js","../../node_modules/reactstrap/esm/Card.js","../../node_modules/reactstrap/esm/CardBody.js","../../node_modules/reactstrap/esm/CardHeader.js","../../node_modules/reactstrap/esm/Progress.js","../../node_modules/reactstrap/esm/Portal.js","../../node_modules/reactstrap/esm/Modal.js","../../node_modules/reactstrap/esm/ModalHeader.js","../../node_modules/reactstrap/esm/ModalBody.js","../../node_modules/reactstrap/esm/ModalFooter.js","../../node_modules/reactstrap/esm/Table.js","../../node_modules/reactstrap/esm/Form.js","../../node_modules/reactstrap/esm/FormGroup.js","../../node_modules/reactstrap/esm/Input.js","../../node_modules/reactstrap/esm/Label.js","../../node_modules/reactstrap/esm/Alert.js","../../node_modules/reactstrap/esm/Spinner.js","../../webapp/src/api.ts","../../webapp/src/useApi.ts","../../webapp/src/views/Dashboard.tsx","../../webapp/src/components/PartialRestoreModal.tsx","../../webapp/src/components/BackupBrowser.tsx","../../webapp/src/components/PartialRestoreBanner.tsx","../../webapp/src/views/Backups.tsx","../../webapp/src/components/cloud-sync-progress-display.ts","../../webapp/src/components/CloudSyncProgress.tsx","../../webapp/src/components/LocalConfigureForm.tsx","../../webapp/src/components/SmbConnectForm.tsx","../../webapp/src/views/Cloud.tsx","../../webapp/src/views/DatabaseExports.tsx","../../webapp/src/views/Settings.tsx","../../webapp/src/App.tsx"],"sourcesContent":["/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport PropTypes from 'prop-types';\n\n// https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/js/src/modal.js#L436-L443\nexport function getScrollbarWidth() {\n var scrollDiv = document.createElement('div');\n // .modal-scrollbar-measure styles // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/scss/_modal.scss#L106-L113\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n scrollDiv.style.width = '50px';\n scrollDiv.style.height = '50px';\n scrollDiv.style.overflow = 'scroll';\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n}\nexport function setScrollbarWidth(padding) {\n document.body.style.paddingRight = padding > 0 ? \"\".concat(padding, \"px\") : null;\n}\nexport function isBodyOverflowing() {\n return document.body.clientWidth < window.innerWidth;\n}\nexport function getOriginalBodyPadding() {\n var style = window.getComputedStyle(document.body, null);\n return parseInt(style && style.getPropertyValue('padding-right') || 0, 10);\n}\nexport function conditionallyUpdateScrollbar() {\n var scrollbarWidth = getScrollbarWidth();\n // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.6/js/src/modal.js#L433\n var fixedContent = document.querySelectorAll('.fixed-top, .fixed-bottom, .is-fixed, .sticky-top')[0];\n var bodyPadding = fixedContent ? parseInt(fixedContent.style.paddingRight || 0, 10) : 0;\n if (isBodyOverflowing()) {\n setScrollbarWidth(bodyPadding + scrollbarWidth);\n }\n}\nvar globalCssModule;\nexport function setGlobalCssModule(cssModule) {\n globalCssModule = cssModule;\n}\nexport function mapToCssModules() {\n var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var cssModule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalCssModule;\n if (!cssModule) return className;\n return className.split(' ').map(function (c) {\n return cssModule[c] || c;\n }).join(' ');\n}\n\n/**\n * Returns a new object with the key/value pairs from `obj` that are not in the array `omitKeys`.\n */\nexport function omit(obj, omitKeys) {\n var result = {};\n Object.keys(obj).forEach(function (key) {\n if (omitKeys.indexOf(key) === -1) {\n result[key] = obj[key];\n }\n });\n return result;\n}\n\n/**\n * Returns a filtered copy of an object with only the specified keys.\n */\nexport function pick(obj, keys) {\n var pickKeys = Array.isArray(keys) ? keys : [keys];\n var length = pickKeys.length;\n var key;\n var result = {};\n while (length > 0) {\n length -= 1;\n key = pickKeys[length];\n result[key] = obj[key];\n }\n return result;\n}\nvar warned = {};\nexport function warnOnce(message) {\n if (!warned[message]) {\n /* istanbul ignore else */\n if (typeof console !== 'undefined') {\n console.error(message); // eslint-disable-line no-console\n }\n\n warned[message] = true;\n }\n}\nexport function deprecated(propType, explanation) {\n return function validate(props, propName, componentName) {\n if (props[propName] !== null && typeof props[propName] !== 'undefined') {\n warnOnce(\"\\\"\".concat(propName, \"\\\" property of \\\"\").concat(componentName, \"\\\" has been deprecated.\\n\").concat(explanation));\n }\n for (var _len = arguments.length, rest = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n rest[_key - 3] = arguments[_key];\n }\n return propType.apply(void 0, [props, propName, componentName].concat(rest));\n };\n}\n\n// Shim Element if needed (e.g. in Node environment)\nvar Element = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object' && window.Element || function () {};\nexport function DOMElement(props, propName, componentName) {\n if (!(props[propName] instanceof Element)) {\n return new Error('Invalid prop `' + propName + '` supplied to `' + componentName + '`. Expected prop to be an instance of Element. Validation failed.');\n }\n}\nexport var targetPropType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, DOMElement, PropTypes.shape({\n current: PropTypes.any\n})]);\nexport var tagPropType = PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({\n $$typeof: PropTypes.symbol,\n render: PropTypes.func\n}), PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({\n $$typeof: PropTypes.symbol,\n render: PropTypes.func\n})]))]);\n\n// These are all setup to match what is in the bootstrap _variables.scss\n// https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss\nexport var TransitionTimeouts = {\n Fade: 150,\n // $transition-fade\n Collapse: 350,\n // $transition-collapse\n Modal: 300,\n // $modal-transition\n Carousel: 600,\n // $carousel-transition\n Offcanvas: 300 // $offcanvas-transition\n};\n\n// Duplicated Transition.propType keys to ensure that Reactstrap builds\n// for distribution properly exclude these keys for nested child HTML attributes\n// since `react-transition-group` removes propTypes in production builds.\nexport var TransitionPropTypeKeys = ['in', 'mountOnEnter', 'unmountOnExit', 'appear', 'enter', 'exit', 'timeout', 'onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited'];\nexport var TransitionStatuses = {\n ENTERING: 'entering',\n ENTERED: 'entered',\n EXITING: 'exiting',\n EXITED: 'exited'\n};\nexport var keyCodes = {\n esc: 27,\n space: 32,\n enter: 13,\n tab: 9,\n up: 38,\n down: 40,\n home: 36,\n end: 35,\n n: 78,\n p: 80\n};\nexport var PopperPlacements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\nexport var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexport function isReactRefObj(target) {\n if (target && _typeof(target) === 'object') {\n return 'current' in target;\n }\n return false;\n}\nfunction getTag(value) {\n if (value == null) {\n return value === undefined ? '[object Undefined]' : '[object Null]';\n }\n return Object.prototype.toString.call(value);\n}\nexport function isObject(value) {\n var type = _typeof(value);\n return value != null && (type === 'object' || type === 'function');\n}\nexport function toNumber(value) {\n var type = _typeof(value);\n var NAN = 0 / 0;\n if (type === 'number') {\n return value;\n }\n if (type === 'symbol' || type === 'object' && getTag(value) === '[object Symbol]') {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf === 'function' ? value.valueOf() : value;\n value = isObject(other) ? \"\".concat(other) : other;\n }\n if (type !== 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(/^\\s+|\\s+$/g, '');\n var isBinary = /^0b[01]+$/i.test(value);\n return isBinary || /^0o[0-7]+$/i.test(value) ? parseInt(value.slice(2), isBinary ? 2 : 8) : /^[-+]0x[0-9a-f]+$/i.test(value) ? NAN : +value;\n}\nexport function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n var tag = getTag(value);\n return tag === '[object Function]' || tag === '[object AsyncFunction]' || tag === '[object GeneratorFunction]' || tag === '[object Proxy]';\n}\nexport function findDOMElements(target) {\n if (isReactRefObj(target)) {\n return target.current;\n }\n if (isFunction(target)) {\n return target();\n }\n if (typeof target === 'string' && canUseDOM) {\n var selection = document.querySelectorAll(target);\n if (!selection.length) {\n selection = document.querySelectorAll(\"#\".concat(target));\n }\n if (!selection.length) {\n throw new Error(\"The target '\".concat(target, \"' could not be identified in the dom, tip: check spelling\"));\n }\n return selection;\n }\n return target;\n}\nexport function isArrayOrNodeList(els) {\n if (els === null) {\n return false;\n }\n return Array.isArray(els) || canUseDOM && typeof els.length === 'number';\n}\nexport function getTarget(target, allElements) {\n var els = findDOMElements(target);\n if (allElements) {\n if (isArrayOrNodeList(els)) {\n return els;\n }\n if (els === null) {\n return [];\n }\n return [els];\n }\n if (isArrayOrNodeList(els)) {\n return els[0];\n }\n return els;\n}\nexport var defaultToggleEvents = ['touchstart', 'click'];\nexport function addMultipleEventListeners(_els, handler, _events, useCapture) {\n var els = _els;\n if (!isArrayOrNodeList(els)) {\n els = [els];\n }\n var events = _events;\n if (typeof events === 'string') {\n events = events.split(/\\s+/);\n }\n if (!isArrayOrNodeList(els) || typeof handler !== 'function' || !Array.isArray(events)) {\n throw new Error(\"\\n The first argument of this function must be DOM node or an array on DOM nodes or NodeList.\\n The second must be a function.\\n The third is a string or an array of strings that represents DOM events\\n \");\n }\n Array.prototype.forEach.call(events, function (event) {\n Array.prototype.forEach.call(els, function (el) {\n el.addEventListener(event, handler, useCapture);\n });\n });\n return function removeEvents() {\n Array.prototype.forEach.call(events, function (event) {\n Array.prototype.forEach.call(els, function (el) {\n el.removeEventListener(event, handler, useCapture);\n });\n });\n };\n}\nexport var focusableElements = ['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\"])'];\nexport function addDefaultProps(defaultProps, props) {\n if (!defaultProps || !props) return props;\n var result = _objectSpread({}, props);\n Object.keys(defaultProps).forEach(function (key) {\n if (result[key] === undefined) {\n result[key] = defaultProps[key];\n }\n if (Object.keys(defaultProps[key] || {}).length > 0 && _typeof(defaultProps[key]) === 'object') {\n addDefaultProps(defaultProps[key], result);\n }\n });\n return result;\n}","var _excluded = [\"className\", \"cssModule\", \"fluid\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n tag: tagPropType,\n fluid: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nfunction Container(props) {\n var className = props.className,\n cssModule = props.cssModule,\n fluid = props.fluid,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var containerClass = 'container';\n if (fluid === true) {\n containerClass = 'container-fluid';\n } else if (fluid) {\n containerClass = \"container-\".concat(fluid);\n }\n var classes = mapToCssModules(classNames(className, containerClass), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nContainer.propTypes = propTypes;\nexport default Container;","var _excluded = [\"className\", \"cssModule\", \"noGutters\", \"tag\", \"widths\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType, deprecated } from './utils';\nvar rowColWidths = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\nvar rowColsPropType = PropTypes.oneOfType([PropTypes.number, PropTypes.string]);\nvar propTypes = {\n tag: tagPropType,\n noGutters: deprecated(PropTypes.bool, 'Please use Bootstrap 5 gutter utility classes. https://getbootstrap.com/docs/5.0/layout/gutters/'),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n xs: rowColsPropType,\n sm: rowColsPropType,\n md: rowColsPropType,\n lg: rowColsPropType,\n xl: rowColsPropType,\n xxl: rowColsPropType,\n widths: PropTypes.array\n};\nfunction Row(props) {\n var className = props.className,\n cssModule = props.cssModule,\n noGutters = props.noGutters,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n _props$widths = props.widths,\n widths = _props$widths === void 0 ? rowColWidths : _props$widths,\n attributes = _objectWithoutProperties(props, _excluded);\n var colClasses = [];\n widths.forEach(function (colWidth, i) {\n var colSize = props[colWidth];\n delete attributes[colWidth];\n if (!colSize) {\n return;\n }\n var isXs = !i;\n colClasses.push(isXs ? \"row-cols-\".concat(colSize) : \"row-cols-\".concat(colWidth, \"-\").concat(colSize));\n });\n var classes = mapToCssModules(classNames(className, noGutters ? 'gx-0' : null, 'row', colClasses), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nRow.propTypes = propTypes;\nexport default Row;","var _excluded = [\"className\", \"cssModule\", \"widths\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType, isObject } from './utils';\nvar colWidths = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\nvar stringOrNumberProp = PropTypes.oneOfType([PropTypes.number, PropTypes.string]);\nvar columnProps = PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string, PropTypes.shape({\n size: PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string]),\n order: stringOrNumberProp,\n offset: stringOrNumberProp\n})]);\nvar propTypes = {\n tag: tagPropType,\n xs: columnProps,\n sm: columnProps,\n md: columnProps,\n lg: columnProps,\n xl: columnProps,\n xxl: columnProps,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n widths: PropTypes.array\n};\nvar getColumnSizeClass = function getColumnSizeClass(isXs, colWidth, colSize) {\n if (colSize === true || colSize === '') {\n return isXs ? 'col' : \"col-\".concat(colWidth);\n }\n if (colSize === 'auto') {\n return isXs ? 'col-auto' : \"col-\".concat(colWidth, \"-auto\");\n }\n return isXs ? \"col-\".concat(colSize) : \"col-\".concat(colWidth, \"-\").concat(colSize);\n};\nexport var getColumnClasses = function getColumnClasses(attributes, cssModule) {\n var widths = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : colWidths;\n var modifiedAttributes = attributes;\n var colClasses = [];\n widths.forEach(function (colWidth, i) {\n var columnProp = modifiedAttributes[colWidth];\n delete modifiedAttributes[colWidth];\n if (!columnProp && columnProp !== '') {\n return;\n }\n var isXs = !i;\n if (isObject(columnProp)) {\n var _classNames;\n var colSizeInterfix = isXs ? '-' : \"-\".concat(colWidth, \"-\");\n var colClass = getColumnSizeClass(isXs, colWidth, columnProp.size);\n colClasses.push(mapToCssModules(classNames((_classNames = {}, _defineProperty(_classNames, colClass, columnProp.size || columnProp.size === ''), _defineProperty(_classNames, \"order\".concat(colSizeInterfix).concat(columnProp.order), columnProp.order || columnProp.order === 0), _defineProperty(_classNames, \"offset\".concat(colSizeInterfix).concat(columnProp.offset), columnProp.offset || columnProp.offset === 0), _classNames)), cssModule));\n } else {\n var _colClass = getColumnSizeClass(isXs, colWidth, columnProp);\n colClasses.push(_colClass);\n }\n });\n return {\n colClasses: colClasses,\n modifiedAttributes: modifiedAttributes\n };\n};\nfunction Col(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$widths = props.widths,\n widths = _props$widths === void 0 ? colWidths : _props$widths,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var _getColumnClasses = getColumnClasses(attributes, cssModule, widths),\n modifiedAttributes = _getColumnClasses.modifiedAttributes,\n colClasses = _getColumnClasses.colClasses;\n if (!colClasses.length) {\n colClasses.push('col');\n }\n var classes = mapToCssModules(classNames(className, colClasses), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, modifiedAttributes, {\n className: classes\n }));\n}\nCol.propTypes = propTypes;\nexport default Col;","var _excluded = [\"className\", \"cssModule\", \"tabs\", \"pills\", \"vertical\", \"horizontal\", \"justified\", \"fill\", \"navbar\", \"card\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Adding card prop adds `.card-header-tabs` or `.card-header-pills` class */\n card: PropTypes.bool,\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** fills the nav to extend to full available width */\n fill: PropTypes.bool,\n /** Change the horizontal alignment of your nav */\n horizontal: PropTypes.oneOf(['center', 'end']),\n /** All horizontal space will be occupied by nav links, but unlike the `fill` above, every nav item will be the same width. */\n justified: PropTypes.bool,\n /** Add navbar for a full-height and lightweight navigation */\n navbar: PropTypes.bool,\n /** Make NavItems look like pills */\n pills: PropTypes.bool,\n /** Make NavItems look like tabs */\n tabs: PropTypes.bool,\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Stack your navigation by changing the flex item direction */\n vertical: PropTypes.oneOfType([PropTypes.bool, PropTypes.string])\n};\nvar getVerticalClass = function getVerticalClass(vertical) {\n if (vertical === false) {\n return false;\n }\n if (vertical === true || vertical === 'xs') {\n return 'flex-column';\n }\n return \"flex-\".concat(vertical, \"-column\");\n};\nfunction Nav(props) {\n var className = props.className,\n cssModule = props.cssModule,\n tabs = props.tabs,\n pills = props.pills,\n _props$vertical = props.vertical,\n vertical = _props$vertical === void 0 ? false : _props$vertical,\n horizontal = props.horizontal,\n justified = props.justified,\n fill = props.fill,\n navbar = props.navbar,\n card = props.card,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'ul' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, navbar ? 'navbar-nav' : 'nav', horizontal ? \"justify-content-\".concat(horizontal) : false, getVerticalClass(vertical), {\n 'nav-tabs': tabs,\n 'card-header-tabs': card && tabs,\n 'nav-pills': pills,\n 'card-header-pills': card && pills,\n 'nav-justified': justified,\n 'nav-fill': fill\n }), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nNav.propTypes = propTypes;\nexport default Nav;","var _excluded = [\"className\", \"cssModule\", \"active\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add active class to element */\n active: PropTypes.bool,\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction NavItem(props) {\n var className = props.className,\n cssModule = props.cssModule,\n active = props.active,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'li' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'nav-item', active ? 'active' : false), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nNavItem.propTypes = propTypes;\nexport default NavItem;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"active\", \"tag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add active class to NavLink */\n active: PropTypes.bool,\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Disable the link */\n disabled: PropTypes.bool,\n href: PropTypes.any,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n /** Function to be triggered on click */\n onClick: PropTypes.func,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nvar NavLink = /*#__PURE__*/function (_React$Component) {\n _inherits(NavLink, _React$Component);\n var _super = _createSuper(NavLink);\n function NavLink(props) {\n var _this;\n _classCallCheck(this, NavLink);\n _this = _super.call(this, props);\n _this.onClick = _this.onClick.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(NavLink, [{\n key: \"onClick\",\n value: function onClick(e) {\n if (this.props.disabled) {\n e.preventDefault();\n return;\n }\n if (this.props.href === '#') {\n e.preventDefault();\n }\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n active = _this$props.active,\n _this$props$tag = _this$props.tag,\n Tag = _this$props$tag === void 0 ? 'a' : _this$props$tag,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutProperties(_this$props, _excluded);\n var classes = mapToCssModules(classNames(className, 'nav-link', {\n disabled: attributes.disabled,\n active: active\n }), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n onClick: this.onClick,\n className: classes\n }));\n }\n }]);\n return NavLink;\n}(React.Component);\nNavLink.propTypes = propTypes;\nexport default NavLink;","var _excluded = [\"className\", \"cssModule\", \"variant\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules } from './utils';\nvar propTypes = {\n /** Disable the button if needed */\n active: PropTypes.bool,\n /** Aria label */\n 'aria-label': PropTypes.string,\n /** Function to be triggered on click */\n onClick: PropTypes.func,\n /** Change the variant to white */\n variant: PropTypes.oneOf(['white']),\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n};\nfunction CloseButton(props) {\n var className = props.className,\n cssModule = props.cssModule,\n variant = props.variant,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'btn-close', variant && \"btn-close-\".concat(variant)));\n return /*#__PURE__*/React.createElement(\"button\", _extends({\n ref: innerRef,\n type: \"button\",\n className: classes\n }, _objectSpread({\n 'aria-label': 'close'\n }, attributes)));\n}\nCloseButton.propTypes = propTypes;\nexport default CloseButton;","var _excluded = [\"active\", \"aria-label\", \"block\", \"className\", \"close\", \"cssModule\", \"color\", \"outline\", \"size\", \"tag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nimport CloseButton from './CloseButton';\nvar propTypes = {\n /** Manually set the visual state of the button to active */\n active: PropTypes.bool,\n /** Aria label */\n 'aria-label': PropTypes.string,\n block: PropTypes.bool,\n /** Pass children so this component can wrap them */\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n /** Use the button as a close button */\n close: PropTypes.bool,\n /** Change color of Button to one of the available colors */\n color: PropTypes.string,\n /** Disables the button */\n disabled: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n /** Function to be triggered on click */\n onClick: PropTypes.func,\n /** Adds outline to the button */\n outline: PropTypes.bool,\n /** Make the button bigger or smaller */\n size: PropTypes.string,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction Button(props) {\n var onClick = useCallback(function (e) {\n if (props.disabled) {\n e.preventDefault();\n return;\n }\n if (props.onClick) {\n return props.onClick(e);\n }\n }, [props.onClick, props.disabled]);\n var active = props.active,\n ariaLabel = props['aria-label'],\n block = props.block,\n className = props.className,\n close = props.close,\n cssModule = props.cssModule,\n _props$color = props.color,\n color = _props$color === void 0 ? 'secondary' : _props$color,\n outline = props.outline,\n size = props.size,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'button' : _props$tag,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n if (close) {\n return /*#__PURE__*/React.createElement(CloseButton, attributes);\n }\n var btnOutlineColor = \"btn\".concat(outline ? '-outline' : '', \"-\").concat(color);\n var classes = mapToCssModules(classNames(className, 'btn', btnOutlineColor, size ? \"btn-\".concat(size) : false, block ? 'd-block w-100' : false, {\n active: active,\n disabled: props.disabled\n }), cssModule);\n if (attributes.href && Tag === 'button') {\n Tag = 'a';\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n type: Tag === 'button' && attributes.onClick ? 'button' : undefined\n }, attributes, {\n className: classes,\n ref: innerRef,\n onClick: onClick,\n \"aria-label\": ariaLabel\n }));\n}\nButton.propTypes = propTypes;\nexport default Button;","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","export default {\n disabled: false\n};","import React from 'react';\nexport default React.createContext(null);","export var forceReflow = function forceReflow(node) {\n return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen, we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n }\n\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `<CSSTransition>` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","var _excluded = [\"tag\", \"baseClass\", \"baseClassActive\", \"className\", \"cssModule\", \"children\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nimport React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Transition } from 'react-transition-group';\nimport { addDefaultProps, mapToCssModules, omit, pick, tagPropType, TransitionPropTypeKeys, TransitionTimeouts } from './utils';\nvar propTypes = _objectSpread(_objectSpread({}, Transition.propTypes), {}, {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n tag: tagPropType,\n baseClass: PropTypes.string,\n baseClassActive: PropTypes.string,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n});\nvar defaultProps = _objectSpread(_objectSpread({}, Transition.defaultProps), {}, {\n timeout: TransitionTimeouts.Fade,\n appear: true,\n enter: true,\n exit: true,\n \"in\": true\n});\nfunction Fade(props) {\n var ref = useRef(null);\n var _addDefaultProps = addDefaultProps(defaultProps, props),\n _addDefaultProps$tag = _addDefaultProps.tag,\n Tag = _addDefaultProps$tag === void 0 ? 'div' : _addDefaultProps$tag,\n _addDefaultProps$base = _addDefaultProps.baseClass,\n baseClass = _addDefaultProps$base === void 0 ? 'fade' : _addDefaultProps$base,\n _addDefaultProps$base2 = _addDefaultProps.baseClassActive,\n baseClassActive = _addDefaultProps$base2 === void 0 ? 'show' : _addDefaultProps$base2,\n className = _addDefaultProps.className,\n cssModule = _addDefaultProps.cssModule,\n children = _addDefaultProps.children,\n _addDefaultProps$inne = _addDefaultProps.innerRef,\n innerRef = _addDefaultProps$inne === void 0 ? ref : _addDefaultProps$inne,\n otherProps = _objectWithoutProperties(_addDefaultProps, _excluded);\n var transitionProps = pick(_objectSpread({\n defaultProps: defaultProps\n }, otherProps), TransitionPropTypeKeys);\n var childProps = omit(otherProps, TransitionPropTypeKeys);\n return /*#__PURE__*/React.createElement(Transition, _extends({\n nodeRef: innerRef\n }, transitionProps), function (status) {\n var isActive = status === 'entered';\n var classes = mapToCssModules(classNames(className, baseClass, isActive && baseClassActive), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({\n className: classes\n }, childProps, {\n ref: innerRef\n }), children);\n });\n}\nFade.propTypes = propTypes;\nexport default Fade;","var _excluded = [\"className\", \"cssModule\", \"color\", \"innerRef\", \"pill\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Pass children so this component can wrap the child elements */\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Change background color of Badge */\n color: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n /** Add rounded corners to the Badge */\n pill: PropTypes.bool,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction Badge(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$color = props.color,\n color = _props$color === void 0 ? 'secondary' : _props$color,\n innerRef = props.innerRef,\n _props$pill = props.pill,\n pill = _props$pill === void 0 ? false : _props$pill,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'span' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'badge', 'bg-' + color, pill ? 'rounded-pill' : false), cssModule);\n if (attributes.href && Tag === 'span') {\n Tag = 'a';\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes,\n ref: innerRef\n }));\n}\nBadge.propTypes = propTypes;\nexport default Badge;","var _excluded = [\"className\", \"cssModule\", \"color\", \"body\", \"inverse\", \"outline\", \"tag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Toggles card padding using `.card-body` */\n body: PropTypes.bool,\n /** Add custom class */\n className: PropTypes.string,\n /** Change background color of component */\n color: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** Inverts the color */\n inverse: PropTypes.bool,\n /** Changes the card to have only outline */\n outline: PropTypes.bool,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction Card(props) {\n var className = props.className,\n cssModule = props.cssModule,\n color = props.color,\n body = props.body,\n inverse = props.inverse,\n outline = props.outline,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'card', inverse ? 'text-white' : false, body ? 'card-body' : false, color ? \"\".concat(outline ? 'border' : 'bg', \"-\").concat(color) : false), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes,\n ref: innerRef\n }));\n}\nCard.propTypes = propTypes;\nexport default Card;","var _excluded = [\"className\", \"cssModule\", \"innerRef\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction CardBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n innerRef = props.innerRef,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'card-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes,\n ref: innerRef\n }));\n}\nCardBody.propTypes = propTypes;\nexport default CardBody;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction CardHeader(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'card-header'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nCardHeader.propTypes = propTypes;\nexport default CardHeader;","var _excluded = [\"children\", \"className\", \"barClassName\", \"cssModule\", \"value\", \"min\", \"max\", \"animated\", \"striped\", \"color\", \"bar\", \"multi\", \"tag\", \"style\", \"barStyle\", \"barAriaValueText\", \"barAriaLabelledBy\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType, toNumber } from './utils';\nvar propTypes = {\n /** Enable animation to bar */\n animated: PropTypes.bool,\n bar: PropTypes.bool,\n barAriaLabelledBy: PropTypes.string,\n barAriaValueText: PropTypes.string,\n barClassName: PropTypes.string,\n barStyle: PropTypes.object,\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Add custom color to the placeholder */\n color: PropTypes.string,\n /** Maximum value of progress */\n max: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /** Minimum value of progress, defaults to zero */\n min: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n multi: PropTypes.bool,\n /** Add stripes to progress bar */\n striped: PropTypes.bool,\n style: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Current value of progress */\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\nfunction Progress(props) {\n var children = props.children,\n className = props.className,\n barClassName = props.barClassName,\n cssModule = props.cssModule,\n _props$value = props.value,\n value = _props$value === void 0 ? 0 : _props$value,\n _props$min = props.min,\n min = _props$min === void 0 ? 0 : _props$min,\n _props$max = props.max,\n max = _props$max === void 0 ? 100 : _props$max,\n animated = props.animated,\n striped = props.striped,\n color = props.color,\n bar = props.bar,\n multi = props.multi,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n _props$style = props.style,\n style = _props$style === void 0 ? {} : _props$style,\n _props$barStyle = props.barStyle,\n barStyle = _props$barStyle === void 0 ? {} : _props$barStyle,\n barAriaValueText = props.barAriaValueText,\n barAriaLabelledBy = props.barAriaLabelledBy,\n attributes = _objectWithoutProperties(props, _excluded);\n var percent = toNumber(value) / toNumber(max) * 100;\n var progressClasses = mapToCssModules(classNames(className, 'progress'), cssModule);\n var progressBarClasses = mapToCssModules(classNames('progress-bar', bar ? className || barClassName : barClassName, animated ? 'progress-bar-animated' : null, color ? \"bg-\".concat(color) : null, striped || animated ? 'progress-bar-striped' : null), cssModule);\n var progressBarProps = {\n className: progressBarClasses,\n style: _objectSpread(_objectSpread(_objectSpread({}, bar ? style : {}), barStyle), {}, {\n width: \"\".concat(percent, \"%\")\n }),\n role: 'progressbar',\n 'aria-valuenow': value,\n 'aria-valuemin': min,\n 'aria-valuemax': max,\n 'aria-valuetext': barAriaValueText,\n 'aria-labelledby': barAriaLabelledBy,\n children: children\n };\n if (bar) {\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, progressBarProps));\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n style: style,\n className: progressClasses\n }), multi ? children : /*#__PURE__*/React.createElement(\"div\", progressBarProps));\n}\nProgress.propTypes = propTypes;\nexport default Progress;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { canUseDOM } from './utils';\nvar propTypes = {\n children: PropTypes.node.isRequired,\n node: PropTypes.any\n};\nvar Portal = /*#__PURE__*/function (_React$Component) {\n _inherits(Portal, _React$Component);\n var _super = _createSuper(Portal);\n function Portal() {\n _classCallCheck(this, Portal);\n return _super.apply(this, arguments);\n }\n _createClass(Portal, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.defaultNode) {\n document.body.removeChild(this.defaultNode);\n }\n this.defaultNode = null;\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!canUseDOM) {\n return null;\n }\n if (!this.props.node && !this.defaultNode) {\n this.defaultNode = document.createElement('div');\n document.body.appendChild(this.defaultNode);\n }\n return /*#__PURE__*/ReactDOM.createPortal(this.props.children, this.props.node || this.defaultNode);\n }\n }]);\n return Portal;\n}(React.Component);\nPortal.propTypes = propTypes;\nexport default Portal;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Portal from './Portal';\nimport Fade from './Fade';\nimport { getOriginalBodyPadding, conditionallyUpdateScrollbar, setScrollbarWidth, mapToCssModules, omit, focusableElements, TransitionTimeouts, keyCodes, targetPropType, getTarget } from './utils';\nfunction noop() {}\nvar FadePropTypes = PropTypes.shape(Fade.propTypes);\nvar propTypes = {\n /** */\n autoFocus: PropTypes.bool,\n /** Add backdrop to modal */\n backdrop: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['static'])]),\n /** add custom classname to backdrop */\n backdropClassName: PropTypes.string,\n backdropTransition: FadePropTypes,\n /** Vertically center the modal */\n centered: PropTypes.bool,\n /** Add children for the modal to wrap */\n children: PropTypes.node,\n /** Add custom className for modal content */\n contentClassName: PropTypes.string,\n className: PropTypes.string,\n container: targetPropType,\n cssModule: PropTypes.object,\n external: PropTypes.node,\n /** Enable/Disable animation */\n fade: PropTypes.bool,\n /** Make the modal fullscreen */\n fullscreen: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['sm', 'md', 'lg', 'xl'])]),\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** The status of the modal, either open or close */\n isOpen: PropTypes.bool,\n /** Allow modal to be closed with escape key. */\n keyboard: PropTypes.bool,\n /** Identifies the element (or elements) that labels the current element. */\n labelledBy: PropTypes.string,\n modalClassName: PropTypes.string,\n modalTransition: FadePropTypes,\n /** Function to be triggered on close */\n onClosed: PropTypes.func,\n /** Function to be triggered on enter */\n onEnter: PropTypes.func,\n /** Function to be triggered on exit */\n onExit: PropTypes.func,\n /** Function to be triggered on open */\n onOpened: PropTypes.func,\n /** Returns focus to the element that triggered opening of the modal */\n returnFocusAfterClose: PropTypes.bool,\n /** Accessibility role */\n role: PropTypes.string,\n /** Make the modal scrollable */\n scrollable: PropTypes.bool,\n /** Two optional sizes `lg` and `sm` */\n size: PropTypes.string,\n /** Function to toggle modal visibility */\n toggle: PropTypes.func,\n trapFocus: PropTypes.bool,\n /** Unmounts the modal when modal is closed */\n unmountOnClose: PropTypes.bool,\n wrapClassName: PropTypes.string,\n zIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n};\nvar propsToOmit = Object.keys(propTypes);\nvar defaultProps = {\n isOpen: false,\n autoFocus: true,\n centered: false,\n scrollable: false,\n role: 'dialog',\n backdrop: true,\n keyboard: true,\n zIndex: 1050,\n fade: true,\n onOpened: noop,\n onClosed: noop,\n modalTransition: {\n timeout: TransitionTimeouts.Modal\n },\n backdropTransition: {\n mountOnEnter: true,\n timeout: TransitionTimeouts.Fade // uses standard fade transition\n },\n\n unmountOnClose: true,\n returnFocusAfterClose: true,\n container: 'body',\n trapFocus: false\n};\nvar Modal = /*#__PURE__*/function (_React$Component) {\n _inherits(Modal, _React$Component);\n var _super = _createSuper(Modal);\n function Modal(props) {\n var _this;\n _classCallCheck(this, Modal);\n _this = _super.call(this, props);\n _this._element = null;\n _this._originalBodyPadding = null;\n _this.getFocusableChildren = _this.getFocusableChildren.bind(_assertThisInitialized(_this));\n _this.handleBackdropClick = _this.handleBackdropClick.bind(_assertThisInitialized(_this));\n _this.handleBackdropMouseDown = _this.handleBackdropMouseDown.bind(_assertThisInitialized(_this));\n _this.handleEscape = _this.handleEscape.bind(_assertThisInitialized(_this));\n _this.handleStaticBackdropAnimation = _this.handleStaticBackdropAnimation.bind(_assertThisInitialized(_this));\n _this.handleTab = _this.handleTab.bind(_assertThisInitialized(_this));\n _this.onOpened = _this.onOpened.bind(_assertThisInitialized(_this));\n _this.onClosed = _this.onClosed.bind(_assertThisInitialized(_this));\n _this.manageFocusAfterClose = _this.manageFocusAfterClose.bind(_assertThisInitialized(_this));\n _this.clearBackdropAnimationTimeout = _this.clearBackdropAnimationTimeout.bind(_assertThisInitialized(_this));\n _this.trapFocus = _this.trapFocus.bind(_assertThisInitialized(_this));\n _this.state = {\n isOpen: false,\n showStaticBackdropAnimation: false\n };\n return _this;\n }\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n isOpen = _this$props.isOpen,\n autoFocus = _this$props.autoFocus,\n onEnter = _this$props.onEnter;\n if (isOpen) {\n this.init();\n this.setState({\n isOpen: true\n });\n if (autoFocus) {\n this.setFocus();\n }\n }\n if (onEnter) {\n onEnter();\n }\n\n // traps focus inside the Modal, even if the browser address bar is focused\n document.addEventListener('focus', this.trapFocus, true);\n this._isMounted = true;\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.props.isOpen && !prevProps.isOpen) {\n this.init();\n this.setState({\n isOpen: true\n });\n // let render() renders Modal Dialog first\n return;\n }\n\n // now Modal Dialog is rendered and we can refer this._element and this._dialog\n if (this.props.autoFocus && this.state.isOpen && !prevState.isOpen) {\n this.setFocus();\n }\n if (this._element && prevProps.zIndex !== this.props.zIndex) {\n this._element.style.zIndex = this.props.zIndex;\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearBackdropAnimationTimeout();\n if (this.props.onExit) {\n this.props.onExit();\n }\n if (this._element) {\n this.destroy();\n if (this.props.isOpen || this.state.isOpen) {\n this.close();\n }\n }\n document.removeEventListener('focus', this.trapFocus, true);\n this._isMounted = false;\n }\n\n // not mouseUp because scrollbar fires it, shouldn't close when user scrolls\n }, {\n key: \"handleBackdropClick\",\n value: function handleBackdropClick(e) {\n if (e.target === this._mouseDownElement) {\n e.stopPropagation();\n var backdrop = this._dialog ? this._dialog.parentNode : null;\n if (backdrop && e.target === backdrop && this.props.backdrop === 'static') {\n this.handleStaticBackdropAnimation();\n }\n if (!this.props.isOpen || this.props.backdrop !== true) return;\n if (backdrop && e.target === backdrop && this.props.toggle) {\n this.props.toggle(e);\n }\n }\n }\n }, {\n key: \"handleTab\",\n value: function handleTab(e) {\n if (e.which !== 9) return;\n if (this.modalIndex < Modal.openCount - 1) return; // last opened modal\n\n var focusableChildren = this.getFocusableChildren();\n var totalFocusable = focusableChildren.length;\n if (totalFocusable === 0) return;\n var currentFocus = this.getFocusedChild();\n var focusedIndex = 0;\n for (var i = 0; i < totalFocusable; i += 1) {\n if (focusableChildren[i] === currentFocus) {\n focusedIndex = i;\n break;\n }\n }\n if (e.shiftKey && focusedIndex === 0) {\n e.preventDefault();\n focusableChildren[totalFocusable - 1].focus();\n } else if (!e.shiftKey && focusedIndex === totalFocusable - 1) {\n e.preventDefault();\n focusableChildren[0].focus();\n }\n }\n }, {\n key: \"handleBackdropMouseDown\",\n value: function handleBackdropMouseDown(e) {\n this._mouseDownElement = e.target;\n }\n }, {\n key: \"handleEscape\",\n value: function handleEscape(e) {\n if (this.props.isOpen && e.keyCode === keyCodes.esc && this.props.toggle) {\n if (this.props.keyboard) {\n e.preventDefault();\n e.stopPropagation();\n this.props.toggle(e);\n } else if (this.props.backdrop === 'static') {\n e.preventDefault();\n e.stopPropagation();\n this.handleStaticBackdropAnimation();\n }\n }\n }\n }, {\n key: \"handleStaticBackdropAnimation\",\n value: function handleStaticBackdropAnimation() {\n var _this2 = this;\n this.clearBackdropAnimationTimeout();\n this.setState({\n showStaticBackdropAnimation: true\n });\n this._backdropAnimationTimeout = setTimeout(function () {\n _this2.setState({\n showStaticBackdropAnimation: false\n });\n }, 100);\n }\n }, {\n key: \"onOpened\",\n value: function onOpened(node, isAppearing) {\n this.props.onOpened();\n (this.props.modalTransition.onEntered || noop)(node, isAppearing);\n }\n }, {\n key: \"onClosed\",\n value: function onClosed(node) {\n var unmountOnClose = this.props.unmountOnClose;\n // so all methods get called before it is unmounted\n this.props.onClosed();\n (this.props.modalTransition.onExited || noop)(node);\n if (unmountOnClose) {\n this.destroy();\n }\n this.close();\n if (this._isMounted) {\n this.setState({\n isOpen: false\n });\n }\n }\n }, {\n key: \"setFocus\",\n value: function setFocus() {\n if (this._dialog && this._dialog.parentNode && typeof this._dialog.parentNode.focus === 'function') {\n this._dialog.parentNode.focus();\n }\n }\n }, {\n key: \"getFocusableChildren\",\n value: function getFocusableChildren() {\n return this._element.querySelectorAll(focusableElements.join(', '));\n }\n }, {\n key: \"getFocusedChild\",\n value: function getFocusedChild() {\n var currentFocus;\n var focusableChildren = this.getFocusableChildren();\n try {\n currentFocus = document.activeElement;\n } catch (err) {\n currentFocus = focusableChildren[0];\n }\n return currentFocus;\n }\n }, {\n key: \"trapFocus\",\n value: function trapFocus(ev) {\n if (!this.props.trapFocus) {\n return;\n }\n if (!this._element) {\n // element is not attached\n return;\n }\n if (this._dialog && this._dialog.parentNode === ev.target) {\n // initial focus when the Modal is opened\n return;\n }\n if (this.modalIndex < Modal.openCount - 1) {\n // last opened modal\n return;\n }\n var children = this.getFocusableChildren();\n for (var i = 0; i < children.length; i += 1) {\n // focus is already inside the Modal\n if (children[i] === ev.target) return;\n }\n if (children.length > 0) {\n // otherwise focus the first focusable element in the Modal\n ev.preventDefault();\n ev.stopPropagation();\n children[0].focus();\n }\n }\n }, {\n key: \"init\",\n value: function init() {\n try {\n this._triggeringElement = document.activeElement;\n } catch (err) {\n this._triggeringElement = null;\n }\n if (!this._element) {\n this._element = document.createElement('div');\n this._element.setAttribute('tabindex', '-1');\n this._element.style.position = 'relative';\n this._element.style.zIndex = this.props.zIndex;\n this._mountContainer = getTarget(this.props.container);\n this._mountContainer.appendChild(this._element);\n }\n this._originalBodyPadding = getOriginalBodyPadding();\n if (Modal.openCount < 1) {\n Modal.originalBodyOverflow = window.getComputedStyle(document.body).overflow;\n }\n conditionallyUpdateScrollbar();\n if (Modal.openCount === 0) {\n document.body.className = classNames(document.body.className, mapToCssModules('modal-open', this.props.cssModule));\n document.body.style.overflow = 'hidden';\n }\n this.modalIndex = Modal.openCount;\n Modal.openCount += 1;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (this._element) {\n this._mountContainer.removeChild(this._element);\n this._element = null;\n }\n this.manageFocusAfterClose();\n }\n }, {\n key: \"manageFocusAfterClose\",\n value: function manageFocusAfterClose() {\n if (this._triggeringElement) {\n var returnFocusAfterClose = this.props.returnFocusAfterClose;\n if (this._triggeringElement.focus && returnFocusAfterClose) this._triggeringElement.focus();\n this._triggeringElement = null;\n }\n }\n }, {\n key: \"close\",\n value: function close() {\n if (Modal.openCount <= 1) {\n var modalOpenClassName = mapToCssModules('modal-open', this.props.cssModule);\n // Use regex to prevent matching `modal-open` as part of a different class, e.g. `my-modal-opened`\n var modalOpenClassNameRegex = new RegExp(\"(^| )\".concat(modalOpenClassName, \"( |$)\"));\n document.body.className = document.body.className.replace(modalOpenClassNameRegex, ' ').trim();\n document.body.style.overflow = Modal.originalBodyOverflow;\n }\n this.manageFocusAfterClose();\n Modal.openCount = Math.max(0, Modal.openCount - 1);\n setScrollbarWidth(this._originalBodyPadding);\n }\n }, {\n key: \"clearBackdropAnimationTimeout\",\n value: function clearBackdropAnimationTimeout() {\n if (this._backdropAnimationTimeout) {\n clearTimeout(this._backdropAnimationTimeout);\n this._backdropAnimationTimeout = undefined;\n }\n }\n }, {\n key: \"renderModalDialog\",\n value: function renderModalDialog() {\n var _classNames,\n _this3 = this;\n var attributes = omit(this.props, propsToOmit);\n var dialogBaseClass = 'modal-dialog';\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, attributes, {\n className: mapToCssModules(classNames(dialogBaseClass, this.props.className, (_classNames = {}, _defineProperty(_classNames, \"modal-\".concat(this.props.size), this.props.size), _defineProperty(_classNames, \"\".concat(dialogBaseClass, \"-centered\"), this.props.centered), _defineProperty(_classNames, \"\".concat(dialogBaseClass, \"-scrollable\"), this.props.scrollable), _defineProperty(_classNames, 'modal-fullscreen', this.props.fullscreen === true), _defineProperty(_classNames, \"modal-fullscreen-\".concat(this.props.fullscreen, \"-down\"), typeof this.props.fullscreen === 'string'), _classNames)), this.props.cssModule),\n role: \"document\",\n ref: function ref(c) {\n _this3._dialog = c;\n }\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(classNames('modal-content', this.props.contentClassName), this.props.cssModule)\n }, this.props.children));\n }\n }, {\n key: \"render\",\n value: function render() {\n var unmountOnClose = this.props.unmountOnClose;\n if (!!this._element && (this.state.isOpen || !unmountOnClose)) {\n var isModalHidden = !!this._element && !this.state.isOpen && !unmountOnClose;\n this._element.style.display = isModalHidden ? 'none' : 'block';\n var _this$props2 = this.props,\n wrapClassName = _this$props2.wrapClassName,\n modalClassName = _this$props2.modalClassName,\n backdropClassName = _this$props2.backdropClassName,\n cssModule = _this$props2.cssModule,\n isOpen = _this$props2.isOpen,\n backdrop = _this$props2.backdrop,\n role = _this$props2.role,\n labelledBy = _this$props2.labelledBy,\n external = _this$props2.external,\n innerRef = _this$props2.innerRef;\n var modalAttributes = {\n onClick: this.handleBackdropClick,\n onMouseDown: this.handleBackdropMouseDown,\n onKeyUp: this.handleEscape,\n onKeyDown: this.handleTab,\n style: {\n display: 'block'\n },\n 'aria-labelledby': labelledBy,\n 'aria-modal': true,\n role: role,\n tabIndex: '-1'\n };\n var hasTransition = this.props.fade;\n var modalTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), this.props.modalTransition), {}, {\n baseClass: hasTransition ? this.props.modalTransition.baseClass : '',\n timeout: hasTransition ? this.props.modalTransition.timeout : 0\n });\n var backdropTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), this.props.backdropTransition), {}, {\n baseClass: hasTransition ? this.props.backdropTransition.baseClass : '',\n timeout: hasTransition ? this.props.backdropTransition.timeout : 0\n });\n var Backdrop = backdrop && (hasTransition ? /*#__PURE__*/React.createElement(Fade, _extends({}, backdropTransition, {\n \"in\": isOpen && !!backdrop,\n cssModule: cssModule,\n className: mapToCssModules(classNames('modal-backdrop', backdropClassName), cssModule)\n })) : /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(classNames('modal-backdrop', 'show', backdropClassName), cssModule)\n }));\n return /*#__PURE__*/React.createElement(Portal, {\n node: this._element\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: mapToCssModules(wrapClassName)\n }, /*#__PURE__*/React.createElement(Fade, _extends({}, modalAttributes, modalTransition, {\n \"in\": isOpen,\n onEntered: this.onOpened,\n onExited: this.onClosed,\n cssModule: cssModule,\n className: mapToCssModules(classNames('modal', modalClassName, this.state.showStaticBackdropAnimation && 'modal-static'), cssModule),\n innerRef: innerRef\n }), external, this.renderModalDialog()), Backdrop));\n }\n return null;\n }\n }]);\n return Modal;\n}(React.Component);\nModal.propTypes = propTypes;\nModal.defaultProps = defaultProps;\nModal.openCount = 0;\nModal.originalBodyOverflow = null;\nexport default Modal;","var _excluded = [\"className\", \"cssModule\", \"children\", \"toggle\", \"tag\", \"wrapTag\", \"closeAriaLabel\", \"close\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Custom close button */\n close: PropTypes.object,\n closeAriaLabel: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Function to be triggered when close button is clicked */\n toggle: PropTypes.func,\n wrapTag: tagPropType\n};\nfunction ModalHeader(props) {\n var closeButton;\n var className = props.className,\n cssModule = props.cssModule,\n children = props.children,\n toggle = props.toggle,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'h5' : _props$tag,\n _props$wrapTag = props.wrapTag,\n WrapTag = _props$wrapTag === void 0 ? 'div' : _props$wrapTag,\n _props$closeAriaLabel = props.closeAriaLabel,\n closeAriaLabel = _props$closeAriaLabel === void 0 ? 'Close' : _props$closeAriaLabel,\n close = props.close,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-header'), cssModule);\n if (!close && toggle) {\n closeButton = /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n onClick: toggle,\n className: mapToCssModules('btn-close', cssModule),\n \"aria-label\": closeAriaLabel\n });\n }\n return /*#__PURE__*/React.createElement(WrapTag, _extends({}, attributes, {\n className: classes\n }), /*#__PURE__*/React.createElement(Tag, {\n className: mapToCssModules('modal-title', cssModule)\n }, children), close || closeButton);\n}\nModalHeader.propTypes = propTypes;\nexport default ModalHeader;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction ModalBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nModalBody.propTypes = propTypes;\nexport default ModalBody;","var _excluded = [\"className\", \"cssModule\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Add custom class */\n className: PropTypes.string,\n /** Change underlying component's CSS base class name */\n cssModule: PropTypes.object,\n /** Set a custom element for this component */\n tag: tagPropType\n};\nfunction ModalFooter(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'modal-footer'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nModalFooter.propTypes = propTypes;\nexport default ModalFooter;","var _excluded = [\"className\", \"cssModule\", \"size\", \"bordered\", \"borderless\", \"striped\", \"dark\", \"hover\", \"responsive\", \"tag\", \"responsiveTag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Adds border to all sides of table */\n bordered: PropTypes.bool,\n /** Removes all borders */\n borderless: PropTypes.bool,\n /** Adds custom class name to component */\n className: PropTypes.string,\n /** */\n cssModule: PropTypes.object,\n /** Makes the table dark */\n dark: PropTypes.bool,\n /** Enables a hover state on the rows within `<tbody>` */\n hover: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.object]),\n /** Responsive tables allow tables to be scrolled horizontally with ease */\n responsive: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n responsiveTag: tagPropType,\n /** Make tables more compact by cutting cell padding in half when setting size as sm. */\n size: PropTypes.string,\n /** Adds zebra-striping to any table row within the `<tbody>` */\n striped: PropTypes.bool,\n /** Add custom tag to the component */\n tag: tagPropType\n};\nfunction Table(props) {\n var className = props.className,\n cssModule = props.cssModule,\n size = props.size,\n bordered = props.bordered,\n borderless = props.borderless,\n striped = props.striped,\n dark = props.dark,\n hover = props.hover,\n responsive = props.responsive,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'table' : _props$tag,\n _props$responsiveTag = props.responsiveTag,\n ResponsiveTag = _props$responsiveTag === void 0 ? 'div' : _props$responsiveTag,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'table', size ? 'table-' + size : false, bordered ? 'table-bordered' : false, borderless ? 'table-borderless' : false, striped ? 'table-striped' : false, dark ? 'table-dark' : false, hover ? 'table-hover' : false), cssModule);\n var table = /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes\n }));\n if (responsive) {\n var responsiveClassName = mapToCssModules(responsive === true ? 'table-responsive' : \"table-responsive-\".concat(responsive), cssModule);\n return /*#__PURE__*/React.createElement(ResponsiveTag, {\n className: responsiveClassName\n }, table);\n }\n return table;\n}\nTable.propTypes = propTypes;\nexport default Table;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"tag\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n tag: tagPropType,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar Form = /*#__PURE__*/function (_Component) {\n _inherits(Form, _Component);\n var _super = _createSuper(Form);\n function Form(props) {\n var _this;\n _classCallCheck(this, Form);\n _this = _super.call(this, props);\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.submit = _this.submit.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(Form, [{\n key: \"getRef\",\n value: function getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n this.ref = ref;\n }\n }, {\n key: \"submit\",\n value: function submit() {\n if (this.ref) {\n this.ref.submit();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n _this$props$tag = _this$props.tag,\n Tag = _this$props$tag === void 0 ? 'form' : _this$props$tag,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutProperties(_this$props, _excluded);\n var classes = mapToCssModules(className, cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes\n }));\n }\n }]);\n return Form;\n}(Component);\nForm.propTypes = propTypes;\nexport default Form;","var _excluded = [\"className\", \"cssModule\", \"row\", \"disabled\", \"check\", \"inline\", \"floating\", \"noMargin\", \"tag\", \"switch\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n row: PropTypes.bool,\n check: PropTypes.bool,\n \"switch\": PropTypes.bool,\n inline: PropTypes.bool,\n floating: PropTypes.bool,\n noMargin: PropTypes.bool,\n disabled: PropTypes.bool,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nfunction FormGroup(props) {\n var className = props.className,\n cssModule = props.cssModule,\n row = props.row,\n disabled = props.disabled,\n check = props.check,\n inline = props.inline,\n floating = props.floating,\n noMargin = props.noMargin,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n switchProp = props[\"switch\"],\n attributes = _objectWithoutProperties(props, _excluded);\n var formCheck = check || switchProp;\n var classes = mapToCssModules(classNames(className, row ? 'row' : false, formCheck ? 'form-check' : false, switchProp ? 'form-switch' : false, formCheck || noMargin ? false : 'mb-3', formCheck && inline ? 'form-check-inline' : false, formCheck && disabled ? 'disabled' : false, floating && 'form-floating'), cssModule);\n if (Tag === 'fieldset') {\n attributes.disabled = disabled;\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n}\nFormGroup.propTypes = propTypes;\nexport default FormGroup;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"className\", \"cssModule\", \"type\", \"bsSize\", \"valid\", \"invalid\", \"tag\", \"addon\", \"plaintext\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/* eslint react/prefer-stateless-function: 0 */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, warnOnce, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n type: PropTypes.string,\n size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n bsSize: PropTypes.string,\n valid: PropTypes.bool,\n invalid: PropTypes.bool,\n tag: tagPropType,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n plaintext: PropTypes.bool,\n addon: PropTypes.bool,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar Input = /*#__PURE__*/function (_React$Component) {\n _inherits(Input, _React$Component);\n var _super = _createSuper(Input);\n function Input(props) {\n var _this;\n _classCallCheck(this, Input);\n _this = _super.call(this, props);\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.focus = _this.focus.bind(_assertThisInitialized(_this));\n return _this;\n }\n _createClass(Input, [{\n key: \"getRef\",\n value: function getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n this.ref = ref;\n }\n }, {\n key: \"focus\",\n value: function focus() {\n if (this.ref) {\n this.ref.focus();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n _this$props$type = _this$props.type,\n type = _this$props$type === void 0 ? 'text' : _this$props$type,\n bsSize = _this$props.bsSize,\n valid = _this$props.valid,\n invalid = _this$props.invalid,\n tag = _this$props.tag,\n addon = _this$props.addon,\n plaintext = _this$props.plaintext,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutProperties(_this$props, _excluded);\n var checkInput = ['switch', 'radio', 'checkbox'].indexOf(type) > -1;\n var isNotaNumber = /\\D/g;\n var textareaInput = type === 'textarea';\n var selectInput = type === 'select';\n var rangeInput = type === 'range';\n var Tag = tag || (selectInput || textareaInput ? type : 'input');\n var formControlClass = 'form-control';\n if (plaintext) {\n formControlClass = \"\".concat(formControlClass, \"-plaintext\");\n Tag = tag || 'input';\n } else if (rangeInput) {\n formControlClass = 'form-range';\n } else if (selectInput) {\n formControlClass = 'form-select';\n } else if (checkInput) {\n if (addon) {\n formControlClass = null;\n } else {\n formControlClass = 'form-check-input';\n }\n }\n if (attributes.size && isNotaNumber.test(attributes.size)) {\n warnOnce('Please use the prop \"bsSize\" instead of the \"size\" to bootstrap\\'s input sizing.');\n bsSize = attributes.size;\n delete attributes.size;\n }\n var classes = mapToCssModules(classNames(className, invalid && 'is-invalid', valid && 'is-valid', bsSize ? selectInput ? \"form-select-\".concat(bsSize) : \"form-control-\".concat(bsSize) : false, formControlClass), cssModule);\n if (Tag === 'input' || tag && typeof tag === 'function') {\n attributes.type = type === 'switch' ? 'checkbox' : type;\n }\n if (attributes.children && !(plaintext || type === 'select' || typeof Tag !== 'string' || Tag === 'select')) {\n warnOnce(\"Input with a type of \\\"\".concat(type, \"\\\" cannot have children. Please use \\\"value\\\"/\\\"defaultValue\\\" instead.\"));\n delete attributes.children;\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes,\n \"aria-invalid\": invalid\n }));\n }\n }]);\n return Input;\n}(React.Component);\nInput.propTypes = propTypes;\nexport default Input;","var _excluded = [\"className\", \"cssModule\", \"hidden\", \"widths\", \"tag\", \"check\", \"size\", \"for\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType, isObject } from './utils';\nvar colWidths = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\nvar stringOrNumberProp = PropTypes.oneOfType([PropTypes.number, PropTypes.string]);\nvar columnProps = PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.number, PropTypes.shape({\n size: stringOrNumberProp,\n order: stringOrNumberProp,\n offset: stringOrNumberProp\n})]);\nvar propTypes = {\n children: PropTypes.node,\n hidden: PropTypes.bool,\n check: PropTypes.bool,\n size: PropTypes.string,\n \"for\": PropTypes.string,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n xs: columnProps,\n sm: columnProps,\n md: columnProps,\n lg: columnProps,\n xl: columnProps,\n xxl: columnProps,\n widths: PropTypes.array\n};\nvar getColumnSizeClass = function getColumnSizeClass(isXs, colWidth, colSize) {\n if (colSize === true || colSize === '') {\n return isXs ? 'col' : \"col-\".concat(colWidth);\n }\n if (colSize === 'auto') {\n return isXs ? 'col-auto' : \"col-\".concat(colWidth, \"-auto\");\n }\n return isXs ? \"col-\".concat(colSize) : \"col-\".concat(colWidth, \"-\").concat(colSize);\n};\nfunction Label(props) {\n var className = props.className,\n cssModule = props.cssModule,\n hidden = props.hidden,\n _props$widths = props.widths,\n widths = _props$widths === void 0 ? colWidths : _props$widths,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'label' : _props$tag,\n check = props.check,\n size = props.size,\n htmlFor = props[\"for\"],\n attributes = _objectWithoutProperties(props, _excluded);\n var colClasses = [];\n widths.forEach(function (colWidth, i) {\n var columnProp = props[colWidth];\n delete attributes[colWidth];\n if (!columnProp && columnProp !== '') {\n return;\n }\n var isXs = !i;\n var colClass;\n if (isObject(columnProp)) {\n var _classNames;\n var colSizeInterfix = isXs ? '-' : \"-\".concat(colWidth, \"-\");\n colClass = getColumnSizeClass(isXs, colWidth, columnProp.size);\n colClasses.push(mapToCssModules(classNames((_classNames = {}, _defineProperty(_classNames, colClass, columnProp.size || columnProp.size === ''), _defineProperty(_classNames, \"order\".concat(colSizeInterfix).concat(columnProp.order), columnProp.order || columnProp.order === 0), _defineProperty(_classNames, \"offset\".concat(colSizeInterfix).concat(columnProp.offset), columnProp.offset || columnProp.offset === 0), _classNames))), cssModule);\n } else {\n colClass = getColumnSizeClass(isXs, colWidth, columnProp);\n colClasses.push(colClass);\n }\n });\n var colFormLabel = size || colClasses.length;\n var formLabel = !(check || colFormLabel);\n var classes = mapToCssModules(classNames(className, hidden ? 'visually-hidden' : false, check ? 'form-check-label' : false, size ? \"col-form-label-\".concat(size) : false, colClasses, colFormLabel ? 'col-form-label' : false, formLabel ? 'form-label' : false), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({\n htmlFor: htmlFor\n }, attributes, {\n className: classes\n }));\n}\nLabel.propTypes = propTypes;\nexport default Label;","var _excluded = [\"className\", \"closeClassName\", \"closeAriaLabel\", \"cssModule\", \"tag\", \"color\", \"isOpen\", \"toggle\", \"children\", \"transition\", \"fade\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nimport Fade from './Fade';\nvar propTypes = {\n /** Pass children so this component can wrap the child elements */\n children: PropTypes.node,\n /** Add custom class */\n className: PropTypes.string,\n /** Add custom class for close button */\n closeClassName: PropTypes.string,\n /** Aria label for close button */\n closeAriaLabel: PropTypes.string,\n /** Change color of alert */\n color: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n /** Toggle fade animation */\n fade: PropTypes.bool,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]),\n /** Control visibility state of Alert */\n isOpen: PropTypes.bool,\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Function to toggle visibility */\n toggle: PropTypes.func,\n /** Props to be passed to `Fade` to modify transition */\n transition: PropTypes.shape(Fade.propTypes)\n};\nfunction Alert(props) {\n var className = props.className,\n closeClassName = props.closeClassName,\n _props$closeAriaLabel = props.closeAriaLabel,\n closeAriaLabel = _props$closeAriaLabel === void 0 ? 'Close' : _props$closeAriaLabel,\n cssModule = props.cssModule,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n _props$color = props.color,\n color = _props$color === void 0 ? 'success' : _props$color,\n _props$isOpen = props.isOpen,\n isOpen = _props$isOpen === void 0 ? true : _props$isOpen,\n toggle = props.toggle,\n children = props.children,\n _props$transition = props.transition,\n transition = _props$transition === void 0 ? _objectSpread(_objectSpread({}, Fade.defaultProps), {}, {\n unmountOnExit: true\n }) : _props$transition,\n _props$fade = props.fade,\n fade = _props$fade === void 0 ? true : _props$fade,\n innerRef = props.innerRef,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, 'alert', \"alert-\".concat(color), {\n 'alert-dismissible': toggle\n }), cssModule);\n var closeClasses = mapToCssModules(classNames('btn-close', closeClassName), cssModule);\n var alertTransition = _objectSpread(_objectSpread(_objectSpread({}, Fade.defaultProps), transition), {}, {\n baseClass: fade ? transition.baseClass : '',\n timeout: fade ? transition.timeout : 0\n });\n return /*#__PURE__*/React.createElement(Fade, _extends({}, attributes, alertTransition, {\n tag: Tag,\n className: classes,\n \"in\": isOpen,\n role: \"alert\",\n innerRef: innerRef\n }), toggle ? /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: closeClasses,\n \"aria-label\": closeAriaLabel,\n onClick: toggle\n }) : null, children);\n}\nAlert.propTypes = propTypes;\nexport default Alert;","var _excluded = [\"className\", \"cssModule\", \"type\", \"size\", \"color\", \"children\", \"tag\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n /** Set a custom element for this component */\n tag: tagPropType,\n /** Change animation of spinner */\n type: PropTypes.oneOf(['border', 'grow']),\n /** Change size of spinner */\n size: PropTypes.oneOf(['sm']),\n /** Change color of spinner */\n color: PropTypes.oneOf(['primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark']),\n /** Add custom class */\n className: PropTypes.string,\n /** Change existing className with a new className */\n cssModule: PropTypes.object,\n /** Pass children so this component can wrap the child elements */\n children: PropTypes.string\n};\nfunction Spinner(props) {\n var className = props.className,\n cssModule = props.cssModule,\n _props$type = props.type,\n type = _props$type === void 0 ? 'border' : _props$type,\n size = props.size,\n color = props.color,\n _props$children = props.children,\n children = _props$children === void 0 ? 'Loading...' : _props$children,\n _props$tag = props.tag,\n Tag = _props$tag === void 0 ? 'div' : _props$tag,\n attributes = _objectWithoutProperties(props, _excluded);\n var classes = mapToCssModules(classNames(className, size ? \"spinner-\".concat(type, \"-\").concat(size) : false, \"spinner-\".concat(type), color ? \"text-\".concat(color) : false), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({\n role: \"status\"\n }, attributes, {\n className: classes\n }), children && /*#__PURE__*/React.createElement(\"span\", {\n className: mapToCssModules('visually-hidden', cssModule)\n }, children));\n}\nSpinner.propTypes = propTypes;\nexport default Spinner;","// All API calls hit the plugin's reverse proxy at\n// /plugins/signalk-backup/api/*. Same origin as the SignalK admin UI,\n// so no CORS dance and we inherit SignalK's auth layer.\nconst API_BASE = '/plugins/signalk-backup/api'\n\nexport interface BackupServerHealth {\n status: string\n uptime?: number\n version?: string\n}\n\nexport interface PluginStatus {\n container: {\n state: string\n image: string\n managed: boolean\n }\n ready: boolean\n /** Container→host path translation. Present only in managed-container\n * mode. Used by the UI to rewrite server-reported paths under\n * containerPath/... into the host equivalent for display. */\n pathMapping?: {\n containerPath: string\n hostPath: string\n }\n}\n\n/** Backup categorisation; common values are manual/hourly/daily/weekly/startup\n * but we accept anything the server sends so a future tier doesn't break the UI. */\nexport type BackupType = string\n\nexport interface BackupMetadata {\n id: string\n createdAt: string\n type: BackupType\n size: number\n description?: string\n checksum?: string\n path?: string\n includesPlugins?: boolean\n includesPluginData?: boolean\n includesHistory?: boolean\n}\n\nexport interface BackupsResponse {\n backups: BackupMetadata[]\n grouped: Record<string, BackupMetadata[]>\n}\n\nexport interface SchedulerStatus {\n enabled: boolean\n lastBackup: string | null\n nextBackups: {\n hourly: string | null\n daily: string | null\n weekly: string | null\n }\n backupCounts: {\n total: number\n hourly: number\n daily: number\n weekly: number\n startup: number\n manual: number\n }\n}\n\nexport type RestoreState =\n | 'idle'\n | 'preparing'\n | 'extracting'\n | 'installing'\n | 'restarting'\n | 'verifying'\n | 'completed'\n | 'failed'\n | 'rolling_back'\n | 'rolled_back'\n\nexport interface RestoreStatus {\n state: RestoreState\n progress: number\n statusMessage: string\n error?: string\n}\n\n/** One directory entry inside a snapshot, as returned by /backups/:id/tree. */\nexport interface BackupTreeEntry {\n name: string\n size: number\n /** ISO-8601 or kopia's locale-formatted timestamp; treat as opaque text. */\n mtime: string\n isDir: boolean\n /** Internal kopia object ID. Forwarded back to the server for downloads. */\n objectId: string\n}\n\nexport type PartialRestoreState =\n | 'idle'\n | 'preparing'\n | 'safety_snapshotting'\n | 'extracting'\n | 'verifying'\n | 'completed'\n | 'failed'\n | 'rolling_back'\n | 'rolled_back'\n\nexport interface PartialRestoreStatus {\n state: PartialRestoreState\n progress: number\n statusMessage: string\n error?: string\n backupId?: string\n sourcePath?: string\n targetPath?: string\n}\n\n/** Host-side restore status — distinct state names from the\n * server-driven flow because there's no kopia state machine; the\n * plugin simply streams + writes. Surfaced by the same banner. */\nexport type HostRestoreState =\n | 'idle'\n | 'preparing'\n | 'streaming'\n | 'extracting'\n | 'completed'\n | 'failed'\n | 'rolling_back'\n | 'rolled_back'\n\nexport interface HostRestoreStatus {\n state: HostRestoreState\n progress: number\n statusMessage: string\n error?: string\n backupId?: string\n sourcePath?: string\n targetPath?: string\n}\n\nexport type PartialRestoreTargetMode = 'original' | 'custom'\n\nexport interface PartialRestoreInput {\n sourcePath: string\n targetMode: PartialRestoreTargetMode\n /** Required when targetMode is \"custom\". Must resolve under signalkDataPath. */\n customPath?: string\n /** Resubmit with confirmOverwrite=true after a 409 to overwrite an existing entry. */\n confirmOverwrite?: boolean\n}\n\n/** Body returned with a 409 TARGET_EXISTS so the UI can show the user\n * what they'd overwrite before resubmitting with confirmOverwrite. */\nexport interface PartialRestoreConflict {\n targetPath: string\n mtime: string | null\n size: number | null\n}\n\n/** One file in the live staging tree (the plugin's own\n * database-exports/<sourcePluginId>/...). */\nexport interface StagingFileEntry {\n /** Path relative to the staging root, forward-slash separated. */\n path: string\n size: number\n /** ISO-8601 mtime. */\n mtime: string\n}\n\nexport type CloudSyncMode = 'manual' | 'after_backup' | 'scheduled'\nexport type CloudSyncFrequency = 'daily' | 'weekly'\n\n/**\n * Cloud sync provider identifier.\n *\n * - 'gdrive': Google Drive via rclone (OAuth)\n * - 'local': a host path (USB drive, NFS mount, anything mounted under\n * /media or /mnt). No rclone — kopia writes to the path directly.\n * - 'smb': SMB/CIFS share (NAS, Synology, TrueNAS, Windows shares,\n * generic Samba) via rclone's smb backend.\n */\nexport type CloudSyncProvider = 'gdrive' | 'local' | 'smb'\n\nexport interface SmbStatus {\n /** True when SMB credentials exist in rclone.conf. */\n connected: boolean\n /** Always equals connected for SMB (no separate \"configured\" state). */\n configured: boolean\n /** Active share host. */\n host?: string\n share?: string\n user?: string\n /** Convenience label, \"user@host/share\". */\n email?: string\n}\n\nexport interface SmbDiscoveredHost {\n /** mDNS name (often the device's friendly name). */\n name: string\n /** First IP address from the responder (IPv4 preferred). */\n address: string\n}\n\nexport interface SmbConnectInput {\n host: string\n share: string\n user: string\n password: string\n domain?: string\n}\n\nexport interface LocalCandidate {\n /** Container-side path — what gets persisted via /local/configure. */\n containerPath: string\n /** Host-side path for display in the UI. */\n hostPath: string\n /** Free bytes on the destination's filesystem; null when unknown. */\n freeBytes: number | null\n /** Total bytes on the destination's filesystem; null when unknown. */\n totalBytes: number | null\n /**\n * True when the backup engine can write to this directory. Optional\n * for backwards compatibility with engine versions that predate the\n * field (treat missing as \"unknown — let the user try and see\").\n */\n writable?: boolean\n}\n\nexport interface LocalStatus {\n /** True when a local destination is configured AND reachable + writable. */\n connected: boolean\n /** Always true for local (no auth flow). */\n configured: boolean\n containerPath?: string\n hostPath?: string\n freeBytes?: number\n totalBytes?: number\n /** Why connected is false, if it isn't. */\n error?: string\n}\n\nexport interface SyncProgress {\n /** Total size of the local kopia repo in bytes (known up front from getRepoSize). */\n totalBytes: number\n /** Blobs processed so far (parsed from kopia stderr). */\n processedBlobs?: number\n /** Total blobs to sync (parsed from kopia stderr). */\n totalBlobs?: number\n /** Bytes processed so far (parsed from kopia stderr). */\n processedBytes?: number\n}\n\nexport interface CloudStatus {\n /** Active cloud provider. */\n provider: CloudSyncProvider\n connected: boolean\n configured: boolean\n syncing: boolean\n syncMode: CloudSyncMode | null\n syncFrequency: CloudSyncFrequency | null\n lastSync: string | null\n lastSyncError: string | null\n internetAvailable: boolean | null\n /** Human-readable label for the connected destination (e.g. gdrive email). */\n email?: string\n /** Progress detail while a sync is in flight. Undefined when no sync is active. */\n syncProgress?: SyncProgress\n}\n\nexport type GDriveAuthState = 'idle' | 'pending' | 'completed' | 'failed'\n\nexport interface GDriveAuthInfo {\n state: GDriveAuthState\n authUrl: string | null\n error: string | null\n}\n\nexport interface CloudConfigUpdate {\n syncMode?: CloudSyncMode\n syncFrequency?: CloudSyncFrequency\n}\n\nexport interface DataDirEntry {\n name: string\n size: number\n excluded: boolean\n type?: 'dir' | 'history'\n}\n\nexport interface RepositoryStats {\n /** Actual bytes on disk for the local kopia repository. */\n totalSize: number\n /** Sum of snapshot logical (pre-dedup) sizes. */\n originalSize: number\n snapshotCount: number\n /** originalSize - totalSize, clamped at 0. */\n dedupSavings: number\n /** Reserved; server currently returns 0. */\n compressionRatio: number\n status: string\n}\n\nexport interface PluginDataDirEntry {\n name: string\n size: number\n excluded: boolean\n /** If true, the user cannot un-exclude this dir (DB plugins, our own state). */\n lockedExcluded?: boolean\n /** Human-readable reason the dir is locked-excluded. */\n lockReason?: string\n}\n\nexport interface RetentionConfig {\n /** Number of hourly backups to keep. */\n hourly: number\n /** Number of daily backups to keep. */\n daily: number\n /** Number of weekly backups to keep. */\n weekly: number\n /** Number of startup-time backups to keep. */\n startup: number\n}\n\nexport interface DbExportConfig {\n /** Whether the QuestDB exporter runs on the interval. */\n questdb: boolean\n /** Whether the Grafana exporter runs on the interval. */\n grafana: boolean\n /** Whether the SignalK Database exporter runs on the interval. */\n signalkDatabase: boolean\n /** Interval between exports in minutes (5 - 1440). */\n intervalMinutes: number\n}\n\nexport interface PasswordStatus {\n hasCustomPassword: boolean\n /** The current kopia password. Exposed to the user so it can be copied\n * down before a rotation — losing the custom password makes existing\n * backups unreadable. UI defaults to masked; users opt in to reveal. */\n password?: string\n}\n\ninterface ApiEnvelope<T> {\n success?: boolean\n data?: T\n error?: { code?: string; message?: string }\n}\n\n/** Thrown by api.restorePartial when the target already exists and the\n * caller didn't pass confirmOverwrite. Carries the existing entry's\n * mtime+size so the UI can show a confirmation diff and resubmit. */\nexport class PartialRestoreConflictError extends Error {\n constructor(\n message: string,\n public readonly conflict: PartialRestoreConflict\n ) {\n super(message)\n this.name = 'PartialRestoreConflictError'\n }\n}\n\n// Lets callers branch on the structured server error (e.g. ENTRY_NOT_FOUND\n// for the backup browser) instead of regexing the message string.\nexport class ApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly code: string | undefined\n ) {\n super(message)\n this.name = 'ApiError'\n }\n}\n\nasync function request<T>(path: string, init?: RequestInit): Promise<T> {\n const res = await fetch(API_BASE + path, init)\n const body = (await res.json().catch(() => null)) as unknown\n // Backup-server wraps responses in { success, data | error } on both\n // success and failure. Parse the envelope first so non-2xx responses\n // surface the structured `error.code` to callers — without this, an\n // !res.ok branch threw on the raw text and ENTRY_NOT_FOUND was buried\n // in a stringified body that the UI rendered verbatim.\n if (body !== null && typeof body === 'object' && 'success' in body) {\n const env = body as ApiEnvelope<T>\n if (env.success === false) {\n const code = env.error?.code\n const message = env.error?.message ?? 'unknown server error'\n throw new ApiError(message, res.status, code)\n }\n if (env.success === true && 'data' in body) {\n return env.data as T\n }\n }\n if (!res.ok) {\n // Non-envelope error (HTML 404 from upstream, network blip, etc.) —\n // fall back to a path+status message so the UI still gets something.\n throw new ApiError(`HTTP ${res.status}`, res.status, undefined)\n }\n return body as T\n}\n\nexport const api = {\n health: () => request<BackupServerHealth>('/health'),\n\n listBackups: () => request<BackupsResponse>('/backups'),\n\n scheduler: () => request<SchedulerStatus>('/backups/scheduler'),\n\n repository: () => request<RepositoryStats>('/backups/repository'),\n\n createBackup: (description?: string) =>\n request<BackupMetadata>('/backups', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ description })\n }),\n\n deleteBackup: (id: string) =>\n request<{ deleted: string }>(`/backups/${encodeURIComponent(id)}`, {\n method: 'DELETE'\n }),\n\n // Multipart upload — fetch picks the boundary; do NOT set Content-Type\n // ourselves or the browser will not append the boundary value.\n uploadBackup: (file: File, description?: string) => {\n const form = new FormData()\n form.append('file', file)\n if (description) form.append('description', description)\n form.append('restoreImmediately', 'false')\n return request<{ backup: BackupMetadata }>('/backups/upload', {\n method: 'POST',\n body: form\n })\n },\n\n startRestore: (id: string) =>\n request<{ started: boolean }>(`/backups/${encodeURIComponent(id)}/restore`, {\n method: 'POST'\n }),\n\n restoreStatus: () => request<RestoreStatus>('/backups/restore/status'),\n\n resetRestoreState: () =>\n request<{ reset: boolean }>('/backups/restore/reset', { method: 'POST' }),\n\n // Direct download URL — caller uses as <a href> or window.open(). No\n // unwrap because it's a binary stream, not JSON.\n downloadUrl: (id: string): string => `${API_BASE}/backups/${encodeURIComponent(id)}/download`,\n\n // Partial restore / tree-browser passthrough (signalk-backup#30).\n // Proxied through the plugin to the backup-server's identical endpoints.\n\n listBackupTree: (id: string, path: string) =>\n request<{ path: string; entries: BackupTreeEntry[] }>(\n `/backups/${encodeURIComponent(id)}/tree?path=${encodeURIComponent(path)}`\n ),\n\n /** URL the browser can open / fetch to download one sub-path (raw bytes\n * for files, ZIP for directories). Returned as a URL because it's a\n * binary stream; pass via window.open() or an <a href>. */\n downloadSubtreeUrl: (id: string, path: string): string =>\n `${API_BASE}/backups/${encodeURIComponent(id)}/download-subtree?path=${encodeURIComponent(path)}`,\n\n /** Start a partial restore. Throws PartialRestoreConflictError when\n * the target already exists and confirmOverwrite wasn't set — the\n * UI should surface the conflict and resubmit with confirmOverwrite. */\n restorePartial: async (id: string, input: PartialRestoreInput): Promise<{ started: boolean }> => {\n const url = `${API_BASE}/backups/${encodeURIComponent(id)}/restore-partial`\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input)\n })\n if (res.status === 409) {\n const body = (await res.json().catch(() => null)) as ApiEnvelope<{\n conflict?: PartialRestoreConflict\n }> | null\n const conflict = body?.data?.conflict\n const code = body?.error?.code\n if (code === 'TARGET_EXISTS' && conflict) {\n throw new PartialRestoreConflictError(\n body.error?.message ?? 'Target already exists',\n conflict\n )\n }\n // Other 409s (BUSY, RESTORE_NEEDS_FULL, CONFLICT from path-safety) —\n // surface as a plain Error so the existing handler shows the message.\n throw new Error(\n `restore-partial → 409${code ? ` [${code}]` : ''}: ${body?.error?.message ?? 'conflict'}`\n )\n }\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`restore-partial → ${res.status}: ${text.slice(0, 200)}`)\n }\n const body = (await res.json()) as ApiEnvelope<{ started: boolean }>\n if (body.success === false) {\n throw new Error(`restore-partial: ${body.error?.message ?? 'unknown error'}`)\n }\n return body.data ?? { started: true }\n },\n\n restorePartialStatus: () => request<PartialRestoreStatus>('/backups/restore-partial/status'),\n\n resetRestorePartialState: () =>\n request<{ message: string }>('/backups/restore-partial/reset', { method: 'POST' }),\n\n /** Host-side custom-path restore — bypasses the backup-server\n * container so the user can land restored files anywhere the SignalK\n * process can write (e.g. /tmp, /media/usb/...). The plugin streams\n * from the server's /download-subtree and writes locally. Same 409\n * conflict semantics as restorePartial. */\n restorePartialHost: async (input: {\n backupId: string\n sourcePath: string\n customPath: string\n isDir: boolean\n confirmOverwrite?: boolean\n }): Promise<{ started: boolean }> => {\n const res = await fetch(`${API_BASE}/restore-partial-host`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input)\n })\n if (res.status === 409) {\n const body = (await res.json().catch(() => null)) as ApiEnvelope<{\n conflict?: PartialRestoreConflict\n }> | null\n const conflict = body?.data?.conflict\n const code = body?.error?.code\n if (code === 'TARGET_EXISTS' && conflict) {\n throw new PartialRestoreConflictError(\n body.error?.message ?? 'Target already exists',\n conflict\n )\n }\n throw new Error(\n `restore-partial-host → 409${code ? ` [${code}]` : ''}: ${body?.error?.message ?? 'conflict'}`\n )\n }\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`restore-partial-host → ${res.status}: ${text.slice(0, 200)}`)\n }\n const body = (await res.json()) as ApiEnvelope<{ started: boolean }>\n if (body.success === false) {\n throw new Error(`restore-partial-host: ${body.error?.message ?? 'unknown error'}`)\n }\n return body.data ?? { started: true }\n },\n\n restorePartialHostStatus: () => request<HostRestoreStatus>('/restore-partial-host/status'),\n\n resetRestorePartialHostState: () =>\n request<{ message: string }>('/restore-partial-host/reset', { method: 'POST' }),\n\n // Live DB-export staging (plugin-side, not proxied). Lists files the\n // plugin wrote during its scheduled tick to\n // <getDataDirPath()>/database-exports/<sourcePluginId>/...\n listStaging: () =>\n request<{ stagingRoot: string; entries: StagingFileEntry[] }>('/db-export/staging'),\n\n /** Direct download URL for one live-staging file (URL-encoded relative\n * path). Returned as a URL because it's a binary stream. */\n stagingDownloadUrl: (file: string): string =>\n `${API_BASE}/db-export/staging/download?file=${encodeURIComponent(file)}`,\n\n // Cloud sync — Google Drive auth + sync. Auth flow: connectGDrive\n // returns a Google OAuth URL the user opens; the browser is redirected\n // back to rclone's local listener (port 53682) which the plugin\n // exposes back to the user. When that path doesn't work (browser on a\n // different host than rclone), the user pastes the callback URL from\n // their browser into auth-callback to forward it manually.\n // Older backup-server images (pre-multi-provider refactor) don't include\n // `provider` in the response. Default it to `gdrive` so the type stays\n // honest at the API boundary and downstream code can rely on a defined\n // value. Drop the default once the floor backup-server version ships\n // with `provider`.\n cloudStatus: async (): Promise<CloudStatus> => {\n const raw = await request<Partial<CloudStatus> & Omit<CloudStatus, 'provider'>>('/cloud/status')\n return { ...raw, provider: raw.provider ?? 'gdrive' }\n },\n gdriveStatus: () =>\n request<{ connected: boolean; configured: boolean; email?: string }>('/cloud/gdrive/status'),\n gdriveAuthState: () => request<GDriveAuthInfo>('/cloud/gdrive/auth-state'),\n gdriveConnect: () => request<{ authUrl: string }>('/cloud/gdrive/connect', { method: 'POST' }),\n gdriveCancel: () => request<{ cancelled: boolean }>('/cloud/gdrive/cancel', { method: 'POST' }),\n gdriveAuthCallback: (url: string) =>\n request<{ accepted: boolean }>('/cloud/gdrive/auth-callback', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ url })\n }),\n gdriveDisconnect: () =>\n request<{ disconnected: boolean }>('/cloud/gdrive/disconnect', { method: 'POST' }),\n\n // Local-filesystem destination (USB drive / mounted folder). No auth flow,\n // just a path. Discovery walks /host-media + /host-mnt baseline mounts.\n localStatus: () => request<LocalStatus>('/cloud/local/status'),\n localDiscover: () => request<{ candidates: LocalCandidate[] }>('/cloud/local/discover'),\n localConfigure: (containerPath: string, hostPath?: string) =>\n request<CloudStatus>('/cloud/local/configure', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ containerPath, hostPath })\n }),\n localDisconnect: () =>\n request<{ disconnected: boolean }>('/cloud/local/disconnect', { method: 'POST' }),\n\n // SMB share destination. Discover runs on the plugin (SignalK process)\n // — multicast doesn't have to traverse the backup-server container's\n // network. The other three are proxied through to backup-server.\n smbStatus: () => request<SmbStatus>('/cloud/smb/status'),\n smbDiscover: () => request<{ hosts: SmbDiscoveredHost[] }>('/cloud/smb/discover'),\n smbConnect: (input: SmbConnectInput) =>\n request<{ connected: boolean }>('/cloud/smb/connect', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(input)\n }),\n smbDisconnect: () =>\n request<{ disconnected: boolean }>('/cloud/smb/disconnect', { method: 'POST' }),\n\n // Database export (plugin-side, not proxied to backup-server). The\n // plugin runs the export interval timer; the backup-server just\n // snapshots the resulting Parquet files when the next backup runs.\n dbExportConfig: () => request<DbExportConfig>('/db-export/config'),\n dbExportConfigSet: (next: Partial<DbExportConfig>) =>\n request<DbExportConfig>('/db-export/config', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(next)\n }),\n\n cloudSync: () => request<{ started: boolean }>('/cloud/sync', { method: 'POST' }),\n cloudSyncCancel: () => request<{ cancelled: boolean }>('/cloud/sync/cancel', { method: 'POST' }),\n cloudConfig: (config: CloudConfigUpdate) =>\n request<CloudStatus>('/cloud/config', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(config)\n }),\n\n // Scheduler control — start/stop the backup-server's internal scheduler.\n // Returns just { enabled }; the richer SchedulerStatus shape comes from\n // GET /backups/scheduler (re-fetched after a toggle).\n schedulerStart: () =>\n request<{ enabled: boolean }>('/backups/scheduler/start', { method: 'POST' }),\n schedulerStop: () => request<{ enabled: boolean }>('/backups/scheduler/stop', { method: 'POST' }),\n\n // Retention — how many backups of each tier kopia keeps. Manual\n // backups are absent on purpose (never auto-pruned).\n retention: () => request<RetentionConfig>('/backups/retention'),\n setRetention: (next: Partial<RetentionConfig>) =>\n request<RetentionConfig>('/backups/retention', {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(next)\n }),\n\n // Exclusions — the list of glob patterns kopia skips during backup.\n // The patterns set here is the user-configurable layer; the server\n // adds always-excluded patterns (kopia repo, etc) and live-DB\n // defaults on top.\n exclusions: () => request<{ exclusions: string[] }>('/backups/exclusions'),\n setExclusions: (exclusions: string[]) =>\n request<{ exclusions: string[] }>('/backups/exclusions', {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ exclusions })\n }),\n\n // Read-only directory listings the Settings UI uses to drive the\n // exclusions checklist. Both list every candidate dir with its current\n // excluded state derived from the patterns above + the always/locked\n // server-side rules.\n dataDirs: () => request<DataDirEntry[]>('/backups/data-dirs'),\n pluginDataDirs: () => request<PluginDataDirEntry[]>('/backups/plugin-data-dirs'),\n\n // Encryption password — kopia's repo password. Default is a known\n // string; once a user sets a custom one, hasCustomPassword goes true.\n // Server returns both the boolean and the actual password; the UI\n // shows it behind a reveal toggle so the user can copy it before a\n // rotation (losing the custom password makes existing backups\n // unreadable).\n passwordStatus: () => request<PasswordStatus>('/backups/password'),\n setPassword: (password: string) =>\n request<{ updated: boolean }>('/backups/password', {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ password, confirmPassword: password })\n }),\n resetPassword: () => request<{ reset: boolean }>('/backups/password', { method: 'DELETE' }),\n\n // Plugin's own /status (NOT proxied — no /api prefix).\n pluginStatus: async (): Promise<PluginStatus> => {\n const res = await fetch('/plugins/signalk-backup/status')\n if (!res.ok) throw new Error(`/status → ${res.status}`)\n return res.json() as Promise<PluginStatus>\n }\n}\n\nexport function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n const units = ['KB', 'MB', 'GB', 'TB']\n let size = bytes / 1024\n let i = 0\n while (size >= 1024 && i < units.length - 1) {\n size /= 1024\n i++\n }\n return `${size.toFixed(1)} ${units[i]}`\n}\n\n/** Rewrite a server-reported absolute path so it's recognisable on the\n * host. In managed-container mode the backup-server sees the host's\n * SignalK config root mounted at containerPath; any path it reports\n * starting with that prefix actually lives at hostPath/... on the\n * host. Returns the path unchanged when no mapping is provided or\n * when the path is outside the mapped prefix. Trailing slashes on\n * either input are normalised away first so /data/ vs /data don't\n * produce divergent results. */\nexport function toHostPath(\n serverPath: string | undefined,\n mapping: PluginStatus['pathMapping'] | undefined\n): string | undefined {\n if (!serverPath || !mapping) return serverPath\n const stripTrailingSlash = (p: string): string => p.replace(/\\/+$/, '') || '/'\n const container = stripTrailingSlash(mapping.containerPath)\n const host = stripTrailingSlash(mapping.hostPath)\n const candidate = stripTrailingSlash(serverPath)\n if (candidate === container) return host\n const prefix = container === '/' ? '/' : container + '/'\n if (serverPath.startsWith(prefix)) {\n return host + '/' + serverPath.slice(prefix.length)\n }\n return serverPath\n}\n\nexport function formatDate(dateStr: string | null | undefined): string {\n if (!dateStr) return 'Never'\n const d = new Date(dateStr)\n if (isNaN(d.getTime())) return dateStr\n // Compact local format suitable for dense tables.\n return d.toLocaleString(undefined, {\n year: 'numeric',\n month: 'short',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n })\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\nexport interface UseApiState<T> {\n data: T | null\n loading: boolean\n error: string | null\n refresh: () => void\n}\n\n// Fetch + auto-refresh wrapper for a single API endpoint. Cancels in-\n// flight requests on unmount so React doesn't warn about state updates\n// after unmount, and keeps the previous data visible across refreshes\n// (no flicker between \"loading\" and \"loaded again\").\nexport function useApi<T>(\n fetcher: () => Promise<T>,\n options: { intervalMs?: number } = {}\n): UseApiState<T> {\n const { intervalMs } = options\n const [data, setData] = useState<T | null>(null)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n // Stable ref to the latest fetcher so the interval doesn't reset\n // every render (we'd otherwise tear down + rebuild the timer on each\n // parent rerender).\n const fetcherRef = useRef(fetcher)\n fetcherRef.current = fetcher\n\n const tick = useCallback(async (cancelled: { current: boolean }) => {\n try {\n const result = await fetcherRef.current()\n if (cancelled.current) return\n setData(result)\n setError(null)\n } catch (err) {\n if (cancelled.current) return\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n if (!cancelled.current) setLoading(false)\n }\n }, [])\n\n // Bumping this counter triggers an immediate refetch from the effect.\n const [refreshCounter, setRefreshCounter] = useState(0)\n const refresh = useCallback(() => {\n setRefreshCounter((c) => c + 1)\n }, [])\n\n useEffect(() => {\n const cancelled = { current: false }\n setLoading(true)\n void tick(cancelled)\n let timer: ReturnType<typeof setInterval> | undefined\n if (intervalMs && intervalMs > 0) {\n timer = setInterval(() => {\n void tick(cancelled)\n }, intervalMs)\n }\n return () => {\n cancelled.current = true\n if (timer) clearInterval(timer)\n }\n }, [intervalMs, tick, refreshCounter])\n\n return { data, loading, error, refresh }\n}\n","import { Alert, Badge, Button, Card, CardBody, CardHeader, Col, Row, Spinner } from 'reactstrap'\nimport {\n api,\n formatBytes,\n formatDate,\n type PluginStatus,\n type RepositoryStats,\n type SchedulerStatus\n} from '../api'\nimport { useApi } from '../useApi'\n\nfunction StatusPill({ status }: { status: PluginStatus | null }) {\n if (!status) return <Badge color=\"secondary\">Unknown</Badge>\n if (!status.ready) {\n return <Badge color=\"warning\">Not ready</Badge>\n }\n return <Badge color=\"success\">Ready</Badge>\n}\n\nfunction RepoStorage({ stats }: { stats: RepositoryStats }) {\n const ratio = stats.totalSize > 0 ? stats.originalSize / stats.totalSize : 0\n return (\n <Row className=\"g-2\">\n <Col xs={6}>\n <small className=\"text-muted d-block\">On disk</small>\n <div>{formatBytes(stats.totalSize)}</div>\n </Col>\n <Col xs={6}>\n <small className=\"text-muted d-block\">Logical</small>\n <div>{formatBytes(stats.originalSize)}</div>\n </Col>\n <Col xs={12} className=\"mt-2\">\n <small className=\"text-muted d-block\">\n {ratio >= 1.1\n ? `${ratio.toFixed(1)}× dedup (${formatBytes(stats.dedupSavings)} saved)`\n : 'No significant dedup yet'}\n </small>\n </Col>\n </Row>\n )\n}\n\nfunction SchedulerCounts({ scheduler }: { scheduler: SchedulerStatus }) {\n return (\n <Row className=\"g-2 mt-2\">\n <Col xs={3}>\n <small className=\"text-muted d-block\">Hourly</small>\n <div>{scheduler.backupCounts.hourly}</div>\n </Col>\n <Col xs={3}>\n <small className=\"text-muted d-block\">Daily</small>\n <div>{scheduler.backupCounts.daily}</div>\n </Col>\n <Col xs={3}>\n <small className=\"text-muted d-block\">Weekly</small>\n <div>{scheduler.backupCounts.weekly}</div>\n </Col>\n <Col xs={3}>\n <small className=\"text-muted d-block\">Manual</small>\n <div>{scheduler.backupCounts.manual}</div>\n </Col>\n </Row>\n )\n}\n\nexport function Dashboard() {\n const status = useApi(() => api.pluginStatus(), { intervalMs: 5000 })\n const scheduler = useApi(() => api.scheduler(), { intervalMs: 15000 })\n const backups = useApi(() => api.listBackups(), { intervalMs: 30000 })\n const repo = useApi(() => api.repository(), { intervalMs: 60000 })\n\n const refreshAll = (): void => {\n status.refresh()\n scheduler.refresh()\n backups.refresh()\n repo.refresh()\n }\n\n return (\n <>\n <div className=\"d-flex justify-content-between align-items-center mb-3\">\n <h2 className=\"mb-0\">Dashboard</h2>\n <Button\n color=\"secondary\"\n outline\n size=\"sm\"\n onClick={refreshAll}\n disabled={status.loading || scheduler.loading || backups.loading || repo.loading}\n >\n Refresh\n </Button>\n </div>\n\n <Row>\n <Col xs={12} md={6}>\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Plugin status</strong>\n </CardHeader>\n <CardBody>\n {status.loading && !status.data ? (\n <Spinner size=\"sm\" />\n ) : status.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {status.error}\n </Alert>\n ) : (\n <>\n <div className=\"mb-2\">\n <StatusPill status={status.data} />\n </div>\n {status.data && (\n <dl className=\"row mb-0\">\n <dt className=\"col-sm-4\">Image</dt>\n <dd className=\"col-sm-8 text-truncate\">\n <code>{status.data.container.image}</code>\n </dd>\n <dt className=\"col-sm-4\">Container</dt>\n <dd className=\"col-sm-8\">\n {status.data.container.state}{' '}\n {status.data.container.managed && (\n <small className=\"text-muted\">(managed)</small>\n )}\n </dd>\n </dl>\n )}\n </>\n )}\n </CardBody>\n </Card>\n </Col>\n\n <Col xs={12} md={6}>\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Scheduler</strong>\n </CardHeader>\n <CardBody>\n {scheduler.loading && !scheduler.data ? (\n <Spinner size=\"sm\" />\n ) : scheduler.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {scheduler.error}\n </Alert>\n ) : scheduler.data ? (\n <>\n <div className=\"mb-2\">\n <Badge color={scheduler.data.enabled ? 'success' : 'secondary'}>\n {scheduler.data.enabled ? 'Running' : 'Stopped'}\n </Badge>\n </div>\n <Row className=\"g-2\">\n <Col xs={6}>\n <small className=\"text-muted d-block\">Last backup</small>\n <div>{formatDate(scheduler.data.lastBackup)}</div>\n </Col>\n <Col xs={6}>\n <small className=\"text-muted d-block\">Total snapshots</small>\n <div>{scheduler.data.backupCounts.total}</div>\n </Col>\n </Row>\n <SchedulerCounts scheduler={scheduler.data} />\n </>\n ) : null}\n </CardBody>\n </Card>\n </Col>\n\n <Col xs={12} md={6}>\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Local repository</strong>\n </CardHeader>\n <CardBody>\n {repo.loading && !repo.data ? (\n <Spinner size=\"sm\" />\n ) : repo.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {repo.error}\n </Alert>\n ) : repo.data ? (\n <RepoStorage stats={repo.data} />\n ) : null}\n </CardBody>\n </Card>\n </Col>\n </Row>\n\n <Card>\n <CardHeader>\n <strong>Recent backups</strong>\n </CardHeader>\n <CardBody>\n {backups.loading && !backups.data ? (\n <Spinner size=\"sm\" />\n ) : backups.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {backups.error}\n </Alert>\n ) : backups.data && backups.data.backups.length > 0 ? (\n <ul className=\"list-unstyled mb-0\">\n {backups.data.backups.slice(0, 5).map((b) => (\n <li key={b.id} className=\"d-flex justify-content-between border-bottom py-2\">\n <span>\n <Badge color=\"light\" className=\"text-dark me-2\">\n {b.type}\n </Badge>\n {formatDate(b.createdAt)}\n </span>\n <code className=\"text-muted small\">{b.id.slice(0, 12)}</code>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"text-muted mb-0\">No backups yet.</p>\n )}\n </CardBody>\n </Card>\n </>\n )\n}\n","import { useState } from 'react'\nimport {\n Alert,\n Button,\n FormGroup,\n Input,\n Label,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n Spinner\n} from 'reactstrap'\nimport {\n api,\n formatBytes,\n formatDate,\n PartialRestoreConflictError,\n toHostPath,\n type BackupMetadata,\n type BackupTreeEntry,\n type PartialRestoreConflict,\n type PartialRestoreInput,\n type PartialRestoreTargetMode,\n type PluginStatus\n} from '../api'\n\ninterface Props {\n backup: BackupMetadata\n sourceEntry: BackupTreeEntry\n /** Path inside the snapshot, relative to root. */\n sourcePath: string\n /** Container→host path mapping; passed through from the parent so\n * conflict-diff targets display as user-meaningful host paths. */\n pathMapping?: PluginStatus['pathMapping']\n onClose: () => void\n /** Called after the server accepts the request (HTTP 202). */\n onSubmitted: () => void\n}\n\nexport function PartialRestoreModal({\n backup,\n sourceEntry,\n sourcePath,\n pathMapping,\n onClose,\n onSubmitted\n}: Props) {\n const [mode, setMode] = useState<PartialRestoreTargetMode>('original')\n const [customPath, setCustomPath] = useState('')\n const [submitting, setSubmitting] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [conflict, setConflict] = useState<PartialRestoreConflict | null>(null)\n\n const buildInput = (confirmOverwrite: boolean): PartialRestoreInput => ({\n sourcePath,\n targetMode: mode,\n ...(mode === 'custom' ? { customPath: customPath.trim() } : {}),\n confirmOverwrite\n })\n\n const submit = async (confirmOverwrite: boolean): Promise<void> => {\n setSubmitting(true)\n setError(null)\n try {\n // Custom-mode goes through the plugin's host-write route so the\n // restore can land anywhere the SignalK process can write,\n // including paths outside the container's view (/tmp, /media/*).\n // Original-mode stays on the container path because it\n // overwrites the live SignalK tree.\n if (mode === 'custom') {\n await api.restorePartialHost({\n backupId: backup.id,\n sourcePath,\n customPath: customPath.trim(),\n isDir: sourceEntry.isDir,\n confirmOverwrite\n })\n } else {\n await api.restorePartial(backup.id, buildInput(confirmOverwrite))\n }\n onSubmitted()\n } catch (err) {\n if (err instanceof PartialRestoreConflictError) {\n setConflict(err.conflict)\n } else {\n setError(err instanceof Error ? err.message : String(err))\n }\n } finally {\n setSubmitting(false)\n }\n }\n\n const disableSubmit = submitting || (mode === 'custom' && customPath.trim().length === 0)\n\n return (\n <Modal isOpen toggle={submitting ? undefined : onClose} size=\"md\" backdrop=\"static\">\n <ModalHeader toggle={submitting ? undefined : onClose}>\n Restore {sourceEntry.isDir ? 'directory' : 'file'}\n </ModalHeader>\n <ModalBody>\n <div className=\"mb-3 small text-muted\">\n Source:{' '}\n <code>\n {sourcePath}\n {sourceEntry.isDir ? '/' : ''}\n </code>{' '}\n ({formatBytes(sourceEntry.size)})\n </div>\n\n <FormGroup tag=\"fieldset\" disabled={submitting}>\n <legend className=\"h6\">Restore target</legend>\n <FormGroup check>\n <Label check>\n <Input\n type=\"radio\"\n name=\"partial-restore-mode\"\n checked={mode === 'original'}\n onChange={() => {\n setMode('original')\n setConflict(null)\n }}\n />{' '}\n Original location (under SignalK config root)\n </Label>\n </FormGroup>\n <FormGroup check>\n <Label check>\n <Input\n type=\"radio\"\n name=\"partial-restore-mode\"\n checked={mode === 'custom'}\n onChange={() => {\n setMode('custom')\n setConflict(null)\n }}\n />{' '}\n Custom path (anywhere the SignalK user can write)\n </Label>\n </FormGroup>\n {mode === 'custom' && (\n <FormGroup className=\"mt-2\">\n <Label for=\"partial-restore-custom-path\">Custom path</Label>\n <Input\n id=\"partial-restore-custom-path\"\n value={customPath}\n onChange={(e) => {\n setCustomPath(e.target.value)\n setConflict(null)\n }}\n placeholder=\"e.g. /tmp/restored or /media/usb/backups/\"\n />\n <small className=\"text-muted\">\n Relative or absolute. The plugin writes locally under the SignalK process's\n permissions, so anywhere your user can write works — including /tmp, /media/usb/…,\n or under your home directory. Add a trailing slash to land inside as a directory.\n </small>\n </FormGroup>\n )}\n </FormGroup>\n\n {conflict && (\n <Alert color=\"warning\" className=\"mt-3 mb-0\">\n <div className=\"fw-semibold\">Target already exists</div>\n <div className=\"small mb-2\">\n <code>{toHostPath(conflict.targetPath, pathMapping)}</code>\n </div>\n <div className=\"small\">\n <div>\n Existing size: {conflict.size != null ? formatBytes(conflict.size) : 'unknown'}\n </div>\n <div>Existing mtime: {conflict.mtime ? formatDate(conflict.mtime) : 'unknown'}</div>\n <div>Snapshot entry size: {formatBytes(sourceEntry.size)}</div>\n <div>Snapshot entry mtime: {sourceEntry.mtime}</div>\n </div>\n <div className=\"mt-2 d-flex gap-2\">\n <Button\n color=\"danger\"\n size=\"sm\"\n disabled={submitting}\n onClick={() => void submit(true)}\n >\n {submitting ? <Spinner size=\"sm\" /> : 'Overwrite'}\n </Button>\n <Button\n color=\"secondary\"\n outline\n size=\"sm\"\n disabled={submitting}\n onClick={() => {\n setConflict(null)\n }}\n >\n Cancel\n </Button>\n </div>\n </Alert>\n )}\n\n {error && (\n <Alert color=\"danger\" className=\"mt-3 mb-0\">\n {error}\n </Alert>\n )}\n </ModalBody>\n <ModalFooter>\n <Button color=\"secondary\" outline disabled={submitting} onClick={onClose}>\n Cancel\n </Button>\n <Button\n color=\"primary\"\n disabled={disableSubmit || conflict !== null}\n onClick={() => void submit(false)}\n >\n {submitting ? (\n <>\n <Spinner size=\"sm\" /> Starting…\n </>\n ) : (\n 'Restore'\n )}\n </Button>\n </ModalFooter>\n </Modal>\n )\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n Alert,\n Badge,\n Button,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n Spinner\n} from 'reactstrap'\nimport {\n api,\n ApiError,\n formatBytes,\n type BackupMetadata,\n type BackupTreeEntry,\n type PartialRestoreInput,\n type PluginStatus\n} from '../api'\nimport { PartialRestoreModal } from './PartialRestoreModal'\n\ninterface Props {\n backup: BackupMetadata\n isOpen: boolean\n onClose: () => void\n /** Optional sub-path to scope the browser to. Empty = snapshot root.\n * Used by the Database Exports view to root the picker on the\n * database-exports subtree. */\n initialPath?: string\n /** When true, disable the per-entry Restore action so the user can't\n * initiate a partial restore while a full or partial restore is\n * already in flight. Browse/Download stay enabled — those are\n * read-only and the server-side global lock would 409 us anyway. */\n restoreLocked?: boolean\n /** Forwarded to the inner PartialRestoreModal so conflict-diff\n * target paths render as host paths instead of container paths. */\n pathMapping?: PluginStatus['pathMapping']\n /** Called when a partial restore is kicked off; the parent should\n * refresh its restore-status poller so the banner appears quickly. */\n onRestoreStarted?: () => void\n}\n\ninterface FolderState {\n // null while loading, string when an error happened, array when loaded.\n entries: BackupTreeEntry[] | null\n error: string | null\n // ENTRY_NOT_FOUND etc — lets FolderNode render a friendlier state for\n // the scoped-root case without regexing the message.\n errorCode: string | null\n}\n\n// Per-folder lazy cache keyed by full path-from-root (or '' for root).\n// Empty string is the snapshot root by convention with the server.\ntype Cache = Record<string, FolderState | undefined>\n\nfunction joinPath(prefix: string, name: string): string {\n if (!prefix) return name\n return `${prefix}/${name}`\n}\n\nexport function BackupBrowser({\n backup,\n isOpen,\n onClose,\n initialPath,\n restoreLocked,\n pathMapping,\n onRestoreStarted\n}: Props) {\n const rootPath = (initialPath ?? '').replace(/^\\/+|\\/+$/g, '')\n const [cache, setCache] = useState<Cache>({})\n const [expanded, setExpanded] = useState<Set<string>>(() => new Set([rootPath]))\n const [restoreTarget, setRestoreTarget] = useState<\n (BackupTreeEntry & { fullPath: string }) | null\n >(null)\n // Bumped whenever the browser is re-opened against a different backup\n // or root. In-flight listBackupTree calls captured the previous gen;\n // when their response lands we drop it so the cache stays consistent.\n const requestGenRef = useRef(0)\n\n // Reset when the user opens the browser against a different backup or\n // root — without this, switching backups would show stale entries from\n // the previous one until each folder was re-fetched.\n useEffect(() => {\n if (!isOpen) return\n requestGenRef.current += 1\n setCache({})\n setExpanded(new Set([rootPath]))\n setRestoreTarget(null)\n }, [isOpen, backup.id, rootPath])\n\n const loadFolder = useCallback(\n async (folderPath: string): Promise<void> => {\n const gen = requestGenRef.current\n setCache((c) => ({\n ...c,\n [folderPath]: { entries: null, error: null, errorCode: null }\n }))\n try {\n const res = await api.listBackupTree(backup.id, folderPath)\n if (gen !== requestGenRef.current) return\n setCache((c) => ({\n ...c,\n [folderPath]: { entries: res.entries, error: null, errorCode: null }\n }))\n } catch (err) {\n if (gen !== requestGenRef.current) return\n const message = err instanceof Error ? err.message : String(err)\n const errorCode = err instanceof ApiError ? (err.code ?? null) : null\n setCache((c) => ({\n ...c,\n [folderPath]: { entries: null, error: message, errorCode }\n }))\n }\n },\n [backup.id]\n )\n\n // Auto-load the root (and any pre-expanded path) when the modal opens.\n useEffect(() => {\n if (!isOpen) return\n if (cache[rootPath] === undefined) {\n void loadFolder(rootPath)\n }\n }, [isOpen, rootPath, cache, loadFolder])\n\n const toggleFolder = (folderPath: string): void => {\n const next = new Set(expanded)\n if (next.has(folderPath)) {\n next.delete(folderPath)\n } else {\n next.add(folderPath)\n if (cache[folderPath] === undefined) {\n void loadFolder(folderPath)\n }\n }\n setExpanded(next)\n }\n\n const startRestore = (entry: BackupTreeEntry, fullPath: string): void => {\n setRestoreTarget({ ...entry, fullPath })\n }\n\n const onRestoreSubmitted = (): void => {\n setRestoreTarget(null)\n onRestoreStarted?.()\n // Don't close the browser — the user might want to grab another file.\n }\n\n return (\n <Modal isOpen={isOpen} toggle={onClose} size=\"lg\" scrollable>\n <ModalHeader toggle={onClose}>\n Browse backup <code className=\"small ms-1\">{backup.id.slice(0, 12)}</code>\n </ModalHeader>\n <ModalBody>\n <div className=\"text-muted small mb-2\">\n {rootPath ? (\n <>\n Scoped to <code>{rootPath}/</code>\n </>\n ) : (\n <>Showing snapshot root</>\n )}\n </div>\n <FolderNode\n backupId={backup.id}\n path={rootPath}\n rootPath={rootPath}\n depth={0}\n cache={cache}\n expanded={expanded}\n restoreLocked={restoreLocked === true}\n onToggle={toggleFolder}\n onRetry={loadFolder}\n onStartRestore={startRestore}\n />\n </ModalBody>\n <ModalFooter>\n <Button color=\"secondary\" outline onClick={onClose}>\n Close\n </Button>\n </ModalFooter>\n\n {restoreTarget && (\n <PartialRestoreModal\n backup={backup}\n sourceEntry={restoreTarget}\n sourcePath={restoreTarget.fullPath}\n pathMapping={pathMapping}\n onClose={() => {\n setRestoreTarget(null)\n }}\n onSubmitted={onRestoreSubmitted}\n />\n )}\n </Modal>\n )\n}\n\ninterface NodeProps {\n backupId: string\n path: string\n rootPath: string\n depth: number\n cache: Cache\n expanded: Set<string>\n restoreLocked: boolean\n onToggle: (path: string) => void\n onRetry: (path: string) => Promise<void>\n onStartRestore: (entry: BackupTreeEntry, fullPath: string) => void\n}\n\nfunction FolderNode({\n backupId,\n path: folderPath,\n rootPath,\n depth,\n cache,\n expanded,\n restoreLocked,\n onToggle,\n onRetry,\n onStartRestore\n}: NodeProps) {\n const state = cache[folderPath]\n\n if (!state || (state.entries === null && !state.error)) {\n return (\n <div className=\"ps-3 py-1\">\n <Spinner size=\"sm\" /> Loading…\n </div>\n )\n }\n if (state.error) {\n // Friendlier empty-state when the scoped root subtree isn't in the\n // snapshot — typical case: the Database Exports browser opened\n // against a snapshot taken before any DB exports were staged. A\n // nested folder hitting the same error keeps the red alert + Retry\n // because that's a genuine surprise.\n const isScopedRootMissing =\n state.errorCode === 'ENTRY_NOT_FOUND' &&\n depth === 0 &&\n folderPath === rootPath &&\n rootPath !== ''\n if (isScopedRootMissing) {\n return (\n <div className=\"ps-3 py-3 text-muted small\">\n <div>This backup doesn’t contain any files at this path.</div>\n <div className=\"mt-1\">\n The subtree <code>{rootPath}/</code> may not have existed when this snapshot was taken.\n </div>\n </div>\n )\n }\n return (\n <div className=\"ps-3 py-1\">\n <Alert color=\"danger\" className=\"mb-1 py-1 small\">\n {state.error}\n </Alert>\n <Button size=\"sm\" color=\"secondary\" outline onClick={() => void onRetry(folderPath)}>\n Retry\n </Button>\n </div>\n )\n }\n const entries = state.entries ?? []\n if (entries.length === 0) {\n return <div className=\"ps-3 py-1 text-muted small\">(empty)</div>\n }\n\n // Sort: dirs first, then alphabetical. Same convention as a typical\n // file manager — keeps the tree scannable when a folder has many files\n // mixed with a handful of subdirectories.\n const sorted = [...entries].sort((a, b) => {\n if (a.isDir !== b.isDir) return a.isDir ? -1 : 1\n return a.name.localeCompare(b.name)\n })\n\n return (\n <ul className=\"list-unstyled mb-0\" style={{ marginLeft: depth === 0 ? 0 : '1rem' }}>\n {sorted.map((entry) => {\n const fullPath = joinPath(folderPath, entry.name)\n const isExpanded = entry.isDir && expanded.has(fullPath)\n return (\n <li key={entry.name} className=\"py-1\">\n <div className=\"d-flex align-items-center gap-2 flex-wrap\">\n {entry.isDir ? (\n <Button\n color=\"link\"\n size=\"sm\"\n className=\"p-0 text-decoration-none\"\n onClick={() => {\n onToggle(fullPath)\n }}\n style={{ minWidth: '1.2em' }}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? 'Collapse folder' : 'Expand folder'}\n >\n {isExpanded ? '▾' : '▸'}\n </Button>\n ) : (\n // Non-interactive placeholder for files: keeps the\n // column aligned without putting an empty button in\n // the tab order (one extra tab stop per file row).\n <span aria-hidden=\"true\" style={{ minWidth: '1.2em', display: 'inline-block' }} />\n )}\n <span\n className={entry.isDir ? 'fw-semibold' : ''}\n onClick={() => {\n if (entry.isDir) onToggle(fullPath)\n }}\n style={entry.isDir ? { cursor: 'pointer' } : undefined}\n >\n {entry.name}\n {entry.isDir ? '/' : ''}\n </span>\n {!entry.isDir && <span className=\"text-muted small\">{formatBytes(entry.size)}</span>}\n <span className=\"ms-auto\">\n <a\n href={api.downloadSubtreeUrl(backupId, fullPath)}\n className=\"btn btn-outline-secondary btn-sm me-1\"\n download\n >\n Download\n {entry.isDir && (\n <Badge color=\"light\" className=\"text-dark ms-1\">\n ZIP\n </Badge>\n )}\n </a>\n <Button\n color=\"warning\"\n outline\n size=\"sm\"\n disabled={restoreLocked}\n title={restoreLocked ? 'A restore is already in progress' : undefined}\n onClick={() => {\n onStartRestore(entry, fullPath)\n }}\n >\n Restore…\n </Button>\n </span>\n </div>\n {entry.isDir && isExpanded && (\n <FolderNode\n backupId={backupId}\n path={fullPath}\n rootPath={rootPath}\n depth={depth + 1}\n cache={cache}\n expanded={expanded}\n restoreLocked={restoreLocked}\n onToggle={onToggle}\n onRetry={onRetry}\n onStartRestore={onStartRestore}\n />\n )}\n </li>\n )\n })}\n </ul>\n )\n}\n\n// Re-export the type used by the restore modal so callers don't have to\n// import both files.\nexport type { PartialRestoreInput }\n","import { Alert, Button, Progress } from 'reactstrap'\nimport {\n toHostPath,\n type HostRestoreStatus,\n type PartialRestoreState,\n type PartialRestoreStatus,\n type PluginStatus\n} from '../api'\n\nconst ACTIVE_PARTIAL_STATES: ReadonlySet<PartialRestoreState> = new Set<PartialRestoreState>([\n 'preparing',\n 'safety_snapshotting',\n 'extracting',\n 'verifying',\n 'rolling_back'\n])\n\nconst ACTIVE_HOST_STATES = new Set<HostRestoreStatus['state']>([\n 'preparing',\n 'streaming',\n 'extracting',\n 'rolling_back'\n])\n\ninterface Props {\n status: PartialRestoreStatus | HostRestoreStatus\n // Set \"Host restore\" for the host-side banner so it's distinguishable when both fire.\n title?: string\n // From /status — used to translate container paths to host paths.\n pathMapping?: PluginStatus['pathMapping']\n // Set false when targetPath is already a host path (the host-restore\n // writer writes locally, so the status already carries the host\n // path) — running it through toHostPath would mis-remap if the\n // chosen path happens to share the container prefix.\n mapTargetPath?: boolean\n onReset: () => void\n}\n\nfunction isActive(state: string): boolean {\n return (\n ACTIVE_PARTIAL_STATES.has(state as PartialRestoreState) ||\n ACTIVE_HOST_STATES.has(state as HostRestoreStatus['state'])\n )\n}\n\nexport function PartialRestoreBanner({\n status,\n title,\n pathMapping,\n mapTargetPath = true,\n onReset\n}: Props) {\n if (status.state === 'idle') return null\n\n const active = isActive(status.state)\n const failed = status.state === 'failed' || status.state === 'rolled_back'\n const completed = status.state === 'completed'\n const hostTargetPath = mapTargetPath\n ? toHostPath(status.targetPath, pathMapping)\n : status.targetPath\n\n return (\n <Alert\n color={failed ? 'danger' : completed ? 'success' : 'info'}\n className=\"d-flex flex-column gap-2\"\n >\n <div className=\"d-flex justify-content-between align-items-start\">\n <div>\n <strong>\n {title ?? 'Partial restore'}: {status.state}\n </strong>\n <div className=\"small\">{status.statusMessage}</div>\n {status.sourcePath && (\n <div className=\"small text-muted\">\n source <code>{status.sourcePath}</code>\n {hostTargetPath && (\n <>\n {' '}\n → target <code>{hostTargetPath}</code>\n </>\n )}\n </div>\n )}\n {status.error && <div className=\"small text-danger\">Error: {status.error}</div>}\n </div>\n {!active && (\n <Button size=\"sm\" outline color={failed ? 'danger' : 'success'} onClick={onReset}>\n Dismiss\n </Button>\n )}\n </div>\n {active && (\n <Progress\n animated\n striped\n value={status.progress}\n max={100}\n color={failed ? 'danger' : 'info'}\n >\n {status.progress > 0 ? `${status.progress.toFixed(0)}%` : ''}\n </Progress>\n )}\n </Alert>\n )\n}\n\nexport { ACTIVE_PARTIAL_STATES, ACTIVE_HOST_STATES }\n","import { useRef, useState } from 'react'\nimport {\n Alert,\n Badge,\n Button,\n Card,\n CardBody,\n CardHeader,\n Col,\n Form,\n FormGroup,\n Input,\n Label,\n Progress,\n Row,\n Spinner,\n Table\n} from 'reactstrap'\nimport { api, formatBytes, formatDate, type BackupMetadata, type RestoreState } from '../api'\nimport { useApi } from '../useApi'\nimport { BackupBrowser } from '../components/BackupBrowser'\nimport {\n ACTIVE_HOST_STATES,\n ACTIVE_PARTIAL_STATES,\n PartialRestoreBanner\n} from '../components/PartialRestoreBanner'\n\n// In-progress restore states (anything other than idle/completed/rolled_back/failed\n// terminal markers we want to keep showing the banner for).\nconst ACTIVE_RESTORE_STATES: ReadonlySet<RestoreState> = new Set<RestoreState>([\n 'preparing',\n 'extracting',\n 'installing',\n 'restarting',\n 'verifying',\n 'rolling_back'\n])\n\nfunction RestoreBanner({\n status,\n onReset\n}: {\n status: { state: RestoreState; progress: number; statusMessage: string; error?: string }\n onReset: () => void\n}) {\n if (status.state === 'idle') return null\n\n const active = ACTIVE_RESTORE_STATES.has(status.state)\n const failed = status.state === 'failed' || status.state === 'rolled_back'\n const completed = status.state === 'completed'\n\n return (\n <Alert\n color={failed ? 'danger' : completed ? 'success' : 'info'}\n className=\"d-flex flex-column gap-2\"\n >\n <div className=\"d-flex justify-content-between align-items-start\">\n <div>\n <strong>Restore: {status.state}</strong>\n <div className=\"small\">{status.statusMessage}</div>\n {status.error && <div className=\"small text-danger\">Error: {status.error}</div>}\n </div>\n {!active && (\n <Button size=\"sm\" outline color={failed ? 'danger' : 'success'} onClick={onReset}>\n Dismiss\n </Button>\n )}\n </div>\n {active && (\n <Progress\n animated\n striped\n value={status.progress}\n max={100}\n color={failed ? 'danger' : 'info'}\n >\n {status.progress > 0 ? `${status.progress.toFixed(0)}%` : ''}\n </Progress>\n )}\n </Alert>\n )\n}\n\nexport function Backups() {\n const list = useApi(() => api.listBackups(), { intervalMs: 30000 })\n // Restore status polled at 2s when active, 15s when idle. Two hooks so\n // the polling rate doesn't depend on render-time decisions.\n const restore = useApi(() => api.restoreStatus(), { intervalMs: 2000 })\n const restorePartial = useApi(() => api.restorePartialStatus(), { intervalMs: 2000 })\n // Plugin-side host-write restore (custom-path mode) has its own\n // state poller — it doesn't go through the backup-server's machine.\n const restorePartialHost = useApi(() => api.restorePartialHostStatus(), { intervalMs: 2000 })\n // Plugin status carries the container→host path mapping the partial-\n // restore banner uses to display the user-meaningful target path.\n // 60s is plenty; the mapping changes only on container restart.\n const pluginStatus = useApi(() => api.pluginStatus(), { intervalMs: 60000 })\n\n const [description, setDescription] = useState('')\n const [creating, setCreating] = useState(false)\n const [createError, setCreateError] = useState<string | null>(null)\n const [deletingId, setDeletingId] = useState<string | null>(null)\n const [restoringId, setRestoringId] = useState<string | null>(null)\n const [browseBackup, setBrowseBackup] = useState<BackupMetadata | null>(null)\n\n const fileInputRef = useRef<HTMLInputElement | null>(null)\n const [uploadDescription, setUploadDescription] = useState('')\n const [uploading, setUploading] = useState(false)\n const [uploadError, setUploadError] = useState<string | null>(null)\n\n const onCreate = async (): Promise<void> => {\n setCreating(true)\n setCreateError(null)\n try {\n await api.createBackup(description.trim() || undefined)\n setDescription('')\n list.refresh()\n } catch (err) {\n setCreateError(err instanceof Error ? err.message : String(err))\n } finally {\n setCreating(false)\n }\n }\n\n const onUpload = async (): Promise<void> => {\n const file = fileInputRef.current?.files?.[0]\n if (!file) {\n setUploadError('Select a file first.')\n return\n }\n setUploading(true)\n setUploadError(null)\n try {\n await api.uploadBackup(file, uploadDescription.trim() || undefined)\n setUploadDescription('')\n if (fileInputRef.current) fileInputRef.current.value = ''\n list.refresh()\n } catch (err) {\n setUploadError(err instanceof Error ? err.message : String(err))\n } finally {\n setUploading(false)\n }\n }\n\n const onDelete = async (b: BackupMetadata): Promise<void> => {\n if (!window.confirm(`Delete backup ${b.id.slice(0, 12)} (${formatDate(b.createdAt)})?`)) {\n return\n }\n setDeletingId(b.id)\n try {\n await api.deleteBackup(b.id)\n list.refresh()\n } catch (err) {\n window.alert(`Delete failed: ${err instanceof Error ? err.message : String(err)}`)\n } finally {\n setDeletingId(null)\n }\n }\n\n const onRestore = async (b: BackupMetadata): Promise<void> => {\n const ok = window.confirm(\n `Restore backup ${b.id.slice(0, 12)} (${formatDate(b.createdAt)})?\\n\\n` +\n 'This OVERWRITES the current SignalK config and restarts the server. ' +\n 'A safety backup is taken first, so the operation can be rolled back ' +\n 'on failure — but any in-flight changes since the safety backup will be lost.'\n )\n if (!ok) return\n setRestoringId(b.id)\n try {\n await api.startRestore(b.id)\n restore.refresh()\n } catch (err) {\n window.alert(`Restore failed to start: ${err instanceof Error ? err.message : String(err)}`)\n } finally {\n setRestoringId(null)\n }\n }\n\n const onResetRestore = async (): Promise<void> => {\n try {\n await api.resetRestoreState()\n restore.refresh()\n } catch (err) {\n window.alert(`Reset failed: ${err instanceof Error ? err.message : String(err)}`)\n }\n }\n\n const onResetRestorePartial = async (): Promise<void> => {\n try {\n await api.resetRestorePartialState()\n restorePartial.refresh()\n } catch (err) {\n window.alert(`Reset failed: ${err instanceof Error ? err.message : String(err)}`)\n }\n }\n\n const onResetRestorePartialHost = async (): Promise<void> => {\n try {\n await api.resetRestorePartialHostState()\n restorePartialHost.refresh()\n } catch (err) {\n window.alert(`Reset failed: ${err instanceof Error ? err.message : String(err)}`)\n }\n }\n\n const allBackups = list.data?.backups ?? []\n const restoreActive = restore.data ? ACTIVE_RESTORE_STATES.has(restore.data.state) : false\n const restorePartialActive = restorePartial.data\n ? ACTIVE_PARTIAL_STATES.has(restorePartial.data.state)\n : false\n const restorePartialHostActive = restorePartialHost.data\n ? ACTIVE_HOST_STATES.has(restorePartialHost.data.state)\n : false\n // Block ALL row actions while any restore (full, partial, or host) is\n // active. The polled status flags lag by one 2-s tick, so a fast click\n // could otherwise fire two restores or a delete during a kickoff.\n const actionsDisabled =\n restoreActive || restorePartialActive || restorePartialHostActive || restoringId !== null\n\n return (\n <>\n <h2 className=\"mb-3\">Backups</h2>\n\n {restore.data && (\n <RestoreBanner status={restore.data} onReset={() => void onResetRestore()} />\n )}\n {restorePartial.data && (\n <PartialRestoreBanner\n status={restorePartial.data}\n pathMapping={pluginStatus.data?.pathMapping}\n onReset={() => void onResetRestorePartial()}\n />\n )}\n {restorePartialHost.data && (\n <PartialRestoreBanner\n status={restorePartialHost.data}\n title=\"Host restore\"\n pathMapping={pluginStatus.data?.pathMapping}\n mapTargetPath={false}\n onReset={() => void onResetRestorePartialHost()}\n />\n )}\n\n <Row className=\"mb-3\">\n <Col xs={12} md={6}>\n <Card>\n <CardHeader>\n <strong>Create new backup</strong>\n </CardHeader>\n <CardBody>\n <Form\n onSubmit={(e) => {\n e.preventDefault()\n void onCreate()\n }}\n >\n <FormGroup>\n <Label for=\"backup-description\">Description (optional)</Label>\n <Input\n id=\"backup-description\"\n value={description}\n onChange={(e) => {\n setDescription(e.target.value)\n }}\n placeholder=\"e.g. before plugin upgrade\"\n disabled={creating}\n />\n </FormGroup>\n <Button color=\"primary\" type=\"submit\" disabled={creating}>\n {creating ? (\n <>\n <Spinner size=\"sm\" /> Creating…\n </>\n ) : (\n 'Create backup'\n )}\n </Button>\n {createError && (\n <Alert color=\"danger\" className=\"mt-3 mb-0\">\n {createError}\n </Alert>\n )}\n </Form>\n </CardBody>\n </Card>\n </Col>\n <Col xs={12} md={6}>\n <Card>\n <CardHeader>\n <strong>Upload backup</strong>\n </CardHeader>\n <CardBody>\n <Form\n onSubmit={(e) => {\n e.preventDefault()\n void onUpload()\n }}\n >\n <FormGroup>\n <Label for=\"backup-upload-file\">Backup ZIP file</Label>\n <Input\n id=\"backup-upload-file\"\n type=\"file\"\n accept=\".zip,application/zip\"\n innerRef={fileInputRef}\n disabled={uploading}\n />\n </FormGroup>\n <FormGroup>\n <Label for=\"backup-upload-description\">Description (optional)</Label>\n <Input\n id=\"backup-upload-description\"\n value={uploadDescription}\n onChange={(e) => {\n setUploadDescription(e.target.value)\n }}\n placeholder=\"e.g. recovered from external drive\"\n disabled={uploading}\n />\n </FormGroup>\n <Button color=\"primary\" type=\"submit\" disabled={uploading}>\n {uploading ? (\n <>\n <Spinner size=\"sm\" /> Uploading…\n </>\n ) : (\n 'Upload'\n )}\n </Button>\n {uploadError && (\n <Alert color=\"danger\" className=\"mt-3 mb-0\">\n {uploadError}\n </Alert>\n )}\n </Form>\n </CardBody>\n </Card>\n </Col>\n </Row>\n\n <Card>\n <CardHeader className=\"d-flex justify-content-between align-items-center\">\n <strong>All backups ({allBackups.length})</strong>\n <Button\n color=\"secondary\"\n outline\n size=\"sm\"\n onClick={list.refresh}\n disabled={list.loading}\n >\n Refresh\n </Button>\n </CardHeader>\n <CardBody className=\"p-0\">\n {list.loading && !list.data ? (\n <div className=\"text-center py-3\">\n <Spinner size=\"sm\" />\n </div>\n ) : list.error ? (\n <Alert color=\"danger\" className=\"m-3 mb-0\">\n {list.error}\n </Alert>\n ) : allBackups.length === 0 ? (\n <p className=\"text-muted m-3 mb-0\">\n No backups yet. Create one above, or wait for the scheduler.\n </p>\n ) : (\n <Table responsive striped className=\"mb-0\">\n <thead>\n <tr>\n <th>Type</th>\n <th>Created</th>\n <th>Size</th>\n <th>Description</th>\n <th>ID</th>\n <th className=\"text-end\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {allBackups.map((b) => (\n <tr key={b.id}>\n <td>\n <Badge color=\"light\" className=\"text-dark\">\n {b.type}\n </Badge>\n </td>\n <td>{formatDate(b.createdAt)}</td>\n <td>{formatBytes(b.size)}</td>\n <td className=\"text-muted\">{b.description ?? ''}</td>\n <td>\n <code className=\"small\">{b.id.slice(0, 12)}</code>\n </td>\n <td className=\"text-end\">\n <a\n href={api.downloadUrl(b.id)}\n className=\"btn btn-outline-secondary btn-sm me-1\"\n download\n >\n Download\n </a>\n <Button\n color=\"info\"\n outline\n size=\"sm\"\n className=\"me-1\"\n onClick={() => {\n setBrowseBackup(b)\n }}\n >\n Browse…\n </Button>\n <Button\n color=\"warning\"\n outline\n size=\"sm\"\n className=\"me-1\"\n disabled={actionsDisabled}\n onClick={() => void onRestore(b)}\n >\n {restoringId === b.id ? <Spinner size=\"sm\" /> : 'Restore'}\n </Button>\n <Button\n color=\"danger\"\n outline\n size=\"sm\"\n disabled={actionsDisabled || deletingId === b.id}\n onClick={() => void onDelete(b)}\n >\n {deletingId === b.id ? <Spinner size=\"sm\" /> : 'Delete'}\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </Table>\n )}\n </CardBody>\n </Card>\n\n {browseBackup && (\n <BackupBrowser\n backup={browseBackup}\n isOpen\n restoreLocked={actionsDisabled}\n pathMapping={pluginStatus.data?.pathMapping}\n onClose={() => {\n setBrowseBackup(null)\n }}\n onRestoreStarted={() => {\n // Refresh both pollers: the modal kicks off either flow\n // depending on targetMode (original→partial, custom→host),\n // and we don't know which here.\n restorePartial.refresh()\n restorePartialHost.refresh()\n }}\n />\n )}\n </>\n )\n}\n","/**\n * Structural shape of the server's `syncProgress` field. Defined inline here\n * (instead of importing `SyncProgress` from `../api`) so this module has no\n * DOM-side dependencies and can be unit-tested from the Node-only test\n * project without pulling in `fetch` etc.\n */\nexport interface SyncProgressInput {\n totalBytes: number\n processedBlobs?: number\n totalBlobs?: number\n processedBytes?: number\n}\n\nexport type SyncPhase = 'determinate' | 'bytes-only' | 'elapsed-only'\n\nexport interface SyncDisplay {\n phase: SyncPhase\n /** Percent 0..100 — only meaningful for `determinate`. */\n percent: number\n label: string\n}\n\nconst MB = 1024 * 1024\n\nfunction formatMB(bytes: number): string {\n return `${(bytes / MB).toFixed(1)} MB`\n}\n\nfunction formatElapsed(ms: number): string {\n const totalSeconds = Math.max(0, Math.floor(ms / 1000))\n const m = Math.floor(totalSeconds / 60)\n const s = totalSeconds % 60\n return m > 0 ? `${m}m ${s}s` : `${s}s`\n}\n\n/**\n * Decide which Progress-bar variant to render for an in-flight cloud sync.\n * Pure so the UI logic can be unit-tested without spinning up a DOM.\n */\nexport function computeSyncDisplay(\n syncProgress: SyncProgressInput | undefined,\n startedAt: number | null,\n now: number = Date.now()\n): SyncDisplay {\n const processedBlobs = syncProgress?.processedBlobs\n const totalBlobs = syncProgress?.totalBlobs\n const processedBytes = syncProgress?.processedBytes\n\n if (typeof processedBlobs === 'number' && typeof totalBlobs === 'number' && totalBlobs > 0) {\n const percent = Math.min(100, (processedBlobs / totalBlobs) * 100)\n const bytesPart = typeof processedBytes === 'number' ? ` (${formatMB(processedBytes)})` : ''\n return {\n phase: 'determinate',\n percent,\n label: `${processedBlobs} / ${totalBlobs} blobs${bytesPart}`\n }\n }\n\n if (typeof processedBytes === 'number') {\n return {\n phase: 'bytes-only',\n percent: 100,\n label: `Syncing… ${formatMB(processedBytes)} transferred so far`\n }\n }\n\n const elapsedMs = startedAt !== null ? Math.max(0, now - startedAt) : 0\n return {\n phase: 'elapsed-only',\n percent: 100,\n label: `Syncing… (elapsed ${formatElapsed(elapsedMs)})`\n }\n}\n","import { Progress } from 'reactstrap'\nimport type { SyncProgress } from '../api'\nimport { computeSyncDisplay } from './cloud-sync-progress-display'\n\ninterface Props {\n syncProgress: SyncProgress | undefined\n startedAt: number | null\n /** Pinned timestamp for tests / parents that want deterministic elapsed text. */\n now?: number\n}\n\nexport function CloudSyncProgress({ syncProgress, startedAt, now }: Props) {\n const display = computeSyncDisplay(syncProgress, startedAt, now)\n const isDeterminate = display.phase === 'determinate'\n\n return (\n <div className=\"mb-3\">\n <div className=\"small text-body mb-1\">{display.label}</div>\n <Progress\n animated={!isDeterminate}\n striped={!isDeterminate}\n value={display.percent}\n max={100}\n color=\"info\"\n />\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { Alert, Button, FormGroup, Input, Label, Spinner } from 'reactstrap'\nimport { api, type LocalCandidate } from '../api'\n\nfunction formatBytes(bytes: number | null | undefined): string {\n if (bytes == null) return ''\n const units = ['B', 'KB', 'MB', 'GB', 'TB']\n let v = bytes\n let i = 0\n while (v >= 1024 && i < units.length - 1) {\n v /= 1024\n i++\n }\n return `${v.toFixed(v < 10 && i > 0 ? 1 : 0)} ${units[i]}`\n}\n\ninterface Props {\n /** Called once a destination has been successfully configured. */\n onConfigured: () => void\n onError: (msg: string) => void\n}\n\n// Map a host-side path the user types (e.g. `/media/dirk/USB-SSD`) to\n// the equivalent container-side path the backup engine sees. Returns\n// null when the host path isn't under one of the bind-mounted prefixes\n// so the caller can surface a clear validation error instead of letting\n// the server reject it later.\n//\n// Defense in depth against path traversal: any `..` segment short-\n// circuits to null. The backend re-validates with realpath, but\n// catching it here gives a clearer UI error and avoids round-tripping\n// obvious junk to the server.\nfunction hostPathToContainerPath(hostPath: string): string | null {\n const normalized = hostPath.trim().replace(/\\/+$/, '')\n if (normalized.split('/').some((segment) => segment === '..')) {\n return null\n }\n if (normalized === '/media' || normalized.startsWith('/media/')) {\n return '/host-media' + normalized.slice('/media'.length)\n }\n if (normalized === '/mnt' || normalized.startsWith('/mnt/')) {\n return '/host-mnt' + normalized.slice('/mnt'.length)\n }\n return null\n}\n\n/**\n * Picker for the `local` destination. Lists candidates from\n * /cloud/local/discover (subdirectories of `/media` and `/mnt` on the\n * host, surfaced inside the container under `/host-media` and\n * `/host-mnt`) and lets the user pick one. A manual host-path text\n * field is the escape hatch for paths that don't show up in discovery.\n */\nexport function LocalConfigureForm({ onConfigured, onError }: Props) {\n const [candidates, setCandidates] = useState<LocalCandidate[] | null>(null)\n const [scanning, setScanning] = useState(false)\n const [selected, setSelected] = useState<string>('')\n const [manualPath, setManualPath] = useState<string>('')\n const [submitting, setSubmitting] = useState(false)\n\n const scan = async (): Promise<void> => {\n setScanning(true)\n try {\n const { candidates } = await api.localDiscover()\n setCandidates(candidates)\n\n // If the user had picked a path that's no longer in the discovery\n // list (drive unplugged, mount removed) OR whose writability has\n // since flipped to false (ownership changed under us), drop the\n // stale selection so the dropdown doesn't keep showing it as the\n // active choice. `writable === undefined` is treated as allowed\n // for compatibility with older engines that didn't ship the field.\n const stillPresent =\n selected && candidates.some((c) => c.containerPath === selected && c.writable !== false)\n if (selected && !stillPresent) {\n setSelected('')\n }\n\n // Auto-select the largest free-bytes *writable* candidate if the\n // user hasn't picked one — saves a click in the common single-\n // USB case. Skip read-only / not-writable entries (CD-ROM, root-\n // owned dirs) so we never auto-pick something that would fail at\n // submit time. `writable === undefined` is treated as \"unknown,\n // include\" for compatibility with older engines that didn't ship\n // the field.\n if ((!selected || !stillPresent) && candidates.length > 0) {\n const eligible = candidates.filter((c) => c.writable !== false)\n const [best] = [...eligible].sort((a, b) => (b.freeBytes ?? 0) - (a.freeBytes ?? 0))\n if (best) setSelected(best.containerPath)\n }\n } catch (err) {\n onError(err instanceof Error ? err.message : String(err))\n } finally {\n setScanning(false)\n }\n }\n\n // Run once on mount; user can re-trigger via \"Re-scan\" button. The\n // empty-deps array is intentional — `scan` doesn't depend on props.\n useEffect(() => {\n void scan()\n }, [])\n\n const submit = async (containerPath: string, hostPath: string): Promise<void> => {\n setSubmitting(true)\n try {\n await api.localConfigure(containerPath, hostPath)\n onConfigured()\n } catch (err) {\n onError(err instanceof Error ? err.message : String(err))\n } finally {\n setSubmitting(false)\n }\n }\n\n const onUseSelected = (): void => {\n const c = candidates?.find((c) => c.containerPath === selected)\n if (!c) return\n void submit(c.containerPath, c.hostPath)\n }\n\n const onUseManual = (): void => {\n const hostPath = manualPath.trim()\n if (!hostPath) return\n const containerPath = hostPathToContainerPath(hostPath)\n if (!containerPath) {\n onError(\n `Path must live under /media or /mnt — those are the only host ` +\n `locations the backup engine can see. Plug a USB drive in (it ` +\n `auto-mounts under /media), or have the system administrator ` +\n `mount your destination under /mnt.`\n )\n return\n }\n void submit(containerPath, hostPath)\n }\n\n return (\n <div>\n <FormGroup>\n <Label for=\"local-candidate\">Pick a drive or mounted folder</Label>\n <div className=\"d-flex gap-2\">\n <Input\n id=\"local-candidate\"\n type=\"select\"\n value={selected}\n disabled={scanning || submitting}\n onChange={(e) => {\n setSelected(e.target.value)\n }}\n >\n <option value=\"\">— select —</option>\n {(candidates ?? []).map((c) => {\n const sizeSuffix =\n c.freeBytes != null && c.totalBytes != null\n ? ` (${formatBytes(c.freeBytes)} free of ${formatBytes(c.totalBytes)})`\n : ''\n // Non-writable entries (CD-ROMs, root-owned dirs) stay in\n // the list so the user can see they exist but can't be\n // picked. The suffix names *why* so the user can act.\n const writableSuffix = c.writable === false ? ' — not writable' : ''\n return (\n <option\n key={c.containerPath}\n value={c.containerPath}\n disabled={c.writable === false}\n >\n {c.hostPath}\n {sizeSuffix}\n {writableSuffix}\n </option>\n )\n })}\n </Input>\n <Button\n color=\"secondary\"\n outline\n disabled={scanning || submitting}\n onClick={() => void scan()}\n title=\"Re-scan /media and /mnt\"\n >\n {scanning ? <Spinner size=\"sm\" /> : 'Re-scan'}\n </Button>\n </div>\n </FormGroup>\n\n {candidates !== null && candidates.length === 0 && (\n <Alert color=\"warning\" className=\"mt-2 mb-2\">\n No candidates found. Plug in a USB drive (and mount it under\n <code> /media</code>), or mount a network share under <code>/mnt</code>\n on the host, then click <strong>Re-scan</strong>.\n </Alert>\n )}\n\n <Button\n color=\"primary\"\n disabled={!selected || submitting}\n onClick={onUseSelected}\n className=\"me-2\"\n >\n {submitting ? <Spinner size=\"sm\" /> : 'Use this'}\n </Button>\n\n <hr className=\"my-3\" />\n\n <FormGroup>\n <Label for=\"manual-path\">Or type a host path manually</Label>\n <div className=\"d-flex gap-2\">\n <Input\n id=\"manual-path\"\n type=\"text\"\n placeholder=\"/media/dirk/USB-SSD or /mnt/nfs-share\"\n value={manualPath}\n disabled={submitting}\n onChange={(e) => {\n setManualPath(e.target.value)\n }}\n />\n <Button\n color=\"secondary\"\n disabled={!manualPath.trim() || submitting}\n onClick={onUseManual}\n >\n Use\n </Button>\n </div>\n <small className=\"text-muted\">\n Enter the path the way you see it on the host — <code>/media/...</code> for plugged-in USB\n drives, <code>/mnt/...</code> for network shares mounted by the system. Inside the backup\n engine these are remapped to <code>/host-media/...</code> and <code>/host-mnt/...</code>,\n but you don't need to type that yourself.\n </small>\n </FormGroup>\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { Alert, Button, FormGroup, Input, Label, Spinner } from 'reactstrap'\nimport { api, type SmbDiscoveredHost } from '../api'\n\ninterface Props {\n /** Called after a successful /cloud/smb/connect. */\n onConnected: () => void\n onError: (msg: string) => void\n}\n\n/**\n * SMB share configurator.\n *\n * On mount, runs mDNS discovery on _smb._tcp.local. Returns whatever\n * responds within 2s; an empty list isn't an error, the manual host\n * field below works regardless. The plugin runs the discovery in the\n * SignalK process so multicast doesn't have to cross the backup-server\n * container's network.\n *\n * Credentials are obfuscated by `rclone obscure` on the server before\n * being written to rclone.conf. Obfuscation is reversible — the warning\n * surfaces that to the user.\n */\nexport function SmbConnectForm({ onConnected, onError }: Props) {\n const [hosts, setHosts] = useState<SmbDiscoveredHost[] | null>(null)\n const [scanning, setScanning] = useState(false)\n const [submitting, setSubmitting] = useState(false)\n\n const [host, setHost] = useState('')\n const [share, setShare] = useState('')\n const [user, setUser] = useState('')\n const [password, setPassword] = useState('')\n const [domain, setDomain] = useState('')\n\n const scan = async (): Promise<void> => {\n setScanning(true)\n try {\n const { hosts } = await api.smbDiscover()\n setHosts(hosts)\n } catch (err) {\n // Opportunistic — manual host entry still works. Don't fire the\n // top-level onError (which surfaces a global red Alert) for what\n // the user didn't explicitly ask for.\n\n console.debug('SMB mDNS discovery failed:', err)\n setHosts([])\n } finally {\n setScanning(false)\n }\n }\n\n useEffect(() => {\n void scan()\n // Empty deps; user can re-trigger via \"Re-scan\".\n }, [])\n\n const submit = async (e?: React.SyntheticEvent): Promise<void> => {\n e?.preventDefault()\n if (!host.trim() || !share.trim()) return\n setSubmitting(true)\n try {\n await api.smbConnect({\n host: host.trim(),\n share: share.trim(),\n user: user.trim(),\n password,\n ...(domain.trim() ? { domain: domain.trim() } : {})\n })\n // Wipe the password from local state on success — there's no\n // reason to keep it around once it's persisted in rclone.conf.\n setPassword('')\n onConnected()\n } catch (err) {\n onError(err instanceof Error ? err.message : String(err))\n } finally {\n setSubmitting(false)\n }\n }\n\n return (\n <form onSubmit={(e) => void submit(e)}>\n <Alert color=\"warning\" className=\"mb-3 small\">\n <strong>Heads up:</strong> SMB credentials are stored in rclone's obfuscated form (mode\n 0o600, owner-only). The obfuscation is reversible by anyone with read access to the\n backup-server container — treat it as protection against casual reading, not as encryption.\n </Alert>\n\n <FormGroup>\n <Label for=\"smb-host\">Host</Label>\n <div className=\"d-flex gap-2\">\n <Input\n id=\"smb-host\"\n type=\"text\"\n placeholder=\"synology.local or 192.168.1.50\"\n value={host}\n disabled={submitting}\n onChange={(e) => {\n setHost(e.target.value)\n }}\n list=\"smb-discovered-hosts\"\n required\n />\n <Button\n color=\"secondary\"\n outline\n type=\"button\"\n disabled={scanning || submitting}\n onClick={() => void scan()}\n title=\"Re-scan _smb._tcp.local on the LAN\"\n >\n {scanning ? <Spinner size=\"sm\" /> : 'Scan LAN'}\n </Button>\n </div>\n {hosts !== null && hosts.length > 0 && (\n <datalist id=\"smb-discovered-hosts\">\n {hosts.map((h) => (\n <option key={h.address} value={h.address}>\n {h.name}\n </option>\n ))}\n </datalist>\n )}\n {hosts !== null && hosts.length === 0 && !scanning && (\n <small className=\"text-muted\">\n No SMB devices announced on the LAN — type the host manually.\n </small>\n )}\n </FormGroup>\n\n <FormGroup>\n <Label for=\"smb-share\">Share</Label>\n <Input\n id=\"smb-share\"\n type=\"text\"\n placeholder=\"backups\"\n value={share}\n disabled={submitting}\n onChange={(e) => {\n setShare(e.target.value)\n }}\n required\n />\n </FormGroup>\n\n <FormGroup>\n <Label for=\"smb-user\">Username</Label>\n <Input\n id=\"smb-user\"\n type=\"text\"\n autoComplete=\"off\"\n value={user}\n disabled={submitting}\n onChange={(e) => {\n setUser(e.target.value)\n }}\n />\n </FormGroup>\n\n <FormGroup>\n <Label for=\"smb-password\">Password</Label>\n <Input\n id=\"smb-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n value={password}\n disabled={submitting}\n onChange={(e) => {\n setPassword(e.target.value)\n }}\n />\n <small className=\"text-muted\">\n Leave Username and Password empty for guest / anonymous shares.\n </small>\n </FormGroup>\n\n <FormGroup>\n <Label for=\"smb-domain\">Domain (optional)</Label>\n <Input\n id=\"smb-domain\"\n type=\"text\"\n placeholder=\"WORKGROUP\"\n value={domain}\n disabled={submitting}\n onChange={(e) => {\n setDomain(e.target.value)\n }}\n />\n </FormGroup>\n\n <Button color=\"primary\" type=\"submit\" disabled={submitting}>\n {submitting ? <Spinner size=\"sm\" /> : 'Connect'}\n </Button>\n </form>\n )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport {\n Alert,\n Badge,\n Button,\n Card,\n CardBody,\n CardHeader,\n Col,\n FormGroup,\n Input,\n Label,\n Row,\n Spinner\n} from 'reactstrap'\nimport {\n api,\n formatDate,\n type CloudStatus,\n type CloudSyncFrequency,\n type CloudSyncMode,\n type CloudSyncProvider\n} from '../api'\nimport { useApi } from '../useApi'\nimport { CloudSyncProgress } from '../components/CloudSyncProgress'\nimport { LocalConfigureForm } from '../components/LocalConfigureForm'\nimport { SmbConnectForm } from '../components/SmbConnectForm'\n\nfunction providerLabel(provider: CloudSyncProvider): string {\n switch (provider) {\n case 'gdrive':\n return 'Drive'\n case 'local':\n return 'Local destination'\n case 'smb':\n return 'SMB share'\n }\n}\n\nfunction StatusBadges({ status }: { status: CloudStatus }) {\n // Internet check is only meaningful for cloud-side rclone providers\n // (gdrive). LAN-local SMB and pure local-filesystem don't depend on\n // internet connectivity.\n const skipsInternetCheck = status.provider === 'local' || status.provider === 'smb'\n return (\n <div className=\"mb-2 d-flex gap-2 flex-wrap\">\n <Badge color={status.connected ? 'success' : 'secondary'}>\n {status.connected\n ? `Active: ${providerLabel(status.provider)}`\n : `${providerLabel(status.provider)} not configured`}\n </Badge>\n {status.syncing && <Badge color=\"info\">Syncing</Badge>}\n {!skipsInternetCheck && status.internetAvailable === false && (\n <Badge color=\"warning\">Offline</Badge>\n )}\n </div>\n )\n}\n\n// Connect flow:\n// 1. POST /cloud/gdrive/connect → { authUrl }\n// 2. open authUrl in new tab → user signs in to Google\n// 3. Google redirects back to rclone's loopback listener on :53682\n// 4. We poll /cloud/gdrive/auth-state every 2s for completed | failed\n// Fallback (browser on a different host than rclone): user copies the\n// callback URL from their browser address bar and submits it via\n// auth-callback. We surface the textarea after 15s OR immediately on\n// macOS/Windows where the rclone-in-Podman-VM can't reach :53682.\nfunction ConnectFlow({ onDone, onError }: { onDone: () => void; onError: (msg: string) => void }) {\n const [polling, setPolling] = useState(false)\n const [showFallback, setShowFallback] = useState(false)\n const [callbackUrl, setCallbackUrl] = useState('')\n const [forwarding, setForwarding] = useState(false)\n const startedAtRef = useRef<number>(0)\n const pollRef = useRef<ReturnType<typeof setInterval> | undefined>(undefined)\n const windowRef = useRef<Window | null>(null)\n // A ref guard (not state) so a fast double-click is rejected without\n // waiting for React to re-render — the click handler reads the latest\n // value synchronously.\n const connectingRef = useRef(false)\n\n const stopPolling = (): void => {\n if (pollRef.current) {\n clearInterval(pollRef.current)\n pollRef.current = undefined\n }\n setPolling(false)\n }\n\n useEffect(() => {\n return () => {\n stopPolling()\n connectingRef.current = false\n }\n }, [])\n\n const onConnect = async (): Promise<void> => {\n if (connectingRef.current) return\n connectingRef.current = true\n // Pre-open a window during the user gesture (mobile Safari etc. block\n // window.open from outside a click handler). We'll set its location\n // to the OAuth URL once we have it.\n windowRef.current = window.open('about:blank', '_blank')\n try {\n const { authUrl } = await api.gdriveConnect()\n if (windowRef.current && !windowRef.current.closed) {\n windowRef.current.location.href = authUrl\n } else {\n // Popup blocker may have killed the pre-opened window — user gets\n // a copy-paste fallback below.\n setShowFallback(true)\n }\n setPolling(true)\n startedAtRef.current = Date.now()\n pollRef.current = setInterval(() => {\n void (async () => {\n try {\n const state = await api.gdriveAuthState()\n if (state.state === 'completed') {\n stopPolling()\n connectingRef.current = false\n setShowFallback(false)\n setCallbackUrl('')\n onDone()\n } else if (state.state === 'failed') {\n stopPolling()\n connectingRef.current = false\n setShowFallback(false)\n onError(state.error ?? 'Authorization failed')\n } else if (Date.now() - startedAtRef.current > 15_000) {\n setShowFallback(true)\n }\n } catch {\n // ignore poll errors — next tick will retry\n }\n })()\n }, 2000)\n } catch (err) {\n windowRef.current?.close()\n connectingRef.current = false\n onError(err instanceof Error ? err.message : String(err))\n }\n }\n\n const onCancel = async (): Promise<void> => {\n stopPolling()\n connectingRef.current = false\n setShowFallback(false)\n setCallbackUrl('')\n try {\n await api.gdriveCancel()\n } catch {\n // ignore — the auth state will move to idle on its own\n }\n }\n\n const onForward = async (): Promise<void> => {\n if (!callbackUrl.trim()) return\n setForwarding(true)\n try {\n await api.gdriveAuthCallback(callbackUrl.trim())\n setCallbackUrl('')\n // The poll picks up state.completed and fires onDone.\n } catch (err) {\n onError(err instanceof Error ? err.message : String(err))\n } finally {\n setForwarding(false)\n }\n }\n\n if (!polling) {\n return (\n <Button color=\"primary\" onClick={() => void onConnect()}>\n Connect Google Drive\n </Button>\n )\n }\n\n return (\n <div>\n <div className=\"d-flex align-items-center gap-2 mb-3\">\n <Spinner size=\"sm\" />\n <span>Waiting for Google authorization…</span>\n <Button color=\"secondary\" outline size=\"sm\" onClick={() => void onCancel()}>\n Cancel\n </Button>\n </div>\n {showFallback && (\n <Alert color=\"info\" className=\"mb-0\">\n <p className=\"mb-2\">\n <strong>Browser on a different machine than this server?</strong>\n </p>\n <p className=\"small mb-2\">\n After granting access in Google, your browser is redirected to a URL starting with\n <code> http://127.0.0.1:53682/</code>. Copy that whole URL from your browser's address\n bar and paste it here.\n </p>\n <FormGroup>\n <Label for=\"callback-url\">Callback URL</Label>\n <Input\n id=\"callback-url\"\n type=\"text\"\n value={callbackUrl}\n onChange={(e) => {\n setCallbackUrl(e.target.value)\n }}\n placeholder=\"http://127.0.0.1:53682/?code=...\"\n disabled={forwarding}\n />\n </FormGroup>\n <Button\n color=\"primary\"\n size=\"sm\"\n disabled={forwarding || !callbackUrl.trim()}\n onClick={() => void onForward()}\n >\n {forwarding ? <Spinner size=\"sm\" /> : 'Submit callback'}\n </Button>\n </Alert>\n )}\n </div>\n )\n}\n\nexport function Cloud() {\n // Poll faster while a sync is running so the progress bar feels live. The\n // interval is recomputed each render from the most recent cloud.data, so\n // 5s→2s switch happens on the next render after `syncing` flips true.\n const [cloudIntervalMs, setCloudIntervalMs] = useState(5000)\n const cloud = useApi(() => api.cloudStatus(), { intervalMs: cloudIntervalMs })\n const local = useApi(() => api.localStatus(), { intervalMs: 5000 })\n const smb = useApi(() => api.smbStatus(), { intervalMs: 5000 })\n const [syncStartedAt, setSyncStartedAt] = useState<number | null>(null)\n useEffect(() => {\n const isSyncing = cloud.data?.syncing === true\n setCloudIntervalMs(isSyncing ? 2000 : 5000)\n setSyncStartedAt((prev) => {\n if (isSyncing && prev === null) return Date.now()\n if (!isSyncing && prev !== null) return null\n return prev\n })\n }, [cloud.data?.syncing])\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState<string | null>(null)\n const [busy, setBusy] = useState<'sync' | 'cancel' | 'disconnect' | 'config' | 'switch' | null>(\n null\n )\n const [confirmDisconnect, setConfirmDisconnect] = useState(false)\n // The dropdown reflects user intent immediately so picking \"Local\"\n // from the gdrive view surfaces the configure form. Server provider\n // doesn't actually flip until configure succeeds.\n const [pendingProvider, setPendingProvider] = useState<CloudSyncProvider | null>(null)\n const activeProvider: CloudSyncProvider = pendingProvider ?? cloud.data?.provider ?? 'gdrive'\n\n /**\n * Switch the active server-side provider back to gdrive.\n *\n * Dispatches based on the current server provider:\n * - local → /cloud/local/disconnect\n * - smb → /cloud/smb/disconnect\n * - gdrive (already) → no-op (just clears pendingProvider)\n *\n * Both disconnect routes preserve syncMode/syncFrequency so switching\n * destinations doesn't reset the schedule.\n */\n const switchProviderToGdrive = async (): Promise<void> => {\n const serverProvider = cloud.data?.provider\n if (serverProvider === 'gdrive' || !serverProvider) {\n setPendingProvider(null)\n return\n }\n setBusy('switch')\n setError(null)\n try {\n switch (serverProvider) {\n case 'local':\n await api.localDisconnect()\n break\n case 'smb':\n await api.smbDisconnect()\n break\n }\n setPendingProvider(null)\n cloud.refresh()\n local.refresh()\n smb.refresh()\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(null)\n }\n }\n\n const onSync = async (): Promise<void> => {\n setBusy('sync')\n setError(null)\n setSuccess(null)\n try {\n await api.cloudSync()\n cloud.refresh()\n setSuccess('Sync started')\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(null)\n }\n }\n\n const onCancelSync = async (): Promise<void> => {\n setBusy('cancel')\n try {\n await api.cloudSyncCancel()\n cloud.refresh()\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(null)\n }\n }\n\n const onDisconnect = async (): Promise<void> => {\n setBusy('disconnect')\n setError(null)\n try {\n await api.gdriveDisconnect()\n cloud.refresh()\n setConfirmDisconnect(false)\n setSuccess('Google Drive disconnected')\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(null)\n }\n }\n\n const onUpdateConfig = async (update: {\n syncMode?: CloudSyncMode\n syncFrequency?: CloudSyncFrequency\n }): Promise<void> => {\n setBusy('config')\n setError(null)\n try {\n await api.cloudConfig(update)\n cloud.refresh()\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(null)\n }\n }\n\n return (\n <>\n <h2 className=\"mb-3\">Cloud sync</h2>\n\n {error && (\n <Alert\n color=\"danger\"\n toggle={() => {\n setError(null)\n }}\n >\n {error}\n </Alert>\n )}\n {success && (\n <Alert\n color=\"success\"\n toggle={() => {\n setSuccess(null)\n }}\n >\n {success}\n </Alert>\n )}\n\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Destination</strong>\n </CardHeader>\n <CardBody>\n {cloud.loading && !cloud.data ? (\n <Spinner size=\"sm\" />\n ) : cloud.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {cloud.error}\n </Alert>\n ) : cloud.data ? (\n <>\n <StatusBadges status={cloud.data} />\n\n <FormGroup className=\"mb-3\">\n <Label for=\"provider-select\">Where backups go</Label>\n <Input\n id=\"provider-select\"\n type=\"select\"\n value={activeProvider}\n disabled={busy !== null}\n onChange={(e) => {\n const next = e.target.value as CloudSyncProvider\n if (next === activeProvider) return\n if (next === 'gdrive') {\n // switchProviderToGdrive() is a no-op when the\n // server is already gdrive — it just clears\n // pendingProvider — so \"user cancelled a pending\n // local/smb selection\" works without a special\n // case here.\n void switchProviderToGdrive()\n } else {\n // Surface the matching configure form immediately.\n // Server provider only flips once /local/configure\n // or /smb/connect succeeds.\n setPendingProvider(next)\n }\n }}\n >\n <option value=\"gdrive\">Google Drive</option>\n <option value=\"local\">Local drive / mounted folder</option>\n <option value=\"smb\">SMB share</option>\n </Input>\n </FormGroup>\n\n {activeProvider === 'gdrive' && (\n <>\n {cloud.data.email && (\n <p className=\"text-muted small mb-2\">Account: {cloud.data.email}</p>\n )}\n {cloud.data.connected ? (\n <>\n {confirmDisconnect ? (\n <div className=\"d-flex gap-2 align-items-center\">\n <span>Really disconnect?</span>\n <Button\n color=\"danger\"\n size=\"sm\"\n disabled={busy === 'disconnect'}\n onClick={() => void onDisconnect()}\n >\n {busy === 'disconnect' ? <Spinner size=\"sm\" /> : 'Disconnect'}\n </Button>\n <Button\n color=\"secondary\"\n outline\n size=\"sm\"\n onClick={() => {\n setConfirmDisconnect(false)\n }}\n >\n Cancel\n </Button>\n </div>\n ) : (\n <Button\n color=\"danger\"\n outline\n onClick={() => {\n setConfirmDisconnect(true)\n }}\n >\n Disconnect\n </Button>\n )}\n </>\n ) : (\n <ConnectFlow\n onDone={() => {\n cloud.refresh()\n setSuccess('Google Drive connected')\n }}\n onError={setError}\n />\n )}\n </>\n )}\n\n {activeProvider === 'local' && (\n <>\n {local.error && (\n <Alert color=\"danger\" className=\"mb-2\">\n Failed to read local destination status: {local.error}\n </Alert>\n )}\n {local.data?.connected ? (\n <>\n <p className=\"text-muted small mb-2\">\n Backing up to <code>{local.data.hostPath ?? local.data.containerPath}</code>\n {local.data.freeBytes != null && (\n <> — {Math.round(local.data.freeBytes / 1e9)} GB free</>\n )}\n </p>\n <Button\n color=\"danger\"\n outline\n disabled={busy !== null}\n onClick={() => void switchProviderToGdrive()}\n >\n {busy === 'switch' ? <Spinner size=\"sm\" /> : 'Switch back to Google Drive'}\n </Button>\n </>\n ) : (\n <>\n {local.data?.error && (\n <Alert color=\"warning\" className=\"mb-2\">\n {local.data.error}\n </Alert>\n )}\n <LocalConfigureForm\n onConfigured={() => {\n setPendingProvider(null)\n cloud.refresh()\n local.refresh()\n setSuccess('Local destination configured')\n }}\n onError={setError}\n />\n </>\n )}\n </>\n )}\n\n {activeProvider === 'smb' && (\n <>\n {smb.error && (\n <Alert color=\"danger\" className=\"mb-2\">\n Failed to read SMB status: {smb.error}\n </Alert>\n )}\n {smb.data?.connected ? (\n <>\n <p className=\"text-muted small mb-2\">\n Backing up to{' '}\n <code>\n \\\\{smb.data.host ?? '?'}\\{smb.data.share ?? '?'}\n </code>{' '}\n as <code>{smb.data.user ?? '?'}</code>\n </p>\n <Button\n color=\"danger\"\n outline\n disabled={busy !== null}\n onClick={() => void switchProviderToGdrive()}\n >\n {busy === 'switch' ? <Spinner size=\"sm\" /> : 'Switch back to Google Drive'}\n </Button>\n </>\n ) : (\n <SmbConnectForm\n onConnected={() => {\n setPendingProvider(null)\n cloud.refresh()\n smb.refresh()\n setSuccess('SMB share connected')\n }}\n onError={setError}\n />\n )}\n </>\n )}\n </>\n ) : null}\n </CardBody>\n </Card>\n\n {cloud.data?.connected && (\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Sync</strong>\n </CardHeader>\n <CardBody>\n <Row className=\"g-3 mb-3\">\n <Col xs={12} md={6}>\n <FormGroup>\n <Label for=\"sync-mode\">Sync mode</Label>\n <Input\n id=\"sync-mode\"\n type=\"select\"\n value={cloud.data.syncMode ?? 'manual'}\n disabled={busy === 'config'}\n onChange={(e) => {\n const syncMode = e.target.value as CloudSyncMode\n // Switching to scheduled with no prior frequency would\n // leave it null on the server and the schedule wouldn't\n // fire — default to daily in that case.\n const update: {\n syncMode: CloudSyncMode\n syncFrequency?: CloudSyncFrequency\n } = { syncMode }\n if (syncMode === 'scheduled' && !cloud.data?.syncFrequency) {\n update.syncFrequency = 'daily'\n }\n void onUpdateConfig(update)\n }}\n >\n <option value=\"manual\">Manual only</option>\n <option value=\"after_backup\">After every backup</option>\n <option value=\"scheduled\">On a schedule</option>\n </Input>\n </FormGroup>\n </Col>\n {cloud.data.syncMode === 'scheduled' && (\n <Col xs={12} md={6}>\n <FormGroup>\n <Label for=\"sync-frequency\">Schedule</Label>\n <Input\n id=\"sync-frequency\"\n type=\"select\"\n value={cloud.data.syncFrequency ?? 'daily'}\n disabled={busy === 'config'}\n onChange={(e) => {\n void onUpdateConfig({\n syncFrequency: e.target.value as CloudSyncFrequency\n })\n }}\n >\n <option value=\"daily\">Daily</option>\n <option value=\"weekly\">Weekly</option>\n </Input>\n </FormGroup>\n </Col>\n )}\n </Row>\n\n {cloud.data.syncing && (\n <CloudSyncProgress syncProgress={cloud.data.syncProgress} startedAt={syncStartedAt} />\n )}\n\n <div className=\"d-flex gap-2 align-items-center mb-3\">\n {cloud.data.syncing ? (\n <Button\n color=\"warning\"\n outline\n disabled={busy === 'cancel'}\n onClick={() => void onCancelSync()}\n >\n {busy === 'cancel' ? <Spinner size=\"sm\" /> : 'Cancel sync'}\n </Button>\n ) : (\n <Button color=\"primary\" disabled={busy === 'sync'} onClick={() => void onSync()}>\n {busy === 'sync' ? <Spinner size=\"sm\" /> : 'Sync now'}\n </Button>\n )}\n </div>\n\n <dl className=\"row mb-0\">\n <dt className=\"col-sm-3\">Last sync</dt>\n <dd className=\"col-sm-9\">{formatDate(cloud.data.lastSync)}</dd>\n {cloud.data.lastSyncError && (\n <>\n <dt className=\"col-sm-3\">Last error</dt>\n <dd className=\"col-sm-9 text-danger\">{cloud.data.lastSyncError}</dd>\n </>\n )}\n </dl>\n </CardBody>\n </Card>\n )}\n </>\n )\n}\n","import { useState } from 'react'\nimport {\n Alert,\n Badge,\n Button,\n Card,\n CardBody,\n CardHeader,\n Input,\n Label,\n Spinner,\n Table\n} from 'reactstrap'\nimport { api, formatBytes, formatDate, type BackupMetadata, type RestoreState } from '../api'\nimport { useApi } from '../useApi'\nimport { BackupBrowser } from '../components/BackupBrowser'\nimport {\n ACTIVE_HOST_STATES,\n ACTIVE_PARTIAL_STATES,\n PartialRestoreBanner\n} from '../components/PartialRestoreBanner'\n\n// Path inside every snapshot where the plugin's DB-export tick lands\n// its parquet shards. The browser picker is scoped to this so the user\n// doesn't have to navigate the whole tree just to grab DB shards.\nconst STAGING_SUBPATH = 'plugin-config-data/signalk-backup/database-exports'\n\n// Full-restore in-progress markers — same set Backups.tsx uses. A full\n// restore from any view should also disable partial/host actions here,\n// so the user gets a clear \"wait\" rather than a server-side 409.\nconst ACTIVE_RESTORE_STATES: ReadonlySet<RestoreState> = new Set<RestoreState>([\n 'preparing',\n 'extracting',\n 'installing',\n 'restarting',\n 'verifying',\n 'rolling_back'\n])\n\nexport function DatabaseExports() {\n const staging = useApi(() => api.listStaging(), { intervalMs: 30000 })\n const backups = useApi(() => api.listBackups(), { intervalMs: 60000 })\n const pluginStatus = useApi(() => api.pluginStatus(), { intervalMs: 60000 })\n // Partial + host restore are reachable from this view via the\n // BackupBrowser modal, so we surface the same status banners and\n // restore-lock here as on the Backups view.\n const restore = useApi(() => api.restoreStatus(), { intervalMs: 2000 })\n const restorePartial = useApi(() => api.restorePartialStatus(), { intervalMs: 2000 })\n const restorePartialHost = useApi(() => api.restorePartialHostStatus(), { intervalMs: 2000 })\n const [browseBackup, setBrowseBackup] = useState<BackupMetadata | null>(null)\n const [selectedBackupId, setSelectedBackupId] = useState<string>('')\n\n const stagingEntries = staging.data?.entries ?? []\n const allBackups = backups.data?.backups ?? []\n\n const onOpenBackup = (): void => {\n const b = allBackups.find((x) => x.id === selectedBackupId)\n if (b) setBrowseBackup(b)\n }\n\n const onResetRestorePartial = async (): Promise<void> => {\n try {\n await api.resetRestorePartialState()\n restorePartial.refresh()\n } catch (err) {\n window.alert(`Reset failed: ${err instanceof Error ? err.message : String(err)}`)\n }\n }\n\n const onResetRestorePartialHost = async (): Promise<void> => {\n try {\n await api.resetRestorePartialHostState()\n restorePartialHost.refresh()\n } catch (err) {\n window.alert(`Reset failed: ${err instanceof Error ? err.message : String(err)}`)\n }\n }\n\n const restoreActive = restore.data ? ACTIVE_RESTORE_STATES.has(restore.data.state) : false\n const restorePartialActive = restorePartial.data\n ? ACTIVE_PARTIAL_STATES.has(restorePartial.data.state)\n : false\n const restorePartialHostActive = restorePartialHost.data\n ? ACTIVE_HOST_STATES.has(restorePartialHost.data.state)\n : false\n const restoreLocked = restoreActive || restorePartialActive || restorePartialHostActive\n\n return (\n <>\n <h2 className=\"mb-3\">Database exports</h2>\n {restorePartial.data && (\n <PartialRestoreBanner\n status={restorePartial.data}\n pathMapping={pluginStatus.data?.pathMapping}\n onReset={() => void onResetRestorePartial()}\n />\n )}\n {restorePartialHost.data && (\n <PartialRestoreBanner\n status={restorePartialHost.data}\n title=\"Host restore\"\n pathMapping={pluginStatus.data?.pathMapping}\n mapTargetPath={false}\n onReset={() => void onResetRestorePartialHost()}\n />\n )}\n <p className=\"text-muted\">\n QuestDB, Grafana and signalk-database exports staged by the plugin. The top card extracts\n the database-exports subtree from any historical backup without pulling the whole snapshot;\n the live list below shows what's on disk right now (the next backup will include these).\n </p>\n\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Extract from a historical backup</strong>{' '}\n <Badge color=\"light\" className=\"text-dark ms-1\">\n Browser scoped to {STAGING_SUBPATH}\n </Badge>\n </CardHeader>\n <CardBody>\n <p className=\"small text-muted mb-3\">\n Pick a backup and open the database-exports subtree. From there you can download\n individual files (octet-stream) or whole subdirectories (ZIP) without pulling the full\n snapshot.\n </p>\n\n {backups.loading && !backups.data ? (\n <Spinner size=\"sm\" />\n ) : backups.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {backups.error}\n </Alert>\n ) : allBackups.length === 0 ? (\n <p className=\"text-muted mb-0\">\n No backups yet. Once the scheduler runs (or you create a manual one), it will appear\n here.\n </p>\n ) : (\n <div className=\"d-flex gap-2 align-items-end flex-wrap\">\n <div style={{ minWidth: '20rem', flex: '1 1 20rem' }}>\n <Label for=\"db-export-backup-picker\">Backup</Label>\n <Input\n id=\"db-export-backup-picker\"\n type=\"select\"\n value={selectedBackupId}\n onChange={(e) => {\n setSelectedBackupId(e.target.value)\n }}\n >\n <option value=\"\">— select a backup —</option>\n {allBackups.map((b) => (\n <option key={b.id} value={b.id}>\n {formatDate(b.createdAt)} · {b.type} · {b.id.slice(0, 12)}\n </option>\n ))}\n </Input>\n </div>\n <Button color=\"primary\" disabled={!selectedBackupId} onClick={onOpenBackup}>\n Open browser\n </Button>\n </div>\n )}\n </CardBody>\n </Card>\n\n <Card>\n <CardHeader className=\"d-flex justify-content-between align-items-center\">\n <strong>Live staging ({stagingEntries.length})</strong>\n <Button\n color=\"secondary\"\n outline\n size=\"sm\"\n onClick={staging.refresh}\n disabled={staging.loading}\n >\n Refresh\n </Button>\n </CardHeader>\n <CardBody className=\"p-0\">\n {staging.loading && !staging.data ? (\n <div className=\"text-center py-3\">\n <Spinner size=\"sm\" />\n </div>\n ) : staging.error ? (\n <Alert color=\"danger\" className=\"m-3 mb-0\">\n {staging.error}\n </Alert>\n ) : stagingEntries.length === 0 ? (\n <p className=\"text-muted m-3 mb-0\">\n Nothing staged yet. Enable the relevant exporter in Settings → Database export, or\n wait for the next scheduler tick.\n </p>\n ) : (\n <Table responsive striped className=\"mb-0\">\n <thead>\n <tr>\n <th>Path</th>\n <th>Size</th>\n <th>Modified</th>\n <th className=\"text-end\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {stagingEntries.map((e) => (\n <tr key={e.path}>\n <td>\n <code className=\"small\">{e.path}</code>\n </td>\n <td>{formatBytes(e.size)}</td>\n <td className=\"small text-muted\">{formatDate(e.mtime)}</td>\n <td className=\"text-end\">\n <a\n href={api.stagingDownloadUrl(e.path)}\n className=\"btn btn-outline-secondary btn-sm\"\n download\n >\n Download\n </a>\n </td>\n </tr>\n ))}\n </tbody>\n </Table>\n )}\n {staging.data?.stagingRoot && (\n <div className=\"px-3 py-2 small text-muted border-top\">\n Staging root: <code>{staging.data.stagingRoot}</code>\n </div>\n )}\n </CardBody>\n </Card>\n\n {browseBackup && (\n <BackupBrowser\n backup={browseBackup}\n isOpen\n initialPath={STAGING_SUBPATH}\n pathMapping={pluginStatus.data?.pathMapping}\n restoreLocked={restoreLocked}\n onClose={() => {\n setBrowseBackup(null)\n }}\n onRestoreStarted={() => {\n // Modal kicks off either flow depending on targetMode;\n // refresh both to surface whichever banner becomes active.\n restorePartial.refresh()\n restorePartialHost.refresh()\n }}\n />\n )}\n </>\n )\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport {\n Alert,\n Badge,\n Button,\n Card,\n CardBody,\n CardHeader,\n Form,\n FormGroup,\n Input,\n Label,\n Spinner,\n Table\n} from 'reactstrap'\nimport { api, formatBytes } from '../api'\nimport { useApi } from '../useApi'\n\n// ---------------------------------------------------------------------------\n// Scheduler card\n// ---------------------------------------------------------------------------\nfunction SchedulerCard() {\n const status = useApi(() => api.scheduler(), { intervalMs: 15000 })\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const onToggle = async (enabling: boolean): Promise<void> => {\n setBusy(true)\n setError(null)\n try {\n if (enabling) {\n await api.schedulerStart()\n } else {\n await api.schedulerStop()\n }\n status.refresh()\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Scheduler</strong>\n </CardHeader>\n <CardBody>\n {status.loading && !status.data ? (\n <Spinner size=\"sm\" />\n ) : status.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {status.error}\n </Alert>\n ) : status.data ? (\n <>\n <div className=\"mb-2\">\n <Badge color={status.data.enabled ? 'success' : 'secondary'}>\n {status.data.enabled ? 'Running' : 'Stopped'}\n </Badge>\n </div>\n <p className=\"text-muted small mb-3\">\n When running, the backup-server creates hourly, daily, and weekly snapshots\n automatically per its retention policy. Manual backups still work either way.\n </p>\n {status.data.enabled ? (\n <Button color=\"warning\" outline disabled={busy} onClick={() => void onToggle(false)}>\n {busy ? <Spinner size=\"sm\" /> : 'Stop scheduler'}\n </Button>\n ) : (\n <Button color=\"primary\" disabled={busy} onClick={() => void onToggle(true)}>\n {busy ? <Spinner size=\"sm\" /> : 'Start scheduler'}\n </Button>\n )}\n {error && (\n <Alert color=\"danger\" className=\"mt-2 mb-0\">\n {error}\n </Alert>\n )}\n </>\n ) : null}\n </CardBody>\n </Card>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Exclusions card\n// ---------------------------------------------------------------------------\n//\n// The server returns three things:\n// - GET /exclusions { exclusions: string[] } — user-editable patterns\n// - GET /data-dirs [{ name, size, excluded, type }]\n// - GET /plugin-data-dirs [{ name, size, excluded, lockedExcluded, lockReason }]\n// The data-dirs and plugin-data-dirs `excluded` booleans are computed on\n// the server from the patterns above plus locked rules. We let the user\n// toggle each dir; on Save we compute a new patterns list:\n// - keep raw patterns the user didn't touch (we can't introspect them\n// so just round-trip them)\n// - per-dir: emit \"<name>/\" when the user wants it excluded\n// Locked plugin dirs are non-editable (the server enforces them anyway).\ninterface Row {\n name: string\n size: number\n excluded: boolean\n locked?: boolean\n lockReason?: string\n}\n\nfunction RowsTable(props: {\n rows: Row[]\n isExcluded: (name: string, defaultExcluded: boolean) => boolean\n toggle: (name: string, currentEffective: boolean, serverDefault: boolean) => void\n stripPrefix?: string\n showNote?: boolean\n}) {\n const { rows, isExcluded, toggle, stripPrefix, showNote } = props\n if (rows.length === 0) return null\n return (\n <Table responsive striped size=\"sm\" className=\"mb-2\">\n <thead>\n <tr>\n <th style={{ width: '4em' }}>Include</th>\n <th>Directory</th>\n <th style={{ width: '7em' }}>Size</th>\n {showNote && <th>Note</th>}\n </tr>\n </thead>\n <tbody>\n {rows.map((d) => {\n const excluded = isExcluded(d.name, d.excluded)\n const displayName =\n stripPrefix && d.name.startsWith(stripPrefix)\n ? d.name.slice(stripPrefix.length)\n : d.name\n return (\n <tr key={d.name}>\n <td>\n <Input\n type=\"checkbox\"\n checked={!excluded}\n disabled={d.locked}\n onChange={() => {\n toggle(d.name, excluded, d.excluded)\n }}\n aria-label={`Include ${d.name}`}\n />\n </td>\n <td>\n <code className=\"small\">{displayName}</code>\n </td>\n <td>{formatBytes(d.size)}</td>\n {showNote && (\n <td className=\"text-muted small\" title={d.lockReason ?? ''}>\n {d.lockReason ? `🔒 ${d.lockReason}` : ''}\n </td>\n )}\n </tr>\n )\n })}\n </tbody>\n </Table>\n )\n}\n\nfunction ExclusionsCard() {\n const dirs = useApi(() => api.dataDirs())\n const pluginDirs = useApi(() => api.pluginDataDirs())\n const exclusions = useApi(() => api.exclusions())\n\n const [overrides, setOverrides] = useState<Record<string, boolean>>({})\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [savedAt, setSavedAt] = useState<number | null>(null)\n\n // Reset overrides whenever the server-side state changes (post-save reload,\n // or another client edited it).\n useEffect(() => {\n setOverrides({})\n }, [exclusions.data, dirs.data, pluginDirs.data])\n\n // Three sections in the card. plugin-config-data is rendered as a\n // section header (no checkbox, no size) — its children appear in\n // sections 2 and 3 below it, split by whether the server has them\n // locked. The full server-returned set (incl. plugin-config-data\n // itself) is still used by onSave's raw-pattern filter so a\n // user-supplied \"plugin-config-data/\" pattern set out-of-band\n // doesn't get dropped on save.\n const topLevelDirs: Row[] = useMemo(\n () =>\n (dirs.data ?? [])\n .filter((d) => d.name !== 'plugin-config-data')\n .map((d) => ({ name: d.name, size: d.size, excluded: d.excluded })),\n [dirs.data]\n )\n const editablePluginDirs: Row[] = useMemo(\n () =>\n (pluginDirs.data ?? [])\n .filter((p) => !p.lockedExcluded)\n .map((p) => ({\n name: `plugin-config-data/${p.name}/`,\n size: p.size,\n excluded: p.excluded\n })),\n [pluginDirs.data]\n )\n const lockedPluginDirs: Row[] = useMemo(\n () =>\n (pluginDirs.data ?? [])\n .filter((p) => p.lockedExcluded === true)\n .map((p) => ({\n name: `plugin-config-data/${p.name}/`,\n size: p.size,\n excluded: p.excluded,\n locked: true,\n lockReason: p.lockReason\n })),\n [pluginDirs.data]\n )\n\n const isExcluded = (name: string, defaultExcluded: boolean): boolean =>\n overrides[name] ?? defaultExcluded\n\n // Toggle the dir's effective excluded state. If the new value matches\n // the server default, drop the override key entirely — otherwise Save\n // would stay enabled with no real diff to send.\n const toggle = (name: string, currentEffective: boolean, serverDefault: boolean): void => {\n const next = !currentEffective\n setOverrides((prev) => {\n if (next === serverDefault) {\n if (!(name in prev)) return prev\n return Object.fromEntries(Object.entries(prev).filter(([k]) => k !== name))\n }\n if (prev[name] === next) return prev\n return { ...prev, [name]: next }\n })\n }\n\n const onSave = async (): Promise<void> => {\n setSaving(true)\n setError(null)\n try {\n // Build the new patterns: raw patterns the user couldn't edit\n // (anything that doesn't match a dir name or plugin path) +\n // <name> patterns for dirs the user wants excluded.\n const dirNames = new Set<string>()\n for (const d of dirs.data ?? []) dirNames.add(d.name + '/')\n for (const p of pluginDirs.data ?? []) dirNames.add(`plugin-config-data/${p.name}/`)\n\n const previousRawPatterns = (exclusions.data?.exclusions ?? []).filter(\n (p) => !dirNames.has(p)\n )\n\n const dirPatterns: string[] = []\n for (const d of dirs.data ?? []) {\n if (isExcluded(d.name, d.excluded)) dirPatterns.push(d.name + '/')\n }\n for (const p of pluginDirs.data ?? []) {\n const fullName = `plugin-config-data/${p.name}/`\n if (isExcluded(fullName, p.excluded)) dirPatterns.push(fullName)\n }\n\n const next = [...previousRawPatterns, ...dirPatterns]\n await api.setExclusions(next)\n exclusions.refresh()\n dirs.refresh()\n pluginDirs.refresh()\n setSavedAt(Date.now())\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setSaving(false)\n }\n }\n\n const dirty = Object.keys(overrides).length > 0\n\n return (\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Backup exclusions</strong>\n </CardHeader>\n <CardBody>\n {dirs.loading || pluginDirs.loading || exclusions.loading ? (\n <Spinner size=\"sm\" />\n ) : dirs.error || pluginDirs.error || exclusions.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {dirs.error ?? pluginDirs.error ?? exclusions.error}\n </Alert>\n ) : (\n <>\n <p className=\"text-muted small mb-3\">\n Uncheck a directory to exclude it from backups. Some plugin directories are\n locked-excluded by the server (live database state, our own kopia repo); see the note\n next to each.\n </p>\n\n <h6 className=\"mb-2\">Top-level directories</h6>\n <RowsTable rows={topLevelDirs} isExcluded={isExcluded} toggle={toggle} />\n\n <h6 className=\"mt-4 mb-1\">\n Plugin data <code className=\"small text-muted\">plugin-config-data/</code>\n </h6>\n <p className=\"text-muted small mb-2\">\n Per-plugin state under your SignalK config root.\n </p>\n\n {editablePluginDirs.length > 0 && (\n <>\n <div className=\"small text-muted fw-bold mb-1\">Editable</div>\n <RowsTable\n rows={editablePluginDirs}\n isExcluded={isExcluded}\n toggle={toggle}\n stripPrefix=\"plugin-config-data/\"\n />\n </>\n )}\n\n {lockedPluginDirs.length > 0 && (\n <>\n <div className=\"small text-muted fw-bold mt-3 mb-1\">Always excluded</div>\n <RowsTable\n rows={lockedPluginDirs}\n isExcluded={isExcluded}\n toggle={toggle}\n stripPrefix=\"plugin-config-data/\"\n showNote\n />\n </>\n )}\n\n <div className=\"d-flex align-items-center gap-2\">\n <Button color=\"primary\" disabled={!dirty || saving} onClick={() => void onSave()}>\n {saving ? <Spinner size=\"sm\" /> : 'Save'}\n </Button>\n {dirty && (\n <Button\n color=\"secondary\"\n outline\n disabled={saving}\n onClick={() => {\n setOverrides({})\n }}\n >\n Discard changes\n </Button>\n )}\n {savedAt && !dirty && <small className=\"text-success\">Saved.</small>}\n </div>\n\n {error && (\n <Alert color=\"danger\" className=\"mt-2 mb-0\">\n {error}\n </Alert>\n )}\n </>\n )}\n </CardBody>\n </Card>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Encryption password card\n// ---------------------------------------------------------------------------\nfunction PasswordCard() {\n const status = useApi(() => api.passwordStatus(), { intervalMs: 0 })\n const [editing, setEditing] = useState(false)\n const [password, setPassword] = useState('')\n const [confirm, setConfirm] = useState('')\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState<string | null>(null)\n const [resetting, setResetting] = useState(false)\n const [confirmReset, setConfirmReset] = useState(false)\n // Default masked — user opts in by clicking Show. Shoulder-surfing\n // protection only matters for custom passwords; the default kopia\n // password is publicly known anyway.\n const [revealed, setRevealed] = useState(false)\n const [copied, setCopied] = useState(false)\n\n const onCopy = async (text: string): Promise<void> => {\n try {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => {\n setCopied(false)\n }, 1500)\n } catch {\n // Clipboard API can be blocked (non-HTTPS, permissions); fall\n // back silently — the user can still see + select-to-copy.\n }\n }\n\n const onSave = async (): Promise<void> => {\n setError(null)\n setSuccess(null)\n if (password.length < 8) {\n setError('Password must be at least 8 characters.')\n return\n }\n if (password !== confirm) {\n setError(\"Passwords don't match.\")\n return\n }\n setSaving(true)\n try {\n await api.setPassword(password)\n setEditing(false)\n setPassword('')\n setConfirm('')\n status.refresh()\n setSuccess('Password updated.')\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setSaving(false)\n }\n }\n\n const onReset = async (): Promise<void> => {\n setResetting(true)\n setError(null)\n try {\n await api.resetPassword()\n setConfirmReset(false)\n status.refresh()\n setSuccess('Password reset to default.')\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setResetting(false)\n }\n }\n\n const hasCustom = status.data?.hasCustomPassword ?? false\n\n return (\n <Card>\n <CardHeader>\n <strong>Encryption password</strong>\n </CardHeader>\n <CardBody>\n <p className=\"text-muted small mb-3\">\n The kopia repository is encrypted at rest with this password. The default is publicly\n known; set a custom one if your backup destination (cloud sync, external drive) is\n accessible to anyone besides you.{' '}\n <strong>Forgetting your custom password makes existing backups unreadable.</strong>\n </p>\n\n {status.loading && !status.data ? (\n <Spinner size=\"sm\" />\n ) : status.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {status.error}\n </Alert>\n ) : (\n <>\n <div className=\"mb-3\">\n <Badge color={hasCustom ? 'success' : 'warning'}>\n {hasCustom ? 'Custom password set' : 'Default password (publicly known)'}\n </Badge>\n </div>\n\n {!editing && status.data?.password\n ? (() => {\n const pw = status.data.password\n return (\n <FormGroup>\n <Label for=\"current-password\">Current password</Label>\n <div className=\"d-flex gap-2 align-items-center\">\n <Input\n id=\"current-password\"\n type={revealed ? 'text' : 'password'}\n value={pw}\n readOnly\n style={{ fontFamily: 'monospace', maxWidth: '24rem' }}\n />\n <Button\n size=\"sm\"\n color=\"secondary\"\n outline\n onClick={() => {\n setRevealed((v) => !v)\n }}\n aria-label={revealed ? 'Hide password' : 'Show password'}\n >\n {revealed ? 'Hide' : 'Show'}\n </Button>\n <Button\n size=\"sm\"\n color=\"secondary\"\n outline\n onClick={() => {\n void onCopy(pw)\n }}\n >\n {copied ? 'Copied!' : 'Copy'}\n </Button>\n </div>\n </FormGroup>\n )\n })()\n : null}\n\n {editing ? (\n <Form\n onSubmit={(e) => {\n e.preventDefault()\n void onSave()\n }}\n >\n <FormGroup>\n <Label for=\"new-password\">New password</Label>\n <Input\n id=\"new-password\"\n type=\"password\"\n value={password}\n onChange={(e) => {\n setPassword(e.target.value)\n }}\n minLength={8}\n required\n disabled={saving}\n autoComplete=\"new-password\"\n />\n </FormGroup>\n <FormGroup>\n <Label for=\"confirm-password\">Confirm password</Label>\n <Input\n id=\"confirm-password\"\n type=\"password\"\n value={confirm}\n onChange={(e) => {\n setConfirm(e.target.value)\n }}\n minLength={8}\n required\n disabled={saving}\n autoComplete=\"new-password\"\n />\n </FormGroup>\n <div className=\"d-flex gap-2\">\n <Button color=\"primary\" type=\"submit\" disabled={saving}>\n {saving ? <Spinner size=\"sm\" /> : 'Save'}\n </Button>\n <Button\n color=\"secondary\"\n outline\n type=\"button\"\n disabled={saving}\n onClick={() => {\n setEditing(false)\n setPassword('')\n setConfirm('')\n setError(null)\n }}\n >\n Cancel\n </Button>\n </div>\n </Form>\n ) : (\n <div className=\"d-flex flex-wrap gap-2 align-items-center\">\n <Button\n color=\"primary\"\n onClick={() => {\n setEditing(true)\n setError(null)\n setSuccess(null)\n }}\n >\n {hasCustom ? 'Change password' : 'Set custom password'}\n </Button>\n {hasCustom &&\n (confirmReset ? (\n <>\n <span>Reset to default?</span>\n <Button\n color=\"warning\"\n size=\"sm\"\n disabled={resetting}\n onClick={() => void onReset()}\n >\n {resetting ? <Spinner size=\"sm\" /> : 'Reset'}\n </Button>\n <Button\n color=\"secondary\"\n outline\n size=\"sm\"\n disabled={resetting}\n onClick={() => {\n setConfirmReset(false)\n }}\n >\n Cancel\n </Button>\n </>\n ) : (\n <Button\n color=\"warning\"\n outline\n onClick={() => {\n setConfirmReset(true)\n }}\n >\n Reset to default\n </Button>\n ))}\n </div>\n )}\n\n {error && (\n <Alert color=\"danger\" className=\"mt-3 mb-0\">\n {error}\n </Alert>\n )}\n {success && (\n <Alert\n color=\"success\"\n className=\"mt-3 mb-0\"\n toggle={() => {\n setSuccess(null)\n }}\n >\n {success}\n </Alert>\n )}\n </>\n )}\n </CardBody>\n </Card>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Database export card\n// ---------------------------------------------------------------------------\n//\n// QuestDB lives in the signalk-questdb container's data dir and is\n// excluded from the filesystem-level snapshot (its WAL would tear in\n// flight). Instead the plugin periodically writes a Parquet export of\n// each table to a side-by-side directory inside the SignalK config\n// root; the next backup-server snapshot then captures those files.\n// Toggle here whether the exporter runs, and how often.\nfunction DbExportCard() {\n const cfg = useApi(() => api.dbExportConfig(), { intervalMs: 60_000 })\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState<string | null>(null)\n\n // Local mirror of the interval so the input can be edited freely\n // without thrashing the server. Synced from server when cfg.data\n // changes (e.g. after a successful save).\n const [intervalDraft, setIntervalDraft] = useState<string>('')\n useEffect(() => {\n if (cfg.data) setIntervalDraft(String(cfg.data.intervalMinutes))\n }, [cfg.data])\n\n const onToggleQuestdb = async (next: boolean): Promise<void> => {\n setBusy(true)\n setError(null)\n setSuccess(null)\n try {\n await api.dbExportConfigSet({ questdb: next })\n cfg.refresh()\n setSuccess(next ? 'QuestDB export enabled' : 'QuestDB export disabled')\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(false)\n }\n }\n\n const onToggleGrafana = async (next: boolean): Promise<void> => {\n setBusy(true)\n setError(null)\n setSuccess(null)\n try {\n await api.dbExportConfigSet({ grafana: next })\n cfg.refresh()\n setSuccess(next ? 'Grafana export enabled' : 'Grafana export disabled')\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(false)\n }\n }\n\n const onToggleSignalkDatabase = async (next: boolean): Promise<void> => {\n setBusy(true)\n setError(null)\n setSuccess(null)\n try {\n await api.dbExportConfigSet({ signalkDatabase: next })\n cfg.refresh()\n setSuccess(next ? 'SignalK Database export enabled' : 'SignalK Database export disabled')\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(false)\n }\n }\n\n const onSaveInterval = async (): Promise<void> => {\n const parsed = parseInt(intervalDraft, 10)\n if (!Number.isFinite(parsed) || parsed < 5 || parsed > 1440) {\n setError('Interval must be between 5 and 1440 minutes.')\n return\n }\n setBusy(true)\n setError(null)\n setSuccess(null)\n try {\n await api.dbExportConfigSet({ intervalMinutes: parsed })\n cfg.refresh()\n setSuccess(`Export interval set to ${parsed} minutes`)\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(false)\n }\n }\n\n const data = cfg.data\n const intervalChanged = data ? String(data.intervalMinutes) !== intervalDraft : false\n\n return (\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Database export</strong>\n </CardHeader>\n <CardBody>\n {cfg.loading && !data ? (\n <Spinner size=\"sm\" />\n ) : cfg.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {cfg.error}\n </Alert>\n ) : data ? (\n <>\n <p className=\"text-muted small mb-3\">\n When enabled, the plugin periodically exports database tables to Parquet files inside\n the SignalK config root. The next backup-server snapshot then captures them as part of\n the regular backup. Filesystem-level database files (WAL etc.) are still excluded.\n </p>\n\n <FormGroup switch className=\"mb-3\">\n <Input\n id=\"db-export-questdb\"\n type=\"switch\"\n role=\"switch\"\n checked={data.questdb}\n disabled={busy}\n onChange={(e) => void onToggleQuestdb(e.target.checked)}\n />\n <Label for=\"db-export-questdb\" check>\n Export QuestDB tables to backup\n </Label>\n </FormGroup>\n\n <FormGroup switch className=\"mb-3\">\n <Input\n id=\"db-export-grafana\"\n type=\"switch\"\n role=\"switch\"\n checked={data.grafana}\n disabled={busy}\n onChange={(e) => void onToggleGrafana(e.target.checked)}\n />\n <Label for=\"db-export-grafana\" check>\n Export Grafana dashboards, provisioning, and SQLite checkpoint\n </Label>\n </FormGroup>\n\n <FormGroup switch className=\"mb-3\">\n <Input\n id=\"db-export-signalk-database\"\n type=\"switch\"\n role=\"switch\"\n checked={data.signalkDatabase}\n disabled={busy}\n onChange={(e) => void onToggleSignalkDatabase(e.target.checked)}\n />\n <Label for=\"db-export-signalk-database\" check>\n Export SignalK Database plugin DBs (VACUUM INTO per plugin)\n </Label>\n </FormGroup>\n\n <FormGroup>\n <Label for=\"db-export-interval\">Export interval (minutes)</Label>\n <div className=\"d-flex gap-2\">\n <Input\n id=\"db-export-interval\"\n type=\"number\"\n min={5}\n max={1440}\n step={5}\n value={intervalDraft}\n disabled={busy}\n onChange={(e) => {\n setIntervalDraft(e.target.value)\n }}\n style={{ maxWidth: '12em' }}\n />\n <Button\n color=\"primary\"\n disabled={busy || !intervalChanged}\n onClick={() => void onSaveInterval()}\n >\n {busy ? <Spinner size=\"sm\" /> : 'Save'}\n </Button>\n </div>\n <small className=\"text-muted\">\n Default 60. Lower values keep DB data fresher in backups but write more often.\n Effective freshness is bounded by max(this interval, the snapshot interval).\n </small>\n </FormGroup>\n\n {error && (\n <Alert color=\"danger\" className=\"mt-2 mb-0\">\n {error}\n </Alert>\n )}\n {success && (\n <Alert color=\"success\" className=\"mt-2 mb-0\">\n {success}\n </Alert>\n )}\n </>\n ) : null}\n </CardBody>\n </Card>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Retention card\n// ---------------------------------------------------------------------------\n//\n// Controls how many of each scheduled-backup tier kopia keeps. Manual\n// backups are deliberately absent — never auto-pruned, because the\n// user explicitly created them. The server-side enforcement runs after\n// every successful scheduled backup; lowering a number takes effect\n// at the next scheduled run, not retroactively.\nfunction RetentionCard() {\n const cfg = useApi(() => api.retention(), { intervalMs: 60_000 })\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState<string | null>(null)\n\n // Local mirror so each input edits freely without thrashing the server.\n type RetentionDraft = { hourly: string; daily: string; weekly: string; startup: string }\n const [draft, setDraft] = useState<RetentionDraft>({\n hourly: '',\n daily: '',\n weekly: '',\n startup: ''\n })\n\n // Snapshot of the canonical server values the draft was last synced\n // from. Lets the poll effect tell \"user has unsaved edits\" (draft\n // diverges from snapshot) from \"user hasn't touched the form since\n // last sync\" (draft equals snapshot).\n const [serverSnapshot, setServerSnapshot] = useState<RetentionDraft>({\n hourly: '',\n daily: '',\n weekly: '',\n startup: ''\n })\n\n // Refs mirror the latest state so the poll effect (deps: [cfg.data])\n // reads current values, not the stale closure from the render where\n // the effect was wired up. Without these, the comparison below would\n // be against whatever draft/snapshot existed at the previous effect\n // run, not the latest user edits.\n const draftRef = useRef(draft)\n const snapshotRef = useRef(serverSnapshot)\n useEffect(() => {\n draftRef.current = draft\n }, [draft])\n useEffect(() => {\n snapshotRef.current = serverSnapshot\n }, [serverSnapshot])\n\n useEffect(() => {\n if (!cfg.data) return\n const canonical: RetentionDraft = {\n hourly: String(cfg.data.hourly),\n daily: String(cfg.data.daily),\n weekly: String(cfg.data.weekly),\n startup: String(cfg.data.startup)\n }\n const currentDraft = draftRef.current\n const currentSnapshot = snapshotRef.current\n // Skip sync when the user has unsaved edits — preserve their input.\n // First-load drafts are all '' === serverSnapshot's '' so the\n // empty-string check covers it.\n const draftIsClean =\n currentDraft.hourly === currentSnapshot.hourly &&\n currentDraft.daily === currentSnapshot.daily &&\n currentDraft.weekly === currentSnapshot.weekly &&\n currentDraft.startup === currentSnapshot.startup\n if (draftIsClean) {\n setDraft(canonical)\n }\n setServerSnapshot(canonical)\n }, [cfg.data])\n\n const onSave = async (): Promise<void> => {\n // Clear previous feedback up front — otherwise a prior success\n // alert sticks around even if this attempt fails validation.\n setError(null)\n setSuccess(null)\n\n // Strict integer parse — parseInt would silently accept \"1.9\" → 1\n // or \"12abc\" → 12, both wrong here. Match digits-only first, then\n // bounds-check the result.\n const INT_RE = /^\\d+$/\n const fields = ['hourly', 'daily', 'weekly', 'startup'] as const\n const parsed = {} as Record<(typeof fields)[number], number>\n for (const k of fields) {\n const raw = draft[k].trim()\n if (!INT_RE.test(raw)) {\n setError(`${k} must be a whole number between 1 and 365`)\n return\n }\n const v = Number(raw)\n if (v < 1 || v > 365) {\n setError(`${k} must be a whole number between 1 and 365`)\n return\n }\n parsed[k] = v\n }\n setBusy(true)\n try {\n await api.setRetention(parsed)\n cfg.refresh()\n setSuccess('Retention policy saved')\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(false)\n }\n }\n\n const dirty =\n cfg.data !== null &&\n (String(cfg.data.hourly) !== draft.hourly ||\n String(cfg.data.daily) !== draft.daily ||\n String(cfg.data.weekly) !== draft.weekly ||\n String(cfg.data.startup) !== draft.startup)\n\n const tiers: { key: 'hourly' | 'daily' | 'weekly' | 'startup'; label: string; help: string }[] = [\n { key: 'hourly', label: 'Hourly', help: '24 = one full day at 1-per-hour' },\n { key: 'daily', label: 'Daily', help: '7 = one full week at 1-per-day' },\n { key: 'weekly', label: 'Weekly', help: '4 = roughly one month' },\n { key: 'startup', label: 'On startup', help: 'Created when SignalK boots after >24h offline' }\n ]\n\n return (\n <Card className=\"mb-3\">\n <CardHeader>\n <strong>Retention</strong>\n </CardHeader>\n <CardBody>\n {cfg.loading && !cfg.data ? (\n <Spinner size=\"sm\" />\n ) : cfg.error ? (\n <Alert color=\"danger\" className=\"mb-0\">\n {cfg.error}\n </Alert>\n ) : cfg.data ? (\n <>\n <p className=\"text-muted small mb-3\">\n How many backups of each scheduled tier to keep. Older ones get pruned after the next\n scheduled backup. Manual backups are never auto-pruned.\n </p>\n\n <Form\n onSubmit={(e) => {\n e.preventDefault()\n void onSave()\n }}\n >\n {tiers.map((t) => (\n <FormGroup key={t.key} className=\"mb-2\">\n <Label for={`retention-${t.key}`}>{t.label}</Label>\n <div className=\"d-flex gap-2 align-items-center\">\n <Input\n id={`retention-${t.key}`}\n type=\"number\"\n min={1}\n max={365}\n step={1}\n value={draft[t.key]}\n disabled={busy}\n onChange={(e) => {\n setDraft((d) => ({ ...d, [t.key]: e.target.value }))\n }}\n style={{ maxWidth: '8em' }}\n />\n <small className=\"text-muted\">{t.help}</small>\n </div>\n </FormGroup>\n ))}\n\n <Button color=\"primary\" type=\"submit\" disabled={busy || !dirty} className=\"mt-2\">\n {busy ? <Spinner size=\"sm\" /> : 'Save retention policy'}\n </Button>\n </Form>\n\n {error && (\n <Alert color=\"danger\" className=\"mt-3 mb-0\">\n {error}\n </Alert>\n )}\n {success && (\n <Alert color=\"success\" className=\"mt-3 mb-0\">\n {success}\n </Alert>\n )}\n </>\n ) : null}\n </CardBody>\n </Card>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Page\n// ---------------------------------------------------------------------------\nexport function Settings() {\n return (\n <>\n <h2 className=\"mb-3\">Settings</h2>\n <SchedulerCard />\n <RetentionCard />\n <ExclusionsCard />\n <DbExportCard />\n <PasswordCard />\n </>\n )\n}\n","import { useState } from 'react'\nimport { Container, Nav, NavItem, NavLink } from 'reactstrap'\nimport { Dashboard } from './views/Dashboard'\nimport { Backups } from './views/Backups'\nimport { Cloud } from './views/Cloud'\nimport { DatabaseExports } from './views/DatabaseExports'\nimport { Settings } from './views/Settings'\n\ntype Route = 'dashboard' | 'backups' | 'database-exports' | 'cloud' | 'settings'\n\nconst ROUTES: { id: Route; label: string }[] = [\n { id: 'dashboard', label: 'Dashboard' },\n { id: 'backups', label: 'Backups' },\n { id: 'database-exports', label: 'Database exports' },\n { id: 'cloud', label: 'Cloud sync' },\n { id: 'settings', label: 'Settings' }\n]\n\n// In-memory tab state; admin owns hash (#/e/signalk_backup) so we can't write to it without breaking navigation.\nexport function App() {\n const [route, setRoute] = useState<Route>('dashboard')\n\n return (\n <Container className=\"py-4\">\n <div className=\"d-flex align-items-center mb-4\">\n <img src=\"/signalk-backup/icon.svg\" alt=\"\" width={40} height={40} className=\"me-3\" />\n <h1 className=\"mb-0\">SignalK Backup</h1>\n <small className=\"text-muted ms-3 align-self-end mb-2\">v{__PLUGIN_VERSION__}</small>\n </div>\n\n <Nav tabs className=\"mb-3\">\n {ROUTES.map((r) => (\n <NavItem key={r.id}>\n <NavLink\n href=\"#\"\n active={route === r.id}\n onClick={(e) => {\n e.preventDefault()\n setRoute(r.id)\n }}\n >\n {r.label}\n </NavLink>\n </NavItem>\n ))}\n </Nav>\n\n {route === 'dashboard' && <Dashboard />}\n {route === 'backups' && <Backups />}\n {route === 'database-exports' && <DatabaseExports />}\n {route === 'cloud' && <Cloud />}\n {route === 'settings' && <Settings />}\n </Container>\n )\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"mappings":"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"}
|