@jesec/flood 0.0.0-master.76103c8 → 0.0.0-master.7629199

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 (52) hide show
  1. package/README.md +4 -7
  2. package/dist/assets/assets/Alerts-BfYWD54i.js +2 -0
  3. package/dist/assets/assets/Alerts-BfYWD54i.js.map +1 -0
  4. package/dist/assets/assets/ApplicationView-Cuf1ZIDm.js +2 -0
  5. package/dist/assets/assets/{ApplicationView-B-QipOTx.js.map → ApplicationView-Cuf1ZIDm.js.map} +1 -1
  6. package/dist/assets/assets/AuthForm-DpkioMio.js +2 -0
  7. package/dist/assets/assets/{AuthForm-BXIGYBoO.js.map → AuthForm-DpkioMio.js.map} +1 -1
  8. package/dist/assets/assets/Login-BaGUzZu-.js +2 -0
  9. package/dist/assets/assets/{Login-yFJNG5g3.js.map → Login-BaGUzZu-.js.map} +1 -1
  10. package/dist/assets/assets/Modals-Bn0jFYm4.js +53 -0
  11. package/dist/assets/assets/Modals-Bn0jFYm4.js.map +1 -0
  12. package/dist/assets/assets/Overview-CcF7ZbfX.js +700 -0
  13. package/dist/assets/assets/Overview-CcF7ZbfX.js.map +1 -0
  14. package/dist/assets/assets/Register-Cpib2Scf.js +2 -0
  15. package/dist/assets/assets/{Register-CRS4FA1c.js.map → Register-Cpib2Scf.js.map} +1 -1
  16. package/dist/assets/assets/Roboto-500-CsZWW7Bu.woff2 +0 -0
  17. package/dist/assets/assets/Roboto-700-D1ZLqfE0.woff2 +0 -0
  18. package/dist/assets/assets/Roboto-700italic-CfNT1HYS.woff2 +0 -0
  19. package/dist/assets/assets/Roboto-italic-BTa0Y66b.woff2 +0 -0
  20. package/dist/assets/assets/Roboto-regular-CJgdpARq.woff2 +0 -0
  21. package/dist/assets/assets/dist-DTOngMXG.js +5 -0
  22. package/dist/assets/assets/dist-DTOngMXG.js.map +1 -0
  23. package/dist/assets/assets/index-B3MiSpjb.js +84 -0
  24. package/dist/assets/assets/index-B3MiSpjb.js.map +1 -0
  25. package/dist/assets/assets/index-H8kSoxrM.css +1 -0
  26. package/dist/assets/index.html +3 -6
  27. package/dist/index.js +2 -2
  28. package/package.json +134 -137
  29. package/dist/assets/assets/Alerts-BS4eZdTF.js +0 -2
  30. package/dist/assets/assets/Alerts-BS4eZdTF.js.map +0 -1
  31. package/dist/assets/assets/ApplicationView-B-QipOTx.js +0 -2
  32. package/dist/assets/assets/AuthForm-BXIGYBoO.js +0 -2
  33. package/dist/assets/assets/Badge-bFGTXIHd.js +0 -6
  34. package/dist/assets/assets/Badge-bFGTXIHd.js.map +0 -1
  35. package/dist/assets/assets/Login-yFJNG5g3.js +0 -2
  36. package/dist/assets/assets/Modals-CvOUCxTv.js +0 -53
  37. package/dist/assets/assets/Modals-CvOUCxTv.js.map +0 -1
  38. package/dist/assets/assets/Overview-CoIwLmm6.js +0 -700
  39. package/dist/assets/assets/Overview-CoIwLmm6.js.map +0 -1
  40. package/dist/assets/assets/Register-CRS4FA1c.js +0 -2
  41. package/dist/assets/assets/Tooltip-tb1PYuwx.js +0 -2
  42. package/dist/assets/assets/Tooltip-tb1PYuwx.js.map +0 -1
  43. package/dist/assets/assets/TransitionGroup-CHY7XRk2.js +0 -2
  44. package/dist/assets/assets/TransitionGroup-CHY7XRk2.js.map +0 -1
  45. package/dist/assets/assets/icons-CeuyGgHn.js +0 -14
  46. package/dist/assets/assets/icons-CeuyGgHn.js.map +0 -1
  47. package/dist/assets/assets/index-CkwdJWib.css +0 -1
  48. package/dist/assets/assets/index-Cw3UEVGF.js +0 -15
  49. package/dist/assets/assets/index-Cw3UEVGF.js.map +0 -1
  50. package/dist/assets/assets/rolldown-runtime-BgaNhQyE.js +0 -1
  51. package/dist/assets/assets/ui-DGmTLTub.js +0 -74
  52. package/dist/assets/assets/ui-DGmTLTub.js.map +0 -1
