From 3ac72b7ac9377b1e07ebd9c0c8c55a719df93829 Mon Sep 17 00:00:00 2001 From: Ricky Stretch Date: Fri, 20 Mar 2026 23:06:39 -0400 Subject: [PATCH] build.sh bug fixes --- frontend/src/components/BrandingModal.jsx | 33 +++++++------------ frontend/src/components/ChatWindow.jsx | 6 ++-- frontend/src/components/ColourPickerSheet.jsx | 2 +- frontend/src/components/GroupInfoModal.jsx | 8 ++--- frontend/src/components/HelpModal.jsx | 6 ++-- frontend/src/components/HostPanel.jsx | 10 +++--- frontend/src/components/ImageLightbox.jsx | 3 +- frontend/src/components/Message.jsx | 9 ++--- frontend/src/components/MessageInput.jsx | 6 ++-- frontend/src/components/MobileEventForm.jsx | 10 +++--- .../src/components/MobileGroupManager.jsx | 19 ++++------- frontend/src/components/NewChatModal.jsx | 6 ++-- frontend/src/components/ProfileModal.jsx | 17 ++++------ .../src/components/ScheduleManagerModal.jsx | 10 +++--- frontend/src/components/SchedulePage.jsx | 26 ++++++--------- frontend/src/components/SettingsModal.jsx | 4 +-- frontend/src/components/SupportModal.jsx | 15 +++------ frontend/src/components/UserManagerModal.jsx | 10 ++---- frontend/src/pages/ChangePassword.jsx | 6 ++-- frontend/src/pages/Chat.jsx | 24 +++++--------- frontend/src/pages/GroupManagerPage.jsx | 10 +++--- frontend/src/pages/HostAdmin.jsx | 3 +- 22 files changed, 87 insertions(+), 156 deletions(-) diff --git a/frontend/src/components/BrandingModal.jsx b/frontend/src/components/BrandingModal.jsx index db139b1..0f5403f 100644 --- a/frontend/src/components/BrandingModal.jsx +++ b/frontend/src/components/BrandingModal.jsx @@ -42,8 +42,7 @@ function TitleColourRow({ bgColor, bgLabel, textColor, onChange }) { { onChange(hex); setMode('idle'); }} - onBack={() => setMode('idle')} - /> + onBack={() => setMode('idle')} /> )} @@ -130,8 +129,7 @@ function SvSquare({ hue, s, v, onChange }) { onMouseMove={e => { if (dragging.current) handle(e); }} onMouseUp={() => { dragging.current = false; }} onMouseLeave={() => { dragging.current = false; }} - onTouchStart={handle} onTouchMove={handle} - /> + onTouchStart={handle} onTouchMove={handle} /> {/* Cursor circle */}
{ if (dragging.current) handle(e); }} onMouseUp={() => { dragging.current = false; }} onMouseLeave={() => { dragging.current = false; }} - onTouchStart={handle} onTouchMove={handle} - /> + onTouchStart={handle} onTouchMove={handle} />
+ placeholder="#000000" autoComplete="new-password" > Chosen colour
@@ -287,8 +284,7 @@ function ColourPicker({ label, value, onChange, preview }) { boxShadow: hex === value ? '0 0 0 2px var(--surface), 0 0 0 4px var(--text-primary)' : 'none', transition: 'box-shadow 0.15s', }} - title={hex} - /> + title={hex} /> ))}

@@ -513,14 +506,12 @@ export default function BrandingModal({ onClose }) { bgColor="#f1f3f4" bgLabel="Light mode" textColor={colourTitle} - onChange={setColourTitle} - /> + onChange={setColourTitle} /> + onChange={setColourTitleDark} /> @@ -535,8 +526,7 @@ export default function BrandingModal({ onClose }) { display: 'flex', alignItems: 'center', justifyContent: 'center', color: 'white', fontWeight: 700, fontSize: 15, flexShrink: 0, }}>A - )} - /> + )} />

