airdcpp-webui 2.13.1-beta.9 → 2.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/index.html +1 -1
  2. package/dist/js/223.3c648d224ecdf7df15cb.chunk.js +2 -0
  3. package/dist/js/223.3c648d224ecdf7df15cb.chunk.js.gz +0 -0
  4. package/dist/js/223.3c648d224ecdf7df15cb.chunk.js.map +1 -0
  5. package/dist/js/{filelists.913207a5f957082c811d.chunk.js → filelists.005c956eabdbb3869c6f.chunk.js} +2 -2
  6. package/dist/js/filelists.005c956eabdbb3869c6f.chunk.js.gz +0 -0
  7. package/dist/js/filelists.005c956eabdbb3869c6f.chunk.js.map +1 -0
  8. package/dist/js/hubs.29f2e7fde513aa2aa81a.chunk.js +2 -0
  9. package/dist/js/hubs.29f2e7fde513aa2aa81a.chunk.js.gz +0 -0
  10. package/dist/js/hubs.29f2e7fde513aa2aa81a.chunk.js.map +1 -0
  11. package/dist/js/{main.1408811d6831f662f421.entry.js → main.e2f715744e80ce3a09aa.entry.js} +3 -3
  12. package/dist/js/main.e2f715744e80ce3a09aa.entry.js.gz +0 -0
  13. package/dist/js/{main.1408811d6831f662f421.entry.js.map → main.e2f715744e80ce3a09aa.entry.js.map} +1 -1
  14. package/dist/js/{queue.4095b1ea967e164737e6.chunk.js → queue.493c6d72a2e6d66362a3.chunk.js} +2 -2
  15. package/dist/js/queue.493c6d72a2e6d66362a3.chunk.js.gz +0 -0
  16. package/dist/js/queue.493c6d72a2e6d66362a3.chunk.js.map +1 -0
  17. package/dist/js/settings.ae1be9e0a1c99eed7597.chunk.js +2 -0
  18. package/dist/js/settings.ae1be9e0a1c99eed7597.chunk.js.gz +0 -0
  19. package/dist/js/settings.ae1be9e0a1c99eed7597.chunk.js.map +1 -0
  20. package/dist/sw.js +1 -1
  21. package/dist/sw.js.gz +0 -0
  22. package/package.json +1 -1
  23. package/dist/js/223.e1724bcbb15b37be3e66.chunk.js +0 -2
  24. package/dist/js/223.e1724bcbb15b37be3e66.chunk.js.gz +0 -0
  25. package/dist/js/223.e1724bcbb15b37be3e66.chunk.js.map +0 -1
  26. package/dist/js/filelists.913207a5f957082c811d.chunk.js.gz +0 -0
  27. package/dist/js/filelists.913207a5f957082c811d.chunk.js.map +0 -1
  28. package/dist/js/hubs.b1afb9f790924d60d294.chunk.js +0 -2
  29. package/dist/js/hubs.b1afb9f790924d60d294.chunk.js.gz +0 -0
  30. package/dist/js/hubs.b1afb9f790924d60d294.chunk.js.map +0 -1
  31. package/dist/js/main.1408811d6831f662f421.entry.js.gz +0 -0
  32. package/dist/js/queue.4095b1ea967e164737e6.chunk.js.gz +0 -0
  33. package/dist/js/queue.4095b1ea967e164737e6.chunk.js.map +0 -1
  34. package/dist/js/settings.1287a0ef1d611a34ea1c.chunk.js +0 -2
  35. package/dist/js/settings.1287a0ef1d611a34ea1c.chunk.js.gz +0 -0
  36. package/dist/js/settings.1287a0ef1d611a34ea1c.chunk.js.map +0 -1
  37. /package/dist/js/{main.1408811d6831f662f421.entry.js.LICENSE.txt → main.e2f715744e80ce3a09aa.entry.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/hubs.b1afb9f790924d60d294.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/style.css","webpack://airdcpp-webui/./src/components/icon/HubIcon.tsx","webpack://airdcpp-webui/./src/stores/reflux/HubMessageStore.ts","webpack://airdcpp-webui/./src/stores/views/HubUserViewStore.js","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubUserTable.tsx","webpack://airdcpp-webui/./src/actions/ui/hub/HubSettingActions.ts","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubFooter.tsx","webpack://airdcpp-webui/./src/services/api/HubApi.ts","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubPrompt.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/style.css?5587","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubSession.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/HubNew.tsx","webpack://airdcpp-webui/./src/actions/ui/hub/HubActions.ts","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Hubs/components/Hubs.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.hub-action-prompt {\n flex-direction: column;\n align-items: flex-start !important;\n}\n\n.hub-action-prompt .header {\n margin: 0 0 1rem !important;\n}\n\n.hub-action-prompt .password.prompt .help {\n margin-top: 10px;\n}\n\n.hub-action-prompt .redirect.prompt {\n max-width: 100%;\n overflow: hidden;\n}\n\n.hub.session .virtual-table,\n.hub.session .offline-message,\n.hub.session .loader-wrapper {\n flex: 1;\n margin-top: 5px;\n}\n\n.hub.session .cell-wrapper.tag,\n.hub.session .cell-wrapper.nick,\n.hub.session .cell-wrapper.description,\n.hub.session .cell-wrapper.share_size {\n overflow: hidden;\n white-space: nowrap;\n}\n\n.hub.session .cell-wrapper.nick.op {\n color: steelblue;\n}\n.hub.session .session-footer .actions-wrapper > a,\n.hub.session .session-footer .actions-wrapper > div {\n /* Don't cut the shadow */\n padding-left: 1px;\n padding-bottom: 1px;\n}\n\n.hub.session .session-footer #userlist-toggle label {\n color: grey;\n font-size: small;\n}\n\n.hub.session .session-footer .actions-wrapper .dropdown {\n margin-left: 10px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Sidebar/routes/Hubs/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,sBAAsB;EACtB,kCAAkC;AACpC;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,eAAe;EACf,gBAAgB;AAClB;;AAEA;;;EAGE,OAAO;EACP,eAAe;AACjB;;AAEA;;;;EAIE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;AAClB;AACA;;EAEE,yBAAyB;EACzB,iBAAiB;EACjB,mBAAmB;AACrB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB\",\"sourcesContent\":[\".hub-action-prompt {\\n flex-direction: column;\\n align-items: flex-start !important;\\n}\\n\\n.hub-action-prompt .header {\\n margin: 0 0 1rem !important;\\n}\\n\\n.hub-action-prompt .password.prompt .help {\\n margin-top: 10px;\\n}\\n\\n.hub-action-prompt .redirect.prompt {\\n max-width: 100%;\\n overflow: hidden;\\n}\\n\\n.hub.session .virtual-table,\\n.hub.session .offline-message,\\n.hub.session .loader-wrapper {\\n flex: 1;\\n margin-top: 5px;\\n}\\n\\n.hub.session .cell-wrapper.tag,\\n.hub.session .cell-wrapper.nick,\\n.hub.session .cell-wrapper.description,\\n.hub.session .cell-wrapper.share_size {\\n overflow: hidden;\\n white-space: nowrap;\\n}\\n\\n.hub.session .cell-wrapper.nick.op {\\n color: steelblue;\\n}\\n.hub.session .session-footer .actions-wrapper > a,\\n.hub.session .session-footer .actions-wrapper > div {\\n /* Don't cut the shadow */\\n padding-left: 1px;\\n padding-bottom: 1px;\\n}\\n\\n.hub.session .session-footer #userlist-toggle label {\\n color: grey;\\n font-size: small;\\n}\\n\\n.hub.session .session-footer .actions-wrapper .dropdown {\\n margin-left: 10px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import * as React from 'react';\n\nimport Icon, { IconProps } from 'components/semantic/Icon';\nimport { hubOnlineStatusToColor } from 'utils/TypeConvert';\n\nimport * as API from 'types/api';\n\ninterface HubIconProps extends IconProps {\n hub: API.Hub;\n}\n\nconst HubIcon: React.FC<HubIconProps> = ({ hub, ...other }) => (\n <Icon {...other} icon={hubOnlineStatusToColor(hub.connect_state.id) + ' sitemap'} />\n);\n\nexport default HubIcon;\n","//@ts-ignore\r\nimport Reflux from 'reflux';\r\nimport invariant from 'invariant';\r\n\r\nimport HubConstants from 'constants/HubConstants';\r\nimport HubActions from 'actions/reflux/HubActions';\r\n\r\nimport MessageStoreDecorator from '../decorators/MessageStoreDecorator';\r\n\r\nimport { SessionScrollPositionKeeper } from '../helpers/SessionScrollPositionKeeper';\r\nimport { AddSocketListener } from 'decorators/SocketSubscriptionDecorator';\r\n\r\nimport * as API from 'types/api';\r\n\r\nconst HubMessageStore = Reflux.createStore({\r\n scroll: SessionScrollPositionKeeper(),\r\n\r\n onSocketConnected(addSocketListener: AddSocketListener) {\r\n invariant(\r\n !this.hasMessages(),\r\n 'No existing hub messages should exist on socket connect',\r\n );\r\n invariant(\r\n !this.hasInitializedSessions(),\r\n 'No initialized hub sessions should exist on socket connect',\r\n );\r\n\r\n addSocketListener(\r\n HubConstants.MODULE_URL,\r\n HubConstants.HUB_MESSAGE,\r\n this._onChatMessage,\r\n );\r\n addSocketListener(\r\n HubConstants.MODULE_URL,\r\n HubConstants.HUB_STATUS_MESSAGE,\r\n this._onStatusMessage,\r\n );\r\n\r\n addSocketListener(\r\n HubConstants.MODULE_URL,\r\n HubConstants.SESSION_UPDATED,\r\n this._onSessionUpdated,\r\n );\r\n addSocketListener(\r\n HubConstants.MODULE_URL,\r\n HubConstants.SESSION_REMOVED,\r\n this._onSessionRemoved,\r\n );\r\n },\r\n});\r\n\r\nexport default MessageStoreDecorator(\r\n HubMessageStore,\r\n HubActions,\r\n API.AccessEnum.HUBS_VIEW,\r\n);\r\n","import ViewStoreMixin from 'mixins/ViewStoreMixin';\nimport Reflux from 'reflux';\nimport HubConstants from 'constants/HubConstants';\nimport HubSessionStore from '../reflux/HubSessionStore';\n\nexport default Reflux.createStore({\n _viewName: 'hub_user_view',\n _apiUrl: HubConstants.SESSIONS_URL,\n _sessionStore: HubSessionStore,\n mixins: [ViewStoreMixin('nick')],\n});\n","import * as React from 'react';\r\n\r\nimport HubSessionStore from 'stores/reflux/HubSessionStore';\r\nimport HubUserViewStore from 'stores/views/HubUserViewStore';\r\n\r\nimport { Column } from 'fixed-data-table-2';\r\nimport VirtualTable from 'components/table/VirtualTable';\r\nimport { SizeCell, ConnectionCell, IpCell } from 'components/table/Cell';\r\n\r\nimport { TableUserMenu } from 'components/action-menu';\r\n\r\nimport Message from 'components/semantic/Message';\r\nimport Loader from 'components/semantic/Loader';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport MenuConstants from 'constants/MenuConstants';\r\n\r\ninterface NickCellProps extends RowWrapperCellChildProps<string, API.HubUser> {\r\n session: API.Hub;\r\n}\r\n\r\nconst NickCell: React.FC<NickCellProps> = ({ cellData, rowDataGetter, session }) => (\r\n <TableUserMenu\r\n text={cellData}\r\n user={rowDataGetter!()}\r\n userIcon={true}\r\n remoteMenuId={MenuConstants.HUB_USER}\r\n entity={session}\r\n />\r\n);\r\n\r\ninterface HubUserTableProps {\r\n session: API.Hub;\r\n sessionT: UI.ModuleTranslator;\r\n}\r\n\r\nclass HubUserTable extends React.Component<HubUserTableProps> {\r\n rowClassNameGetter = (user: API.HubUser) => {\r\n return user.flags.join(' ');\r\n };\r\n\r\n emptyRowsNodeGetter = () => {\r\n const { session, sessionT } = this.props;\r\n const connectState = session.connect_state.id;\r\n\r\n if (\r\n connectState === API.HubConnectStateEnum.DISCONNECTED ||\r\n connectState === API.HubConnectStateEnum.REDIRECT\r\n ) {\r\n return (\r\n <div className=\"offline-message\">\r\n <Message\r\n className=\"offline\"\r\n title={sessionT.translate('Not connected to the hub')}\r\n icon={IconConstants.OFFLINE}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n const text = sessionT.translate(\r\n connectState !== API.HubConnectStateEnum.CONNECTED\r\n ? 'Connecting'\r\n : 'Loading userlist',\r\n );\r\n\r\n return (\r\n <div className=\"loader-wrapper\">\r\n <Loader text={text} />\r\n </div>\r\n );\r\n };\r\n\r\n render() {\r\n const { session } = this.props;\r\n return (\r\n <VirtualTable\r\n store={HubUserViewStore}\r\n entityId={session.id}\r\n sessionStore={HubSessionStore}\r\n rowClassNameGetter={this.rowClassNameGetter}\r\n emptyRowsNodeGetter={this.emptyRowsNodeGetter}\r\n moduleId={UI.Modules.HUBS}\r\n >\r\n <Column\r\n name=\"Nick\"\r\n width={170}\r\n columnKey=\"nick\"\r\n flexGrow={8}\r\n cell={<NickCell session={session} />}\r\n />\r\n <Column\r\n name=\"Share size\"\r\n width={85}\r\n columnKey=\"share_size\"\r\n cell={<SizeCell />}\r\n flexGrow={1}\r\n />\r\n <Column name=\"Description\" width={100} columnKey=\"description\" flexGrow={1} />\r\n <Column name=\"Tag\" width={150} columnKey=\"tag\" flexGrow={2} />\r\n <Column\r\n name=\"Upload speed\"\r\n width={80}\r\n columnKey=\"upload_speed\"\r\n cell={<ConnectionCell />}\r\n flexGrow={2}\r\n />\r\n <Column\r\n name=\"Download speed\"\r\n width={80}\r\n columnKey=\"download_speed\"\r\n cell={<ConnectionCell />}\r\n flexGrow={2}\r\n />\r\n <Column\r\n name=\"IP (v4)\"\r\n width={120}\r\n columnKey=\"ip4\"\r\n flexGrow={3}\r\n cell={<IpCell />}\r\n />\r\n <Column\r\n name=\"IP (v6)\"\r\n width={120}\r\n columnKey=\"ip6\"\r\n flexGrow={3}\r\n cell={<IpCell />}\r\n />\r\n <Column name=\"Files\" width={70} columnKey=\"file_count\" flexGrow={3} />\r\n </VirtualTable>\r\n );\r\n }\r\n}\r\n\r\nexport default HubUserTable;\r\n","import HubConstants from 'constants/HubConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nconst handleToggleChatNotify: UI.ActionHandler<API.Hub> = ({ itemData: hub, socket }) => {\r\n return socket.patch(`${HubConstants.SESSIONS_URL}/${hub.id}`, {\r\n use_main_chat_notify: !hub.settings.use_main_chat_notify,\r\n });\r\n};\r\n\r\nconst handleToggleJoins: UI.ActionHandler<API.Hub> = ({ itemData: hub, socket }) => {\r\n return socket.patch(`${HubConstants.SESSIONS_URL}/${hub.id}`, {\r\n show_joins: !hub.settings.show_joins,\r\n });\r\n};\r\n\r\nexport const HubToggleChatNotifyAction = {\r\n id: 'toggleChatNotify',\r\n displayName: 'Use chat notification',\r\n access: API.AccessEnum.HUBS_EDIT,\r\n handler: handleToggleChatNotify,\r\n checked: (hub: API.Hub) => {\r\n return hub.settings.use_main_chat_notify;\r\n },\r\n};\r\n\r\nexport const HubToggleShowJoinsAction = {\r\n id: 'toggleShowJoins',\r\n displayName: 'Show joins/parts',\r\n access: API.AccessEnum.HUBS_EDIT,\r\n handler: handleToggleJoins,\r\n checked: (hub: API.Hub) => {\r\n return hub.settings.show_joins;\r\n },\r\n};\r\n\r\nconst HubSettingActions: UI.ActionListType<API.Hub> = {\r\n toggleChatNotify: HubToggleChatNotifyAction,\r\n toggleShowJoins: HubToggleShowJoinsAction,\r\n};\r\n\r\nexport const HubSettingActionModule = {\r\n moduleId: UI.Modules.HUBS,\r\n};\r\n\r\nexport const HubSettingActionMenu = {\r\n moduleData: HubSettingActionModule,\r\n actions: HubSettingActions,\r\n};\r\n","import { useEffect, useState } from 'react';\r\n\r\nimport * as React from 'react';\r\n\r\nimport HubConstants from 'constants/HubConstants';\r\nimport HubSessionStore from 'stores/reflux/HubSessionStore';\r\n\r\nimport { useFormatter } from 'context/FormatterContext';\r\nimport { SessionFooter, FooterItem } from 'routes/Sidebar/components/SessionFooter';\r\nimport EncryptionState from 'components/EncryptionState';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { ErrorResponse } from 'airdcpp-apisocket';\r\nimport {\r\n SocketSubscriptionDecorator,\r\n SocketSubscriptionDecoratorChildProps,\r\n} from 'decorators/SocketSubscriptionDecorator';\r\nimport { usingMobileLayout } from 'utils/BrowserUtils';\r\nimport { useLayoutWidth } from 'context/LayoutWidthContext';\r\nimport { ActionMenu } from 'components/action-menu';\r\nimport { HubSettingActionMenu } from 'actions/ui/hub/HubSettingActions';\r\nimport { useSocket } from 'context/SocketContext';\r\n\r\ninterface HubFooterProps {\r\n session: API.Hub;\r\n userlistToggle: React.ReactNode;\r\n sessionT: UI.ModuleTranslator;\r\n}\r\n\r\ntype DataProps = SocketSubscriptionDecoratorChildProps<HubFooterProps>;\r\nconst HubFooter: React.FC<HubFooterProps & DataProps> = (props) => {\r\n const { formatSize } = useFormatter();\r\n const socket = useSocket();\r\n const [counts, setCounts] = useState<API.HubCounts>({\r\n share_size: 0,\r\n user_count: 0,\r\n });\r\n\r\n useEffect(() => {\r\n // Fetch initial\r\n socket\r\n .get<API.HubCounts>(`${HubConstants.SESSIONS_URL}/${props.session.id}/counts`)\r\n .then(setCounts)\r\n .catch((error: ErrorResponse) =>\r\n console.error('Failed to fetch hub counts', error.message),\r\n );\r\n\r\n // Subscription\r\n const url = HubConstants.SESSIONS_URL;\r\n props.addSocketListener(\r\n url,\r\n HubConstants.SESSION_COUNTS_UPDATED,\r\n (data: API.HubCounts) => setCounts(data),\r\n props.session.id,\r\n );\r\n\r\n return () => props.removeSocketListeners(props);\r\n }, [props.session]);\r\n\r\n const layoutWidth = useLayoutWidth();\r\n\r\n const { userlistToggle, session, sessionT } = props;\r\n const { user_count: users, share_size: shared } = counts;\r\n\r\n const averageShare = formatSize(users > 0 ? shared / users : 0);\r\n return (\r\n <SessionFooter>\r\n <FooterItem\r\n text={\r\n <>\r\n <EncryptionState encryption={session.encryption} />\r\n {sessionT.t('xUsers', {\r\n defaultValue: '{{count}} user',\r\n defaultValue_plural: '{{count}} users',\r\n count: users,\r\n replace: {\r\n count: users,\r\n },\r\n })}\r\n </>\r\n }\r\n />\r\n {!usingMobileLayout(layoutWidth) && (\r\n <FooterItem\r\n text={sessionT.t('sharePerUser', {\r\n defaultValue: '{{total}} ({{average}}/user)',\r\n replace: {\r\n total: formatSize(shared),\r\n average: averageShare,\r\n },\r\n })}\r\n />\r\n )}\r\n <div className=\"actions-wrapper\">\r\n <div className=\"actions\">\r\n {userlistToggle}\r\n <ActionMenu\r\n className=\"top left pointing\"\r\n actions={HubSettingActionMenu}\r\n header={sessionT.translate('Notification settings')}\r\n itemData={session}\r\n triggerIcon={\r\n session.settings.use_main_chat_notify || session.settings.show_joins\r\n ? 'yellow bell'\r\n : 'bell'\r\n }\r\n />\r\n </div>\r\n </div>\r\n </SessionFooter>\r\n );\r\n};\r\n\r\nexport default SocketSubscriptionDecorator(\r\n HubFooter,\r\n ({ session }) => !!HubSessionStore.getSession(session.id),\r\n);\r\n","import HubConstants from 'constants/HubConstants';\nimport SocketService from 'services/SocketService';\n\nimport * as API from 'types/api';\nimport {\n sendChatMessageDecorator,\n clearMessagesDecorator,\n setReadDecorator,\n fetchMessagesDecorator,\n} from './common/ChatActions';\n//import * as UI from 'types/ui';\n\nexport const sendHubPassword = (hub: API.Hub, password: string) => {\n return SocketService.post(`${HubConstants.SESSIONS_URL}/${hub.id}/password`, {\n password: password,\n });\n};\n\nexport const acceptHubRedirect = (hub: API.Hub) => {\n return SocketService.post(`${HubConstants.SESSIONS_URL}/${hub.id}/redirect`);\n};\n\nexport const sendHubChatMessage = sendChatMessageDecorator(HubConstants.SESSIONS_URL);\nexport const clearHubChatMessages = clearMessagesDecorator(HubConstants.SESSIONS_URL);\nexport const fetchHubChatMessages = fetchMessagesDecorator(HubConstants.SESSIONS_URL);\n\nexport const setHubSessionRead = setReadDecorator(HubConstants.SESSIONS_URL);\n","import * as React from 'react';\n\nimport ActionInput from 'components/semantic/ActionInput';\nimport Button from 'components/semantic/Button';\n\nimport Icon, { IconType } from 'components/semantic/Icon';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport { Trans } from 'react-i18next';\nimport { sendHubPassword, acceptHubRedirect } from 'services/api/HubApi';\nimport { runBackgroundSocketAction } from 'utils/ActionUtils';\nimport IconConstants from 'constants/IconConstants';\nimport { useSession } from 'context/SessionContext';\n\ninterface HubActionPromptProps {\n icon: IconType;\n title: React.ReactNode;\n content: React.ReactNode;\n}\n\n// Main prompt (HUBS_EDIT permission is required for the content to be rendered)\nconst HubActionPrompt: React.FC<HubActionPromptProps> = ({ icon, title, content }) => {\n const { hasAccess } = useSession();\n if (!hasAccess(API.AccessEnum.HUBS_EDIT)) {\n return null;\n }\n\n return (\n <div className=\"ui icon message hub-action-prompt\">\n <h3 className=\"ui header\">\n <Icon icon={icon} />\n <div className=\"content\">{title}</div>\n </h3>\n {content}\n </div>\n );\n};\n\ninterface PasswordPromptProps {\n hub: API.Hub;\n sessionT: UI.ModuleTranslator;\n}\n\n// Sub prompts\nconst PasswordPrompt: React.FC<PasswordPromptProps> = ({ hub, sessionT }) => (\n <div className=\"password prompt\">\n <ActionInput\n placeholder={sessionT.translate('Password')}\n caption={sessionT.translate('Submit')}\n icon={IconConstants.CONNECT}\n handleAction={(text) =>\n runBackgroundSocketAction(() => sendHubPassword(hub, text), sessionT.plainT)\n }\n />\n <div className=\"help\">\n <Trans i18nKey={sessionT.toI18nKey('passwordPromptHelp')}>\n This usually means that there's a registered account associated with your nick. If\n you don't remember having a registered account in this hub, there may be someone\n else using the same nick.\n </Trans>\n </div>\n </div>\n);\n\ninterface RedirectPromptProps {\n hub: API.Hub;\n sessionT: UI.ModuleTranslator;\n}\n\nconst RedirectPrompt: React.FC<RedirectPromptProps> = ({ hub, sessionT }) => (\n <Button\n className=\"redirect prompt\"\n icon={IconConstants.CONNECT}\n onClick={(_) =>\n runBackgroundSocketAction(() => acceptHubRedirect(hub), sessionT.plainT)\n }\n caption={sessionT.t('acceptRedirect', {\n defaultValue: 'Accept redirect to {{url}}',\n replace: {\n url: hub.connect_state.data!.hub_url,\n },\n })}\n />\n);\n\nexport { RedirectPrompt, PasswordPrompt, HubActionPrompt };\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { useEffect, useState } from 'react';\r\n\r\nimport HubMessageStore from 'stores/reflux/HubMessageStore';\r\n\r\nimport { loadSessionProperty, saveSessionProperty } from 'utils/BrowserUtils';\r\nimport Checkbox from 'components/semantic/Checkbox';\r\n\r\nimport ChatLayout from 'routes/Sidebar/components/chat/ChatLayout';\r\nimport HubUserTable from 'routes/Sidebar/routes/Hubs/components/HubUserTable';\r\n\r\nimport HubFooter from 'routes/Sidebar/routes/Hubs/components/HubFooter';\r\nimport {\r\n RedirectPrompt,\r\n PasswordPrompt,\r\n HubActionPrompt,\r\n} from 'routes/Sidebar/routes/Hubs/components/HubPrompt';\r\n\r\nimport '../style.css';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { shareTempFile } from 'services/api/ShareApi';\r\nimport HubActions from 'actions/reflux/HubActions';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport MenuConstants from 'constants/MenuConstants';\r\nimport { SessionChildProps } from 'routes/Sidebar/components/types';\r\nimport { useSession } from 'context/SessionContext';\r\n\r\nconst getStorageKey = (sessionId: number) => {\r\n return `view_userlist_${sessionId}`;\r\n};\r\n\r\nconst checkList = (sessionId: number) => {\r\n const value = loadSessionProperty(getStorageKey(sessionId), false);\r\n return value;\r\n};\r\n\r\ntype HubSessionProps = SessionChildProps<API.Hub, UI.EmptyObject, UI.ChatActionList>;\r\n\r\nconst HubSession: React.FC<HubSessionProps> = ({\r\n session,\r\n sessionApi,\r\n sessionT,\r\n uiActions,\r\n}) => {\r\n const [showList, setShowList] = useState(checkList(session.id));\r\n const login = useSession();\r\n\r\n const toggleListState = () => {\r\n setShowList(!showList);\r\n return !showList;\r\n };\r\n\r\n useEffect(() => {\r\n setShowList(checkList(session.id));\r\n }, [session.id]);\r\n\r\n const getMessage = () => {\r\n const connectState = session.connect_state.id;\r\n\r\n if (connectState === API.HubConnectStateEnum.PASSWORD) {\r\n return (\r\n <HubActionPrompt\r\n title={sessionT.translate('Password required')}\r\n icon={IconConstants.LOCK}\r\n content={<PasswordPrompt hub={session} sessionT={sessionT} />}\r\n />\r\n );\r\n }\r\n\r\n if (connectState === API.HubConnectStateEnum.REDIRECT) {\r\n return (\r\n <HubActionPrompt\r\n title={sessionT.translate('Redirect requested')}\r\n icon={IconConstants.REDIRECT}\r\n content={<RedirectPrompt hub={session} sessionT={sessionT} />}\r\n />\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const onClickUsers = () => {\r\n const newValue = toggleListState();\r\n saveSessionProperty(getStorageKey(session.id), newValue);\r\n };\r\n\r\n const handleFileUpload = (file: File) => {\r\n const { hub_url } = session;\r\n return shareTempFile(file, hub_url, undefined, login);\r\n };\r\n\r\n const checkbox = (\r\n <Checkbox\r\n id=\"userlist-toggle\"\r\n type=\"toggle\"\r\n caption={sessionT.translate('User list')}\r\n onChange={onClickUsers}\r\n checked={showList}\r\n />\r\n );\r\n\r\n return (\r\n <div className=\"hub chat session\">\r\n {getMessage()}\r\n {showList ? (\r\n <HubUserTable session={session} sessionT={sessionT} />\r\n ) : (\r\n <ChatLayout\r\n messageStore={HubMessageStore}\r\n chatApi={HubActions as UI.ChatAPI}\r\n sessionApi={sessionApi}\r\n chatActions={uiActions}\r\n chatAccess={API.AccessEnum.HUBS_SEND}\r\n session={session}\r\n handleFileUpload={handleFileUpload}\r\n highlightRemoteMenuId={MenuConstants.HUB_MESSAGE_HIGHLIGHT}\r\n hubUrl={session.hub_url}\r\n />\r\n )}\r\n <HubFooter userlistToggle={checkbox} session={session} sessionT={sessionT} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default HubSession;\r\n","import { Component } from 'react';\r\n\r\nimport HubSearchInput from 'components/autosuggest/HubSearchInput';\r\nimport RecentLayout from 'routes/Sidebar/components/RecentLayout';\r\n\r\nimport Message from 'components/semantic/Message';\r\nimport { Link } from 'react-router';\r\n\r\nimport HubActions from 'actions/reflux/HubActions';\r\nimport HubSessionStore from 'stores/reflux/HubSessionStore';\r\n\r\nimport { HistoryEntryEnum } from 'constants/HistoryConstants';\r\n\r\nimport * as API from 'types/api';\r\n\r\nimport { Trans } from 'react-i18next';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport Button from 'components/semantic/Button';\r\nimport { NewSessionLayoutProps } from 'routes/Sidebar/components/types';\r\nimport LinkButton from 'components/semantic/LinkButton';\r\n\r\nclass HubNew extends Component<NewSessionLayoutProps> {\r\n handleConnect = (hubUrl: string) => {\r\n const { location, navigate } = this.props;\r\n HubActions.createSession(hubUrl, {\r\n sessionStore: HubSessionStore,\r\n location,\r\n navigate,\r\n });\r\n };\r\n\r\n hasSession = (entry: API.HistoryItem) => {\r\n return HubSessionStore.getSessionByUrl(entry.hub_url);\r\n };\r\n\r\n recentHubRender = (entry: API.HistoryItem) => {\r\n return (\r\n <LinkButton\r\n onClick={(_) => this.handleConnect(entry.hub_url)}\r\n caption={entry.name}\r\n />\r\n );\r\n };\r\n\r\n render() {\r\n const { sessionT } = this.props;\r\n return (\r\n <div className=\"hub session new\">\r\n <HubSearchInput\r\n submitHandler={this.handleConnect}\r\n button={\r\n <Button\r\n icon={IconConstants.CONNECT}\r\n caption={sessionT.translate('Connect')}\r\n />\r\n }\r\n />\r\n <Message\r\n description={\r\n <Trans\r\n i18nKey={sessionT.toI18nKey('favoriteHubsHint')}\r\n defaults=\"Tip: visit the <url>Favorite hubs</url> page to connect using custom settings\"\r\n components={{\r\n url: <Link to=\"/favorite-hubs\" />,\r\n }}\r\n />\r\n }\r\n />\r\n <RecentLayout\r\n entryType={HistoryEntryEnum.HUB}\r\n hasSession={this.hasSession}\r\n entryTitleRenderer={this.recentHubRender}\r\n entryIcon=\"sitemap\"\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default HubNew;\r\n","import HubConstants from 'constants/HubConstants';\r\n\r\nimport { BuildClearChatAction } from '../decorators/ChatActionDecorator';\r\nimport { BuildRemoveSessionAction } from '../decorators/SessionActionDecorator';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport { MENU_DIVIDER } from 'constants/ActionConstants';\r\n\r\ntype Filter = UI.ActionFilter<API.Hub>;\r\nconst notFavorite: Filter = ({ itemData: hub }) => !hub.favorite_hub;\r\n\r\nconst handleFavorite: UI.ActionHandler<API.Hub> = ({ itemData: hub, socket }) => {\r\n return socket.post(`${HubConstants.SESSIONS_URL}/${hub.id}/favorite`);\r\n};\r\n\r\nconst handleReconnect: UI.ActionHandler<API.Hub> = ({ itemData: hub, socket }) => {\r\n return socket.post(`${HubConstants.SESSIONS_URL}/${hub.id}/reconnect`);\r\n};\r\n\r\nexport const HubReconnectAction = {\r\n id: 'reconnect',\r\n displayName: 'Reconnect',\r\n access: API.AccessEnum.HUBS_EDIT,\r\n icon: IconConstants.REFRESH_COLORED,\r\n handler: handleReconnect,\r\n};\r\n\r\nexport const HubFavoriteAction = {\r\n id: 'favorite',\r\n displayName: 'Add to favorites',\r\n access: API.AccessEnum.HUBS_EDIT,\r\n icon: IconConstants.FAVORITE,\r\n filter: notFavorite,\r\n handler: handleFavorite,\r\n notifications: {\r\n onSuccess: 'The hub {{item.identity.name}} was added in favorites',\r\n },\r\n};\r\n\r\nconst HubClearChatAction = BuildClearChatAction(\r\n HubConstants.SESSIONS_URL,\r\n API.AccessEnum.HUBS_EDIT,\r\n);\r\n\r\nconst HubRemoveAction = BuildRemoveSessionAction(\r\n HubConstants.SESSIONS_URL,\r\n API.AccessEnum.HUBS_EDIT,\r\n);\r\n\r\nconst HubActions: UI.ActionListType<API.Hub> = {\r\n reconnect: HubReconnectAction,\r\n favorite: HubFavoriteAction,\r\n clearChat: HubClearChatAction,\r\n divider: MENU_DIVIDER,\r\n remove: HubRemoveAction,\r\n};\r\n\r\nexport const HubActionModule = {\r\n moduleId: UI.Modules.HUBS,\r\n};\r\n\r\nexport const HubActionMenu = {\r\n moduleData: HubActionModule,\r\n actions: HubActions,\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { TextDecorator } from 'components/text';\r\n\r\nimport SessionLayout from 'routes/Sidebar/components/SessionLayout';\r\n\r\nimport HubSessionStore from 'stores/reflux/HubSessionStore';\r\nimport HubAPIActions from 'actions/reflux/HubActions';\r\n\r\nimport { hubOnlineStatusToColor } from 'utils/TypeConvert';\r\n\r\nimport HubSession from 'routes/Sidebar/routes/Hubs/components/HubSession';\r\nimport HubNew from 'routes/Sidebar/routes/Hubs/components/HubNew';\r\nimport HubIcon from 'components/icon/HubIcon';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport {\r\n SessionProviderDecorator,\r\n SessionProviderDecoratorChildProps,\r\n} from 'routes/Sidebar/decorators/SessionProviderDecorator';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport { Params } from 'react-router';\r\nimport { HubActionMenu } from 'actions/ui/hub';\r\n\r\nconst ItemHandler: UI.SessionInfoGetter<API.Hub> = {\r\n itemNameGetter(session) {\r\n return session.identity.name;\r\n },\r\n\r\n itemStatusGetter(session) {\r\n return hubOnlineStatusToColor(session.connect_state.id);\r\n },\r\n\r\n itemHeaderDescriptionGetter(session) {\r\n return <TextDecorator text={session.identity.description} emojify={true} />;\r\n },\r\n\r\n itemHeaderIconGetter(session) {\r\n return <HubIcon hub={session} />;\r\n },\r\n};\r\n\r\nconst parseNumericId = (params: Readonly<Params<string>>) => {\r\n if (!params.id) {\r\n return undefined;\r\n }\r\n\r\n return parseInt(params['id']);\r\n};\r\nconst sessionActions = ['reconnect', 'clearChat', 'favorite'];\r\n\r\nconst Hubs: React.FC<SessionProviderDecoratorChildProps<API.Hub>> = (props) => {\r\n const { params, sessionT, ...other } = props;\r\n return (\r\n <SessionLayout\r\n activeId={parseNumericId(params)}\r\n baseUrl=\"hubs\"\r\n newCaption={sessionT.t('new', 'Connect')}\r\n newDescription={sessionT.t('newDesc', 'Connect to a new hub')}\r\n newIcon={IconConstants.HUBS_PLAIN}\r\n editAccess={API.AccessEnum.HUBS_EDIT}\r\n uiActions={HubActionMenu}\r\n actionIds={sessionActions}\r\n sessionApi={HubAPIActions as UI.SessionActions<API.Hub>}\r\n sessionItemLayout={HubSession}\r\n newLayout={HubNew}\r\n sessionT={sessionT}\r\n unreadInfoStore={HubSessionStore}\r\n remoteMenuId=\"hub\"\r\n {...ItemHandler}\r\n {...other}\r\n />\r\n );\r\n};\r\n\r\nexport default SessionProviderDecorator(Hubs, HubSessionStore, UI.Modules.HUBS);\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","hub","other","icon","connect_state","HubMessageStore","scroll","SessionScrollPositionKeeper","onSocketConnected","addSocketListener","this","hasMessages","hasInitializedSessions","HubConstants","MODULE_URL","HUB_MESSAGE","_onChatMessage","HUB_STATUS_MESSAGE","_onStatusMessage","SESSION_UPDATED","_onSessionUpdated","SESSION_REMOVED","_onSessionRemoved","MessageStoreDecorator","HubActions","HUBS_VIEW","_viewName","_apiUrl","SESSIONS_URL","_sessionStore","HubSessionStore","mixins","ViewStoreMixin","NickCell","cellData","rowDataGetter","session","text","user","userIcon","remoteMenuId","MenuConstants","HUB_USER","entity","HubUserTable","rowClassNameGetter","flags","join","emptyRowsNodeGetter","sessionT","props","connectState","DISCONNECTED","REDIRECT","className","Message","title","translate","IconConstants","OFFLINE","CONNECTED","Loader","render","VirtualTable","store","HubUserViewStore","entityId","sessionStore","moduleId","HUBS","name","width","columnKey","flexGrow","cell","HubSettingActions","toggleChatNotify","displayName","access","HUBS_EDIT","handler","itemData","socket","patch","use_main_chat_notify","settings","checked","toggleShowJoins","show_joins","HubSettingActionMenu","moduleData","actions","SocketSubscriptionDecorator","formatSize","counts","setCounts","useState","share_size","user_count","useEffect","get","then","catch","error","console","message","url","SESSION_COUNTS_UPDATED","data","removeSocketListeners","layoutWidth","userlistToggle","users","shared","averageShare","SessionFooter","EncryptionState","encryption","t","defaultValue","defaultValue_plural","count","replace","total","average","header","triggerIcon","getSession","HubActionPrompt","content","hasAccess","Icon","PasswordPrompt","ActionInput","A","placeholder","caption","CONNECT","handleAction","password","SocketService","post","sendHubPassword","plainT","i18nKey","toI18nKey","RedirectPrompt","Button","onClick","_","acceptHubRedirect","hub_url","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","getStorageKey","sessionId","checkList","sessionApi","uiActions","showList","setShowList","login","checkbox","Checkbox","type","onChange","newValue","PASSWORD","LOCK","getMessage","ChatLayout","messageStore","chatApi","chatActions","chatAccess","HUBS_SEND","handleFileUpload","file","undefined","highlightRemoteMenuId","HUB_MESSAGE_HIGHLIGHT","hubUrl","HubNew","Component","handleConnect","location","navigate","createSession","hasSession","entry","getSessionByUrl","recentHubRender","LinkButton","HubSearchInput","submitHandler","button","description","defaults","components","to","RecentLayout","entryType","HUB","entryTitleRenderer","entryIcon","HubReconnectAction","REFRESH_COLORED","HubFavoriteAction","FAVORITE","filter","favorite_hub","notifications","onSuccess","HubClearChatAction","HubRemoveAction","reconnect","favorite","clearChat","divider","remove","HubActionMenu","ItemHandler","itemNameGetter","identity","itemStatusGetter","itemHeaderDescriptionGetter","emojify","itemHeaderIconGetter","HubIcon","parseNumericId","params","parseInt","sessionActions","SessionProviderDecorator","SessionLayout","activeId","baseUrl","newCaption","newDescription","newIcon","HUBS_PLAIN","editAccess","actionIds","sessionItemLayout","newLayout","unreadInfoStore"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/queue.4095b1ea967e164737e6.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Queue/style.css","webpack://airdcpp-webui/./src/actions/ui/queue/QueueBundleSourceActions.ts","webpack://airdcpp-webui/./src/actions/ui/queue/QueueFileActions.ts","webpack://airdcpp-webui/./src/actions/ui/queue/QueueSourceActions.ts","webpack://airdcpp-webui/./src/actions/ui/queue/QueueActions.ts","webpack://airdcpp-webui/./src/actions/ui/queue/QueueBundleActions.ts","webpack://airdcpp-webui/./src/components/semantic/Progress.tsx","webpack://airdcpp-webui/./src/constants/PriorityConstants.ts","webpack://airdcpp-webui/./src/routes/Queue/components/PriorityMenu.tsx","webpack://airdcpp-webui/./src/routes/Queue/components/StatusCell.tsx","webpack://airdcpp-webui/./src/stores/views/QueueBundleViewStore.js","webpack://airdcpp-webui/./src/stores/views/QueueFileViewStore.js","webpack://airdcpp-webui/./src/routes/Queue/style.css?62bc","webpack://airdcpp-webui/./src/routes/Queue/components/BundleFileTable.tsx","webpack://airdcpp-webui/./src/routes/Queue/components/BundleFileDialog.tsx","webpack://airdcpp-webui/./src/routes/Queue/components/BundleSourceTable.tsx","webpack://airdcpp-webui/./src/routes/Queue/components/BundleSourceDialog.tsx","webpack://airdcpp-webui/./src/routes/Queue/components/Queue.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.status .error {\n color: red;\n}\n\n@media only screen and (min-width: 767px) {\n .source.modal td {\n max-width: 250px;\n }\n\n /* Can't be applied to dropdown cells */\n .source.modal td:not(.user) {\n overflow-x: hidden;\n }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Queue/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,UAAU;AACZ;;AAEA;EACE;IACE,gBAAgB;EAClB;;EAEA,uCAAuC;EACvC;IACE,kBAAkB;EACpB;AACF\",\"sourcesContent\":[\".status .error {\\n color: red;\\n}\\n\\n@media only screen and (min-width: 767px) {\\n .source.modal td {\\n max-width: 250px;\\n }\\n\\n /* Can't be applied to dropdown cells */\\n .source.modal td:not(.user) {\\n overflow-x: hidden;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import { default as QueueConstants } from 'constants/QueueConstants';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\ntype ActionHandlerType = UI.ActionHandler<API.QueueBundleSource, API.QueueBundle>;\r\n\r\nconst handleRemoveBundleSource: ActionHandlerType = ({\r\n itemData: source,\r\n entity: bundle,\r\n socket,\r\n}) => {\r\n return socket.delete(\r\n `${QueueConstants.BUNDLES_URL}/${bundle.id}/sources/${source.user.cid}`,\r\n );\r\n};\r\n\r\nexport const QueueBundleSourceRemoveAction = {\r\n id: 'removeBundleSource',\r\n displayName: 'Remove source',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n handler: handleRemoveBundleSource,\r\n};\r\n\r\nconst BundleSourceActions = {\r\n removeBundleSource: QueueBundleSourceRemoveAction,\r\n};\r\n\r\nexport const QueueBundleSourceActionModule = {\r\n moduleId: UI.Modules.QUEUE,\r\n subId: 'bundleSource',\r\n};\r\n\r\nexport const QueueBundleSourceActionMenu = {\r\n moduleData: QueueBundleSourceActionModule,\r\n actions: BundleSourceActions,\r\n};\r\n","import QueueConstants from 'constants/QueueConstants';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport SearchActions from 'actions/reflux/SearchActions';\r\n\r\ntype Filter = UI.ActionFilter<API.QueueFile>;\r\nconst itemNotFinished: Filter = ({ itemData: file }) => file.time_finished === 0;\r\n\r\ntype Handler = UI.ActionHandler<API.QueueFile>;\r\nconst handleSearch: Handler = ({ itemData: file, location, navigate }) => {\r\n return SearchActions.search(file, location, navigate);\r\n};\r\n\r\nconst handleRemoveFile: Handler = (\r\n { itemData: file, socket },\r\n removeFinished: boolean,\r\n) => {\r\n return socket.post(`${QueueConstants.FILES_URL}/${file.id}/remove`, {\r\n remove_finished: removeFinished,\r\n });\r\n};\r\n\r\nconst handleSearchFileAlternates: Handler = ({ itemData: file, socket }) => {\r\n return socket.post(`${QueueConstants.FILES_URL}/${file.id}/search`);\r\n};\r\n\r\nexport const QueueFileSearchAction = {\r\n id: 'search',\r\n displayName: 'Search (foreground)',\r\n access: API.AccessEnum.SEARCH,\r\n icon: IconConstants.SEARCH,\r\n handler: handleSearch,\r\n};\r\n\r\nexport const QueueFileSearchAlternatesAction = {\r\n id: 'searchAlternates',\r\n displayName: 'Search for alternates',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.SEARCH_ALTERNATES,\r\n filter: itemNotFinished,\r\n handler: handleSearchFileAlternates,\r\n};\r\n\r\nexport const QueueFileRemoveAction = {\r\n id: 'remove',\r\n displayName: 'Remove',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n confirmation: {\r\n content: 'Are you sure that you want to remove the file {{item.name}}?',\r\n approveCaption: 'Remove file',\r\n rejectCaption: `Don't remove`,\r\n checkboxCaption: 'Remove on disk',\r\n },\r\n handler: handleRemoveFile,\r\n notifications: {\r\n onSuccess: 'File {{item.name}} was removed from queue',\r\n },\r\n};\r\n\r\nconst QueueFileActions: UI.ActionListType<API.QueueFile> = {\r\n search: QueueFileSearchAction,\r\n searchFileAlternates: QueueFileSearchAlternatesAction,\r\n removeFile: QueueFileRemoveAction,\r\n};\r\n\r\nexport const QueueFileActionModule = {\r\n moduleId: UI.Modules.QUEUE,\r\n subId: 'file',\r\n};\r\n\r\nexport const QueueFileActionMenu = {\r\n moduleData: QueueFileActionModule,\r\n actions: QueueFileActions,\r\n};\r\n","import QueueConstants from 'constants/QueueConstants';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nconst handleRemoveSource: UI.ActionHandler<API.User> = ({ itemData: user, socket }) => {\r\n return socket.delete(`${QueueConstants.SOURCES_URL}/${user.cid}`);\r\n};\r\n\r\nexport const QueueSourceRemoveAction = {\r\n id: 'removeSource',\r\n displayName: 'Remove user from queue',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n handler: handleRemoveSource,\r\n notifications: {\r\n onSuccess: 'The user {{user.nicks}} was removed from {{result.count}} files',\r\n },\r\n};\r\n\r\nconst QueueSourceActions: UI.ActionListType<API.User> = {\r\n removeSource: QueueSourceRemoveAction,\r\n};\r\n\r\nexport const QueueSourceActionModule = {\r\n moduleId: UI.Modules.QUEUE,\r\n};\r\n\r\nexport const QueueSourceActionMenu = {\r\n moduleData: QueueSourceActionModule,\r\n actions: QueueSourceActions,\r\n};\r\n","import QueueConstants from 'constants/QueueConstants';\n\nimport IconConstants from 'constants/IconConstants';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport { MENU_DIVIDER } from 'constants/ActionConstants';\nimport { APISocket } from 'services/SocketService';\n\nconst setBundlePriorities = (socket: APISocket, prio: API.QueuePriorityEnum) => {\n return socket.post(QueueConstants.BUNDLES_URL + '/priority', {\n priority: prio,\n });\n};\n\nconst handlePause: UI.ActionHandler<void> = ({ socket }) => {\n return setBundlePriorities(socket, API.QueuePriorityEnum.PAUSED_FORCED);\n};\n\nconst handleResume: UI.ActionHandler<void> = ({ socket }) => {\n return setBundlePriorities(socket, API.QueuePriorityEnum.DEFAULT);\n};\n\nconst handleRemoveCompleted: UI.ActionHandler<void> = ({ socket }) => {\n return socket.post(QueueConstants.BUNDLES_URL + '/remove_completed');\n};\n\nexport const QueueRemoveCompletedAction = {\n id: 'removeCompleted',\n displayName: 'Remove completed bundles',\n access: API.AccessEnum.QUEUE_EDIT,\n icon: IconConstants.REMOVE,\n handler: handleRemoveCompleted,\n notifications: {\n onSuccess: '{{result.count}} completed bundles were removed',\n },\n};\n\nexport const QueuePauseAction = {\n id: 'pause',\n displayName: 'Pause all bundles',\n access: API.AccessEnum.QUEUE_EDIT,\n icon: IconConstants.PAUSE,\n handler: handlePause,\n};\n\nexport const QueueResumeAction = {\n id: 'resumeAll',\n displayName: 'Resume all bundles',\n access: API.AccessEnum.QUEUE_EDIT,\n icon: IconConstants.PLAY,\n handler: handleResume,\n};\n\nconst QueueActions: UI.ActionListType<void> = {\n removeCompleted: QueueRemoveCompletedAction,\n divider: MENU_DIVIDER,\n pause: QueuePauseAction,\n resume: QueueResumeAction,\n};\n\nexport const QueueActionModule = {\n moduleId: UI.Modules.QUEUE,\n};\n\nexport const QueueActionMenu = {\n moduleData: QueueActionModule,\n actions: QueueActions,\n};\n","import { default as QueueConstants, StatusEnum } from 'constants/QueueConstants';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport SearchActions from 'actions/reflux/SearchActions';\r\nimport { APISocket } from 'services/SocketService';\r\n\r\ntype Filter = UI.ActionFilter<API.QueueBundle>;\r\nconst bundleValidationFailed: Filter = ({ itemData: bundle }) =>\r\n bundle.status.id === StatusEnum.COMPLETION_VALIDATION_ERROR;\r\nconst itemNotFinished: Filter = ({ itemData: bundle }) => bundle.time_finished === 0;\r\nconst isDirectoryBundle: Filter = ({ itemData: bundle }) =>\r\n bundle.type.id === 'directory';\r\nconst hasSources: Filter = (data) =>\r\n data.itemData.sources.total > 0 && itemNotFinished(data);\r\n\r\nconst shareBundle = (\r\n socket: APISocket,\r\n bundle: API.QueueBundle,\r\n skipValidation: boolean,\r\n) => {\r\n return socket.post(`${QueueConstants.BUNDLES_URL}/${bundle.id}/share`, {\r\n skip_validation: skipValidation,\r\n });\r\n};\r\n\r\n// Handlers\r\ntype Handler = UI.ActionHandler<API.QueueBundle>;\r\n\r\nconst handleRescan: Handler = ({ itemData: bundle, socket }) => {\r\n return shareBundle(socket, bundle, false);\r\n};\r\n\r\nconst handleForceShare: Handler = ({ itemData: bundle, socket }) => {\r\n return shareBundle(socket, bundle, true);\r\n};\r\n\r\nconst handleRemoveBundle: Handler = ({ itemData: bundle, socket }, removeFinished) => {\r\n return socket.post(`${QueueConstants.BUNDLES_URL}/${bundle.id}/remove`, {\r\n remove_finished: removeFinished,\r\n });\r\n};\r\n\r\nconst handleSearch: Handler = ({ itemData: bundle, location, navigate }) => {\r\n return SearchActions.search(bundle, location, navigate);\r\n};\r\n\r\nconst handleSearchBundleAlternates: Handler = ({ itemData: bundle, socket }) => {\r\n return socket.post(`${QueueConstants.BUNDLES_URL}/${bundle.id}/search`);\r\n};\r\n\r\nconst handleSources: Handler = ({ itemData, navigate }) => {\r\n navigate(`sources/${itemData.id}`);\r\n};\r\n\r\nconst handleContent: Handler = ({ itemData, navigate }) => {\r\n navigate(`content/${itemData.id}`);\r\n};\r\n\r\nexport const QueueBundleViewSourcesAction = {\r\n id: 'sources',\r\n displayName: 'Manage sources...',\r\n icon: IconConstants.USER,\r\n filter: hasSources,\r\n handler: handleSources,\r\n};\r\n\r\nexport const QueueBundleViewContentAction = {\r\n id: 'content',\r\n displayName: 'Manage files...',\r\n icon: IconConstants.FILE,\r\n filter: isDirectoryBundle,\r\n handler: handleContent,\r\n};\r\n\r\nexport const QueueBundleSearchAction = {\r\n id: 'search',\r\n displayName: 'Search (foreground)',\r\n icon: IconConstants.SEARCH,\r\n handler: handleSearch,\r\n};\r\n\r\nexport const QueueBundleSearchAlternatesAction = {\r\n id: 'searchBundleAlternates',\r\n displayName: 'Search for alternates',\r\n icon: IconConstants.SEARCH_ALTERNATES,\r\n filter: itemNotFinished,\r\n handler: handleSearchBundleAlternates,\r\n notifications: {\r\n onSuccess: 'The bundle {{item.name}} was searched for alternates',\r\n },\r\n};\r\n\r\nexport const QueueBundleRemoveAction = {\r\n id: 'remove',\r\n displayName: 'Remove',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n confirmation: {\r\n content: 'Are you sure that you want to remove the bundle {{item.name}}?',\r\n approveCaption: 'Remove bundle',\r\n rejectCaption: `Don't remove`,\r\n checkboxCaption: 'Remove finished files',\r\n },\r\n handler: handleRemoveBundle,\r\n};\r\n\r\nexport const QueueBundleRescanAction = {\r\n id: 'rescan',\r\n displayName: 'Rescan for errors',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REFRESH_COLORED,\r\n filter: bundleValidationFailed,\r\n handler: handleRescan,\r\n};\r\n\r\nexport const QueueBundleForceShareAction = {\r\n id: 'forceShare',\r\n displayName: 'Force in share',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.ERROR,\r\n filter: bundleValidationFailed,\r\n handler: handleForceShare,\r\n};\r\n\r\nconst QueueBundleActions: UI.ActionListType<API.QueueBundle> = {\r\n sources: QueueBundleViewSourcesAction,\r\n content: QueueBundleViewContentAction,\r\n divider: null,\r\n search: QueueBundleSearchAction,\r\n searchBundleAlternates: QueueBundleSearchAlternatesAction,\r\n divider2: null,\r\n removeBundle: QueueBundleRemoveAction,\r\n divider3: null,\r\n rescan: QueueBundleRescanAction,\r\n forceShare: QueueBundleForceShareAction,\r\n};\r\n\r\nexport const QueueBundleActionModule = {\r\n moduleId: UI.Modules.QUEUE,\r\n subId: 'bundle',\r\n};\r\n\r\nexport const QueueBundleActionMenu = {\r\n moduleData: QueueBundleActionModule,\r\n actions: QueueBundleActions,\r\n} as UI.ModuleActions<API.QueueBundle>;\r\n","import * as React from 'react';\nimport classNames from 'classnames';\n\nexport interface ProgressProps {\n caption?: React.ReactNode;\n className?: string | null;\n percent?: number;\n}\n\nconst Progress: React.FC<ProgressProps> = ({ className, percent, caption }) => (\n <div\n className={classNames('ui progress', className, {\n indeterminate: percent === undefined,\n })}\n data-percent={percent}\n >\n <div\n className=\"bar\"\n style={{\n transitionDuration: 300 + 'ms',\n width: percent === undefined ? undefined : percent + '%',\n minWidth: '0px',\n }}\n >\n <div className=\"progress\" />\n </div>\n {!!caption && <div className=\"label\">{caption}</div>}\n </div>\n);\n\nexport default Progress;\n","import { QueuePriorityEnum } from 'types/api';\n\nexport const PriorityEnum = {\n [QueuePriorityEnum.PAUSED_FORCED]: { str: 'Paused (forced)', id: 0 },\n [QueuePriorityEnum.PAUSED]: { str: 'Paused', id: 1 },\n [QueuePriorityEnum.LOWEST]: { str: 'Lowest', id: 2 },\n [QueuePriorityEnum.LOW]: { str: 'Low', id: 3 },\n [QueuePriorityEnum.NORMAL]: { str: 'Normal', id: 4 },\n [QueuePriorityEnum.HIGH]: { str: 'High', id: 5 },\n [QueuePriorityEnum.HIGHEST]: { str: 'Highest', id: 6 },\n};\n","import { memo } from 'react';\r\nimport isEqual from 'lodash/isEqual';\r\n\r\nimport { PriorityEnum } from 'constants/PriorityConstants';\r\n\r\nimport TableDropdown, { DropdownCloseHandler } from 'components/semantic/TableDropdown';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { translate } from 'utils/TranslationUtils';\r\nimport { runBackgroundSocketAction } from 'utils/ActionUtils';\r\nimport { EmptyDropdownCaption } from 'components/semantic/EmptyDropdown';\r\nimport { buildMenu } from 'components/action-menu/builder/slidingMenuBuilder';\r\nimport { useSession } from 'context/SessionContext';\r\n\r\ninterface PriorityMenuProps {\r\n // Priority object\r\n itemPrio: API.QueuePriority;\r\n\r\n // Item with priority properties\r\n item: API.QueueItemBase;\r\n\r\n prioAction: (item: API.QueueItemBase, priority: API.QueuePriorityEnum) => Promise<any>;\r\n t: UI.TranslateF;\r\n}\r\n\r\nconst PriorityMenu: React.FC<PriorityMenuProps> = ({ item, itemPrio, prioAction, t }) => {\r\n const { hasAccess } = useSession();\r\n\r\n const setPriority = (priorityId: API.QueuePriorityEnum) => {\r\n return runBackgroundSocketAction(() => prioAction(item, priorityId), t);\r\n };\r\n\r\n const getPriorityListItem = (\r\n priority: Omit<API.QueuePriority, 'auto'>,\r\n t: UI.TranslateF,\r\n ): UI.ActionMenuItem => {\r\n const currentPrio = item.priority.id;\r\n return {\r\n id: priority.id.toString(),\r\n item: {\r\n active: currentPrio === priority.id,\r\n onClick: () => {\r\n setPriority(priority.id);\r\n },\r\n children: translate(priority.str, t, UI.Modules.QUEUE),\r\n },\r\n };\r\n };\r\n\r\n const getChildren = (onClose: DropdownCloseHandler) => {\r\n const children = Object.keys(PriorityEnum)\r\n .map(Number)\r\n .map((prioKey) =>\r\n getPriorityListItem(PriorityEnum[prioKey as keyof typeof PriorityEnum], t),\r\n );\r\n\r\n children.push({ id: 'divider' });\r\n children.push({\r\n id: 'auto',\r\n item: {\r\n active: itemPrio.auto,\r\n onClick: () => {\r\n setPriority(API.QueuePriorityEnum.DEFAULT);\r\n },\r\n children: translate('Auto', t, UI.Modules.QUEUE),\r\n },\r\n });\r\n\r\n return buildMenu(children, onClose);\r\n };\r\n\r\n let caption = translate(\r\n PriorityEnum[itemPrio.id as keyof typeof PriorityEnum].str,\r\n t,\r\n UI.Modules.QUEUE,\r\n );\r\n if (itemPrio.auto) {\r\n caption += ` (${translate('Auto', t, UI.Modules.QUEUE).toLocaleLowerCase()})`;\r\n }\r\n\r\n if (!hasAccess(API.AccessEnum.QUEUE_EDIT)) {\r\n return <EmptyDropdownCaption caption={caption} />;\r\n }\r\n\r\n return (\r\n <TableDropdown caption={caption} className=\"priority-menu\">\r\n {getChildren}\r\n </TableDropdown>\r\n );\r\n};\r\n\r\nexport default memo(PriorityMenu, (prevProps, nextProps) => {\r\n return isEqual(nextProps.item.priority, prevProps.item.priority);\r\n});\r\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport Progress from 'components/semantic/Progress';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\n\r\nconst getStatusClass = (cellData: API.QueueBundleStatus, rowData: API.QueueBundle) => {\r\n if (cellData.completed) {\r\n return 'success';\r\n }\r\n\r\n const statusId = cellData.id;\r\n return classNames(\r\n {\r\n grey:\r\n (!statusId || statusId === API.QueueBundleStatusEnum.QUEUED) &&\r\n rowData.speed === 0,\r\n },\r\n {\r\n blue:\r\n (!statusId || statusId === API.QueueBundleStatusEnum.QUEUED) && rowData.speed > 0,\r\n },\r\n );\r\n};\r\n\r\nconst StatusCell: React.FC<\r\n RowWrapperCellChildProps<API.QueueBundleStatus, API.QueueBundle>\r\n> = ({ cellData, rowDataGetter }) => {\r\n if (cellData!.failed) {\r\n // There isn't much space for other information\r\n return <span className=\"error\">{cellData!.str}</span>;\r\n }\r\n\r\n const rowData = rowDataGetter!();\r\n return (\r\n <Progress\r\n className={getStatusClass(cellData!, rowData)}\r\n caption={cellData!.str}\r\n percent={(rowData.downloaded_bytes * 100) / rowData.size}\r\n />\r\n );\r\n};\r\n\r\nexport default StatusCell;\r\n","import Reflux from 'reflux';\n\nimport QueueConstants from 'constants/QueueConstants';\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\n\nexport default Reflux.createStore({\n _viewName: 'queue_bundle_view',\n _apiUrl: QueueConstants.MODULE_URL,\n mixins: [ViewStoreMixin('name')],\n});\n","import Reflux from 'reflux';\n\nimport QueueConstants from 'constants/QueueConstants';\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\n\nexport default Reflux.createStore({\n _viewName: 'queue_file_view',\n _apiUrl: QueueConstants.MODULE_URL,\n mixins: [ViewStoreMixin('name')],\n});\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n export default content && content.locals ? content.locals : undefined;\n","import * as React from 'react';\nimport { Column } from 'fixed-data-table-2';\nimport * as UI from 'types/ui';\n\nimport VirtualTable from 'components/table/VirtualTable';\n\nimport PriorityMenu from 'routes/Queue/components/PriorityMenu';\nimport StatusCell from 'routes/Queue/components/StatusCell';\n\nimport QueueFileViewStore from 'stores/views/QueueFileViewStore';\n\nimport {\n FileActionCell,\n SizeCell,\n SpeedCell,\n AbbreviatedDurationCell,\n} from 'components/table/Cell';\n\nimport '../style.css';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\nimport { setFilePriority } from 'services/api/QueueApi';\nimport MenuConstants from 'constants/MenuConstants';\nimport { QueueFileActionMenu } from 'actions/ui/queue';\n\nconst PriorityCell: React.FC<\n RowWrapperCellChildProps<API.QueuePriority, API.QueueBundle>\n> = ({ cellData, rowDataGetter, t }) => (\n <PriorityMenu\n itemPrio={cellData!}\n item={rowDataGetter!()}\n prioAction={setFilePriority}\n t={t!}\n />\n);\n\ninterface BundleFileTableProps {\n bundle: API.QueueBundle;\n}\n\nclass BundleFileTable extends React.Component<BundleFileTableProps> {\n isActive = (cellData: any, rowData: API.QueueFile) => {\n return !rowData.status.downloaded;\n };\n\n isRunning = (cellData: any, rowData: API.QueueFile) => {\n return rowData.speed > 0;\n };\n\n render() {\n return (\n <VirtualTable\n store={QueueFileViewStore}\n sourceFilter={{\n pattern: this.props.bundle.id,\n method: API.FilterMethod.EXACT,\n property: 'bundle',\n }}\n moduleId={UI.Modules.QUEUE}\n >\n <Column\n name=\"Name\"\n width={200}\n flexGrow={20}\n columnKey=\"name\"\n cell={\n <FileActionCell\n actions={QueueFileActionMenu}\n remoteMenuId={MenuConstants.QUEUE_FILE}\n />\n }\n />\n <Column\n name=\"Size\"\n width={70}\n columnKey=\"size\"\n cell={<SizeCell />}\n flexGrow={1}\n />\n <Column name=\"Status\" width={120} columnKey=\"status\" cell={<StatusCell />} />\n <Column\n name=\"Sources\"\n width={65}\n columnKey=\"sources\"\n renderCondition={this.isActive}\n />\n <Column\n name=\"Time left\"\n width={50}\n columnKey=\"seconds_left\"\n renderCondition={this.isRunning}\n cell={<AbbreviatedDurationCell />}\n />\n <Column\n name=\"Speed\"\n width={55}\n columnKey=\"speed\"\n cell={<SpeedCell />}\n renderCondition={this.isRunning}\n />\n <Column\n name=\"Priority\"\n width={80}\n columnKey=\"priority\"\n renderCondition={this.isActive}\n cell={<PriorityCell />}\n flexGrow={1}\n />\n </VirtualTable>\n );\n }\n}\n\nexport default BundleFileTable;\n","import { Component } from 'react';\r\nimport RouteModal from 'components/semantic/RouteModal';\r\n\r\nimport ModalRouteDecorator, {\r\n ModalRouteDecoratorChildProps,\r\n} from 'decorators/ModalRouteDecorator';\r\n\r\nimport FileIcon from 'components/icon/FileIcon';\r\nimport BundleFileTable from 'routes/Queue/components/BundleFileTable';\r\nimport DataProviderDecorator, {\r\n DataProviderDecoratorChildProps,\r\n} from 'decorators/DataProviderDecorator';\r\nimport QueueConstants from 'constants/QueueConstants';\r\n\r\nimport * as API from 'types/api';\r\n\r\ninterface BundleFileDialogProps {}\r\n\r\ninterface DataProps extends DataProviderDecoratorChildProps {\r\n bundle: API.QueueBundle;\r\n}\r\n\r\ntype Props = BundleFileDialogProps & DataProps & ModalRouteDecoratorChildProps;\r\n\r\nclass BundleFileDialog extends Component<Props> {\r\n static readonly displayName = 'BundleFileDialog';\r\n\r\n render() {\r\n const { bundle } = this.props;\r\n return (\r\n <RouteModal\r\n className=\"source\"\r\n title={bundle.name}\r\n subHeader={bundle.target}\r\n closable={true}\r\n icon={<FileIcon typeInfo={bundle.type} />}\r\n fullHeight={true}\r\n >\r\n <BundleFileTable bundle={bundle} />\r\n </RouteModal>\r\n );\r\n }\r\n}\r\n\r\nexport default ModalRouteDecorator<BundleFileDialogProps>(\r\n DataProviderDecorator<Omit<Props, keyof DataProps>, DataProps>(BundleFileDialog, {\r\n urls: {\r\n bundle: ({ params }, socket) =>\r\n socket.get(`${QueueConstants.BUNDLES_URL}/${params.bundleId}`),\r\n },\r\n }),\r\n 'content/:bundleId',\r\n);\r\n","import * as React from 'react';\r\n\r\nimport DataProviderDecorator, {\r\n DataProviderDecoratorChildProps,\r\n} from 'decorators/DataProviderDecorator';\r\n\r\nimport { QueueBundleSourceActionMenu } from 'actions/ui/queue/QueueBundleSourceActions';\r\nimport QueueConstants from 'constants/QueueConstants';\r\n\r\nimport { useFormatter } from 'context/FormatterContext';\r\n\r\nimport { ActionMenu, UserMenu } from 'components/action-menu';\r\nimport { UserFileActions } from 'actions/ui/user/UserActions';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport MenuConstants from 'constants/MenuConstants';\r\n\r\ninterface SourceProps {\r\n bundle: API.QueueBundle;\r\n source: API.QueueBundleSource;\r\n t: UI.TranslateF;\r\n}\r\n\r\nconst Source: React.FC<SourceProps> = ({ source, bundle, t }) => {\r\n const { formatSize, formatSpeed } = useFormatter();\r\n return (\r\n <tr>\r\n <td className=\"user dropdown\">\r\n <UserMenu\r\n userIcon={true}\r\n user={source.user}\r\n ids={UserFileActions}\r\n contextElement=\".source.modal\"\r\n remoteMenuId={MenuConstants.HINTED_USER}\r\n >\r\n <ActionMenu\r\n actions={QueueBundleSourceActionMenu}\r\n itemData={source}\r\n entity={bundle}\r\n />\r\n </UserMenu>\r\n </td>\r\n <td className=\"hubs\">{source.user.hub_names}</td>\r\n <td className=\"speed\">{source.last_speed > 0 && formatSpeed(source.last_speed)}</td>\r\n <td className=\"files\">{source.files}</td>\r\n <td className=\"size\">{formatSize(source.size)}</td>\r\n </tr>\r\n );\r\n};\r\n\r\nconst userSort = (a: API.QueueBundleSource, b: API.QueueBundleSource) =>\r\n a.user.nicks.localeCompare(b.user.nicks);\r\n\r\ninterface BundleSourceTableProps {\r\n bundle: API.QueueBundle;\r\n queueT: UI.ModuleTranslator;\r\n}\r\n\r\ninterface BundleSourceTableDataProps extends DataProviderDecoratorChildProps {\r\n sources: API.QueueBundleSource[];\r\n}\r\n\r\nconst BundleSourceTable: React.FC<\r\n BundleSourceTableProps & BundleSourceTableDataProps\r\n> = ({ sources, bundle, queueT }) => {\r\n const { translate } = queueT;\r\n\r\n return (\r\n <div className=\"sources\">\r\n <h2>{translate('Sources')}</h2>\r\n <table className=\"ui striped table\">\r\n <thead>\r\n <tr>\r\n <th>{translate('User')}</th>\r\n <th>{translate('Hubs')}</th>\r\n <th>{translate('Last known speed')}</th>\r\n <th>{translate('Files')}</th>\r\n <th>{translate('Size')}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {sources\r\n .slice()\r\n .sort(userSort)\r\n .map((source) => (\r\n <Source\r\n key={source.user.cid}\r\n source={source}\r\n bundle={bundle}\r\n t={queueT.plainT}\r\n />\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DataProviderDecorator<BundleSourceTableProps, BundleSourceTableDataProps>(\r\n BundleSourceTable,\r\n {\r\n urls: {\r\n sources: ({ bundle }, socket) =>\r\n socket.get(`${QueueConstants.BUNDLES_URL}/${bundle.id}/sources`),\r\n },\r\n onSocketConnected: (addSocketListener, { refetchData, props }) => {\r\n addSocketListener<API.QueueBundle>(\r\n QueueConstants.MODULE_URL,\r\n QueueConstants.BUNDLE_SOURCES,\r\n (data) => {\r\n // Avoid flickering when there are many bundles running\r\n if (data.id === props.bundle.id) {\r\n refetchData();\r\n }\r\n },\r\n );\r\n },\r\n },\r\n);\r\n","import { Component } from 'react';\r\nimport RouteModal from 'components/semantic/RouteModal';\r\n\r\nimport ModalRouteDecorator, {\r\n ModalRouteDecoratorChildProps,\r\n} from 'decorators/ModalRouteDecorator';\r\n\r\nimport FileIcon from 'components/icon/FileIcon';\r\n\r\nimport SourceTable from 'routes/Queue/components/BundleSourceTable';\r\nimport DataProviderDecorator, {\r\n DataProviderDecoratorChildProps,\r\n} from 'decorators/DataProviderDecorator';\r\nimport QueueConstants from 'constants/QueueConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\ninterface BundleSourceDialogProps {\r\n queueT: UI.ModuleTranslator;\r\n}\r\n\r\ninterface DataProps extends DataProviderDecoratorChildProps {\r\n bundle: API.QueueBundle;\r\n}\r\n\r\ntype Props = BundleSourceDialogProps & ModalRouteDecoratorChildProps;\r\n\r\nclass SourceDialog extends Component<Props & DataProps> {\r\n static readonly displayName = 'SourceDialog';\r\n\r\n render() {\r\n const { bundle, queueT } = this.props;\r\n return (\r\n <RouteModal\r\n className=\"source\"\r\n title={bundle.name}\r\n subHeader={bundle.target}\r\n closable={true}\r\n icon={<FileIcon typeInfo={bundle.type} />}\r\n fullHeight={true}\r\n {...this.props}\r\n >\r\n <SourceTable bundle={bundle} queueT={queueT} />\r\n </RouteModal>\r\n );\r\n }\r\n}\r\n\r\nexport default ModalRouteDecorator<BundleSourceDialogProps>(\r\n DataProviderDecorator<Props, DataProps>(SourceDialog, {\r\n urls: {\r\n bundle: ({ params }, socket) =>\r\n socket.get(`${QueueConstants.BUNDLES_URL}/${params.bundleId}`),\r\n },\r\n }),\r\n 'sources/:bundleId',\r\n);\r\n","import * as React from 'react';\r\nimport { Column } from 'fixed-data-table-2';\r\n\r\nimport VirtualTable from 'components/table/VirtualTable';\r\n\r\nimport PriorityMenu from 'routes/Queue/components/PriorityMenu';\r\nimport StatusCell from 'routes/Queue/components/StatusCell';\r\nimport QueueBundleViewStore from 'stores/views/QueueBundleViewStore';\r\n\r\nimport BundleFileDialog from 'routes/Queue/components/BundleFileDialog';\r\nimport SourceDialog from 'routes/Queue/components/BundleSourceDialog';\r\n\r\nimport { ActionMenu } from 'components/action-menu';\r\nimport Message from 'components/semantic/Message';\r\n\r\nimport {\r\n ActionLinkCell,\r\n FileActionCell,\r\n SizeCell,\r\n SpeedCell,\r\n AbbreviatedDurationCell,\r\n DurationCell,\r\n} from 'components/table/Cell';\r\n\r\nimport '../style.css';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { getModuleT } from 'utils/TranslationUtils';\r\nimport { setBundlePriority } from 'services/api/QueueApi';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport MenuConstants from 'constants/MenuConstants';\r\nimport {\r\n QueueActionMenu,\r\n QueueBundleActionMenu,\r\n QueueBundleActionModule,\r\n QueueBundleViewContentAction,\r\n QueueBundleViewSourcesAction,\r\n} from 'actions/ui/queue';\r\n\r\nconst PriorityCell: React.FC<\r\n RowWrapperCellChildProps<API.QueuePriority, API.QueueBundle>\r\n> = ({ cellData, rowDataGetter, t }) => (\r\n <PriorityMenu\r\n itemPrio={cellData!}\r\n item={rowDataGetter!()}\r\n prioAction={setBundlePriority}\r\n t={t!}\r\n />\r\n);\r\n\r\nclass Queue extends React.Component<WithTranslation> {\r\n static readonly displayName = 'Queue';\r\n\r\n isActive = (cellData: any, rowData: API.QueueBundle) => {\r\n return !rowData.status.downloaded;\r\n };\r\n\r\n isDownloaded = (cellData: any, rowData: API.QueueBundle) => {\r\n return rowData.status.downloaded;\r\n };\r\n\r\n isRunning = (cellData: any, rowData: API.QueueBundle) => {\r\n return rowData.speed > 0;\r\n };\r\n\r\n emptyRowsNodeGetter = () => {\r\n const { t } = this.queueT;\r\n return (\r\n <Message\r\n title={t('queueEmpty', 'The queue is empty')}\r\n icon={IconConstants.FILE}\r\n description={t(\r\n 'queueEmptyDesc',\r\n 'New items can be queued from search or filelists',\r\n )}\r\n />\r\n );\r\n };\r\n\r\n queueT = getModuleT(this.props.t, UI.Modules.QUEUE);\r\n render() {\r\n const { translate } = this.queueT;\r\n return (\r\n <>\r\n <VirtualTable\r\n emptyRowsNodeGetter={this.emptyRowsNodeGetter}\r\n store={QueueBundleViewStore}\r\n footerData={\r\n <ActionMenu\r\n className=\"top left pointing\"\r\n caption={translate('Actions...')}\r\n actions={QueueActionMenu}\r\n header={translate('Queue actions')}\r\n triggerIcon=\"chevron up\"\r\n button={true}\r\n remoteMenuId=\"queue\"\r\n />\r\n }\r\n moduleId={UI.Modules.QUEUE}\r\n >\r\n <Column\r\n name=\"Name\"\r\n width={200}\r\n flexGrow={4}\r\n columnKey=\"name\"\r\n cell={\r\n <FileActionCell\r\n actions={QueueBundleActionMenu}\r\n remoteMenuId={MenuConstants.QUEUE_BUNDLE}\r\n ids={[\r\n 'content',\r\n 'sources',\r\n 'divider',\r\n 'search',\r\n 'searchBundleAlternates',\r\n 'divider',\r\n 'removeBundle',\r\n 'divider',\r\n 'rescan',\r\n 'forceShare',\r\n ]}\r\n />\r\n }\r\n />\r\n <Column\r\n name=\"Size\"\r\n width={60}\r\n columnKey=\"size\"\r\n cell={<SizeCell />}\r\n flexGrow={1}\r\n />\r\n <Column\r\n name=\"Type/content\"\r\n width={150}\r\n columnKey=\"type\"\r\n hideWidth={1000}\r\n cell={\r\n <ActionLinkCell\r\n action={QueueBundleViewContentAction}\r\n moduleData={QueueBundleActionModule}\r\n />\r\n }\r\n />\r\n <Column\r\n name=\"Status\"\r\n width={120}\r\n flexGrow={3}\r\n columnKey=\"status\"\r\n cell={<StatusCell />}\r\n />\r\n <Column\r\n name=\"Sources\"\r\n width={60}\r\n columnKey=\"sources\"\r\n renderCondition={this.isActive}\r\n flexGrow={1}\r\n cell={\r\n <ActionLinkCell\r\n action={QueueBundleViewSourcesAction}\r\n moduleData={QueueBundleActionModule}\r\n />\r\n }\r\n />\r\n <Column\r\n name=\"Time left\"\r\n width={50}\r\n columnKey=\"seconds_left\"\r\n renderCondition={this.isRunning}\r\n cell={<AbbreviatedDurationCell />}\r\n />\r\n <Column\r\n name=\"Speed\"\r\n width={50}\r\n columnKey=\"speed\"\r\n cell={<SpeedCell />}\r\n renderCondition={this.isRunning}\r\n flexGrow={1}\r\n />\r\n <Column\r\n name=\"Priority\"\r\n width={80}\r\n columnKey=\"priority\"\r\n renderCondition={this.isActive}\r\n cell={<PriorityCell />}\r\n flexGrow={1}\r\n />\r\n <Column\r\n name=\"Added\"\r\n width={100}\r\n columnKey=\"time_added\"\r\n cell={<DurationCell />}\r\n hideWidth={1400}\r\n />\r\n <Column\r\n name=\"Finished\"\r\n width={100}\r\n columnKey=\"time_finished\"\r\n cell={<DurationCell />}\r\n renderCondition={this.isDownloaded}\r\n hideWidth={1200}\r\n />\r\n </VirtualTable>\r\n <SourceDialog queueT={this.queueT} />\r\n <BundleFileDialog />\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(Queue);\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","BundleSourceActions","removeBundleSource","displayName","access","QUEUE_EDIT","icon","REMOVE","handler","itemData","source","entity","bundle","socket","delete","BUNDLES_URL","user","cid","QueueBundleSourceActionMenu","moduleData","moduleId","QUEUE","subId","actions","QueueFileSearchAction","SEARCH","file","location","navigate","search","QueueFileSearchAlternatesAction","SEARCH_ALTERNATES","filter","time_finished","post","FILES_URL","QueueFileRemoveAction","confirmation","content","approveCaption","rejectCaption","checkboxCaption","removeFinished","remove_finished","notifications","onSuccess","QueueFileActions","searchFileAlternates","removeFile","QueueFileActionMenu","QueueSourceRemoveAction","SOURCES_URL","setBundlePriorities","prio","QueueConstants","priority","QueueRemoveCompletedAction","IconConstants","QueuePauseAction","PAUSE","PAUSED_FORCED","QueueResumeAction","PLAY","DEFAULT","QueueActions","removeCompleted","divider","pause","resume","QueueActionMenu","bundleValidationFailed","status","S","COMPLETION_VALIDATION_ERROR","itemNotFinished","shareBundle","skipValidation","skip_validation","QueueBundleViewSourcesAction","USER","data","sources","total","QueueBundleViewContentAction","FILE","type","QueueBundleSearchAction","SearchActions","QueueBundleSearchAlternatesAction","QueueBundleRemoveAction","QueueBundleRescanAction","REFRESH_COLORED","QueueBundleForceShareAction","ERROR","QueueBundleActions","searchBundleAlternates","divider2","removeBundle","divider3","rescan","forceShare","QueueBundleActionModule","QueueBundleActionMenu","className","percent","caption","indeterminate","undefined","style","transitionDuration","width","minWidth","PriorityEnum","str","PAUSED","LOWEST","LOW","NORMAL","HIGH","HIGHEST","memo","item","itemPrio","prioAction","t","hasAccess","setPriority","priorityId","auto","toLocaleLowerCase","TableDropdown","onClose","children","Object","keys","map","Number","prioKey","currentPrio","toString","active","onClick","getPriorityListItem","EmptyDropdown","prevProps","nextProps","getStatusClass","cellData","rowData","completed","statusId","grey","QUEUED","speed","blue","rowDataGetter","failed","Progress","downloaded_bytes","size","_viewName","_apiUrl","MODULE_URL","mixins","ViewStoreMixin","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","PriorityCell","BundleFileTable","isActive","downloaded","isRunning","render","VirtualTable","store","QueueFileViewStore","sourceFilter","pattern","this","props","method","EXACT","property","name","flexGrow","columnKey","cell","remoteMenuId","MenuConstants","QUEUE_FILE","renderCondition","BundleFileDialog","Component","RouteModal","title","subHeader","target","closable","FileIcon","typeInfo","fullHeight","ModalRouteDecorator","DataProviderDecorator","urls","params","get","bundleId","Source","formatSize","formatSpeed","userIcon","ids","contextElement","HINTED_USER","hub_names","last_speed","files","userSort","a","b","nicks","localeCompare","queueT","translate","slice","sort","plainT","onSocketConnected","addSocketListener","refetchData","BUNDLE_SOURCES","SourceDialog","Queue","isDownloaded","emptyRowsNodeGetter","Message","description","QueueBundleViewStore","footerData","header","triggerIcon","button","QUEUE_BUNDLE","hideWidth","action"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunkairdcpp_webui=self.webpackChunkairdcpp_webui||[]).push([[91],{15911:(e,t,n)=>{n.d(t,{Z:()=>c});const i=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,s=e=>{if("string"!=typeof e)throw new TypeError("Invalid argument expected string");const t=e.match(i);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},o=e=>"*"===e||"x"===e||"X"===e,a=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},r=(e,t)=>{if(o(e)||o(t))return 0;const[n,i]=((e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t])(a(e),a(t));return n>i?1:n<i?-1:0},l=(e,t)=>{for(let n=0;n<Math.max(e.length,t.length);n++){const i=r(e[n]||"0",t[n]||"0");if(0!==i)return i}return 0},c=(e,t)=>{const n=s(e),i=s(t),o=n.pop(),a=i.pop(),r=l(n,i);return 0!==r?r:o&&a?l(o.split("."),a.split(".")):o||a?o?-1:1:0}},28466:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(71354),s=n.n(i),o=n(76314),a=n.n(o)()(s());a.push([e.id,'/*!\n * # Fomantic-UI 2.9.3 - Item\n * https://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * https://opensource.org/licenses/MIT\n *\n */.ui.items>.item{display:flex;margin:1em 0;width:100%;min-height:0;background:0 0;padding:0;border:none;border-radius:0;box-shadow:none;transition:box-shadow .1s ease;z-index:""}.ui.items>.item a{cursor:pointer}.ui.items{margin:1.5em 0}.ui.items:first-child{margin-top:0!important}.ui.items:last-child{margin-bottom:0!important}.ui.items>.item::after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item:first-child{margin-top:0}.ui.items>.item:last-child{margin-bottom:0}.ui.items>.item>.image{position:relative;flex:0 0 auto;display:block;float:none;margin:0;padding:0;max-height:"";align-self:start}.ui.items>.item>.image>img{display:block;width:100%;height:auto;border-radius:.125rem;border:none}.ui.items>.item>.image:only-child>img{border-radius:0}.ui.items>.item>.content{display:block;flex:1 1 auto;background:0 0;color:rgba(0,0,0,.87);margin:0;padding:0;box-shadow:none;font-size:1em;border:none;border-radius:0}.ui.items>.item>.content::after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image+.content{min-width:0;width:auto;display:block;margin-left:0;align-self:start;padding-left:1.5em}.ui.items>.item>.content>.header{display:inline-block;margin:-.21425em 0 0;font-family:Lato,system-ui,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:700;color:rgba(0,0,0,.85)}.ui.items>.item>.content>.header:not(.ui){font-size:1.28571429em}.ui.items>.item [class*="left floated"]{float:left}.ui.items>.item [class*="right floated"]{float:right}.ui.items>.item .content img{align-self:center;width:""}.ui.items>.item .avatar img,.ui.items>.item img.avatar{width:"";height:"";border-radius:500rem}.ui.items>.item>.content>.description{margin-top:.6em;max-width:none;font-size:1em;line-height:1.4285em;color:rgba(0,0,0,.87)}.ui.items>.item>.content p{margin:0 0 .5em}.ui.items>.item>.content p:last-child{margin-bottom:0}.ui.items>.item .meta{margin:.5em 0 .5em;font-size:1em;line-height:1em;color:rgba(0,0,0,.6)}.ui.items>.item .meta *{margin-right:.3em}.ui.items>.item .meta :last-child{margin-right:0}.ui.items>.item .meta [class*="right floated"]{margin-right:0;margin-left:.3em}.ui.items>.item>.content a:not(.ui){color:"";transition:color .1s ease}.ui.items>.item>.content a:not(.ui):hover{color:""}.ui.items>.item>.content>a.header{color:rgba(0,0,0,.85)}.ui.items>.item>.content>a.header:hover{color:#1e70bf}.ui.items>.item .meta>a:not(.ui){color:rgba(0,0,0,.4)}.ui.items>.item .meta>a:not(.ui):hover{color:rgba(0,0,0,.87)}.ui.items>.item>.content .favorite.icon{cursor:pointer;opacity:.75;transition:color .1s ease}.ui.items>.item>.content .favorite.icon:hover{opacity:1;color:#ffb70a}.ui.items>.item>.content .active.favorite.icon{color:#ffe623}.ui.items>.item>.content .like.icon{cursor:pointer;opacity:.75;transition:color .1s ease}.ui.items>.item>.content .like.icon:hover{opacity:1;color:#ff2733}.ui.items>.item>.content .active.like.icon{color:#ff2733}.ui.items>.item .extra{display:block;position:relative;background:0 0;margin:.5rem 0 0;width:100%;padding:0;top:0;left:0;color:rgba(0,0,0,.4);box-shadow:none;transition:color .1s ease;border-top:none}.ui.items>.item .extra>*{margin:.25rem .5rem .25rem 0}.ui.items>.item .extra>[class*="right floated"]{margin:.25rem 0 .25rem .5rem}.ui.items>.item .extra::after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image:not(.ui){width:175px}@media only screen and (min-width:768px) and (max-width:991.98px){.ui.items>.item{margin:1em 0}.ui.items>.item>.image:not(.ui){width:150px}.ui.items>.item>.image+.content{display:block;padding:0 0 0 1em}}@media only screen and (max-width:767.98px){.ui.items:not(.unstackable)>.item{flex-direction:column;margin:2em 0}.ui.items:not(.unstackable)>.item>.image{display:block;margin-left:auto;margin-right:auto}.ui.items:not(.unstackable)>.item>.image,.ui.items:not(.unstackable)>.item>.image>img{max-width:100%!important;width:auto!important;max-height:250px!important}.ui.items:not(.unstackable)>.item>.image+.content{display:block;padding:1.5em 0 0}}.ui.items>.item>.image+[class*="top aligned"].content{align-self:flex-start}.ui.items>.item>.image+[class*="middle aligned"].content{align-self:center}.ui.items>.item>.image+[class*="bottom aligned"].content{align-self:flex-end}.ui.relaxed.items>.item{margin:1.5em 0}.ui[class*="very relaxed"].items>.item{margin:2em 0}.ui.divided.items>.item{border-top:1px solid rgba(34,36,38,.15);margin:0;padding:1em 0}.ui.divided.items>.item:first-child{border-top:none;margin-top:0!important;padding-top:0!important}.ui.divided.items>.item:last-child{margin-bottom:0!important;padding-bottom:0!important}.ui.relaxed.divided.items>.item{margin:0;padding:1.5em 0}.ui[class*="very relaxed"].divided.items>.item{margin:0;padding:2em 0}.ui.items a.item:hover,.ui.link.items>.item:hover{cursor:pointer}.ui.items a.item:hover .content .header,.ui.link.items>.item:hover .content .header{color:#1e70bf}.ui.items>.item{font-size:1em}.ui.mini.items>.item{font-size:.78571429em}.ui.tiny.items>.item{font-size:.85714286em}.ui.small.items>.item{font-size:.92857143em}.ui.large.items>.item{font-size:1.14285714em}.ui.big.items>.item{font-size:1.28571429em}.ui.huge.items>.item{font-size:1.42857143em}.ui.massive.items>.item{font-size:1.71428571em}@media only screen and (max-width:767.98px){.ui.unstackable.items>.item>.image,.ui.unstackable.items>.item>.image>img{width:125px!important}}.ui.inverted.items>.item{background:0 0}.ui.inverted.items>.item>.content{background:0 0;color:rgba(255,255,255,.9)}.ui.inverted.items>.item .extra{background:0 0}.ui.inverted.items>.item>.content>.header{color:rgba(255,255,255,.9)}.ui.inverted.items>.item>.content>.description{color:rgba(255,255,255,.9)}.ui.inverted.items>.item .meta{color:rgba(255,255,255,.8)}.ui.inverted.items>.item>.content a:not(.ui){color:#57a4ef}.ui.inverted.items>.item>.content a:not(.ui):hover{color:#4183c4}.ui.inverted.items>.item>.content>a.header{color:rgba(255,255,255,.9)}.ui.inverted.items>.item>.content>a.header:hover{color:#fff}.ui.inverted.items>.item .meta>a:not(.ui){color:rgba(255,255,255,.7)}.ui.inverted.items>.item .meta>a:not(.ui):hover{color:rgba(255,255,255,.9)}.ui.inverted.items>.item>.content .favorite.icon:hover{color:#ffc63d}.ui.inverted.items>.item>.content .active.favorite.icon{color:#ffec56}.ui.inverted.items>.item>.content .like.icon:hover{color:#ff5a63}.ui.inverted.items>.item>.content .active.like.icon{color:#ff5a63}.ui.inverted.items>.item .extra{color:rgba(255,255,255,.7)}.ui.inverted.items a.item:hover .content .header,.ui.inverted.link.items>.item:hover .content .header{color:#fff}.ui.inverted.divided.items>.item{border-top:1px solid rgba(255,255,255,.1)}.ui.inverted.divided.items>.item:first-child{border-top:none}.ui.disabled.items,.ui.items>.disabled.item{opacity:.45;pointer-events:none}',"",{version:3,sources:["webpack://./node_modules/fomantic-ui-css/components/item.min.css"],names:[],mappings:"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",sourcesContent:['/*!\n * # Fomantic-UI 2.9.3 - Item\n * https://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * https://opensource.org/licenses/MIT\n *\n */.ui.items>.item{display:flex;margin:1em 0;width:100%;min-height:0;background:0 0;padding:0;border:none;border-radius:0;box-shadow:none;transition:box-shadow .1s ease;z-index:""}.ui.items>.item a{cursor:pointer}.ui.items{margin:1.5em 0}.ui.items:first-child{margin-top:0!important}.ui.items:last-child{margin-bottom:0!important}.ui.items>.item::after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item:first-child{margin-top:0}.ui.items>.item:last-child{margin-bottom:0}.ui.items>.item>.image{position:relative;flex:0 0 auto;display:block;float:none;margin:0;padding:0;max-height:"";align-self:start}.ui.items>.item>.image>img{display:block;width:100%;height:auto;border-radius:.125rem;border:none}.ui.items>.item>.image:only-child>img{border-radius:0}.ui.items>.item>.content{display:block;flex:1 1 auto;background:0 0;color:rgba(0,0,0,.87);margin:0;padding:0;box-shadow:none;font-size:1em;border:none;border-radius:0}.ui.items>.item>.content::after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image+.content{min-width:0;width:auto;display:block;margin-left:0;align-self:start;padding-left:1.5em}.ui.items>.item>.content>.header{display:inline-block;margin:-.21425em 0 0;font-family:Lato,system-ui,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:700;color:rgba(0,0,0,.85)}.ui.items>.item>.content>.header:not(.ui){font-size:1.28571429em}.ui.items>.item [class*="left floated"]{float:left}.ui.items>.item [class*="right floated"]{float:right}.ui.items>.item .content img{align-self:center;width:""}.ui.items>.item .avatar img,.ui.items>.item img.avatar{width:"";height:"";border-radius:500rem}.ui.items>.item>.content>.description{margin-top:.6em;max-width:none;font-size:1em;line-height:1.4285em;color:rgba(0,0,0,.87)}.ui.items>.item>.content p{margin:0 0 .5em}.ui.items>.item>.content p:last-child{margin-bottom:0}.ui.items>.item .meta{margin:.5em 0 .5em;font-size:1em;line-height:1em;color:rgba(0,0,0,.6)}.ui.items>.item .meta *{margin-right:.3em}.ui.items>.item .meta :last-child{margin-right:0}.ui.items>.item .meta [class*="right floated"]{margin-right:0;margin-left:.3em}.ui.items>.item>.content a:not(.ui){color:"";transition:color .1s ease}.ui.items>.item>.content a:not(.ui):hover{color:""}.ui.items>.item>.content>a.header{color:rgba(0,0,0,.85)}.ui.items>.item>.content>a.header:hover{color:#1e70bf}.ui.items>.item .meta>a:not(.ui){color:rgba(0,0,0,.4)}.ui.items>.item .meta>a:not(.ui):hover{color:rgba(0,0,0,.87)}.ui.items>.item>.content .favorite.icon{cursor:pointer;opacity:.75;transition:color .1s ease}.ui.items>.item>.content .favorite.icon:hover{opacity:1;color:#ffb70a}.ui.items>.item>.content .active.favorite.icon{color:#ffe623}.ui.items>.item>.content .like.icon{cursor:pointer;opacity:.75;transition:color .1s ease}.ui.items>.item>.content .like.icon:hover{opacity:1;color:#ff2733}.ui.items>.item>.content .active.like.icon{color:#ff2733}.ui.items>.item .extra{display:block;position:relative;background:0 0;margin:.5rem 0 0;width:100%;padding:0;top:0;left:0;color:rgba(0,0,0,.4);box-shadow:none;transition:color .1s ease;border-top:none}.ui.items>.item .extra>*{margin:.25rem .5rem .25rem 0}.ui.items>.item .extra>[class*="right floated"]{margin:.25rem 0 .25rem .5rem}.ui.items>.item .extra::after{display:block;content:" ";height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image:not(.ui){width:175px}@media only screen and (min-width:768px) and (max-width:991.98px){.ui.items>.item{margin:1em 0}.ui.items>.item>.image:not(.ui){width:150px}.ui.items>.item>.image+.content{display:block;padding:0 0 0 1em}}@media only screen and (max-width:767.98px){.ui.items:not(.unstackable)>.item{flex-direction:column;margin:2em 0}.ui.items:not(.unstackable)>.item>.image{display:block;margin-left:auto;margin-right:auto}.ui.items:not(.unstackable)>.item>.image,.ui.items:not(.unstackable)>.item>.image>img{max-width:100%!important;width:auto!important;max-height:250px!important}.ui.items:not(.unstackable)>.item>.image+.content{display:block;padding:1.5em 0 0}}.ui.items>.item>.image+[class*="top aligned"].content{align-self:flex-start}.ui.items>.item>.image+[class*="middle aligned"].content{align-self:center}.ui.items>.item>.image+[class*="bottom aligned"].content{align-self:flex-end}.ui.relaxed.items>.item{margin:1.5em 0}.ui[class*="very relaxed"].items>.item{margin:2em 0}.ui.divided.items>.item{border-top:1px solid rgba(34,36,38,.15);margin:0;padding:1em 0}.ui.divided.items>.item:first-child{border-top:none;margin-top:0!important;padding-top:0!important}.ui.divided.items>.item:last-child{margin-bottom:0!important;padding-bottom:0!important}.ui.relaxed.divided.items>.item{margin:0;padding:1.5em 0}.ui[class*="very relaxed"].divided.items>.item{margin:0;padding:2em 0}.ui.items a.item:hover,.ui.link.items>.item:hover{cursor:pointer}.ui.items a.item:hover .content .header,.ui.link.items>.item:hover .content .header{color:#1e70bf}.ui.items>.item{font-size:1em}.ui.mini.items>.item{font-size:.78571429em}.ui.tiny.items>.item{font-size:.85714286em}.ui.small.items>.item{font-size:.92857143em}.ui.large.items>.item{font-size:1.14285714em}.ui.big.items>.item{font-size:1.28571429em}.ui.huge.items>.item{font-size:1.42857143em}.ui.massive.items>.item{font-size:1.71428571em}@media only screen and (max-width:767.98px){.ui.unstackable.items>.item>.image,.ui.unstackable.items>.item>.image>img{width:125px!important}}.ui.inverted.items>.item{background:0 0}.ui.inverted.items>.item>.content{background:0 0;color:rgba(255,255,255,.9)}.ui.inverted.items>.item .extra{background:0 0}.ui.inverted.items>.item>.content>.header{color:rgba(255,255,255,.9)}.ui.inverted.items>.item>.content>.description{color:rgba(255,255,255,.9)}.ui.inverted.items>.item .meta{color:rgba(255,255,255,.8)}.ui.inverted.items>.item>.content a:not(.ui){color:#57a4ef}.ui.inverted.items>.item>.content a:not(.ui):hover{color:#4183c4}.ui.inverted.items>.item>.content>a.header{color:rgba(255,255,255,.9)}.ui.inverted.items>.item>.content>a.header:hover{color:#fff}.ui.inverted.items>.item .meta>a:not(.ui){color:rgba(255,255,255,.7)}.ui.inverted.items>.item .meta>a:not(.ui):hover{color:rgba(255,255,255,.9)}.ui.inverted.items>.item>.content .favorite.icon:hover{color:#ffc63d}.ui.inverted.items>.item>.content .active.favorite.icon{color:#ffec56}.ui.inverted.items>.item>.content .like.icon:hover{color:#ff5a63}.ui.inverted.items>.item>.content .active.like.icon{color:#ff5a63}.ui.inverted.items>.item .extra{color:rgba(255,255,255,.7)}.ui.inverted.items a.item:hover .content .header,.ui.inverted.link.items>.item:hover .content .header{color:#fff}.ui.inverted.divided.items>.item{border-top:1px solid rgba(255,255,255,.1)}.ui.inverted.divided.items>.item:first-child{border-top:none}.ui.disabled.items,.ui.items>.disabled.item{opacity:.45;pointer-events:none}'],sourceRoot:""}]);const r=a},29802:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(71354),s=n.n(i),o=n(76314),a=n.n(o)()(s());a.push([e.id,".settings-layout .detect-panel {\n margin-top: 30px;\n}\n\n.settings-layout .detect-panel .header.column > div {\n overflow: hidden;\n line-height: inherit !important;\n}\n\n.settings-layout .detect-panel .header.column {\n max-width: 200px;\n}\n\n.settings-layout .detect-panel .detect-button {\n margin-top: 20px;\n}\n","",{version:3,sources:["webpack://./src/routes/Settings/routes/Connectivity/style.css"],names:[],mappings:"AAAA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,+BAA+B;AACjC;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB",sourcesContent:[".settings-layout .detect-panel {\n margin-top: 30px;\n}\n\n.settings-layout .detect-panel .header.column > div {\n overflow: hidden;\n line-height: inherit !important;\n}\n\n.settings-layout .detect-panel .header.column {\n max-width: 200px;\n}\n\n.settings-layout .detect-panel .detect-button {\n margin-top: 20px;\n}\n"],sourceRoot:""}]);const r=a},62868:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(71354),s=n.n(i),o=n(76314),a=n.n(o)()(s());a.push([e.id,".settings-layout .profile.miscellaneous .field-nmdc_encoding li {\n margin-bottom: 5px;\n}\n","",{version:3,sources:["webpack://./src/routes/Settings/routes/Profile/style.css"],names:[],mappings:"AAAA;EACE,kBAAkB;AACpB",sourcesContent:[".settings-layout .profile.miscellaneous .field-nmdc_encoding li {\n margin-bottom: 5px;\n}\n"],sourceRoot:""}]);const r=a},14411:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(71354),s=n.n(i),o=n(76314),a=n.n(o)()(s());a.push([e.id,".settings-layout .hash-database.grid {\n padding: 10px 0px 15px 0px;\n}\n\n.settings-layout .hash-database.grid .row {\n padding: 5px 0px;\n}\n\n.settings-layout .sharing.excludes .add.button {\n margin-top: 20px;\n}\n","",{version:3,sources:["webpack://./src/routes/Settings/routes/Sharing/style.css"],names:[],mappings:"AAAA;EACE,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB",sourcesContent:[".settings-layout .hash-database.grid {\n padding: 10px 0px 15px 0px;\n}\n\n.settings-layout .hash-database.grid .row {\n padding: 5px 0px;\n}\n\n.settings-layout .sharing.excludes .add.button {\n margin-top: 20px;\n}\n"],sourceRoot:""}]);const r=a},14160:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(71354),s=n.n(i),o=n(76314),a=n.n(o)()(s());a.push([e.id,".web-user.modal .ui.checkbox {\n width: 100%;\n margin-top: 5px;\n}\n\n.web-user.modal .ui.checkbox.admin {\n margin-bottom: 10px;\n font-weight: bold;\n}\n\n.settings-layout .system.logging .log-section.active {\n background-color: whitesmoke;\n}\n\n.settings-layout .system.logging .sections {\n margin-top: 25px !important;\n}\n","",{version:3,sources:["webpack://./src/routes/Settings/routes/System/style.css"],names:[],mappings:"AAAA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,2BAA2B;AAC7B",sourcesContent:[".web-user.modal .ui.checkbox {\n width: 100%;\n margin-top: 5px;\n}\n\n.web-user.modal .ui.checkbox.admin {\n margin-bottom: 10px;\n font-weight: bold;\n}\n\n.settings-layout .system.logging .log-section.active {\n background-color: whitesmoke;\n}\n\n.settings-layout .system.logging .sections {\n margin-top: 25px !important;\n}\n"],sourceRoot:""}]);const r=a},49696:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(71354),s=n.n(i),o=n(76314),a=n.n(o)()(s());a.push([e.id,".settings-layout .view.notifications .field-notify_events_info {\n margin-top: 25px;\n}\n","",{version:3,sources:["webpack://./src/routes/Settings/routes/View/style.css"],names:[],mappings:"AAAA;EACE,gBAAgB;AAClB",sourcesContent:[".settings-layout .view.notifications .field-notify_events_info {\n margin-top: 25px;\n}\n"],sourceRoot:""}]);const r=a},74143:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(71354),s=n.n(i),o=n(76314),a=n.n(o)()(s());a.push([e.id,".settings-layout {\n padding-bottom: 30px;\n max-height: 100% !important;\n display: flex;\n flex-direction: column;\n}\n\n.settings-layout .menu-column .menu {\n max-width: 100%;\n}\n\n.settings-layout .layout.header {\n margin-bottom: 20px;\n}\n\n.settings-layout .setting-form {\n margin-top: 30px;\n}\n\n.settings-layout .setting-form:first-child {\n margin-top: 0px;\n}\n\n.settings-layout h3 {\n margin-bottom: 20px;\n}\n\n.settings-layout h4 {\n margin-top: 15px;\n}\n\n.settings-layout > div,\n.settings-layout .mobile .section-content {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n margin-bottom: 5px;\n}\n\n.settings-layout .main.grid {\n overflow-y: auto;\n padding: 0px;\n}\n\n.settings-layout .mobile .section-content {\n padding-bottom: 5px;\n /* For possible scrollbar */\n padding-right: 5px;\n}\n\n.settings-layout .mobile .section-content.about {\n margin-top: 10px;\n}\n\n.settings-layout .mobile .section-content.about .options {\n flex-shrink: 0;\n}\n\n.settings-layout .full .section-content {\n height: 100%;\n padding-bottom: 2px;\n}\n\n.settings-layout .top-menu {\n display: flex;\n align-items: center;\n margin-bottom: 10px;\n flex-shrink: 0;\n}\n\n.settings-layout .top-menu > .ui.dropdown,\n.settings-layout .top-menu > .ui.dropdown > .caption {\n display: flex;\n}\n\n.settings-layout .top-menu > i {\n margin: 0px 5px;\n}\n\n.settings-layout .full .top-menu i {\n display: none;\n}\n\n.settings-layout .mobile .save.button {\n margin-bottom: 10px;\n flex-shrink: 0;\n}\n\n.settings-layout .options {\n min-height: 80px;\n}\n\n.settings-layout .options > .ui.grid {\n margin: 0px;\n}\n","",{version:3,sources:["webpack://./src/routes/Settings/style.css"],names:[],mappings:"AAAA;EACE,oBAAoB;EACpB,2BAA2B;EAC3B,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;;EAEE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,mBAAmB;EACnB,2BAA2B;EAC3B,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,cAAc;AAChB;;AAEA;;EAEE,aAAa;AACf;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,mBAAmB;EACnB,cAAc;AAChB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;AACb",sourcesContent:[".settings-layout {\n padding-bottom: 30px;\n max-height: 100% !important;\n display: flex;\n flex-direction: column;\n}\n\n.settings-layout .menu-column .menu {\n max-width: 100%;\n}\n\n.settings-layout .layout.header {\n margin-bottom: 20px;\n}\n\n.settings-layout .setting-form {\n margin-top: 30px;\n}\n\n.settings-layout .setting-form:first-child {\n margin-top: 0px;\n}\n\n.settings-layout h3 {\n margin-bottom: 20px;\n}\n\n.settings-layout h4 {\n margin-top: 15px;\n}\n\n.settings-layout > div,\n.settings-layout .mobile .section-content {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n margin-bottom: 5px;\n}\n\n.settings-layout .main.grid {\n overflow-y: auto;\n padding: 0px;\n}\n\n.settings-layout .mobile .section-content {\n padding-bottom: 5px;\n /* For possible scrollbar */\n padding-right: 5px;\n}\n\n.settings-layout .mobile .section-content.about {\n margin-top: 10px;\n}\n\n.settings-layout .mobile .section-content.about .options {\n flex-shrink: 0;\n}\n\n.settings-layout .full .section-content {\n height: 100%;\n padding-bottom: 2px;\n}\n\n.settings-layout .top-menu {\n display: flex;\n align-items: center;\n margin-bottom: 10px;\n flex-shrink: 0;\n}\n\n.settings-layout .top-menu > .ui.dropdown,\n.settings-layout .top-menu > .ui.dropdown > .caption {\n display: flex;\n}\n\n.settings-layout .top-menu > i {\n margin: 0px 5px;\n}\n\n.settings-layout .full .top-menu i {\n display: none;\n}\n\n.settings-layout .mobile .save.button {\n margin-bottom: 10px;\n flex-shrink: 0;\n}\n\n.settings-layout .options {\n min-height: 80px;\n}\n\n.settings-layout .options > .ui.grid {\n margin: 0px;\n}\n"],sourceRoot:""}]);const r=a},97771:(e,t,n)=>{var i=n(85072),s=n.n(i),o=n(97825),a=n.n(o),r=n(77659),l=n.n(r),c=n(55056),d=n.n(c),A=n(10540),m=n.n(A),u=n(41113),p=n.n(u),h=n(28466),g={};g.styleTagTransform=p(),g.setAttributes=d(),g.insert=l().bind(null,"head"),g.domAPI=a(),g.insertStyleElement=m(),s()(h.A,g),h.A&&h.A.locals&&h.A.locals},97578:(e,t,n)=>{var i=n(85072),s=n.n(i),o=n(97825),a=n.n(o),r=n(77659),l=n.n(r),c=n(55056),d=n.n(c),A=n(10540),m=n.n(A),u=n(41113),p=n.n(u),h=n(14411),g={};g.styleTagTransform=p(),g.setAttributes=d(),g.insert=l().bind(null,"head"),g.domAPI=a(),g.insertStyleElement=m(),s()(h.A,g),h.A&&h.A.locals&&h.A.locals},50935:(e,t,n)=>{var i=n(85072),s=n.n(i),o=n(97825),a=n.n(o),r=n(77659),l=n.n(r),c=n(55056),d=n.n(c),A=n(10540),m=n.n(A),u=n(41113),p=n.n(u),h=n(14160),g={};g.styleTagTransform=p(),g.setAttributes=d(),g.insert=l().bind(null,"head"),g.domAPI=a(),g.insertStyleElement=m(),s()(h.A,g),h.A&&h.A.locals&&h.A.locals},50929:(e,t,n)=>{n.d(t,{Cp:()=>m,Cs:()=>d,Dm:()=>u,YB:()=>A});var i=n(88569),s=n(2141),o=n(4425),a=n(86038),r=n(67749);const l=(e,t,n,i)=>e.post(s.A.DOWNLOAD_URL,{install_id:n||t,url:t,shasum:i}),c=e=>{return t=void 0,n=[e],a=function*({itemData:e,socket:t}){const n=yield(0,i.H)(s.A.NPM_PACKAGE_URL+e.name+"/latest",!0),{tarball:o,shasum:a}=n.dist;return l(t,o,e.name,a)},new((o=void 0)||(o=Promise))((function(e,i){function s(e){try{l(a.next(e))}catch(e){i(e)}}function r(e){try{l(a.throw(e))}catch(e){i(e)}}function l(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(s,r)}l((a=a.apply(t,n||[])).next())}));var t,n,o,a},d={id:"installUrl",displayName:"Install from URL",icon:o.A.CREATE,access:a.US.ADMIN,input:{approveCaption:"Install",content:"Enter download URL",inputProps:{placeholder:"Enter URL",type:"url",required:!0}},handler:({socket:e},t)=>l(e,t)},A={id:"installNpm",displayName:"Install",icon:o.A.CREATE,access:a.US.ADMIN,handler:c},m={id:"updateNpm",displayName:"Update",icon:o.A.REFRESH_COLORED,access:a.US.ADMIN,handler:c},u={moduleId:r.KV.EXTENSIONS}},92078:(e,t,n)=>{n.d(t,{Dq:()=>l,_k:()=>c,nQ:()=>a});var i=n(4425),s=n(67749),o=n(47650);const a={id:"create",displayName:"Add type",icon:i.A.CREATE,handler:({navigate:e})=>{e("types")}},r={edit:{id:"edit",displayName:"Edit type",icon:i.A.EDIT,handler:({itemData:e,navigate:t})=>{t(`types/${e.id}`)}},remove:{id:"remove",displayName:"Remove type",icon:i.A.REMOVE,confirmation:{content:"Are you sure that you want to remove the search type {{item.name}}?",approveCaption:"Remove type",rejectCaption:"Don't remove"},filter:({itemData:e})=>!e.default_type,handler:({itemData:e,socket:t})=>t.delete(`${o.A.SEARCH_TYPES_URL}/${e.id}`)}},l={moduleId:s.KV.SETTINGS},c={moduleData:l,actions:r}},29112:(e,t,n)=>{n.d(t,{RS:()=>r,eP:()=>c,t6:()=>d});var i=n(42191),s=n(4425),o=n(86038),a=n(67749);const r={id:"refreshAll",displayName:"Refresh all",access:o.US.SETTINGS_EDIT,icon:s.A.REFRESH_COLORED,handler:({socket:e})=>e.post(i.A.REFRESH_URL)},l={refresh:r},c={moduleId:a.KV.SHARE},d={moduleData:c,actions:l}},91510:(e,t,n)=>{n.d(t,{MB:()=>c,Tw:()=>r,nH:()=>d});var i=n(42191),s=n(4425),o=n(86038),a=n(67749);const r={id:"add",displayName:"Add path",access:o.US.SETTINGS_EDIT,icon:s.A.CREATE,handler:({navigate:e})=>{e("browse")}},l={remove:{id:"remove",displayName:"Remove path",access:o.US.SETTINGS_EDIT,icon:s.A.REMOVE,confirmation:{content:"Are you sure that you want to remove the excluded path {{item}}?",approveCaption:"Remove path",rejectCaption:"Don't remove"},handler:({itemData:e,socket:t})=>t.post(i.A.EXCLUDES_REMOVE_URL,{path:e})}},c={moduleId:a.KV.SETTINGS,subId:"shareExclude"},d={moduleData:c,actions:l}},94899:(e,t,n)=>{n.d(t,{An:()=>p,Ds:()=>f,YS:()=>_,tx:()=>u});var i=n(40599),s=n(82560),o=n(86818),a=n(4425),r=n(86038),l=n(67749),c=n(48844),d=n(68135);const A=({itemData:e})=>!e.default,m=({socket:e},t)=>e.post(o.A.PROFILES_URL,{name:t}),u={id:"create",displayName:"Add profile",access:r.US.SETTINGS_EDIT,icon:a.A.CREATE,input:{approveCaption:"Create",content:"Enter name for the profile",inputProps:{placeholder:"Enter name",required:!0}},handler:m},p={id:"clone",displayName:"Clone profile",access:r.US.SETTINGS_EDIT,icon:a.A.COPY,input:{approveCaption:"Create",content:"Enter name for the profile (cloned from {{item.name}})",inputProps:{placeholder:"Enter name",required:!0}},handler:(e,t)=>{return n=void 0,i=void 0,o=function*(){const n=yield m(e,t),{itemData:i,socket:s}=e,o=yield s.get(`${d.A.MODULE_URL}`);for(const e of o){const t=e.profiles.map((e=>e.id));t.includes(i.id)&&(yield s.patch(`${d.A.MODULE_URL}/${e.id}`,{profiles:[...t,n.id]}))}},new((s=void 0)||(s=Promise))((function(e,t){function a(e){try{l(o.next(e))}catch(e){t(e)}}function r(e){try{l(o.throw(e))}catch(e){t(e)}}function l(t){var n;t.done?e(t.value):(n=t.value,n instanceof s?n:new s((function(e){e(n)}))).then(a,r)}l((o=o.apply(n,i||[])).next())}));var n,i,s,o}},h={id:"browse",displayName:"Browse files",access:r.US.FILELISTS_VIEW,icon:a.A.FILELIST,handler:({itemData:e,location:t,navigate:n})=>i.A.ownList(e.id,{location:t,navigate:n,sessionStore:s.A})},g={id:"edit",displayName:"Rename profile",access:r.US.SETTINGS_EDIT,icon:a.A.EDIT,input:e=>({approveCaption:"Rename",content:"Enter new name for the profile {{item.name}}",inputProps:{placeholder:"Enter name",defaultValue:e.name,required:!0}}),handler:({itemData:e,socket:t},n)=>t.patch(`${o.A.PROFILES_URL}/${e.id}`,{name:n})},x={id:"default",displayName:"Set as default",access:r.US.SETTINGS_EDIT,filter:A,icon:a.A.DEFAULT,handler:({itemData:e,socket:t})=>t.post(`${o.A.PROFILES_URL}/${e.id}/default`)},v={id:"remove",displayName:"Remove profile",access:r.US.SETTINGS_EDIT,icon:a.A.REMOVE,filter:A,confirmation:{content:"Are you sure that you want to remove the profile {{item.name}}?",approveCaption:"Remove profile",rejectCaption:"Don't remove"},handler:({itemData:e,socket:t})=>t.delete(o.A.PROFILES_URL+"/"+e.id)},C={browse:h,divider:c.o,edit:g,default:x,remove:v},f={moduleId:l.KV.SETTINGS,subId:"profile"},_={moduleData:f,actions:C}},63252:(e,t,n)=>{n.d(t,{t6:()=>i.t6,Ds:()=>s.Ds,An:()=>s.An,tx:()=>s.tx,QC:()=>A,EU:()=>c,VY:()=>m});var i=n(29112),s=(n(91510),n(94899)),o=n(68135),a=n(4425),r=n(86038),l=n(67749);const c={id:"create",displayName:"Add directory",access:r.US.SETTINGS_EDIT,icon:a.A.CREATE,handler:({navigate:e})=>{e("directories")}},d={edit:{id:"edit",displayName:"Edit directory",access:r.US.SETTINGS_EDIT,icon:a.A.EDIT,handler:({itemData:e,navigate:t})=>{t(`directories/${e.id}`)}},remove:{id:"remove",displayName:"Remove directory",access:r.US.SETTINGS_EDIT,icon:a.A.REMOVE,confirmation:{content:"Are you sure that you want to remove the directory {{item.virtual_name}} from share? It will be removed from all share profiles.",approveCaption:"Remove directory",rejectCaption:"Don't remove"},handler:({itemData:e,socket:t})=>t.delete(o.A.ROOTS_URL+"/"+e.id)}},A={moduleId:l.KV.SHARE,subId:"root"},m={moduleData:A,actions:d}},72384:(e,t,n)=>{n.d(t,{A_:()=>c,Bs:()=>r,yc:()=>l});var i=n(83845),s=n(4425),o=n(86038),a=n(67749);const r={id:"restartWeb",displayName:"Restart web server",access:o.US.ADMIN,icon:s.A.REFRESH_COLORED,confirmation:{content:"When changing the binding options, it's recommended to restart the web server only \n when you are able to access the server for troubleshooting. If the web server won't come back online, you should start the application \n manually to see if there are any error messages. The configuration file is located in your user directory by default (inside .airdc++ directory) in case you need to edit it manually.",approveCaption:"Continue and restart",rejectCaption:"Don't restart"},handler:({socket:e})=>e.post(i.A.MODULE_URL+"/restart_web")},l={id:"shutdown",displayName:"Shut down application",access:o.US.ADMIN,icon:s.A.POWER,confirmation:{content:"Are you sure that you wish to shut down the application?",approveCaption:"Continue and shut down",rejectCaption:"Cancel"},handler:({socket:e})=>e.post(i.A.MODULE_URL+"/shutdown")},c={moduleId:a.KV.COMMON,subId:"system"}},52786:(e,t,n)=>{n.d(t,{F5:()=>d,O6:()=>c,u2:()=>r});var i=n(76865),s=n(4425),o=n(50753),a=n(67749);const r={id:"create",displayName:"Add user",icon:s.A.CREATE,handler:({navigate:e})=>{e("users")}},l={edit:{id:"edit",displayName:"Edit user",icon:s.A.EDIT,handler:({itemData:e,navigate:t})=>{t(`users/${e.id}`)}},remove:{id:"remove",displayName:"Remove user",filter:({itemData:e})=>e.id!==o.A.user.id,icon:s.A.REMOVE,confirmation:{content:"Are you sure that you want to remove the user {{item.username}}?",approveCaption:"Remove user",rejectCaption:"Don't remove"},handler:({itemData:e,socket:t})=>t.delete(`${i.A.USERS_URL}/${e.id}`)}},c={moduleId:a.KV.SETTINGS,subId:"webUser"},d={moduleData:c,actions:l}},18536:(e,t,n)=>{n.d(t,{A_:()=>i.A_,Bs:()=>i.Bs,yc:()=>i.yc});var i=n(72384);n(52786)},98397:(e,t,n)=>{n.d(t,{A:()=>h});var i=n(74848),s=n(96540),o=n(32728),a=n(96529),r=n(4425),l=n(19718),c=n(69640),d=n(95689),A=n(57969),m=n(67749),u=n(42695),p=n(32389);const h=({alwaysShow:e})=>{const t=(0,c.P)(d.A),n=(0,s.useContext)(A.J),{t:h}=(0,p.Bd)();return n?!e&&t[l.xC.NO_INSTALL_PROMPT]?null:(0,i.jsx)(o.A,{title:(0,u.Tl)("Install as local application",h,m.KV.COMMON),description:(0,i.jsxs)("div",{className:"install-prompt",children:[(0,i.jsx)("p",{children:h((0,u.j2)("pwaInstallDesc",m.KV.COMMON),"This web application can be installed locally, providing a better user experience")}),(0,i.jsx)(a.A,{className:"primary",caption:(0,u.Tl)("Install",h,m.KV.COMMON),onClick:()=>n(),icon:r.A.CREATE}),!e&&(0,i.jsx)(a.A,{caption:(0,u.Tl)("Don't install",h,m.KV.COMMON),onClick:()=>d.A.setValue(l.xC.NO_INSTALL_PROMPT,!0)})]})}):null}},73070:(e,t,n)=>{n.d(t,{Y9:()=>A,fI:()=>d,xA:()=>m});var i=n(74848),s=(n(96540),n(46942)),o=n.n(s),a=n(32389),r=n(42695),l=n(67749);const c=e=>e||(0,i.jsx)(a.x6,{i18nKey:(0,r.j2)("na",l.KV.COMMON),children:"N/A"}),d=({title:e,text:t,className:n,titleWidth:s="four",noText:a})=>(0,i.jsxs)("div",{className:o()("ui row",n),children:[(0,i.jsx)("div",{className:o()(a?"sixteen":s,"wide column title"),children:(0,i.jsx)("div",{className:"ui tiny header",style:{overflow:"hidden"},children:e})}),!a&&(0,i.jsx)("div",{className:"column value",children:c(t)})]}),A=({title:e})=>(0,i.jsx)("div",{className:"ui row",children:(0,i.jsx)("div",{className:"sixteen wide column",children:(0,i.jsx)("div",{className:"ui blue section header",children:e})})}),m=e=>{var{className:t,children:n,columns:s,stackable:a}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(i=Object.getOwnPropertySymbols(e);s<i.length;s++)t.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(e,i[s])&&(n[i[s]]=e[i[s]])}return n}(e,["className","children","columns","stackable"]);return(0,i.jsx)("div",Object.assign({className:o()("ui grid",{[`${s} column`]:!!s},{stackable:a},t)},r,{children:n}))}},2141:(e,t,n)=>{n.d(t,{A:()=>o});const i="extensions",s="https://registry.npmjs.org/",o={MODULE_URL:i,EXTENSIONS_URL:i,DOWNLOAD_URL:i+"/download",ENGINES_URL:i+"/engines",ENGINES_STATUS_URL:i+"/engines/status",DEFAULT_ENGINE:"node",STARTED:"extension_started",STOPPED:"extension_stopped",ADDED:"extension_added",REMOVED:"extension_removed",UPDATED:"extension_updated",INSTALLATION_STARTED:"extension_installation_started",INSTALLATION_SUCCEEDED:"extension_installation_succeeded",INSTALLATION_FAILED:"extension_installation_failed",NPM_PACKAGES_URL:s+"-/v1/search?text=keywords:airdcpp-extensions-public&size=100",NPM_PACKAGE_URL:s,NPM_HOMEPAGE_URL:"https://www.npmjs.com/package/"}},79179:(e,t,n)=>{n.d(t,{A:()=>s});const i="favorite_directories",s={MODULE_URL:i,GROUPED_DIRECTORIES_URL:i+"/grouped_paths",DIRECTORIES_URL:i,DIRECTORIES_UPDATED:"favorite_directories_updated"}},86818:(e,t,n)=>{n.d(t,{A:()=>s});const i="share_profiles",s={MODULE_URL:i,PROFILES_URL:i,PROFILE_ADDED:"share_profile_added",PROFILE_UPDATED:"share_profile_updated",PROFILE_REMOVED:"share_profile_removed",HIDDEN_PROFILE_ID:1}},68135:(e,t,n)=>{n.d(t,{A:()=>s});const i="share_roots",s={MODULE_URL:i,ROOTS_URL:i,CREATED:"share_root_created",UPDATED:"share_root_updated",REMOVED:"share_root_removed"}},76865:(e,t,n)=>{n.d(t,{A:()=>s});const i="web_users",s={MODULE_URL:i,USERS_URL:i,ADDED:"web_user_added",UPDATED:"web_user_updated",REMOVED:"web_user_removed"}},71299:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(2543),s=n(86818),o=n(56484);const a=function(e,t,n){return(0,o.A)(e,(0,i.merge)(n,{urls:{profiles:s.A.PROFILES_URL},dataConverters:{profiles:(e,{t:n})=>e.filter((e=>t||e.id!==s.A.HIDDEN_PROFILE_ID))},onSocketConnected:(e,{refetchData:t})=>{e(s.A.MODULE_URL,s.A.PROFILE_ADDED,(()=>t())),e(s.A.MODULE_URL,s.A.PROFILE_UPDATED,(()=>t())),e(s.A.MODULE_URL,s.A.PROFILE_REMOVED,(()=>t()))}}))}},1076:(e,t,n)=>{n.d(t,{A:()=>d});var i=n(74848),s=n(96540),o=n(32728),a=n(32389),r=n(42695),l=n(67749),c=n(48249);const d=function(e,t,n,d=0){return A=>{const[m,u]=s.useState(null),p=(0,c.F)(),h=e=>{u(e)},g=()=>{p.get(t).then(h).catch((e=>console.error("Failed to fetch stats",e.message)))};return s.useEffect((()=>{g();const e=window.setInterval(g,1e3*d);return()=>{window.clearTimeout(e)}}),[]),null===m?null:void 0===m?(0,i.jsx)(a.wD,{children:e=>(0,i.jsx)(o.A,{title:(0,r.Tl)("Statistics not available",e,l.KV.COMMON),description:n?n(e,A):void 0})}):(0,i.jsx)(e,Object.assign({},A,{stats:m}))}}},56022:(e,t,n)=>{n.d(t,{A:()=>c});var i=n(74848),s=n(96540),o=n(95689),a=n(94413),r=n(47456),l=n(31366);const c=({moduleT:e,keys:t,onFieldChanged:n})=>{const[c,d]=(0,s.useState)(o.A.getValues()),A=(0,s.useMemo)((()=>(0,r.Nn)(o.A.getDefinitions(t),e)),[]),m=(0,s.useContext)(l.XZ);return(0,i.jsx)("div",{className:"local setting-form",children:(0,i.jsx)(a.A,{ref:e=>m.addFormRef(t,e),id:(0,l.KZ)(t),onSave:(e,t)=>(o.A.setValues(e),d(o.A.getValues()),Promise.resolve()),fieldDefinitions:A,sourceValue:c,onFieldChanged:(e,t,i)=>{if(m.onFieldChanged(e,t,i),n)return n(e,t,i)}})})}},20239:(e,t,n)=>{n.d(t,{A:()=>A});var i=n(74848),s=n(96540),o=n(19718),a=n(56484),r=n(94413),l=n(86038),c=n(31366),d=n(48249);const A=(0,a.A)((e=>{var{onFieldChanged:t,refetchData:n,keys:a,fieldDefinitions:l,settings:A}=e,m=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(i=Object.getOwnPropertySymbols(e);s<i.length;s++)t.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(e,i[s])&&(n[i[s]]=e[i[s]])}return n}(e,["onFieldChanged","refetchData","keys","fieldDefinitions","settings"]);const u=(0,s.useContext)(c.XZ),p=(0,d.F)(),h=()=>{n(["settings"])};return(0,i.jsx)("div",{className:"remote setting-form",children:(0,i.jsx)(r.A,Object.assign({},m,{id:(0,c.KZ)(a),ref:e=>u.addFormRef(a,e),onSave:e=>0===Object.keys(e).length?Promise.resolve():p.post(o.Ay.ITEMS_SET_URL,e).then(h),fieldDefinitions:l,sourceValue:A,onFieldChanged:(e,n,i)=>{if(u.onFieldChanged(e,n,i),t)return t(e,n,i)}}))})}),{urls:{fieldDefinitions:({keys:e},t)=>t.post(o.Ay.ITEMS_DEFINITIONS_URL,{keys:e}),settings:(e,t)=>{return n=void 0,i=[e,t],a=function*({keys:e,onSettingValuesReceived:t,valueMode:n=l.XG.CURRENT},i){const s=yield i.post(o.Ay.ITEMS_GET_URL,{keys:e,value_mode:n});return t&&t(s),s},new((s=void 0)||(s=Promise))((function(e,t){function o(e){try{l(a.next(e))}catch(e){t(e)}}function r(e){try{l(a.throw(e))}catch(e){t(e)}}function l(t){var n;t.done?e(t.value):(n=t.value,n instanceof s?n:new s((function(e){e(n)}))).then(o,r)}l((a=a.apply(n,i||[])).next())}));var n,i,s,a}}})},8627:(e,t,n)=>{n.d(t,{A:()=>R});var i=n(74848),s=n(96540),o=n(46942),a=n.n(o),r=n(8098),l=n(31224),c=n(45325),d=n(67749);const A=(e,t)=>"object"==typeof t?`/settings/${t.url}/${e.url}`:`/settings/${e.url}`,m=(e,t)=>t.translate(e,[d.l.NAVIGATION]),u=(e,t,n,{hasAccess:s})=>t.access&&!s(t.access)?null:(0,i.jsx)(c.A,{url:e,icon:"icon"in t?`green ${t.icon}`:null,children:m(t.title,n)},e),p=(e,t,n,i)=>{const s=A(e,t);return u(s,e,n,i)};var h=n(83994);const g=({menu:e,settingsT:t})=>(0,i.jsx)("div",{className:"three wide column menu-column",children:(0,i.jsxs)("div",{className:"ui vertical secondary menu",children:[e.childMenuItems,!!e.childAdvancedMenuItems&&(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:"item header",children:t.translate("Advanced")}),(0,i.jsx)("div",{className:"menu",children:e.childAdvancedMenuItems})]})]})}),x=({menu:e})=>(0,i.jsx)("div",{className:"ui secondary pointing menu settings top-menu",children:e.rootMenuItems}),v=({contentClassname:e,selectedChildMenuItem:t,selectedRootMenuItem:n,getSaveButton:s,children:o,message:r,settingsT:c})=>(0,i.jsx)("div",{className:a()("thirteen wide column",e),children:(0,i.jsxs)("div",{className:"ui segment",children:[(0,i.jsx)(l.A,{title:m(t.title,c),icon:(0,i.jsx)(h.A,{color:"green",icon:n.icon}),rightComponent:s()}),(0,i.jsxs)("div",{className:"options",children:[r,o]})]})}),C=e=>{var{children:t}=e,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(i=Object.getOwnPropertySymbols(e);s<i.length;s++)t.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(e,i[s])&&(n[i[s]]=e[i[s]])}return n}(e,["children"]);return(0,i.jsxs)("div",{className:"full",children:[(0,i.jsx)(x,Object.assign({},n)),(0,i.jsxs)("div",{id:"setting-scroll-context",className:"ui segment grid main",children:[(0,i.jsx)(g,Object.assign({},n)),(0,i.jsx)(v,Object.assign({},n,{children:t}))]})]})};var f=n(90425),_=n(31104),E=n(19247);const y=({selectedChildMenuItem:e,menu:t,selectedRootMenuItem:n,settingsT:s})=>(0,i.jsxs)("div",{className:"ui top-menu",children:[(0,i.jsx)(f.A,{selection:!0,caption:m(n.title,s),captionIcon:`green ${n.icon}`,children:t.rootMenuItems}),(0,i.jsx)(h.A,{icon:"caret right",size:"large"}),(0,i.jsxs)(_.A,{selection:!0,caption:m(e.title,s),children:[(0,i.jsx)(E.A,{children:t.childMenuItems}),(0,i.jsx)(E.A,{caption:s.translate("Advanced"),children:t.childAdvancedMenuItems})]})]}),b=e=>{var{getSaveButton:t,children:n,contentClassname:s,settingsT:o,message:a}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(i=Object.getOwnPropertySymbols(e);s<i.length;s++)t.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(e,i[s])&&(n[i[s]]=e[i[s]])}return n}(e,["getSaveButton","children","contentClassname","settingsT","message"]);return(0,i.jsxs)("div",{className:"mobile",children:[(0,i.jsx)(y,Object.assign({settingsT:o},r)),(0,i.jsxs)("div",{id:"setting-scroll-context",className:s,children:[t("fluid"),(0,i.jsxs)("div",{className:"options",children:[a,n]})]})]})};var I=n(14753),j=n(31366),S=n(32728),T=n(4425),D=n(96529),N=n(86038),k=n(28286);const B=({saveState:e,settingsT:t,className:n})=>{const{local:o,handleSave:r,hasChanges:l}=e,[c,d]=(0,s.useState)(!1),{hasAccess:A}=(0,k.w)(),m=o||A(N.US.SETTINGS_EDIT);let u;return u=m?t.translate(l?"Save changes":"No unsaved changes"):t.translate("No save permission"),(0,i.jsx)(D.A,{className:a()("save",n),caption:u,icon:m&&l?"green checkmark":null,loading:c,disabled:!l||!m,onClick:()=>{return e=void 0,t=void 0,i=function*(){d(!0);try{yield r()}finally{d(!1)}},new((n=void 0)||(n=Promise))((function(s,o){function a(e){try{l(i.next(e))}catch(e){o(e)}}function r(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,r)}l((i=i.apply(e,t||[])).next())}));var e,t,n,i}})},w=(e,t)=>e.local&&(0,i.jsx)(S.A,{description:t.t("browserSpecificNote","Settings listed on this page are browser-specific"),icon:T.A.INFO}),R=e=>{const t=(0,k.w)(),{rootMenuItems:n,selectedRootMenuItem:s,settingsT:o,children:l,selectedChildMenuItem:c}=e,d=(0,I.zy)(),{saveState:m,saveContext:h}=(0,j.WI)({selectedChildMenuItem:c,settingsT:o}),g=(0,r.vU)()||window.innerWidth<1e3?b:C,{menuItems:x,advancedMenuItems:v}=s,f=a()("section-content",s.url,c.url),_={rootMenuItems:n.map((e=>((e,t,n,i)=>{let s=A(e);return e.menuItems&&!n.pathname.startsWith(s)&&(s=A(e.menuItems[0],e)),u(s,e,t,i)})(e,o,d,t))),childMenuItems:x.map((e=>p(e,s,o,t))),childAdvancedMenuItems:null==v?void 0:v.map((e=>p(e,s,o,t)))};return(0,i.jsx)(j.XZ.Provider,{value:h,children:(0,i.jsx)(g,{settingsT:o,location:d,getSaveButton:e=>c.noSave?null:(0,i.jsx)(B,{settingsT:o,saveState:m,className:e}),message:w(c,o),contentClassname:f,menu:_,selectedChildMenuItem:c,selectedRootMenuItem:s,children:l})})}},31366:(e,t,n)=>{n.d(t,{KZ:()=>c,WI:()=>d,XZ:()=>l});var i=n(96540),s=n(20311),o=n.n(s),a=n(88939),r=n(14753);const l=i.createContext(void 0),c=e=>e.join("|"),d=({settingsT:e,selectedChildMenuItem:t})=>{const n=i.useMemo((()=>new Map),[]),[s,l]=i.useState([]);i.useEffect((()=>{l([])}),[t.url]);const d=s.length>0;(0,r.KP)((({currentLocation:n,nextLocation:i,historyAction:s})=>{if(t.noSave)return!1;if(n.pathname.includes(i.pathname)||i.pathname.includes(n.pathname))return!1;if(!d)return!1;const o=e.t("unsavedChangesPrompt","You have unsaved changes. Are you sure you want to leave?");return!window.confirm(o)}));const A={onFieldChanged:(e,t,n)=>{l(n?[...s,e]:s.filter((t=>t!==e)))},addFormRef:(e,t)=>{t?(o()(t.hasOwnProperty("save"),"Invalid setting form component supplied for SaveDecorator (save property missing)"),n.set(c(e),t)):n.clear()},getFormRef:e=>n.get(c(e))};return{saveContext:A,saveState:{handleSave:()=>{return t=void 0,i=void 0,r=function*(){o()(n.size>0,"No forms exist in SaveDecorator");const t=Array.from(n.values()).map((e=>e.save()));yield Promise.all(t),l([]),(()=>{const{translate:t}=e;a.A.success({title:t("Saving completed"),message:t("Settings were saved successfully")})})()},new((s=void 0)||(s=Promise))((function(e,n){function o(e){try{l(r.next(e))}catch(e){n(e)}}function a(e){try{l(r.throw(e))}catch(e){n(e)}}function l(t){var n;t.done?e(t.value):(n=t.value,n instanceof s?n:new s((function(e){e(n)}))).then(o,a)}l((r=r.apply(t,i||[])).next())}));var t,i,s,r},hasChanges:d,local:t.local}}}},2237:(e,t,n)=>{n.r(t),n.d(t,{default:()=>U});var i=n(74848),s=n(67749),o=n(85072),a=n.n(o),r=n(97825),l=n.n(r),c=n(77659),d=n.n(c),A=n(55056),m=n.n(A),u=n(10540),p=n.n(u),h=n(41113),g=n.n(h),x=n(74143),v={};v.styleTagTransform=g(),v.setAttributes=m(),v.insert=d().bind(null,"head"),v.domAPI=l(),v.insertStyleElement=p(),a()(x.A,v),x.A&&x.A.locals&&x.A.locals;const C={url:"profile",title:"Profile",icon:"user",component:n(8627).A,menuItems:[{title:"User",url:"user",component:n(37964).A},{title:"Away mode",url:"away",component:n(15175).A}],advancedMenuItems:[{title:"Ignored users",url:"ignored-users",noSave:!0,component:n(33751).A},{title:"Miscellaneous",url:"miscellaneous",component:n(43353).A}]},f={url:"connectivity",title:"Connectivity",icon:"signal",component:n(8627).A,menuItems:[{title:"Auto detection",url:"detection",noSave:!0,component:n(36441).A}],advancedMenuItems:[{title:"IPv4 connectivity (manual)",url:"v4",component:n(35190).A},{title:"IPv6 connectivity (manual)",url:"v6",component:n(52508).A},{title:"Ports (manual)",url:"ports",component:n(32709).A},{title:"Proxies",url:"proxies",component:n(16337).A},{title:"Encryption",url:"encryption",component:n(25908).A}]},_={url:"speed-limits",title:"Speed and limits",icon:"dashboard",component:n(8627).A,menuItems:[{title:"Connection speed",url:"speed",component:n(47072).A},{title:"Bandwidth limiting",url:"limiter",component:n(64253).A}],advancedMenuItems:[{title:"Download limits",url:"download-limits",component:n(45876).A},{title:"Upload limits",url:"upload-limits",component:n(4313).A},{title:"Per-user limits",url:"user-limits",component:n(28903).A}]},E={url:"downloads",title:"Downloads",icon:"download",component:n(8627).A,menuItems:[{title:"Locations",url:"locations",component:n(20764).A}],advancedMenuItems:[{title:"Skipping options",url:"skipping-options",component:n(19698).A},{title:"Search matching",url:"search-matching",component:n(53044).A},{title:"Download options",url:"download-options",component:n(8625).A},{title:"Priorities",url:"priorities",component:n(70237).A},{title:"Search types",url:"search-types",component:n(58524).A}]},y={url:"sharing",title:"Sharing",icon:"tasks",component:n(8627).A,menuItems:[{title:"Refresh options",url:"refresh-options",component:n(98915).A},{title:"Share profiles",url:"profiles",noSave:!0,component:n(19473).A}],advancedMenuItems:[{title:"Sharing options",url:"sharing-options",component:n(59676).A},{title:"Hashing",url:"hashing",component:n(79287).A},{title:"Excluded paths",url:"excludes",noSave:!0,component:n(6244).A}]},b={url:"view",title:"View",icon:"browser",component:n(8627).A,menuItems:[{title:"Notifications",url:"notifications",local:!0,component:n(49123).A},{title:"Histories",url:"histories",component:n(92151).A},{title:"Events",url:"events",component:n(26295).A},{title:"Appearance",url:"appearance",component:n(81879).A}],advancedMenuItems:[{title:"Miscellaneous",url:"miscellaneous",local:!0,component:n(36255).A}]};var I=n(86038);const j={url:"about",title:"About",icon:"info",component:n(8627).A,menuItems:[{title:"Application",noSave:!0,url:"application",component:n(42181).A},{title:"Transfer statistics",noSave:!0,url:"transfers",access:I.US.TRANSFERS,component:n(96601).A},{title:"Share statistics",noSave:!0,url:"share",component:n(77971).A},{title:"Hub statistics",noSave:!0,url:"hubs",access:I.US.HUBS_VIEW,component:n(10343).A}]},S={url:"extensions",title:"Extensions",icon:"puzzle",component:n(8627).A,menuItems:[{title:"Manage installed",url:"manage",noSave:!0,component:n(37155).A},{title:"Extension catalog",url:"packages",noSave:!0,component:n(83161).A}],advancedMenuItems:[{title:"Extension options",url:"extension-options",component:n(50804).A},{title:"Extension engines",url:"extension-engines",component:n(31880).A}]},T={url:"system",title:"System",icon:"settings",access:I.US.ADMIN,component:n(8627).A,menuItems:[{title:"Users",url:"users",noSave:!0,component:n(51566).A},{title:"Logging",url:"logging",component:n(69222).A},{title:"Web server",url:"server-settings",component:n(87135).A}],advancedMenuItems:[{title:"Advanced server settings",url:"advanced-server-settings",component:n(81301).A}]};var D=n(14753),N=n(8627),k=n(42695),B=n(32389),w=n(2543);const R=[C,f,_,E,y,b,j,S,T],O=(e,t,n)=>{const s=`${e.url}/*`,o=(0,k.Ze)(n,[(0,w.camelCase)(t.url),(0,w.camelCase)(e.url)]);return(0,i.jsx)(D.qh,{path:s,element:(0,i.jsx)(N.A,{settingsT:n,selectedRootMenuItem:t,rootMenuItems:R,selectedChildMenuItem:e,children:(0,i.jsx)(e.component,{settingsT:n,moduleT:o})})},s)},U=e=>{const{t}=(0,B.Bd)(),n=(0,k.lw)(t,s.KV.SETTINGS);return(0,i.jsx)("div",{className:"ui segment settings-layout",children:(0,i.jsxs)(D.BV,{children:[(0,i.jsx)(D.qh,{index:!0,element:(0,i.jsx)(D.C5,{to:R[0].url,replace:!0})}),R.map((e=>((e,t)=>{var n;return(0,i.jsxs)(D.qh,{path:e.url,children:[e.menuItems.map((n=>O(n,e,t))),null===(n=e.advancedMenuItems)||void 0===n?void 0:n.map((n=>O(n,e,t))),(0,i.jsx)(D.qh,{index:!0,element:(0,i.jsx)(D.C5,{to:e.menuItems[0].url,replace:!0})})]},e.url)})(e,n)))]})})}},42181:(e,t,n)=>{n.d(t,{A:()=>m});var i=n(74848),s=(n(96540),n(73070)),o=n(1076),a=n(83845),r=n(74416),l=n(98397),c=n(59250),d=n(42049),A=n(28286);const m=(0,o.A)((({stats:e,moduleT:t})=>{const{translate:n}=t,{systemInfo:o}=(0,A.w)(),{formatRelativeTime:a,formatDateTime:m}=(0,r.k)(),u=m(1737286926.624);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(s.xA,{columns:"two",stackable:!0,children:[(0,i.jsx)(s.fI,{title:n("Application version"),text:o.client_version}),(0,i.jsx)(s.fI,{title:n("Web UI version"),text:"2.13.1-beta.9"}),(0,i.jsx)(s.fI,{title:n("Web UI build date"),text:u}),(0,i.jsx)(s.fI,{title:n("API version"),text:o.api_version}),(0,i.jsx)(s.fI,{title:n("API feature level"),text:o.api_feature_level}),(0,i.jsx)(s.fI,{title:n("Started"),text:a(o.client_started)}),(0,i.jsx)(s.fI,{title:n("Active sessions"),text:e.active_sessions}),(0,i.jsx)(s.fI,{title:n("Server threads"),text:e.server_threads}),(0,i.jsx)(s.Y9,{title:n("Resources")}),(0,i.jsx)(s.fI,{title:(0,i.jsx)(d.A,{url:c.A.HOME_PAGE_URL,children:n("Home page")}),noText:!0}),(0,i.jsx)(s.fI,{title:(0,i.jsx)(d.A,{url:c.A.HELP_URL,children:n("Documentation")}),noText:!0}),(0,i.jsx)(s.fI,{title:(0,i.jsx)(d.A,{url:c.A.ISSUE_TRACKER_URL,children:n("Feature request/bug tracker")}),noText:!0}),(0,i.jsx)(s.Y9,{title:n("Third-party credits")}),(0,i.jsx)(s.fI,{title:(0,i.jsx)(d.A,{url:c.A.DBIP_URL,children:"IP Geolocation by DB-IP"}),noText:!0})]}),(0,i.jsx)(l.A,{alwaysShow:!0})]})}),a.A.STATS_URL,null,5)},10343:(e,t,n)=>{n.d(t,{A:()=>c});var i=n(74848),s=(n(96540),n(74416)),o=n(44511),a=n(1076),r=n(73070),l=n(98573);const c=(0,a.A)((({stats:e,moduleT:t})=>{const{formatSize:n,formatConnection:o}=(0,s.k)(),{translate:a}=t;return(0,i.jsxs)(r.xA,{columns:"two",stackable:!0,children:[(0,i.jsx)(r.fI,{title:a("Total users"),text:e.total_users}),(0,i.jsx)(r.fI,{title:a("Unique users"),text:`${e.unique_users} (${(0,l.Ee)(e.unique_users,e.total_users)})`}),(0,i.jsx)(r.fI,{title:a("Active users"),text:`${e.active_users} (${(0,l.Ee)(e.active_users,e.unique_users)})`}),(0,i.jsx)(r.fI,{title:a("Total share"),text:n(e.total_share)}),(0,i.jsx)(r.fI,{title:a("Average share per user"),text:n((0,l.jh)(e.total_share,e.unique_users))}),(0,i.jsx)(r.fI,{title:a("Average ADC download speed"),text:o(e.adc_down_per_user)}),(0,i.jsx)(r.fI,{title:a("Average ADC upload speed"),text:o(e.adc_up_per_user)}),(0,i.jsx)(r.Y9,{title:a("Clients")}),e.clients.map((t=>{return n=e.unique_users,s=t,(0,i.jsx)(r.fI,{title:s.name,text:`${s.count} (${(0,l.Ee)(s.count,n)})`},s.name);var n,s}))]})}),o.A.STATS_URL,((e,t)=>t.moduleT.translate("No hubs online")),10)},77971:(e,t,n)=>{n.d(t,{A:()=>c});var i=n(74848),s=(n(96540),n(74416)),o=n(42191),a=n(1076),r=n(73070),l=n(98573);const c=(0,a.A)((({stats:e,moduleT:t})=>{const{formatSize:n,formatSeconds:o}=(0,s.k)(),{translate:a,t:c}=t;return(0,i.jsxs)(r.xA,{columns:"two",stackable:!0,children:[(0,i.jsx)(r.fI,{title:a("Total share size"),text:n(e.total_size)}),(0,i.jsx)(r.fI,{title:a("Total files"),text:c("totalFilesValue",{defaultValue:"{{totalCount}} ({{uniqueCount}} unique)",replace:{totalCount:e.total_file_count,uniqueCount:(0,l.Ee)(e.unique_file_count,e.total_file_count)}})}),(0,i.jsx)(r.fI,{title:a("Total directories"),text:e.total_directory_count}),(0,i.jsx)(r.fI,{title:a("Average file age"),text:o(e.average_file_age)}),(0,i.jsx)(r.fI,{title:a("Average files per directory"),text:(0,l.jh)(e.total_file_count,e.total_directory_count)}),(0,i.jsx)(r.Y9,{title:a("Incoming searches")}),(0,i.jsx)(r.fI,{title:a("Total searches"),text:c("searchesTotalValue",{defaultValue:"{{totalCount}} ({{perSecondCount}} per second)",replace:{totalCount:e.total_searches,perSecondCount:e.total_searches_per_second.toFixed(1)}})}),(0,i.jsx)(r.fI,{title:a("TTH searches"),text:(0,l.Ee)(e.tth_searches,e.total_searches)}),(0,i.jsx)(r.fI,{title:a("Text searches"),text:c("searchesPerSecondValue",{defaultValue:"{{totalCount}} ({{matchedCount}} matched per second)",replace:{totalCount:e.recursive_searches,matchedCount:e.unfiltered_recursive_searches_per_second.toFixed(2)}})}),(0,i.jsx)(r.fI,{title:a("Filtered text searches"),text:c("searchesFilteredValue",{defaultValue:"{{filteredPercentage}} ({{resultPercentage}} of the matched ones returned results)",replace:{filteredPercentage:(0,l.Ee)(e.filtered_searches,e.recursive_searches),resultPercentage:(0,l.Ee)(e.recursive_searches_responded,e.recursive_searches-e.filtered_searches)}})}),(0,i.jsx)(r.fI,{title:a("Average text search tokens (non-filtered)"),text:c("searchesAverageTokensValue",{defaultValue:"{{tokenCount}} ({{tokenLength}} bytes per token)",replace:{tokenCount:e.average_search_token_count.toFixed(1),tokenLength:e.average_search_token_length.toFixed(1)}})}),(0,i.jsx)(r.fI,{title:a("Average matching time per text search"),text:c("searchesAverageMatchTimeValue",{defaultValue:"{{matchTime}} ms",replace:{matchTime:e.average_match_ms}})})]})}),o.A.STATS_URL,((e,t)=>t.moduleT.translate("No files shared")),60)},96601:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(74848),s=(n(96540),n(74416)),o=n(73070),a=n(36671);const r=(0,n(1076).A)((({stats:e,moduleT:t})=>{const{translate:n}=t,{formatSize:a}=(0,s.k)(),r=e.session_uploaded+e.start_total_uploaded,l=e.session_downloaded+e.start_total_downloaded;return(0,i.jsxs)(o.xA,{columns:"two",stackable:!0,children:[(0,i.jsx)(o.fI,{title:n("Total downloaded"),text:a(l)}),(0,i.jsx)(o.fI,{title:n("Total uploaded"),text:a(r)}),(0,i.jsx)(o.Y9,{title:n("Session")}),(0,i.jsx)(o.fI,{title:n("Session downloaded"),text:a(e.session_downloaded)}),(0,i.jsx)(o.fI,{title:n("Session uploaded"),text:a(e.session_uploaded)})]})}),a.A.TRANSFERRED_BYTES_URL,null,5)},36441:(e,t,n)=>{n.d(t,{A:()=>U});var i=n(74848),s=n(96540),o=n(68514),a=n(56484);const r="connectivity",l={MODULE_URL:r,DETECT_URL:r+"/detect",STATUS_URL:r+"/status",CONNECTIVITY_MESSAGE:"connectivity_detection_message",CONNECTIVITY_STARTED:"connectivity_detection_started",CONNECTIVITY_FINISHED:"connectivity_detection_finished"};var c=n(73070),d=n(85072),A=n.n(d),m=n(97825),u=n.n(m),p=n(77659),h=n.n(p),g=n(55056),x=n.n(g),v=n(10540),C=n.n(v),f=n(41113),_=n.n(f),E=n(29802),y={};y.styleTagTransform=_(),y.setAttributes=x(),y.insert=h().bind(null,"head"),y.domAPI=u(),y.insertStyleElement=C(),A()(E.A,y),E.A&&E.A.locals&&E.A.locals;var b=n(4425),I=n(86038),j=n(67749);const S={id:"detect",displayName:"Detect now",access:I.US.SETTINGS_EDIT,icon:b.A.CONFIGURE,handler:({socket:e})=>e.post(l.DETECT_URL)},T={moduleId:j.KV.SETTINGS};var D=n(96529);const N=(e,t,n)=>{const{translate:i,t:s}=n;if(t)return i("Detecting...");const o=e.auto_detect;return s(o?"autoDetected":"manualConfiguration",{defaultValue:o?"{{status}} (auto detected)":"{{status}} (manual configuration)",replace:{status:e.text}})},k=(0,a.A)((({status:e,runningV4:t,runningV6:n,moduleT:a})=>{const[r,l]=s.useState(!1);return(0,i.jsxs)("div",{className:"ui segment detect-panel",children:[(0,i.jsx)("h3",{className:"header",children:a.translate("Current auto detection status")}),(0,i.jsxs)(c.xA,{columns:"two",children:[(0,i.jsx)(c.fI,{title:a.translate("IPv4 connectivity"),text:N(e.status_v4,t,a)}),(0,i.jsx)(c.fI,{title:a.translate("IPv6 connectivity"),text:N(e.status_v6,n,a)}),r&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(c.fI,{title:a.translate("Bound interface (IPv4)"),text:e.status_v4.bind_address}),(0,i.jsx)(c.fI,{title:a.translate("Bound interface (IPv6)"),text:e.status_v6.bind_address}),(0,i.jsx)(c.fI,{title:a.translate("Transfer port"),text:e.tcp_port}),(0,i.jsx)(c.fI,{title:a.translate("Encrypted transfer port"),text:e.tls_port}),(0,i.jsx)(c.fI,{title:a.translate("Search/UDP port"),text:e.udp_port})]})]}),(0,i.jsx)(o.A,{className:"detect-button",action:S,moduleData:T,disabled:!e.status_v4.auto_detect&&!e.status_v6.auto_detect,loading:n||t}),!r&&(0,i.jsx)(D.A,{icon:"info",caption:a.translate("View all"),onClick:()=>l(!r)})]})}),{urls:{status:l.STATUS_URL},onSocketConnected:(e,{refetchData:t,mergeData:n})=>{const i=(e,t)=>{const i="running"+(e?"V6":"V4");n({[i]:t})};e(l.MODULE_URL,l.CONNECTIVITY_STARTED,(e=>{i(e.v6,!0)})),e(l.MODULE_URL,l.CONNECTIVITY_FINISHED,(e=>{i(e.v6,!1),t()}))}});var B=n(42049),w=n(59250),R=n(32728),O=n(32389);const U=({moduleT:e})=>{const{toI18nKey:t}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)(k,{moduleT:e}),(0,i.jsx)(R.A,{description:(0,i.jsx)(O.x6,{i18nKey:t("connectivityDetectionNote"),defaults:"In case of file transfer connectivity issues, please confirm that your TCP ports are really open by using <portChecker>an online port checker</portChecker>. Note that validity of the UDP port (search) can't be checked online. For more information about different connectivity modes, please visit <faq>DC++'s connectivity FAQ</faq>.",components:{portChecker:(0,i.jsx)(B.A,{url:w.A.PORTCHECK_URL}),faq:(0,i.jsx)(B.A,{url:w.A.CONNECTIVITY_HELP_URL})}}),icon:b.A.INFO})]})}},25908:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(20239));const o=["always_ccpm","tls_mode","tls_allow_untrusted_clients","tls_allow_untrusted_hubs"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o})})},35190:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(95479));const o=["connection_auto_v4","connection_bind_v4","connection_mode_v4","connection_ip_v4","connection_update_ip_v4","connection_ip_override_v4"],a=({moduleT:e})=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{moduleT:e,keys:o,protocol:"v4"})})},52508:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(95479));const o=["connection_auto_v6","connection_bind_v6","connection_mode_v6","connection_ip_v6","connection_update_ip_v6","connection_ip_override_v6"],a=({moduleT:e})=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o,moduleT:e,protocol:"v6"})})},32709:(e,t,n)=>{n.d(t,{A:()=>m});var i=n(74848),s=(n(96540),n(20239)),o=n(47456),a=n(86038),r=n(67749),l=n(32728),c=n(4425);const d=["tcp_port","udp_port","tls_port","preferred_port_mapper"],A=e=>(t,n,i)=>{const s=n=>e.t((0,o.nD)(r.oV.HELP,t,void 0),n);"tcp_port"===t?n.help=s("TCP port is used for unencrypted transfers"):"tls_port"===t?n.help=s("TLS port (TCP) is used for encrypted transfers"):"udp_port"===t&&(n.help=s("UDP port is used for searching"))},m=({moduleT:e})=>(0,i.jsxs)("div",{children:[(0,i.jsx)(l.A,{description:e.t("portsAutoValuesNote","Port numbers listed on this page can be overridden by port mappers (if enabled)"),icon:c.A.INFO}),(0,i.jsx)(s.A,{keys:d,onFieldSetting:A(e),valueMode:a.XG.FORCE_MANUAL})]})},95479:(e,t,n)=>{n.d(t,{A:()=>A});var i=n(74848),s=n(96540),o=n(20239),a=n(32728),r=n(4425),l=n(19718),c=n(86038);class d extends s.Component{constructor(){super(...arguments),this.state={autoDetectEnabled:!1},this.convertValue=e=>`${e}_${this.props.protocol}`,this.onFieldSetting=(e,t,n)=>{const i=n[this.convertValue("connection_mode")]!==l.ZX.INCOMING_DISABLED,s=n[this.convertValue("connection_auto")];i&&!s||0!==e.indexOf("connection_ip")&&0!==e.indexOf("connection_bind")&&0!==e.indexOf("connection_update_ip")&&0!==e.indexOf("connection_ip_override")||(t.disabled=!0),s&&0===e.indexOf("connection_mode")&&i&&(t.disabled=!0),i||0!==e.indexOf("connection_auto")||(t.disabled=!0)},this.onSettingValuesReceived=e=>{this.setState({autoDetectEnabled:e[this.convertValue("connection_auto")]})}}render(){return(0,i.jsxs)("div",{children:[this.state.autoDetectEnabled&&(0,i.jsx)(a.A,{description:this.props.moduleT.t("protocolAutoValuesNote","Connectivity auto detection is currently enabled; setting values listed on this page are not being used"),icon:r.A.INFO}),(0,i.jsx)(o.A,Object.assign({},this.props,{onFieldSetting:this.onFieldSetting,onSettingValuesReceived:this.onSettingValuesReceived,valueMode:c.XG.FORCE_MANUAL}))]})}}const A=d},16337:(e,t,n)=>{n.d(t,{A:()=>l});var i=n(74848),s=(n(96540),n(20239)),o=n(19718);const a=["outgoing_mode","socks_server","socks_port","socks_resolve","socks_user","socks_password","http_proxy"],r=(e,t,n)=>{n.outgoing_mode===o.rt.OUTGOING_SOCKS||0!==e.indexOf("socks_")||(t.disabled=!0)},l=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:a,onFieldSetting:r})})},8625:(e,t,n)=>{n.d(t,{A:()=>c});var i=n(74848),s=(n(96540),n(20239));const o=["allow_slow_overlap","finished_remove_exit","use_partial_sharing"],a=["segmented_downloads","min_segment_size"],r=["socket_read_buffer","socket_write_buffer","buffer_size"],l=["compress_transfers","max_compression"],c=({moduleT:e})=>{const{translate:t}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)(s.A,{keys:o}),(0,i.jsx)(s.A,{keys:a,title:t("Segments")}),(0,i.jsx)(s.A,{keys:l,title:t("Compression")}),(0,i.jsx)(s.A,{keys:r,title:t("Buffers")})]})}},20764:(e,t,n)=>{n.d(t,{A:()=>O});var i=n(74848),s=n(96540),o=n(42049),a=n(59250),r=n(32728),l=n(20239),c=n(79179),d=n(4425),A=n(86038),m=n(67749);const u={id:"create",displayName:"Add directory",access:A.US.SETTINGS_EDIT,icon:d.A.CREATE,handler:({navigate:e})=>{e("directories")}},p={edit:{id:"edit",displayName:"Edit directory",access:A.US.SETTINGS_EDIT,icon:d.A.EDIT,handler:({itemData:e,navigate:t})=>{t(`directories/${e.id}`)}},remove:{id:"remove",displayName:"Remove directory",access:A.US.SETTINGS_EDIT,icon:d.A.REMOVE,confirmation:{content:"Are you sure that you want to remove the favorite directory {{item.name}}?",approveCaption:"Remove directory",rejectCaption:"Don't remove"},handler:({itemData:e,socket:t})=>t.delete(`${c.A.DIRECTORIES_URL}/${e.id}`)}},h={moduleId:m.KV.SETTINGS,subId:"favoriteDirectory"},g={moduleData:h,actions:p};var x=n(68514),v=n(56484),C=n(71352),f=n(99671),_=n(65385),E=n(51766),y=n(33968),b=n(94413),I=n(13712),j=n(59315),S=n(47456);const T=[{key:"path",title:"Path",type:A.OP.DIRECTORY_PATH},{key:"name",title:"Name",type:A.OP.STRING}],D=(0,_.A)((0,v.A)((({directoryEntry:e,moduleT:t,virtualNames:n,socket:o})=>{const a=(0,s.useRef)(null),r=(0,s.useMemo)((()=>(0,S.Nn)(T,t)),[]),l=!e,A=t.translate(l?"Add favorite directory":"Edit favorite directory");return(0,i.jsx)(f.A,{className:"favorite-directory",title:A,onApprove:()=>a.current.save(),closable:!1,icon:d.A.FOLDER,children:(0,i.jsx)(b.A,{ref:a,fieldDefinitions:r,onFieldChanged:(e,t,n)=>e.includes("path")?Promise.resolve({name:t.path?(0,y.ap)(t.path):void 0}):null,onFieldSetting:(e,t,i)=>{"path"===e?(t.disabled=!l,t.config=Object.assign(t.config||{},{historyId:j.A.LOCATION_DOWNLOAD})):"name"===e&&(t.factory=E.Ay.form.Textbox,t.template=I.I9,t.config={suggestionGetter:()=>n})},onSave:t=>l?o.post(c.A.DIRECTORIES_URL,t):o.patch(`${c.A.DIRECTORIES_URL}/${e.id}`,t),sourceValue:e})})}),{urls:{virtualNames:c.A.GROUPED_DIRECTORIES_URL,directoryEntry:({params:e},t)=>e.directoryId?t.get(`${c.A.DIRECTORIES_URL}/${e.directoryId}`):Promise.resolve(void 0)},dataConverters:{virtualNames:e=>e.map((e=>e.name),[])}}),"directories/:directoryId?"),N=({directory:e})=>(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:"name dropdown",children:(0,i.jsx)(C.Wy,{caption:(0,i.jsx)("strong",{children:e.name}),actions:g,itemData:e,contextElement:"#setting-scroll-context"})}),(0,i.jsx)("td",{className:"path",children:e.path})]}),k=e=>(0,i.jsx)(N,{directory:e},e.path),B=(0,v.A)((({directories:e,moduleT:t})=>(0,i.jsxs)("div",{id:"directory-table",children:[(0,i.jsx)(x.A,{action:u,moduleData:h}),0===e.length?null:(0,i.jsxs)("table",{className:"ui striped table",children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:t.translate("Name")}),(0,i.jsx)("th",{children:t.translate("Path")})]})}),(0,i.jsx)("tbody",{children:e.map(k)})]}),(0,i.jsx)(D,{moduleT:t})]})),{urls:{directories:c.A.DIRECTORIES_URL},onSocketConnected:(e,{refetchData:t})=>{e(c.A.MODULE_URL,c.A.DIRECTORIES_UPDATED,(()=>t()))}});var w=n(31224);const R=["download_directory"],O=({moduleT:e})=>(0,i.jsxs)("div",{children:[(0,i.jsx)(l.A,{keys:R}),(0,i.jsx)(r.A,{description:(0,i.jsx)(o.A,{url:a.A.VARIABLE_HELP_URL,children:e.translate("Available path variables")}),icon:d.A.INFO}),(0,i.jsxs)("div",{className:"ui segment setting-form",children:[(0,i.jsx)(w.A,{title:e.translate("Favorite download directories"),icon:d.A.FOLDER,size:"normal"}),(0,i.jsx)(B,{moduleT:e})]})]})},70237:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(74848),s=(n(96540),n(20239));const o=["prio_highest_size","prio_high_size","prio_normal_size","prio_auto_default"],a=["prio_high_files_to_highest","prio_high_files","prio_high_files_regex"],r=({moduleT:e})=>{const{translate:t}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)(s.A,{title:t("File priorities"),keys:o}),(0,i.jsx)(s.A,{title:t("High priority files"),keys:a})]})}},53044:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(20239));const o=["auto_add_sources","alt_search_auto","alt_search_max_sources","max_sources_match_queue","allow_match_full_list"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o})})},58524:(e,t,n)=>{n.d(t,{A:()=>_});var i=n(74848),s=n(96540),o=n(68514),a=n(56484),r=n(71352),l=n(92078),c=n(47650),d=n(99671),A=n(65385),m=n(4425),u=n(94413),p=n(86038),h=n(47456);const g=[{key:"name",title:"Name",type:p.OP.STRING},{key:"extensions",title:"File extensions",type:p.OP.LIST,item_type:p.OP.STRING}],x=(0,A.A)((0,a.A)((e=>{var{moduleT:t,searchTypeEntry:n,socket:o}=e,a=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(i=Object.getOwnPropertySymbols(e);s<i.length;s++)t.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(e,i[s])&&(n[i[s]]=e[i[s]])}return n}(e,["moduleT","searchTypeEntry","socket"]);const r=!n,l=(0,s.useRef)(null),A=(0,s.useMemo)((()=>(0,h.Nn)(g,t)),[]),p=t.translate(r?"Add search type":"Edit search type");return(0,i.jsx)(d.A,Object.assign({className:"search-type",title:p,onApprove:()=>l.current.save(),closable:!1,icon:m.A.FOLDER},a,{children:(0,i.jsx)(u.A,{ref:l,fieldDefinitions:A,onFieldSetting:(e,t,i)=>{"name"===e&&(t.disabled=!!n&&n.default_type)},onSave:e=>r?o.post(c.A.SEARCH_TYPES_URL,e):o.patch(`${c.A.SEARCH_TYPES_URL}/${n.id}`,e),sourceValue:n})}))}),{urls:{searchTypeEntry:({params:e},t)=>e.searchTypeId?t.get(`${c.A.SEARCH_TYPES_URL}/${e.searchTypeId}`):Promise.resolve(void 0)}}),"types/:searchTypeId?");var v=n(32728),C=n(74416);const f=({type:e,moduleT:t})=>{const{formatBoolean:n}=(0,C.k)();return(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:"name dropdown",children:(0,i.jsx)(r.Wy,{caption:(0,i.jsx)("strong",{children:e.str}),actions:l._k,itemData:e,contextElement:"#setting-scroll-context"})}),(0,i.jsx)("td",{className:"extensions",children:e.extensions.join(", ")}),(0,i.jsx)("td",{className:"default",children:n(e.default_type)})]})},_=(0,a.A)((({searchTypes:e,moduleT:t})=>(0,i.jsxs)("div",{id:"directory-table",children:[(0,i.jsx)(o.A,{action:l.nQ,moduleData:l.Dq}),0===e.length?null:(0,i.jsxs)("table",{className:"ui striped table",children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:t.translate("Name")}),(0,i.jsx)("th",{children:t.translate("File extensions")}),(0,i.jsx)("th",{children:t.translate("Default")})]})}),(0,i.jsx)("tbody",{children:e.map((e=>((e,t)=>(0,i.jsx)(f,{type:e,moduleT:t},e.id))(e,t)))})]}),(0,i.jsx)(v.A,{icon:m.A.NOTE,description:t.t("searchTypesNote","Note; Custom search types will only be applied to ADC hubs! On NMDC hubs, using a predefined search type will only search for a set of predefined, unconfigurable extensions; using a custom type will default to searching for any extension.")}),(0,i.jsx)(x,{moduleT:t})]})),{urls:{searchTypes:c.A.SEARCH_TYPES_URL},onSocketConnected:(e,{refetchData:t})=>{e(c.A.MODULE_URL,c.A.SEARCH_TYPES_UPDATED,(()=>t()))}})},19698:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(74848),s=(n(96540),n(20239));const o=["dont_download_shared","dont_download_queued","download_dupe_min_size"],a=["download_skiplist","download_skiplist_regex"],r=({moduleT:e})=>(0,i.jsxs)("div",{children:[(0,i.jsx)(s.A,{keys:o}),(0,i.jsx)(s.A,{title:e.translate("Skiplist"),keys:a})]})},6552:(e,t,n)=>{n.d(t,{A:()=>A});var i=n(74848),s=(n(96540),n(2141)),o=n(59250),a=n(56484),r=n(42049),l=n(32728),c=n(32389),d=n(4425);const A=(0,a.A)((({enginesStatus:e,moduleT:t})=>e[s.A.DEFAULT_ENGINE]?null:(0,i.jsx)(l.A,{description:(0,i.jsx)(c.x6,{i18nKey:t.toI18nKey("defaultExtensionEngineMissing"),defaults:"The default extension engine <strong>{{engineName}}</strong> is not installed on your system. Please visit <url>engine's home page</url> for installation instructions.",values:{engineName:s.A.DEFAULT_ENGINE},components:{url:(0,i.jsx)(r.A,{url:o.A.DEFAULT_ENGINE_URL})}}),icon:d.A.WARNING})),{urls:{enginesStatus:s.A.ENGINES_STATUS_URL},loaderText:null})},31880:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(20239));const o=["extension_engines"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o})})},83161:(e,t,n)=>{n.d(t,{A:()=>u});var i=n(74848),s=(n(96540),n(50929)),o=n(68514),a=n(6552),r=n(6162),l=n(2141),c=n(56484),d=(n(97771),n(88569));const A=(0,c.A)((({packageCatalog:e,moduleT:t,installedPackages:n})=>(0,i.jsxs)("div",{className:"extension-layout",children:[(0,i.jsx)("div",{className:"ui divider"}),e.length>0&&(0,i.jsx)("div",{className:"ui divided items",children:e.map((e=>((e,t,n)=>{const s=n.find((t=>t.name===e.name));return(0,i.jsx)(r.A,{npmPackage:e,installedPackage:s,moduleT:t},e.name)})(e.package,t,n)))})]})),{urls:{installedPackages:l.A.EXTENSIONS_URL,packageCatalog:()=>(0,d.H)(l.A.NPM_PACKAGES_URL,!0)},dataConverters:{packageCatalog:({objects:e})=>e},onSocketConnected:(e,{refetchData:t})=>{const n=()=>t(["installedPackages"]);e(l.A.MODULE_URL,l.A.ADDED,n),e(l.A.MODULE_URL,l.A.REMOVED,n),e(l.A.MODULE_URL,l.A.UPDATED,n)}});var m=n(90255);const u=({moduleT:e})=>(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.A,{moduleT:e}),(0,i.jsx)("div",{className:"table-actions",children:(0,i.jsx)(o.A,{action:s.Cs,moduleData:s.Dm,className:"add"})}),(0,i.jsx)(A,{moduleT:e}),(0,i.jsx)(m.A,{})]})},90255:(e,t,n)=>{n.d(t,{A:()=>m});var i=n(74848),s=n(96540),o=n(99671),a=n(94413),r=n(65385),l=n(56484),c=n(2141),d=n(4425);const A=e=>`${c.A.EXTENSIONS_URL}/${e}/settings`,m=(0,r.A)((0,l.A)((e=>{var{extension:t,settings:n,fieldDefinitions:r,socket:l}=e,c=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(i=Object.getOwnPropertySymbols(e);s<i.length;s++)t.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(e,i[s])&&(n[i[s]]=e[i[s]])}return n}(e,["extension","settings","fieldDefinitions","socket"]);const m=(0,s.useRef)(null);return(0,i.jsx)(o.A,Object.assign({},c,{className:"extensions configure",title:t.name,onApprove:()=>m.current.save(),closable:!1,icon:d.A.EDIT,dynamicHeight:!0,children:(0,i.jsx)(a.A,{ref:m,onSave:e=>l.patch(A(t.id),e),fieldDefinitions:r,sourceValue:n})}))}),{urls:{fieldDefinitions:({params:e},t)=>t.get(`${A(e.extensionId)}/definitions`),settings:({params:e},t)=>t.get(A(e.extensionId)),extension:({params:e},t)=>t.get(`${c.A.EXTENSIONS_URL}/${e.extensionId}`)}}),"extensions/:extensionId")},37155:(e,t,n)=>{n.d(t,{A:()=>g});var i=n(74848),s=(n(96540),n(56484)),o=n(2141),a=n(6552),r=n(90255),l=n(14753),c=n(32728),d=n(6162),A=n(88569);const m=({name:e,description:t,version:n,_npmUser:i})=>({id:e,name:e,description:t,version:n,publisher:{username:i.name},date:""}),u=(0,s.A)((({installedPackage:e,npmPackage:t,dataError:n,moduleT:s})=>(0,i.jsx)(d.A,{installedPackage:e,npmPackage:t?m(t):void 0,npmError:n,moduleT:s},e.name)),{urls:{npmPackage:({installedPackage:e})=>e.private||!e.managed?Promise.resolve(void 0):(0,A.H)(`${o.A.NPM_PACKAGE_URL}${e.name}/latest`,!0)},renderOnError:!0});var p=n(32389),h=n(4425);const g=(0,s.A)((({installedPackages:e,moduleT:t})=>{if(0===e.length){const e="No installed extensions were found. New extensions can be installed from the <url>Extension catalog</url> page.";return(0,i.jsx)(c.A,{description:(0,i.jsx)(p.x6,{i18nKey:t.toI18nKey("noInstalledExtensions"),defaults:e,components:{url:(0,i.jsx)(l.N_,{to:"/settings/extensions/packages"})}}),icon:h.A.INFO})}return(0,i.jsxs)("div",{className:"extension-layout",children:[(0,i.jsx)(a.A,{moduleT:t}),(0,i.jsx)("div",{className:"ui divider"}),(0,i.jsx)("div",{className:"ui divided items",children:e.map((e=>((e,t)=>(0,i.jsx)(u,{installedPackage:e,moduleT:t},e.name))(e,t)))}),(0,i.jsx)(r.A,{})]})}),{urls:{installedPackages:o.A.EXTENSIONS_URL},onSocketConnected:(e,{refetchData:t})=>{e(o.A.MODULE_URL,o.A.ADDED,(()=>t())),e(o.A.MODULE_URL,o.A.REMOVED,(()=>t())),e(o.A.MODULE_URL,o.A.UPDATED,(()=>t()))}})},50804:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(20239));const o=["extensions_debug_mode","extensions_auto_update","extensions_init_timeout"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o})})},6162:(e,t,n)=>{n.d(t,{A:()=>W});var i=n(74848),s=n(96540),o=n(95093),a=n.n(o),r=n(2141),l=n(30271),c=n(50929),d=n(68514),A=n(42049),m=n(71352),u=n(39115),p=n(4425),h=n(83994),g=n(86038),x=n(67749),v=n(48844);const C=({itemData:e})=>e.managed,f=({itemData:e})=>e.running,_=({itemData:e})=>e.disabled,E={id:"start",displayName:"Start",icon:p.A.PLAY,filter:e=>C(e)&&!f(e),access:g.US.ADMIN,handler:({itemData:e,socket:t})=>t.post(`${r.A.EXTENSIONS_URL}/${e.name}/start`)},y={id:"stop",displayName:"Stop",icon:p.A.STOP,filter:e=>C(e)&&f(e),access:g.US.ADMIN,handler:({itemData:e,socket:t})=>t.post(`${r.A.EXTENSIONS_URL}/${e.name}/stop`)},b={id:"configure",displayName:"Configure",icon:p.A.EDIT,filter:({itemData:e})=>e.has_settings,access:g.US.SETTINGS_EDIT,handler:({itemData:e,navigate:t})=>{t(`extensions/${e.id}`)}},I={id:"disable",displayName:"Disable",icon:p.A.DISABLE,filter:e=>C(e)&&!_(e),access:g.US.SETTINGS_EDIT,handler:({itemData:e,socket:t})=>t.patch(`${r.A.EXTENSIONS_URL}/${e.name}`,{disabled:!0})},j={id:"enable",displayName:"Enable",icon:p.A.ENABLE,filter:e=>C(e)&&_(e),access:g.US.SETTINGS_EDIT,handler:({itemData:e,socket:t})=>t.patch(`${r.A.EXTENSIONS_URL}/${e.name}`,{disabled:!1})},S={id:"remove",displayName:"Uninstall",icon:p.A.REMOVE,filter:C,access:g.US.ADMIN,confirmation:{content:"Are you sure that you want to remove the extension {{item.name}}? This will also remove possible extension-specific settings.",approveCaption:"Remove extension",rejectCaption:"Don't remove"},handler:({itemData:e,socket:t})=>t.delete(r.A.EXTENSIONS_URL+"/"+e.name)},T={start:E,stop:y,configure:b,disable:I,enable:j,divider:v.o,remove:S},D={moduleId:x.KV.EXTENSIONS},N={moduleData:D,actions:T},k=({npmPackage:e,installedPackage:t,hasUpdate:n,installing:s})=>t&&!n?null:(0,i.jsx)(d.A,{action:n?c.Cp:c.YB,moduleData:D,className:"right floated primary",itemData:e,loading:s}),B=({npmPackage:e,installedPackage:t,hasUpdate:n,installing:s,moduleT:o})=>(0,i.jsxs)("div",{className:"extra buttons",children:[e&&(0,i.jsx)(k,{npmPackage:e,installedPackage:t,hasUpdate:n,installing:s}),t&&(0,i.jsx)(m.Wy,{actions:N,ids:["configure","enable","disable","divider","remove"],remoteMenuId:u.Ay.EXTENSION,remoteMenuNestingThreshold:10,itemData:t,className:"right floated",caption:o.translate("Manage..."),button:!0,contextElement:"#setting-scroll-context",menuElementClassName:"left floated"}),e&&(0,i.jsxs)(A.A,{className:"ui right floated button",url:r.A.NPM_HOMEPAGE_URL+e.name,children:[(0,i.jsx)(h.A,{icon:p.A.EXTERNAL}),o.translate("Read more")]}),t&&(0,i.jsx)(d.A,{action:t.running?y:E,moduleData:D,className:"right floated",itemData:t})]});var w=n(15911),R=(n(97771),n(98147)),O=n(77856),U=n(46942),L=n.n(U);const P=({title:e,packageInfo:t,className:n,moduleT:s})=>{if(!t)return null;const o=t.date?s.t("datePublished",{defaultValue:"{{version}} (published {{date}})",replace:{version:t.version,date:a()(t.date).from(a()())}}):t.version;return(0,i.jsxs)("div",{className:n,children:[`${e}: `,(0,i.jsx)("span",{children:o})]})},M=(e,t,n)=>{const i=t?t.publisher.username:null==n?void 0:n.author;return i?e.t("byAuthor",{defaultValue:"by {{author}}",replace:{author:i}}):null},V=(e,t,n)=>t&&!t.managed?e.translate("Unmanaged extension"):n?e.t("extensionDirectoryFetchError",{defaultValue:"Failed to fetch information from the extension directory: {{error}}",replace:{error:(0,O.av)(n)}}):e.translate("Non-listed extension");class F extends s.PureComponent{constructor(){super(...arguments),this.state={installing:!1},this.onInstallationStarted=e=>{e.install_id===this.props.npmPackage.name&&this.setState({installing:!0})},this.onInstallationCompleted=e=>{e.install_id===this.props.npmPackage.name&&this.setState({installing:!1})}}componentDidMount(){const{addSocketListener:e,npmPackage:t}=this.props;t&&(e(r.A.MODULE_URL,r.A.INSTALLATION_STARTED,this.onInstallationStarted),e(r.A.MODULE_URL,r.A.INSTALLATION_SUCCEEDED,this.onInstallationCompleted),e(r.A.MODULE_URL,r.A.INSTALLATION_FAILED,this.onInstallationCompleted))}render(){const{npmPackage:e,installedPackage:t,npmError:n,moduleT:s}=this.props,{installing:o}=this.state,{translate:a}=s,r=!!t&&!!e&&(0,w.Z)(t.version,e.version)<0;return(0,i.jsxs)("div",{className:"item extension",children:[(0,i.jsx)(l.A,{installedPackage:t,hasUpdate:r}),(0,i.jsxs)("div",{className:"content",children:[(0,i.jsx)("div",{className:"header",children:e?e.name:t.name}),(0,i.jsx)("div",{className:"meta author",children:M(s,e,t)}),(0,i.jsx)("div",{className:"description",children:(0,i.jsx)("span",{children:e?e.description:t.description})}),(0,i.jsxs)("div",{className:"extra version",children:[(0,i.jsx)(P,{className:"npm",title:a("Latest version"),packageInfo:e,moduleT:s}),(0,i.jsx)("div",{children:!e&&V(s,t,n)}),(0,i.jsx)(P,{className:L()({outdated:r,latest:e&&!r}),title:a("Installed version"),packageInfo:t,moduleT:s})]}),(0,i.jsx)(B,{installedPackage:t,npmPackage:e,installing:o,hasUpdate:r,moduleT:s})]})]})}}const W=(0,R.k)(F)},30271:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(74848),s=(n(96540),n(83994)),o=n(4425);const a=(e,t)=>e?t?"yellow warning circle":e.managed?e.running?"green play":e.disabled?"grey check circle":"green check circle":"blue external square":null,r=({installedPackage:e,hasUpdate:t,size:n="huge"})=>(0,i.jsx)("div",{className:"ui image",children:(0,i.jsx)(s.A,{icon:o.A.EXTENSION,color:(null==e?void 0:e.disabled)?"grey":void 0,size:n,cornerIcon:a(e,t)})})},15175:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(20239));const o=["away_message","away_no_bots","away_idle_time"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o})})},33751:(e,t,n)=>{n.d(t,{A:()=>A});var i=n(74848),s=(n(96540),n(683)),o=n(56484),a=n(32728),r=n(71352),l=n(39115);const c=({ignoreInfo:e})=>(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:"user dropdown",children:(0,i.jsx)(r.Bg,{ids:["unignore"],userIcon:"simple",user:e.user,contextElement:"#setting-scroll-context",remoteMenuId:l.Ay.USER})}),(0,i.jsx)("td",{className:"count",children:e.ignored_messages})]}),d=e=>(0,i.jsx)(c,{ignoreInfo:e},e.user.cid),A=(0,o.A)((({ignores:e,moduleT:t})=>{const{translate:n}=t;return 0===e.length?(0,i.jsx)(a.A,{title:n("No ignored users")}):(0,i.jsx)("div",{children:(0,i.jsxs)("table",{className:"ui striped table",children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:n("User")}),(0,i.jsx)("th",{children:n("Messages ignored")})]})}),(0,i.jsx)("tbody",{children:e.map(d)})]})})}),{urls:{ignores:s.A.IGNORES_URL},onSocketConnected:(e,{refetchData:t})=>{e(s.A.MODULE_URL,s.A.IGNORE_ADDED,(()=>t())),e(s.A.MODULE_URL,s.A.IGNORE_REMOVED,(()=>t()))}})},43353:(e,t,n)=>{n.d(t,{A:()=>j});var i=n(74848),s=(n(96540),n(20239)),o=n(86038),a=n(67749),r=n(85072),l=n.n(r),c=n(97825),d=n.n(c),A=n(77659),m=n.n(A),u=n(55056),p=n.n(u),h=n(10540),g=n.n(h),x=n(41113),v=n.n(x),C=n(62868),f={};f.styleTagTransform=v(),f.setAttributes=p(),f.insert=m().bind(null,"head"),f.domAPI=d(),f.insertStyleElement=g(),l()(C.A,f),C.A&&C.A.locals&&C.A.locals;var _=n(32389),E=n(47456),y=n(28286);const b=e=>(t,n,s)=>{"nmdc_encoding"===t&&(n.help=(0,i.jsx)(_.x6,{i18nKey:e.toI18nKey((0,E.nD)(a.oV.HELP,t,void 0)),children:(0,i.jsxs)("div",{children:["Encoding setting is only used in NMDC hubs. ADC hubs will always use UTF-8 encoding.",(0,i.jsx)("br",{}),(0,i.jsx)("br",{}),(0,i.jsxs)("div",{children:["Commonly used values:",(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"Central Europe: cp1250"}),(0,i.jsx)("li",{children:"Cyrillic: cp1251"}),(0,i.jsx)("li",{children:"Western Europe: cp1252"}),(0,i.jsx)("li",{children:"Greek: cp1253"}),(0,i.jsx)("li",{children:"Turkish: cp1254"}),(0,i.jsx)("li",{children:"Hebrew: cp1256"})]})]})]})}))},I=["auto_follow_redirects","disconnect_offline_users","disconnect_hubs_noreg","min_search_interval"],j=({moduleT:e})=>{const{systemInfo:t}=(0,y.w)();return t.platform!==o.px.WINDOWS&&I.push("nmdc_encoding"),(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:I,onFieldSetting:b(e)})})}},37964:(e,t,n)=>{n.d(t,{A:()=>u});var i=n(74848),s=(n(96540),n(19718)),o=n(20239),a=n(67749),r=n(47456),l=n(42049),c=n(59250),d=n(32389);const A=["nick","description","email","setting_profile","language_file"],m=e=>(t,n,o)=>{if("setting_profile"===t){let i;const l=o[t];switch(l){case s.PV.NORMAL:i="The client is used in normal private/public hubs for transferring files via internet. Use this profile if unsure.";break;case s.PV.RAR:i="The client is used for transferring files that are split in RAR archives (or in other small-sized formats)";break;case s.PV.LAN:i="The client is used for transferring files in local network (e.g. LAN parties) or in another closed network (e.g. university network)"}i&&(n.help=e.t((0,r.nD)(a.oV.HELP,t,l.toString()),i))}else if("language_file"===t){const s="If you want to help with improving the existing translations or translate the application into a new language, please see the <url>instructions for translators</url>.";n.help=(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("p",{children:(0,i.jsx)(d.x6,{i18nKey:e.toI18nKey((0,r.nD)(a.oV.HELP,t,"Restart")),defaults:"The application must be restarted for the new language to take effect."})}),(0,i.jsx)("p",{children:(0,i.jsx)(d.x6,{i18nKey:e.toI18nKey((0,r.nD)(a.oV.HELP,t,"Translate")),defaults:s,components:{url:(0,i.jsx)(l.A,{url:c.A.TRANSLATOR_HELP})}})})]})}},u=({moduleT:e})=>(0,i.jsx)("div",{children:(0,i.jsx)(o.A,{keys:A,onFieldSetting:m(e)})})},6244:(e,t,n)=>{n.d(t,{A:()=>f});var i=n(74848),s=(n(96540),n(29112)),o=n(91510),a=n(42191),r=n(68514),l=n(71352),c=n(56484),d=n(47603),A=n(4425),m=n(32728),u=n(59315),p=n(36076),h=n(67749),g=n(32389),x=n(48249);const v=({path:e})=>(0,i.jsx)("tr",{children:(0,i.jsx)("td",{className:"path dropdown",children:(0,i.jsx)(l.Wy,{caption:(0,i.jsx)("strong",{children:e}),actions:o.nH,itemData:e,contextElement:"#setting-scroll-context"})})}),C=e=>(0,i.jsx)(v,{path:e},e),f=(0,c.A)((({excludes:e,moduleT:t})=>{const n=(0,x.F)(),{translate:l,toI18nKey:c}=t;return(0,i.jsxs)("div",{children:[(0,i.jsx)(m.A,{title:(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{children:(0,i.jsx)(g.x6,{i18nKey:c("shareRefreshNote"),children:"Share must be refreshed for the changes to take effect"})}),(0,i.jsx)("br",{}),(0,i.jsx)(r.A,{action:s.RS,moduleData:s.eP})]}),icon:A.A.INFO}),(0,i.jsx)(r.A,{action:o.Tw,moduleData:o.MB,className:"add"}),e.length>0&&(0,i.jsxs)("table",{className:"ui striped table",children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{children:l("Path")})})}),(0,i.jsx)("tbody",{children:e.map(C)})]}),(0,i.jsx)(d.i,{onConfirm:e=>(0,p.bd)((()=>n.post(a.A.EXCLUDES_ADD_URL,{path:e})),t.plainT),initialPath:"",historyId:u.A.LOCATION_GENERIC,subHeader:l("Add excluded path"),selectMode:h.bV.DIRECTORY})]})}),{urls:{excludes:a.A.EXCLUDES_URL},onSocketConnected:(e,{refetchData:t})=>{e(a.A.MODULE_URL,a.A.EXCLUDE_ADDED,(()=>t())),e(a.A.MODULE_URL,a.A.EXCLUDE_REMOVED,(()=>t()))}})},79287:(e,t,n)=>{n.d(t,{A:()=>E});var i=n(74848),s=n(96540),o=n(20239),a=n(56484),r=n(73616),l=n(96529),c=n(32728),d=n(71870),A=n(74416),m=(n(97578),n(86038)),u=n(32389),p=n(36076),h=n(73070),g=n(4425),x=n(48249),v=n(28286);const C=({startHandler:e,running:t,moduleT:n})=>{const{toI18nKey:o,translate:a}=n,[d,A]=s.useState(!1);return(0,i.jsxs)("div",{className:"optimize-layout",children:[(0,i.jsx)("h4",{className:"header",style:{marginTop:"30px"},children:a("Maintenance")}),(0,i.jsx)(c.A,{description:(0,i.jsx)(u.x6,{i18nKey:o("hashDBOptimizeNote"),children:"This operation will delete all hash information for files that aren't currently in share. If you are sharing files from network disks or from a removable storage, make sure that the files are currently shown in share (otherwise they have to be rehashed)"}),icon:g.A.NOTE}),(0,i.jsx)(r.A,{caption:a("Verify integrity of hash data"),checked:d,disabled:t,onChange:A,floating:!0,id:"verify-hash-data"}),(0,i.jsx)(l.A,{className:"optimize-button",caption:a("Optimize now"),icon:g.A.CONFIGURE,loading:t,onClick:()=>e(d)})]})},f=(0,a.A)((({status:e,moduleT:t})=>{const{hasAccess:n}=(0,v.w)(),{formatSize:s}=(0,A.k)(),o=(0,x.F)(),{translate:a}=t;return(0,i.jsxs)("div",{className:"ui segment hash-database",children:[(0,i.jsx)("h3",{className:"header",children:a("Hash database")}),(0,i.jsxs)(h.xA,{columns:"two",children:[(0,i.jsx)(h.fI,{title:a("File index size"),text:s(e.file_index_size),titleWidth:"five"}),(0,i.jsx)(h.fI,{title:a("Hash store size"),text:s(e.hash_store_size),titleWidth:"five"})]}),n(m.US.SETTINGS_EDIT)&&(0,i.jsx)(C,{running:e.maintenance_running,startHandler:e=>{(0,p.bd)((()=>o.post(d.A.OPTIMIZE_DATABASE_URL,{verify:e})),t.plainT)},moduleT:t})]})}),{urls:{status:d.A.DATABASE_STATUS_URL},onSocketConnected:(e,{refetchData:t})=>{e(d.A.MODULE_URL,d.A.DATABASE_STATUS,(()=>t()))}}),_=["max_hash_speed","max_total_hashers","max_volume_hashers"],E=({moduleT:e})=>(0,i.jsxs)("div",{children:[(0,i.jsx)(o.A,{keys:_}),(0,i.jsx)(f,{moduleT:e})]})},98915:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(20239));const o=["refresh_time","refresh_time_incoming","refresh_startup","refresh_threading"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o})})},19473:(e,t,n)=>{n.d(t,{A:()=>E});var i=n(74848),s=(n(96540),n(94899)),o=n(71352),a=n(14753),r=n(32728),l=n(71299),c=n(74416),d=(n(97578),n(32389)),A=n(4425),m=n(27725),u=n(17911),p=n(63252),h=n(31104),g=n(19247),x=n(36076),v=n(19430),C=n(28286);const f=({profiles:e,moduleT:t})=>{const{hasAccess:n}=(0,C.w)(),s=(0,c.k)();return n(p.tx.access)?(0,i.jsx)(u.M,{children:({onClickAction:n})=>(0,i.jsxs)(h.A,{caption:t.translate("Add profile"),className:"clone-profile",button:!0,children:[(0,i.jsx)(m.A,{onClick:()=>{n({itemData:void 0,action:p.tx,entity:void 0,moduleData:p.Ds})},icon:A.A.CREATE,children:(0,x._q)(p.tx,p.Ds,t.plainT)}),(0,i.jsx)(g.A,{caption:t.translate("Clone from an existing profile"),children:e.map((e=>((e,t,n)=>(0,i.jsx)(m.A,{onClick:()=>n({action:p.An,itemData:e,moduleData:p.Ds,entity:void 0}),icon:A.A.COPY,children:(0,v.v)(e,t)},e.id))(e,s,n)))})]})}):null},_=({profile:e})=>{const{formatSize:t}=(0,c.k)();return(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:"name dropdown",children:(0,i.jsx)(o.Wy,{caption:(0,i.jsx)("strong",{children:e.str}),actions:s.YS,itemData:e,contextElement:"#setting-scroll-context"})}),(0,i.jsx)("td",{className:"size",children:t(e.size)}),(0,i.jsx)("td",{className:"files",children:e.files})]})},E=(0,l.A)((({moduleT:e,profiles:t})=>{const{translate:n,toI18nKey:s}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)(r.A,{description:(0,i.jsxs)("div",{children:[(0,i.jsx)("p",{children:(0,i.jsx)(d.x6,{i18nKey:s("shareProfilesPartialNote"),defaults:"Queued files are shared via the partial file sharing feature in all hubs where the share has not been hidden, regardless of the configured share profiles.",components:{url:(0,i.jsx)(a.N_,{to:"/share"})}})}),(0,i.jsx)("p",{children:(0,i.jsx)(d.x6,{i18nKey:s("shareProfilesHelp"),defaults:"Share profiles are assigned for individual directories from the <url>Share</url> page.",components:{url:(0,i.jsx)(a.N_,{to:"/share"})}})})]}),icon:A.A.INFO}),(0,i.jsx)(f,{profiles:t,moduleT:e}),(0,i.jsxs)("table",{className:"ui striped table",children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:n("Name")}),(0,i.jsx)("th",{children:n("Total size")}),(0,i.jsx)("th",{children:n("Total files")})]})}),(0,i.jsx)("tbody",{children:t.map((e=>(0,i.jsx)(_,{profile:e},e.id)))})]})]})}),!1)},59676:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(74848),s=(n(96540),n(20239));const o=["share_hidden","share_no_empty_dirs","share_no_zero_byte","share_follow_symlinks","share_max_size"],a=["share_skiplist","share_skiplist_regex"],r=({moduleT:e})=>(0,i.jsxs)("div",{children:[(0,i.jsx)(s.A,{keys:o}),(0,i.jsx)(s.A,{title:e.translate("Skiplist"),keys:a})]})},2348:(e,t,n)=>{n.d(t,{A:()=>l});var i=n(74848),s=n(20239),o=n(19718),a=n(86038),r=n(48249);const l=({type:e,keys:t})=>{const n=(0,r.F)(),l=()=>`${e}_auto_limits`;return(0,i.jsx)("div",{className:"ui segment",children:(0,i.jsx)(s.A,{keys:t,onFieldChanged:(e,i,s)=>{const r=l();return e===r&&i[r]?n.post(o.Ay.ITEMS_GET_URL,{keys:t.filter((e=>e!==r)),value_mode:a.XG.FORCE_AUTO}):null},onFieldSetting:(e,t,n)=>{n[l()]&&e!==l()&&(t.disabled=!0)}})})}},45876:(e,t,n)=>{n.d(t,{A:()=>l});var i=n(74848),s=(n(96540),n(2348)),o=n(20239);const a=["download_auto_limits","download_slots","download_max_start_speed"],r=["download_highest_prio_slots"],l=({moduleT:e})=>{const{translate:t}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)(s.A,{keys:a,type:"download"}),(0,i.jsx)(o.A,{title:t("Manually set"),keys:r})]})}},64253:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(20239));const o=["upload_limit_main","download_limit_main"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o})})},47072:(e,t,n)=>{n.d(t,{A:()=>c});var i=n(74848),s=(n(96540),n(42049)),o=n(59250),a=n(20239),r=n(32389);const l=["download_speed","upload_speed"],c=({moduleT:e})=>{const{toI18nKey:t}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:"ui message",children:(0,i.jsx)(r.x6,{i18nKey:t("connectionSpeedNote"),defaults:"Please be as accurate as possible and set the ACTUAL speed of your connection. You may use an online tester, such as <speedtest>{{name}}</speedtest>, to test your speed.",values:{name:"Speedtest.net"},components:{speedtest:(0,i.jsx)(s.A,{url:o.A.SPEEDTEST_URL})}})}),(0,i.jsx)(a.A,{keys:l})]})}},4313:(e,t,n)=>{n.d(t,{A:()=>l});var i=n(74848),s=(n(96540),n(20239)),o=n(2348);const a=["upload_auto_limits","upload_slots","upload_auto_grant_speed","upload_max_granted"],r=["upload_minislot_size","upload_minislot_ext"],l=({moduleT:e})=>{const{translate:t}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)(o.A,{keys:a,type:"upload"}),(0,i.jsx)(s.A,{title:t("Manually set"),keys:r})]})}},28903:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(2348));const o=["mcn_auto_limits","mcn_down","mcn_up"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o,type:"mcn"})})},81301:(e,t,n)=>{n.d(t,{A:()=>c});var i=n(74848),s=(n(96540),n(68514)),o=n(20239),a=n(18536);const r=["web_server_threads","default_idle_timeout","ping_interval","ping_timeout"],l=["share_file_validation_hook_timeout","share_directory_validation_hook_timeout","new_share_file_validation_hook_timeout","new_share_directory_validation_hook_timeout","outgoing_chat_message_hook_timeout","incoming_chat_message_hook_timeout","queue_add_bundle_hook_timeout","queue_add_bundle_file_hook_timeout","queue_add_source_hook_timeout","queue_bundle_finished_hook_timeout","queue_file_finished_hook_timeout","list_menuitems_hook_timeout"],c=e=>{const{translate:t}=e.moduleT;return(0,i.jsxs)("div",{children:[(0,i.jsx)(s.A,{action:a.Bs,moduleData:a.A_}),(0,i.jsx)(o.A,{keys:r}),(0,i.jsx)("div",{className:"ui header",children:t("Hook timeouts")}),(0,i.jsx)("div",{className:"ui segment",children:(0,i.jsx)(o.A,{keys:l})})]})}},69222:(e,t,n)=>{n.d(t,{A:()=>C});var i=n(74848),s=n(96540),o=n(20239),a=n(42049),r=n(59250),l=n(32728),c=n(4425),d=n(78340);n(50935);class A extends s.Component{constructor(){super(...arguments),this.state={enabled:!1},this.convertKey=e=>{const t=e?`_${e}`:"";return`log_${this.props.section}${t}`},this.onSettingsReceived=e=>{this.setState({enabled:e[this.convertKey()]})},this.onEnableStateChanged=(e,t,n)=>{this.setState({enabled:t[e]})},this.onContentSetting=(e,t,n)=>{t.disabled=!this.state.enabled},this.getChildClass=e=>this.state.enabled?e+" active":e}render(){const e=[this.convertKey()],t=[this.convertKey("file"),this.convertKey("format")],{simple:n}=this.props;return(0,i.jsxs)("div",{className:this.getChildClass("log-section"),children:[(0,i.jsx)("div",{className:this.getChildClass("title"),children:(0,i.jsx)(o.A,{keys:e,onFieldChanged:this.onEnableStateChanged,onSettingValuesReceived:this.onSettingsReceived})}),!n&&(0,i.jsx)("div",{className:this.getChildClass("content"),children:(0,i.jsx)(o.A,{keys:t,onFieldSetting:this.onContentSetting})})]})}}const m=A;const u=e=>{const{title:t,sectionKeys:n,simpleKeys:o}=e,a=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(i=Object.getOwnPropertySymbols(e);s<i.length;s++)t.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(e,i[s])&&(n[i[s]]=e[i[s]])}return n}(e,["title","sectionKeys","simpleKeys"]);return(0,i.jsx)("div",{children:(0,i.jsxs)("div",{className:"sections",children:[(0,i.jsx)("div",{className:"ui header",children:t}),(0,i.jsx)(d.Ay,{className:"styled",controlled:!0,children:n.map((e=>(0,s.createElement)(m,Object.assign({},a,{key:e,section:e,simple:!!o&&o.includes(e)}))))})]})})};var p=n(32389);const h=["log_directory"],g=["main","pm","syslog","status"],x=["downloads","uploads","list_transfers"],v=["list_transfers"],C=({moduleT:e})=>{const{translate:t,toI18nKey:n}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)(o.A,{keys:h}),(0,i.jsxs)("div",{className:"sections",children:[(0,i.jsx)(l.A,{icon:c.A.INFO,description:(0,i.jsx)(a.A,{url:r.A.VARIABLE_HELP_URL,children:(0,i.jsx)(p.x6,{i18nKey:n("variableHelp"),children:"Variable information for Filename and Format fields"})})}),(0,i.jsx)(u,{sectionKeys:g,title:t("Messages")}),(0,i.jsx)(u,{sectionKeys:x,title:t("Transfers"),simpleKeys:v})]})]})}},87135:(e,t,n)=>{n.d(t,{A:()=>A});var i=n(74848),s=(n(96540),n(20239)),o=n(68514),a=n(32728),r=n(72384),l=n(4425);const c=["web_plain_port","web_plain_bind_address"],d=["web_tls_port","web_tls_bind_address","web_tls_certificate_path","web_tls_certificate_key_path"],A=e=>{const{t}=e.moduleT;return(0,i.jsxs)("div",{children:[(0,i.jsx)(o.A,{action:r.Bs,moduleData:r.A_}),(0,i.jsx)("div",{className:"ui header",children:"HTTP"}),(0,i.jsx)("div",{className:"ui segment",children:(0,i.jsx)(s.A,Object.assign({},e,{keys:c}))}),(0,i.jsx)("div",{className:"ui header",children:"HTTPS"}),(0,i.jsxs)("div",{className:"ui segment",children:[(0,i.jsx)(s.A,Object.assign({},e,{keys:d})),(0,i.jsx)(a.A,{description:t("defaultCertNote","The default client certificate is used if the certificate paths are empty"),icon:l.A.INFO})]})]})}},51566:(e,t,n)=>{n.d(t,{A:()=>T});var i=n(74848),s=n(96540),o=n(76865),a=n(52786),r=n(68514),l=n(99671),c=n(65385);const d={ADMIN:"admin",SEARCH:"search",DOWNLOAD:"download",TRANSFERS:"transfers",EVENTS_VIEW:"events_view",EVENTS_EDIT:"events_edit",QUEUE_VIEW:"queue_view",QUEUE_EDIT:"queue_edit",FAVORITE_HUBS_VIEW:"favorite_hubs_view",FAVORITE_HUBS_EDIT:"favorite_hubs_edit",SETTINGS_VIEW:"settings_view",SETTINGS_EDIT:"settings_edit",FILESYSTEM_VIEW:"filesystem_view",FILESYSTEM_EDIT:"filesystem_edit",HUBS_VIEW:"hubs_view",HUBS_EDIT:"hubs_edit",HUBS_SEND:"hubs_send",PRIVATE_CHAT_VIEW:"private_chat_view",PRIVATE_CHAT_EDIT:"private_chat_edit",PRIVATE_CHAT_SEND:"private_chat_send",FILELISTS_VIEW:"filelists_view",FILELISTS_EDIT:"filelists_edit",VIEW_FILE_VIEW:"view_file_view",VIEW_FILE_EDIT:"view_file_edit"};var A=n(51766),m=n(73616),u=n(32728),p=n(86038),h=n(47456);var g,x=n(94413),v=(n(50935),n(56484)),C=n(42695),f=n(4425),_=n(28286);!function(e){e.EDIT="Edit",e.VIEW="View",e.SEND_MESSAGES="Send messages"}(g||(g={}));const E={ADMIN:"Administrator",SEARCH:"Search",DOWNLOAD:"Download",TRANSFERS:"Transfers",EVENTS_VIEW:{title:"Events",action:g.VIEW},EVENTS_EDIT:{title:"Events",action:g.EDIT},QUEUE_VIEW:{title:"Queue",action:g.VIEW},QUEUE_EDIT:{title:"Queue",action:g.EDIT},FAVORITE_HUBS_VIEW:{title:"Favorite hubs",action:g.VIEW},FAVORITE_HUBS_EDIT:{title:"Favorite hubs",action:g.EDIT},SETTINGS_VIEW:{title:"Settings",action:g.VIEW},SETTINGS_EDIT:{title:"Settings",action:g.EDIT},FILESYSTEM_VIEW:{title:"Local filesystem",action:g.VIEW},FILESYSTEM_EDIT:{title:"Local filesystem",action:g.EDIT},HUBS_VIEW:{title:"Hubs",action:g.VIEW},HUBS_EDIT:{title:"Hubs",action:g.EDIT},HUBS_SEND:{title:"Hubs",action:g.SEND_MESSAGES},PRIVATE_CHAT_VIEW:{title:"Private chat",action:g.VIEW},PRIVATE_CHAT_EDIT:{title:"Private chat",action:g.EDIT},PRIVATE_CHAT_SEND:{title:"Private chat",action:g.SEND_MESSAGES},FILELISTS_VIEW:{title:"Filelists",action:g.VIEW},FILELISTS_EDIT:{title:"Filelists",action:g.EDIT},VIEW_FILE_VIEW:{title:"Viewed files",action:g.VIEW},VIEW_FILE_EDIT:{title:"Viewed files",action:g.EDIT}},y=(0,c.A)((0,v.A)((e=>{var{user:t,moduleT:n,socket:a}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(i=Object.getOwnPropertySymbols(e);s<i.length;s++)t.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(e,i[s])&&(n[i[s]]=e[i[s]])}return n}(e,["user","moduleT","socket"]);const{user:c}=(0,_.w)(),g=!t,v=(0,s.useMemo)((()=>((e,t)=>{const n=(0,h.Nn)((e=>[{key:"username",title:"User name",type:p.OP.STRING},{key:"password",type:p.OP.PASSWORD,title:e?"Password":"New password",optional:!e},{key:"permissions",title:"Permissions",type:p.OP.LIST,item_type:p.OP.STRING}])(e),t),i=(0,C.Ze)(t,"permissionSelector"),s=n.find((e=>"permissions"===e.key));return Object.assign(s,{options:Object.keys(d).reduce(((e,t)=>((e,t,n)=>{const i=E[t];return"string"==typeof i?e.push({id:d[t],name:n.translate(i)}):e.push({id:d[t],name:`${n.translate(i.title)} (${n.translate(i.action)})`}),e})(e,t,i)),[])}),n})(g,n)),[]),y=(0,s.useRef)(null),b=n.translate(g?"Add web user":"Edit user");return(0,i.jsx)(l.A,Object.assign({className:"web-user",title:b,onApprove:()=>y.current.save(),closable:!1,icon:f.A.USER},r,{children:(0,i.jsx)(x.A,{ref:y,fieldDefinitions:v,onFieldSetting:(e,s,o)=>{"permissions"===e?(s.factory=A.Ay.form.Select,s.template=(e=>A.Ay.form.Form.templates.select.clone({renderSelect:t=>{const n=t.options.filter((({value:e})=>!t.value.includes(p.US.ADMIN)||e===p.US.ADMIN)).map((({value:e,text:n})=>(0,i.jsx)(m.A,{id:`permission-${e}`,checked:t.value.includes(e),onChange:n=>((e,n)=>{t.onChange((0,h.z_)(t.value,e,n))})(e,n),caption:n,name:t.attrs.name},e)));return(0,i.jsxs)("div",{className:"permission-select",children:[(0,i.jsx)(u.A,{description:e.t("adminPermissionNote","Administrator permission is required in order to access the System section in settings"),className:"small"}),n]})}}))(n),s.disabled=!g&&t.username===c.username):"username"===e&&(s.disabled=!g)},onSave:e=>g?a.post(o.A.USERS_URL,e):a.patch(`${o.A.USERS_URL}/${t.id}`,e),sourceValue:t})}))}),{urls:{user:({params:e},t)=>e.userId?t.get(`${o.A.USERS_URL}/${e.userId}`):Promise.resolve(void 0)}}),"users/:userId?");var b=n(71352),I=n(74416);const j=({user:e,moduleT:t})=>{const{formatRelativeTime:n}=(0,I.k)();return(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:"name dropdown",children:(0,i.jsx)(b.Wy,{caption:(0,i.jsx)("strong",{children:e.username}),actions:a.F5,itemData:e,contextElement:"#setting-scroll-context"})}),(0,i.jsx)("td",{className:"permissions",children:e.permissions.includes(p.US.ADMIN)?t.translate("Administrator"):e.permissions.length}),(0,i.jsx)("td",{className:"sessions",children:e.active_sessions}),(0,i.jsx)("td",{className:"last-login",children:n(e.last_login)})]})};class S extends s.Component{render(){const{users:e,moduleT:t}=this.props,{translate:n}=t;return(0,i.jsxs)("div",{children:[(0,i.jsx)(r.A,{action:a.u2,moduleData:a.O6}),(0,i.jsxs)("table",{className:"ui striped table",children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:n("Username")}),(0,i.jsx)("th",{children:n("Permissions")}),(0,i.jsx)("th",{children:n("Active sessions")}),(0,i.jsx)("th",{children:n("Last logged in")})]})}),(0,i.jsx)("tbody",{children:e.map((e=>(0,i.jsx)(j,{user:e,moduleT:t},e.username)))})]}),(0,i.jsx)(y,{moduleT:t})]})}}S.displayName="WebUsersPage";const T=(0,v.A)(S,{urls:{users:o.A.USERS_URL},onSocketConnected:(e,{refetchData:t})=>{e(o.A.MODULE_URL,o.A.ADDED,(()=>t())),e(o.A.MODULE_URL,o.A.UPDATED,(()=>t())),e(o.A.MODULE_URL,o.A.REMOVED,(()=>t()))}})},81879:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(20239));const o=["use_main_chat_notify","show_joins","format_release_names"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o})})},26295:(e,t,n)=>{n.d(t,{A:()=>a});var i=n(74848),s=(n(96540),n(20239));const o=["report_uploads","report_downloads","report_search_alternates","report_added_sources","report_blocked_share","report_hashed_files","report_scheduled_refreshes","report_filelist_dupes"],a=()=>(0,i.jsx)("div",{children:(0,i.jsx)(s.A,{keys:o})})},92151:(e,t,n)=>{n.d(t,{A:()=>l});var i=n(74848),s=(n(96540),n(20239));const o=["history_search_max","history_download_max","history_chat_log_lines"],a=["history_hub_messages","history_pm_messages","history_log_messages"],r=["history_hub_sessions","history_pm_sessions","history_filelist_sessions"],l=({moduleT:e})=>{const{t}=e;return(0,i.jsxs)("div",{children:[(0,i.jsx)(s.A,{keys:o}),(0,i.jsx)(s.A,{title:t("maxMessageHistory","Maximum number of messages to cache"),keys:a}),(0,i.jsx)(s.A,{title:t("maxSessionHistory","Maximum number of previously opened sessions"),keys:r})]})}},36255:(e,t,n)=>{n.d(t,{A:()=>r});var i=n(74848),s=(n(96540),n(19718)),o=n(56022);const a=[s.xC.UNREAD_LABEL_DELAY,s.xC.BACKGROUND_IMAGE_URL,s.xC.NO_INSTALL_PROMPT],r=({moduleT:e})=>(0,i.jsx)("div",{children:(0,i.jsx)(o.A,{moduleT:e,keys:a})})},49123:(e,t,n)=>{n.d(t,{A:()=>_});var i=n(74848),s=(n(96540),n(19718)),o=n(56022),a=n(85072),r=n.n(a),l=n(97825),c=n.n(l),d=n(77659),A=n.n(d),m=n(55056),u=n.n(m),p=n(10540),h=n.n(p),g=n(41113),x=n.n(g),v=n(49696),C={};C.styleTagTransform=x(),C.setAttributes=u(),C.insert=A().bind(null,"head"),C.domAPI=c(),C.insertStyleElement=h(),r()(v.A,C),v.A&&v.A.locals&&v.A.locals;const f=[s.xC.NOTIFY_MENTION,s.xC.NOTIFY_PM_USER,s.xC.NOTIFY_PM_BOT,s.xC.NOTIFY_HUB_MESSAGE,s.xC.NOTIFY_BUNDLE_STATUS,s.xC.NOTIFY_EVENTS_INFO,s.xC.NOTIFY_EVENTS_WARNING,s.xC.NOTIFY_EVENTS_ERROR],_=({moduleT:e})=>{const{translate:t}=e;return(0,i.jsx)("div",{children:(0,i.jsx)(o.A,{title:t("Popup notifications"),moduleT:e,keys:f})})}},88569:(e,t,n)=>{n.d(t,{H:()=>r,U:()=>a});var i=n(50753),s=n(41110),o=function(e,t,n,i){return new(n||(n=Promise))((function(s,o){function a(e){try{l(i.next(e))}catch(e){o(e)}}function r(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,r)}l((i=i.apply(e,t||[])).next())}))};const a=(e,t)=>o(void 0,void 0,void 0,(function*(){try{return(yield(0,s.F)(`${getBasePath()}temp`,{method:"POST",headers:{"X-Authorization":t,Authorization:t},body:e})).headers.get("Location")}catch(e){throw e}})),r=(e,t,n)=>o(void 0,void 0,void 0,(function*(){try{const o=yield(0,s.F)((e=>`${window.location.origin}${getBasePath()}proxy?url=${encodeURIComponent(e)}`)(e),Object.assign({headers:{"X-Authorization":i.A.authToken,"Cache-Control":"no-store, must-revalidate, max-age=0"}},n));return(yield t)?o.json():o.text()}catch(t){throw console.error(`CORS HTTP request failed (${e})`,t),t}}))},19430:(e,t,n)=>{n.d(t,{T:()=>o,v:()=>s});var i=n(86818);const s=(e,{formatSize:t})=>{let n=e.str;return e.id!==i.A.HIDDEN_PROFILE_ID&&(n+=` (${t(e.size)})`),n},o=(e,t)=>({id:e.id,name:s(e,t)})}}]);
2
- //# sourceMappingURL=settings.1287a0ef1d611a34ea1c.chunk.js.map