From b2836fe9d4380038090e2fb3f8fd7067a32a0282 Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Wed, 14 Jun 2023 13:31:07 -0700 Subject: [PATCH] [tech debt] Lint Emotion CSS-in-JS (#6839) * Upgrade `stylelint` to latest v15+ - see https://github.com/stylelint/stylelint/blob/main/docs/migration-guide/to-15.md - this removal of Prettier conflicts will save us a lot of setup for CSS-in-JS * Move Sass-specific rules & deprecated v15 rules - to Sass overrides only - we'll need a separate set of rules for CSS-in-JS later - see https://github.com/stylelint/stylelint/blob/main/docs/user-guide/rules.md#deprecated * Install + setup stylelint css-in-js custom syntax - @see https://github.com/hudochenkov/postcss-styled-syntax + set up rule overrides as necessary to handle JS-specific issues * [cleanup] remove unnecessary extra `*-fix` scripts - in favor of simply typing `--fix` manually, or calling `yarn llint-fix` - remove lint-sass-fix entirely since we're moving away from sass * Change all inline CSS `//` comments to `/* */` - required by parser - see https://github.com/hudochenkov/postcss-styled-syntax#known-issues * Fix `//` comment + usage of static px - use `mathWithUnits` and border width var instead * Fix `EuiMark` comments + style architecture - use obj keys so that Emotion correctly generates the expected classNames - use conditionals in array, not in CSS generation - use separate fn for SR styles that take a custom arg * Add `stylelint-disable`s for `!important` usage - matches Sass * Lint extra trailing `;`s Our various JS utils generally include trailing `;`s and don't need extra `;`s after them + lint a few extra trailing `}`s which stylelint also catches * Lint double `::`s for pseudo elements * Lint `:not()` syntax - new stylelint default in v15 uses commas (complex) instead of chained `:not()`s - disable for Sass - wasn't previously linted * Handle `property-no-vendor-prefix` lint rule - valid usage in this case, but in general we should lint for it * Lint `rule-empty-line-before` - `except` isn't handling JS interpolation well, so change it to `ignore` instead * Update snapshots * Quiet deprecation warnings from CLI - Sass will be going away soon and is irrelevant - CSS-in-JS has one deprecation warning (extra semicolons), but it's pretty dang useful, so I think we should not warn on it * Add wiki faq for CSS comments - I'm sure this will come up in the future otherwise --- .stylelintrc.js | 150 +++++--- package.json | 17 +- .../screen_reader_only.styles.ts | 18 +- .../skip_link/skip_link.styles.ts | 3 +- src/components/accordion/accordion.styles.ts | 12 +- src/components/avatar/avatar.styles.ts | 6 +- src/components/badge/badge.styles.ts | 24 +- .../badge/badge_group/badge_group.styles.ts | 2 +- .../badge_notification.styles.ts | 2 +- .../__snapshots__/basic_table.test.tsx.snap | 4 +- .../in_memory_table.test.tsx.snap | 4 +- src/components/beacon/beacon.styles.ts | 16 +- .../bottom_bar/bottom_bar.styles.ts | 2 +- .../breadcrumbs/breadcrumb.styles.ts | 21 +- .../breadcrumbs/breadcrumbs.styles.ts | 8 +- .../button_display/_button_display.styles.ts | 2 +- .../_button_display_content.styles.ts | 4 +- src/components/call_out/call_out.styles.ts | 6 +- src/components/card/card.styles.ts | 105 +++--- .../card/card_select/card_select.styles.ts | 2 +- .../checkable_card/checkable_card.styles.ts | 4 +- src/components/code/code_block.styles.ts | 8 +- src/components/code/code_block_line.styles.ts | 6 +- .../color_stops/color_stop_thumb.styles.ts | 9 +- .../color_stops/color_stops.styles.ts | 9 +- .../__snapshots__/data_grid.test.tsx.snap | 4 +- .../date_picker/date_picker_range.styles.ts | 18 +- .../description_list_description.styles.ts | 8 +- .../description_list_title.styles.ts | 12 +- .../error_boundary/error_boundary.styles.ts | 6 +- .../expression/expression.styles.ts | 16 +- src/components/facet/facet_button.styles.ts | 4 +- src/components/flex/flex_group.styles.ts | 2 +- src/components/flyout/flyout.styles.ts | 26 +- src/components/flyout/flyout_body.styles.ts | 4 +- .../form/range/range_highlight.styles.ts | 2 +- .../form/range/range_levels.styles.ts | 2 +- .../form/range/range_slider.styles.ts | 23 +- .../form/range/range_thumb.styles.ts | 6 +- .../form/range/range_ticks.styles.ts | 8 +- .../form/range/range_tooltip.styles.ts | 2 +- .../form/range/range_track.styles.ts | 6 +- .../form/range/range_wrapper.styles.ts | 4 +- .../header_breadcrumbs.styles.ts | 2 +- .../__snapshots__/highlight.test.tsx.snap | 16 +- .../horizontal_rule/horizontal_rule.styles.ts | 5 +- src/components/icon/icon.styles.ts | 30 +- src/components/image/image.styles.ts | 16 +- src/components/image/image_button.styles.ts | 10 +- src/components/image/image_caption.styles.ts | 7 +- .../image/image_fullscreen_wrapper.styles.ts | 8 +- src/components/image/image_wrapper.styles.ts | 6 +- .../list_group/list_group.styles.ts | 4 +- .../list_group/list_group_item.styles.ts | 14 +- .../pinnable_list_group.styles.ts | 2 +- .../loading/loading_chart.styles.ts | 10 +- .../loading/loading_elastic.styles.ts | 2 +- src/components/loading/loading_logo.styles.ts | 20 +- .../loading/loading_spinner.styles.ts | 2 +- .../mark/__snapshots__/mark.test.tsx.snap | 2 +- src/components/mark/mark.styles.ts | 56 ++- src/components/mark/mark.tsx | 33 +- src/components/modal/modal.styles.ts | 15 +- src/components/modal/modal_body.styles.ts | 6 +- src/components/modal/modal_footer.styles.ts | 2 +- src/components/modal/modal_header.styles.ts | 2 +- .../overlay_mask/overlay_mask.styles.ts | 6 +- .../overlay_mask/overlay_mask.test.tsx | 4 +- src/components/page/page.styles.ts | 8 +- .../page/page_body/page_body.styles.ts | 4 +- .../page/page_header/page_header.styles.ts | 10 +- .../page_header/page_header_content.styles.ts | 8 +- .../page/page_section/page_section.styles.ts | 20 +- .../page/page_sidebar/page_sidebar.styles.ts | 4 +- .../page_template/inner/page_inner.styles.ts | 2 +- .../page_template/outer/page_outer.styles.ts | 2 +- .../__snapshots__/pagination.test.tsx.snap | 40 +-- .../pagination_button.test.tsx.snap | 2 +- .../pagination/pagination.styles.ts | 11 +- .../pagination/pagination_button.styles.ts | 12 +- src/components/panel/panel.styles.ts | 8 +- src/components/popover/popover.styles.ts | 2 +- .../popover_arrow/_popover_arrow.styles.ts | 12 +- .../popover/popover_footer.styles.ts | 4 +- .../popover_panel/_popover_panel.styles.ts | 14 +- .../popover/popover_title.styles.ts | 4 +- .../progress.styles.test.ts.snap | 32 +- src/components/progress/progress.styles.ts | 10 +- .../selectable_list.test.tsx.snap | 4 +- .../skeleton/skeleton_circle.styles.ts | 8 +- .../skeleton/skeleton_text.styles.ts | 2 +- .../skeleton/skeleton_title.styles.ts | 14 +- src/components/spacer/spacer.styles.ts | 2 +- src/components/steps/step.styles.ts | 12 +- .../steps/step_horizontal.styles.ts | 6 +- src/components/steps/step_number.styles.ts | 8 +- .../steps/steps_horizontal.styles.ts | 8 +- src/components/steps/sub_steps.styles.ts | 2 +- .../table_pagination.test.tsx.snap | 20 +- src/components/tabs/tab.styles.ts | 8 +- src/components/tabs/tabs.styles.ts | 6 +- .../__snapshots__/text.styles.test.ts.snap | 30 +- src/components/text/text.styles.ts | 33 +- src/components/text/text_color.styles.ts | 3 +- .../timeline/timeline_item_icon.styles.ts | 2 +- src/components/title/title.styles.ts | 2 +- .../toast/global_toast_list.styles.ts | 42 +-- src/components/toast/toast.styles.ts | 32 +- src/components/token/token.styles.ts | 22 +- src/components/tool_tip/tool_tip.styles.ts | 22 +- src/components/tour/tour.styles.ts | 34 +- .../__snapshots__/utility.test.tsx.snap | 14 +- .../amsterdam/global_styling/mixins/button.ts | 2 +- .../developing/writing-styles-with-emotion.md | 6 + yarn.lock | 328 +++++++++++------- 115 files changed, 963 insertions(+), 795 deletions(-) diff --git a/.stylelintrc.js b/.stylelintrc.js index c9d4baa4c1c..a9f4a8aa115 100644 --- a/.stylelintrc.js +++ b/.stylelintrc.js @@ -1,24 +1,13 @@ const camelCaseRegex = '^[a-z][\\w-]*$'; // Note: also allows `_` as part of BEM naming +const camelCaseValueRegex = '/^[a-z][\\w.]*$/'; // Note: also allows `.` for JS objects +const cssInJsVarRegex = '/\\${[a-zA-Z]+/'; -// TODO: Remove Sass-specific config & rules once we're completely off Sass module.exports = { - extends: ['stylelint-config-standard-scss', 'stylelint-config-prettier-scss'], // @see https://stylelint.io/user-guide/rules - // @see https://github.com/stylelint-scss/stylelint-scss#list-of-rules rules: { // Enforce camelCase naming 'selector-class-pattern': camelCaseRegex, 'keyframes-name-pattern': camelCaseRegex, - 'scss/dollar-variable-pattern': camelCaseRegex, - 'scss/at-mixin-pattern': camelCaseRegex, - 'scss/at-function-pattern': camelCaseRegex, - // TODO: This rule can be removed entirely (already lower by default) once we're fully off Sass - 'function-name-case': [ - 'lower', - { - ignoreFunctions: [`/${camelCaseRegex}/`, 'MIN'], - }, - ], // Opinionated rules 'declaration-no-important': true, @@ -36,47 +25,19 @@ module.exports = { }, ], - // 2 spaces for indentation - indentation: [ - 2, - { - indentInsideParens: 'once-at-root-twice-in-block', - }, - ], - 'string-quotes': 'single', - // Mimic 1tbs `} else {` brace style, like our JS - 'block-opening-brace-space-before': 'always', - 'block-closing-brace-newline-before': 'always-multi-line', - 'scss/at-if-closing-brace-space-after': 'always-intermediate', + // Non-Prettier newline rules // Put a line-break between sections of CSS, but allow quick one-liners for legibility 'rule-empty-line-before': [ 'always-multi-line', { - except: ['first-nested'], - ignore: ['after-comment'], + ignore: ['first-nested', 'after-comment'], }, ], - // Ensure multiple selectors on one line each - 'selector-list-comma-newline-before': 'never-multi-line', - 'selector-list-comma-newline-after': 'always', - // Trim unnecessary newlines/whitespace - 'block-closing-brace-empty-line-before': 'never', + 'comment-empty-line-before': null, 'declaration-empty-line-before': null, - 'max-empty-lines': 1, - 'no-eol-whitespace': true, - // Enforce spacing around various syntax symbols (colons, operators, etc.) - 'declaration-colon-space-after': 'always-single-line', - 'declaration-colon-space-before': 'never', - 'function-calc-no-unspaced-operator': true, - 'scss/operator-no-unspaced': true, - 'selector-combinator-space-before': 'always', - 'selector-combinator-space-after': 'always', - // Ensure trailing semicolons are always present on non-oneliners - 'declaration-block-semicolon-newline-after': 'always-multi-line', // Value preferences 'number-max-precision': null, - 'color-hex-case': 'upper', // Attempt to catch/flag non-variable color values 'color-named': 'never', 'color-no-hex': true, @@ -103,17 +64,96 @@ module.exports = { 'no-descending-specificity': null, 'keyframe-selector-notation': null, 'declaration-block-no-redundant-longhand-properties': null, - 'scss/no-global-function-names': null, - 'scss/dollar-variable-empty-line-before': null, - 'scss/at-rule-conditional-no-parentheses': null, - 'scss/double-slash-comment-empty-line-before': null, - 'scss/at-if-no-null': null, - 'selector-not-notation': null, }, - ignoreFiles: [ - 'generator-eui/**/*.scss', - 'src/global_styling/react_date_picker/**/*.scss', - 'src/themes/amsterdam/global_styling/react_date_picker/**/*.scss', - 'src/components/date_picker/react-datepicker/**/*.scss', + overrides: [ + { + // TODO: Remove Sass-specific config & rules once we're completely off Sass + files: ['**/*.scss'], + ignoreFiles: [ + 'generator-eui/**/*.scss', + 'src/global_styling/react_date_picker/**/*.scss', + 'src/themes/amsterdam/global_styling/react_date_picker/**/*.scss', + 'src/components/date_picker/react-datepicker/**/*.scss', + ], + extends: [ + 'stylelint-config-standard-scss', + 'stylelint-config-prettier-scss', + ], + // @see https://github.com/stylelint-scss/stylelint-scss#list-of-rules + rules: { + // Casing + 'scss/dollar-variable-pattern': camelCaseRegex, + 'scss/at-mixin-pattern': camelCaseRegex, + 'scss/at-function-pattern': camelCaseRegex, + 'function-name-case': [ + 'lower', + { + ignoreFunctions: [`/${camelCaseRegex}/`, 'MIN'], + }, + ], + + // Whitespace/newlines + 'scss/at-if-closing-brace-space-after': 'always-intermediate', + 'scss/operator-no-unspaced': true, + + // Formatting rules deprecated as of v15 - keep them in Sass styles just in case until end of migration + // @see https://github.com/stylelint/stylelint/blob/main/docs/user-guide/rules.md#deprecated + 'color-hex-case': 'upper', + 'string-quotes': 'single', + // 2 spaces for indentation + indentation: [2, { indentInsideParens: 'once-at-root-twice-in-block' }], + // Mimic 1tbs `} else {` brace style, like our JS + 'block-opening-brace-space-before': 'always', + 'block-closing-brace-newline-before': 'always-multi-line', + // Ensure multiple selectors on one line each + 'selector-list-comma-newline-before': 'never-multi-line', + 'selector-list-comma-newline-after': 'always', + // Trim unnecessary newlines/whitespace + 'block-closing-brace-empty-line-before': 'never', + 'max-empty-lines': 1, + 'no-eol-whitespace': true, + // Enforce spacing around various syntax symbols (colons, operators, etc.) + 'declaration-colon-space-after': 'always-single-line', + 'declaration-colon-space-before': 'never', + 'function-calc-no-unspaced-operator': true, + 'selector-combinator-space-before': 'always', + 'selector-combinator-space-after': 'always', + // Ensure trailing semicolons are always present on non-oneliners + 'declaration-block-semicolon-newline-after': 'always-multi-line', + + // Disable various opinionated extended stylelint rules that EUI has not previously enforced + 'scss/no-global-function-names': null, + 'scss/dollar-variable-empty-line-before': null, + 'scss/at-rule-conditional-no-parentheses': null, + 'scss/double-slash-comment-empty-line-before': null, + 'scss/at-if-no-null': null, + 'selector-not-notation': null, // Enforce comma notation for CSS-in-JS moving forward + }, + }, + { + files: ['**/*.styles.ts', '**/*.ts', '**/*.tsx'], + extends: ['stylelint-config-standard'], + customSyntax: 'postcss-styled-syntax', + rules: { + // Unfortunately, double slash comments must be replaced with standard CSS /* */ comments + // Otherwise we get a parsing error - see https://github.com/hudochenkov/postcss-styled-syntax#known-issues + 'no-invalid-double-slash-comments': true, + // Empty style keys should be allowed, as Emotion still uses them for generating classNames + 'no-empty-source': null, + // Don't lint casing on interpolated JS vars + 'function-name-case': ['lower', { ignoreFunctions: [cssInJsVarRegex] }], + 'function-no-unknown': [true, { ignoreFunctions: [cssInJsVarRegex] }], + 'value-keyword-case': [ + 'lower', + { + ignoreProperties: ['font-family'], + ignoreKeywords: [camelCaseValueRegex], + }, + ], + // This is set to deprecate after stylelint v16, but in the meanwhile, is helpful + // for finding extraneous semicolons after utils that already output semicolons (e.g. logicalCSS()) + 'no-extra-semicolons': true, + }, + }, ], }; diff --git a/package.json b/package.json index 078e2ef4e76..c019aec4a3c 100644 --- a/package.json +++ b/package.json @@ -25,12 +25,11 @@ "compile-icons": "node ./scripts/compile-icons.js && prettier --write --loglevel=warn \"./src/components/icon/assets/**/*.tsx\"", "compile-scss": "node ./scripts/compile-scss.js", "extract-i18n-strings": "node ./scripts/babel/fetch-i18n-strings", - "lint": "yarn tsc --noEmit && yarn lint-es && yarn lint-sass", - "lint-fix": "yarn lint-es-fix", + "lint": "yarn tsc --noEmit && yarn lint-es && yarn lint-css-in-js && yarn lint-sass", + "lint-fix": "yarn lint-es --fix && yarn lint-css-in-js --fix", "lint-es": "eslint --cache \"{src,src-docs}/**/*.{ts,tsx,js}\" --max-warnings 0", - "lint-es-fix": "yarn lint-es --fix", - "lint-sass": "yarn stylelint \"**/*.scss\"", - "lint-sass-fix": "yarn stylelint \"**/*.scss\" --fix", + "lint-css-in-js": "yarn stylelint \"**/*.styles.ts\" \"./src/themes/**/*.ts\" \"./src/global_styling/**/*.ts\" --quiet-deprecation-warnings", + "lint-sass": "yarn stylelint \"**/*.scss\" --quiet-deprecation-warnings", "test": "yarn lint && yarn test-unit", "test-ci": "yarn test && yarn test-cypress", "test-unit": "cross-env NODE_ENV=test jest --config ./scripts/jest/config.json", @@ -217,6 +216,7 @@ "postcss-cli": "^7.1.2", "postcss-inline-svg": "^4.1.0", "postcss-loader": "^7.0.1", + "postcss-styled-syntax": "^0.4.0", "pre-commit": "^1.2.2", "prettier": "^2.8.8", "process": "^0.11.10", @@ -243,9 +243,10 @@ "start-server-and-test": "^1.11.3", "storybook": "^7.0.17", "style-loader": "^3.3.1", - "stylelint": "^14.15.0", - "stylelint-config-prettier-scss": "^0.0.1", - "stylelint-config-standard-scss": "^6.1.0", + "stylelint": "^15.7.0", + "stylelint-config-prettier-scss": "^1.0.0", + "stylelint-config-standard": "^33.0.0", + "stylelint-config-standard-scss": "^9.0.0", "terser-webpack-plugin": "^5.3.5", "typescript": "4.5.3", "uglifyjs-webpack-plugin": "^2.2.0", diff --git a/src/components/accessibility/screen_reader_only/screen_reader_only.styles.ts b/src/components/accessibility/screen_reader_only/screen_reader_only.styles.ts index 3599923538a..5099dea3540 100644 --- a/src/components/accessibility/screen_reader_only/screen_reader_only.styles.ts +++ b/src/components/accessibility/screen_reader_only/screen_reader_only.styles.ts @@ -14,20 +14,20 @@ import { logicalCSS, logicalSizeCSS } from '../../../global_styling'; * See https://github.com/elastic/eui/pull/5130 and https://github.com/elastic/eui/pull/5152 for more info */ export const euiScreenReaderOnly = () => ` - // Take the element out of the layout + /* Take the element out of the layout */ position: absolute; - // Keep it vertically inline + /* Keep it vertically inline */ ${logicalCSS('top', 'auto')} - // Chrome requires a left value, and Selenium (used by Kibana's FTR) requires an off-screen position for its .getVisibleText() to not register SR-only text + /* Chrome requires a left value, and Selenium (used by Kibana's FTR) requires an off-screen position for its .getVisibleText() to not register SR-only text */ ${logicalCSS('left', '-10000px')} - // The element must have a size (for some screen readers) + /* The element must have a size (for some screen readers) */ ${logicalSizeCSS('1px', '1px')} - // But reduce the visible size to nothing + /* But reduce the visible size to nothing */ clip: rect(0 0 0 0); clip-path: inset(50%); - // And ensure no overflows occur + /* And ensure no overflows occur */ overflow: hidden; - // Chrome requires the negative margin to not cause overflows of parent containers + /* Chrome requires the negative margin to not cause overflows of parent containers */ margin: -1px; `; @@ -37,8 +37,8 @@ export const euiScreenReaderOnly = () => ` export const euiScreenReaderOnlyStyles = (showOnFocus?: boolean) => ({ euiScreenReaderOnly: showOnFocus ? css` - // The :active selector is necessary for Safari which removes :focus when a button is pressed - &:not(:focus):not(:active):not(:focus-within) { + /* The :active selector is necessary for Safari which removes :focus when a button is pressed */ + &:not(:focus, :active, :focus-within) { ${euiScreenReaderOnly()} } ` diff --git a/src/components/accessibility/skip_link/skip_link.styles.ts b/src/components/accessibility/skip_link/skip_link.styles.ts index cddee59a86d..322d930b30e 100644 --- a/src/components/accessibility/skip_link/skip_link.styles.ts +++ b/src/components/accessibility/skip_link/skip_link.styles.ts @@ -12,6 +12,7 @@ import { UseEuiTheme } from '../../../services'; export const euiSkipLinkStyles = ({ euiTheme }: UseEuiTheme) => { return { euiSkipLink: css` + /* stylelint-disable declaration-no-important */ transition: none !important; &:focus { @@ -27,7 +28,7 @@ export const euiSkipLinkStyles = ({ euiTheme }: UseEuiTheme) => { } `, fixed: css` - position: fixed !important; // Needs to override euiScreenReaderOnly - prevents scroll jumping in Firefox + position: fixed !important; /* Needs to override euiScreenReaderOnly - prevents scroll jumping in Firefox */ &:focus { inset-block-start: ${euiTheme.size.xs}; diff --git a/src/components/accordion/accordion.styles.ts b/src/components/accordion/accordion.styles.ts index 68326ba6b77..120376be425 100644 --- a/src/components/accordion/accordion.styles.ts +++ b/src/components/accordion/accordion.styles.ts @@ -19,7 +19,7 @@ export const euiAccordionButtonStyles = (euiThemeContext: UseEuiTheme) => { const { euiTheme } = euiThemeContext; return { euiAccordion__button: css` - ${euiFontSize(euiThemeContext, 's')}; + ${euiFontSize(euiThemeContext, 's')} align-items: center; display: flex; flex-grow: 1; @@ -81,7 +81,7 @@ export const euiAccordionChildWrapperStyles = ({ euiTheme }: UseEuiTheme) => ({ visibility: hidden; &:focus { - outline: none; // Hide focus ring because of tabindex=-1 on Safari + outline: none; /* Hide focus ring because of tabindex=-1 on Safari */ } `, isOpen: css` @@ -95,10 +95,14 @@ export const euiAccordionIconButtonStyles = ({ euiTheme }: UseEuiTheme) => ({ euiAccordion__iconButton: css` flex-shrink: 0; ${logicalCSS('margin-right', euiTheme.size.xs)} - transform: rotate(0deg) !important; + transform: rotate( + 0deg + ) !important; /* stylelint-disable-line declaration-no-important */ `, isOpen: css` - transform: rotate(90deg) !important; + transform: rotate( + 90deg + ) !important; /* stylelint-disable-line declaration-no-important */ `, arrowRight: css` ${logicalCSS('margin-left', euiTheme.size.xs)} diff --git a/src/components/avatar/avatar.styles.ts b/src/components/avatar/avatar.styles.ts index 75fe1f6404d..ef10b294e9f 100644 --- a/src/components/avatar/avatar.styles.ts +++ b/src/components/avatar/avatar.styles.ts @@ -28,16 +28,16 @@ const _avatarSize = ({ export const euiAvatarStyles = ({ euiTheme }: UseEuiTheme) => ({ // Base euiAvatar: css` - // Ensures it never scales down below its intended size + /* Ensures it never scales down below its intended size */ flex-shrink: 0; display: inline-flex; justify-content: center; align-items: center; vertical-align: middle; background-size: cover; - ${logicalTextAlignCSS('center')}; + ${logicalTextAlignCSS('center')} ${logicalCSS('overflow-x', 'hidden')} - // Explicitly state weight so it doesn't get overridden by inheritance + /* Explicitly state weight so it doesn't get overridden by inheritance */ font-weight: ${euiTheme.font.weight.medium}; `, // Variants diff --git a/src/components/badge/badge.styles.ts b/src/components/badge/badge.styles.ts index 4b194e8088a..def70a6a6bc 100644 --- a/src/components/badge/badge.styles.ts +++ b/src/components/badge/badge.styles.ts @@ -29,7 +29,11 @@ export const euiBadgeStyles = (euiThemeContext: UseEuiTheme) => { ${logicalShorthandCSS('padding', `0 ${euiTheme.size.s}`)} ${logicalCSS('max-width', '100%')} font-size: ${euiFontSize(euiThemeContext, 'xs').fontSize}; - line-height: ${euiTheme.base + 2}px; // Accounts for the border + line-height: ${mathWithUnits( + // Account for the border + [euiTheme.size.base, euiTheme.border.width.thin], + (x, y) => x + y * 2 + )}; font-weight: ${euiTheme.font.weight.medium}; white-space: nowrap; text-decoration: none; @@ -40,8 +44,8 @@ export const euiBadgeStyles = (euiThemeContext: UseEuiTheme) => { euiTheme.border.radius.medium, (x) => x / 2 )}; - // The badge will only ever be as wide as its content - // So, make the text left aligned to ensure all badges line up the same + /* The badge will only ever be as wide as its content + So, make the text left aligned to ensure all badges line up the same */ ${logicalTextAlignCSS('left')} &:focus-within { @@ -69,10 +73,14 @@ export const euiBadgeStyles = (euiThemeContext: UseEuiTheme) => { } `, disabled: css` - // Using !important to override inline styles + /* stylelint-disable declaration-no-important */ + + /* Using !important to override inline styles */ color: ${euiButtonColor(euiThemeContext, 'disabled').color} !important; background-color: ${euiButtonColor(euiThemeContext, 'disabled') .backgroundColor} !important; + + /* stylelint-enable declaration-no-important */ `, // Hollow has a border and is mostly used for autocompleters. hollow: css` @@ -127,7 +135,7 @@ export const euiBadgeStyles = (euiThemeContext: UseEuiTheme) => { // Clickable icons (iconOnClick) iconButton: { euiBadge__iconButton: css` - font-size: 0; // Makes the button only as large as the icon so it aligns vertically better + font-size: 0; /* Makes the button only as large as the icon so it aligns vertically better */ &:focus { background-color: ${transparentize(euiTheme.colors.ghost, 0.8)}; @@ -143,10 +151,10 @@ export const euiBadgeStyles = (euiThemeContext: UseEuiTheme) => { } .euiBadge__icon { - // Remove margins from icon itself so that focus state doesn't include that space - margin: 0 !important; + /* Remove margins from icon itself so that focus state doesn't include that space */ + margin: 0 !important; /* stylelint-disable-line declaration-no-important */ } - }`, + `, right: css` ${logicalCSS('margin-left', euiTheme.size.xs)} `, diff --git a/src/components/badge/badge_group/badge_group.styles.ts b/src/components/badge/badge_group/badge_group.styles.ts index f985a4198b3..b66a0d76de0 100644 --- a/src/components/badge/badge_group/badge_group.styles.ts +++ b/src/components/badge/badge_group/badge_group.styles.ts @@ -17,7 +17,7 @@ export const euiBadgeGroupStyles = ({ euiTheme }: UseEuiTheme) => { flex-wrap: wrap; ${logicalCSS('max-width', '100%')} - // Override the .euiBadge + .euiBadge CSS in badge.styles.ts + /* Override the .euiBadge + .euiBadge CSS in badge.styles.ts */ .euiBadge + .euiBadge { ${logicalCSS('margin-left', 0)} } diff --git a/src/components/badge/notification_badge/badge_notification.styles.ts b/src/components/badge/notification_badge/badge_notification.styles.ts index 0e38ca99c46..9f887f51ddd 100644 --- a/src/components/badge/notification_badge/badge_notification.styles.ts +++ b/src/components/badge/notification_badge/badge_notification.styles.ts @@ -23,7 +23,7 @@ export const euiNotificationBadgeStyles = (euiThemeContext: UseEuiTheme) => { return { euiNotificationBadge: css` - flex-shrink: 0; // Ensures it never scales down below its intended size + flex-shrink: 0; /* Ensures it never scales down below its intended size */ display: inline-block; vertical-align: middle; ${logicalCSS('padding-horizontal', euiTheme.size.xs)} diff --git a/src/components/basic_table/__snapshots__/basic_table.test.tsx.snap b/src/components/basic_table/__snapshots__/basic_table.test.tsx.snap index 176625e1870..b678c9f763f 100644 --- a/src/components/basic_table/__snapshots__/basic_table.test.tsx.snap +++ b/src/components/basic_table/__snapshots__/basic_table.test.tsx.snap @@ -844,7 +844,7 @@ exports[`EuiBasicTable renders (kitchen sink) with pagination, selection, sortin aria-controls="__table_generated-id" aria-current="true" aria-label="Page 1 of 2" - class="euiButtonEmpty euiButtonEmpty--small euiPaginationButton css-7ubx5w-empty-disabled-euiPaginationButton-isActive" + class="euiButtonEmpty euiButtonEmpty--small euiPaginationButton css-57pcyl-empty-disabled-euiPaginationButton-isActive" data-test-subj="pagination-button-0" disabled="" type="button" @@ -866,7 +866,7 @@ exports[`EuiBasicTable renders (kitchen sink) with pagination, selection, sortin ({ position: relative; border-radius: 50%; - &:before, - &:after { + &::before, + &::after { position: absolute; content: ''; ${logicalSizeCSS('100%', '100%')} @@ -73,23 +73,23 @@ export const euiBeaconStyles = ({ euiTheme }: UseEuiTheme) => ({ border-radius: 50%; } - // Without the animation, we only display one ring around the circle - // If the animation is allowed the transform and opacity are overriden - &:before { + /* Without the animation, we only display one ring around the circle + If the animation is allowed the transform and opacity are overriden */ + &::before { transform: scale(1.6); opacity: 0.4; } - &:after { + &::after { opacity: 0; } ${euiCanAnimate} { - &:before { + &::before { animation: ${euiBeaconPulseLarge} 2.5s infinite ease-out; } - &:after { + &::after { animation: ${euiBeaconPulseSmall} 2.5s infinite ease-out 0.25s; } } diff --git a/src/components/bottom_bar/bottom_bar.styles.ts b/src/components/bottom_bar/bottom_bar.styles.ts index 612811d0d05..e836756f401 100644 --- a/src/components/bottom_bar/bottom_bar.styles.ts +++ b/src/components/bottom_bar/bottom_bar.styles.ts @@ -30,7 +30,7 @@ export const euiBottomBarStyles = (euiThemeContext: UseEuiTheme) => { // Base // `color` is inherited from the wrapping `EuiThemeProvider colorMode="dark"` euiBottomBar: css` - ${euiShadowFlat(euiThemeContext)}; + ${euiShadowFlat(euiThemeContext)} background: ${shade(euiTheme.colors.lightestShade, 0.5)}; ${euiCanAnimate} { animation: ${euiBottomBarAppear} ${euiTheme.animation.slow} diff --git a/src/components/breadcrumbs/breadcrumb.styles.ts b/src/components/breadcrumbs/breadcrumb.styles.ts index 7395c0ca75a..a9a9b291ba1 100644 --- a/src/components/breadcrumbs/breadcrumb.styles.ts +++ b/src/components/breadcrumbs/breadcrumb.styles.ts @@ -41,7 +41,7 @@ export const euiBreadcrumbStyles = (euiThemeContext: UseEuiTheme) => { // Types page: css` &:not(:last-of-type) { - &:after { + &::after { background: ${euiTheme.colors.lightShade}; content: ''; flex-shrink: 0; @@ -75,22 +75,23 @@ export const euiBreadcrumbContentStyles = (euiThemeContext: UseEuiTheme) => { ${euiTextTruncate(mathWithUnits(euiTheme.size.base, (x) => x * 10))} `, isTruncatedLast: css` - // This removes the default breadcrumb max-width while ensuring that the last breadcrumb - // still cuts off with a '...' if it's overflowing outside the parent breadcrumbs container + /* This removes the default breadcrumb max-width while ensuring that the last breadcrumb + still cuts off with a '...' if it's overflowing outside the parent breadcrumbs container */ ${euiTextTruncate('none')} `, // Types page: css` &:is(a):focus { - ${euiFocusRing(euiThemeContext, 'inset')}; + ${euiFocusRing(euiThemeContext, 'inset')} } + &:is(button):focus { - ${euiFocusRing(euiThemeContext, 'center')}; + ${euiFocusRing(euiThemeContext, 'center')} } `, application: css` - ${euiFontSize(euiThemeContext, 'xs')}; + ${euiFontSize(euiThemeContext, 'xs')} background-color: ${transparentize(euiTheme.colors.darkestShade, 0.2)}; clip-path: polygon( 0 0, @@ -111,7 +112,7 @@ export const euiBreadcrumbContentStyles = (euiThemeContext: UseEuiTheme) => { color: ${euiTheme.colors.link}; :focus { - ${euiFocusRing(euiThemeContext, 'inset')}; + ${euiFocusRing(euiThemeContext, 'inset')} :focus-visible { border-radius: ${euiTheme.border.radius.medium}; @@ -124,7 +125,7 @@ export const euiBreadcrumbContentStyles = (euiThemeContext: UseEuiTheme) => { onlyChild: css` border-radius: ${euiTheme.border.radius.medium}; clip-path: none; - ${logicalCSS('padding-horizontal', euiTheme.size.m)}, + ${logicalCSS('padding-horizontal', euiTheme.size.m)} `, firstChild: css` ${logicalBorderRadiusCSS( @@ -138,7 +139,7 @@ export const euiBreadcrumbContentStyles = (euiThemeContext: UseEuiTheme) => { calc(100% - ${euiTheme.size.s}) 100%, 0 100% ); - ${logicalCSS('padding-left', euiTheme.size.m)}, + ${logicalCSS('padding-left', euiTheme.size.m)} `, lastChild: css` ${logicalBorderRadiusCSS( @@ -152,7 +153,7 @@ export const euiBreadcrumbContentStyles = (euiThemeContext: UseEuiTheme) => { 0 100%, ${euiTheme.size.s} 50% ); - ${logicalCSS('padding-right', euiTheme.size.m)}, + ${logicalCSS('padding-right', euiTheme.size.m)} `, }, }; diff --git a/src/components/breadcrumbs/breadcrumbs.styles.ts b/src/components/breadcrumbs/breadcrumbs.styles.ts index 35501f74620..284d2c927a2 100644 --- a/src/components/breadcrumbs/breadcrumbs.styles.ts +++ b/src/components/breadcrumbs/breadcrumbs.styles.ts @@ -15,7 +15,7 @@ export const euiBreadcrumbsListStyles = (euiThemeContext: UseEuiTheme) => { const { euiTheme } = euiThemeContext; return { euiBreadcrumbs__list: css` - ${euiFontSize(euiThemeContext, 's')}; + ${euiFontSize(euiThemeContext, 's')} align-items: center; display: flex; flex-wrap: wrap; @@ -25,7 +25,11 @@ export const euiBreadcrumbsListStyles = (euiThemeContext: UseEuiTheme) => { 'margin-bottom', `-${euiTheme.size.xs}` )} - ${logicalCSS('min-width', 0)} // Ensure it shrinks if the window is narrow + ${logicalCSS( + // Ensure it shrinks if the window is narrow + 'min-width', + 0 + )} `, isTruncated: css` flex-wrap: nowrap; diff --git a/src/components/button/button_display/_button_display.styles.ts b/src/components/button/button_display/_button_display.styles.ts index c9dad4f60a0..ea9f2556be9 100644 --- a/src/components/button/button_display/_button_display.styles.ts +++ b/src/components/button/button_display/_button_display.styles.ts @@ -42,7 +42,7 @@ export const euiButtonDisplayStyles = (euiThemeContext: UseEuiTheme) => { return { // Base euiButtonDisplay: css` - ${euiButtonBaseCSS()}; + ${euiButtonBaseCSS()} font-weight: ${euiTheme.font.weight.medium}; ${logicalShorthandCSS('padding', `0 ${euiTheme.size.m}`)} diff --git a/src/components/button/button_display/_button_display_content.styles.ts b/src/components/button/button_display/_button_display_content.styles.ts index b8c51744be6..fce13bd931d 100644 --- a/src/components/button/button_display/_button_display_content.styles.ts +++ b/src/components/button/button_display/_button_display_content.styles.ts @@ -12,8 +12,8 @@ import { logicalCSS } from '../../../global_styling'; export const euiButtonDisplayContentStyles = ({ euiTheme }: UseEuiTheme) => ({ // Base euiButtonDisplayContent: css` - ${logicalCSS('height', '100%')}; - ${logicalCSS('width', '100%')}; + ${logicalCSS('height', '100%')} + ${logicalCSS('width', '100%')} display: flex; justify-content: center; align-items: center; diff --git a/src/components/call_out/call_out.styles.ts b/src/components/call_out/call_out.styles.ts index 25e05a57d5b..df020758a0f 100644 --- a/src/components/call_out/call_out.styles.ts +++ b/src/components/call_out/call_out.styles.ts @@ -15,12 +15,12 @@ export const euiCallOutStyles = ({ euiTheme }: UseEuiTheme) => { euiCallOut: css``, euiCallOut__icon: css` position: relative; - ${logicalCSS('top', '-1px')}; - ${logicalCSS('margin-right', euiTheme.size.s)}; + ${logicalCSS('top', '-1px')} + ${logicalCSS('margin-right', euiTheme.size.s)} `, euiCallOut__description: css` :not(:only-child) { - ${logicalCSS('margin-top', euiTheme.size.s)}; + ${logicalCSS('margin-top', euiTheme.size.s)} } `, }; diff --git a/src/components/card/card.styles.ts b/src/components/card/card.styles.ts index e424ce12cb1..841705d3885 100644 --- a/src/components/card/card.styles.ts +++ b/src/components/card/card.styles.ts @@ -44,7 +44,7 @@ export const euiCardStyles = ( justify-content: space-between; flex-direction: column; - // Apply the outline to the whole card when the internal text button has focus + /* Apply the outline to the whole card when the internal text button has focus */ &:has( [class*='euiCard__text'][class*='-interactive']:focus:focus-visible ) { @@ -53,20 +53,20 @@ export const euiCardStyles = ( `, aligned: { center: css` - ${logicalTextAlignCSS('center')}; + ${logicalTextAlignCSS('center')} align-items: center; `, left: css` - ${logicalTextAlignCSS('left')}; + ${logicalTextAlignCSS('left')} align-items: flex-start; `, right: css` - ${logicalTextAlignCSS('right')}; + ${logicalTextAlignCSS('right')} align-items: flex-end; `, }, disabled: css` - cursor: not-allowed; // duplicate property due to Chrome bug + cursor: not-allowed; /* Duplicate property due to Chrome bug */ background-color: ${euiButtonColor(euiThemeContext, 'disabled')}; color: ${euiTheme.colors.disabledText}; `, @@ -96,29 +96,28 @@ export const euiCardStyles = ( layout: { vertical: css` - ${logicalCSS('width', '100%')}; /* 4 */ + /* 4 */ + ${logicalCSS('width', '100%')} `, horizontal: css` - ${logicalCSS( - 'width', - 'auto' - )}; // Makes sure the top shrinks and the content grows + /* Makes sure the top shrinks and the content grows */ + ${logicalCSS('width', 'auto')} `, }, }, euiCard__children: css` - ${logicalCSS('margin-top', halfSpacing)}; + ${logicalCSS('margin-top', halfSpacing)} `, euiCard__description: css` - ${logicalCSS('margin-top', halfSpacing)}; + ${logicalCSS('margin-top', halfSpacing)} `, euiCard__footer: css` flex-grow: 0; /* 1 */ - ${logicalCSS('width', '100%')}; /* 4 */ - ${logicalCSS('margin-top', spacing)}; + ${logicalCSS('width', '100%')} /* 4 */ + ${logicalCSS('margin-top', spacing)} `, top: { @@ -126,18 +125,17 @@ export const euiCardStyles = ( flex-grow: 0; /* 1 */ font-size: 0; position: relative; - ${logicalCSS('margin-bottom', spacing)}; + ${logicalCSS('margin-bottom', spacing)} `, layout: { vertical: css` - ${logicalCSS('width', '100%')}; /* 4 */ + /* 4 */ + ${logicalCSS('width', '100%')} `, horizontal: css` - ${logicalCSS( - 'width', - 'auto' - )}; // Makes sure the top shrinks and the content grows + /* Makes sure the top shrinks and the content grows */ + ${logicalCSS('width', 'auto')} `, }, @@ -151,14 +149,14 @@ export const euiCardStyles = ( position: relative; overflow: hidden; - // Padding based sizing & negative margins - ${logicalCSS('width', `calc(100% + (${paddingAmount} * 2))`)}; - ${logicalCSS('left', `-${paddingAmount}`)}; - ${logicalCSS('top', `-${paddingAmount}`)}; - // ensure the parent is only as tall as the image - ${logicalCSS('margin-bottom', `-${paddingAmount}`)}; + /* Padding based sizing & negative margins */ + ${logicalCSS('width', `calc(100% + (${paddingAmount} * 2))`)} + ${logicalCSS('left', `-${paddingAmount}`)} + ${logicalCSS('top', `-${paddingAmount}`)} + /* Ensure the parent is only as tall as the image */ + ${logicalCSS('margin-bottom', `-${paddingAmount}`)} - // match border radius, minus border width + /* Match border radius, minus border width */ ${logicalCSS( 'border-top-left-radius', `calc(${euiTheme.border.radius.medium} - ${euiTheme.border.width.thin})` @@ -167,7 +165,7 @@ export const euiCardStyles = ( .medium} - ${euiTheme.border.width.thin}); img { - ${logicalCSS('width', '100%')}; /* 4 */ + ${logicalCSS('width', '100%')}/* 4 */ } `, transparent: css` @@ -180,18 +178,21 @@ export const euiCardStyles = ( withImage: css` position: absolute; - ${logicalCSS('top', '50%')}; - ${logicalCSS('left', '50%')}; - // Important needed to override current Sass styles on .euiIcon - transform: translate(-50%, calc(-50% + -${paddingAmount})) !important; + ${logicalCSS('top', '50%')} + ${logicalCSS('left', '50%')} + /* Important needed to override current Sass styles on .euiIcon */ + transform: translate( + -50%, + calc(-50% + -${paddingAmount}) + ) !important; /* stylelint-disable-line declaration-no-important */ `, layout: { vertical: css` - ${logicalCSS('margin-top', halfSpacing)}; + ${logicalCSS('margin-top', halfSpacing)} `, horizontal: css` - ${logicalCSS('margin-right', spacing)}; + ${logicalCSS('margin-right', spacing)} `, }, }, @@ -217,22 +218,22 @@ export const euiCardTextStyles = (euiThemeContext: UseEuiTheme) => { text-decoration: underline; } - // Progressive enhancement where we remove focus from text as - // it will be applied to the whole card instead + /* Progressive enhancement where we remove focus from text as + it will be applied to the whole card instead */ ${euiSupportsHas} { - outline: none !important; + outline: none !important; /* stylelint-disable-line declaration-no-important */ } `, aligned: { center: css` - ${logicalTextAlignCSS('center')}; + ${logicalTextAlignCSS('center')} `, left: css` - ${logicalTextAlignCSS('left')}; + ${logicalTextAlignCSS('left')} `, right: css` - ${logicalTextAlignCSS('right')}; + ${logicalTextAlignCSS('right')} `, }, @@ -252,29 +253,29 @@ export const euiCardBetaBadgeStyles = ( return { hasBetaBadge: css` position: relative; - // Ensure badges are visible outside of the whole card + /* Ensure badges are visible outside of the whole card */ overflow: visible; - // Increase top padding to make room - ${logicalCSS('padding-top', `calc(${padding} + ${euiTheme.size.s})`)}; + /* Increase top padding to make room */ + ${logicalCSS('padding-top', `calc(${padding} + ${euiTheme.size.s})`)} `, euiCard__betaBadgeAnchor: css` - // Ensure there's no extra inherited height for proper translate value + /* Ensure there's no extra inherited height for proper translate value */ line-height: 0; position: absolute; - ${logicalCSS('top', '0')}; - ${logicalCSS('left', '50%')}; + ${logicalCSS('top', '0')} + ${logicalCSS('left', '50%')} transform: translateX(-50%) translateY(-50%); - // Get above abs positioned image + /* Get above absolutely positioned image */ z-index: 3; - // Todo: $euiButtonMinWidth - // Extend beta badges to at least 30% of the container's width or 112px (whichever is smaller) - ${logicalCSS('min-width', 'min(30%, 112px)')}; - ${logicalCSS('max-width', `calc(100% - (${padding} * 2))`)}; + /* TODO: $euiButtonMinWidth */ + /* Extend beta badges to at least 30% of the container's width or 112px (whichever is smaller) */ + ${logicalCSS('min-width', 'min(30%, 112px)')} + ${logicalCSS('max-width', `calc(100% - (${padding} * 2))`)} `, euiCard__betaBadge: css` - ${logicalCSS('width', '100%')}; + ${logicalCSS('width', '100%')} `, }; }; diff --git a/src/components/card/card_select/card_select.styles.ts b/src/components/card/card_select/card_select.styles.ts index 25fe4ddb243..c411270e08a 100644 --- a/src/components/card/card_select/card_select.styles.ts +++ b/src/components/card/card_select/card_select.styles.ts @@ -11,7 +11,7 @@ import { css } from '@emotion/react'; export const euiCardSelectStyles = () => { return { euiCardSelect: css` - transform: none !important; + transform: none !important; /* stylelint-disable-line declaration-no-important */ align-self: flex-end; `, }; diff --git a/src/components/card/checkable_card/checkable_card.styles.ts b/src/components/card/checkable_card/checkable_card.styles.ts index dd5e8da3c79..775619c16b2 100644 --- a/src/components/card/checkable_card/checkable_card.styles.ts +++ b/src/components/card/checkable_card/checkable_card.styles.ts @@ -33,7 +33,7 @@ export const euiCheckableCardStyles = (euiThemeContext: UseEuiTheme) => { label: { euiCheckableCard__label: css` cursor: pointer; - // Expand the label to cover the whole panel for easier click target + /* Expand the label to cover the whole panel for easier click target */ display: block; ${logicals.width}: calc(100% + (${padding} * 2)); padding: ${padding}; @@ -47,7 +47,7 @@ export const euiCheckableCardStyles = (euiThemeContext: UseEuiTheme) => { }, euiCheckableCard__children: css` - ${logicalCSS('margin-top', euiTheme.size.base)}; + ${logicalCSS('margin-top', euiTheme.size.base)} `, }; }; diff --git a/src/components/code/code_block.styles.ts b/src/components/code/code_block.styles.ts index 1b7a915b0fd..454a97109c0 100644 --- a/src/components/code/code_block.styles.ts +++ b/src/components/code/code_block.styles.ts @@ -38,13 +38,13 @@ export const euiCodeBlockStyles = (euiThemeContext: UseEuiTheme) => { `, // Font size s: css` - ${euiFontSize(euiThemeContext, 'xs')}; + ${euiFontSize(euiThemeContext, 'xs')} `, m: css` - ${euiFontSize(euiThemeContext, 's')}; + ${euiFontSize(euiThemeContext, 's')} `, l: css` - ${euiFontSize(euiThemeContext, 'm')}; + ${euiFontSize(euiThemeContext, 'm')} `, // Variants transparentBackground: css` @@ -143,7 +143,7 @@ export const euiCodeBlockCodeStyles = (euiThemeContext: UseEuiTheme) => { display: block; `, isVirtualized: css` - // Necessary for virtualized code blocks to have appropriate padding + /* Necessary for virtualized code blocks to have appropriate padding */ position: relative; `, }; diff --git a/src/components/code/code_block_line.styles.ts b/src/components/code/code_block_line.styles.ts index b3d5a113632..74766b8dbbe 100644 --- a/src/components/code/code_block_line.styles.ts +++ b/src/components/code/code_block_line.styles.ts @@ -52,15 +52,15 @@ export const euiCodeBlockLineStyles = (euiThemeContext: UseEuiTheme) => { flex-shrink: 0; user-select: none; padding-inline-end: ${euiTheme.size.m}; - box-sizing: content-box; // Width is calculated in JS and padding needs to be added on to that value. + box-sizing: content-box; /* Width is calculated in JS and padding needs to be added on to that value */ `, euiCodeBlock__lineNumber: css` color: ${euiTheme.colors.subduedText}; text-align: end; display: block; - // Note: This must use a CSS pseudo element to print the line number - // to prevent line numbers from being copied as text + /* Note: This must use a CSS pseudo element to print the line number + to prevent line numbers from being copied as text */ &::before { content: attr(data-line-number); } diff --git a/src/components/color_picker/color_stops/color_stop_thumb.styles.ts b/src/components/color_picker/color_stops/color_stop_thumb.styles.ts index 802563d64a8..1dea78f03d2 100644 --- a/src/components/color_picker/color_stops/color_stop_thumb.styles.ts +++ b/src/components/color_picker/color_stops/color_stop_thumb.styles.ts @@ -32,7 +32,7 @@ export const euiColorStopThumbStyles = (euiThemeContext: UseEuiTheme) => { } `, isPopoverOpen: css` - ${euiRangeThumbFocus(euiThemeContext)}; + ${euiRangeThumbFocus(euiThemeContext)} `, }; }; @@ -57,8 +57,8 @@ export const euiColorStopThumbPopoverStyles = ( inline-size: 100%; block-size: 100%; - // Background color can potentially have opacity - // Pseudo element placed below the thumb to prevent the track from showing through + /* Background color can potentially have opacity + Pseudo element placed below the thumb to prevent the track from showing through */ &::before { content: ''; display: block; @@ -73,7 +73,8 @@ export const euiColorStopThumbPopoverStyles = ( } `, isLoadingPanel: css` - visibility: hidden !important; // Overrides a stateful class on EuiPopover -> EuiPanel + /* Overrides a stateful class on EuiPopover -> EuiPanel */ + visibility: hidden !important; /* stylelint-disable-line declaration-no-important */ `, hasFocus: css` z-index: ${range.thumbZIndex}; diff --git a/src/components/color_picker/color_stops/color_stops.styles.ts b/src/components/color_picker/color_stops/color_stops.styles.ts index f32f3073400..abf000a06e0 100644 --- a/src/components/color_picker/color_stops/color_stops.styles.ts +++ b/src/components/color_picker/color_stops/color_stops.styles.ts @@ -38,10 +38,11 @@ export const euiColorStopsStyles = (euiThemeContext: UseEuiTheme) => { // Base euiColorStops: css``, isEnabled: css` - // Show focus ring on keyboard focus only and not mouse click/drag + /* Show focus ring on keyboard focus only and not mouse click/drag */ &:focus { outline: none; } + &:focus-visible { .euiColorStops__track::after { box-shadow: 0 0 0 1px @@ -59,12 +60,12 @@ export const euiColorStopsStyles = (euiThemeContext: UseEuiTheme) => { euiColorStops__track: css` &::after { background: ${stripesBackground}; - background-size: ${euiTheme.size.xs} ${euiTheme.size.xs}; // Percentage stops and background-size are both needed for Safari to render the gradient at fullWidth correctly + background-size: ${euiTheme.size.xs} ${euiTheme.size.xs}; /* Percentage stops and background-size are both needed for Safari to render the gradient at fullWidth correctly */ } `, euiColorStops__addTarget: css` - ${euiCustomControl(euiThemeContext, { type: 'round' })}; - ${euiRangeThumbStyle(euiThemeContext)}; + ${euiCustomControl(euiThemeContext, { type: 'round' })} + ${euiRangeThumbStyle(euiThemeContext)} position: absolute; inset-block-start: 0; block-size: ${range.thumbHeight}; diff --git a/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap b/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap index 738cf4ebced..0e0ce8c2819 100644 --- a/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap +++ b/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap @@ -77,7 +77,7 @@ exports[`EuiDataGrid pagination renders 1`] = ` { return { euiDatePickerRange: css` .euiFieldText.euiDatePicker { - // Needed for correct focus/invalid box-shadow styles + /* Needed for correct focus/invalid box-shadow styles */ ${logicalCSS('height', controlLayoutGroupInputHeight)} } `, @@ -41,12 +41,12 @@ export const euiDatePickerRangeInlineStyles = ( container-type: inline-size; .euiFormControlLayout__childrenWrapper { - // Use static px widths for now, since render behavior comes from a third party library + /* Use static px widths for now, since render behavior comes from a third party library */ @container (max-width: ${datePickerWidth * 2 + delimiterWidth}px) { - // Unset grid display + /* Unset grid display */ display: block !important; - // Center and point the default delimiter arrow downwards + /* Center and point the default delimiter arrow downwards */ & > .euiText > [data-icon-type='sortRight'] { transform: rotate(90deg); margin-inline: auto; @@ -57,7 +57,7 @@ export const euiDatePickerRangeInlineStyles = ( return { inline: css` .euiFormControlLayoutDelimited { - // Reset form control styling + /* Reset form control styling */ ${logicalCSS('height', 'auto')} ${logicalCSS('width', 'fit-content')} ${logicalCSS('max-width', '100%')} @@ -73,7 +73,7 @@ export const euiDatePickerRangeInlineStyles = ( background-color: transparent; } - // Fix --group height when append/prepend are present + /* Fix --group height when append/prepend are present */ &.euiFormControlLayout--group { & > *, .euiFormControlLayoutDelimited__delimiter { @@ -81,7 +81,7 @@ export const euiDatePickerRangeInlineStyles = ( } } - // Display form control icons below both date pickers + /* Display form control icons below both date pickers */ .euiFormControlLayoutIcons { justify-content: center; grid-column: 1 / span 3; @@ -90,12 +90,12 @@ export const euiDatePickerRangeInlineStyles = ( } } - // Make sure the inline date picker sets is absolute positioning based off the correct parent + /* Make sure the inline date picker sets is absolute positioning based off the correct parent */ .react-datepicker { position: relative; } - // The time list creates some weird spacing when inline. Remove its padding to make it less horizontally unbalanced + /* The time list creates some weird spacing when inline. Remove its padding to make it less horizontally unbalanced */ .react-datepicker__time-list { padding: 0; } diff --git a/src/components/description_list/description_list_description.styles.ts b/src/components/description_list/description_list_description.styles.ts index 2d4fd920a5f..5847b7e86d5 100644 --- a/src/components/description_list/description_list_description.styles.ts +++ b/src/components/description_list/description_list_description.styles.ts @@ -51,7 +51,7 @@ export const euiDescriptionListDescriptionStyles = ( // This nested block handles just the font styling based on compressed and reverse fontStyles: { normal: css` - ${euiFontSize(euiThemeContext, 's')}; + ${euiFontSize(euiThemeContext, 's')} `, reverse: css` ${euiTitle(euiThemeContext, 'xs')} @@ -64,16 +64,16 @@ export const euiDescriptionListDescriptionStyles = ( // Nested inline styles for type and font inlineStyles: { compressed: css` - ${euiFontSize(euiThemeContext, 'xs')}; + ${euiFontSize(euiThemeContext, 'xs')} `, normal: css` - ${euiFontSize(euiThemeContext, 's')}; + ${euiFontSize(euiThemeContext, 's')} `, }, // Column types should align description text to the left when EuiDecriptionList is centered left: css` - ${logicalTextAlignCSS('left')}; + ${logicalTextAlignCSS('left')} `, // Gutter diff --git a/src/components/description_list/description_list_title.styles.ts b/src/components/description_list/description_list_title.styles.ts index d8b445e8871..f114157c2a8 100644 --- a/src/components/description_list/description_list_title.styles.ts +++ b/src/components/description_list/description_list_title.styles.ts @@ -54,7 +54,7 @@ export const euiDescriptionListTitleStyles = (euiThemeContext: UseEuiTheme) => { ${logicalCSS('margin-vertical', '0')} ${logicalCSS('margin-horizontal', euiTheme.size.xs)} - // Make sure the first
doesn't get a margin. + /* Make sure the first
doesn't get a margin */ &:first-of-type { ${logicalCSS('margin-left', '0')} } @@ -63,10 +63,10 @@ export const euiDescriptionListTitleStyles = (euiThemeContext: UseEuiTheme) => { // This nested block handles just the font styling based on compressed and reverse fontStyles: { normal: css` - ${euiTitle(euiThemeContext, 'xs')}; + ${euiTitle(euiThemeContext, 'xs')} `, reverse: css` - ${euiFontSize(euiThemeContext, 's')}; + ${euiFontSize(euiThemeContext, 's')} `, compressed: css` ${euiTitle(euiThemeContext, 'xxs')} @@ -76,12 +76,12 @@ export const euiDescriptionListTitleStyles = (euiThemeContext: UseEuiTheme) => { // Inline types inlineStyles: { normal: css` - ${euiFontSize(euiThemeContext, 's')}; + ${euiFontSize(euiThemeContext, 's')} ${logicalCSS('padding-vertical', '1px')} ${logicalCSS('padding-horizontal', euiTheme.size.xs)} `, compressed: css` - ${euiFontSize(euiThemeContext, 'xs')}; + ${euiFontSize(euiThemeContext, 'xs')} ${logicalCSS('padding-vertical', '0')} ${logicalCSS('padding-horizontal', euiTheme.size.xs)} `, @@ -89,7 +89,7 @@ export const euiDescriptionListTitleStyles = (euiThemeContext: UseEuiTheme) => { // Alignment right: css` - ${logicalTextAlignCSS('right')}; + ${logicalTextAlignCSS('right')} `, // Gutter diff --git a/src/components/error_boundary/error_boundary.styles.ts b/src/components/error_boundary/error_boundary.styles.ts index 8b6b3c42a7d..27adf527c3a 100644 --- a/src/components/error_boundary/error_boundary.styles.ts +++ b/src/components/error_boundary/error_boundary.styles.ts @@ -23,9 +23,9 @@ export const euiErrorBoundaryStyles = ({ euiTheme }: UseEuiTheme) => { ${color2} 1px, ${color2} 19px ); - background-size: 54px 54px; // Fix for Safari 15.4+ - ${logicalCSS('padding-horizontal', euiTheme.size.base)}; - ${logicalCSS('padding-vertical', euiTheme.size.base)}; + background-size: 54px 54px; /* Fix for Safari 15.4+ */ + ${logicalCSS('padding-horizontal', euiTheme.size.base)} + ${logicalCSS('padding-vertical', euiTheme.size.base)} `, }; }; diff --git a/src/components/expression/expression.styles.ts b/src/components/expression/expression.styles.ts index 1490e85719e..7a43f176717 100644 --- a/src/components/expression/expression.styles.ts +++ b/src/components/expression/expression.styles.ts @@ -31,14 +31,14 @@ export const euiExpressionStyles = (euiThemeContext: UseEuiTheme) => { const { euiTheme } = euiThemeContext; return { euiExpression: css` - ${euiTextBreakWord()}; + ${euiTextBreakWord()} display: inline-block; font-family: ${euiTheme.font.familyCode}; ${logicalCSS( 'border-bottom', `${euiTheme.border.width.thick} solid transparent` )} - ${euiFontSize(euiThemeContext, 's')}; + ${euiFontSize(euiThemeContext, 's')} ${logicalTextAlignCSS('left')} ${logicalShorthandCSS( 'padding', @@ -58,7 +58,7 @@ export const euiExpressionStyles = (euiThemeContext: UseEuiTheme) => { // Variants columns: css` border-color: transparent; - // Ensures there's no flash of the dashed style before turning solid for the active state + /* Ensures there's no flash of the dashed style before turning solid for the active state */ ${logicalCSS('border-bottom-style', 'solid')} ${logicalCSS('margin-bottom', euiTheme.size.xs)} @@ -84,7 +84,7 @@ export const euiExpressionStyles = (euiThemeContext: UseEuiTheme) => { &:hover:not(:disabled) { [class*='euiExpression__description'], [class*='euiExpression__value'] { - // inner child specificity so it inherits underline color from text color + /* Inner child specificity so it inherits underline color from text color */ text-decoration: underline; } } @@ -155,8 +155,8 @@ export const euiExpressionDescriptionStyles = ({ euiTheme }: UseEuiTheme) => { `, columns: css` ${logicalTextAlignCSS('right')} - ${logicalCSS('margin-right', euiTheme.size.s)}; - flex-shrink: 0; // Ensures it doesn't get smaller in case the value is really long + ${logicalCSS('margin-right', euiTheme.size.s)} + flex-shrink: 0; /* Ensures it doesn't get smaller in case the value is really long */ `, }; }; @@ -178,10 +178,10 @@ export const euiExpressionValueStyles = ({}: UseEuiTheme) => { export const euiExpressionIconStyles = ({ euiTheme }: UseEuiTheme) => { return { euiExpression__icon: css` - ${logicalCSS('margin-left', euiTheme.size.xs)}; + ${logicalCSS('margin-left', euiTheme.size.xs)} `, columns: css` - ${logicalCSS('margin-top', euiTheme.size.xs)}; + ${logicalCSS('margin-top', euiTheme.size.xs)} `, }; }; diff --git a/src/components/facet/facet_button.styles.ts b/src/components/facet/facet_button.styles.ts index ad241e18ec7..d057a31fd64 100644 --- a/src/components/facet/facet_button.styles.ts +++ b/src/components/facet/facet_button.styles.ts @@ -19,11 +19,11 @@ import { euiLinkFocusCSS } from '../link/link.styles'; export const euiFacetButtonStyles = ({ euiTheme }: UseEuiTheme) => ({ // Base euiFacetButton: css` - ${logicalTextAlignCSS('left')}; + ${logicalTextAlignCSS('left')} &:hover, &:focus { - // Make sure the quantity doesn't get an underline on hover + /* Make sure the quantity doesn't get an underline on hover */ &:not(:disabled) [class*='euiFacetButton__text'] { text-decoration: underline; } diff --git a/src/components/flex/flex_group.styles.ts b/src/components/flex/flex_group.styles.ts index 84640987330..1efb18e3318 100644 --- a/src/components/flex/flex_group.styles.ts +++ b/src/components/flex/flex_group.styles.ts @@ -16,7 +16,7 @@ export const euiFlexGroupStyles = (euiThemeContext: UseEuiTheme) => { euiFlexGroup: css` display: flex; align-items: stretch; - flex-grow: 1; // Grow nested flex-groups by default + flex-grow: 1; /* Grow nested flex-groups by default */ `, responsive: css` ${euiMaxBreakpoint(euiThemeContext, 'm')} { diff --git a/src/components/flyout/flyout.styles.ts b/src/components/flyout/flyout.styles.ts index 8b323c030e9..f4acc6f9e08 100644 --- a/src/components/flyout/flyout.styles.ts +++ b/src/components/flyout/flyout.styles.ts @@ -56,15 +56,16 @@ export const euiFlyoutCloseButtonStyles = (euiThemeContext: UseEuiTheme) => { background-color: ${transparentize(euiTheme.colors.emptyShade, 0.9)}; `, outside: css` - // Match dropshadow - ${euiShadowXLarge(euiThemeContext)}; - // Override the hover and focus transitions of buttons - animation: none !important; + /* Match dropshadow */ + ${euiShadowXLarge(euiThemeContext)} + /* Override the hover and focus transitions of buttons */ + animation: none !important; /* stylelint-disable-line declaration-no-important */ `, outsideSide: { // `transforms` pull in close buttons a little // `!important` is necessary here to override the hover/focus transitions of buttons right: css` + /* stylelint-disable declaration-no-important */ ${logicalCSS('left', 0)} ${euiMaxBreakpoint(euiThemeContext, 'm')} { @@ -73,8 +74,10 @@ export const euiFlyoutCloseButtonStyles = (euiThemeContext: UseEuiTheme) => { ${euiMinBreakpoint(euiThemeContext, 'm')} { transform: translateX(calc(-100% - ${euiTheme.size.l})) !important; } + /* stylelint-enable declaration-no-important */ `, left: css` + /* stylelint-disable declaration-no-important */ ${logicalCSS('right', 0)} ${euiMaxBreakpoint(euiThemeContext, 'm')} { @@ -83,6 +86,7 @@ export const euiFlyoutCloseButtonStyles = (euiThemeContext: UseEuiTheme) => { ${euiMinBreakpoint(euiThemeContext, 'm')} { transform: translateX(calc(100% + ${euiTheme.size.l})) !important; } + /* stylelint-enable declaration-no-important */ `, }, }; @@ -104,13 +108,13 @@ export const euiFlyoutStyles = (euiThemeContext: UseEuiTheme) => { align-items: stretch; &:focus { - // Remove focus ring because of tabindex=0 + /* Remove focus ring because of tabindex=0 */ outline: none; } ${euiMaxBreakpoint(euiThemeContext, 'm')} { - // 1. Leave only a small sliver exposed on small screens so users understand that this is not a new page - // 2. If a custom maxWidth is set, we need to override it. + /* 1. Leave only a small sliver exposed on small screens so users understand that this is not a new page + 2. If a custom maxWidth is set, we need to override it. */ ${logicalCSS('max-width', '90vw !important')} } `, @@ -152,13 +156,13 @@ export const euiFlyoutStyles = (euiThemeContext: UseEuiTheme) => { // Type overlay: css` - ${euiShadowXLarge(euiThemeContext)}; + ${euiShadowXLarge(euiThemeContext)} `, push: css` clip-path: none; - // Don't animate on loading a docked nav - animation-duration: 0s !important; - // Make sure the header shadows are above + /* Don't animate on loading a docked nav */ + animation-duration: 0s !important; /* stylelint-disable-line declaration-no-important */ + /* Make sure the header shadows are above */ z-index: ${Number(euiTheme.levels.flyout) - 1}; `, pushSide: { diff --git a/src/components/flyout/flyout_body.styles.ts b/src/components/flyout/flyout_body.styles.ts index 8823ca796e2..29e0234d8d2 100644 --- a/src/components/flyout/flyout_body.styles.ts +++ b/src/components/flyout/flyout_body.styles.ts @@ -22,10 +22,10 @@ export const euiFlyoutBodyStyles = (euiThemeContext: UseEuiTheme) => { `, euiFlyoutBody__overflow: { noBanner: css` - ${euiYScrollWithShadows(euiThemeContext)}; + ${euiYScrollWithShadows(euiThemeContext)} `, hasBanner: css` - ${euiYScrollWithShadows(euiThemeContext, { side: 'end' })}; + ${euiYScrollWithShadows(euiThemeContext, { side: 'end' })} `, }, euiFlyoutBody__banner: css` diff --git a/src/components/form/range/range_highlight.styles.ts b/src/components/form/range/range_highlight.styles.ts index 3eed5e653ea..7bdd987fac7 100644 --- a/src/components/form/range/range_highlight.styles.ts +++ b/src/components/form/range/range_highlight.styles.ts @@ -41,7 +41,7 @@ export const euiRangeHighlightProgressStyles = ( border-radius: ${range.trackBorderRadius}; background-color: ${range.highlightColor}; - // Change highlight color to focus on keyboard focus and on mouse drag + /* Change highlight color to focus on keyboard focus and on mouse drag */ .euiRangeSlider:focus-visible ~ .euiRangeHighlight &, .euiRangeThumb:focus-visible ~ .euiRangeHighlight &, .euiRangeDraggable:focus ~ .euiRangeHighlight & { diff --git a/src/components/form/range/range_levels.styles.ts b/src/components/form/range/range_levels.styles.ts index c764ff37cc7..22ead60d895 100644 --- a/src/components/form/range/range_levels.styles.ts +++ b/src/components/form/range/range_levels.styles.ts @@ -43,7 +43,7 @@ export const euiRangeLevelsStyles = (euiThemeContext: UseEuiTheme) => { block-size: ${range.trackHeight}; inline-size: 100%; background-image: ${stripesBackground}; - background-size: ${euiTheme.size.xs} ${euiTheme.size.xs}; // Percentage stops and background-size are both needed for Safari to render the gradient at fullWidth correctly + background-size: ${euiTheme.size.xs} ${euiTheme.size.xs}; /* Percentage stops and background-size are both needed for Safari to render the gradient at fullWidth correctly */ border-radius: ${range.trackBorderRadius}; } `, diff --git a/src/components/form/range/range_slider.styles.ts b/src/components/form/range/range_slider.styles.ts index 80770feeec5..2720b764821 100644 --- a/src/components/form/range/range_slider.styles.ts +++ b/src/components/form/range/range_slider.styles.ts @@ -26,16 +26,16 @@ export const euiRangeSliderStyles = (euiThemeContext: UseEuiTheme) => { // Base euiRangeSlider: css` appearance: none; - background: transparent; // Otherwise white in Chrome - inline-size: 100%; // Ensures the slider expands to fill flex display - block-size: 100%; // Inherits both regular and compressed heights from the range wrapper + background: transparent; /* Otherwise white in Chrome */ + inline-size: 100%; /* Ensures the slider expands to fill flex display */ + block-size: 100%; /* Inherits both regular and compressed heights from the range wrapper */ position: relative; - cursor: pointer; // Keep cursor to full range bounds + cursor: pointer; /* Keep cursor to full range bounds */ z-index: ${range.thumbZIndex}; ${euiRangeThumbPerBrowser(` - ${euiCustomControl(euiThemeContext, { type: 'round' })}; - ${euiRangeThumbStyle(euiThemeContext)}; + ${euiCustomControl(euiThemeContext, { type: 'round' })} + ${euiRangeThumbStyle(euiThemeContext)} `)} &:disabled { @@ -43,16 +43,18 @@ export const euiRangeSliderStyles = (euiThemeContext: UseEuiTheme) => { ${euiRangeThumbPerBrowser('cursor: not-allowed')} } - // Resets + /* Resets */ + /* stylelint-disable property-no-vendor-prefix */ &::-webkit-slider-thumb { -webkit-appearance: none; } + /* stylelint-enable property-no-vendor-prefix */ &:focus { outline: none; } - // Styles that should appear only on keyboard focus, not click + /* Styles that should appear only on keyboard focus, not click */ &:focus-visible { ${euiRangeThumbPerBrowser(euiRangeThumbFocus(euiThemeContext))} @@ -62,12 +64,13 @@ export const euiRangeSliderStyles = (euiThemeContext: UseEuiTheme) => { } `, hasTicks: css` - block-size: ${range.thumbHeight}; // the track has the same height as the thumb + block-size: ${range.thumbHeight}; /* the track has the same height as the thumb */ `, hasRange: css` + /* stylelint-disable no-extra-semicolons */ ${euiRangeTrackPerBrowser(` background-color: transparent; - border-color: ${transparentize(range.trackBorderColor, 0.6)}; + border-color: ${transparentize(range.trackBorderColor, 0.6)} `)} `, hasLevels: css` diff --git a/src/components/form/range/range_thumb.styles.ts b/src/components/form/range/range_thumb.styles.ts index 534ace2b88f..ac6fee34185 100644 --- a/src/components/form/range/range_thumb.styles.ts +++ b/src/components/form/range/range_thumb.styles.ts @@ -22,8 +22,8 @@ export const euiRangeThumbStyles = (euiThemeContext: UseEuiTheme) => { return { // Base euiRangeThumb: css` - ${euiCustomControl(euiThemeContext, { type: 'round' })}; - ${euiRangeThumbStyle(euiThemeContext)}; + ${euiCustomControl(euiThemeContext, { type: 'round' })} + ${euiRangeThumbStyle(euiThemeContext)} content: ''; position: absolute; inset-inline-start: 0; @@ -36,7 +36,7 @@ export const euiRangeThumbStyles = (euiThemeContext: UseEuiTheme) => { z-index: ${range.thumbZIndex}; &:focus { - ${euiRangeThumbFocus(euiThemeContext)}; + ${euiRangeThumbFocus(euiThemeContext)} outline: none; } `, diff --git a/src/components/form/range/range_ticks.styles.ts b/src/components/form/range/range_ticks.styles.ts index 11f3772f527..217bf203e95 100644 --- a/src/components/form/range/range_ticks.styles.ts +++ b/src/components/form/range/range_ticks.styles.ts @@ -88,14 +88,14 @@ export const euiRangeTickStyles = (euiThemeContext: UseEuiTheme) => { `, // compressed and non-compressed styles compressed: css` - ${logicalCSS('padding-top', euiTheme.size.s)}; + ${logicalCSS('padding-top', euiTheme.size.s)} &::before { - ${logicalCSS('margin-top', euiTheme.size.xxs)}; + ${logicalCSS('margin-top', euiTheme.size.xxs)} } `, regular: css` - ${logicalCSS('padding-top', euiTheme.size.m)}; + ${logicalCSS('padding-top', euiTheme.size.m)} `, selected: css` font-weight: ${euiTheme.font.weight.medium}; @@ -113,7 +113,7 @@ export const euiRangeTickStyles = (euiThemeContext: UseEuiTheme) => { } `, euiRangeTick__pseudo: css` - ${tickStyles(euiThemeContext, range)}; + ${tickStyles(euiThemeContext, range)} `, isMin: css` transform: translateX(0); diff --git a/src/components/form/range/range_tooltip.styles.ts b/src/components/form/range/range_tooltip.styles.ts index 16924ee234c..6ca22103b78 100644 --- a/src/components/form/range/range_tooltip.styles.ts +++ b/src/components/form/range/range_tooltip.styles.ts @@ -22,7 +22,7 @@ export const euiRangeTooltipStyles = (euiThemeContext: UseEuiTheme) => { return { // Base euiRangeTooltip: css` - // Keeps tooltip (value) aligned to percentage of actual slider + /* Keeps tooltip (value) aligned to percentage of actual slider */ display: block; position: absolute; inset-inline-start: 0; diff --git a/src/components/form/range/range_track.styles.ts b/src/components/form/range/range_track.styles.ts index a7c677024c8..15a9e085ee7 100644 --- a/src/components/form/range/range_track.styles.ts +++ b/src/components/form/range/range_track.styles.ts @@ -16,10 +16,10 @@ export const euiRangeTrackStyles = (euiThemeContext: UseEuiTheme) => { return { // Base euiRangeTrack: css` - block-size: 100%; // Don't overflow euiRangeWrapper + block-size: 100%; /* Don't overflow euiRangeWrapper */ flex-grow: 1; - position: relative; // for positioning ticks/levels - align-self: flex-start; // Adjust vertical alignment of input based on extras + position: relative; /* For positioning ticks/levels */ + align-self: flex-start; /* Adjust vertical alignment of input based on extras */ &::after { content: ''; diff --git a/src/components/form/range/range_wrapper.styles.ts b/src/components/form/range/range_wrapper.styles.ts index de52462498c..983c0fa0b72 100644 --- a/src/components/form/range/range_wrapper.styles.ts +++ b/src/components/form/range/range_wrapper.styles.ts @@ -17,8 +17,8 @@ export const euiRangeWrapperStyles = (euiThemeContext: UseEuiTheme) => { align-items: center; > .euiFormControlLayout { - // There's no way to target the layout of the extra input, so we must - // use the descendant selector to allow the width to shrink. + /* There's no way to target the layout of the extra input, so we must + * use the descendant selector to allow the width to shrink. */ inline-size: auto; } `, diff --git a/src/components/header/header_breadcrumbs/header_breadcrumbs.styles.ts b/src/components/header/header_breadcrumbs/header_breadcrumbs.styles.ts index 5357432c3c4..545fea2623a 100644 --- a/src/components/header/header_breadcrumbs/header_breadcrumbs.styles.ts +++ b/src/components/header/header_breadcrumbs/header_breadcrumbs.styles.ts @@ -13,7 +13,7 @@ import { euiTextTruncate, logicalCSS } from '../../../global_styling'; export const euiHeaderBreadcrumbsStyles = ({ euiTheme }: UseEuiTheme) => { return { euiHeaderBreadcrumbs: css` - ${euiTextTruncate()}; + ${euiTextTruncate()} align-items: center; display: flex; flex-grow: 1; diff --git a/src/components/highlight/__snapshots__/highlight.test.tsx.snap b/src/components/highlight/__snapshots__/highlight.test.tsx.snap index d5d3c2a9aba..9aba3496518 100644 --- a/src/components/highlight/__snapshots__/highlight.test.tsx.snap +++ b/src/components/highlight/__snapshots__/highlight.test.tsx.snap @@ -4,7 +4,7 @@ exports[`EuiHighlight behavior loose matching matches strings with different cas different case @@ -15,19 +15,19 @@ exports[`EuiHighlight behavior loose matching matches strings with different cas exports[`EuiHighlight behavior matching applies to all matches 1`] = ` match match match @@ -37,19 +37,19 @@ exports[`EuiHighlight behavior matching applies to all matches 1`] = ` exports[`EuiHighlight behavior matching hasScreenReaderHelpText can be false 1`] = ` match match match @@ -59,7 +59,7 @@ exports[`EuiHighlight behavior matching hasScreenReaderHelpText can be false 1`] exports[`EuiHighlight behavior matching only applies to first match 1`] = ` match diff --git a/src/components/horizontal_rule/horizontal_rule.styles.ts b/src/components/horizontal_rule/horizontal_rule.styles.ts index c19f76cda94..152796e7a08 100644 --- a/src/components/horizontal_rule/horizontal_rule.styles.ts +++ b/src/components/horizontal_rule/horizontal_rule.styles.ts @@ -15,8 +15,9 @@ export const euiHorizontalRuleStyles = ({ euiTheme }: UseEuiTheme) => ({ border: none; ${logicalCSS('height', euiTheme.border.width.thin)} background-color: ${euiTheme.border.color}; - flex-shrink: 0; // Ensure when used in flex group, it retains its size - flex-grow: 0; // Ensure when used in flex group, it retains its size + /* Ensure when used in flex group, it retains its size */ + flex-shrink: 0; + flex-grow: 0; `, // Sizes diff --git a/src/components/icon/icon.styles.ts b/src/components/icon/icon.styles.ts index b81897c9bed..175fb1079b8 100644 --- a/src/components/icon/icon.styles.ts +++ b/src/components/icon/icon.styles.ts @@ -32,17 +32,17 @@ const iconLoading = keyframes` export const euiIconStyles = ({ euiTheme }: UseEuiTheme) => ({ // Base euiIcon: css` - flex-shrink: 0; // Ensures it never scales down below its intended size + flex-shrink: 0; /* Ensures it never scales down below its intended size */ display: inline-block; vertical-align: middle; fill: currentColor; - transform: translate(0, 0); // Hack to fix Firefox "softness" + transform: translate(0, 0); /* Hack to fix Firefox "softness" */ - // Note: This className is hard-coded into our SVGs and cannot be converted to Emotion + /* Note: This className is hard-coded into our SVGs and cannot be converted to Emotion */ .euiIcon__fillNegative { - // Use the negative fill on SVG elements that need to flip portions - // of the icon to light and dark compatible modes. You can see this - // in use on the Elastic logo icons. + /* Use the negative fill on SVG elements that need to flip portions + of the icon to light and dark compatible modes. You can see this + in use on the Elastic logo icons. */ fill: ${euiTheme.colors.darkestShade}; } `, @@ -56,10 +56,10 @@ export const euiIconStyles = ({ euiTheme }: UseEuiTheme) => ({ ghost: css` color: ${euiTheme.colors.ghost}; - // Really force all paths to inherit (specifically for logos) + /* Really force all paths to inherit (specifically for logos) */ *[fill], .euiIcon__fillNegative { - fill: currentColor !important; + fill: currentColor !important; /* stylelint-disable-line declaration-no-important */ } `, primary: css` @@ -74,10 +74,10 @@ export const euiIconStyles = ({ euiTheme }: UseEuiTheme) => ({ text: css` color: ${euiTheme.colors.title}; - // Really force all paths to inherit (specifically for logos) + /* Really force all paths to inherit (specifically for logos) */ *[fill], .euiIcon__fillNegative { - fill: currentColor !important; + fill: currentColor !important; /* stylelint-disable-line declaration-no-important */ } `, warning: css` @@ -89,13 +89,13 @@ export const euiIconStyles = ({ euiTheme }: UseEuiTheme) => ({ default: css``, customColor: css``, logoElasticOutline: css` - // Elastic logo specific colors + /* Elastic logo specific colors */ *[fill] { - fill: none !important; + fill: none !important; /* stylelint-disable-line declaration-no-important */ } .outline { - fill: currentColor !important; + fill: currentColor !important; /* stylelint-disable-line declaration-no-important */ } `, // Sizes @@ -110,9 +110,9 @@ export const euiIconStyles = ({ euiTheme }: UseEuiTheme) => ({ app: css` fill: ${euiTheme.colors.text}; - // Note: This className is hard-coded into our SVGs and cannot be converted to Emotion + /* Note: This className is hard-coded into our SVGs and cannot be converted to Emotion */ .euiIcon__fillSecondary { - // This provides the default secondary color + /* This provides the default secondary color */ fill: ${euiTheme.colors.successText}; } `, diff --git a/src/components/image/image.styles.ts b/src/components/image/image.styles.ts index 8bff84141b8..0fd1c6e3d2a 100644 --- a/src/components/image/image.styles.ts +++ b/src/components/image/image.styles.ts @@ -14,22 +14,22 @@ import { euiShadow } from '../../themes/amsterdam/global_styling/mixins'; export const euiImageStyles = (euiThemeContext: UseEuiTheme) => ({ euiImage: css` vertical-align: middle; - ${logicalCSS('max-width', '100%')}; + ${logicalCSS('max-width', '100%')} &, - // Required for common usage of nesting within EuiText + /* Required for common usage of nesting within EuiText */ [class*='euiText'] & { - ${logicalCSS('margin-bottom', 0)}; + ${logicalCSS('margin-bottom', 0)} } `, // Variations isFullScreen: css` position: relative; - ${logicalCSS('max-height', '80vh')}; - ${logicalCSS('max-width', '80vw')}; + ${logicalCSS('max-height', '80vh')} + ${logicalCSS('max-width', '80vw')} `, hasShadow: css` - ${euiShadow(euiThemeContext, 's')}; + ${euiShadow(euiThemeContext, 's')} `, // Sizes // These sizes are mostly suggestions. Don't look too hard for meaning in their values. @@ -53,8 +53,8 @@ export const euiImageStyles = (euiThemeContext: UseEuiTheme) => ({ ${logicalCSS('width', '100%')} `, customSize: css` - // A custom max-width and max-height is set in the style tag - // We set the width back to auto to ensure aspect ratio is kept + /* A custom max-width and max-height is set in the style tag + We set the width back to auto to ensure aspect ratio is kept */ ${logicalCSS('width', 'auto')} `, }); diff --git a/src/components/image/image_button.styles.ts b/src/components/image/image_button.styles.ts index ea4a714fdeb..39bc625e6a4 100644 --- a/src/components/image/image_button.styles.ts +++ b/src/components/image/image_button.styles.ts @@ -22,11 +22,11 @@ export const euiImageButtonStyles = (euiThemeContext: UseEuiTheme) => { text-align: match-parent; line-height: 0; - // Shadow on hover - use a pseudo element & opacity for maximum animation performance + /* Shadow on hover - use a pseudo element & opacity for maximum animation performance */ &::before { opacity: 0; content: ''; - pointer-events: none; // Prevent interacting with this element, it's for visual effect only + pointer-events: none; /* Prevent interacting with this element, it's for visual effect only */ position: absolute; inset: 0; @@ -71,8 +71,8 @@ export const euiImageButtonIconStyles = ({ euiTheme }: UseEuiTheme) => ({ // Base euiImageButton__icon: css` position: absolute; - ${logicalCSS('top', euiTheme.size.base)}; - ${logicalCSS('right', euiTheme.size.base)}; + ${logicalCSS('top', euiTheme.size.base)} + ${logicalCSS('right', euiTheme.size.base)} `, openFullScreen: css` opacity: 0; @@ -84,7 +84,7 @@ export const euiImageButtonIconStyles = ({ euiTheme }: UseEuiTheme) => ({ } `, closeFullScreen: css` - // Fullscreen close event handled by EuiOverlayMask + /* Fullscreen close event handled by EuiOverlayMask */ pointer-events: none; `, }); diff --git a/src/components/image/image_caption.styles.ts b/src/components/image/image_caption.styles.ts index 89a08203321..a7c03a12a28 100644 --- a/src/components/image/image_caption.styles.ts +++ b/src/components/image/image_caption.styles.ts @@ -16,15 +16,16 @@ export const euiImageCaptionStyles = (euiThemeContext: UseEuiTheme) => { return { // Base euiImageCaption: css` - ${euiFontSize(euiThemeContext, 's')}; - ${logicalCSS('margin-top', euiTheme.size.xs)}; + ${euiFontSize(euiThemeContext, 's')} + ${logicalCSS('margin-top', euiTheme.size.xs)} `, isOnOverlayMask: css` color: ${euiTheme.colors.ghost}; text-shadow: 0 1px 2px ${transparentize(euiTheme.colors.ink, 0.6)}; [class*='euiLink'] { - color: ${euiTheme.colors.ghost}; // Override link color for visibility + /* Override link color for visibility */ + color: ${euiTheme.colors.ghost}; } `, }; diff --git a/src/components/image/image_fullscreen_wrapper.styles.ts b/src/components/image/image_fullscreen_wrapper.styles.ts index 698d662aa7e..c1aa95193d2 100644 --- a/src/components/image/image_fullscreen_wrapper.styles.ts +++ b/src/components/image/image_fullscreen_wrapper.styles.ts @@ -23,10 +23,10 @@ export const euiImageFullscreenWrapperStyles = ( return { // Base euiImageFullscreenWrapper: css` - ${logicalCSS('max-height', '80vh')}; - ${logicalCSS('max-width', '80vw')}; - ${logicalTextAlignCSS('center')}; // Aligns both caption and image - line-height: 0; // Fixes cropping when image is resized by forcing its height to be determined by the image not line-height + ${logicalCSS('max-height', '80vh')} + ${logicalCSS('max-width', '80vw')} + ${logicalTextAlignCSS('center')} /* Aligns both caption and image */ + line-height: 0; /* Fixes cropping when image is resized by forcing its height to be determined by the image not line-height */ ${euiCanAnimate} { animation: ${euiAnimSlideInUp(euiTheme.size.xxxxl)} diff --git a/src/components/image/image_wrapper.styles.ts b/src/components/image/image_wrapper.styles.ts index a2c0bbb584b..4302be327b7 100644 --- a/src/components/image/image_wrapper.styles.ts +++ b/src/components/image/image_wrapper.styles.ts @@ -23,9 +23,9 @@ export const euiImageWrapperStyles = (euiThemeContext: UseEuiTheme) => { euiImageWrapper: css` display: inline-block; ${logicalCSS('max-width', '100%')} - ${logicalTextAlignCSS('center')}; // Aligns both caption and image - line-height: 0; // Fixes cropping when image is resized by forcing its height to be determined by the image not line-height - flex-shrink: 0; // Don't ever let this shrink in height if direct descendent of flex + ${logicalTextAlignCSS('center')} /* Aligns both caption and image */ + line-height: 0; /* Fixes cropping when image is resized by forcing its height to be determined by the image not line-height */ + flex-shrink: 0; /* Don't ever let this shrink in height if direct descendent of flex */ `, allowFullScreen: css` &:hover [class*='euiImageCaption'] { diff --git a/src/components/list_group/list_group.styles.ts b/src/components/list_group/list_group.styles.ts index bff8a08bd8a..240212bb570 100644 --- a/src/components/list_group/list_group.styles.ts +++ b/src/components/list_group/list_group.styles.ts @@ -26,7 +26,7 @@ export const euiListGroupStyles = (euiThemeContext: UseEuiTheme) => { padding: 0; border: none; - // override the default border radius + /* Override the default border radius */ .euiListGroupItem { border-radius: 0; } @@ -36,7 +36,7 @@ export const euiListGroupStyles = (euiThemeContext: UseEuiTheme) => { border: ${euiTheme.border.thin}; `, maxWidthDefault: css` - ${logicalCSS('max-width', form.maxWidth)}; + ${logicalCSS('max-width', form.maxWidth)} `, // Gutter sizes none: css``, diff --git a/src/components/list_group/list_group_item.styles.ts b/src/components/list_group/list_group_item.styles.ts index ed6b0d1ed0f..47204d84e58 100644 --- a/src/components/list_group/list_group_item.styles.ts +++ b/src/components/list_group/list_group_item.styles.ts @@ -111,23 +111,23 @@ export const euiListGroupItemInnerStyles = (euiThemeContext: UseEuiTheme) => { `, // Sizes xs: css` - ${euiFontSize(euiThemeContext, 'xs')}; + ${euiFontSize(euiThemeContext, 'xs')} font-weight: ${euiTheme.font.weight.medium}; letter-spacing: 0; ${logicalCSS('min-height', euiTheme.size.l)} `, s: css` - ${euiFontSize(euiThemeContext, 's')}; + ${euiFontSize(euiThemeContext, 's')} font-weight: ${euiTheme.font.weight.medium}; letter-spacing: 0; ${logicalCSS('min-height', euiTheme.size.xl)} `, m: css` - ${euiFontSize(euiThemeContext, 'm')}; + ${euiFontSize(euiThemeContext, 'm')} ${logicalCSS('min-height', euiTheme.size.xl)} `, l: css` - ${euiFontSize(euiThemeContext, 'l')}; + ${euiFontSize(euiThemeContext, 'l')} ${logicalCSS('min-height', euiTheme.size.xxl)} `, // Colors @@ -183,7 +183,7 @@ export const euiListGroupItemIconStyles = ({ euiTheme }: UseEuiTheme) => { return { // Base euiListGroupItem__icon: css` - ${logicalCSS('margin-right', euiTheme.size.m)}; + ${logicalCSS('margin-right', euiTheme.size.m)} flex-grow: 0; flex-shrink: 0; `, @@ -194,8 +194,8 @@ export const euiListGroupItemTooltipStyles = () => { return { // Base euiListGroupItem__tooltip: css` - display: inline-flex; // Allows the wrapped button/text to grow - ${logicalCSS('width', '100%')}; + display: inline-flex; /* Allows the wrapped button/text to grow */ + ${logicalCSS('width', '100%')} `, }; }; diff --git a/src/components/list_group/pinnable_list_group/pinnable_list_group.styles.ts b/src/components/list_group/pinnable_list_group/pinnable_list_group.styles.ts index f1e7648f7c1..c01c691bf40 100644 --- a/src/components/list_group/pinnable_list_group/pinnable_list_group.styles.ts +++ b/src/components/list_group/pinnable_list_group/pinnable_list_group.styles.ts @@ -21,7 +21,7 @@ export const euiPinnableListGroupItemExtraActionStyles = ({ `, // Variants pinned: css` - &:not(:hover):not(:focus) { + &:not(:hover, :focus) { color: ${makeHighContrastColor(euiTheme.colors.lightShade)(euiTheme)}; } `, diff --git a/src/components/loading/loading_chart.styles.ts b/src/components/loading/loading_chart.styles.ts index 17197fa0820..572c68a2447 100644 --- a/src/components/loading/loading_chart.styles.ts +++ b/src/components/loading/loading_chart.styles.ts @@ -36,15 +36,15 @@ export const euiLoadingChartBarStyles = ({ euiTheme }: UseEuiTheme) => ({ `, m: css` ${logicalCSS('width', euiTheme.size.xxs)} - ${logicalCSS('margin-bottom', euiTheme.size.s)}; + ${logicalCSS('margin-bottom', euiTheme.size.s)} `, l: css` ${logicalCSS('width', euiTheme.size.xs)} - ${logicalCSS('margin-bottom', euiTheme.size.m)}; + ${logicalCSS('margin-bottom', euiTheme.size.m)} `, xl: css` ${logicalCSS('width', euiTheme.size.s)} - ${logicalCSS('margin-bottom', euiTheme.size.base)}; + ${logicalCSS('margin-bottom', euiTheme.size.base)} `, }); @@ -73,8 +73,8 @@ export const _barIndex = ( return css` background-color: ${backgroundColor}; - // Without the animation, the bars are all the same height, - // so we apply transforms which are overridden by the animation if animations are allowed + /* Without the animation, the bars are all the same height, + so we apply transforms which are overridden by the animation if animations are allowed */ transform: translateY(${22 * index}%); ${euiCanAnimate} { diff --git a/src/components/loading/loading_elastic.styles.ts b/src/components/loading/loading_elastic.styles.ts index 9d1148559ba..f5169114fe7 100644 --- a/src/components/loading/loading_elastic.styles.ts +++ b/src/components/loading/loading_elastic.styles.ts @@ -51,7 +51,7 @@ export const euiLoadingElasticStyles = () => { transform-origin: 50% 50%; } - // Hide outline mainly for dark mode + /* Hide outline mainly for dark mode */ &:nth-of-type(1) { display: none; } diff --git a/src/components/loading/loading_logo.styles.ts b/src/components/loading/loading_logo.styles.ts index 56d2beb1f97..cc129125111 100644 --- a/src/components/loading/loading_logo.styles.ts +++ b/src/components/loading/loading_logo.styles.ts @@ -62,8 +62,8 @@ export const euiLoadingLogoStyles = ({ euiTheme }: UseEuiTheme) => { display: inline-block; ${euiCanAnimate} { - &:before, - &:after { + &::before, + &::after { position: absolute; content: ''; inline-size: 90%; @@ -73,13 +73,13 @@ export const euiLoadingLogoStyles = ({ euiTheme }: UseEuiTheme) => { z-index: 1; } - &:before { + &::before { box-shadow: 0 0 ${euiTheme.size.s} ${euiTheme.colors.fullShade}; animation: 1s ${loadingPulsateAndFade} ${euiTheme.animation.resistance} infinite; } - &:after { + &::after { background-color: ${euiTheme.colors.fullShade}; animation: 1s ${loadingPulsate} ${euiTheme.animation.resistance} infinite; @@ -97,8 +97,8 @@ export const euiLoadingLogoStyles = ({ euiTheme }: UseEuiTheme) => { padding-block-start: ${euiTheme.size[loadingPadding.m]}; } - &:before, - &:after { + &::before, + &::after { block-size: ${euiTheme.base * 0.25}px; /* 1 */ inset-block-end: -${euiTheme.size.xs}; } @@ -110,8 +110,8 @@ export const euiLoadingLogoStyles = ({ euiTheme }: UseEuiTheme) => { padding-block-start: ${euiTheme.size[loadingPadding.l]}; } - &:before, - &:after { + &::before, + &::after { block-size: ${euiTheme.base * 0.375}px; /* 1 */ inset-block-end: -${euiTheme.size.s}; } @@ -123,8 +123,8 @@ export const euiLoadingLogoStyles = ({ euiTheme }: UseEuiTheme) => { padding-block-start: ${euiTheme.size[loadingPadding.xl]}; } - &:before, - &:after { + &::before, + &::after { block-size: ${euiTheme.base * 0.5}px; /* 1 */ inset-block-end: -${euiTheme.size.m}; } diff --git a/src/components/loading/loading_spinner.styles.ts b/src/components/loading/loading_spinner.styles.ts index a341fa7af33..8133e12ed76 100644 --- a/src/components/loading/loading_spinner.styles.ts +++ b/src/components/loading/loading_spinner.styles.ts @@ -54,7 +54,7 @@ export const euiLoadingSpinnerStyles = (euiThemeContext: UseEuiTheme) => { const { euiTheme } = euiThemeContext; return { euiLoadingSpinner: css` - flex-shrink: 0; // Ensures it never scales down below its intended size + flex-shrink: 0; /* Ensures it never scales down below its intended size */ display: inline-block; border-radius: 50%; border: ${euiTheme.border.thick}; diff --git a/src/components/mark/__snapshots__/mark.test.tsx.snap b/src/components/mark/__snapshots__/mark.test.tsx.snap index 09a62e04568..dc4d9174b6e 100644 --- a/src/components/mark/__snapshots__/mark.test.tsx.snap +++ b/src/components/mark/__snapshots__/mark.test.tsx.snap @@ -3,7 +3,7 @@ exports[`EuiMark is rendered 1`] = ` Marked diff --git a/src/components/mark/mark.styles.ts b/src/components/mark/mark.styles.ts index 57b2f67e506..56409fa3f8a 100644 --- a/src/components/mark/mark.styles.ts +++ b/src/components/mark/mark.styles.ts @@ -10,46 +10,42 @@ import { css } from '@emotion/react'; import { UseEuiTheme, transparentize } from '../../services'; import { euiScreenReaderOnly } from '../accessibility'; -export const euiMarkStyles = ( - { euiTheme, colorMode }: UseEuiTheme, - { - hasScreenReaderHelpText, - highlightStart, - highlightEnd, - }: { - hasScreenReaderHelpText: boolean; - highlightStart: string; - highlightEnd: string; - } -) => { +export const euiMarkStyles = ({ euiTheme, colorMode }: UseEuiTheme) => { // TODO: Was $euiFocusBackgroundColor const transparency = { LIGHT: 0.1, DARK: 0.3 }; - return css` - background-color: ${transparentize( - euiTheme.colors.primary, - transparency[colorMode] - )}; - font-weight: ${euiTheme.font.weight.bold}; - // Override the browser's black color. - // Can't use 'inherit' because the text to background color contrast may not be sufficient - color: ${euiTheme.colors.text}; + return { + euiMark: css` + background-color: ${transparentize( + euiTheme.colors.primary, + transparency[colorMode] + )}; + font-weight: ${euiTheme.font.weight.bold}; + /* Override the browser's black color. + Can't use 'inherit' because the text to background color contrast may not be sufficient */ + color: ${euiTheme.colors.text}; + `, + }; +}; - // https://seanconnolly.dev/emotion-conditionals - ${hasScreenReaderHelpText === true && - ` - &:before, - &:after { +export const euiMarkScreenReaderStyles = ( + highlightStart: string, + highlightEnd: string +) => { + return { + hasScreenReaderHelpText: css` + &::before, + &::after { ${euiScreenReaderOnly()} } - &:before { + &::before { content: ' [${highlightStart}] '; } - &:after { + &::after { content: ' [${highlightEnd}] '; } - `} - `; + `, + }; }; diff --git a/src/components/mark/mark.tsx b/src/components/mark/mark.tsx index 7a5dfefdc6b..f966af4851a 100644 --- a/src/components/mark/mark.tsx +++ b/src/components/mark/mark.tsx @@ -6,12 +6,19 @@ * Side Public License, v 1. */ -import React, { HTMLAttributes, FunctionComponent, ReactNode } from 'react'; +import React, { + HTMLAttributes, + FunctionComponent, + ReactNode, + useMemo, +} from 'react'; import classNames from 'classnames'; + import { useEuiI18n } from '../i18n'; import { CommonProps } from '../common'; import { useEuiTheme } from '../../services'; -import { euiMarkStyles } from './mark.styles'; +import { euiMarkStyles, euiMarkScreenReaderStyles } from './mark.styles'; + export type EuiMarkProps = HTMLAttributes & CommonProps & { /** @@ -31,21 +38,27 @@ export const EuiMark: FunctionComponent = ({ hasScreenReaderHelpText = true, ...rest }) => { - const useTheme = useEuiTheme(); + const classes = classNames('euiMark', className); + const euiTheme = useEuiTheme(); + const styles = euiMarkStyles(euiTheme); + const highlightStart = useEuiI18n( 'euiMark.highlightStart', 'highlight start' ); const highlightEnd = useEuiI18n('euiMark.highlightEnd', 'highlight end'); - const styles = euiMarkStyles(useTheme, { - hasScreenReaderHelpText, - highlightStart, - highlightEnd, - }); - const classes = classNames('euiMark', className); + const screenReaderStyles = useMemo( + () => euiMarkScreenReaderStyles(highlightStart, highlightEnd), + [highlightStart, highlightEnd] + ); + + const cssStyles = [ + styles.euiMark, + hasScreenReaderHelpText && screenReaderStyles.hasScreenReaderHelpText, + ]; return ( - + {children} ); diff --git a/src/components/modal/modal.styles.ts b/src/components/modal/modal.styles.ts index a6fcda8195c..55f5bac244a 100644 --- a/src/components/modal/modal.styles.ts +++ b/src/components/modal/modal.styles.ts @@ -24,15 +24,15 @@ export const euiModalStyles = (euiThemeContext: UseEuiTheme) => { ${euiShadowXLarge(euiThemeContext)} display: flex; flex-direction: column; - max-block-size: 75vh; // We overflow the modal body based off this + max-block-size: 75vh; /* We overflow the modal body based off this */ position: relative; background-color: ${euiTheme.colors.emptyShade}; border-radius: ${euiTheme.border.radius.medium}; z-index: ${euiTheme.levels.modal}; min-inline-size: ${euiFormVariables(euiThemeContext).maxWidth}; max-inline-size: calc(100vw - ${euiTheme.size.base}); - // TODO: Consider restoring this once https://bugs.chromium.org/p/chromium/issues/detail?id=1229700 is resolved - // overflow: hidden; Ensure long, non-breaking text doesn't expand beyond the modal bounds + /* TODO: Consider restoring this once https://bugs.chromium.org/p/chromium/issues/detail?id=1229700 is resolved */ + /* overflow: hidden; Ensure long, non-breaking text doesn't expand beyond the modal bounds */ ${euiCanAnimate} { animation: ${euiAnimSlideInUp(euiTheme.size.xxl)} @@ -43,15 +43,18 @@ export const euiModalStyles = (euiThemeContext: UseEuiTheme) => { position: fixed; inset: 0; border-radius: 0; - // The below importants are required to override any - // inline width/heights that consumers set via {style} + + /* The below importants are required to override any + inline width/heights that consumers set via {style} */ + /* stylelint-disable declaration-no-important */ inline-size: 100vw !important; min-inline-size: 0 !important; max-inline-size: none !important; max-block-size: 100vh !important; + /* stylelint-enable declaration-no-important */ } - // Remove the outline from the focusable container + /* Remove the outline from the focusable container */ &:focus { outline: none; } diff --git a/src/components/modal/modal_body.styles.ts b/src/components/modal/modal_body.styles.ts index 6889a5c9fac..d3df842068a 100644 --- a/src/components/modal/modal_body.styles.ts +++ b/src/components/modal/modal_body.styles.ts @@ -17,17 +17,17 @@ export const euiModalBodyStyles = (euiThemeContext: UseEuiTheme) => { euiModalBody: css` flex-grow: 1; overflow: hidden; - // The below fixes scroll on Chrome and Safari + /* The below fixes scroll on Chrome and Safari */ display: flex; flex-direction: column; - // If a footer doesn't exist (body is the last element) add padding to the bottom + /* If a footer doesn't exist (body is the last element) add padding to the bottom */ &:last-of-type .euiModalBody__overflow { padding-block-end: ${euiTheme.size.l}; } `, euiModalBody__overflow: css` - ${euiYScrollWithShadows(euiThemeContext)}; + ${euiYScrollWithShadows(euiThemeContext)} padding-inline: ${euiTheme.size.l}; padding-block: ${euiTheme.size.s}; diff --git a/src/components/modal/modal_footer.styles.ts b/src/components/modal/modal_footer.styles.ts index 9031bd9b1ec..29c70a58547 100644 --- a/src/components/modal/modal_footer.styles.ts +++ b/src/components/modal/modal_footer.styles.ts @@ -20,7 +20,7 @@ export const euiModalFooterStyles = (euiThemeContext: UseEuiTheme) => { padding-block: ${euiTheme.size.base} ${euiTheme.size.l}; padding-inline: ${euiTheme.size.l}; flex-grow: 0; - flex-shrink: 0; // ensure the height of the footer is based off its contents and doesn't squish + flex-shrink: 0; /* Ensure the height of the footer is based off its contents and doesn't squish */ gap: ${euiTheme.size.base}; ${euiMaxBreakpoint(euiThemeContext, 'm')} { diff --git a/src/components/modal/modal_header.styles.ts b/src/components/modal/modal_header.styles.ts index c0df90eb5bf..04b2945fd43 100644 --- a/src/components/modal/modal_header.styles.ts +++ b/src/components/modal/modal_header.styles.ts @@ -25,7 +25,7 @@ export const euiModalHeaderStyles = (euiThemeContext: UseEuiTheme) => { `${euiTheme.size.l} ${euiTheme.size.xxl} ${euiTheme.size.base} ${euiTheme.size.l}` )} - // If a body doesn't exist, remove some extra padding from footer + /* If a body doesn't exist, remove some extra padding from footer */ & + .euiModalFooter { padding-block-start: ${euiTheme.size.s}; } diff --git a/src/components/overlay_mask/overlay_mask.styles.ts b/src/components/overlay_mask/overlay_mask.styles.ts index 469703508f9..1f67f9a2a81 100644 --- a/src/components/overlay_mask/overlay_mask.styles.ts +++ b/src/components/overlay_mask/overlay_mask.styles.ts @@ -20,7 +20,7 @@ export const euiOverlayMaskStyles = ({ euiTheme }: UseEuiTheme) => ({ display: flex; align-items: center; justify-content: center; - ${logicalCSS('padding-bottom', '10vh')}; + ${logicalCSS('padding-bottom', '10vh')} animation: ${euiAnimFadeIn} ${euiTheme.animation.fast} ease-in; background: ${transparentize(euiTheme.colors.ink, 0.5)}; `, @@ -29,7 +29,7 @@ export const euiOverlayMaskStyles = ({ euiTheme }: UseEuiTheme) => ({ `, belowHeader: css` z-index: ${euiTheme.levels.maskBelowHeader}; - // TODO: use size variable when EuiHeader is converted - ${logicalCSS('top', `${euiTheme.base * 3}px`)}; + /* TODO: use size variable when EuiHeader is converted */ + ${logicalCSS('top', `${euiTheme.base * 3}px`)} `, }); diff --git a/src/components/overlay_mask/overlay_mask.test.tsx b/src/components/overlay_mask/overlay_mask.test.tsx index e4c2fa6fa3e..70a3081d78b 100644 --- a/src/components/overlay_mask/overlay_mask.test.tsx +++ b/src/components/overlay_mask/overlay_mask.test.tsx @@ -44,7 +44,7 @@ describe('EuiOverlayMask', () => { baseElement.querySelector('.euiOverlayMask')!.className; expect(getClassName()).toMatchInlineSnapshot( - '"euiOverlayMask css-11w8yva-euiOverlayMask-aboveHeader hello"' + `"euiOverlayMask css-1hzbeld-euiOverlayMask-aboveHeader hello"` ); rerender( @@ -53,7 +53,7 @@ describe('EuiOverlayMask', () => { ); expect(getClassName()).toMatchInlineSnapshot( - '"euiOverlayMask css-13fdnee-euiOverlayMask-belowHeader world"' + `"euiOverlayMask css-1sm7f9p-euiOverlayMask-belowHeader world"` ); }); diff --git a/src/components/page/page.styles.ts b/src/components/page/page.styles.ts index a0eb30e29d8..1880f1502c4 100644 --- a/src/components/page/page.styles.ts +++ b/src/components/page/page.styles.ts @@ -17,10 +17,10 @@ export const euiPageStyles = (euiThemeContext: UseEuiTheme) => { euiPage: css` display: flex; background-color: ${euiTheme.colors.body}; - // Ensure Safari doesn't shrink height beyond contents + /* Ensure Safari doesn't shrink height beyond contents */ flex-shrink: 0; - // Ensure Firefox doesn't expand width beyond bounds - ${logicalCSS('max-width', '100%')}; + /* Ensure Firefox doesn't expand width beyond bounds */ + ${logicalCSS('max-width', '100%')} `, // Grow @@ -43,7 +43,7 @@ export const euiPageStyles = (euiThemeContext: UseEuiTheme) => { // Max widths restrictWidth: css` - ${logicalCSS('margin-horizontal', 'auto')}; + ${logicalCSS('margin-horizontal', 'auto')} `, }; }; diff --git a/src/components/page/page_body/page_body.styles.ts b/src/components/page/page_body/page_body.styles.ts index b82ed4d4979..bf605f4f722 100644 --- a/src/components/page/page_body/page_body.styles.ts +++ b/src/components/page/page_body/page_body.styles.ts @@ -15,13 +15,13 @@ export const euiPageBodyStyles = () => ({ flex-direction: column; align-items: stretch; flex: 1 1 100%; - // Make sure that inner flex layouts don't get larger than this container + /* Make sure that inner flex layouts don't get larger than this container */ ${logicalCSS('max-width', '100%')} ${logicalCSS('min-width', '0')} `, // Max widths restrictWidth: css` - ${logicalCSS('margin-horizontal', 'auto')}; + ${logicalCSS('margin-horizontal', 'auto')} `, }); diff --git a/src/components/page/page_header/page_header.styles.ts b/src/components/page/page_header/page_header.styles.ts index a4486c3e037..3660db98989 100644 --- a/src/components/page/page_header/page_header.styles.ts +++ b/src/components/page/page_header/page_header.styles.ts @@ -13,15 +13,15 @@ import { UseEuiTheme } from '../../../services'; export const euiPageHeaderStyles = ({ euiTheme }: UseEuiTheme) => { return { euiPageHeader: css` - ${logicalCSS('width', '100%')}; - // Make sure that inner flex layouts don't get larger than this container - ${logicalCSS('min-width', '0')}; + ${logicalCSS('width', '100%')} + /* Make sure that inner flex layouts don't get larger than this container */ + ${logicalCSS('min-width', '0')} display: flex; flex-direction: column; - flex-shrink: 0; // Ensures Safari doesn't shrink beyond contents + flex-shrink: 0; /* Ensures Safari doesn't shrink beyond contents */ `, border: css` - ${logicalCSS('border-bottom', euiTheme.border.thin)}; + ${logicalCSS('border-bottom', euiTheme.border.thin)} `, }; }; diff --git a/src/components/page/page_header/page_header_content.styles.ts b/src/components/page/page_header/page_header_content.styles.ts index 70df2decee5..838e0b02f73 100644 --- a/src/components/page/page_header/page_header_content.styles.ts +++ b/src/components/page/page_header/page_header_content.styles.ts @@ -12,8 +12,8 @@ import { UseEuiTheme } from '../../../services'; export const euiPageHeaderContentStyles = ({ euiTheme }: UseEuiTheme) => ({ euiPageHeaderContent: css` - ${logicalCSS('width', '100%')}; - ${logicalCSS('margin-horizontal', 'auto')}; + ${logicalCSS('width', '100%')} + ${logicalCSS('margin-horizontal', 'auto')} `, // alignItems @@ -51,7 +51,7 @@ export const euiPageHeaderContentStyles = ({ euiTheme }: UseEuiTheme) => ({ // Content euiPageHeaderContent__titleIcon: css` position: relative; - ${logicalCSS('top', `-${euiTheme.size.xs}`)}; - ${logicalCSS('margin-right', euiTheme.size.base)}; + ${logicalCSS('top', `-${euiTheme.size.xs}`)} + ${logicalCSS('margin-right', euiTheme.size.base)} `, }); diff --git a/src/components/page/page_section/page_section.styles.ts b/src/components/page/page_section/page_section.styles.ts index 518abe950e4..b37d1d60628 100644 --- a/src/components/page/page_section/page_section.styles.ts +++ b/src/components/page/page_section/page_section.styles.ts @@ -14,9 +14,9 @@ export const ALIGNMENTS = ['top', 'center', 'horizontalCenter'] as const; export const euiPageSectionStyles = ({ euiTheme }: UseEuiTheme) => { return { euiPageSection: css` - ${logicalCSS('width', '100%')}; - // Make sure that inner flex layouts don't get larger than this container - ${logicalCSS('min-width', '0')}; + ${logicalCSS('width', '100%')} + /* Make sure that inner flex layouts don't get larger than this container */ + ${logicalCSS('min-width', '0')} display: flex; flex-direction: column; `, @@ -24,17 +24,17 @@ export const euiPageSectionStyles = ({ euiTheme }: UseEuiTheme) => { flex-grow: 1; `, border: css` - ${logicalCSS('border-bottom', euiTheme.border.thin)}; + ${logicalCSS('border-bottom', euiTheme.border.thin)} `, // Alignments top: css``, center: css` - ${logicalCSS('width', 'auto')}; + ${logicalCSS('width', 'auto')} align-items: center; justify-content: center; `, horizontalCenter: css` - ${logicalCSS('width', 'auto')}; + ${logicalCSS('width', 'auto')} align-items: center; `, }; @@ -43,18 +43,18 @@ export const euiPageSectionStyles = ({ euiTheme }: UseEuiTheme) => { export const euiPageSectionContentStyles = () => { return { euiPageSection__content: css` - ${logicalCSS('width', '100%')}; + ${logicalCSS('width', '100%')} `, // Alignments center: css` - ${logicalCSS('width', 'auto')}; - ${logicalCSS('margin-horizontal', 'auto')}; + ${logicalCSS('width', 'auto')} + ${logicalCSS('margin-horizontal', 'auto')} `, // Max widths restrictWidth: css` - ${logicalCSS('margin-horizontal', 'auto')}; + ${logicalCSS('margin-horizontal', 'auto')} `, }; }; diff --git a/src/components/page/page_sidebar/page_sidebar.styles.ts b/src/components/page/page_sidebar/page_sidebar.styles.ts index b4f151089a7..047ea201eea 100644 --- a/src/components/page/page_sidebar/page_sidebar.styles.ts +++ b/src/components/page/page_sidebar/page_sidebar.styles.ts @@ -12,12 +12,12 @@ import { UseEuiTheme } from '../../../services'; export const euiPageSidebarStyles = (euiThemeContext: UseEuiTheme) => ({ euiPageSidebar: css` - // Prevent side bar width from changing when content width changes + /* Prevent side bar width from changing when content width changes */ flex: 0 1 0%; `, sticky: css` - ${euiYScroll(euiThemeContext, { height: 'auto' })}; + ${euiYScroll(euiThemeContext, { height: 'auto' })} flex-grow: 1; position: sticky; `, diff --git a/src/components/page_template/inner/page_inner.styles.ts b/src/components/page_template/inner/page_inner.styles.ts index 24e09d6dd9e..f8abf6fa355 100644 --- a/src/components/page_template/inner/page_inner.styles.ts +++ b/src/components/page_template/inner/page_inner.styles.ts @@ -23,7 +23,7 @@ export const euiPageInnerStyles = (euiThemeContext: UseEuiTheme) => { flex-direction: column; align-items: stretch; flex: 1 1 100%; - // Make sure that inner flex layouts don't get larger than this container + /* Make sure that inner flex layouts don't get larger than this container */ ${logicalCSS('max-width', '100%')} ${logicalCSS('min-width', '0')} `, diff --git a/src/components/page_template/outer/page_outer.styles.ts b/src/components/page_template/outer/page_outer.styles.ts index 2e04ef31172..7625fd09586 100644 --- a/src/components/page_template/outer/page_outer.styles.ts +++ b/src/components/page_template/outer/page_outer.styles.ts @@ -14,7 +14,7 @@ export const euiPageOuterStyles = ({ euiTheme }: UseEuiTheme) => ({ euiPageOuter: css` display: flex; background-color: ${euiTheme.colors.body}; - flex-shrink: 0; // Ensures Safari doesn't shrink height beyond contents + flex-shrink: 0; /* Ensures Safari doesn't shrink height beyond contents */ ${logicalCSS( 'max-width', '100%' // Ensures Firefox doesn't expand width beyond bounds diff --git a/src/components/pagination/__snapshots__/pagination.test.tsx.snap b/src/components/pagination/__snapshots__/pagination.test.tsx.snap index 8012cde501d..1d66f223310 100644 --- a/src/components/pagination/__snapshots__/pagination.test.tsx.snap +++ b/src/components/pagination/__snapshots__/pagination.test.tsx.snap @@ -38,7 +38,7 @@ exports[`EuiPagination is rendered 1`] = `