@@ -550,8 +540,7 @@ export default function BrandingModal({ onClose }) { display: 'flex', alignItems: 'center', justifyContent: 'center', color: 'white', fontWeight: 700, fontSize: 15, flexShrink: 0, }}>B
- )} - /> + )} />
diff --git a/frontend/src/components/ChatWindow.jsx b/frontend/src/components/ChatWindow.jsx index f49373b..d5c3f20 100644 --- a/frontend/src/components/ChatWindow.jsx +++ b/frontend/src/components/ChatWindow.jsx @@ -283,8 +283,7 @@ export default function ChatWindow({ group, onBack, onGroupUpdated, onDirectMess onReact={handleReact} onDirectMessage={handleDirectMessage} isDirect={isDirect} - onlineUserIds={onlineUserIds} - /> + onlineUserIds={onlineUserIds} /> ))} {typing.length > 0 && ( @@ -315,8 +314,7 @@ export default function ChatWindow({ group, onBack, onGroupUpdated, onDirectMess group={group} onClose={() => setShowInfo(false)} onUpdated={(updatedGroup) => { setShowInfo(false); onGroupUpdated && onGroupUpdated(updatedGroup); }} - onBack={() => setShowInfo(false)} - /> + onBack={() => setShowInfo(false)} /> )} ); diff --git a/frontend/src/components/ColourPickerSheet.jsx b/frontend/src/components/ColourPickerSheet.jsx index 81266e0..3f6f557 100644 --- a/frontend/src/components/ColourPickerSheet.jsx +++ b/frontend/src/components/ColourPickerSheet.jsx @@ -131,7 +131,7 @@ export function ColourPicker({ value, onChange }) { + background:'var(--surface)',color:'var(--text-primary)'}} autoComplete="new-password" >
diff --git a/frontend/src/components/GroupInfoModal.jsx b/frontend/src/components/GroupInfoModal.jsx index c26efa8..2d1722e 100644 --- a/frontend/src/components/GroupInfoModal.jsx +++ b/frontend/src/components/GroupInfoModal.jsx @@ -134,7 +134,7 @@ export default function GroupInfoModal({ group, onClose, onUpdated, onBack }) {
{editing ? (
- setNewName(e.target.value)} onKeyDown={e => e.key === 'Enter' && handleRename()} autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck={false} /> + setNewName(e.target.value)} autoComplete="new-password" onKeyDown={e => e.key === 'Enter' && handleRename()} autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck={false} />
@@ -165,10 +165,8 @@ export default function GroupInfoModal({ group, onClose, onUpdated, onBack }) { setCustomName(e.target.value)} - placeholder={group.owner_name_original || group.name} - onKeyDown={e => e.key === 'Enter' && handleCustomName()} - /> + onChange={e => setCustomName(e.target.value)} autoComplete="new-password" placeholder={group.owner_name_original || group.name} + onKeyDown={e => e.key === 'Enter' && handleCustomName()} /> {customName.trim() !== savedCustomName ? ( diff --git a/frontend/src/components/HostPanel.jsx b/frontend/src/components/HostPanel.jsx index 2ef8a22..ce8a27c 100644 --- a/frontend/src/components/HostPanel.jsx +++ b/frontend/src/components/HostPanel.jsx @@ -55,8 +55,7 @@ function FieldGroup({ label, children }) { function Field({ label, value, onChange, placeholder, type = 'text', hint, required }) { return ( - onChange(e.target.value)} - placeholder={placeholder} required={required} + onChange(e.target.value)} autoComplete="new-password" placeholder={placeholder} required={required} autoComplete="new-password" autoCorrect="off" spellCheck={false} className="input" style={{ fontSize: 13 }} /> {hint && {hint}} @@ -230,7 +229,7 @@ function DeleteModal({ api, tenant, onClose, onDone }) { Type {expected} to confirm:

{error &&
{error}
} - setConfirm(e.target.value)} placeholder={expected} style={{ marginBottom:16 }} autoComplete="new-password" /> + setConfirm(e.target.value)} autoComplete="new-password" placeholder={expected} style={{ marginBottom:16 }} autoComplete="new-password" />
diff --git a/frontend/src/components/ImageLightbox.jsx b/frontend/src/components/ImageLightbox.jsx index 24b63c1..cb9604d 100644 --- a/frontend/src/components/ImageLightbox.jsx +++ b/frontend/src/components/ImageLightbox.jsx @@ -77,8 +77,7 @@ export default function ImageLightbox({ src, onClose }) { touchAction: 'pinch-zoom', boxShadow: '0 8px 40px rgba(0,0,0,0.6)', }} - onClick={(e) => e.stopPropagation()} - /> + onClick={(e) => e.stopPropagation()} />
, document.body ); diff --git a/frontend/src/components/Message.jsx b/frontend/src/components/Message.jsx index c51b187..c136b63 100644 --- a/frontend/src/components/Message.jsx +++ b/frontend/src/components/Message.jsx @@ -261,16 +261,14 @@ export default function Message({ message: msg, prevMessage, currentUser, onRepl src={msg.image_url} alt="attachment" className="msg-image" - onClick={() => setLightboxSrc(msg.image_url)} - /> + onClick={() => setLightboxSrc(msg.image_url)} /> )} {msg.content && ( isEmojiOnly(msg.content) && !msg.image_url ?

{msg.content}

:

+ dangerouslySetInnerHTML={{ __html: formatMsgContent(msg.content) }} /> )} {msg.link_preview && }

@@ -303,8 +301,7 @@ export default function Message({ message: msg, prevMessage, currentUser, onRepl user={msgUser} anchorEl={avatarRef.current} onClose={() => setShowProfile(false)} - onDirectMessage={onDirectMessage} - /> + onDirectMessage={onDirectMessage} /> )} {lightboxSrc && ( setLightboxSrc(null)} /> diff --git a/frontend/src/components/MessageInput.jsx b/frontend/src/components/MessageInput.jsx index 53e6637..0c456ef 100644 --- a/frontend/src/components/MessageInput.jsx +++ b/frontend/src/components/MessageInput.jsx @@ -353,8 +353,7 @@ export default function MessageInput({ group, replyTo, onCancelReply, onSend, on theme="light" previewPosition="none" skinTonePosition="none" - maxFrequentRows={2} - /> + maxFrequentRows={2} />
)} @@ -367,8 +366,7 @@ export default function MessageInput({ group, replyTo, onCancelReply, onSend, on onChange={handleChange} onKeyDown={handleKeyDown} rows={1} - style={{ resize: 'none' }} - /> + style={{ resize: 'none' }} /> } - /> + right={} /> {creating && (
- setNewName(e.target.value)} placeholder="DM name…" autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck={false} style={{ width:'100%',padding:'9px 12px',border:'1px solid var(--border)',borderRadius:'var(--radius)',background:'var(--background)',color:'var(--text-primary)',fontSize:15,marginBottom:10,boxSizing:'border-box' }}/> + setNewName(e.target.value)} autoComplete="new-password" placeholder="DM name…" autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck={false} style={{ width:'100%',padding:'9px 12px',border:'1px solid var(--border)',borderRadius:'var(--radius)',background:'var(--background)',color:'var(--text-primary)',fontSize:15,marginBottom:10,boxSizing:'border-box' }}/>
Select groups (min 2):
{userGroups.map(g=>(
- setSheetName(e.target.value)} onKeyDown={e=>e.key==='Enter'&&saveSheet()} placeholder="Type name…" + setSheetName(e.target.value)} autoComplete="new-password" 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)'}}/>
@@ -1248,10 +1247,8 @@ export default function SchedulePage({ isToolManager, isMobile, onProfile, onHel className="input" placeholder={`Keyword… (space = OR, "phrase")`} value={filterKeyword} - onChange={e= autoComplete="new-password">setFilterKeyword(e.target.value)} - autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck={false} - style={{ marginBottom:8, fontSize:13 }} - /> + onChange={e => setFilterKeyword(e.target.value)} autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck={false} + style={{ marginBottom:8, fontSize:13 }} /> + diff --git a/frontend/src/components/SupportModal.jsx b/frontend/src/components/SupportModal.jsx index 210db62..de2fa90 100644 --- a/frontend/src/components/SupportModal.jsx +++ b/frontend/src/components/SupportModal.jsx @@ -100,10 +100,7 @@ export default function SupportModal({ onClose }) { className="input" placeholder="Jane Smith" value={name} - onChange={e = autoComplete="new-password"> setName(e.target.value)} - - maxLength={100} - /> + onChange={e => setName(e.target.value)} autoComplete="new-password" maxLength={100} />
@@ -113,9 +110,7 @@ export default function SupportModal({ onClose }) { type="email" placeholder="jane@example.com" value={email} - onChange={e = autoComplete="new-password"> setEmail(e.target.value)} - maxLength={200} - /> + onChange={e => setEmail(e.target.value)} autoComplete="new-password" maxLength={200} />
@@ -127,8 +122,7 @@ export default function SupportModal({ onClose }) { onChange={e => setMessage(e.target.value)} rows={4} maxLength={2000} - style={{ resize: 'vertical' }} - /> + style={{ resize: 'vertical' }} /> {message.length}/2000 @@ -157,8 +151,7 @@ export default function SupportModal({ onClose }) { onChange={e => setCaptchaAnswer(e.target.value)} style={{ width: 90 }} min={0} - max={999} - /> + max={999} />
@@ -167,10 +164,7 @@ function UserRow({ u, onUpdated }) { type="text" placeholder="New password (min 6)" value={resetPw} - onChange={e = autoComplete="new-password"> setResetPw(e.target.value)} - onKeyDown={e => { if (e.key === 'Enter') handleResetPw(); if (e.key === 'Escape') { setShowReset(false); setResetPw(''); } }} - - /> + onChange={e => setResetPw(e.target.value)} autoComplete="new-password" onKeyDown={e => { if (e.key === 'Enter') handleResetPw(); if (e.key === 'Escape') { setShowReset(false); setResetPw(''); } }} /> diff --git a/frontend/src/pages/ChangePassword.jsx b/frontend/src/pages/ChangePassword.jsx index fcaeea2..c668bb4 100644 --- a/frontend/src/pages/ChangePassword.jsx +++ b/frontend/src/pages/ChangePassword.jsx @@ -40,15 +40,15 @@ export default function ChangePassword() {
- setCurrent(e.target.value)} required /> + setCurrent(e.target.value)} autoComplete="new-password" required />
- setNext(e.target.value)} required /> + setNext(e.target.value)} autoComplete="new-password" required />
- setConfirm(e.target.value)} required /> + setConfirm(e.target.value)} autoComplete="new-password" required />