From b7b7a9c246e9a2cc1b2a1779277f3c25b3eab176 Mon Sep 17 00:00:00 2001 From: Jason Chuang Date: Fri, 12 Jun 2026 21:50:50 +0800 Subject: [PATCH 01/14] header h4 to h3 --- src/components/iAmSmartButton.js | 2 +- src/pages/authentication/RegisterCustom.js | 6 +- .../auth-forms/BusCustomFormWizard.js | 10 +- .../auth-forms/CustomFormWizard.js | 11 +- .../auth-forms/UploadFileTable.js | 147 ++++++++---------- src/pages/dashboard/Public/Notice.js | 2 +- src/translations/en.json | 1 + src/translations/zh-CN.json | 1 + src/translations/zh-HK.json | 1 + 9 files changed, 91 insertions(+), 90 deletions(-) diff --git a/src/components/iAmSmartButton.js b/src/components/iAmSmartButton.js index 3ae9e0c..532ac25 100644 --- a/src/components/iAmSmartButton.js +++ b/src/components/iAmSmartButton.js @@ -25,7 +25,7 @@ export function IAmSmartButton({ label, onClickFun, fullWidth }) { return ( diff --git a/src/pages/authentication/RegisterCustom.js b/src/pages/authentication/RegisterCustom.js index adfc4e2..3ce91a4 100644 --- a/src/pages/authentication/RegisterCustom.js +++ b/src/pages/authentication/RegisterCustom.js @@ -154,7 +154,7 @@ const RegisterCustom = () => { }, }} > - + @@ -164,7 +164,7 @@ const RegisterCustom = () => { - + diff --git a/src/pages/authentication/auth-forms/BusCustomFormWizard.js b/src/pages/authentication/auth-forms/BusCustomFormWizard.js index bd33fd4..4b61337 100644 --- a/src/pages/authentication/auth-forms/BusCustomFormWizard.js +++ b/src/pages/authentication/auth-forms/BusCustomFormWizard.js @@ -343,6 +343,10 @@ const BusCustomFormWizard = (props) => { } + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } + }, [updateRows]); const handleBrNo = (brNo) => { @@ -396,6 +400,8 @@ const BusCustomFormWizard = (props) => { setFileListData(saveFileList) setFileList(updatedFileList); + setUpdateRows(saveFileList); + event.target.value = ''; }; useEffect(() => { @@ -815,6 +821,7 @@ const BusCustomFormWizard = (props) => { endAdornment={ { endAdornment={ { - { onCaptchaChange() }}> + { onCaptchaChange() }}> diff --git a/src/pages/authentication/auth-forms/CustomFormWizard.js b/src/pages/authentication/auth-forms/CustomFormWizard.js index 4d624b3..0e31fa3 100644 --- a/src/pages/authentication/auth-forms/CustomFormWizard.js +++ b/src/pages/authentication/auth-forms/CustomFormWizard.js @@ -432,6 +432,10 @@ const CustomFormWizard = (props) => { } + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } + }, [updateRows]); const handleFileUpload = (event) => { @@ -473,6 +477,8 @@ const CustomFormWizard = (props) => { setFileListData(saveFileList) setFileList(updatedFileList); + setUpdateRows(saveFileList); + event.target.value = ''; }; useEffect(() => { @@ -1033,6 +1039,7 @@ const CustomFormWizard = (props) => { endAdornment={ { endAdornment={ { - { onCaptchaChange() }}> + { onCaptchaChange() }}> @@ -2107,6 +2115,7 @@ const CustomFormWizard = (props) => { { setRows(recordList); - // console.log(disableDelete); }, [recordList]); - function NoRowsOverlay() { + const handleCancelClick = (id) => { + setRows((prevRows) => { + const newRows = prevRows.filter((row) => row.id !== id); + setUpdateRows(newRows); + return newRows; + }); + }; + + const formatFileSize = (size) => `${Math.ceil(size / 1024)} KB`; + + if (rows.length === 0) { return ( - + - {/*
(rows={[]})
*/} -
+ ); } - const handleCancelClick = (id) => () => { - setRowModesModel({ - ...rowModesModel, - [id]: { mode: GridRowModes.View, ignoreModifications: true }, - }); - // console.log("Starting Delete") - // const editedRow = rows.find((row) => row.id === id); - // console.log(editedRow) - // console.log(editedRow.isNew) - setUpdateRows(rows.filter((row) => row.id !== id)); - setRows(rows.filter((row) => row.id !== id)); - } - - const columns = [ - { - field: 'actions', - type: 'actions', - headerName: '', - width: 30, - cellClassName: 'actions', - // hide:true, - getActions: ({ id }) => { - return [ - } - label="delete" - className="textPrimary" - onClick={handleCancelClick(id)} - color="error" - />] - }, - }, - { - id: 'name', - field: 'name', - headerName: intl.formatMessage({ id: 'fileName' }), - flex: 4, - }, - { - id: 'size', - field: 'size', - headerName: intl.formatMessage({ id: 'fileSize' }), - valueGetter: (params) => { - // console.log(params) - return Math.ceil(params.value / 1024) + " KB"; - }, - flex: 2, - }, - ]; - return ( - - "auto"} - /> + + + + + + {intl.formatMessage({ id: 'fileName' })} + {intl.formatMessage({ id: 'fileSize' })} + + + + {rows.map((row) => ( + + + handleCancelClick(row.id)} + > + + + + + + {row.name} + + + + {formatFileSize(row.size)} + + + ))} + +
); } diff --git a/src/pages/dashboard/Public/Notice.js b/src/pages/dashboard/Public/Notice.js index c53eae8..2b6e7bb 100644 --- a/src/pages/dashboard/Public/Notice.js +++ b/src/pages/dashboard/Public/Notice.js @@ -32,7 +32,7 @@ const SearchDemandNoteForm = (props) => { listData.map((item, index) => { list.push( - {locale === 'en' ?item.subjectEng:locale === 'zh-HK' ?item.subjectCht:item.subjectChs} + {locale === 'en' ?item.subjectEng:locale === 'zh-HK' ?item.subjectCht:item.subjectChs} {DateUtils.dateValue(item.announceDate)} {locale === 'en' ?item.contentEng:locale === 'zh-HK' ?item.contentCht:item.contentChs} diff --git a/src/translations/en.json b/src/translations/en.json index 194e47f..ee19f9b 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -528,6 +528,7 @@ "submitReply": "Submit", "requiredUploadFix": "Please upload the modified file of the manuscript", "upload": "Upload", + "delete": "Delete", "actionFail": "Action failed: Please check the content and submit the reply again", "issueInvalidMsg": "Application for the selected publication volume has been closed. Please choose another volume to apply again.", "singleCol":"Single Column", diff --git a/src/translations/zh-CN.json b/src/translations/zh-CN.json index 100b61f..2cf4712 100644 --- a/src/translations/zh-CN.json +++ b/src/translations/zh-CN.json @@ -524,6 +524,7 @@ "submitReply": "提交回复", "requiredUploadFix": "请上载稿件修改的档案", "upload": "上载", + "delete": "删除", "actionFail": "行动失败: 请检查内容并再次提交回复", "issueInvalidMsg": "所选刊登期数已截稿,请选择另一期重新申请。", "singleCol":"一格位", diff --git a/src/translations/zh-HK.json b/src/translations/zh-HK.json index 2af3014..d145a57 100644 --- a/src/translations/zh-HK.json +++ b/src/translations/zh-HK.json @@ -525,6 +525,7 @@ "submitReply": "提交回覆", "requiredUploadFix": "請上載稿件修改的檔案", "upload": "上載", + "delete": "刪除", "actionFail": "行動失敗: 請檢查內容並再次提交回覆", "issueInvalidMsg": "所選刊登期數已截稿,請選擇另一期重新申請。", "singleCol":"一格位", From 1376d65ad4edfdbe7a96a017a591f4b111aacc97 Mon Sep 17 00:00:00 2001 From: Jason Chuang Date: Fri, 26 Jun 2026 02:15:23 +0800 Subject: [PATCH 02/14] register form - upload file and tabindex fix --- .../Proof/Create_FromApp/UploadFileTable.js | 46 ++++++++++--------- .../auth-forms/BusCustomFormWizard.js | 16 ++++++- .../auth-forms/CustomFormWizard.js | 18 +++++++- .../auth-forms/UploadFileTable.js | 5 +- src/routes/GLDUserRoutes.js | 2 +- src/routes/PublicUserRoutes.js | 2 +- src/translations/en.json | 1 + src/translations/zh-CN.json | 1 + src/translations/zh-HK.json | 1 + src/utils/CommonFunction.js | 7 +++ 10 files changed, 70 insertions(+), 29 deletions(-) diff --git a/src/pages/Proof/Create_FromApp/UploadFileTable.js b/src/pages/Proof/Create_FromApp/UploadFileTable.js index 824637b..e264f79 100644 --- a/src/pages/Proof/Create_FromApp/UploadFileTable.js +++ b/src/pages/Proof/Create_FromApp/UploadFileTable.js @@ -7,6 +7,7 @@ import { } from "@mui/x-data-grid"; import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline'; import { useEffect } from "react"; +import { useIntl } from 'react-intl'; // import {useNavigate} from "react-router-dom"; // import { useTheme } from '@mui/material/styles'; import { @@ -17,6 +18,8 @@ import { // ==============================|| EVENT TABLE ||============================== // export default function UploadFileTable({ recordList, setRecordList, showPageColumn, _checkCode, _expectedCode }) { + const intl = useIntl(); + const deleteFileLabel = intl.formatMessage({ id: 'ariaDeleteFile' }); const [rows, setRows] = React.useState(recordList); const [rowModesModel, setRowModesModel] = React.useState({}); @@ -67,6 +70,25 @@ export default function UploadFileTable({ recordList, setRecordList, showPageCol setRows(rows.filter((row) => row.id !== id)); } + const renderDeleteAction = (id) => ( + } + label={deleteFileLabel} + title={deleteFileLabel} + className="textPrimary" + onClick={handleCancelClick(id)} + onKeyDown={(event) => { + if (event.key === 'Enter' || event.key === ' ') { + event.preventDefault(); + event.stopPropagation(); + handleCancelClick(id)(event); + } + }} + color="error" + /> + ); + const handlePreviewClick = (param) => () => { var reader = new FileReader(); reader.onload = function () { @@ -94,17 +116,7 @@ export default function UploadFileTable({ recordList, setRecordList, showPageCol width: 30, cellClassName: 'actions', // hide:true, - getActions: ({ id }) => { - return [ - } - label="delete" - className="textPrimary" - onClick={handleCancelClick(id)} - color="error" - />] - }, + getActions: ({ id }) => [renderDeleteAction(id)], }, { field: 'name', @@ -139,17 +151,7 @@ export default function UploadFileTable({ recordList, setRecordList, showPageCol width: 30, cellClassName: 'actions', // hide:true, - getActions: ({ id }) => { - return [ - } - label="delete" - className="textPrimary" - onClick={handleCancelClick(id)} - color="error" - />] - }, + getActions: ({ id }) => [renderDeleteAction(id)], }, { field: 'name', diff --git a/src/pages/authentication/auth-forms/BusCustomFormWizard.js b/src/pages/authentication/auth-forms/BusCustomFormWizard.js index 4b61337..dcfa428 100644 --- a/src/pages/authentication/auth-forms/BusCustomFormWizard.js +++ b/src/pages/authentication/auth-forms/BusCustomFormWizard.js @@ -55,7 +55,7 @@ import {PNSPS_LONG_BUTTON_THEME} from "../../../themes/buttonConst"; import {ThemeProvider} from "@emotion/react"; import {FormattedMessage, useIntl} from "react-intl"; //import { Invaild } from 'utils/IconUtils'; -import { notifyActionError } from 'utils/CommonFunction'; +import { handleActionKeyDown, notifyActionError } from 'utils/CommonFunction'; // ============================|| FIREBASE - REGISTER ||============================ // @@ -822,10 +822,12 @@ const BusCustomFormWizard = (props) => { handleActionKeyDown(event, handleClickShowPassword)} onMouseDown={handleMouseDownPassword} edge="end" size="large" @@ -899,10 +901,12 @@ const BusCustomFormWizard = (props) => { handleActionKeyDown(event, handleClickShowConfirmPassword)} onMouseDown={handleMouseDownPassword} edge="end" size="large" @@ -1546,6 +1550,7 @@ const BusCustomFormWizard = (props) => { variant="contained" sx={{ height: '40px' }} type="button" + tabIndex={0} onClick={() => { if (fileInputRef.current) { fileInputRef.current.click(); @@ -1659,7 +1664,14 @@ const BusCustomFormWizard = (props) => { - { onCaptchaChange() }}> + { onCaptchaChange() }} + onKeyDown={(event) => handleActionKeyDown(event, () => onCaptchaChange())} + > diff --git a/src/pages/authentication/auth-forms/CustomFormWizard.js b/src/pages/authentication/auth-forms/CustomFormWizard.js index 0e31fa3..e5676b8 100644 --- a/src/pages/authentication/auth-forms/CustomFormWizard.js +++ b/src/pages/authentication/auth-forms/CustomFormWizard.js @@ -47,7 +47,7 @@ import { FormattedMessage, useIntl } from "react-intl"; import { Link } from 'react-router-dom'; import { PNSPS_LONG_BUTTON_THEME } from "../../../themes/buttonConst"; import * as HttpUtils from "../../../utils/HttpUtils"; -import { notifyActionError } from 'utils/CommonFunction'; +import { handleActionKeyDown, notifyActionError } from 'utils/CommonFunction'; // ============================|| FIREBASE - REGISTER ||============================ // const CustomFormWizard = (props) => { @@ -1040,10 +1040,12 @@ const CustomFormWizard = (props) => { handleActionKeyDown(event, handleClickShowPassword)} onMouseDown={handleMouseDownPassword} edge="end" size="large" @@ -1117,10 +1119,12 @@ const CustomFormWizard = (props) => { handleActionKeyDown(event, handleClickShowConfirmPassword)} onMouseDown={handleMouseDownPassword} edge="end" size="large" @@ -1874,6 +1878,7 @@ const CustomFormWizard = (props) => { variant="contained" sx={{ height: '40px' }} type="button" + tabIndex={0} onClick={() => { if (fileInputRef.current) { fileInputRef.current.click(); @@ -1987,7 +1992,14 @@ const CustomFormWizard = (props) => { - { onCaptchaChange() }}> + { onCaptchaChange() }} + onKeyDown={(event) => handleActionKeyDown(event, () => onCaptchaChange())} + > @@ -2116,8 +2128,10 @@ const CustomFormWizard = (props) => { handleActionKeyDown(event, handleClickShowId)} onMouseDown={handleMouseDownId} edge="end" size="medium" diff --git a/src/pages/authentication/auth-forms/UploadFileTable.js b/src/pages/authentication/auth-forms/UploadFileTable.js index 92bbc5a..537300e 100644 --- a/src/pages/authentication/auth-forms/UploadFileTable.js +++ b/src/pages/authentication/auth-forms/UploadFileTable.js @@ -14,6 +14,7 @@ import { Typography } from '@mui/material'; import { FormattedMessage, useIntl } from "react-intl"; +import { handleActionKeyDown } from 'utils/CommonFunction'; // ==============================|| EVENT TABLE ||============================== // export default function UploadFileTable({ recordList, setUpdateRows, }) { @@ -74,8 +75,10 @@ export default function UploadFileTable({ recordList, setUpdateRows, }) { size="small" color="error" role="button" - aria-label={intl.formatMessage({ id: 'delete' })} + tabIndex={0} + aria-label={intl.formatMessage({ id: 'ariaDeleteFile' })} onClick={() => handleCancelClick(row.id)} + onKeyDown={(event) => handleActionKeyDown(event, () => handleCancelClick(row.id))} > diff --git a/src/routes/GLDUserRoutes.js b/src/routes/GLDUserRoutes.js index e096bb3..a4a059c 100644 --- a/src/routes/GLDUserRoutes.js +++ b/src/routes/GLDUserRoutes.js @@ -7,7 +7,7 @@ const MainLayout = Loadable(lazy(() => import('layout/MainLayout'))); import {isGranted, isGrantedAny} from "auth/utils"; // import { isPasswordExpiry } from "utils/Utils"; // render - dashboard -const DashboardDefault = Loadable(lazy(() => import('pages/Dashboard/GLD'))); +const DashboardDefault = Loadable(lazy(() => import('pages/dashboard/GLD'))); const ApplicationDetail = Loadable(lazy(() => import('pages/PublicNotice/Details_GLD'))); const ApplicationSearch = Loadable(lazy(() => import('pages/PublicNotice/Search_GLD'))); const ApplicationMarkAsPaidSearch = Loadable(lazy(() => import('pages/PublicNotice/Search_Mark_As_Paid_GLD'))); diff --git a/src/routes/PublicUserRoutes.js b/src/routes/PublicUserRoutes.js index f12c742..c3f614d 100644 --- a/src/routes/PublicUserRoutes.js +++ b/src/routes/PublicUserRoutes.js @@ -7,7 +7,7 @@ const MainLayout = Loadable(lazy(() => import('layout/MainLayout'))); // import { isPasswordExpiry } from "utils/Utils"; // render - dashboard -const DashboardDefault = Loadable(lazy(() => import('pages/Dashboard/Public'))); +const DashboardDefault = Loadable(lazy(() => import('pages/dashboard/Public'))); const ManageOrgUser = Loadable(lazy(() => import('pages/User/ManagePage_OrgPublic'))); const PublicNotice = Loadable(lazy(() => import('pages/PublicNotice/ListPanel'))); const PublicNoticeApplyForm = Loadable(lazy(() => import('pages/PublicNotice/ApplyForm'))); diff --git a/src/translations/en.json b/src/translations/en.json index ee19f9b..1072e14 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -652,6 +652,7 @@ "ariaApplicationGroup": "Application Group", "ariaProfileTabs": "Profile tabs", "ariaUploadPdfFile": "Upload PDF file", + "ariaDeleteFile": "Delete file", "ariaExportHolidayTemplate": "Export holiday template", "ariaUploadExcelFile": "Upload Excel file (.xlsx)", "ariaBackToHome": "Back to home", diff --git a/src/translations/zh-CN.json b/src/translations/zh-CN.json index 2cf4712..4a62172 100644 --- a/src/translations/zh-CN.json +++ b/src/translations/zh-CN.json @@ -648,6 +648,7 @@ "ariaApplicationGroup": "申请组别", "ariaProfileTabs": "个人资料选项卡", "ariaUploadPdfFile": "上传 PDF 文件", + "ariaDeleteFile": "删除文件", "ariaExportHolidayTemplate": "导出假期模板", "ariaUploadExcelFile": "上传 Excel 文件 (.xlsx)", "ariaBackToHome": "返回主页", diff --git a/src/translations/zh-HK.json b/src/translations/zh-HK.json index d145a57..a4c8423 100644 --- a/src/translations/zh-HK.json +++ b/src/translations/zh-HK.json @@ -649,6 +649,7 @@ "ariaApplicationGroup": "申請組別", "ariaProfileTabs": "個人檔案分頁", "ariaUploadPdfFile": "上載 PDF 檔案", + "ariaDeleteFile": "刪除檔案", "ariaExportHolidayTemplate": "匯出假期範本", "ariaUploadExcelFile": "上載 Excel 檔案 (.xlsx)", "ariaBackToHome": "返回主頁", diff --git a/src/utils/CommonFunction.js b/src/utils/CommonFunction.js index 6dc4180..a2edd83 100644 --- a/src/utils/CommonFunction.js +++ b/src/utils/CommonFunction.js @@ -11,6 +11,13 @@ export const clickableLink=(link, label)=> { return {label}; } +export const handleActionKeyDown = (event, action) => { + if (event.key === 'Enter' || event.key === ' ') { + event.preventDefault(); + action(event); + } +}; + export function getDeletedRecordWithRefList(referenceList, updatedList) { return referenceList.filter(x => !updatedList.includes(x)); } From 4f2cc3469b75ede22515d948b07353d151121192 Mon Sep 17 00:00:00 2001 From: Jason Chuang Date: Fri, 26 Jun 2026 03:20:05 +0800 Subject: [PATCH 03/14] various update --- src/assets/style/navbarStyles.css | 18 ++-- src/assets/style/styles.css | 8 +- src/components/AdminLogo/index.js | 4 +- src/components/MobileLogo/index.js | 2 +- .../Header/HeaderContent/LocaleSelector.js | 4 +- .../Header/HeaderContent/Notification.js | 2 +- src/layout/MainLayout/Header/index.js | 18 ++-- src/layout/MainLayout/index.js | 2 +- src/pages/Announcement/Search/index.js | 2 +- src/pages/Announcement/Search_Public/index.js | 2 +- src/pages/AuditLog/index.js | 2 +- src/pages/DemandNote/Create/index.js | 2 +- src/pages/DemandNote/Export/index.js | 2 +- src/pages/DemandNote/Search/DataGrid.js | 2 + src/pages/DemandNote/Search/index.js | 2 +- src/pages/GFMIS/index.js | 2 +- src/pages/JVM/index.js | 2 +- src/pages/Message/Details/index.js | 3 +- src/pages/Organization/SearchPage/index.js | 2 +- src/pages/Payment/Search_GLD/index.js | 2 +- src/pages/Proof/Create_FromApp/index.js | 2 +- src/pages/Proof/Reply_Public/ProofForm.js | 4 +- src/pages/Proof/Search_GLD/index.js | 2 +- .../ApplyForm/PublicNoticeApplyForm.js | 4 +- .../Details_GLD/ApplicationDetailCard.js | 4 +- .../Details_Public/ApplicationDetailCard.js | 8 +- .../PublicNotice/Details_Public/index.js | 3 +- src/pages/PublicNotice/ListPanel/BaseGrid.js | 3 +- .../ListPanel/PendingPaymentTab.js | 3 +- .../ListPanel/SearchPublicNoticeTable.js | 2 + src/pages/PublicNotice/Search_GLD/index.js | 2 +- .../Search_Mark_As_Paid_GLD/index.js | 2 +- src/pages/Recon/index.js | 2 +- src/pages/Report/FullList/index.js | 2 +- src/pages/Report/Summary/index.js | 2 +- src/pages/Setting/DrImport/index.js | 3 + src/pages/User/DetailPage/index.js | 2 +- src/pages/User/ManagePage_OrgPublic/index.js | 31 ++++--- src/pages/User/SearchPage/index.js | 2 +- src/pages/User/SearchPage_Individual/index.js | 2 +- .../User/SearchPage_Organization/index.js | 2 +- src/pages/authentication/AuthWrapper.js | 2 +- src/pages/authentication/BusRegister.js | 6 +- src/pages/authentication/IAmSmartRegister.js | 6 +- src/pages/authentication/Register.js | 6 +- src/pages/authentication/RegisterCustom.js | 16 ++-- .../auth-forms/AuthLoginCustom.js | 4 +- .../auth-forms/BusCustomFormWizard.js | 6 +- .../auth-forms/CustomFormWizard.js | 6 +- .../auth-forms/IAmSmartFormWizard.js | 6 +- src/pages/dashboard/GLD/index.js | 2 +- src/pages/dashboard/Public/index.js | 10 +-- src/pages/extra-pages/UserMenuPub1/index.js | 2 +- src/pages/pnspsUserGroupDetailPage/index.js | 2 +- src/pages/pnspsUserGroupSearchPage/index.js | 2 +- src/themes/buttonConst.js | 49 +++++++++- src/themes/colorConst.js | 34 +++++++ src/themes/overrides/Button.js | 24 +++-- src/themes/overrides/Checkbox.js | 17 ++++ src/themes/overrides/InputLabel.js | 13 ++- src/themes/overrides/OutlinedInput.js | 18 ++-- src/themes/overrides/Radio.js | 30 +++++++ src/themes/overrides/Tab.js | 11 ++- src/themes/overrides/index.js | 2 + src/themes/themeConst.js | 90 ++++++++++++++++--- .../statusUtils/PublicNoteStatusUtils.js | 2 +- 66 files changed, 393 insertions(+), 143 deletions(-) create mode 100644 src/themes/overrides/Radio.js diff --git a/src/assets/style/navbarStyles.css b/src/assets/style/navbarStyles.css index dea1992..c718620 100644 --- a/src/assets/style/navbarStyles.css +++ b/src/assets/style/navbarStyles.css @@ -11,7 +11,7 @@ top: 0px; width: 100%; z-index: 9999; - border-bottom: 3px solid #0C489E; + border-bottom: 3px solid #1976d2; min-height: 77px; } @@ -112,7 +112,7 @@ #navbar div li a:hover, #navbar div li button.navTrigger:hover{ - color: #0C489E; + color: #1976d2; } #navbar div li a:hover::after, @@ -122,7 +122,7 @@ content: ""; width: 80%; height: 3px; - background:#0C489E; + background:#1976d2; position: absolute; bottom: -5px; left: 20px; @@ -166,7 +166,7 @@ #navbar a:focus-visible, #navbar button.navTrigger:focus-visible{ - outline: 3px solid #0C489E; + outline: 3px solid #1976d2; outline-offset: 2px; border-radius: 10px; } @@ -234,7 +234,7 @@ text-decoration: none; font-size: 1.1rem; font-weight: 600; - color: #0C489E; + color: #1976d2; transition: 0.3s ease-in-out; text-align: center; } @@ -242,7 +242,7 @@ text-decoration: none; font-size: 1.1rem; font-weight: 600; - color: #0C489E; + color: #1976d2; transition: 0.3s ease-in-out; text-align: center; } @@ -284,7 +284,7 @@ transition: 0.3s ease-in-out; } #sidebar li a:hover{ - color: #0C489E; + color: #1976d2; } #sidebar div li ul{ background: white; @@ -344,12 +344,12 @@ /* Hover / focus */ #sidebar li > a:hover, #sidebar li > button.navTrigger:hover{ - color: #0C489E; + color: #1976d2; } #sidebar li > a:focus-visible, #sidebar li > button.navTrigger:focus-visible{ - outline: 3px solid #0C489E; + outline: 3px solid #1976d2; outline-offset: 2px; border-radius: 10px; } diff --git a/src/assets/style/styles.css b/src/assets/style/styles.css index a675de2..f1ee2c6 100644 --- a/src/assets/style/styles.css +++ b/src/assets/style/styles.css @@ -72,7 +72,7 @@ a:active { [role="link"], [tabindex]:not([tabindex="-1"]) ):focus-visible { - outline: 3px solid #0C489E; + outline: 3px solid #1976d2; outline-offset: 2px; border-radius: 4px; } @@ -95,9 +95,9 @@ a:active { /* ===== MUI DataGrid keyboard focus (WCAG 2.4.7 / 2.4.11) ===== */ .MuiDataGrid-columnHeader:focus-visible, .MuiDataGrid-cell:focus-visible { - outline: 3px solid #0C489E; + outline: 3px solid #1976d2; outline-offset: -2px; - box-shadow: 0 0 0 3px rgba(12, 72, 158, 0.25); + box-shadow: 0 0 0 3px rgba(25, 118, 210, 0.25); } /* Contained buttons only */ @@ -122,7 +122,7 @@ a:active { /* ===== Outlined button focus ===== */ .MuiButton-outlined:focus-visible { - outline: 3px solid #0C489E; + outline: 3px solid #1976d2; outline-offset: 2px; } diff --git a/src/components/AdminLogo/index.js b/src/components/AdminLogo/index.js index 4fa7a84..7b62ee8 100644 --- a/src/components/AdminLogo/index.js +++ b/src/components/AdminLogo/index.js @@ -34,7 +34,7 @@ const LogoSection = ({ sx, to }) => { ...sx, /* ✅ WCAG 2.4.7 focus indicator */ '&:focus-visible': { - outline: '3px solid #0C489E', + outline: '3px solid #1976d2', outlineOffset: '2px', borderRadius: '6px' } @@ -42,7 +42,7 @@ const LogoSection = ({ sx, to }) => { > - PNSPS + PNSPS diff --git a/src/components/MobileLogo/index.js b/src/components/MobileLogo/index.js index da2ff62..b5ebe8c 100644 --- a/src/components/MobileLogo/index.js +++ b/src/components/MobileLogo/index.js @@ -30,7 +30,7 @@ const LogoSection = ({ sx, to }) => { /* WCAG 2.4.7 – visible keyboard focus */ '&:focus-visible': { - outline: '3px solid #0C489E', + outline: '3px solid #1976d2', outlineOffset: '2px', borderRadius: '6px' } diff --git a/src/layout/MainLayout/Header/HeaderContent/LocaleSelector.js b/src/layout/MainLayout/Header/HeaderContent/LocaleSelector.js index 66d0b68..3d3aba6 100644 --- a/src/layout/MainLayout/Header/HeaderContent/LocaleSelector.js +++ b/src/layout/MainLayout/Header/HeaderContent/LocaleSelector.js @@ -64,7 +64,8 @@ const LocaleSelector = () => { }} aria-label={intl.formatMessage({id: 'openLanguage'})} ref={anchorRef} - aria-controls={open ? 'profile-grow' : undefined} + aria-controls={open ? 'locale-selector-menu' : undefined} + aria-expanded={open} aria-haspopup="true" onClick={handleToggle} > @@ -103,6 +104,7 @@ const LocaleSelector = () => { > diff --git a/src/layout/MainLayout/Header/HeaderContent/Notification.js b/src/layout/MainLayout/Header/HeaderContent/Notification.js index a300a0b..d486c28 100644 --- a/src/layout/MainLayout/Header/HeaderContent/Notification.js +++ b/src/layout/MainLayout/Header/HeaderContent/Notification.js @@ -77,7 +77,7 @@ const Notification = () => { /* ✅ WCAG 2.4.7 focus indicator */ '&:focus-visible': { - outline: '3px solid #0C489E', + outline: '3px solid #1976d2', outlineOffset: '2px', borderRadius: '6px' } diff --git a/src/layout/MainLayout/Header/index.js b/src/layout/MainLayout/Header/index.js index 335cc59..ce15f1e 100644 --- a/src/layout/MainLayout/Header/index.js +++ b/src/layout/MainLayout/Header/index.js @@ -775,7 +775,7 @@ function Header(props) { - + PNSPS @@ -794,7 +794,7 @@ function Header(props) { - + PNSPS @@ -826,13 +826,13 @@ function Header(props) { onClick={handleDrawerToggle} sx={{ mr: 2, display: { md: "none" } }} > - + - + PNSPS @@ -848,7 +848,7 @@ function Header(props) { - + @@ -863,14 +863,14 @@ function Header(props) { onClick={handleDrawerToggle} sx={{ mr: 2, display: { md: "none" } }} > - + - + @@ -946,14 +946,14 @@ function Header(props) { onClick={handleDrawerToggle} sx={{ mr: 2, display: { md: "none" } }} > - + - + diff --git a/src/layout/MainLayout/index.js b/src/layout/MainLayout/index.js index d5999b8..0e6e281 100644 --- a/src/layout/MainLayout/index.js +++ b/src/layout/MainLayout/index.js @@ -67,7 +67,7 @@ const MainLayout = () => { {/* */} - +