- setSd(e.target.value)} autoComplete="off" style={{width:150,flexShrink:0}}/>
+ setSd(e.target.value)} autoComplete="new-password" style={{width:150,flexShrink:0}}/>
{!allDay&&(
<>
@@ -697,7 +698,7 @@ function EventForm({ event, userGroups, eventTypes, selectedDate, onSave, onCanc
setEt(newEt); userSetEndTime.current=true;
if(sd===ed && newEt<=st){ const d=new Date(buildISO(sd,st)); d.setDate(d.getDate()+1); const p=n=>String(n).padStart(2,'0'); setEd(`${d.getFullYear()}-${p(d.getMonth()+1)}-${p(d.getDate())}`); }
}} style={{width:120,flexShrink:0}}/>
- {setEd(e.target.value);userSetEndTime.current=true;}} autoComplete="off" style={{width:150,flexShrink:0}}/>
+ {setEd(e.target.value);userSetEndTime.current=true;}} autoComplete="new-password" style={{width:150,flexShrink:0}}/>
>
)}
@@ -755,12 +756,12 @@ function EventForm({ event, userGroups, eventTypes, selectedDate, onSave, onCanc
{/* Location */}
- setLoc(e.target.value)} autoComplete="off" autoCorrect="off" autoCapitalize="off" />
+ setLoc(e.target.value)} autoComplete="new-password" autoCorrect="off" autoCapitalize="off" />
{/* Description */}
-
@@ -993,7 +994,7 @@ function EventTypesPanel({ eventTypes, userGroups, onUpdated, isMobile=false })
{sheetMode==='create'?'New Event Type':'Edit Event Type'}
✕
-
setSheetName(e.target.value)} autoComplete="off" autoCorrect="off" onKeyDown={e=>e.key==='Enter'&&saveSheet()} placeholder="Type name…"
+
setSheetName(e.target.value)} autoComplete="new-password" autoCorrect="off" onKeyDown={e=>e.key==='Enter'&&saveSheet()} placeholder="Type name…"
style={{width:'100%',padding:'12px 14px',border:'1px solid var(--border)',borderRadius:'var(--radius)',fontSize:16,marginBottom:12,boxSizing:'border-box',background:'var(--background)',color:'var(--text-primary)'}}/>
Colour
@@ -1715,7 +1716,7 @@ export default function SchedulePage({ isToolManager, isMobile, onProfile, onHel
className="input"
placeholder={`Keyword… (space = OR, "phrase")`}
value={filterKeyword}
- onChange={e => { setFilterKeyword(e.target.value); if (!e.target.value) setFilterFromDate(null); }} autoComplete="off" autoCorrect="off" autoCapitalize="off" spellCheck={false}
+ onChange={e => { setFilterKeyword(e.target.value); if (!e.target.value) setFilterFromDate(null); }} autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck={false}
style={{ marginBottom:8, fontSize:13 }} />
(a.display_name||a.name).localeCompare(b.display_name||b.name));
return (
-
setSearch(e.target.value)} autoComplete="off" style={{ marginBottom:8 }} onFocus={onIF} onBlur={onIB} />
+
setSearch(e.target.value)} autoComplete="new-password" style={{ marginBottom:8 }} onFocus={onIF} onBlur={onIB} />
{filtered.map(u => (
@@ -201,7 +201,7 @@ function AllGroupsTab({ allUsers, onRefresh, isMobile = false, onIF, onIB }) {
Group Name
-
setEditName(e.target.value)} autoComplete="off" placeholder="e.g. Coaches" style={{ marginTop:6 }} onFocus={onIF} onBlur={onIB} />
+
setEditName(e.target.value)} autoComplete="new-password" placeholder="e.g. Coaches" style={{ marginTop:6 }} onFocus={onIF} onBlur={onIB} />
{isCreating && !noDm &&
A matching Direct Message group will be created automatically.
}
DM Name
- setDmName(e.target.value)} autoComplete="off" placeholder="e.g. Coaches + Players" style={{ marginTop:6 }} onFocus={onIF} onBlur={onIB} />
+ setDmName(e.target.value)} autoComplete="new-password" placeholder="e.g. Coaches + Players" style={{ marginTop:6 }} onFocus={onIF} onBlur={onIB} />
Member Groups
@@ -602,7 +602,7 @@ function U2URestrictionsTab({ allUserGroups, isMobile = false, onIF, onIB }) {
Allowed Groups ({otherGroups.length - blockedIds.size} of {otherGroups.length} allowed)
setSearch(e.target.value)} autoComplete="off" style={{ marginBottom:8 }}
+ onChange={e => setSearch(e.target.value)} autoComplete="new-password" style={{ marginBottom:8 }}
onFocus={onIF} onBlur={onIB} />
@@ -741,9 +741,9 @@ export default function GroupManagerPage({ isMobile = false, onProfile, onHelp,
)}
- {/* form wrapper suppresses Chrome Android's autofill chip bar; autoComplete="off"
+ {/* form wrapper suppresses Chrome Android's autofill chip bar; autoComplete="new-password"
on individual inputs is ignored by Chrome but respected on the form element */}
-
e.preventDefault()}>
+ e.preventDefault()}>
{/* Content */}
{tab==='all' &&
}
diff --git a/frontend/src/pages/UserManagerPage.jsx b/frontend/src/pages/UserManagerPage.jsx
index 2a1ee27..8b039b7 100644
--- a/frontend/src/pages/UserManagerPage.jsx
+++ b/frontend/src/pages/UserManagerPage.jsx
@@ -241,7 +241,7 @@ function UserForm({ user, userPass, allUserGroups, onDone, onCancel, isMobile, o
value={email} onChange={e => setEmail(e.target.value)}
disabled={isEdit}
style={{ width:'100%', ...(isEdit ? { opacity:0.6, cursor:'not-allowed' } : {}) }}
- autoComplete="off" autoCorrect="off" autoCapitalize="off" spellCheck="false" onFocus={onIF} onBlur={onIB} />
+ autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck="false" onFocus={onIF} onBlur={onIB} />
{/* Row 2: First Name + Last Name */}
@@ -250,13 +250,13 @@ function UserForm({ user, userPass, allUserGroups, onDone, onCancel, isMobile, o
{lbl('First Name', true)}
setFirstName(e.target.value)}
- autoComplete="off" autoCapitalize="words" onFocus={onIF} onBlur={onIB} />
+ autoComplete="new-password" autoCapitalize="words" onFocus={onIF} onBlur={onIB} />
{lbl('Last Name', true)}
setLastName(e.target.value)}
- autoComplete="off" autoCapitalize="words" onFocus={onIF} onBlur={onIB} />
+ autoComplete="new-password" autoCapitalize="words" onFocus={onIF} onBlur={onIB} />
@@ -266,7 +266,7 @@ function UserForm({ user, userPass, allUserGroups, onDone, onCancel, isMobile, o
{lbl('Phone', false, '(optional)')}
setPhone(e.target.value)}
- autoComplete="off" onFocus={onIF} onBlur={onIB} />
+ autoComplete="new-password" onFocus={onIF} onBlur={onIB} />
{lbl('App Role', true)}
@@ -621,9 +621,9 @@ export default function UserManagerPage({ isMobile = false, onProfile, onHelp, o
)}
{/* Content */}
- {/* form wrapper suppresses Chrome Android's autofill chip bar; autoComplete="off"
+ {/* form wrapper suppresses Chrome Android's autofill chip bar; autoComplete="new-password"
on individual inputs is ignored by Chrome but respected on the form element */}
-
e.preventDefault()}>
+ e.preventDefault()}>
{/* LIST VIEW */}
@@ -632,7 +632,7 @@ export default function UserManagerPage({ isMobile = false, onProfile, onHelp, o
setSearch(e.target.value)}
onFocus={onIF} onBlur={onIB}
- autoComplete="off" autoCorrect="off" spellCheck={false}
+ autoComplete="new-password" autoCorrect="off" spellCheck={false}
style={{ width:'100%', maxWidth: isMobile ? '100%' : 400 }} />