Dependency bumps

This commit is contained in:
binwiederhier
2026-06-24 04:17:59 -04:00
parent e6a201bc11
commit 4b070546b5
16 changed files with 1196 additions and 1057 deletions
+1
View File
@@ -1971,6 +1971,7 @@ since I do have to reset emails on a regular basis.
* Grant users full access to their own sync topic (`st_...`) so cross-device subscription sync works under `auth-default-access: deny-all` ([#733](https://github.com/binwiederhier/ntfy/issues/733), [#1795](https://github.com/binwiederhier/ntfy/pull/1795), thanks to [@lmorchard](https://github.com/lmorchard) for the contribution) * Grant users full access to their own sync topic (`st_...`) so cross-device subscription sync works under `auth-default-access: deny-all` ([#733](https://github.com/binwiederhier/ntfy/issues/733), [#1795](https://github.com/binwiederhier/ntfy/pull/1795), thanks to [@lmorchard](https://github.com/lmorchard) for the contribution)
* Support HTTP (non-TLS) S3-compatible endpoints by preserving the endpoint scheme, e.g. for a local MinIO instance ([#1794](https://github.com/binwiederhier/ntfy/pull/1794), [#1734](https://github.com/binwiederhier/ntfy/issues/1734), thanks to [@sskender](https://github.com/sskender) for the contribution, and [@Kernald](https://github.com/Kernald) for reporting) * Support HTTP (non-TLS) S3-compatible endpoints by preserving the endpoint scheme, e.g. for a local MinIO instance ([#1794](https://github.com/binwiederhier/ntfy/pull/1794), [#1734](https://github.com/binwiederhier/ntfy/issues/1734), thanks to [@sskender](https://github.com/sskender) for the contribution, and [@Kernald](https://github.com/Kernald) for reporting)
* Stop silently stripping spaces from passwords while typing in the web app's login, signup, and password-reset forms ([#1246](https://github.com/binwiederhier/ntfy/issues/1246), thanks to [@aldem](https://github.com/aldem) for reporting) * Stop silently stripping spaces from passwords while typing in the web app's login, signup, and password-reset forms ([#1246](https://github.com/binwiederhier/ntfy/issues/1246), thanks to [@aldem](https://github.com/aldem) for reporting)
* Update web app dependencies, including major-version upgrades to Vite (6 -> 8, now Rolldown-based), Material UI (5 -> 9), and Dexie (3 -> 4) ([#1800](https://github.com/binwiederhier/ntfy/pull/1800), [#1764](https://github.com/binwiederhier/ntfy/pull/1764), [#1767](https://github.com/binwiederhier/ntfy/pull/1767), [#1762](https://github.com/binwiederhier/ntfy/pull/1762), [#1766](https://github.com/binwiederhier/ntfy/pull/1766), [#1765](https://github.com/binwiederhier/ntfy/pull/1765), thanks Dependabot)
### ntfy Android v1.25.x (UNRELEASED) ### ntfy Android v1.25.x (UNRELEASED)
+1003 -913
View File
File diff suppressed because it is too large Load Diff
+7 -7
View File
@@ -14,24 +14,24 @@
"@emotion/cache": "^11.11.0", "@emotion/cache": "^11.11.0",
"@emotion/react": "^11.11.0", "@emotion/react": "^11.11.0",
"@emotion/styled": "^11.11.0", "@emotion/styled": "^11.11.0",
"@mui/icons-material": "^5.4.2", "@mui/icons-material": "^9.1.1",
"@mui/material": "latest", "@mui/material": "latest",
"dexie": "^3.2.1", "dexie": "^4.4.4",
"dexie-react-hooks": "^1.1.1", "dexie-react-hooks": "^4.4.0",
"i18next": "^21.6.14", "i18next": "^21.6.14",
"i18next-browser-languagedetector": "^6.1.4", "i18next-browser-languagedetector": "^6.1.4",
"i18next-http-backend": "^3.0.5", "i18next-http-backend": "^4.0.0",
"react": "latest", "react": "latest",
"react-dom": "latest", "react-dom": "latest",
"react-i18next": "^11.16.2", "react-i18next": "^11.16.2",
"react-infinite-scroll-component": "^6.1.0", "react-infinite-scroll-component": "^7.2.1",
"react-remark": "^2.1.0", "react-remark": "^2.1.0",
"react-router-dom": "^6.30.4", "react-router-dom": "^6.30.4",
"stylis": "^4.3.0", "stylis": "^4.3.0",
"stylis-plugin-rtl": "^2.1.1" "stylis-plugin-rtl": "^2.1.1"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-react": "^4.0.0", "@vitejs/plugin-react": "^6.0.3",
"eslint": "^8.41.0", "eslint": "^8.41.0",
"eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb": "^19.0.4",
"eslint-config-prettier": "^8.8.0", "eslint-config-prettier": "^8.8.0",
@@ -40,7 +40,7 @@
"eslint-plugin-react": "^7.32.2", "eslint-plugin-react": "^7.32.2",
"eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-hooks": "^4.6.0",
"prettier": "^2.8.8", "prettier": "^2.8.8",
"vite": "^6.4.2", "vite": "^8.0.16",
"vite-plugin-pwa": "^1.0.0" "vite-plugin-pwa": "^1.0.0"
}, },
"browserslist": { "browserslist": {
+3 -3
View File
@@ -41,7 +41,7 @@ import {
} from "@mui/material"; } from "@mui/material";
import EditIcon from "@mui/icons-material/Edit"; import EditIcon from "@mui/icons-material/Edit";
import { Trans, useTranslation } from "react-i18next"; import { Trans, useTranslation } from "react-i18next";
import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutlineOutlined";
import StarIcon from "@mui/icons-material/Star"; import StarIcon from "@mui/icons-material/Star";
import StarBorderIcon from "@mui/icons-material/StarBorder"; import StarBorderIcon from "@mui/icons-material/StarBorder";
import RefreshIcon from "@mui/icons-material/Refresh"; import RefreshIcon from "@mui/icons-material/Refresh";
@@ -787,7 +787,7 @@ const AddPhoneNumberDialog = (props) => {
type="tel" type="tel"
value={phoneNumber} value={phoneNumber}
onChange={(ev) => setPhoneNumber(ev.target.value)} onChange={(ev) => setPhoneNumber(ev.target.value)}
inputProps={{ inputMode: "tel", pattern: "+[0-9]*" }} slotProps={{ htmlInput: { inputMode: "tel", pattern: "+[0-9]*" } }}
variant="standard" variant="standard"
sx={{ flexGrow: 1 }} sx={{ flexGrow: 1 }}
/> />
@@ -818,7 +818,7 @@ const AddPhoneNumberDialog = (props) => {
value={code} value={code}
onChange={(ev) => setCode(ev.target.value)} onChange={(ev) => setCode(ev.target.value)}
fullWidth fullWidth
inputProps={{ inputMode: "numeric", pattern: "[0-9]*" }} slotProps={{ htmlInput: { inputMode: "numeric", pattern: "[0-9]*" } }}
variant="standard" variant="standard"
/> />
)} )}
+2 -2
View File
@@ -1,8 +1,8 @@
import * as React from "react"; import * as React from "react";
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import { Typography, Button, Box, CircularProgress } from "@mui/material"; import { Typography, Button, Box, CircularProgress } from "@mui/material";
import CheckCircleOutlineIcon from "@mui/icons-material/CheckCircleOutline"; import CheckCircleOutlineIcon from "@mui/icons-material/CheckCircleOutlineOutlined";
import ErrorOutlineIcon from "@mui/icons-material/ErrorOutline"; import ErrorOutlineIcon from "@mui/icons-material/ErrorOutlineOutlined";
import { useParams, useNavigate } from "react-router-dom"; import { useParams, useNavigate } from "react-router-dom";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import accountApi from "../app/AccountApi"; import accountApi from "../app/AccountApi";
+14 -12
View File
@@ -71,18 +71,20 @@ const EmojiPicker = (props) => {
variant="standard" variant="standard"
fullWidth fullWidth
sx={{ marginTop: 0, marginBottom: "12px", paddingRight: 2 }} sx={{ marginTop: 0, marginBottom: "12px", paddingRight: 2 }}
inputProps={{ slotProps={{
role: "searchbox", htmlInput: {
"aria-label": t("emoji_picker_search_placeholder"), role: "searchbox",
}} "aria-label": t("emoji_picker_search_placeholder"),
InputProps={{ },
endAdornment: ( input: {
<InputAdornment position="end" sx={{ display: search ? "" : "none" }}> endAdornment: (
<IconButton size="small" onClick={handleSearchClear} edge="end" aria-label={t("emoji_picker_search_clear")}> <InputAdornment position="end" sx={{ display: search ? "" : "none" }}>
<Close /> <IconButton size="small" onClick={handleSearchClear} edge="end" aria-label={t("emoji_picker_search_clear")}>
</IconButton> <Close />
</InputAdornment> </IconButton>
), </InputAdornment>
),
},
}} }}
/> />
<Box <Box
+15 -13
View File
@@ -68,19 +68,21 @@ const Login = () => {
value={password} value={password}
onChange={(ev) => setPassword(ev.target.value)} onChange={(ev) => setPassword(ev.target.value)}
autoComplete="current-password" autoComplete="current-password"
InputProps={{ slotProps={{
endAdornment: ( input: {
<InputAdornment position="end"> endAdornment: (
<IconButton <InputAdornment position="end">
aria-label={t("signup_form_toggle_password_visibility")} <IconButton
onClick={() => setShowPassword(!showPassword)} aria-label={t("signup_form_toggle_password_visibility")}
onMouseDown={(ev) => ev.preventDefault()} onClick={() => setShowPassword(!showPassword)}
edge="end" onMouseDown={(ev) => ev.preventDefault()}
> edge="end"
{showPassword ? <VisibilityOff /> : <Visibility />} >
</IconButton> {showPassword ? <VisibilityOff /> : <Visibility />}
</InputAdornment> </IconButton>
), </InputAdornment>
),
},
}} }}
/> />
<Button type="submit" fullWidth variant="contained" disabled={username === "" || password === ""} sx={{ mt: 2, mb: 2 }}> <Button type="submit" fullWidth variant="contained" disabled={username === "" || password === ""} sx={{ mt: 2, mb: 2 }}>
+1 -1
View File
@@ -22,7 +22,7 @@ import {
} from "@mui/material"; } from "@mui/material";
import * as React from "react"; import * as React from "react";
import { useContext, useState } from "react"; import { useContext, useState } from "react";
import ChatBubbleOutlineIcon from "@mui/icons-material/ChatBubbleOutline"; import ChatBubbleOutlineIcon from "@mui/icons-material/ChatBubbleOutlineOutlined";
import Person from "@mui/icons-material/Person"; import Person from "@mui/icons-material/Person";
import SettingsIcon from "@mui/icons-material/Settings"; import SettingsIcon from "@mui/icons-material/Settings";
import AddIcon from "@mui/icons-material/Add"; import AddIcon from "@mui/icons-material/Add";
+1 -1
View File
@@ -462,7 +462,7 @@ const Image = (props) => {
cursor: "pointer", cursor: "pointer",
}} }}
/> />
<Modal open={open} onClose={() => setOpen(false)} BackdropComponent={LightboxBackdrop}> <Modal open={open} onClose={() => setOpen(false)} slots={{ backdrop: LightboxBackdrop }}>
<Fade in={open}> <Fade in={open}>
<Box <Box
component="img" component="img"
+1 -1
View File
@@ -2,7 +2,7 @@ import * as React from "react";
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import { Typography, TextField, Button, Box } from "@mui/material"; import { Typography, TextField, Button, Box } from "@mui/material";
import WarningAmberIcon from "@mui/icons-material/WarningAmber"; import WarningAmberIcon from "@mui/icons-material/WarningAmber";
import CheckCircleOutlineIcon from "@mui/icons-material/CheckCircleOutline"; import CheckCircleOutlineIcon from "@mui/icons-material/CheckCircleOutlineOutlined";
import { useParams, useNavigate } from "react-router-dom"; import { useParams, useNavigate } from "react-router-dom";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import accountApi from "../app/AccountApi"; import accountApi from "../app/AccountApi";
+1 -1
View File
@@ -1,7 +1,7 @@
import * as React from "react"; import * as React from "react";
import { useState } from "react"; import { useState } from "react";
import { TextField, Button, Box, Typography } from "@mui/material"; import { TextField, Button, Box, Typography } from "@mui/material";
import CheckCircleOutlineIcon from "@mui/icons-material/CheckCircleOutline"; import CheckCircleOutlineIcon from "@mui/icons-material/CheckCircleOutlineOutlined";
import { NavLink } from "react-router-dom"; import { NavLink } from "react-router-dom";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import accountApi from "../app/AccountApi"; import accountApi from "../app/AccountApi";
+26 -24
View File
@@ -10,30 +10,32 @@ const PopupMenu = (props) => {
open={props.open} open={props.open}
onClose={props.onClose} onClose={props.onClose}
onClick={props.onClose} onClick={props.onClose}
TransitionComponent={Fade} slots={{ transition: Fade }}
PaperProps={{ slotProps={{
elevation: 0, paper: {
sx: { elevation: 0,
overflow: "visible", sx: {
filter: "drop-shadow(0px 2px 8px rgba(0,0,0,0.32))", overflow: "visible",
mt: 1.5, filter: "drop-shadow(0px 2px 8px rgba(0,0,0,0.32))",
"& .MuiAvatar-root": { mt: 1.5,
width: 32, "& .MuiAvatar-root": {
height: 32, width: 32,
ml: -0.5, height: 32,
mr: 1, ml: -0.5,
}, mr: 1,
"&:before": { },
content: '""', "&:before": {
display: "block", content: '""',
position: "absolute", display: "block",
top: 0, position: "absolute",
width: 10, top: 0,
height: 10, width: 10,
bgcolor: "background.paper", height: 10,
transform: "translateY(-50%) rotate(45deg)", bgcolor: "background.paper",
zIndex: 0, transform: "translateY(-50%) rotate(45deg)",
...arrow, zIndex: 0,
...arrow,
},
}, },
}, },
}} }}
+56 -30
View File
@@ -320,8 +320,10 @@ const PublishDialog = (props) => {
type="url" type="url"
variant="standard" variant="standard"
sx={{ flexGrow: 1, marginRight: 1 }} sx={{ flexGrow: 1, marginRight: 1 }}
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_base_url_label"), htmlInput: {
"aria-label": t("publish_dialog_base_url_label"),
},
}} }}
/> />
<TextField <TextField
@@ -335,8 +337,10 @@ const PublishDialog = (props) => {
variant="standard" variant="standard"
autoFocus={!messageFocused} autoFocus={!messageFocused}
sx={{ flexGrow: 1 }} sx={{ flexGrow: 1 }}
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_topic_label"), htmlInput: {
"aria-label": t("publish_dialog_topic_label"),
},
}} }}
/> />
</ClosableRow> </ClosableRow>
@@ -351,8 +355,10 @@ const PublishDialog = (props) => {
type="text" type="text"
fullWidth fullWidth
variant="standard" variant="standard"
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_title_label"), htmlInput: {
"aria-label": t("publish_dialog_title_label"),
},
}} }}
/> />
<TextField <TextField
@@ -368,8 +374,10 @@ const PublishDialog = (props) => {
autoFocus={messageFocused} autoFocus={messageFocused}
fullWidth fullWidth
multiline multiline
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_message_label"), htmlInput: {
"aria-label": t("publish_dialog_message_label"),
},
}} }}
onPaste={handlePaste} onPaste={handlePaste}
/> />
@@ -381,8 +389,10 @@ const PublishDialog = (props) => {
size="small" size="small"
checked={markdownEnabled} checked={markdownEnabled}
onChange={(ev) => setMarkdownEnabled(ev.target.checked)} onChange={(ev) => setMarkdownEnabled(ev.target.checked)}
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_checkbox_markdown"), input: {
"aria-label": t("publish_dialog_checkbox_markdown"),
},
}} }}
/> />
} }
@@ -402,8 +412,10 @@ const PublishDialog = (props) => {
type="text" type="text"
variant="standard" variant="standard"
sx={{ flexGrow: 1, marginRight: 1 }} sx={{ flexGrow: 1, marginRight: 1 }}
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_tags_label"), htmlInput: {
"aria-label": t("publish_dialog_tags_label"),
},
}} }}
/> />
<FormControl variant="standard" margin="dense" sx={{ minWidth: 170, maxWidth: 300, flexGrow: 1 }}> <FormControl variant="standard" margin="dense" sx={{ minWidth: 170, maxWidth: 300, flexGrow: 1 }}>
@@ -460,8 +472,10 @@ const PublishDialog = (props) => {
type="url" type="url"
fullWidth fullWidth
variant="standard" variant="standard"
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_click_label"), htmlInput: {
"aria-label": t("publish_dialog_click_label"),
},
}} }}
/> />
</ClosableRow> </ClosableRow>
@@ -485,8 +499,10 @@ const PublishDialog = (props) => {
type="email" type="email"
variant="standard" variant="standard"
fullWidth fullWidth
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_email_label"), htmlInput: {
"aria-label": t("publish_dialog_email_label"),
},
}} }}
/> />
</ClosableRow> </ClosableRow>
@@ -556,8 +572,10 @@ const PublishDialog = (props) => {
type="url" type="url"
variant="standard" variant="standard"
sx={{ flexGrow: 5, marginRight: 1 }} sx={{ flexGrow: 5, marginRight: 1 }}
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_attach_label"), htmlInput: {
"aria-label": t("publish_dialog_attach_label"),
},
}} }}
/> />
<TextField <TextField
@@ -573,8 +591,10 @@ const PublishDialog = (props) => {
type="text" type="text"
variant="standard" variant="standard"
sx={{ flexGrow: 1 }} sx={{ flexGrow: 1 }}
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_filename_label"), htmlInput: {
"aria-label": t("publish_dialog_filename_label"),
},
}} }}
/> />
</ClosableRow> </ClosableRow>
@@ -617,8 +637,10 @@ const PublishDialog = (props) => {
type="text" type="text"
variant="standard" variant="standard"
fullWidth fullWidth
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_delay_label"), htmlInput: {
"aria-label": t("publish_dialog_delay_label"),
},
}} }}
/> />
</ClosableRow> </ClosableRow>
@@ -735,8 +757,10 @@ const PublishDialog = (props) => {
size="small" size="small"
checked={publishAnother} checked={publishAnother}
onChange={(ev) => setPublishAnother(ev.target.checked)} onChange={(ev) => setPublishAnother(ev.target.checked)}
inputProps={{ slotProps={{
"aria-label": t("publish_dialog_checkbox_publish_another"), input: {
"aria-label": t("publish_dialog_checkbox_publish_another"),
},
}} }}
/> />
} }
@@ -867,12 +891,14 @@ const ExpandingTextField = (props) => {
type="text" type="text"
variant="standard" variant="standard"
sx={{ width: `${textWidth}px`, borderBottom: "none" }} sx={{ width: `${textWidth}px`, borderBottom: "none" }}
InputProps={{ slotProps={{
style: { fontSize: theme.typography[props.variant].fontSize }, input: {
}} style: { fontSize: theme.typography[props.variant].fontSize },
inputProps={{ },
style: { paddingBottom: 0, paddingTop: 0 }, htmlInput: {
"aria-label": props.placeholder, style: { paddingBottom: 0, paddingTop: 0 },
"aria-label": props.placeholder,
},
}} }}
disabled={props.disabled} disabled={props.disabled}
/> />
+30 -26
View File
@@ -88,19 +88,21 @@ const Signup = () => {
autoComplete="new-password" autoComplete="new-password"
value={password} value={password}
onChange={(ev) => setPassword(ev.target.value)} onChange={(ev) => setPassword(ev.target.value)}
InputProps={{ slotProps={{
endAdornment: ( input: {
<InputAdornment position="end"> endAdornment: (
<IconButton <InputAdornment position="end">
aria-label={t("signup_form_toggle_password_visibility")} <IconButton
onClick={() => setShowPassword(!showPassword)} aria-label={t("signup_form_toggle_password_visibility")}
onMouseDown={(ev) => ev.preventDefault()} onClick={() => setShowPassword(!showPassword)}
edge="end" onMouseDown={(ev) => ev.preventDefault()}
> edge="end"
{showPassword ? <VisibilityOff /> : <Visibility />} >
</IconButton> {showPassword ? <VisibilityOff /> : <Visibility />}
</InputAdornment> </IconButton>
), </InputAdornment>
),
},
}} }}
/> />
<TextField <TextField
@@ -114,19 +116,21 @@ const Signup = () => {
autoComplete="new-password" autoComplete="new-password"
value={confirm} value={confirm}
onChange={(ev) => setConfirm(ev.target.value)} onChange={(ev) => setConfirm(ev.target.value)}
InputProps={{ slotProps={{
endAdornment: ( input: {
<InputAdornment position="end"> endAdornment: (
<IconButton <InputAdornment position="end">
aria-label={t("signup_form_toggle_password_visibility")} <IconButton
onClick={() => setShowConfirm(!showConfirm)} aria-label={t("signup_form_toggle_password_visibility")}
onMouseDown={(ev) => ev.preventDefault()} onClick={() => setShowConfirm(!showConfirm)}
edge="end" onMouseDown={(ev) => ev.preventDefault()}
> edge="end"
{showConfirm ? <VisibilityOff /> : <Visibility />} >
</IconButton> {showConfirm ? <VisibilityOff /> : <Visibility />}
</InputAdornment> </IconButton>
), </InputAdornment>
),
},
}} }}
/> />
<Button <Button
+21 -11
View File
@@ -179,9 +179,11 @@ const SubscribePage = (props) => {
type="text" type="text"
fullWidth fullWidth
variant="standard" variant="standard"
inputProps={{ slotProps={{
maxLength: 64, htmlInput: {
"aria-label": t("subscribe_dialog_subscribe_topic_placeholder"), maxLength: 64,
"aria-label": t("subscribe_dialog_subscribe_topic_placeholder"),
},
}} }}
/> />
<Button <Button
@@ -202,8 +204,10 @@ const SubscribePage = (props) => {
disabled={!reserveTopicEnabled} disabled={!reserveTopicEnabled}
checked={reserveTopicVisible} checked={reserveTopicVisible}
onChange={(ev) => setReserveTopicVisible(ev.target.checked)} onChange={(ev) => setReserveTopicVisible(ev.target.checked)}
inputProps={{ slotProps={{
"aria-label": t("reserve_dialog_checkbox_label"), input: {
"aria-label": t("reserve_dialog_checkbox_label"),
},
}} }}
/> />
} }
@@ -224,8 +228,10 @@ const SubscribePage = (props) => {
<Switch <Switch
onChange={handleUseAnotherChanged} onChange={handleUseAnotherChanged}
checked={anotherServerVisible} checked={anotherServerVisible}
inputProps={{ slotProps={{
"aria-label": t("subscribe_dialog_subscribe_use_another_label"), input: {
"aria-label": t("subscribe_dialog_subscribe_use_another_label"),
},
}} }}
/> />
} }
@@ -303,8 +309,10 @@ const LoginPage = (props) => {
type="text" type="text"
fullWidth fullWidth
variant="standard" variant="standard"
inputProps={{ slotProps={{
"aria-label": t("subscribe_dialog_login_username_label"), htmlInput: {
"aria-label": t("subscribe_dialog_login_username_label"),
},
}} }}
/> />
<TextField <TextField
@@ -316,8 +324,10 @@ const LoginPage = (props) => {
onChange={(ev) => setPassword(ev.target.value)} onChange={(ev) => setPassword(ev.target.value)}
fullWidth fullWidth
variant="standard" variant="standard"
inputProps={{ slotProps={{
"aria-label": t("subscribe_dialog_login_password_label"), htmlInput: {
"aria-label": t("subscribe_dialog_login_password_label"),
},
}} }}
/> />
</DialogContent> </DialogContent>
+14 -12
View File
@@ -326,18 +326,20 @@ const DisplayNameDialog = (props) => {
type="text" type="text"
fullWidth fullWidth
variant="standard" variant="standard"
inputProps={{ slotProps={{
maxLength: 64, htmlInput: {
"aria-label": t("display_name_dialog_placeholder"), maxLength: 64,
}} "aria-label": t("display_name_dialog_placeholder"),
InputProps={{ },
endAdornment: ( input: {
<InputAdornment position="end"> endAdornment: (
<IconButton onClick={() => setDisplayName("")} edge="end"> <InputAdornment position="end">
<Clear /> <IconButton onClick={() => setDisplayName("")} edge="end">
</IconButton> <Clear />
</InputAdornment> </IconButton>
), </InputAdornment>
),
},
}} }}
/> />
</DialogContent> </DialogContent>