package/README.md CHANGED
@@ -54,15 +54,12 @@ Install [Node.js runtime](https://nodejs.org/). Flood tracks `Current` and provi
54
54
  - macOS users can use [brew](https://brew.sh/) or installer.
55
55
  - Check [Node.js website](https://nodejs.org/en/download/package-manager) for more.
56
56
 
57
- Alternatively, download a single-executable build from [Releases](https://github.com/jesec/flood/releases) (or rolling build from [Actions](https://nightly.link/jesec/flood/workflows/publish-rolling/master)). It bundles `Node.js` and supports `Linux`, `macOS` and `Windows`.
58
-
59
57
  ### Installation
60
58
 
61
- (sudo) `npm install --global flood` or `npx flood`
62
-
63
- Or use `@jesec/flood` for cutting-edge builds.
64
-
65
- Or [build from source](https://github.com/jesec/flood#Building-Flood).
59
+ - (sudo) `npm install --global flood` or `npx flood`. Use `@jesec/flood` for cutting-edge builds.
60
+ - Download a single-executable build from [Releases](https://github.com/jesec/flood/releases) (or rolling build from [Actions](https://nightly.link/jesec/flood/workflows/publish-rolling/master)). It bundles `Node.js`, so [Pre-Requisites](#pre-requisites) do not apply, and supports `Linux`, `macOS` and `Windows`.
61
+ - These builds bundle a `small-icu` Node.js without break-iterator data, so `flood --help` aborts in `Intl.Segmenter#segment()` (reached via `yargs` → `cliui` → `string-width`) with a `RangeError`, or a plain crash such as `SIGSEGV` on older builds ([nodejs/node#51752](https://github.com/nodejs/node/issues/51752), [yao-pkg/pkg#289](https://github.com/yao-pkg/pkg/issues/289)). Normal startup is unaffected. The matching ICU data (`icudt78l.dat`) ships next to them, so point `NODE_ICU_DATA` at the directory holding it: `NODE_ICU_DATA=/opt/flood ./flood --help`. It must match `process.versions.icu` of the bundled Node.js. `npm` installs and the standard Docker image run on a stock `full-icu` Node.js and are unaffected; the `.deb` package and the distroless image install the data and set `NODE_ICU_DATA` themselves.
62
+ - [Build from source](https://github.com/jesec/flood#Building-Flood).
66
63
 
67
64
  ### Run
68
65
 
@@ -0,0 +1,2 @@
1
+ import{Bt as e,C as t,Tt as n,Wt as r,Xt as i,an as a,n as o,wt as s,zt as c}from"./dist-DTOngMXG.js";var l=a(r(),1),u=c(),d=i(t=>{let{id:r}=t,{count:i,type:a}=e.alerts[r]||{};if(r==null||i==null||a==null)return null;let c=(0,l.default)(`alert`,{"is-success":a===`success`,"is-error":a===`error`}),d=(0,u.jsx)(n,{});return a===`error`&&(d=(0,u.jsx)(s,{})),(0,u.jsxs)(`li`,{className:c,children:[d,(0,u.jsx)(`span`,{className:`alert__content`,children:(0,u.jsx)(o,{id:r,values:{count:i,countElement:(0,u.jsx)(`span`,{className:`alert__count`,children:i})}})})]})}),f=i(()=>{let{sortedAlerts:n}=e;return(0,u.jsx)(t,{classNamePrefix:`alerts__list`,in:n!=null&&n.length>0,mountOnEnter:!0,timeout:{enter:250,exit:250},unmountOnExit:!0,children:e=>(0,u.jsx)(`ul`,{className:(0,l.default)(`alerts__list`,e),children:n.map(e=>(0,u.jsx)(d,{id:e.id},e.id))})})});export{f as default};
2
+ //# sourceMappingURL=Alerts-BfYWD54i.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alerts-BfYWD54i.js","names":[],"sources":["../../../client/src/javascript/components/alerts/Alert.tsx","../../../client/src/javascript/components/alerts/Alerts.tsx"],"sourcesContent":["import {FC} from 'react';\nimport classnames from 'classnames';\nimport {observer} from 'mobx-react-lite';\nimport {Trans} from '@lingui/react';\n\nimport AlertStore from '@client/stores/AlertStore';\nimport {CircleCheckmark, CircleExclamation} from '@client/ui/icons';\n\ninterface AlertProps {\n id: string;\n}\n\nconst Alert: FC<AlertProps> = observer((props: AlertProps) => {\n const {id} = props;\n const {count, type} = AlertStore.alerts[id] || {};\n\n if (id == null || count == null || type == null) {\n return null;\n }\n\n const alertClasses = classnames('alert', {\n 'is-success': type === 'success',\n 'is-error': type === 'error',\n });\n\n let icon = <CircleCheckmark />;\n if (type === 'error') {\n icon = <CircleExclamation />;\n }\n\n return (\n <li className={alertClasses}>\n {icon}\n <span className=\"alert__content\">\n <Trans\n id={id}\n values={{\n count,\n countElement: <span className=\"alert__count\">{count}</span>,\n }}\n />\n </span>\n </li>\n );\n});\n\nexport default Alert;\n","import classnames from 'classnames';\nimport {FC} from 'react';\nimport {observer} from 'mobx-react-lite';\n\nimport {Transition} from '@client/ui';\n\nimport Alert from './Alert';\nimport AlertStore from '../../stores/AlertStore';\n\nconst Alerts: FC = observer(() => {\n const {sortedAlerts} = AlertStore;\n\n return (\n <Transition\n classNamePrefix=\"alerts__list\"\n in={sortedAlerts != null && sortedAlerts.length > 0}\n mountOnEnter\n timeout={{enter: 250, exit: 250}}\n unmountOnExit\n >\n {(transitionClassName) => (\n <ul className={classnames('alerts__list', transitionClassName)}>\n {sortedAlerts.map((alert) => (\n <Alert key={alert.id} id={alert.id} />\n ))}\n </ul>\n )}\n </Transition>\n );\n});\n\nexport default Alerts;\n"],"mappings":"2HAYM,EAAwB,EAAU,GAAsB,CAC5D,GAAM,CAAC,MAAM,EACP,CAAC,QAAO,QAAQ,EAAW,OAAO,IAAO,CAAC,EAEhD,GAAI,GAAM,MAAQ,GAAS,MAAQ,GAAQ,KACzC,OAAO,KAGT,IAAM,GAAA,EAAe,EAAA,QAAA,CAAW,QAAS,CACvC,aAAc,IAAS,UACvB,WAAY,IAAS,OACvB,CAAC,EAEG,GAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,CAAA,EAK7B,OAJI,IAAS,UACX,GAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,CAAA,IAI3B,EAAA,EAAA,KAAA,CAAC,KAAD,CAAI,UAAW,EAAf,SAAA,CACG,GACD,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,iBACd,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CACM,KACJ,OAAQ,CACN,QACA,cAAc,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,eAAgB,SAAA,CAAY,CAAA,CAC5D,CACD,CAAA,CACG,CAAA,CACJ,GAER,CAAC,ECnCK,EAAa,MAAe,CAChC,GAAM,CAAC,gBAAgB,EAEvB,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,gBAAgB,eAChB,GAAI,GAAgB,MAAQ,EAAa,OAAS,EAClD,aAAA,GACA,QAAS,CAAC,MAAO,IAAK,KAAM,GAAG,EAC/B,cAAA,GAEE,SAAA,IACA,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,WAAA,EAAW,EAAA,QAAA,CAAW,eAAgB,CAAmB,EAC1D,SAAA,EAAa,IAAK,IACjB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAsB,GAAI,EAAM,EAAK,EAAzB,EAAM,EAAmB,CACtC,CACC,CAAA,CAEI,CAAA,CAEhB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{Wt as e,Xt as t,an as n,zt as r}from"./dist-DTOngMXG.js";import{m as i}from"./index-B3MiSpjb.js";var a=n(e(),1),o=r(),s=function(e){return e.AuthForm=`auth-form`,e.SidebarAlternativeState=`sidebar-alternative-state`,e}({}),c=t(({children:e,modifier:t})=>{let n=[];t!=null&&n.push(t),i.isSidebarAlternativeState&&n.push(`sidebar-alternative-state`);let r=(0,a.default)(`application__view`,...n.map(e=>`application__view--${e}`));return(0,o.jsx)(`div`,{className:r,children:e})});export{s as n,c as t};
2
+ //# sourceMappingURL=ApplicationView-Cuf1ZIDm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationView-B-QipOTx.js","names":[],"sources":["../../../client/src/javascript/components/layout/ApplicationView.tsx"],"sourcesContent":["import classnames from 'classnames';\nimport {FC, ReactNode} from 'react';\nimport {observer} from 'mobx-react-lite';\n\nimport UIStore from '@client/stores/UIStore';\n\nexport enum ApplicationViewModifier {\n AuthForm = 'auth-form',\n SidebarAlternativeState = 'sidebar-alternative-state',\n}\n\ninterface ApplicationViewProps {\n children: ReactNode;\n modifier?: ApplicationViewModifier;\n}\n\nconst ApplicationView: FC<ApplicationViewProps> = observer(({children, modifier}: ApplicationViewProps) => {\n const activeModifiers: Array<ApplicationViewModifier> = [];\n\n if (modifier != null) {\n activeModifiers.push(modifier);\n }\n\n if (UIStore.isSidebarAlternativeState) {\n activeModifiers.push(ApplicationViewModifier.SidebarAlternativeState);\n }\n\n const classes = classnames(\n 'application__view',\n ...activeModifiers.map((activeModifier) => `application__view--${activeModifier}`),\n );\n\n return <div className={classes}>{children}</div>;\n});\n\nexport default ApplicationView;\n"],"mappings":"oKAMY,EAAL,SAAA,EAAA,OACL,GAAA,SAAA,YACA,EAAA,wBAAA,6BACF,EAAA,CAAA,CAAA,EAOM,EAA4C,GAAU,CAAC,WAAU,cAAoC,CACzG,IAAM,EAAkD,CAAC,EAezD,OAbI,GAAY,MACd,EAAgB,KAAK,CAAQ,EAG3B,EAAQ,2BACV,EAAgB,KAAA,2BAAoD,GAQ/D,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,WAAA,EAAA,EAAA,QAAA,CAJV,oBACA,GAAG,EAAgB,IAAK,GAAmB,sBAAsB,GAAgB,CAG5D,EAAU,UAAc,CAAA,CACjD,CAAC"}
1
+ {"version":3,"file":"ApplicationView-Cuf1ZIDm.js","names":[],"sources":["../../../client/src/javascript/components/layout/ApplicationView.tsx"],"sourcesContent":["import classnames from 'classnames';\nimport {FC, ReactNode} from 'react';\nimport {observer} from 'mobx-react-lite';\n\nimport UIStore from '@client/stores/UIStore';\n\nexport enum ApplicationViewModifier {\n AuthForm = 'auth-form',\n SidebarAlternativeState = 'sidebar-alternative-state',\n}\n\ninterface ApplicationViewProps {\n children: ReactNode;\n modifier?: ApplicationViewModifier;\n}\n\nconst ApplicationView: FC<ApplicationViewProps> = observer(({children, modifier}: ApplicationViewProps) => {\n const activeModifiers: Array<ApplicationViewModifier> = [];\n\n if (modifier != null) {\n activeModifiers.push(modifier);\n }\n\n if (UIStore.isSidebarAlternativeState) {\n activeModifiers.push(ApplicationViewModifier.SidebarAlternativeState);\n }\n\n const classes = classnames(\n 'application__view',\n ...activeModifiers.map((activeModifier) => `application__view--${activeModifier}`),\n );\n\n return <div className={classes}>{children}</div>;\n});\n\nexport default ApplicationView;\n"],"mappings":"6HAMY,EAAL,SAAA,EAAA,OACL,GAAA,SAAA,YACA,EAAA,wBAAA,6BACF,EAAA,CAAA,CAAA,EAOM,EAA4C,GAAU,CAAC,WAAU,cAAoC,CACzG,IAAM,EAAkD,CAAC,EAErD,GAAY,MACd,EAAgB,KAAK,CAAQ,EAG3B,EAAQ,2BACV,EAAgB,KAAA,2BAAoD,EAGtE,IAAM,GAAA,EAAU,EAAA,QAAA,CACd,oBACA,GAAG,EAAgB,IAAK,GAAmB,sBAAsB,GAAgB,CACnF,EAEA,OAAO,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAU,UAAc,CAAA,CACjD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{_ as e,an as t,b as n,d as r,f as i,g as a,i as o,l as s,m as c,nn as l,r as u,u as d,zt as f}from"./dist-DTOngMXG.js";import{c as p,f as m,k as h,s as g}from"./index-B3MiSpjb.js";var _=t(l(),1),v=f(),y=({mode:t})=>{let{i18n:l}=u(),f=(0,_.useRef)(null),y=(0,_.useRef)(null),[b,x]=(0,_.useState)(void 0),[S,C]=(0,_.useState)(!1),w=h(),T=t===`login`;return(0,v.jsx)(`div`,{className:`application__entry-barrier`,children:(0,v.jsx)(i,{spacing:`large`,children:(0,v.jsxs)(e,{onSubmit:e=>{e.event.preventDefault(),C(!0);let t=e.formData;if(t.username==null||t.username===``){C(!1),x({id:`auth.error.username.empty`});return}if(t.password==null||t.password===``){C(!1),x({id:`auth.error.password.empty`});return}if(T){let e=t;p.authenticate({username:e.username,password:e.password}).then(()=>{C(!1),w(`/overview`,{replace:!0})}).catch(e=>{C(!1),x(e.message),w(`/login`,{replace:!0})})}else{let e=t;if(y.current==null){C(!1),x({id:`connection.settings.error.empty`});return}let n=y.current;if(n==null){C(!1),x({id:`connection.settings.error.empty`});return}p.register({username:e.username,password:e.password,client:n,level:m.ADMINISTRATOR}).then(()=>{C(!1),w(`/overview`,{replace:!0})},e=>{C(!1),x(e.message)})}},ref:f,children:[(0,v.jsx)(s,{children:(0,v.jsx)(`h1`,{children:T?l._(`auth.login`):l._(`auth.create.an.account`)})}),(0,v.jsxs)(r,{children:[(0,v.jsx)(`p`,{className:`copy--lead`,children:T?l._(`auth.login.intro`):l._(`auth.create.an.account.intro`)}),b==null?null:(0,v.jsx)(c,{children:(0,v.jsx)(a,{isLoading:S,children:typeof b==`string`?b:l._(b)})}),(0,v.jsx)(c,{children:(0,v.jsx)(o,{placeholder:l._(`auth.username`),id:`username`,autoComplete:`username`})}),(0,v.jsx)(c,{children:(0,v.jsx)(o,{placeholder:l._(`auth.password`),id:`password`,type:`password`,autoComplete:T?`current-password`:`new-password`})})]}),T?null:(0,v.jsx)(r,{hasBorder:!0,children:(0,v.jsx)(g,{onSettingsChange:e=>{y.current=e}})}),(0,v.jsx)(d,{hasBorder:!0,children:(0,v.jsxs)(c,{justify:`end`,children:[(0,v.jsx)(n,{priority:`tertiary`,onClick:()=>{f.current!=null&&f.current.resetForm()},children:l._(`auth.input.clear`)}),(0,v.jsx)(n,{isLoading:S,type:`submit`,children:T?l._(`auth.log.in`):l._(`auth.create.account`)})]})})]})})})};export{y as t};
2
+ //# sourceMappingURL=AuthForm-DpkioMio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthForm-BXIGYBoO.js","names":[],"sources":["../../../client/src/javascript/components/auth/AuthForm.tsx"],"sourcesContent":["import {FC, useRef, useState} from 'react';\nimport {useLingui} from '@lingui/react';\nimport {useNavigate} from 'react-router';\n\nimport {\n Button,\n Form,\n FormHandle,\n FormError,\n FormRow,\n Panel,\n PanelContent,\n PanelHeader,\n PanelFooter,\n Textbox,\n} from '@client/ui';\nimport AuthActions from '@client/actions/AuthActions';\n\nimport {AccessLevel} from '@shared/schema/constants/Auth';\n\nimport type {Credentials} from '@shared/schema/Auth';\nimport type {ClientConnectionSettings} from '@shared/schema/ClientConnectionSettings';\n\nimport ClientConnectionSettingsForm from '../general/connection-settings/ClientConnectionSettingsForm';\n\ntype LoginFormData = Pick<Credentials, 'username' | 'password'>;\ntype RegisterFormData = Pick<Credentials, 'username' | 'password'>;\n\ninterface AuthFormProps {\n mode: 'login' | 'register';\n}\n\nconst AuthForm: FC<AuthFormProps> = ({mode}: AuthFormProps) => {\n const {i18n} = useLingui();\n const formRef = useRef<FormHandle>(null);\n const clientConnectionSettingsRef = useRef<ClientConnectionSettings | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | {id: string} | undefined>(undefined);\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n\n const navigate = useNavigate();\n\n const isLoginMode = mode === 'login';\n\n return (\n <div className=\"application__entry-barrier\">\n <Panel spacing=\"large\">\n <Form\n onSubmit={(submission) => {\n submission.event.preventDefault();\n\n setIsSubmitting(true);\n\n const formData = submission.formData as Partial<LoginFormData> | Partial<RegisterFormData>;\n\n if (formData.username == null || formData.username === '') {\n setIsSubmitting(false);\n setErrorMessage({id: 'auth.error.username.empty'});\n return;\n }\n\n if (formData.password == null || formData.password === '') {\n setIsSubmitting(false);\n setErrorMessage({id: 'auth.error.password.empty'});\n return;\n }\n\n if (isLoginMode) {\n const credentials = formData as LoginFormData;\n\n AuthActions.authenticate({\n username: credentials.username,\n password: credentials.password,\n })\n .then(() => {\n setIsSubmitting(false);\n navigate('/overview', {replace: true});\n })\n .catch((error: Error) => {\n setIsSubmitting(false);\n setErrorMessage(error.message);\n navigate('/login', {replace: true});\n });\n } else {\n const config = formData as RegisterFormData;\n\n if (clientConnectionSettingsRef.current == null) {\n setIsSubmitting(false);\n setErrorMessage({id: 'connection.settings.error.empty'});\n return;\n }\n\n const connectionSettings = clientConnectionSettingsRef.current;\n if (connectionSettings == null) {\n setIsSubmitting(false);\n setErrorMessage({id: 'connection.settings.error.empty'});\n return;\n }\n\n AuthActions.register({\n username: config.username,\n password: config.password,\n client: connectionSettings,\n level: AccessLevel.ADMINISTRATOR,\n }).then(\n () => {\n setIsSubmitting(false);\n navigate('/overview', {replace: true});\n },\n (error: Error) => {\n setIsSubmitting(false);\n setErrorMessage(error.message);\n },\n );\n }\n }}\n ref={formRef}\n >\n <PanelHeader>\n <h1>{isLoginMode ? i18n._('auth.login') : i18n._('auth.create.an.account')}</h1>\n </PanelHeader>\n <PanelContent>\n <p className=\"copy--lead\">\n {isLoginMode ? i18n._('auth.login.intro') : i18n._('auth.create.an.account.intro')}\n </p>\n {errorMessage != null ? (\n <FormRow>\n <FormError isLoading={isSubmitting}>\n {typeof errorMessage === 'string' ? errorMessage : i18n._(errorMessage)}\n </FormError>\n </FormRow>\n ) : null}\n <FormRow>\n <Textbox placeholder={i18n._('auth.username')} id=\"username\" autoComplete=\"username\" />\n </FormRow>\n <FormRow>\n <Textbox\n placeholder={i18n._('auth.password')}\n id=\"password\"\n type=\"password\"\n autoComplete={isLoginMode ? 'current-password' : 'new-password'}\n />\n </FormRow>\n </PanelContent>\n {isLoginMode ? null : (\n <PanelContent hasBorder>\n <ClientConnectionSettingsForm\n onSettingsChange={(settings) => {\n clientConnectionSettingsRef.current = settings;\n }}\n />\n </PanelContent>\n )}\n <PanelFooter hasBorder>\n <FormRow justify=\"end\">\n <Button\n priority=\"tertiary\"\n onClick={() => {\n if (formRef.current != null) {\n formRef.current.resetForm();\n }\n }}\n >\n {i18n._('auth.input.clear')}\n </Button>\n <Button isLoading={isSubmitting} type=\"submit\">\n {isLoginMode ? i18n._('auth.log.in') : i18n._('auth.create.account')}\n </Button>\n </FormRow>\n </PanelFooter>\n </Form>\n </Panel>\n </div>\n );\n};\n\nexport default AuthForm;\n"],"mappings":"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"}
1
+ {"version":3,"file":"AuthForm-DpkioMio.js","names":[],"sources":["../../../client/src/javascript/components/auth/AuthForm.tsx"],"sourcesContent":["import {FC, useRef, useState} from 'react';\nimport {useLingui} from '@lingui/react';\nimport {useNavigate} from 'react-router';\n\nimport {\n Button,\n Form,\n FormHandle,\n FormError,\n FormRow,\n Panel,\n PanelContent,\n PanelHeader,\n PanelFooter,\n Textbox,\n} from '@client/ui';\nimport AuthActions from '@client/actions/AuthActions';\n\nimport {AccessLevel} from '@shared/schema/constants/Auth';\n\nimport type {Credentials} from '@shared/schema/Auth';\nimport type {ClientConnectionSettings} from '@shared/schema/ClientConnectionSettings';\n\nimport ClientConnectionSettingsForm from '../general/connection-settings/ClientConnectionSettingsForm';\n\ntype LoginFormData = Pick<Credentials, 'username' | 'password'>;\ntype RegisterFormData = Pick<Credentials, 'username' | 'password'>;\n\ninterface AuthFormProps {\n mode: 'login' | 'register';\n}\n\nconst AuthForm: FC<AuthFormProps> = ({mode}: AuthFormProps) => {\n const {i18n} = useLingui();\n const formRef = useRef<FormHandle>(null);\n const clientConnectionSettingsRef = useRef<ClientConnectionSettings | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | {id: string} | undefined>(undefined);\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n\n const navigate = useNavigate();\n\n const isLoginMode = mode === 'login';\n\n return (\n <div className=\"application__entry-barrier\">\n <Panel spacing=\"large\">\n <Form\n onSubmit={(submission) => {\n submission.event.preventDefault();\n\n setIsSubmitting(true);\n\n const formData = submission.formData as Partial<LoginFormData> | Partial<RegisterFormData>;\n\n if (formData.username == null || formData.username === '') {\n setIsSubmitting(false);\n setErrorMessage({id: 'auth.error.username.empty'});\n return;\n }\n\n if (formData.password == null || formData.password === '') {\n setIsSubmitting(false);\n setErrorMessage({id: 'auth.error.password.empty'});\n return;\n }\n\n if (isLoginMode) {\n const credentials = formData as LoginFormData;\n\n AuthActions.authenticate({\n username: credentials.username,\n password: credentials.password,\n })\n .then(() => {\n setIsSubmitting(false);\n navigate('/overview', {replace: true});\n })\n .catch((error: Error) => {\n setIsSubmitting(false);\n setErrorMessage(error.message);\n navigate('/login', {replace: true});\n });\n } else {\n const config = formData as RegisterFormData;\n\n if (clientConnectionSettingsRef.current == null) {\n setIsSubmitting(false);\n setErrorMessage({id: 'connection.settings.error.empty'});\n return;\n }\n\n const connectionSettings = clientConnectionSettingsRef.current;\n if (connectionSettings == null) {\n setIsSubmitting(false);\n setErrorMessage({id: 'connection.settings.error.empty'});\n return;\n }\n\n AuthActions.register({\n username: config.username,\n password: config.password,\n client: connectionSettings,\n level: AccessLevel.ADMINISTRATOR,\n }).then(\n () => {\n setIsSubmitting(false);\n navigate('/overview', {replace: true});\n },\n (error: Error) => {\n setIsSubmitting(false);\n setErrorMessage(error.message);\n },\n );\n }\n }}\n ref={formRef}\n >\n <PanelHeader>\n <h1>{isLoginMode ? i18n._('auth.login') : i18n._('auth.create.an.account')}</h1>\n </PanelHeader>\n <PanelContent>\n <p className=\"copy--lead\">\n {isLoginMode ? i18n._('auth.login.intro') : i18n._('auth.create.an.account.intro')}\n </p>\n {errorMessage != null ? (\n <FormRow>\n <FormError isLoading={isSubmitting}>\n {typeof errorMessage === 'string' ? errorMessage : i18n._(errorMessage)}\n </FormError>\n </FormRow>\n ) : null}\n <FormRow>\n <Textbox placeholder={i18n._('auth.username')} id=\"username\" autoComplete=\"username\" />\n </FormRow>\n <FormRow>\n <Textbox\n placeholder={i18n._('auth.password')}\n id=\"password\"\n type=\"password\"\n autoComplete={isLoginMode ? 'current-password' : 'new-password'}\n />\n </FormRow>\n </PanelContent>\n {isLoginMode ? null : (\n <PanelContent hasBorder>\n <ClientConnectionSettingsForm\n onSettingsChange={(settings) => {\n clientConnectionSettingsRef.current = settings;\n }}\n />\n </PanelContent>\n )}\n <PanelFooter hasBorder>\n <FormRow justify=\"end\">\n <Button\n priority=\"tertiary\"\n onClick={() => {\n if (formRef.current != null) {\n formRef.current.resetForm();\n }\n }}\n >\n {i18n._('auth.input.clear')}\n </Button>\n <Button isLoading={isSubmitting} type=\"submit\">\n {isLoginMode ? i18n._('auth.log.in') : i18n._('auth.create.account')}\n </Button>\n </FormRow>\n </PanelFooter>\n </Form>\n </Panel>\n </div>\n );\n};\n\nexport default AuthForm;\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{zt as e}from"./dist-DTOngMXG.js";import{n as t,t as n}from"./ApplicationView-Cuf1ZIDm.js";import{t as r}from"./AuthForm-DpkioMio.js";var i=e(),a=()=>(0,i.jsx)(n,{modifier:t.AuthForm,children:(0,i.jsx)(r,{mode:`login`})});export{a as default};
2
+ //# sourceMappingURL=Login-BaGUzZu-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Login-yFJNG5g3.js","names":[],"sources":["../../../client/src/javascript/routes/Login.tsx"],"sourcesContent":["import {FC} from 'react';\n\nimport ApplicationView, {ApplicationViewModifier} from '@client/components/layout/ApplicationView';\nimport AuthForm from '@client/components/auth/AuthForm';\n\nconst LoginView: FC = () => (\n <ApplicationView modifier={ApplicationViewModifier.AuthForm}>\n <AuthForm mode=\"login\" />\n </ApplicationView>\n);\n\nexport default LoginView;\n"],"mappings":"uJAKM,OACJ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAiB,SAAU,EAAwB,mBACjD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAU,KAAK,OAAS,CAAA,CACT,CAAA"}
1
+ {"version":3,"file":"Login-BaGUzZu-.js","names":[],"sources":["../../../client/src/javascript/routes/Login.tsx"],"sourcesContent":["import {FC} from 'react';\n\nimport ApplicationView, {ApplicationViewModifier} from '@client/components/layout/ApplicationView';\nimport AuthForm from '@client/components/auth/AuthForm';\n\nconst LoginView: FC = () => (\n <ApplicationView modifier={ApplicationViewModifier.AuthForm}>\n <AuthForm mode=\"login\" />\n </ApplicationView>\n);\n\nexport default LoginView;\n"],"mappings":"sJAKM,OACJ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAiB,SAAU,EAAwB,SACjD,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAU,KAAK,OAAS,CAAA,CACT,CAAA"}