Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion configs/eslint-config-compass/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,10 @@ const groupHeaderStyles = css({
gap: spacing[400],
});

const nestedGroupButtonContainerStyles = css({
display: 'inherit',
});

const MatchGroupForm = ({
fields,
group,
Expand Down Expand Up @@ -259,7 +263,7 @@ const MatchGroupForm = ({
justify="middle"
enabled={disableAddNestedGroupBtn}
trigger={
<div style={{ display: 'inherit' }}>
<div className={nestedGroupButtonContainerStyles}>
<Button
size="xsmall"
disabled={disableAddNestedGroupBtn}
Expand Down
21 changes: 16 additions & 5 deletions packages/compass-assistant/src/components/assistant-chat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,11 @@ const assistantChatFixesLightStyles = css({
},
});

const chatContainerOverrideStyle = {
height: '100%',
width: '100%',
};

const messageFeedFixesStyles = css({
display: 'flex',
flexDirection: 'column-reverse',
Expand Down Expand Up @@ -205,6 +210,14 @@ const welcomeTextStyles = css({
margin: `${spacing[100]}px 0 0 0`,
});

const sparkleIconOverrideStyle = {
color: palette.green.dark1,
};

const inputBarTextareaProps = {
placeholder: 'Ask a question',
};

export const AssistantChat: React.FunctionComponent<AssistantChatProps> = ({
chat,
hasNonGenuineConnections,
Expand Down Expand Up @@ -369,7 +382,7 @@ export const AssistantChat: React.FunctionComponent<AssistantChatProps> = ({
assistantChatFixesStyles,
darkMode ? assistantChatFixesDarkStyles : assistantChatFixesLightStyles
)}
style={{ height: '100%', width: '100%' }}
style={chatContainerOverrideStyle}
>
<LeafyGreenChatProvider variant={Variant.Compact}>
<ChatWindow title="MongoDB Assistant" className={chatWindowFixesStyles}>
Expand Down Expand Up @@ -469,7 +482,7 @@ export const AssistantChat: React.FunctionComponent<AssistantChatProps> = ({
<Icon
glyph="Sparkle"
size="large"
style={{ color: palette.green.dark1 }}
style={sparkleIconOverrideStyle}
/>
<span>MongoDB Assistant</span>
</h4>
Expand All @@ -488,9 +501,7 @@ export const AssistantChat: React.FunctionComponent<AssistantChatProps> = ({
void handleMessageSend(messageBody)
}
state={status === 'submitted' ? 'loading' : undefined}
textareaProps={{
placeholder: 'Ask a question',
}}
textareaProps={inputBarTextareaProps}
/>
</div>
<DisclaimerText className={disclaimerTextStyles}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
ButtonVariant,
spacing,
css,
cx,
palette,
useDarkMode,
} from '@mongodb-js/compass-components';
Expand Down Expand Up @@ -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;
Expand All @@ -57,11 +63,10 @@ export const ConfirmationMessage: React.FunctionComponent<

return (
<div
className={confirmationMessageStyles}
style={{
backgroundColor: darkMode ? palette.gray.dark3 : palette.gray.light3,
borderColor: darkMode ? palette.gray.dark2 : palette.gray.light2,
}}
className={cx(
confirmationMessageStyles,
darkMode && confirmationMessageDarkModeStyles
)}
>
<Body className={confirmationTitleStyles}>{title}</Body>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ const containerStyle = css({
gap: spacing[100],
});

const itemActionGroupContainerStyles = css({
display: 'inherit',
});

export type ItemActionGroupProps<Action extends string> = {
actions: (GroupedItemAction<Action> | ItemSeparator)[];
onAction(actionName: Action): void;
Expand Down Expand Up @@ -98,7 +102,9 @@ export function ItemActionGroup<Action extends string>({
{...tooltipProps}
// Wrapping the item in a div, because the `trigger` must accept and render `children`
// See docs for the prop for more information
trigger={<div style={{ display: 'inherit' }}>{item}</div>}
trigger={
<div className={itemActionGroupContainerStyles}>{item}</div>
}
>
{tooltip}
</Tooltip>
Expand Down
13 changes: 8 additions & 5 deletions packages/compass-components/src/components/bson-value.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand All @@ -88,7 +91,7 @@ export const BSONValueContainer: React.FunctionComponent<
type ? type.toLowerCase() : 'unknown'
}`
)}
style={{ color }}
style={colorStyle}
>
{children}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]
);

Expand Down Expand Up @@ -649,7 +656,7 @@ export const HadronElement: React.FunctionComponent<{
? lineNumberRemoved
: editingEnabled && !isValid && lineNumberInvalid
)}
style={{ minWidth: lineNumberMinWidth }}
style={lineNumberMinWidthStyle}
>
<div
className={cx(
Expand Down Expand Up @@ -684,7 +691,7 @@ export const HadronElement: React.FunctionComponent<{
</div>
</div>
)}
<div className={elementSpacer} style={{ width: elementSpacerWidth }}>
<div className={elementSpacer} style={elementSpacerWidthStyle}>
{/* spacer for nested documents */}
</div>
<div className={elementExpand}>
Expand Down Expand Up @@ -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}
></VisibleFieldsToggle>
</>
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -502,13 +506,13 @@ function FilePickerDialog({
</div>
<input
data-testid={dataTestId ?? 'file-input'}
className={displayNoneStyles}
ref={inputRef}
id={`${id}_file_input`}
name={id}
type="file"
multiple={multi}
onChange={onFilesChanged}
style={{ display: 'none' }}
// Force a re-render when the values change so
// the component is controlled by the prop.
// This is also useful for testing.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import React, { type InputHTMLAttributes, useRef } from 'react';
import { css } from '@leafygreen-ui/emotion';

const displayNoneStyles = css({
display: 'none',
});

type FileSelectorTriggerProps = {
onClick: () => void;
Expand Down Expand Up @@ -33,7 +38,7 @@ export function FileSelector({
ref={inputRef}
type="file"
onChange={onFilesChanged}
style={{ display: 'none' }}
className={displayNoneStyles}
/>
{trigger({
onClick: () => inputRef.current?.click(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const LogoIcon = ({
const fill = color || (darkMode ? palette.white : palette.black);
return (
<svg
className={cx(iconStyles, className, css(`height: ${height}px`))}
className={cx(iconStyles, className)}
height={height}
viewBox="0 0 15 32"
fill="none"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ const checkboxStyles = css({
padding: spacing[100],
});

const checkboxSelectAllStyles = css({ paddingRight: 0 });

const containerStyles = css({
display: 'flex',
flexDirection: 'column',
Expand Down Expand Up @@ -87,7 +89,7 @@ export function SelectList<T extends SelectItem>(
<div className={cx(props.className, containerStyles)}>
<div className={listHeaderStyles}>
<Checkbox
className={cx(checkboxStyles, css({ paddingRight: 0 }))}
className={cx(checkboxStyles, checkboxSelectAllStyles)}
data-testid="select-list-all-checkbox"
aria-label="Select all"
onChange={handleSelectAllChange}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ function Tab({
return darkMode ? tabDarkThemeStyles : tabLightThemeStyles;
}

// eslint-disable-next-line @mongodb-js/compass/no-inline-emotion-css
return css(tabTheme);
}, [tabTheme, darkMode]);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ export const connectingIconStyle = css`
animation: ${connectingIconAnimation} 1.5s linear infinite;
`;

const noMarkerStyles = css({
width: spacing[200],
height: spacing[200],
});

function ConnectingStatusMarker(): React.ReactElement {
return (
<svg
Expand Down Expand Up @@ -86,7 +91,7 @@ function FailedStatusMarker(): React.ReactElement {
}

function NoMarker(): React.ReactElement {
return <div style={{ width: spacing[200], height: spacing[200] }}></div>;
return <div className={noMarkerStyles}></div>;
}

const MARKER_COMPONENTS: Record<StatusMarker, React.FunctionComponent> = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,12 @@ const treeContainerStyles = css({
transitionTimingFunction: 'linear',
});

const treeSVGStyles = css({
position: 'absolute',
top: 0,
left: 0,
});

function TreeLayout<T, X>({
data,
getNodeSize,
Expand Down Expand Up @@ -212,10 +218,10 @@ function TreeLayout<T, X>({
className={treeContainerStyles}
>
<svg
className={treeSVGStyles}
ref={svgRef}
width={width}
height={height}
style={{ position: 'absolute', top: 0, left: 0 }}
>
<defs>
<marker
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ const chunksInputStyles = css({
gap: spacing[100],
});

const accordionStyles = css({
paddingLeft: spacing[400],
});

const nbsp = '\u00a0';

type ShardingAdvancedOption = 'default' | 'unique-index' | 'hashed-index';
Expand Down Expand Up @@ -219,7 +223,7 @@ export function CreateShardKeyForm({
text="Advanced Shard Key Configuration"
open={isAdvancedOptionsOpen}
setOpen={setIsAdvancedOptionsOpen}
className={css({ paddingLeft: spacing[400] })}
className={accordionStyles}
>
<RadioGroup
className={advanceOptionsGroupStyles}
Expand Down
Loading
Loading