pixelize-design-library 2.3.22 → 2.4.1
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.
- package/.claude/settings.local.json +51 -0
- package/.cursor/TASK-SETUP.md +43 -0
- package/.cursor/agents/be-impl.md +37 -0
- package/.cursor/agents/fe-impl.md +39 -0
- package/.cursor/agents/task-plan.md +56 -0
- package/.cursor/agents/test-create.md +31 -0
- package/.cursor/agents/test-exec.md +26 -0
- package/.cursor/hooks/task-hint.env +1 -0
- package/.cursor/hooks/task-skill-nudge.sh +71 -0
- package/.cursor/hooks/task-slash-guard.sh +31 -0
- package/.cursor/hooks.json +13 -0
- package/.cursor/modules/account-management/MODULE.md +34 -0
- package/.cursor/modules/buttons/MODULE.md +47 -0
- package/.cursor/modules/cards/MODULE.md +55 -0
- package/.cursor/modules/charts/MODULE.md +40 -0
- package/.cursor/modules/common/MODULE.md +36 -0
- package/.cursor/modules/contact-auth/MODULE.md +19 -0
- package/.cursor/modules/data-display/MODULE.md +42 -0
- package/.cursor/modules/feedback/MODULE.md +32 -0
- package/.cursor/modules/form/MODULE.md +13 -0
- package/.cursor/modules/inputs-basic/MODULE.md +42 -0
- package/.cursor/modules/inputs-date-file/MODULE.md +56 -0
- package/.cursor/modules/inputs-select/MODULE.md +27 -0
- package/.cursor/modules/inputs-toggle/MODULE.md +18 -0
- package/.cursor/modules/kanban/MODULE.md +22 -0
- package/.cursor/modules/layout-navigation/MODULE.md +269 -0
- package/.cursor/modules/overlays/MODULE.md +69 -0
- package/.cursor/modules/playground/MODULE.md +28 -0
- package/.cursor/modules/table/MODULE.md +78 -0
- package/.cursor/modules/theme/MODULE.md +314 -0
- package/.cursor/modules/types-exports/MODULE.md +17 -0
- package/.cursor/modules/utility-ui/MODULE.md +50 -0
- package/.cursor/modules/utils-hooks/MODULE.md +35 -0
- package/.cursor/pixelize-task-statusline.sh +64 -0
- package/.cursor/plans/blocked/.gitkeep +0 -0
- package/.cursor/plans/current.md +12 -0
- package/.cursor/plans/current.theme-tokens-dark-mode.md +77 -0
- package/.cursor/plans/current.theme-tokens-dark.md +155 -0
- package/.cursor/plans/done/.gitkeep +0 -0
- package/.cursor/rules +31 -0
- package/.cursor/skills/task/SKILL.md +167 -0
- package/CLAUDE.md +148 -0
- package/README.md +77 -10
- package/__mocks__/styleMock.js +8 -0
- package/coverage/clover.xml +405 -0
- package/coverage/coverage-final.json +16 -0
- package/coverage/coverage-summary.json +50 -0
- package/coverage/lcov-report/Button/Button.tsx.html +244 -0
- package/coverage/lcov-report/Button/index.html +116 -0
- package/coverage/lcov-report/Checkbox/Checkbox.tsx.html +433 -0
- package/coverage/lcov-report/Checkbox/index.html +116 -0
- package/coverage/lcov-report/Common/ErrorMessage.tsx.html +148 -0
- package/coverage/lcov-report/Common/FormLabel.tsx.html +331 -0
- package/coverage/lcov-report/Common/HelperText.tsx.html +124 -0
- package/coverage/lcov-report/Common/index.html +146 -0
- package/coverage/lcov-report/Components/Button/Button.tsx.html +244 -0
- package/coverage/lcov-report/Components/Button/index.html +116 -0
- package/coverage/lcov-report/Components/Checkbox/Checkbox.tsx.html +433 -0
- package/coverage/lcov-report/Components/Checkbox/index.html +116 -0
- package/coverage/lcov-report/Components/Common/ErrorMessage.tsx.html +148 -0
- package/coverage/lcov-report/Components/Common/FormLabel.tsx.html +331 -0
- package/coverage/lcov-report/Components/Common/HelperText.tsx.html +124 -0
- package/coverage/lcov-report/Components/Common/index.html +146 -0
- package/coverage/lcov-report/Components/CustomModulesTable/CustomModulesTable.tsx.html +712 -0
- package/coverage/lcov-report/Components/CustomModulesTable/DeleteModuleModal.tsx.html +343 -0
- package/coverage/lcov-report/Components/CustomModulesTable/EditModuleModal.tsx.html +313 -0
- package/coverage/lcov-report/Components/CustomModulesTable/index.html +146 -0
- package/coverage/lcov-report/Components/Divider/Divider.tsx.html +133 -0
- package/coverage/lcov-report/Components/Divider/index.html +116 -0
- package/coverage/lcov-report/Components/Dropdown/DropDown.tsx.html +994 -0
- package/coverage/lcov-report/Components/Dropdown/index.html +116 -0
- package/coverage/lcov-report/Components/EmptyState/EmptyState.tsx.html +466 -0
- package/coverage/lcov-report/Components/EmptyState/index.html +116 -0
- package/coverage/lcov-report/Components/Header/HeaderActions.tsx.html +373 -0
- package/coverage/lcov-report/Components/Header/index.html +116 -0
- package/coverage/lcov-report/Components/Input/TextInput.tsx.html +487 -0
- package/coverage/lcov-report/Components/Input/index.html +116 -0
- package/coverage/lcov-report/Components/Input/textInputIconSize.ts.html +205 -0
- package/coverage/lcov-report/Components/KanbanBoard/AccountCard.tsx.html +547 -0
- package/coverage/lcov-report/Components/KanbanBoard/AccountRow.tsx.html +190 -0
- package/coverage/lcov-report/Components/KanbanBoard/KanbanActions/KanbanActions.tsx.html +247 -0
- package/coverage/lcov-report/Components/KanbanBoard/KanbanActions/index.html +116 -0
- package/coverage/lcov-report/Components/KanbanBoard/KanbanBoard.tsx.html +3598 -0
- package/coverage/lcov-report/Components/KanbanBoard/MeasuredItem.tsx.html +283 -0
- package/coverage/lcov-report/Components/KanbanBoard/index.html +161 -0
- package/coverage/lcov-report/Components/OrganizationDetails/CreateOrgModal.tsx.html +511 -0
- package/coverage/lcov-report/Components/OrganizationDetails/DeleteOrgModal.tsx.html +334 -0
- package/coverage/lcov-report/Components/OrganizationDetails/OrganizationDetails.tsx.html +1519 -0
- package/coverage/lcov-report/Components/OrganizationDetails/index.html +146 -0
- package/coverage/lcov-report/Components/RolesPermission/DeleteRoleModal.tsx.html +328 -0
- package/coverage/lcov-report/Components/RolesPermission/RolesPermission.tsx.html +1732 -0
- package/coverage/lcov-report/Components/RolesPermission/index.html +131 -0
- package/coverage/lcov-report/Components/SearchSelect/SearchSelect.tsx.html +2575 -0
- package/coverage/lcov-report/Components/SearchSelect/SelectTruncatedLabel.tsx.html +202 -0
- package/coverage/lcov-report/Components/SearchSelect/index.html +146 -0
- package/coverage/lcov-report/Components/SearchSelect/searchSelectSize.ts.html +496 -0
- package/coverage/lcov-report/Components/Select/Select.tsx.html +361 -0
- package/coverage/lcov-report/Components/Select/index.html +116 -0
- package/coverage/lcov-report/Components/SideBar/components/OtherApps.tsx.html +562 -0
- package/coverage/lcov-report/Components/SideBar/components/OverflowTooltipText.tsx.html +346 -0
- package/coverage/lcov-report/Components/SideBar/components/index.html +116 -0
- package/coverage/lcov-report/Components/SignInActivityTable/SignInActivityTable.tsx.html +490 -0
- package/coverage/lcov-report/Components/SignInActivityTable/index.html +116 -0
- package/coverage/lcov-report/Components/Table/components/TableActions.tsx.html +595 -0
- package/coverage/lcov-report/Components/Table/components/TableBody.tsx.html +2212 -0
- package/coverage/lcov-report/Components/Table/components/TableGroupRow.tsx.html +358 -0
- package/coverage/lcov-report/Components/Table/components/TableLoading.tsx.html +358 -0
- package/coverage/lcov-report/Components/Table/components/index.html +161 -0
- package/coverage/lcov-report/Components/Table/settings/ManageColumns.tsx.html +856 -0
- package/coverage/lcov-report/Components/Table/settings/index.html +116 -0
- package/coverage/lcov-report/Components/Tag/Tag.styles.tsx.html +331 -0
- package/coverage/lcov-report/Components/Tag/Tag.tsx.html +256 -0
- package/coverage/lcov-report/Components/Tag/index.html +131 -0
- package/coverage/lcov-report/Components/ToolTip/ToolTip.tsx.html +286 -0
- package/coverage/lcov-report/Components/ToolTip/index.html +116 -0
- package/coverage/lcov-report/Components/UserDetails/AddUserModal.tsx.html +709 -0
- package/coverage/lcov-report/Components/UserDetails/ChangeRoleModal.tsx.html +505 -0
- package/coverage/lcov-report/Components/UserDetails/DeactivateConfirmModal.tsx.html +379 -0
- package/coverage/lcov-report/Components/UserDetails/UserDetails.tsx.html +1900 -0
- package/coverage/lcov-report/Components/UserDetails/index.html +161 -0
- package/coverage/lcov-report/EmptyState/EmptyState.tsx.html +466 -0
- package/coverage/lcov-report/EmptyState/index.html +116 -0
- package/coverage/lcov-report/Hooks/index.html +116 -0
- package/coverage/lcov-report/Hooks/usePreferences.ts.html +421 -0
- package/coverage/lcov-report/Input/TextInput.tsx.html +487 -0
- package/coverage/lcov-report/Input/index.html +131 -0
- package/coverage/lcov-report/Input/textInputIconSize.ts.html +205 -0
- package/coverage/lcov-report/KanbanBoard.tsx.html +3481 -0
- package/coverage/lcov-report/OrganizationDetails/CreateOrgModal.tsx.html +511 -0
- package/coverage/lcov-report/OrganizationDetails/DeleteOrgModal.tsx.html +334 -0
- package/coverage/lcov-report/OrganizationDetails/OrganizationDetails.tsx.html +1519 -0
- package/coverage/lcov-report/OrganizationDetails/index.html +146 -0
- package/coverage/lcov-report/RolesPermission/DeleteRoleModal.tsx.html +328 -0
- package/coverage/lcov-report/RolesPermission/RolesPermission.tsx.html +1732 -0
- package/coverage/lcov-report/RolesPermission/index.html +116 -0
- package/coverage/lcov-report/SearchSelect/SearchSelect.tsx.html +2575 -0
- package/coverage/lcov-report/SearchSelect/SelectTruncatedLabel.tsx.html +202 -0
- package/coverage/lcov-report/SearchSelect/index.html +146 -0
- package/coverage/lcov-report/SearchSelect/searchSelectSize.ts.html +496 -0
- package/coverage/lcov-report/Table/CompactSelect.tsx.html +379 -0
- package/coverage/lcov-report/Table/Components/ActiveFilters.tsx.html +514 -0
- package/coverage/lcov-report/Table/Components/HeaderActions.tsx.html +373 -0
- package/coverage/lcov-report/Table/Components/Pagination.tsx.html +574 -0
- package/coverage/lcov-report/Table/Components/TableActions.tsx.html +574 -0
- package/coverage/lcov-report/Table/Components/TableBody.tsx.html +1027 -0
- package/coverage/lcov-report/Table/Components/TableFilters.tsx.html +397 -0
- package/coverage/lcov-report/Table/Components/TableHeader.tsx.html +1060 -0
- package/coverage/lcov-report/Table/Components/TableLoading.tsx.html +361 -0
- package/coverage/lcov-report/Table/Components/TableSearch.tsx.html +337 -0
- package/coverage/lcov-report/Table/Components/index.html +266 -0
- package/coverage/lcov-report/Table/Components/useDebounce.ts.html +178 -0
- package/coverage/lcov-report/Table/Components/useTable.ts.html +778 -0
- package/coverage/lcov-report/Table/LeftFilterPane.tsx.html +1810 -0
- package/coverage/lcov-report/Table/SelectOperationControls.tsx.html +178 -0
- package/coverage/lcov-report/Table/Table.tsx.html +1567 -0
- package/coverage/lcov-report/Table/TableProps.tsx.html +658 -0
- package/coverage/lcov-report/Table/TableSettings/ManageColumns.tsx.html +619 -0
- package/coverage/lcov-report/Table/TableSettings/TableFilters.tsx.html +229 -0
- package/coverage/lcov-report/Table/TableSettings/TableSettings.tsx.html +532 -0
- package/coverage/lcov-report/Table/TableSettings/index.html +146 -0
- package/coverage/lcov-report/Table/TableToDo.tsx.html +973 -0
- package/coverage/lcov-report/Table/TextOperationControls.tsx.html +271 -0
- package/coverage/lcov-report/Table/filterTypes.ts.html +97 -0
- package/coverage/lcov-report/Table/index.html +176 -0
- package/coverage/lcov-report/Table/settings/ManageColumns.tsx.html +856 -0
- package/coverage/lcov-report/Table/settings/index.html +116 -0
- package/coverage/lcov-report/Tag/Tag.tsx.html +256 -0
- package/coverage/lcov-report/Tag/index.html +116 -0
- package/coverage/lcov-report/Theme/buildBrandTokens.ts.html +175 -0
- package/coverage/lcov-report/Theme/chartColorsFromTheme.ts.html +214 -0
- package/coverage/lcov-report/Theme/index.html +131 -0
- package/coverage/lcov-report/Theme/useCustomTheme.ts.html +100 -0
- package/coverage/lcov-report/ToolTip/ToolTip.tsx.html +286 -0
- package/coverage/lcov-report/ToolTip/index.html +116 -0
- package/coverage/lcov-report/UserDetails/AddUserModal.tsx.html +709 -0
- package/coverage/lcov-report/UserDetails/ChangeRoleModal.tsx.html +505 -0
- package/coverage/lcov-report/UserDetails/index.html +116 -0
- package/coverage/lcov-report/Utils/functions.ts.html +106 -0
- package/coverage/lcov-report/Utils/index.html +116 -0
- package/coverage/lcov-report/Utils/table.ts.html +1189 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +251 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov.info +981 -0
- package/dist/App.d.ts.map +1 -1
- package/dist/Assets/defaultLogo.tsx +30 -0
- package/dist/Components/Accordion/Accordion.d.ts.map +1 -1
- package/dist/Components/Accordion/Accordion.js +15 -12
- package/dist/Components/Accordion/accordionColors.d.ts +6 -0
- package/dist/Components/Accordion/accordionColors.d.ts.map +1 -0
- package/dist/Components/Accordion/accordionColors.js +20 -0
- package/dist/Components/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/Components/AlertDialog/AlertDialog.js +4 -1
- package/dist/Components/Apexcharts/ApexBarChart/ApexBarChart.d.ts.map +1 -1
- package/dist/Components/Apexcharts/ApexBarChart/ApexBarChart.js +5 -1
- package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.d.ts.map +1 -1
- package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.js +6 -4
- package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.d.ts.map +1 -1
- package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.js +5 -1
- package/dist/Components/Apexcharts/ApexPolarCharts/ApexPolarCharts.d.ts.map +1 -1
- package/dist/Components/Apexcharts/ApexPolarCharts/ApexPolarCharts.js +5 -1
- package/dist/Components/Button/Button.styles.d.ts.map +1 -1
- package/dist/Components/Button/Button.styles.js +100 -47
- package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.d.ts.map +1 -1
- package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +11 -3
- package/dist/Components/Card/PaymentCard/PaymentCard.d.ts.map +1 -1
- package/dist/Components/Card/PaymentCard/PaymentCard.js +17 -12
- package/dist/Components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/Components/Checkbox/Checkbox.js +2 -1
- package/dist/Components/Common/ErrorComponent.d.ts.map +1 -1
- package/dist/Components/Common/ErrorComponent.js +7 -3
- package/dist/Components/Common/ErrorMessage.d.ts.map +1 -1
- package/dist/Components/Common/ErrorMessage.js +7 -1
- package/dist/Components/Common/FormLabel.d.ts.map +1 -1
- package/dist/Components/Common/FormLabel.js +7 -1
- package/dist/Components/Common/Label.d.ts.map +1 -1
- package/dist/Components/Common/Label.js +4 -2
- package/dist/Components/Common/fieldStyles.d.ts.map +1 -1
- package/dist/Components/Common/fieldStyles.js +3 -1
- package/dist/Components/CopyButton/CopyButton.d.ts.map +1 -1
- package/dist/Components/CopyButton/CopyButton.js +14 -6
- package/dist/Components/CustomModulesTable/CustomModulesTable.d.ts.map +1 -1
- package/dist/Components/CustomModulesTable/CustomModulesTable.js +9 -6
- package/dist/Components/CustomModulesTable/DeleteModuleModal.d.ts.map +1 -1
- package/dist/Components/CustomModulesTable/DeleteModuleModal.js +2 -2
- package/dist/Components/CustomModulesTable/EditModuleModal.d.ts.map +1 -1
- package/dist/Components/CustomModulesTable/EditModuleModal.js +2 -2
- package/dist/Components/DatePicker/CalendarPanel.js +1 -1
- package/dist/Components/DatePicker/DatePicker.js +1 -1
- package/dist/Components/DatePicker/RangeDatePicker.d.ts.map +1 -1
- package/dist/Components/DatePicker/RangeDatePicker.js +1 -1
- package/dist/Components/DatePicker/SingleDatePicker.d.ts.map +1 -1
- package/dist/Components/DatePicker/SingleDatePicker.js +1 -1
- package/dist/Components/DatePicker/TimeOnlyPicker.d.ts.map +1 -1
- package/dist/Components/DatePicker/TimeOnlyPicker.js +3 -1
- package/dist/Components/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Components/Drawer/Drawer.js +4 -1
- package/dist/Components/Dropdown/DropDown.js +5 -5
- package/dist/Components/Editor/Editor.d.ts.map +1 -1
- package/dist/Components/Editor/Editor.js +32 -2
- package/dist/Components/Editor/joditThemeVars.d.ts +21 -0
- package/dist/Components/Editor/joditThemeVars.d.ts.map +1 -0
- package/dist/Components/Editor/joditThemeVars.js +70 -0
- package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.d.ts.map +1 -1
- package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +5 -1
- package/dist/Components/EmptyState/EmptyState.js +3 -3
- package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts.map +1 -1
- package/dist/Components/FieldSelectModal/FieldSelectModal.js +4 -2
- package/dist/Components/FilePreview/FilePreview.d.ts.map +1 -1
- package/dist/Components/FilePreview/FilePreview.js +7 -1
- package/dist/Components/FileUpload/FileUpload.js +4 -4
- package/dist/Components/FileUploader/FileUploader.d.ts.map +1 -1
- package/dist/Components/FileUploader/FileUploader.js +7 -2
- package/dist/Components/FilterSidebar/FilterSidebar.d.ts.map +1 -1
- package/dist/Components/FilterSidebar/FilterSidebar.js +166 -142
- package/dist/Components/FilterSidebar/filterHoverStyle.d.ts +12 -0
- package/dist/Components/FilterSidebar/filterHoverStyle.d.ts.map +1 -0
- package/dist/Components/FilterSidebar/filterHoverStyle.js +14 -0
- package/dist/Components/Form/FormWrapper.js +2 -2
- package/dist/Components/Header/Header.d.ts +17 -0
- package/dist/Components/Header/Header.d.ts.map +1 -1
- package/dist/Components/Header/Header.js +34 -6
- package/dist/Components/Header/HeaderActions.d.ts.map +1 -1
- package/dist/Components/Header/HeaderActions.js +3 -2
- package/dist/Components/Header/components/desktopMenu.d.ts.map +1 -1
- package/dist/Components/Header/components/desktopMenu.js +21 -5
- package/dist/Components/Input/Input/Input.d.ts.map +1 -1
- package/dist/Components/Input/Input/Input.js +6 -2
- package/dist/Components/Input/Switch/InputSwitch.d.ts.map +1 -1
- package/dist/Components/Input/Switch/InputSwitch.js +4 -2
- package/dist/Components/Input/TextInput.styles.d.ts.map +1 -1
- package/dist/Components/Input/TextInput.styles.js +6 -1
- package/dist/Components/InputTextArea/InputTextArea.style.d.ts.map +1 -1
- package/dist/Components/InputTextArea/InputTextArea.style.js +4 -1
- package/dist/Components/KanbanBoard/AccountCard.js +4 -4
- package/dist/Components/LazyWrapper/LazyWrapper.js +1 -2
- package/dist/Components/Modal/Modal.d.ts.map +1 -1
- package/dist/Components/Modal/Modal.js +4 -1
- package/dist/Components/MoreItems/MoreItems.d.ts.map +1 -1
- package/dist/Components/MoreItems/MoreItems.js +10 -4
- package/dist/Components/MultiSelect/MultiSelect.d.ts.map +1 -1
- package/dist/Components/MultiSelect/MultiSelect.js +5 -2
- package/dist/Components/NavigationBar/NavigationBar.d.ts.map +1 -1
- package/dist/Components/NavigationBar/NavigationBar.js +8 -2
- package/dist/Components/NoteTextArea/NoteTextArea.d.ts.map +1 -1
- package/dist/Components/NoteTextArea/NoteTextArea.js +5 -2
- package/dist/Components/Notification/Notification.d.ts.map +1 -1
- package/dist/Components/Notification/Notification.js +9 -5
- package/dist/Components/NumberInput/NumberInput.styles.d.ts.map +1 -1
- package/dist/Components/NumberInput/NumberInput.styles.js +4 -1
- package/dist/Components/OrgSwitcher/OrgSwitcher.d.ts.map +1 -1
- package/dist/Components/OrgSwitcher/OrgSwitcher.js +14 -7
- package/dist/Components/OrganizationDetails/CreateOrgModal.d.ts.map +1 -1
- package/dist/Components/OrganizationDetails/CreateOrgModal.js +1 -1
- package/dist/Components/OrganizationDetails/DeleteOrgModal.js +2 -2
- package/dist/Components/OrganizationDetails/OrganizationDetails.js +11 -11
- package/dist/Components/PdfViewer/PdfViewer.js +1 -2
- package/dist/Components/PinInput/PinInput.d.ts.map +1 -1
- package/dist/Components/PinInput/PinInput.js +5 -1
- package/dist/Components/PinInputs/PinInputs.d.ts.map +1 -1
- package/dist/Components/PinInputs/PinInputs.js +3 -1
- package/dist/Components/ProductCard/ProductCard.js +1 -1
- package/dist/Components/ProductCard/ProductPrice.d.ts.map +1 -1
- package/dist/Components/ProductCard/ProductPrice.js +7 -4
- package/dist/Components/ProductCard/ProductReview.d.ts.map +1 -1
- package/dist/Components/ProductCard/ProductReview.js +7 -3
- package/dist/Components/ProductCard/ProductTags.js +1 -1
- package/dist/Components/ProductDetails/ProductDtlPrice.d.ts.map +1 -1
- package/dist/Components/ProductDetails/ProductDtlPrice.js +4 -1
- package/dist/Components/ProductDetails/ProductImageSlider.js +4 -4
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.d.ts.map +1 -1
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +10 -7
- package/dist/Components/Reorder/Reorder.js +2 -1
- package/dist/Components/RolesPermission/DeleteRoleModal.d.ts.map +1 -1
- package/dist/Components/RolesPermission/DeleteRoleModal.js +4 -2
- package/dist/Components/RolesPermission/RolesPermission.js +6 -6
- package/dist/Components/SearchSelect/SearchSelect.d.ts.map +1 -1
- package/dist/Components/SearchSelect/SearchSelect.js +4 -4
- package/dist/Components/Select/Select.styles.d.ts.map +1 -1
- package/dist/Components/Select/Select.styles.js +4 -1
- package/dist/Components/SelectSearch/SelectSearch.d.ts.map +1 -1
- package/dist/Components/SelectSearch/SelectSearch.js +5 -3
- package/dist/Components/SideBar/SecondaryBar.d.ts.map +1 -1
- package/dist/Components/SideBar/SecondaryBar.js +14 -3
- package/dist/Components/SideBar/SideBar.d.ts.map +1 -1
- package/dist/Components/SideBar/SideBar.js +18 -4
- package/dist/Components/SideBar/components/MenuItemBox.d.ts.map +1 -1
- package/dist/Components/SideBar/components/MenuItemBox.js +13 -9
- package/dist/Components/SideBar/components/MenuPopoverContent.d.ts.map +1 -1
- package/dist/Components/SideBar/components/MenuPopoverContent.js +7 -2
- package/dist/Components/SideBar/sidebarAccentColors.d.ts +21 -0
- package/dist/Components/SideBar/sidebarAccentColors.d.ts.map +1 -0
- package/dist/Components/SideBar/sidebarAccentColors.js +36 -0
- package/dist/Components/SignInActivityTable/SignInActivityTable.d.ts.map +1 -1
- package/dist/Components/SignInActivityTable/SignInActivityTable.js +7 -6
- package/dist/Components/StageProgress/StageProgress.d.ts.map +1 -1
- package/dist/Components/StageProgress/StageProgress.js +9 -4
- package/dist/Components/StageProgress/StageProgressProps.d.ts.map +1 -1
- package/dist/Components/StageProgress/StageProgressProps.js +13 -4
- package/dist/Components/StageProgress/StepperStage.js +1 -1
- package/dist/Components/Switch/Switch.d.ts.map +1 -1
- package/dist/Components/Switch/Switch.js +5 -3
- package/dist/Components/Table/Table.d.ts.map +1 -1
- package/dist/Components/Table/Table.js +9 -9
- package/dist/Components/Table/TableProps.d.ts +1 -0
- package/dist/Components/Table/TableProps.d.ts.map +1 -1
- package/dist/Components/Table/components/HeaderActions.d.ts.map +1 -1
- package/dist/Components/Table/components/HeaderActions.js +2 -1
- package/dist/Components/Table/components/TableActions.js +1 -1
- package/dist/Components/Table/components/TableBody.d.ts.map +1 -1
- package/dist/Components/Table/components/TableBody.js +21 -15
- package/dist/Components/Table/components/TableHeader.d.ts.map +1 -1
- package/dist/Components/Table/components/TableHeader.js +7 -4
- package/dist/Components/Table/components/tableRowHoverStyle.d.ts +13 -0
- package/dist/Components/Table/components/tableRowHoverStyle.d.ts.map +1 -0
- package/dist/Components/Table/components/tableRowHoverStyle.js +26 -0
- package/dist/Components/Table/filters/CompactSelect.d.ts.map +1 -1
- package/dist/Components/Table/filters/CompactSelect.js +4 -1
- package/dist/Components/Table/filters/LeftFilterPane.d.ts.map +1 -1
- package/dist/Components/Table/filters/LeftFilterPane.js +5 -4
- package/dist/Components/Tag/Tag.styles.d.ts.map +1 -1
- package/dist/Components/Tag/Tag.styles.js +21 -8
- package/dist/Components/Timeline/Timeline.d.ts.map +1 -1
- package/dist/Components/Timeline/Timeline.js +18 -17
- package/dist/Components/Toaster/Toaster.d.ts.map +1 -1
- package/dist/Components/Toaster/Toaster.js +8 -5
- package/dist/Components/Toggle/TableToggle.js +2 -2
- package/dist/Components/ToolTip/ToolTip.d.ts.map +1 -1
- package/dist/Components/ToolTip/ToolTip.js +14 -2
- package/dist/Components/Trail/EditableCell.js +1 -1
- package/dist/Components/UpgradeButton/UpgradeButton.d.ts.map +1 -1
- package/dist/Components/UpgradeButton/UpgradeButton.js +9 -4
- package/dist/Components/UserDetails/AddUserModal.d.ts.map +1 -1
- package/dist/Components/UserDetails/AddUserModal.js +1 -1
- package/dist/Components/UserDetails/ChangeRoleModal.js +2 -2
- package/dist/Components/UserDetails/DeactivateConfirmModal.d.ts.map +1 -1
- package/dist/Components/UserDetails/DeactivateConfirmModal.js +5 -2
- package/dist/Components/UserDetails/UserDetails.d.ts.map +1 -1
- package/dist/Components/UserDetails/UserDetails.js +15 -8
- package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.d.ts.map +1 -1
- package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +3 -1
- package/dist/Components/WorkspaceWindow/WorkspaceWindow.d.ts.map +1 -1
- package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +5 -1
- package/dist/Theme/chakra/common.web.d.ts +171 -0
- package/dist/Theme/chakra/common.web.d.ts.map +1 -0
- package/dist/Theme/chakra/common.web.js +21 -0
- package/dist/Theme/chakra/componentStyles.d.ts +13 -0
- package/dist/Theme/chakra/componentStyles.d.ts.map +1 -0
- package/dist/Theme/chakra/componentStyles.js +88 -0
- package/dist/Theme/chakra/createBrandTheme.d.ts +18 -0
- package/dist/Theme/chakra/createBrandTheme.d.ts.map +1 -0
- package/dist/Theme/chakra/createBrandTheme.js +78 -0
- package/dist/Theme/chakra/fonts.web.d.ts +42 -0
- package/dist/Theme/chakra/fonts.web.d.ts.map +1 -0
- package/dist/Theme/chakra/fonts.web.js +15 -0
- package/dist/Theme/index.d.ts +29 -8
- package/dist/Theme/index.d.ts.map +1 -1
- package/dist/Theme/index.js +54 -22
- package/dist/Theme/provider/PixelizeThemeProvider.d.ts +36 -0
- package/dist/Theme/provider/PixelizeThemeProvider.d.ts.map +1 -0
- package/dist/Theme/provider/PixelizeThemeProvider.js +91 -0
- package/dist/Theme/provider/ThemeSwitcher.d.ts +8 -0
- package/dist/Theme/provider/ThemeSwitcher.d.ts.map +1 -0
- package/dist/Theme/provider/ThemeSwitcher.js +99 -0
- package/dist/Theme/provider/colorModeStorage.d.ts +10 -0
- package/dist/Theme/provider/colorModeStorage.d.ts.map +1 -0
- package/dist/Theme/provider/colorModeStorage.js +106 -0
- package/dist/Theme/provider/index.d.ts +6 -0
- package/dist/Theme/provider/index.d.ts.map +1 -0
- package/dist/Theme/provider/index.js +9 -0
- package/dist/Theme/provider/useThemeMode.d.ts +3 -0
- package/dist/Theme/provider/useThemeMode.d.ts.map +1 -0
- package/dist/Theme/provider/useThemeMode.js +13 -0
- package/dist/Theme/themeProps.d.ts +10 -373
- package/dist/Theme/themeProps.d.ts.map +1 -1
- package/dist/Theme/tokens/brands/emerald/palette.dark.d.ts +7 -0
- package/dist/Theme/tokens/brands/emerald/palette.dark.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/emerald/palette.dark.js +13 -0
- package/dist/Theme/tokens/brands/emerald/palette.light.d.ts +375 -0
- package/dist/Theme/tokens/brands/emerald/palette.light.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/emerald/palette.light.js +135 -0
- package/dist/Theme/tokens/brands/index.d.ts +28 -0
- package/dist/Theme/tokens/brands/index.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/index.js +93 -0
- package/dist/Theme/tokens/brands/lavender/palette.dark.d.ts +7 -0
- package/dist/Theme/tokens/brands/lavender/palette.dark.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/lavender/palette.dark.js +13 -0
- package/dist/Theme/tokens/brands/lavender/palette.light.d.ts +375 -0
- package/dist/Theme/tokens/brands/lavender/palette.light.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/lavender/palette.light.js +316 -0
- package/dist/Theme/tokens/brands/meadow/palette.dark.d.ts +7 -0
- package/dist/Theme/tokens/brands/meadow/palette.dark.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/meadow/palette.dark.js +13 -0
- package/dist/Theme/tokens/brands/meadow/palette.light.d.ts +375 -0
- package/dist/Theme/tokens/brands/meadow/palette.light.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/meadow/palette.light.js +133 -0
- package/dist/Theme/tokens/brands/radiant/palette.dark.d.ts +7 -0
- package/dist/Theme/tokens/brands/radiant/palette.dark.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/radiant/palette.dark.js +13 -0
- package/dist/Theme/tokens/brands/radiant/palette.light.d.ts +375 -0
- package/dist/Theme/tokens/brands/radiant/palette.light.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/radiant/palette.light.js +135 -0
- package/dist/Theme/tokens/brands/rosewood/palette.dark.d.ts +7 -0
- package/dist/Theme/tokens/brands/rosewood/palette.dark.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/rosewood/palette.dark.js +13 -0
- package/dist/Theme/tokens/brands/rosewood/palette.light.d.ts +375 -0
- package/dist/Theme/tokens/brands/rosewood/palette.light.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/rosewood/palette.light.js +139 -0
- package/dist/Theme/tokens/brands/skyline/palette.dark.d.ts +7 -0
- package/dist/Theme/tokens/brands/skyline/palette.dark.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/skyline/palette.dark.js +13 -0
- package/dist/Theme/tokens/brands/skyline/palette.light.d.ts +375 -0
- package/dist/Theme/tokens/brands/skyline/palette.light.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/skyline/palette.light.js +133 -0
- package/dist/Theme/tokens/brands/slate/palette.dark.d.ts +7 -0
- package/dist/Theme/tokens/brands/slate/palette.dark.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/slate/palette.dark.js +13 -0
- package/dist/Theme/tokens/brands/slate/palette.light.d.ts +375 -0
- package/dist/Theme/tokens/brands/slate/palette.light.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/slate/palette.light.js +137 -0
- package/dist/Theme/tokens/brands/storefront/palette.dark.d.ts +7 -0
- package/dist/Theme/tokens/brands/storefront/palette.dark.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/storefront/palette.dark.js +13 -0
- package/dist/Theme/tokens/brands/storefront/palette.light.d.ts +375 -0
- package/dist/Theme/tokens/brands/storefront/palette.light.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/storefront/palette.light.js +127 -0
- package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +204 -0
- package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/zinc/palette.dark.js +204 -0
- package/dist/Theme/tokens/brands/zinc/palette.light.d.ts +375 -0
- package/dist/Theme/tokens/brands/zinc/palette.light.d.ts.map +1 -0
- package/dist/Theme/tokens/brands/zinc/palette.light.js +383 -0
- package/dist/Theme/tokens/builders/accentText.d.ts +56 -0
- package/dist/Theme/tokens/builders/accentText.d.ts.map +1 -0
- package/dist/Theme/tokens/builders/accentText.js +92 -0
- package/dist/Theme/tokens/builders/buildBrandTokens.d.ts +16 -0
- package/dist/Theme/tokens/builders/buildBrandTokens.d.ts.map +1 -0
- package/dist/Theme/tokens/builders/buildBrandTokens.js +33 -0
- package/dist/Theme/tokens/builders/buildDarkPalette.d.ts +23 -0
- package/dist/Theme/tokens/builders/buildDarkPalette.d.ts.map +1 -0
- package/dist/Theme/tokens/builders/buildDarkPalette.js +282 -0
- package/dist/Theme/tokens/builders/chartColorsFromTheme.d.ts +17 -0
- package/dist/Theme/tokens/builders/chartColorsFromTheme.d.ts.map +1 -0
- package/dist/Theme/tokens/builders/chartColorsFromTheme.js +26 -0
- package/dist/Theme/tokens/builders/color.d.ts +50 -0
- package/dist/Theme/tokens/builders/color.d.ts.map +1 -0
- package/dist/Theme/tokens/builders/color.js +156 -0
- package/dist/Theme/tokens/builders/index.d.ts +6 -0
- package/dist/Theme/tokens/builders/index.d.ts.map +1 -0
- package/dist/Theme/tokens/builders/index.js +21 -0
- package/dist/Theme/tokens/index.d.ts +15 -0
- package/dist/Theme/tokens/index.d.ts.map +1 -0
- package/dist/Theme/tokens/index.js +30 -0
- package/dist/Theme/tokens/primitives/breakpoints.d.ts +9 -0
- package/dist/Theme/tokens/primitives/breakpoints.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/breakpoints.js +10 -0
- package/dist/Theme/tokens/primitives/index.d.ts +10 -0
- package/dist/Theme/tokens/primitives/index.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/index.js +27 -0
- package/dist/Theme/tokens/primitives/letterSpacings.d.ts +10 -0
- package/dist/Theme/tokens/primitives/letterSpacings.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/letterSpacings.js +11 -0
- package/dist/Theme/tokens/primitives/lineHeights.d.ts +19 -0
- package/dist/Theme/tokens/primitives/lineHeights.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/lineHeights.js +20 -0
- package/dist/Theme/tokens/primitives/radii.d.ts +13 -0
- package/dist/Theme/tokens/primitives/radii.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/radii.js +14 -0
- package/dist/Theme/tokens/primitives/shadows.d.ts +16 -0
- package/dist/Theme/tokens/primitives/shadows.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/shadows.js +17 -0
- package/dist/Theme/tokens/primitives/sizes.d.ts +63 -0
- package/dist/Theme/tokens/primitives/sizes.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/sizes.js +39 -0
- package/dist/Theme/tokens/primitives/space.d.ts +34 -0
- package/dist/Theme/tokens/primitives/space.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/space.js +35 -0
- package/dist/Theme/tokens/primitives/typography.d.ts +73 -0
- package/dist/Theme/tokens/primitives/typography.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/typography.js +43 -0
- package/dist/Theme/tokens/primitives/zIndices.d.ts +17 -0
- package/dist/Theme/tokens/primitives/zIndices.d.ts.map +1 -0
- package/dist/Theme/tokens/primitives/zIndices.js +18 -0
- package/dist/Theme/tokens/types.d.ts +116 -0
- package/dist/Theme/tokens/types.d.ts.map +1 -0
- package/dist/Theme/tokens/types.js +8 -0
- package/dist/Utils/table.d.ts +9 -2
- package/dist/Utils/table.d.ts.map +1 -1
- package/dist/Utils/table.js +23 -7
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -1
- package/eslint.config.js +48 -0
- package/index.html +13 -0
- package/package.json +1 -5
- package/vite.config.ts +13 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Data Display
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Tag, Timeline, Reorder, Divider, Trail.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Tag/` — `Tag.tsx`, `TagProps.ts`, `Tag.styles.tsx` (registered in `Theme/componentStyles.ts`)
|
|
10
|
+
- `Timeline/`, `Reorder/`, `Divider/`, `Trail/`
|
|
11
|
+
- Demo: `src/Pages/tag.tsx`
|
|
12
|
+
|
|
13
|
+
## Key rules
|
|
14
|
+
|
|
15
|
+
- Timeline: each event card renders its manual notes from `event.notes` (`TimelineNote[]` — `log_note_id`, `title`, `note`, `attachments[]`, `created_by`, `created_at`). Adding a note is event-scoped via the per-card "Add note" button → `onAddNote(note, title, files, event, index)`; the consumer persists it against `event.logs_id` and re-supplies it back in `event.notes`. Attachments show as links opening `attachment.url`.
|
|
16
|
+
- Timeline notes support edit + delete: hovering a note shows edit/delete icons → `onEditNote(logNoteId, note, title, files, event, index)` (inline `NoteTextArea`) and `onDeleteNote(logNoteId, event, index)` (consumer owns any confirm dialog). Loading props: `addNoteLoading`/`editNoteLoading` keep the editor open with a Save spinner until the request resolves (then auto-close); `deletingNoteId` shows a spinner on the note being deleted. With no loading props wired, the add editor closes immediately on submit (back-compat).
|
|
17
|
+
- Trail includes editable cell demos
|
|
18
|
+
- Tag styling lives in `Tag.styles.tsx` (Chakra component theme), not hardcoded in `Tag.tsx`
|
|
19
|
+
- Tag sizes: `xs | sm | md | lg`; variants: `solid | outline | subtle`
|
|
20
|
+
- Tag colors are token-driven from the active theme via `colorScheme` (brand `primary/secondary/tertiary` + global scales); palette resolution falls back to `gray` so a missing scale never throws
|
|
21
|
+
- Tag `solid` variant label color is now `onFilled(fill, white, black)` (per state: base/hover/active), not a hardcoded `white` — picks whichever of white/black clears WCAG AA against that swatch, so it stays readable on light brand fills too
|
|
22
|
+
|
|
23
|
+
## WCAG / dark-mode pass (this session)
|
|
24
|
+
|
|
25
|
+
- **Tag.styles.tsx** — `solid` variant's foreground swapped from hardcoded `theme.colors?.white` to
|
|
26
|
+
`onFilled(fill, white, black)`, computed per bg (base `500`, hover `600`, active `700`); verified
|
|
27
|
+
against WCAG AA.
|
|
28
|
+
- **Trail/EditableCell.tsx** — `priority` menu's `MenuButton` had a real hover-contrast fix: `bg`
|
|
29
|
+
`teal.500`/`color white` → `bg="teal.50"` / `color="teal.900"` (+ hover/active states). **Known
|
|
30
|
+
gap:** this uses raw Chakra `teal.*` literals, not `useCustomTheme()` tokens, so it won't track
|
|
31
|
+
brand hue or dark mode — needs a follow-up token pass.
|
|
32
|
+
- **Known gap (not fixed this pass):** the same `MenuList`/`MenuItem` still has no `bg=`/
|
|
33
|
+
`sx={{ "--menu-bg": ... }}` override, so Chakra's `--menu-bg` CSS var still resolves to its
|
|
34
|
+
hardcoded light-mode white regardless of this app's active dark mode — same root-cause bug
|
|
35
|
+
already fixed this session in `ButtonGroupIcon` (buttons module) and `NavigationBar`
|
|
36
|
+
(layout-navigation module). Deliberately deferred, not overlooked.
|
|
37
|
+
|
|
38
|
+
## Dark mode
|
|
39
|
+
|
|
40
|
+
- Timeline takes every color from `useCustomTheme()`, so it follows whichever palette the theme carries. Dark works by swapping the palette — there is no `_dark`/`semanticTokens` layer, so a hardcoded value would stay light forever.
|
|
41
|
+
- White surfaces use `colors.background[50]`, **not** `colors.white` — `white` is a *foreground* token (label on a filled button) and stays white in dark. Covers Timeline's event card, date chip, and the node ring that punches each node out of the spine. (Timeline's inline `NoteTextArea` is owned by `inputs-basic`.)
|
|
42
|
+
- Timeline's remaining `?? "#fff"` fallbacks are defensive only — every brand palette defines `background[50]` (dark included, derived by `buildDarkPalette`).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Feedback
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Loading, Skeletons, ProgressBar, Notification, FeedbackForm.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Loading/`, `Skeletons/`, `ProgressBar/`, `Notification/`, `FeedbackForm/`
|
|
10
|
+
- `src/services/feedback.ts`
|
|
11
|
+
|
|
12
|
+
## Key rules
|
|
13
|
+
|
|
14
|
+
- FeedbackForm may POST to account API in consumer apps — keep props generic
|
|
15
|
+
|
|
16
|
+
## Dark mode
|
|
17
|
+
|
|
18
|
+
- **Notification**: default `bgColor` switched `theme.colors.white` → `theme.colors.background[50]`
|
|
19
|
+
— `white` is a foreground token (label ink, stays white in dark) and was being used as the card
|
|
20
|
+
surface; `background[50]` is the correct dark-mode-aware white-surface token. Real bug fix (was
|
|
21
|
+
forcing a white card in dark mode), not a plain refactor. Consumers passing `colors.bgColor`
|
|
22
|
+
explicitly are unaffected.
|
|
23
|
+
- **`warningColor`/`errorColor`/`successColor` object-vs-string bug (QA-adjacent, real correctness
|
|
24
|
+
bug, not WCAG):** `NotificationProps` types these as hex strings, but the defaults were an
|
|
25
|
+
un-indexed whole `ColorScale` object (`theme.colors.semantic.warning` instead of
|
|
26
|
+
`theme.colors.semantic.warning[500]`) — Chakra silently can't render an object as a `bg=` color,
|
|
27
|
+
so the default (no-override) case was broken. Fixed by indexing `[500]` on all three defaults.
|
|
28
|
+
- **Time-elapsed icon/label AA gap:** the "time ago" `Icon`/`Text` defaulted to `orange.400`/
|
|
29
|
+
`orange.500`, which fail AA (~1.9–2.2:1) against `bgColor` in every brand — same class of bug as
|
|
30
|
+
the `error`/`red[500]` gap (theme module). Fixed by routing both through
|
|
31
|
+
`accentTextOnCanvas(theme.colors.orange, bgColor)` (`Theme/tokens/builders/accentText`) instead
|
|
32
|
+
of a fixed rung.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Basic Inputs
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
TextInput, PhoneNumberInput, InputTextArea, NoteTextArea, NumberInput, PinInput, PinInputs.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Input/`, `InputTextArea/`, `NoteTextArea/`, `NumberInput/`, `PinInput/`, `PinInputs/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- InputSwitch in `Input/Switch/`
|
|
14
|
+
|
|
15
|
+
## Dark mode
|
|
16
|
+
|
|
17
|
+
- No hex literals remain — every field follows the active palette, but by three paths, not one:
|
|
18
|
+
`useCustomTheme()` (TextInput, PhoneNumberInput, NoteTextArea, PinInput, InputSwitch), Chakra
|
|
19
|
+
`useTheme()` (Input/Input, PinInputs), and `componentStyles` `({ theme })` fns (InputTextArea,
|
|
20
|
+
NumberInput — no theme hook at all). The `?? "gray.300"` fallbacks in `*.styles.ts` are token
|
|
21
|
+
refs, not literals: `createBrandTheme` sets `colors: palette`, so they resolve against the
|
|
22
|
+
swapped palette.
|
|
23
|
+
- `NoteTextArea` was the only migration here: its 4 white surfaces moved `colors.white` →
|
|
24
|
+
`colors.background[50]`. `colors.white` is a **foreground** token (a label on a filled button)
|
|
25
|
+
and stays white in dark; a white *surface* needs `background[50]` (identical `#ffffff` in light).
|
|
26
|
+
- `InputSwitch` layers `useColorModeValue` over the palette swap — it picks a different *rung*
|
|
27
|
+
(`primary[500]`→`[300]`, `gray[300]`→`[600]`) of the already-dark palette, not a second palette.
|
|
28
|
+
|
|
29
|
+
## Border contrast bump ([500]/[700] → [800])
|
|
30
|
+
|
|
31
|
+
- Follow-up fix: `boxborder` at `[500]`/`[700]` only cleared canvas-level surfaces (main/base)
|
|
32
|
+
and failed WCAG 1.4.11 (control boundary, >=3.0) against `muted`, the lightest named surface
|
|
33
|
+
(2.41-2.72). All seven fields — `Input/Input.tsx`, `TextInput.styles.ts`,
|
|
34
|
+
`InputTextArea.style.tsx`, `NumberInput.styles.ts`, `PinInput.tsx`, `PinInputs.tsx`,
|
|
35
|
+
`NoteTextArea.tsx` — now use `boxborder?.[800]` for the resting/default border, clearing all
|
|
36
|
+
12 named surfaces (3.44-3.90) in both modes.
|
|
37
|
+
- `Input/Input.tsx` also swapped its label/accent color from `colors.secondary?.[500]` to
|
|
38
|
+
`accentTextOnCanvas(colors.secondary, colors.backgroundColor?.main)` — relies on the shared
|
|
39
|
+
`accentText.ts` guard (Theme module) for safety when rendered without a full Pixelize theme;
|
|
40
|
+
no separate fix was needed in this file.
|
|
41
|
+
- `Input/Input.tsx` is **not** exported from `src/index.ts` (internal, used only by
|
|
42
|
+
`src/Pages/TInput.tsx`) — low external impact.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Date & Files
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
ThemeDatePicker (Single/Range/Time variants), FileUpload, FileUploader, Editor (jodit-react).
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/DatePicker/` — `ThemeDatePicker.tsx` (public entry), `SingleDatePicker.tsx`, `RangeDatePicker.tsx`, `TimePicker.tsx`, `TimeOnlyPicker.tsx`, `CalendarPanel.tsx`
|
|
10
|
+
- `src/Components/FileUpload/`, `FileUploader/`, `Editor/`
|
|
11
|
+
|
|
12
|
+
## Key rules
|
|
13
|
+
|
|
14
|
+
- DatePicker themed for brand tokens — `CalendarPanel` reads every color from `useCustomTheme()` (no hex literals), so it follows the active light/dark palette automatically.
|
|
15
|
+
- The month/year `<select>` uses `colors.background[50]`, not `colors.white`: it is a white *surface* and must darken in dark mode. The one remaining `colors.white` (day label on the filled `primary[500]` circle — selected / range start / range end) is a *foreground* and correctly stays white. Don't "fix" it.
|
|
16
|
+
- **Calendar/time popover surface bug (user-reported, blocking):** `SingleDatePicker.tsx`, `RangeDatePicker.tsx`, `TimeOnlyPicker.tsx`, and the legacy `DatePicker.tsx` (still reachable — consumed directly by `Table/filters/LeftFilterPane.tsx`, not just via the unused commented-out playground import) each rendered a `PopoverContent` with no explicit `bg=` — the same Chakra-hardcoded-`colors.white`-behind-`_dark` bug as `Modal`/`AlertDialog`/`Drawer` (overlays module). Because `CalendarPanel`'s day/weekday text (`text[700]`/`gray[400]`/`gray[500]`) is computed against the *intended* dark canvas, the panel rendered on Chakra's un-migrated white default while its text was tuned for a dark background — producing exactly the washed-out, near-invisible day numbers reported. Fixed with `bg={theme.colors.background[50]}` on all four `PopoverContent`s (`TimeOnlyPicker.tsx` didn't previously call `useCustomTheme()` at all — added the hook). Verified live via Playwright across all four variants (date-only, date+time, range, time-only).
|
|
17
|
+
- **FileUploader (QA-caught)** — its file-count and "Click here" text hardcoded `color="blue.500"`/
|
|
18
|
+
`"blue.400"`, which fail AA against the component's canvas (same class as the Notification
|
|
19
|
+
orange gap). Fixed via `accentTextOnCanvas(colors.blue, colors.backgroundColor?.main ?? "#ffffff")`
|
|
20
|
+
(`Theme/tokens/builders/accentText`), reused for both spots. Rest of the component (drag/drop
|
|
21
|
+
chrome, file-row chips) is still Chakra scale literals (`gray.*`), not migrated to
|
|
22
|
+
`useCustomTheme()` — out of scope for this pass since those are already dark-aware Chakra
|
|
23
|
+
literals (see table/account-management MODULE.md for why plain `gray.*` literals already track
|
|
24
|
+
the swapped palette).
|
|
25
|
+
- Editor is now theme-aware: it reads `theme.colors.backgroundColor?.main` (with a `"#ffffff"` fallback added after a code-review-caught crash risk) via `isDarkCanvas()` to switch Jodit's own internal `dark`/`default` editor theme — it does not restyle Jodit itself, just picks which built-in Jodit theme renders. FileUpload does use theme (`useCustomTheme()`: `gray`, `red`, `blue`, `background`, `secondary.opacity`) but was not migrated — **known gap**: `FileUpload.tsx:153` paints the uploaded-file row `bg={colors?.white}`, a *surface* on the foreground token, so it stays white in dark mode; should be `background[50]`.
|
|
26
|
+
- **Editor dark-mode "not black" bug (user-reported, fixed):** toggling Jodit's `config.theme` between `"dark"`/`"default"` only switches which of Jodit's OWN CSS selectors apply (`.jodit_theme_dark`, 180+ occurrences in `jodit.css`) — those selectors are still driven by Jodit's own hardcoded CSS custom properties (`--jd-dark-background-color: #575757`, a mid-gray, not black; `--jd-color-border-selected: #1e88e5`, generic blue), never fed this library's palette. Fixed in `Editor.tsx` by wrapping `<JoditEditor>` in a `<Box sx={...}>` carrying `getJoditThemeVars(theme.colors, isDark)` (`joditThemeVars.ts`) — inline CSS custom properties, scoped to this instance only (no `:root` leak onto other Jodit instances). Mapping: canvas/toolbar → `backgroundColor.main`/`.secondary`, ink → `text[900]`, icons → `text[700]`, hover/select-bg → `backgroundColor.muted`, border → `boxborder[500]`, accent → `primary[500]` — reusing the SAME role-stable tokens in both modes (`background[50]`/`text[900]` etc. already flip lightness internally per `buildDarkPalette.ts`, so no per-mode branching on VALUES, only on the `--jd-color-*` vs `--jd-dark-*` variable NAMES Jodit's default vs dark theme actually reads). Verified via Playwright: before showed `rgb(87,87,87)` (`#575757`, Jodit's default) on the canvas/toolbar in dark mode; after shows the brand's real near-black surface. Regression tests: `joditThemeVars.test.ts` (contrast + non-default-value assertions, lavender + rosewood).
|
|
27
|
+
- **Editor popup/dialog portal gap (user-reported follow-up on the fix above, fixed):** the "Known gap" this section used to note — Jodit appends dialogs and toolbar-dropdown popups (search & replace, image/link properties, font-size list, paragraph format, …) directly to `document.body` (`Dialog.destination` / `getPopupViewRoot` in jodit core), outside the CSS-variable wrapper's DOM subtree, so they kept rendering in Jodit's default (light, unthemed) styling even in dark mode — was reported again as "hovering [in the] editor is not following WCAG standards." Traced via `node_modules/jodit/es2021/jodit.css`: the main toolbar's own `:hover` rule (`.jodit_theme_dark .jodit-toolbar-button:hover`) already clears AA/AA-non-text comfortably once `--jd-dark-background-color`/`--jd-dark-icon-color` are mapped (verified numerically — computed contrast ~10:1+ across all 8 brands, not touched), so the actual gap was specifically the portalled popups never inheriting `themeVars` at all. Fixed by wiring Jodit's own `config.popupRoot` (a supported, documented option — `node_modules/jodit/esm/config.d.ts`: `popupRoot: Nullable<HTMLElement>`) to the wrapper `<Box>`'s own DOM node via a callback ref (`useState<HTMLElement | null>` + `ref={setPopupRoot}` on the `Box`), so `Dialog.destination` resolves to the themed wrapper instead of `document.body` and every popup/dialog now inherits the same CSS custom properties as the toolbar/canvas. Regression test: `Editor.test.tsx` (mocks `jodit-react` to assert `config.popupRoot` is a real DOM node, not `null`/`document.body`). One TS gotcha hit while wiring this: adding a literal `popupRoot` key alongside `...config` (typed `DeepPartial<Config>`, Jodit's huge recursive config type) triggered `TS2589: Type instantiation is excessively deep` — worked around by spreading `config` as `Record<string, unknown>` before the final `as EditorProps["config"]` assertion, since the plain literal-plus-spread pattern is otherwise unaffected (see comment in `Editor.tsx`).
|
|
28
|
+
- **Editor dialog inputs/search-panel/button-hover still unthemed (QA follow-up round, fixed):** the
|
|
29
|
+
`popupRoot` fix above got popups into the themed DOM subtree, but 3 more Jodit CSS variables were
|
|
30
|
+
still unmapped: `--jd-color-panel` (search & replace box background — only set in the light
|
|
31
|
+
branch, so dark mode fell to Jodit's own `#f9f9f9`, a near-white panel), `--jd-color-white` /
|
|
32
|
+
`--jd-color-gray` (`.jodit-ui-input__input` / `.jodit-ui-select__input` background — Jodit's own
|
|
33
|
+
raw white default, unmapped in either mode; `-gray` is what the `_theme_dark`-suffixed variant
|
|
34
|
+
reads instead of `-white`, and dialogs don't reliably get that modifier class). Traced each via
|
|
35
|
+
`node_modules/jodit/es2021/jodit.css` line-by-line before touching anything. Also found (via a
|
|
36
|
+
throwaway jest contrast computation, not assumed): the toolbar/dialog-button hover fill and the
|
|
37
|
+
`.jodit-select`/`.jodit-input` background both already mapped to `--jd-dark-background-ligher:
|
|
38
|
+
colors.backgroundColor.muted` — computed at ~1.3:1 against the canvas, a near-miss that had
|
|
39
|
+
actually shipped (both values sit within ~11 lightness points of each other down near L7-18, where
|
|
40
|
+
WCAG contrast collapses non-linearly) — this was the QA-reported "Insert button illegible on
|
|
41
|
+
hover." Fixed in `joditThemeVars.ts`: `--jd-color-panel` moved into `shared` (role-stable, same
|
|
42
|
+
`backgroundColor.secondary` expression already correct for light); `--jd-color-white:
|
|
43
|
+
background[50]` added to `shared`; `--jd-color-gray: background[50]` added to the dark branch;
|
|
44
|
+
`--jd-dark-background-ligher` changed to `background[900]` (this palette's dark-mode "bright
|
|
45
|
+
highlight" rung, ~9.7-10.7:1 against the canvas across brands — verified before applying, not
|
|
46
|
+
guessed). Confirmed via `node_modules/jodit/es2021/jodit.css` that `.jodit_theme_dark` /
|
|
47
|
+
`.jodit-dialog_theme_dark` already hardcode `--jd-color-border: #6b6b6b` themselves (a Jodit-owned
|
|
48
|
+
override we can't/don't need to touch), so this fix only had to cover panel/input backgrounds and
|
|
49
|
+
the hover fill. Regression tests added to `joditThemeVars.test.ts`.
|
|
50
|
+
- Masked-input blur must not discard a valid value. `isMaskComplete()` only recognises numeric/`a` tokens, so text month formats (e.g. `MMM d, yyyy`) never look "complete" — `handleInputBlur`/`handleInputFocus` therefore keep any value that `parseValidatedValue()` can parse to a valid date, and only `requestClose(null)` (clear) on empty/unparseable input. The Clear button and emptied-mask paths remain the explicit ways to clear. Regression: `SingleDatePicker.blur.test.tsx`.
|
|
51
|
+
|
|
52
|
+
## Migration notes
|
|
53
|
+
|
|
54
|
+
- DatePicker public export moved: `DatePicker/DatePicker` → `DatePicker/ThemeDatePicker` (exported as `DatePicker` from `src/index.ts`)
|
|
55
|
+
- Split into Single/Range/Time picker variants under the same folder
|
|
56
|
+
- Picker tests build their Chakra theme from `Theme/tokens/brands/lavender/palette.light` (was `Theme/Default/palette`)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Select & Search
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Select, SearchSelect, SelectSearch, MultiSelect, Dropdown, Search.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Select/`, `SearchSelect/`, `SelectSearch/`, `MultiSelect/`, `Dropdown/`, `Search/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- SearchSelect has performance tests; virtualize for large lists
|
|
14
|
+
- Dropdown and SearchSelect main options menu are portaled to `<body>` (`position: fixed`) and clamp to the viewport — right-align/flip above when near edges
|
|
15
|
+
- `insideSelect` prefix: mutually exclusive with main dropdown; menu uses `position: fixed`, flips above/below based on viewport space, and re-anchors on scroll/resize; supports `placeholder` when no value
|
|
16
|
+
|
|
17
|
+
## Dark mode
|
|
18
|
+
|
|
19
|
+
SearchSelect and SelectSearch source every color from `useCustomTheme()` or a palette-backed Chakra scale literal — no hex in source — so they follow the active light/dark palette.
|
|
20
|
+
|
|
21
|
+
- Menu/panel surfaces use `colors.background[50]`, never `colors.white` — `white` is a foreground token (label on a filled button) and stays white in dark. The portaled menus are no exception: a portal escapes the DOM, not the theme
|
|
22
|
+
- Chakra scale literals (`gray.300`) are palette-backed — the Chakra theme's `colors` *is* the palette — but the literal `bg="white"` hits the same foreground-token trap as `colors.white`
|
|
23
|
+
- Lucide icons default to `currentColor` (a bare `<ChevronDown />` inherits the wrapper's `color`), but an explicit `color` prop is a raw CSS string — a scale name like `"gray.500"` won't resolve there; pass a token value
|
|
24
|
+
- Known gap: SearchSelect's "Remove All" X passes `colors.black`, which is untouched in dark, on a `gray[50]` control (L10 in dark) — near-invisible; needs a text token
|
|
25
|
+
- Control borders (`MultiSelect`, `Select.styles`, `SelectSearch`) bumped `boxborder` step [500]/[700] to **[800]**: WCAG 1.4.11 needs a 3:1 contrast ratio against any named surface up to `muted` (lightest) — [500]/[700] failed there, [800] clears all with margin (see inline comments at each call site)
|
|
26
|
+
- Known behavior change: SearchSelect's inside-select placeholder text dropped the `theme.colors.placeholder?.[500] ?? theme.colors.gray[500]` fallback for a flat `theme.colors.gray[500]` — still a valid token, but only the lavender brand defines a distinct `placeholder` scale (other brands inherit it via spread), so lavender's placeholder text loses its tint and now renders plain gray
|
|
27
|
+
- SearchSelect's "Remove All" tooltip dropped its explicit `bg`/`color` overrides, now rendering with ToolTip's own default styling instead of a forced `gray[600]`/`white`
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Toggles
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Checkbox, RadioButton, Switch, Slider, Toggle/TableToggle.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Checkbox/`, `RadioButton/`, `Switch/`, `Slider/`, `Toggle/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- RadioButtonGroup for grouped radios
|
|
14
|
+
|
|
15
|
+
## Dark-mode / contrast fixes
|
|
16
|
+
|
|
17
|
+
- `Checkbox`: label tooltip now uses the shared `ToolTip` component instead of raw Chakra `Tooltip` with hardcoded `gray[600]`/`white` — `ToolTip` resolves a dark-mode-aware surface itself.
|
|
18
|
+
- `Toggle/TableToggle`: selected-tab label color changed from `theme.colors.black` (mode-invariant) to `theme.colors.text[900]` (mode-adaptive). Real bug fix: `black` was rendered on `background[50]`, which is near-black in dark mode — black-on-near-black was invisible; `text[900]` flips to near-white in dark mode.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Kanban
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
KanbanBoard with drag-and-drop columns and KanbanActions.
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/KanbanBoard/`, `KanbanActions/`
|
|
10
|
+
- Tests: `KanbanBoard.test.tsx`, `AccountCard.test.tsx`
|
|
11
|
+
|
|
12
|
+
## Key rules
|
|
13
|
+
|
|
14
|
+
- Uses @hello-pangea/dnd; MeasuredItem for layout
|
|
15
|
+
|
|
16
|
+
## Dark mode
|
|
17
|
+
|
|
18
|
+
- **KanbanBoard.test.tsx** mocked theme extended with a full `secondary` ramp (`600`-`900`) and
|
|
19
|
+
`backgroundColor.main`, for parity with other components' test mocks in this refactor pass.
|
|
20
|
+
**Known gap:** neither field is actually read by `KanbanBoard.tsx` or its subcomponents today —
|
|
21
|
+
this is inert test-fixture parity, not new dark-mode test coverage. KanbanBoard itself was not
|
|
22
|
+
touched in this pass.
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# Layout & Navigation
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Accordion, Breadcrumbs, NavigationBar, SideBar, Header, Drawer, FilterSidebar,
|
|
6
|
+
WorkspaceWindow.
|
|
7
|
+
|
|
8
|
+
## Key paths
|
|
9
|
+
|
|
10
|
+
- `src/Components/Accordion/`, `Breadcrumbs/`, `NavigationBar/`, `SideBar/`, `Header/`, `Drawer/`, `FilterSidebar/`, `WorkspaceWindow/`
|
|
11
|
+
|
|
12
|
+
## Key rules
|
|
13
|
+
|
|
14
|
+
- SideBar/Header have sub-`components/` folders
|
|
15
|
+
- Used by crm-frontend, account-frontend sidebars
|
|
16
|
+
|
|
17
|
+
## Dark mode
|
|
18
|
+
|
|
19
|
+
FilterSidebar, WorkspaceWindow and WorkspaceTrayPreview read surfaces from
|
|
20
|
+
`useCustomTheme()` and follow the active palette. Chakra string tokens (`gray.50`) already
|
|
21
|
+
resolve through the swapped palette — only `white` had to change, because `colors.white` is
|
|
22
|
+
a **foreground** token that stays white in dark. White surfaces are now
|
|
23
|
+
`colors.background[50]` (FilterSidebar thumbs / value bubbles / min-max rows / panel,
|
|
24
|
+
WorkspaceWindow shell, WorkspaceTrayPreview popover).
|
|
25
|
+
|
|
26
|
+
`WorkspaceWindow` calls `useCustomTheme()` **before** its `state === "minimized"` early
|
|
27
|
+
return — after it, hook order would change when the window reopens.
|
|
28
|
+
|
|
29
|
+
### Header, NavigationBar, FilterSidebar — WCAG/dark pass
|
|
30
|
+
|
|
31
|
+
- **Header.tsx** — default (no explicit `colors` prop) styling changed: `bg` now
|
|
32
|
+
`themeColor.sidebar.background[500]` (was `gray[700]`), `color`/`hoverText` now
|
|
33
|
+
`themeColor.white` (was `background[100]`/`text[600]`), `activeBg` now computed via
|
|
34
|
+
`accentTextOnCanvas(themeColor.primary, bg)` (was fixed `primary[400]`), `hoverBg` now
|
|
35
|
+
`sidebar.background[400]` (was `gray[500]`). **Visible behavior change** for any consumer
|
|
36
|
+
not passing an explicit `colors` prop — not just an internal refactor.
|
|
37
|
+
- **Header/HeaderActions.tsx** (the Header's own action bar — distinct from
|
|
38
|
+
`Table/components/HeaderActions.tsx`) — "Edit Layout"/"Create New" label ink now
|
|
39
|
+
`accentTextOnCanvas(colors?.secondary, colors?.backgroundColor?.main)` (was fixed
|
|
40
|
+
`secondary[500]`); its test mock theme expanded with a full `secondary` ramp +
|
|
41
|
+
`backgroundColor.main` to match.
|
|
42
|
+
- **NavigationBar.tsx** — brand text label (`navigationBarText`) ink now
|
|
43
|
+
`accentTextOnCanvas(theme.colors.secondary, theme.colors.backgroundColor.light)` (was fixed
|
|
44
|
+
`secondary[500]`). Its profile/account `MenuList` also sets
|
|
45
|
+
`sx={{ "--menu-bg": theme.colors.backgroundColor.light }}` — same Chakra CSS-var fix as
|
|
46
|
+
`ButtonGroupIcon` (buttons module): Chakra's `MenuItem` baseStyle hardcodes `--menu-bg` to
|
|
47
|
+
white, gated behind `_dark`, which this app's theme-swap dark mode never triggers.
|
|
48
|
+
- **FilterSidebar.tsx** — section-label tooltip swapped from raw Chakra `Tooltip` (hardcoded
|
|
49
|
+
`bg={gray[600]}`/`color={white}`) to the library's `ToolTip` (token-driven); search-input
|
|
50
|
+
`borderColor` now `theme.colors.boxborder?.[800] ?? gray[200]` — plain `gray[200]` fails
|
|
51
|
+
WCAG 1.4.11 (≥3.0 non-text contrast) as a control boundary in dark mode.
|
|
52
|
+
- **desktopMenu.tsx / Header.tsx `activeBg` (QA-caught, blocking)** — `activeBg` was computed via
|
|
53
|
+
`accentTextOnCanvas(themeColor.primary, bg)`, which picks its search direction from the canvas's
|
|
54
|
+
darkness and assumes that always means a dark-mode-shaped scale (50 darkest -> 900 lightest).
|
|
55
|
+
Header's sidebar canvas is always dark regardless of app mode (`buildDarkPalette` leaves `sidebar`
|
|
56
|
+
unchanged), but `primary` still follows the active app mode — in light mode it's light-mode-shaped
|
|
57
|
+
(50 lightest -> 900 darkest), so walking toward 900 walked toward darker, not lighter, landing
|
|
58
|
+
near-black (lavender measured ~1.09 contrast, well under WCAG 1.4.11's 3:1 non-text bar). Since
|
|
59
|
+
this same value drove both the active-tab underline (`borderBottom`) and the submenu row highlight
|
|
60
|
+
(`bg`), and a separate fix removed `activeBg` from *text* color for the identical reason, the
|
|
61
|
+
underline became the only remaining active-state signal — and it was invisible. Fixed with a new
|
|
62
|
+
local `pickActiveAccent` (exported from `Header.tsx`, not added to the shared `accentText.ts` — this
|
|
63
|
+
need is specific to a canvas that never inverts with app mode) that detects the scale's own
|
|
64
|
+
direction from its own data (`primary[50]` vs `primary[900]` luminance) instead of the canvas,
|
|
65
|
+
walking toward whichever end is actually lighter and preferring the rung closest to `[500]` that
|
|
66
|
+
clears 3:1. Verified computationally correct across all 7 brands x both app modes (`Header.test.tsx`).
|
|
67
|
+
The submenu row's label ink also switched from static `text[800]` (tuned for the `background[50]`
|
|
68
|
+
canvas, not the `activeBg` fill the active row switches to) to `onFilled(activeBg, white, black)`,
|
|
69
|
+
which is provably >=4.5 against any fill regardless of which rung `pickActiveAccent` picks.
|
|
70
|
+
- **Drawer.tsx (QA-caught, blocking)** — same `ModalContent` surface bug as `Modal`/`AlertDialog`
|
|
71
|
+
(overlays module): `DrawerContent` had no explicit `bg=`, so it fell through to Chakra's
|
|
72
|
+
hardcoded `colors.white` baseStyle, gated behind a `_dark` this app's theme-swap dark mode
|
|
73
|
+
never triggers. Fixed with `bg={colors?.background?.[50]}`.
|
|
74
|
+
- **FilterSidebar.tsx WCAG pass (Wave D, QA-driven)** — two real AA/graphical-object failures
|
|
75
|
+
found beyond the surface bug above: the min/max price selected-row checkmark icon (`red[600]`
|
|
76
|
+
on its own `red[100]` fill, ≈2.89:1, fails the 3:1 non-text bar) now uses
|
|
77
|
+
`onFilled(theme.colors.red[100], theme.colors.white, theme.colors.black)` (resolves to black,
|
|
78
|
+
≈13.96:1); the star-rating icon's `color`/`fill` (`orange[500]` on `background[50]`, ≈2.22:1)
|
|
79
|
+
now both use `accentTextOnCanvas(theme.colors.orange, <row's actual canvas>)` (resolves to
|
|
80
|
+
`orange[800]`, ≈6.33:1) — the canvas mirrors the row's own `bg` ternary (`red[50]` when that
|
|
81
|
+
rating is the active filter, `background[50]` otherwise; a code-review catch — the first pass
|
|
82
|
+
always computed against `background[50]` even on the selected row). All other `red`/`orange`
|
|
83
|
+
usages in this file (row backgrounds, `borderLeftColor`, focus border) are decorative/border
|
|
84
|
+
roles and were left unchanged.
|
|
85
|
+
- **Two `PopoverContent`s missed by the same QA pass (code-review catch, same file):** the
|
|
86
|
+
min/max price value-list popovers had no `bg=`, hitting the identical
|
|
87
|
+
Chakra-hardcoded-`colors.white`-behind-`_dark` bug as `Modal`/`AlertDialog`/`Drawer` — just on
|
|
88
|
+
`PopoverContent`'s baseStyle (`var(--popper-bg)`) instead of Modal's. Fixed with
|
|
89
|
+
`bg={theme.colors.background[50]}` on both, same pattern already used for `MoreItems`/
|
|
90
|
+
`OrgSwitcher`/`NavigationBar` popovers elsewhere in the library.
|
|
91
|
+
- **Checkbox/option/popover-row hover invisible in dark mode (QA follow-up round, fixed):** all 5
|
|
92
|
+
`_hover={{ bg: theme.colors.gray[50] }}` spots in this file (min/max price rows, rating rows, the
|
|
93
|
+
filter-option checkbox row, the accordion trigger) used `gray[50]`, a pale near-white tint in
|
|
94
|
+
light mode that — once the whole `gray` scale flips for dark — lands within ~1 lightness point of
|
|
95
|
+
the dark canvas (~1.08:1 contrast, computed), reading as no hover at all. As a side effect this
|
|
96
|
+
also silently fixed the `cards`-variant tautology where the accordion button's own resting
|
|
97
|
+
background (`customStyles.buttonStyle.background`, line ~680) equaled its hover token exactly —
|
|
98
|
+
hovering a `cards`-variant button visibly did nothing. Fixed via a new pure helper,
|
|
99
|
+
`getFilterHoverBg(colors, isDark)` (`filterHoverStyle.ts`, mirrors `Editor/joditThemeVars.ts`'s
|
|
100
|
+
pattern) — dark mode now uses `gray[300]` (~2.3:1 against the canvas, clearly visible) which still
|
|
101
|
+
keeps the existing `gray[700]`/`gray[800]` row text at/above AA (~4.9:1+) on top of it, so — unlike
|
|
102
|
+
the Table row-hover fix — no text-color flip was needed here. Light mode is untouched (`gray[50]`).
|
|
103
|
+
Regression tests: `filterHoverStyle.test.ts` (lavender + rosewood).
|
|
104
|
+
- **Accordion section-header hover still invisible after the fix above (QA retest follow-up):**
|
|
105
|
+
the 5th spot (the accordion trigger row itself) kept showing no hover change even after
|
|
106
|
+
`getFilterHoverBg` fixed the other 4. Traced two real, distinct issues in `Accordion.tsx` (not
|
|
107
|
+
FilterSidebar): (1) its own `expandedBg`/`softHover` defaults — `primary.opacity[8]` composited
|
|
108
|
+
over the dark canvas, and `table.hover[100]`/`gray[50]` — both collapse to ~1.07-1.09:1
|
|
109
|
+
(verified numerically), so any Accordion consumer relying on these un-overridden defaults gets an
|
|
110
|
+
invisible expanded-state tint and hover in dark mode; (2) FilterSidebar's own header override
|
|
111
|
+
(`buttonProps._hover: { bg: hoverBg }`) was verified via direct CSSOM inspection to compile into a
|
|
112
|
+
correct `:hover` rule with the right color even with FilterSidebar's exact `customStyles`
|
|
113
|
+
shape — the mechanism itself checked out. Fixed (1) with a new pure helper,
|
|
114
|
+
`getAccordionHoverColors(colors, isDark)` (`Accordion/accordionColors.ts`, same pattern as
|
|
115
|
+
`Editor/joditThemeVars.ts` / `FilterSidebar/filterHoverStyle.ts`): dark mode now uses `gray[200]`
|
|
116
|
+
for both (opaque, ~1.6:1 against canvas — visibly present but a step below the `gray[300]`
|
|
117
|
+
active-hover fill FilterSidebar/Table already use), light mode unchanged. Reinforced (2) as
|
|
118
|
+
belt-and-suspenders: FilterSidebar's `customStyles.hoverbuttonStyle` now also sets
|
|
119
|
+
`{ background: hoverBg }`, reasserting the same fill via the `sx` path so the header hover
|
|
120
|
+
doesn't depend on a single prop-merge route. Regression tests: `accordionColors.test.ts`
|
|
121
|
+
(lavender + rosewood). Note: jsdom cannot simulate real `:hover` rendering, so this was verified
|
|
122
|
+
via computed contrast + direct CSSOM rule inspection, not a live click-test; a real-browser
|
|
123
|
+
Playwright re-check afterward confirmed the fix applies correctly (`rgba(0,0,0,0)` →
|
|
124
|
+
`gray[300]` on hover, both brands, reverting on mouse-away).
|
|
125
|
+
- **`Accordion.tsx`/`FilterSidebar.tsx` perf pass:** the new `getAccordionHoverColors`/
|
|
126
|
+
`getFilterHoverBg` calls above are now wrapped in `useMemo` (keyed on `theme.colors`/`isDark`),
|
|
127
|
+
matching the existing memoization pattern in `Table/components/TableBody.tsx` — avoids
|
|
128
|
+
recomputing the color object on every render.
|
|
129
|
+
|
|
130
|
+
### SideBar — active-icon/label dark-mode fix (user-reported via screenshot, blocking)
|
|
131
|
+
|
|
132
|
+
`MenuItemBox.tsx`, `MenuPopoverContent.tsx`, `SecondaryBar.tsx`, and `SideBar.tsx` all read the
|
|
133
|
+
active/accent icon and label color from `theme.colors.primary[300]`/`[100]` directly. That's
|
|
134
|
+
correct in light mode, but breaks in dark mode: `sidebar.background` **never inverts** across
|
|
135
|
+
modes (`buildDarkPalette.ts` keeps `sidebar: light.sidebar` — it's already near-black in light
|
|
136
|
+
mode), while `primary`'s every rung **does** invert (`toDarkRamp`/`liftAccent`, correct for
|
|
137
|
+
badge/tag consumers whose surface inverts alongside them). Pairing an inverted `primary[300]`/
|
|
138
|
+
`[100]` with a canvas that stayed put produces near-black text/icons on an already-dark rail —
|
|
139
|
+
only the checked/lavender-selected item stayed legible, everything else read as invisible
|
|
140
|
+
(exactly the user's report: "only selected lavender is visible to my eyes").
|
|
141
|
+
|
|
142
|
+
Presented 3 fix options via an artifact (pinned-light accent / Header's `pickActiveAccent`
|
|
143
|
+
pattern / a dedicated non-inverting SideBar accent scale) — user chose **pinned-light accent**.
|
|
144
|
+
Fixed with a new pure helper + hook, `src/Components/SideBar/sidebarAccentColors.ts`
|
|
145
|
+
(`getSidebarActiveAccent` / `useSidebarActiveAccent`, same pure-function + `useMemo` pattern as
|
|
146
|
+
`accordionColors.ts`/`filterHoverStyle.ts`): in dark mode it reuses each rung's own **light-mode**
|
|
147
|
+
value (`lightPalettes[brand].primary[300]`/`[100]`) instead of the dark-inverted one — provably
|
|
148
|
+
correct because the canvas behind it is identical in both modes, so whatever already clears
|
|
149
|
+
contrast in light mode still clears it in dark mode with the same foreground value. Falls back to
|
|
150
|
+
the current (still-broken) rung if `brand` is unavailable (a consumer on a plain `ChakraProvider`,
|
|
151
|
+
where dark mode never activates anyway) rather than crashing — `brand` is read via
|
|
152
|
+
`useContext(ThemeModeContext)` directly, not the throwing `useThemeMode()`, since this hook must
|
|
153
|
+
degrade gracefully outside `PixelizeThemeProvider`.
|
|
154
|
+
|
|
155
|
+
Wired at every active/accent-icon usage: `MenuItemBox.tsx` (main + submenu icon/label/dot),
|
|
156
|
+
`MenuPopoverContent.tsx` (header + submenu icon/label), `SecondaryBar.tsx` (collapsed/expanded
|
|
157
|
+
item icon+label, header icon), `SideBar.tsx` (Add-New icon, avatar-initials fallback, footer
|
|
158
|
+
control accent icon+label, mobile-nav "Show" `PanelLeft` icon) — every one was reading `[300]`
|
|
159
|
+
(icon role) or `[100]` (label role) directly. `borderLeftColor`/`bg` usages of `primary[500]`/
|
|
160
|
+
`.opacity[16]`/`.opacity[32]` were left untouched — confirmed not broken (the audit found `[500]`
|
|
161
|
+
correctly lifts lighter in dark mode; `.opacity[N]` tints are self-scaling, not absolute rungs).
|
|
162
|
+
Regression tests: `sidebarAccentColors.test.ts` (lavender + rosewood) — light mode unchanged,
|
|
163
|
+
dark mode pins the light-mode rung (not the dark-inverted one), contrast ≥3:1 (icon) / ≥4.5:1
|
|
164
|
+
(label) against the sidebar canvas, graceful fallback when `brand` is unknown.
|
|
165
|
+
|
|
166
|
+
### Known gap — Header "Login" demo button (raw Chakra, wrong-canvas ghost ink)
|
|
167
|
+
|
|
168
|
+
`Layout.tsx`'s `/header` playground route renders its `rightSlot` demo content with a **raw**
|
|
169
|
+
Chakra `Button` (`import { Button } from "@chakra-ui/react"`, not the library's own `Button`),
|
|
170
|
+
`variant="ghost" colorScheme="purple"`. Because Chakra's theme registration is global once
|
|
171
|
+
`extendTheme` runs, this raw Button still picks up the library's `Button.styles.ts` ghost-variant
|
|
172
|
+
logic (`accentTextOnCanvas(scale, colors.backgroundColor.main)`, buttons module) — but that logic
|
|
173
|
+
assumes the **page** canvas. Header's own bar is an always-dark surface
|
|
174
|
+
(`sidebar.background[500]`), not the page canvas, so the computed ink is tuned for the wrong
|
|
175
|
+
background and can read too dark/low-contrast against Header's actual bar. Not a new bug — it's
|
|
176
|
+
the same "wrong canvas" gap as the already-documented Button ghost-variant limitation, now
|
|
177
|
+
independently confirmed by the QA pass. Deferred: fixing it correctly needs a `canvasBg` prop
|
|
178
|
+
threaded through `Button.styles.ts` so a caller can tell the ghost/outline/link ink helper which
|
|
179
|
+
surface it's actually rendering on, rather than always assuming the page canvas — a bigger,
|
|
180
|
+
cross-component change out of scope for this pass.
|
|
181
|
+
|
|
182
|
+
## SideBar — responsive overlay (< lg / 992px)
|
|
183
|
+
|
|
184
|
+
At/above `lg` the SideBar is unchanged: inline, sticky, with the collapse/mini-rail
|
|
185
|
+
(`toggle`). Below `lg` it becomes a slide-in **overlay** above the content (it leaves
|
|
186
|
+
layout flow, so content stays full-width — not shrunk):
|
|
187
|
+
|
|
188
|
+
- `mobileOpen?: boolean` + `onMobileClose?: () => void` props drive the overlay. Wire
|
|
189
|
+
`mobileOpen` to the NavigationBar hamburger (`sideBarToggole` / `onSideBarToggole`).
|
|
190
|
+
- Overlay is always expanded (collapse/mini-rail is desktop-only and hidden < lg). The
|
|
191
|
+
header's trailing control becomes a Close (X) instead of the collapse chevron.
|
|
192
|
+
- Dismiss: backdrop scrim click, **Esc**, the Close button, or **swipe-left** on the
|
|
193
|
+
panel. Body scroll is locked while open; panel exposes `role="dialog"`/`aria-modal`.
|
|
194
|
+
- NavigationBar hamburger now shows below `lg` (was `< md`); its panel icon is
|
|
195
|
+
state-aware (`PanelLeftClose` open / `PanelRightClose` closed).
|
|
196
|
+
- The overlay panel has **square edges** (no border radius).
|
|
197
|
+
- Overlay panel width = `OVERLAY_WIDTH` (**14.7rem** / 235px — a touch wider than the
|
|
198
|
+
inline expanded 13rem for touch), capped by `maxW: 88vw` on very small screens.
|
|
199
|
+
|
|
200
|
+
Breakpoint, scrim/slide, and z-index are Chakra responsive props (no JS flash) when
|
|
201
|
+
`mobileNav` is off; the breakpoint is read once via `useBreakpointValue({ base: true, lg: false })`.
|
|
202
|
+
|
|
203
|
+
## SideBar — Hide/Show (mobile navbar on big screens)
|
|
204
|
+
|
|
205
|
+
A footer **Hide/Show** toggle (next to Collapse) switches the navbar *presentation*
|
|
206
|
+
between the docked desktop sidebar and the mobile-style overlay — at **any** width, so
|
|
207
|
+
desktop users can get the full-screen content experience. It is a layout switch, **not**
|
|
208
|
+
a close: toggling never hides the navigation.
|
|
209
|
+
|
|
210
|
+
- `mobileNav?: boolean` forces overlay presentation regardless of breakpoint:
|
|
211
|
+
`overlay = (below lg) || mobileNav`. `onToggleMobileNav?: () => void` backs the
|
|
212
|
+
footer control (render the control only when provided).
|
|
213
|
+
- Footer control: docked → segmented **Collapse | Hide**; desktop mobile-nav overlay →
|
|
214
|
+
**Show** (return to docked). Pure below-`lg` overlay shows no navbar-mode control.
|
|
215
|
+
- Wire so entering mobile-nav also opens the overlay (sidebar stays visible) and leaving
|
|
216
|
+
docks it — see `App.tsx`. NavigationBar `forceSideBarToggle` shows the hamburger at all
|
|
217
|
+
widths while `mobileNav` is on.
|
|
218
|
+
- Selecting a **leaf** menu item in overlay mode auto-closes the overlay (content returns
|
|
219
|
+
to full-screen); submenu **parents** only expand and do not close it.
|
|
220
|
+
|
|
221
|
+
## Persisting sidebar choices — `useSidebarPrefs`
|
|
222
|
+
|
|
223
|
+
Opt-in hook (`src/Hooks/useSidebarPrefs.ts`, exported from `index.ts`) that persists the
|
|
224
|
+
user's **explicit** layout choices to `localStorage` so they survive reload/restart —
|
|
225
|
+
without it, `mobileNav`/collapse reset to desktop default on every mount.
|
|
226
|
+
|
|
227
|
+
- Persists `{ mobileNav, collapsed, mobileOpen }` so the sidebar restores to **exactly** the
|
|
228
|
+
same state (mode, mini-rail, drawer). It deliberately does **not** persist the `lg`
|
|
229
|
+
breakpoint (viewport-driven, must stay live).
|
|
230
|
+
- SSR-safe (`typeof window` guards); corrupt/invalid stored values fall back to defaults
|
|
231
|
+
per field; `setItem` failures (private mode / quota) no-op without throwing.
|
|
232
|
+
- API: state `{ mobileNav, collapsed, mobileOpen }`; setters `setMobileNav / setCollapsed
|
|
233
|
+
/ setMobileOpen`; toggles `toggleMobileNav / toggleCollapsed / toggleMobileOpen`; plus
|
|
234
|
+
**composed handlers** `onToggleMobileNav` (flips navbar mode **and** syncs the drawer)
|
|
235
|
+
and `closeMobile`. Options: `storageKey` (default `pixelize:sidebar-prefs:v1`, versioned)
|
|
236
|
+
and `defaults`.
|
|
237
|
+
- **Consumer adoption** — map the returned values onto `SideBar` + `NavBar`; the composed
|
|
238
|
+
handlers mean apps don't re-implement the navbar-mode/drawer behavior:
|
|
239
|
+
|
|
240
|
+
```tsx
|
|
241
|
+
const sb = useSidebarPrefs();
|
|
242
|
+
<SideBar
|
|
243
|
+
toggle={sb.collapsed} changeToggle={sb.toggleCollapsed}
|
|
244
|
+
mobileNav={sb.mobileNav} onToggleMobileNav={sb.onToggleMobileNav}
|
|
245
|
+
mobileOpen={sb.mobileOpen} onMobileClose={sb.closeMobile} /* ...menus, user */ />
|
|
246
|
+
<NavBar sideBarToggole={sb.mobileOpen} onSideBarToggole={sb.toggleMobileOpen}
|
|
247
|
+
forceSideBarToggle={sb.mobileNav} /* ...nav props */ />
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
See `App.tsx` for the live reference wiring.
|
|
251
|
+
|
|
252
|
+
### Known gaps
|
|
253
|
+
|
|
254
|
+
- `SecondaryBar` keeps its current side-by-side stacking inside the overlay — revisit if
|
|
255
|
+
it feels cramped on very narrow screens.
|
|
256
|
+
- Consumer apps (crm/account/…) must pass `mobileOpen`/`onMobileClose` to adopt overlay
|
|
257
|
+
mode, and adopt `useSidebarPrefs` to get persistence; until then they get the unchanged
|
|
258
|
+
inline sidebar with non-persisted state.
|
|
259
|
+
- Persisted `collapsed` can be transiently overridden by SideBar's existing "auto-collapse
|
|
260
|
+
when a secondary panel is active" effect — pre-existing, not regressed.
|
|
261
|
+
- Persisting `mobileOpen` means a phone (`belowLg`) left with the drawer open reloads with
|
|
262
|
+
it open (until a leaf tap auto-closes it). Accepted to honor "restore exactly the same
|
|
263
|
+
state"; revisit with a `belowLg` gate if it proves annoying.
|
|
264
|
+
- Dark-mode migration covered FilterSidebar/WorkspaceWindow (surfaces) plus, this pass,
|
|
265
|
+
Header (default bg/color/active/hover tokens), NavigationBar (label ink + Menu
|
|
266
|
+
`--menu-bg` fix), and Accordion (item surface + expanded/hover tint — see above) — see
|
|
267
|
+
"Header, NavigationBar, FilterSidebar — WCAG/dark pass" above. **SideBar's active-icon/
|
|
268
|
+
label accent is now fixed** (see "SideBar — active-icon/label dark-mode fix" above); its
|
|
269
|
+
notification-count badge contrast gap is still open — see `theme/MODULE.md` Known gaps.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Overlays
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Modal, AlertDialog, ToolTip / OverflowToolTip, Toaster (+ `useToaster` hook).
|
|
6
|
+
|
|
7
|
+
## Key paths
|
|
8
|
+
|
|
9
|
+
- `src/Components/Modal/`, `AlertDialog/`, `ToolTip/`, `Toaster/`
|
|
10
|
+
|
|
11
|
+
## Key rules
|
|
12
|
+
|
|
13
|
+
- **Toaster `showToast({ actions })`:** optional `actions?: (onClose) => ReactNode`
|
|
14
|
+
renders action buttons under the message (e.g. Jira-style "View" / "Copy link").
|
|
15
|
+
The render-prop receives the toast's own `onClose` so an action can dismiss it;
|
|
16
|
+
callers style the buttons with their app theme. Prefer this over a bespoke Chakra
|
|
17
|
+
`useToast` in a consumer app — a second `useToast` renders into a *different* toast
|
|
18
|
+
portal that a `Modal`'s overlay/focus-trap can hide, so the toast silently never
|
|
19
|
+
appears. The toast card slides in (framer tween), pulses the status icon once on
|
|
20
|
+
mount, and **pauses the auto-dismiss countdown on hover** so the user can read and
|
|
21
|
+
click an action before it dismisses.
|
|
22
|
+
- Modal exports ModalHeader, ModalBody, ModalFooter subcomponents
|
|
23
|
+
- **ToolTip `overflowOnly`:** pass `overflowOnly` to show the tooltip **only**
|
|
24
|
+
when the child text is actually truncated (ellipsis active) — no tooltip when
|
|
25
|
+
it fits. The child must be the single clamping element (e.g. `Text` with
|
|
26
|
+
`noOfLines`); its ref is managed internally. Works for single- and multi-line
|
|
27
|
+
clamps and combines with `isDisabled`. **`OverflowToolTip`** is sugar for
|
|
28
|
+
`<ToolTip overflowOnly>`. Powered by the `useIsTruncated` hook (see
|
|
29
|
+
`utils-hooks`). Inert unless `overflowOnly` is set — no measurement/observer
|
|
30
|
+
for ordinary tooltips, and it never measures on hover/scroll.
|
|
31
|
+
|
|
32
|
+
## Dark mode
|
|
33
|
+
|
|
34
|
+
Toaster and ToolTip take all color from the theme (`useTheme()` / `useCustomTheme()`),
|
|
35
|
+
so they follow the active light/dark palette; remaining hex literals are only `??`
|
|
36
|
+
fallbacks for when no Pixelize palette is in context.
|
|
37
|
+
|
|
38
|
+
- **Modal/AlertDialog surface bug (QA-caught, blocking):** `ModalContent`/`AlertDialogContent`
|
|
39
|
+
had no explicit `bg=`, so both fell through to Chakra's own `baseStyle`, which hardcodes
|
|
40
|
+
`[$bg.variable]: "colors.white"` gated behind `_dark` — this app's theme-swap dark mode
|
|
41
|
+
(palette swapped, Chakra `colorMode` stays `"light"`) never triggers that `_dark` block, so
|
|
42
|
+
every Modal/AlertDialog rendered a white panel with near-invisible text on the dark canvas.
|
|
43
|
+
Same bug class as the `ButtonGroupIcon` menu-bg bug (buttons) and the `OrgSwitcher` popover
|
|
44
|
+
bug (account-management) — Chakra part-styles that hardcode a literal instead of reading a
|
|
45
|
+
semantic token. `Card` was unaffected because it already used the patched
|
|
46
|
+
`chakra-body-bg`/`chakra-body-text` semantic tokens (see theme module); Modal/AlertDialog
|
|
47
|
+
bypass that layer entirely. Fixed with an explicit `bg={colors?.background?.[50]}` on both.
|
|
48
|
+
`AlertDialog` has no separate Chakra theme key (it reuses Chakra's `Modal` style config
|
|
49
|
+
internally), but still needed its own prop-level fix since this app's fix is component-level,
|
|
50
|
+
not a Chakra `components.Modal` theme-config override.
|
|
51
|
+
|
|
52
|
+
## Dark mode — Modal/AlertDialog consumers
|
|
53
|
+
|
|
54
|
+
`Drawer` (layout-navigation module) has the identical fix. Every other file in the library that
|
|
55
|
+
renders a raw Chakra `ModalContent` needed the same explicit `bg=` — see the account-management,
|
|
56
|
+
table, and cards MODULE.md sections for the specific consumer components fixed in this pass.
|
|
57
|
+
`WorkspaceWindow` (layout-navigation) was checked and is **not** affected: its `ModalContent` is
|
|
58
|
+
deliberately `bg="transparent"` with an inner `Box bg={theme.colors.background[50]}` as the real
|
|
59
|
+
surface.
|
|
60
|
+
|
|
61
|
+
- **Toast card surface is `background[50]`, not `colors.white`** — `white` is a
|
|
62
|
+
*foreground* token (a label on a filled button) and stays white in dark mode.
|
|
63
|
+
Status tints read `colors.semantic[status]`, falling back to the plain ramp
|
|
64
|
+
(`green` / `red` / …).
|
|
65
|
+
- **ToolTip is an inverted surface** — near-black under a light canvas, carrying a
|
|
66
|
+
white label. It uses `sidebar.background[500]`, the one ramp `buildDarkPalette`
|
|
67
|
+
passes through un-inverted (`sidebar: light.sidebar`), so it stays near-black in
|
|
68
|
+
dark and the label stays legible; any other surface ramp would flip light and
|
|
69
|
+
render the white label invisible. Callers overriding `bg` own that contrast.
|