From e24a27cfa54f1449564d8163c5d44fd9f0b72132 Mon Sep 17 00:00:00 2001 From: Rhys Howell Date: Fri, 3 Oct 2025 20:18:22 +0200 Subject: [PATCH] chore(lint): turn on dynamic css rule, move more styles to constants --- configs/eslint-config-compass/index.js | 2 +- .../match/match-group-form.tsx | 6 +++- .../src/components/assistant-chat.tsx | 21 ++++++++++--- .../src/components/confirmation-message.tsx | 15 ++++++--- .../components/actions/item-action-group.tsx | 8 ++++- .../src/components/bson-value.tsx | 13 +++++--- .../src/components/document-list/element.tsx | 31 +++++++++++-------- .../src/components/file-picker-dialog.tsx | 6 +++- .../src/components/file-selector.tsx | 7 ++++- .../src/components/icons/logo-icon.tsx | 2 +- .../src/components/select-list.tsx | 4 ++- .../src/components/workspace-tabs/tab.tsx | 1 + .../src/with-status-marker.tsx | 7 ++++- .../components/explain-tree/tree-layout.tsx | 8 ++++- .../src/components/create-shard-key-form.tsx | 6 +++- .../workspace-tab-context-provider.tsx | 8 +++-- 16 files changed, 105 insertions(+), 40 deletions(-) diff --git a/configs/eslint-config-compass/index.js b/configs/eslint-config-compass/index.js index afcf8079e8f..6e31fefde02 100644 --- a/configs/eslint-config-compass/index.js +++ b/configs/eslint-config-compass/index.js @@ -98,7 +98,7 @@ module.exports = { plugins: [...shared.plugins, '@mongodb-js/compass', 'chai-friendly'], rules: { ...shared.rules, - '@mongodb-js/compass/no-inline-emotion-css': 'warn', + '@mongodb-js/compass/no-inline-emotion-css': 'error', '@mongodb-js/compass/no-leafygreen-outside-compass-components': 'error', '@mongodb-js/compass/unique-mongodb-log-id': [ 'error', diff --git a/packages/compass-aggregations/src/components/aggregation-side-panel/stage-wizard-use-cases/match/match-group-form.tsx b/packages/compass-aggregations/src/components/aggregation-side-panel/stage-wizard-use-cases/match/match-group-form.tsx index 01eb4c6a9c8..e226eba9ca0 100644 --- a/packages/compass-aggregations/src/components/aggregation-side-panel/stage-wizard-use-cases/match/match-group-form.tsx +++ b/packages/compass-aggregations/src/components/aggregation-side-panel/stage-wizard-use-cases/match/match-group-form.tsx @@ -131,6 +131,10 @@ const groupHeaderStyles = css({ gap: spacing[400], }); +const nestedGroupButtonContainerStyles = css({ + display: 'inherit', +}); + const MatchGroupForm = ({ fields, group, @@ -259,7 +263,7 @@ const MatchGroupForm = ({ justify="middle" enabled={disableAddNestedGroupBtn} trigger={ -
+
diff --git a/packages/compass-assistant/src/components/confirmation-message.tsx b/packages/compass-assistant/src/components/confirmation-message.tsx index d6929beeac9..5a290d36d91 100644 --- a/packages/compass-assistant/src/components/confirmation-message.tsx +++ b/packages/compass-assistant/src/components/confirmation-message.tsx @@ -6,6 +6,7 @@ import { ButtonVariant, spacing, css, + cx, palette, useDarkMode, } from '@mongodb-js/compass-components'; @@ -42,6 +43,11 @@ const buttonGroupStyles = css({ }, }); +const confirmationMessageDarkModeStyles = css({ + backgroundColor: palette.gray.dark3, + borderColor: palette.gray.dark2, +}); + interface ConfirmationMessageProps { state: 'confirmed' | 'rejected' | 'pending'; title: string; @@ -57,11 +63,10 @@ export const ConfirmationMessage: React.FunctionComponent< return (
{title} diff --git a/packages/compass-components/src/components/actions/item-action-group.tsx b/packages/compass-components/src/components/actions/item-action-group.tsx index cc44fa23d4c..bffa853eedc 100644 --- a/packages/compass-components/src/components/actions/item-action-group.tsx +++ b/packages/compass-components/src/components/actions/item-action-group.tsx @@ -21,6 +21,10 @@ const containerStyle = css({ gap: spacing[100], }); +const itemActionGroupContainerStyles = css({ + display: 'inherit', +}); + export type ItemActionGroupProps = { actions: (GroupedItemAction | ItemSeparator)[]; onAction(actionName: Action): void; @@ -98,7 +102,9 @@ export function ItemActionGroup({ {...tooltipProps} // Wrapping the item in a div, because the `trigger` must accept and render `children` // See docs for the prop for more information - trigger={
{item}
} + trigger={ +
{item}
+ } > {tooltip} diff --git a/packages/compass-components/src/components/bson-value.tsx b/packages/compass-components/src/components/bson-value.tsx index e4ad3244411..bc0f8585357 100644 --- a/packages/compass-components/src/components/bson-value.tsx +++ b/packages/compass-components/src/components/bson-value.tsx @@ -68,13 +68,16 @@ export const BSONValueContainer: React.FunctionComponent< } > = ({ type, children, className, ...props }) => { const darkMode = useDarkMode(); - const color = useMemo(() => { + const colorStyle = useMemo(() => { if (!type) { return; } - return VALUE_COLOR_BY_THEME_AND_TYPE[darkMode ? Theme.Dark : Theme.Light][ - type - ]; + return { + color: + VALUE_COLOR_BY_THEME_AND_TYPE[darkMode ? Theme.Dark : Theme.Light][ + type + ], + }; }, [type, darkMode]); return ( @@ -88,7 +91,7 @@ export const BSONValueContainer: React.FunctionComponent< type ? type.toLowerCase() : 'unknown' }` )} - style={{ color }} + style={colorStyle} > {children}
diff --git a/packages/compass-components/src/components/document-list/element.tsx b/packages/compass-components/src/components/document-list/element.tsx index dc6e7a63a7a..81dc7e93546 100644 --- a/packages/compass-components/src/components/document-list/element.tsx +++ b/packages/compass-components/src/components/document-list/element.tsx @@ -550,30 +550,37 @@ export const HadronElement: React.FunctionComponent<{ } }; - const lineNumberMinWidth = useMemo(() => { + const lineNumberMinWidthStyle = useMemo(() => { // Only account for ~ line count length if we are in editing mode if (editingEnabled) { const charCount = String(lineNumberSize).length; - return charCount > 2 ? `${charCount}.5ch` : spacing[400]; + return { + minWidth: charCount > 2 ? `${charCount}.5ch` : spacing[400], + }; } - return spacing[400]; + return { + minWidth: spacing[400], + }; }, [lineNumberSize, editingEnabled]); - const elementSpacerWidth = useMemo( - () => calculateElementSpacerWidth(editable, level, extraGutterWidth), + const elementSpacerWidthStyle = useMemo( + () => ({ + width: calculateElementSpacerWidth(editable, level, extraGutterWidth), + }), [editable, level, extraGutterWidth] ); // To render the "Show more" toggle for the nested expandable elements we need // to calculate a proper offset so that it aligns with the nesting level - const nestedElementsVisibilityToggleOffset = useMemo( - () => - calculateShowMoreToggleOffset({ + const nestedElementsVisibilityToggleOffsetStyle = useMemo( + () => ({ + paddingLeft: calculateShowMoreToggleOffset({ editable, level, alignWithNestedExpandIcon: true, extraGutterWidth, }), + }), [editable, level, extraGutterWidth] ); @@ -649,7 +656,7 @@ export const HadronElement: React.FunctionComponent<{ ? lineNumberRemoved : editingEnabled && !isValid && lineNumberInvalid )} - style={{ minWidth: lineNumberMinWidth }} + style={lineNumberMinWidthStyle} >
)} -
+
{/* spacer for nested documents */}
@@ -849,9 +856,7 @@ export const HadronElement: React.FunctionComponent<{ // this for "performance" reasons step={editingEnabled ? DEFAULT_VISIBLE_ELEMENTS : 1000} onSizeChange={handleVisibleElementsChanged} - style={{ - paddingLeft: nestedElementsVisibilityToggleOffset, - }} + style={nestedElementsVisibilityToggleOffsetStyle} > )} diff --git a/packages/compass-components/src/components/file-picker-dialog.tsx b/packages/compass-components/src/components/file-picker-dialog.tsx index e71e3477563..efaaaafdb3b 100644 --- a/packages/compass-components/src/components/file-picker-dialog.tsx +++ b/packages/compass-components/src/components/file-picker-dialog.tsx @@ -132,6 +132,10 @@ const disabledDescriptionDarkStyles = css({ color: palette.gray.light1, }); +const displayNoneStyles = css({ + display: 'none', +}); + type FileInputVariant = 'default' | 'small' | 'vertical'; // Matches Electron's file dialog options. @@ -502,13 +506,13 @@ function FilePickerDialog({
void; @@ -33,7 +38,7 @@ export function FileSelector({ ref={inputRef} type="file" onChange={onFilesChanged} - style={{ display: 'none' }} + className={displayNoneStyles} /> {trigger({ onClick: () => inputRef.current?.click(), diff --git a/packages/compass-components/src/components/icons/logo-icon.tsx b/packages/compass-components/src/components/icons/logo-icon.tsx index aecdef12e56..6d7179edabd 100644 --- a/packages/compass-components/src/components/icons/logo-icon.tsx +++ b/packages/compass-components/src/components/icons/logo-icon.tsx @@ -22,7 +22,7 @@ const LogoIcon = ({ const fill = color || (darkMode ? palette.white : palette.black); return ( (
; + return
; } const MARKER_COMPONENTS: Record = { diff --git a/packages/compass-explain-plan/src/components/explain-tree/tree-layout.tsx b/packages/compass-explain-plan/src/components/explain-tree/tree-layout.tsx index d17012cacd2..18183b3cf7b 100644 --- a/packages/compass-explain-plan/src/components/explain-tree/tree-layout.tsx +++ b/packages/compass-explain-plan/src/components/explain-tree/tree-layout.tsx @@ -151,6 +151,12 @@ const treeContainerStyles = css({ transitionTimingFunction: 'linear', }); +const treeSVGStyles = css({ + position: 'absolute', + top: 0, + left: 0, +}); + function TreeLayout({ data, getNodeSize, @@ -212,10 +218,10 @@ function TreeLayout({ className={treeContainerStyles} > { // interacted state // eslint-disable-next-line jsx-a11y/no-static-element-interactions