]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-22049 Align RatingLabel type
authorstanislavh <stanislav.honcharov@sonarsource.com>
Tue, 23 Apr 2024 12:12:32 +0000 (14:12 +0200)
committerMatteo Mara <matteo.mara@sonarsource.com>
Tue, 30 Apr 2024 08:59:02 +0000 (10:59 +0200)
25 files changed:
server/sonar-web/design-system/src/components/Card.tsx [deleted file]
server/sonar-web/design-system/src/components/MetricsRatingBadge.tsx [deleted file]
server/sonar-web/design-system/src/components/__tests__/Card-test.tsx [deleted file]
server/sonar-web/design-system/src/components/__tests__/MetricsRatingBadge-test.tsx [deleted file]
server/sonar-web/design-system/src/components/index.ts
server/sonar-web/design-system/src/index.ts
server/sonar-web/design-system/src/sonar-aligned/components/Card.tsx [new file with mode: 0644]
server/sonar-web/design-system/src/sonar-aligned/components/MetricsRatingBadge.tsx [new file with mode: 0644]
server/sonar-web/design-system/src/sonar-aligned/components/__tests__/Card-test.tsx [new file with mode: 0644]
server/sonar-web/design-system/src/sonar-aligned/components/__tests__/MetricsRatingBadge-test.tsx [new file with mode: 0644]
server/sonar-web/design-system/src/sonar-aligned/components/index.ts [new file with mode: 0644]
server/sonar-web/design-system/src/sonar-aligned/index.ts [new file with mode: 0644]
server/sonar-web/design-system/src/sonar-aligned/types/index.ts [new file with mode: 0644]
server/sonar-web/design-system/src/sonar-aligned/types/measures.ts [new file with mode: 0644]
server/sonar-web/design-system/src/types/measures.ts
server/sonar-web/design-system/tsconfig.json
server/sonar-web/src/main/js/apps/code/components/ComponentMeasure.tsx
server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.tsx
server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.tsx
server/sonar-web/src/main/js/apps/component-measures/sidebar/SubnavigationMeasureValue.tsx
server/sonar-web/src/main/js/apps/projects/components/project-card/ProjectCardMeasures.tsx
server/sonar-web/src/main/js/apps/projects/filters/RatingFacet.tsx
server/sonar-web/src/main/js/apps/projects/filters/SecurityReviewFilter.tsx
server/sonar-web/src/main/js/components/measure/Measure.tsx
server/sonar-web/src/main/js/components/measure/MeasureIndicator.tsx

diff --git a/server/sonar-web/design-system/src/components/Card.tsx b/server/sonar-web/design-system/src/components/Card.tsx
deleted file mode 100644 (file)
index ef9c63f..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2024 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import styled from '@emotion/styled';
-import * as React from 'react';
-import tw from 'twin.macro';
-import { themeBorder, themeColor } from '../helpers/theme';
-import { BasicSeparator } from './Separator';
-
-interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
-  children: React.ReactNode;
-}
-
-export function Card(props: Readonly<CardProps>) {
-  const { children, ...rest } = props;
-
-  return <CardStyled {...rest}>{children}</CardStyled>;
-}
-
-export function GreyCard(props: Readonly<CardProps>) {
-  const { children, ...rest } = props;
-
-  return <GreyCardStyled {...rest}>{children}</GreyCardStyled>;
-}
-
-export function LightGreyCard(props: Readonly<CardProps>) {
-  const { children, ...rest } = props;
-
-  return <LightGreyCardStyled {...rest}>{children}</LightGreyCardStyled>;
-}
-
-export function LightGreyCardTitle({ children }: Readonly<React.PropsWithChildren>) {
-  return (
-    <>
-      <div className="sw-flex sw-items-center sw-justify-between sw-w-full sw-mb-4 sw-min-h-6">
-        {children}
-      </div>
-      <BasicSeparator className="sw--mx-6 sw-my-0" />
-    </>
-  );
-}
-
-export const CardWithPrimaryBackground = styled(Card)`
-  background-color: ${themeColor('backgroundPrimary')};
-`;
-
-const CardStyled = styled.div`
-  background-color: ${themeColor('backgroundSecondary')};
-  border: ${themeBorder('default', 'projectCardBorder')};
-
-  ${tw`sw-p-6`};
-  ${tw`sw-rounded-1`};
-`;
-
-const LightGreyCardStyled = styled(CardStyled)`
-  border: ${themeBorder('default')};
-`;
-
-const GreyCardStyled = styled(CardStyled)`
-  border: ${themeBorder('default', 'almCardBorder')};
-`;
diff --git a/server/sonar-web/design-system/src/components/MetricsRatingBadge.tsx b/server/sonar-web/design-system/src/components/MetricsRatingBadge.tsx
deleted file mode 100644 (file)
index d82e9a8..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2024 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import styled from '@emotion/styled';
-import tw from 'twin.macro';
-import { getProp, themeColor, themeContrast } from '../helpers/theme';
-import { MetricsLabel } from '../types/measures';
-
-type sizeType = keyof typeof SIZE_MAPPING;
-interface Props extends React.AriaAttributes {
-  className?: string;
-  label: string;
-  rating?: MetricsLabel;
-  size?: sizeType;
-}
-
-const SIZE_MAPPING = {
-  xs: '1rem',
-  sm: '1.5rem',
-  md: '2rem',
-  lg: '2.8rem',
-  xl: '4rem',
-};
-
-export function MetricsRatingBadge({
-  className,
-  size = 'sm',
-  label,
-  rating,
-  ...ariaAttrs
-}: Readonly<Props>) {
-  if (!rating) {
-    return (
-      <StyledNoRatingBadge
-        aria-label={label}
-        className={className}
-        size={SIZE_MAPPING[size]}
-        {...ariaAttrs}
-      >
-        —
-      </StyledNoRatingBadge>
-    );
-  }
-  return (
-    <MetricsRatingBadgeStyled
-      aria-label={label}
-      className={className}
-      rating={rating}
-      size={SIZE_MAPPING[size]}
-      {...ariaAttrs}
-    >
-      {rating}
-    </MetricsRatingBadgeStyled>
-  );
-}
-
-const StyledNoRatingBadge = styled.div<{ size: string }>`
-  display: inline-flex;
-  align-items: center;
-  justify-content: center;
-
-  width: ${getProp('size')};
-  height: ${getProp('size')};
-`;
-
-const getFontSize = (size: string) => {
-  switch (size) {
-    case '2rem':
-      return '0.875rem';
-    case '4rem':
-      return '1.5rem';
-    default:
-      return '0.75rem';
-  }
-};
-
-const MetricsRatingBadgeStyled = styled.div<{ rating: MetricsLabel; size: string }>`
-  width: ${getProp('size')};
-  height: ${getProp('size')};
-  color: ${({ rating }) => themeContrast(`rating.${rating}`)};
-  font-size: ${({ size }) => getFontSize(size)};
-  background-color: ${({ rating }) => themeColor(`rating.${rating}`)};
-  user-select: none;
-
-  display: inline-flex;
-  align-items: center;
-  justify-content: center;
-
-  ${tw`sw-rounded-pill`};
-  ${tw`sw-font-semibold`};
-`;
diff --git a/server/sonar-web/design-system/src/components/__tests__/Card-test.tsx b/server/sonar-web/design-system/src/components/__tests__/Card-test.tsx
deleted file mode 100644 (file)
index f6d02f7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2024 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import { screen } from '@testing-library/react';
-import { render } from '../../helpers/testUtils';
-import { Card, GreyCard, LightGreyCard } from '../Card';
-
-it('renders card correctly', () => {
-  render(<Card>Hello</Card>);
-  const cardContent = screen.getByText('Hello');
-  expect(cardContent).toHaveStyle({
-    border: '1px solid rgb(225,230,243)',
-    'background-color': 'rgb(255,255,255)',
-  });
-});
-
-it.each([Card, GreyCard, LightGreyCard])(
-  'renders %p correctly with classNames',
-  (CardComponent) => {
-    render(
-      <CardComponent className="sw-bg-black sw-border-8" role="tabpanel">
-        Hello
-      </CardComponent>,
-    );
-    const cardContent = screen.getByText('Hello');
-    expect(cardContent).toHaveClass('sw-bg-black sw-border-8');
-    expect(cardContent).toHaveAttribute('role', 'tabpanel');
-  },
-);
diff --git a/server/sonar-web/design-system/src/components/__tests__/MetricsRatingBadge-test.tsx b/server/sonar-web/design-system/src/components/__tests__/MetricsRatingBadge-test.tsx
deleted file mode 100644 (file)
index 31e15fe..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2024 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import { screen } from '@testing-library/react';
-import { render } from '../../helpers/testUtils';
-import { FCProps } from '../../types/misc';
-
-import { MetricsRatingBadge } from '../MetricsRatingBadge';
-
-it('should display RatingIndicator', () => {
-  setupWithProps();
-  expect(screen.getByLabelText('New label')).toBeInTheDocument();
-});
-
-it('should display RatingIndicator with value', () => {
-  setupWithProps({ rating: 'A' });
-  expect(screen.getByText('A')).toBeInTheDocument();
-});
-
-function setupWithProps(props: Partial<FCProps<typeof MetricsRatingBadge>> = {}) {
-  return render(<MetricsRatingBadge label="New label" {...props} />);
-}
index b5b2e73515a9edd5b5b8ad1d7a563c789586f8d2..ae2932330ec1792e30708b5c8f3b4b507a65e5c1 100644 (file)
@@ -25,7 +25,6 @@ export { BarChart } from './BarChart';
 export * from './BorderlessAccordion';
 export { Breadcrumbs } from './Breadcrumbs';
 export * from './BubbleChart';
-export * from './Card';
 export * from './CodeSnippet';
 export * from './CodeSyntaxHighlighter';
 export * from './ColorsLegend';
@@ -57,7 +56,6 @@ export * from './LocationMarker';
 export * from './MainAppBar';
 export * from './MainMenu';
 export * from './MainMenuItem';
-export * from './MetricsRatingBadge';
 export * from './MultiSelector';
 export * from './NavBarTabs';
 export * from './NewCodeLegend';
index 992d51242bf0c45c354830d10d772bb6323526eb..3bac299b5e3409805459aab93335dfb5296bdf14 100644 (file)
@@ -19,5 +19,6 @@
  */
 export * from './components';
 export * from './helpers';
+export * from './sonar-aligned';
 export * from './theme';
 export * from './types';
diff --git a/server/sonar-web/design-system/src/sonar-aligned/components/Card.tsx b/server/sonar-web/design-system/src/sonar-aligned/components/Card.tsx
new file mode 100644 (file)
index 0000000..a8f7c8c
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+import styled from '@emotion/styled';
+import * as React from 'react';
+import tw from 'twin.macro';
+import { BasicSeparator } from '../../components/Separator';
+import { themeBorder, themeColor } from '../../helpers/theme';
+
+interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
+  children: React.ReactNode;
+}
+
+export function Card(props: Readonly<CardProps>) {
+  const { children, ...rest } = props;
+
+  return <CardStyled {...rest}>{children}</CardStyled>;
+}
+
+export function GreyCard(props: Readonly<CardProps>) {
+  const { children, ...rest } = props;
+
+  return <GreyCardStyled {...rest}>{children}</GreyCardStyled>;
+}
+
+export function LightGreyCard(props: Readonly<CardProps>) {
+  const { children, ...rest } = props;
+
+  return <LightGreyCardStyled {...rest}>{children}</LightGreyCardStyled>;
+}
+
+export function LightGreyCardTitle({ children }: Readonly<React.PropsWithChildren>) {
+  return (
+    <>
+      <div className="sw-flex sw-items-center sw-justify-between sw-w-full sw-mb-4 sw-min-h-6">
+        {children}
+      </div>
+      <BasicSeparator className="sw--mx-6 sw-my-0" />
+    </>
+  );
+}
+
+export const CardWithPrimaryBackground = styled(Card)`
+  background-color: ${themeColor('backgroundPrimary')};
+`;
+
+const CardStyled = styled.div`
+  background-color: ${themeColor('backgroundSecondary')};
+  border: ${themeBorder('default', 'projectCardBorder')};
+
+  ${tw`sw-p-6`};
+  ${tw`sw-rounded-1`};
+`;
+
+const LightGreyCardStyled = styled(CardStyled)`
+  border: ${themeBorder('default')};
+`;
+
+const GreyCardStyled = styled(CardStyled)`
+  border: ${themeBorder('default', 'almCardBorder')};
+`;
diff --git a/server/sonar-web/design-system/src/sonar-aligned/components/MetricsRatingBadge.tsx b/server/sonar-web/design-system/src/sonar-aligned/components/MetricsRatingBadge.tsx
new file mode 100644 (file)
index 0000000..9bdae72
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+import styled from '@emotion/styled';
+import tw from 'twin.macro';
+import { getProp, themeColor, themeContrast } from '../../helpers/theme';
+import { RatingLabel } from '../types/measures';
+
+type sizeType = keyof typeof SIZE_MAPPING;
+interface Props extends React.AriaAttributes {
+  className?: string;
+  label?: string;
+  rating?: RatingLabel;
+  size?: sizeType;
+}
+
+const SIZE_MAPPING = {
+  xs: '1rem',
+  sm: '1.5rem',
+  md: '2rem',
+  lg: '2.8rem',
+  xl: '4rem',
+};
+
+export function MetricsRatingBadge({
+  className,
+  size = 'sm',
+  label,
+  rating,
+  ...ariaAttrs
+}: Readonly<Props>) {
+  if (!rating) {
+    return (
+      <StyledNoRatingBadge
+        aria-label={label}
+        className={className}
+        size={SIZE_MAPPING[size]}
+        {...ariaAttrs}
+      >
+        —
+      </StyledNoRatingBadge>
+    );
+  }
+  return (
+    <MetricsRatingBadgeStyled
+      aria-label={label}
+      className={className}
+      rating={rating}
+      size={SIZE_MAPPING[size]}
+      {...ariaAttrs}
+    >
+      {rating}
+    </MetricsRatingBadgeStyled>
+  );
+}
+
+const StyledNoRatingBadge = styled.div<{ size: string }>`
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+
+  width: ${getProp('size')};
+  height: ${getProp('size')};
+`;
+
+const getFontSize = (size: string) => {
+  switch (size) {
+    case '2rem':
+      return '0.875rem';
+    case '4rem':
+      return '1.5rem';
+    default:
+      return '0.75rem';
+  }
+};
+
+const MetricsRatingBadgeStyled = styled.div<{ rating: RatingLabel; size: string }>`
+  width: ${getProp('size')};
+  height: ${getProp('size')};
+  color: ${({ rating }) => themeContrast(`rating.${rating}`)};
+  font-size: ${({ size }) => getFontSize(size)};
+  background-color: ${({ rating }) => themeColor(`rating.${rating}`)};
+  user-select: none;
+
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+
+  ${tw`sw-rounded-pill`};
+  ${tw`sw-font-semibold`};
+`;
diff --git a/server/sonar-web/design-system/src/sonar-aligned/components/__tests__/Card-test.tsx b/server/sonar-web/design-system/src/sonar-aligned/components/__tests__/Card-test.tsx
new file mode 100644 (file)
index 0000000..817af9d
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+import { screen } from '@testing-library/react';
+import { render } from '../../../helpers/testUtils';
+import { Card, GreyCard, LightGreyCard } from '../Card';
+
+it('renders card correctly', () => {
+  render(<Card>Hello</Card>);
+  const cardContent = screen.getByText('Hello');
+  expect(cardContent).toHaveStyle({
+    border: '1px solid rgb(225,230,243)',
+    'background-color': 'rgb(255,255,255)',
+  });
+});
+
+it.each([Card, GreyCard, LightGreyCard])(
+  'renders %p correctly with classNames',
+  (CardComponent) => {
+    render(
+      <CardComponent className="sw-bg-black sw-border-8" role="tabpanel">
+        Hello
+      </CardComponent>,
+    );
+    const cardContent = screen.getByText('Hello');
+    expect(cardContent).toHaveClass('sw-bg-black sw-border-8');
+    expect(cardContent).toHaveAttribute('role', 'tabpanel');
+  },
+);
diff --git a/server/sonar-web/design-system/src/sonar-aligned/components/__tests__/MetricsRatingBadge-test.tsx b/server/sonar-web/design-system/src/sonar-aligned/components/__tests__/MetricsRatingBadge-test.tsx
new file mode 100644 (file)
index 0000000..8342ab1
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+import { screen } from '@testing-library/react';
+import { render } from '../../../helpers/testUtils';
+import { FCProps } from '../../../types/misc';
+
+import { MetricsRatingBadge } from '../MetricsRatingBadge';
+
+it('should display RatingIndicator', () => {
+  setupWithProps();
+  expect(screen.getByLabelText('New label')).toBeInTheDocument();
+});
+
+it('should display RatingIndicator with value', () => {
+  setupWithProps({ rating: 'A' });
+  expect(screen.getByText('A')).toBeInTheDocument();
+});
+
+function setupWithProps(props: Partial<FCProps<typeof MetricsRatingBadge>> = {}) {
+  return render(<MetricsRatingBadge label="New label" {...props} />);
+}
diff --git a/server/sonar-web/design-system/src/sonar-aligned/components/index.ts b/server/sonar-web/design-system/src/sonar-aligned/components/index.ts
new file mode 100644 (file)
index 0000000..4aff4e3
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+export * from './Card';
+export * from './MetricsRatingBadge';
diff --git a/server/sonar-web/design-system/src/sonar-aligned/index.ts b/server/sonar-web/design-system/src/sonar-aligned/index.ts
new file mode 100644 (file)
index 0000000..48fc39c
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+export * from './components';
+export * from './types';
diff --git a/server/sonar-web/design-system/src/sonar-aligned/types/index.ts b/server/sonar-web/design-system/src/sonar-aligned/types/index.ts
new file mode 100644 (file)
index 0000000..076ba52
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+export * from './measures';
diff --git a/server/sonar-web/design-system/src/sonar-aligned/types/measures.ts b/server/sonar-web/design-system/src/sonar-aligned/types/measures.ts
new file mode 100644 (file)
index 0000000..b7e402a
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+export enum RatingEnum {
+  A = 'A',
+  B = 'B',
+  C = 'C',
+  D = 'D',
+  E = 'E',
+}
+
+export type RatingLabel = keyof typeof RatingEnum;
index a118f8882313be9d8b616f4ce7fb47ba0138519e..71ee1b988dedefd887100dbd425db66ef586d487 100644 (file)
@@ -28,16 +28,6 @@ export enum DuplicationEnum {
 
 export type DuplicationLabel = keyof typeof DuplicationEnum;
 
-export enum MetricsEnum {
-  A = 'A',
-  B = 'B',
-  C = 'C',
-  D = 'D',
-  E = 'E',
-}
-
-export type MetricsLabel = keyof typeof MetricsEnum;
-
 export enum SizeEnum {
   XS = 'XS',
   S = 'S',
index 9563ae0ec9f4aa988ddea0ce57310840c1d85a90..22b2e4e8bec402a81e39f20f8a0563997f651907 100644 (file)
@@ -16,7 +16,8 @@
       "~helpers/*": ["src/helpers/*"],
       "~icons/*": ["src/icons/*"],
       "~types/*": ["src/types/*"],
-      "~utils/*": ["src/utils/*"]
+      "~utils/*": ["src/utils/*"],
+      "~sonar-aligned/*": ["src/sonar-aligned/*"]
     },
     "resolveJsonModule": true,
     "skipLibCheck": true
index d3b36317eb34567c0551c9a7ee309631f1ee5f0d..b4b21a0fab794ea07697c793f477a2ea34023aa2 100644 (file)
  */
 import {
   ContentCell,
-  MetricsEnum,
   MetricsRatingBadge,
   NumericalCell,
   QualityGateIndicator,
   RatingCell,
+  RatingEnum,
 } from 'design-system';
 import * as React from 'react';
 import Measure from '../../../components/measure/Measure';
@@ -96,7 +96,7 @@ export default function ComponentMeasure(props: Props) {
         <RatingCell className="sw-whitespace-nowrap">
           <MetricsRatingBadge
             label={value ?? '—'}
-            rating={formatMeasure(value, MetricType.Rating) as MetricsEnum}
+            rating={formatMeasure(value, MetricType.Rating) as RatingEnum}
           />
         </RatingCell>
       );
index a6790e2af7ad561e278d41865ba32890e1a88652..4fd76d7d88b44fde056fbddf931930d68023462d 100644 (file)
@@ -19,7 +19,7 @@
  */
 import { LinkStandalone } from '@sonarsource/echoes-react';
 import classNames from 'classnames';
-import { MetricsLabel, MetricsRatingBadge } from 'design-system';
+import { MetricsRatingBadge, RatingLabel } from 'design-system';
 import * as React from 'react';
 import LanguageDistribution from '../../../components/charts/LanguageDistribution';
 import Tooltip from '../../../components/controls/Tooltip';
@@ -78,7 +78,7 @@ export default function MeasureHeader(props: Readonly<Props>) {
                         )
                       : translate('metric.no_rating')
                   }
-                  rating={formatMeasure(measureValue, MetricType.Rating) as MetricsLabel}
+                  rating={formatMeasure(measureValue, MetricType.Rating) as RatingLabel}
                 />
               }
             />
index 56a1ac297449243d5d69c4a59f6af9d59c8a8369..e4354dbf8c90d3e3816a3eb0804474d656e0ff4e 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { MetricsLabel, MetricsRatingBadge, NumericalCell } from 'design-system';
+import { MetricsRatingBadge, NumericalCell, RatingLabel } from 'design-system';
 import * as React from 'react';
 import Measure from '../../../components/measure/Measure';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
@@ -55,7 +55,7 @@ export default function MeasureCell({ component, measure, metric }: Props) {
                   )
                 : translate('metric.no_rating')
             }
-            rating={formatMeasure(value, MetricType.Rating) as MetricsLabel}
+            rating={formatMeasure(value, MetricType.Rating) as RatingLabel}
           />
         }
       />
index 7088bd7e63911036da7e315c7304302b5150afb3..ab344f0ff6b07f97ae68e852a272f7a72962d8a0 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { MetricsLabel, MetricsRatingBadge, Note } from 'design-system';
+import { MetricsRatingBadge, Note, RatingLabel } from 'design-system';
 import React from 'react';
 import Measure from '../../../components/measure/Measure';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
@@ -48,7 +48,7 @@ export default function SubnavigationMeasureValue({ measure }: Readonly<Props>)
                 ? translateWithParameters('metric.has_rating_X', formatted)
                 : translate('metric.no_rating')
             }
-            rating={formatted as MetricsLabel}
+            rating={formatted as RatingLabel}
           />
         }
         metricKey={measure.metric.key}
index 2f9afad7e3286125513ff465632aed907c43eb66..352418538c08d992ebb8b5c4acadaa6920edf2ed 100644 (file)
 import {
   CoverageIndicator,
   DuplicationsIndicator,
-  MetricsLabel,
   MetricsRatingBadge,
   Note,
   PageContentFontWrapper,
+  RatingLabel,
 } from 'design-system';
 import * as React from 'react';
 import Measure from '../../../../components/measure/Measure';
@@ -178,7 +178,7 @@ function renderRatings(props: ProjectCardMeasuresProps) {
 
     return (
       <ProjectCardMeasure key={metricKey} metricKey={metricKey} label={iconLabel}>
-        <MetricsRatingBadge label={metricKey} rating={value as MetricsLabel} />
+        <MetricsRatingBadge label={metricKey} rating={value as RatingLabel} />
         <Measure
           metricKey={metricKey}
           metricType={metricType}
index 99d0bf23586daaa8fd852da2a2e3309bf46c0f55..6dac1d3015d07317a44aad67c7ddf69d89776e3c 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { MetricsEnum, MetricsRatingBadge } from 'design-system';
+import { MetricsRatingBadge, RatingEnum } from 'design-system';
 import * as React from 'react';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
 import { formatMeasure } from '../../../helpers/measures';
@@ -77,6 +77,6 @@ function renderOption(option: number) {
   const ratingFormatted = formatMeasure(option, MetricType.Rating);
 
   return (
-    <MetricsRatingBadge label={ratingFormatted} rating={ratingFormatted as MetricsEnum} size="xs" />
+    <MetricsRatingBadge label={ratingFormatted} rating={ratingFormatted as RatingEnum} size="xs" />
   );
 }
index 1a99368fcee53f0f9c1dac6992270be4a1b03463..9764cea8aa66013901880cb26a8fd5b0ec063868 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { MetricsEnum, MetricsRatingBadge } from 'design-system';
+import { MetricsRatingBadge, RatingEnum } from 'design-system';
 import * as React from 'react';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
 import { formatMeasure } from '../../../helpers/measures';
@@ -84,7 +84,7 @@ function renderOption(option: number) {
     <div className="sw-flex sw-items-center">
       <MetricsRatingBadge
         label={ratingFormatted}
-        rating={ratingFormatted as MetricsEnum}
+        rating={ratingFormatted as RatingEnum}
         size="xs"
       />
       <span className="sw-ml-2">{labels[option]}</span>
index c453e58d898b1694bbb0453cab24cab316de4b3b..0e0f1f0e1408832de2fe6f01371362c713129ac8 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { MetricsLabel, MetricsRatingBadge, QualityGateIndicator } from 'design-system';
+import { MetricsRatingBadge, QualityGateIndicator, RatingLabel } from 'design-system';
 import * as React from 'react';
 import Tooltip from '../../components/controls/Tooltip';
 import { translate, translateWithParameters } from '../../helpers/l10n';
@@ -83,7 +83,7 @@ export default function Measure({
           ? translateWithParameters('metric.has_rating_X', formatMeasure(value, MetricType.Rating))
           : translate('metric.no_rating')
       }
-      rating={formatMeasure(value, MetricType.Rating) as MetricsLabel}
+      rating={formatMeasure(value, MetricType.Rating) as RatingLabel}
     />
   );
 
index cb8bbe5b0728ada4ac4c29dd4bb7455fc0ced07e..9889e1393482aa3dad6329ce925395296c3d6bbe 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { CoverageIndicator, DuplicationsIndicator, MetricsRatingBadge } from 'design-system';
+import {
+  CoverageIndicator,
+  DuplicationsIndicator,
+  MetricsRatingBadge,
+  RatingEnum,
+} from 'design-system';
 import * as React from 'react';
 import { formatMeasure } from '../../helpers/measures';
 import { MetricKey, MetricType } from '../../types/metrics';
@@ -33,14 +38,6 @@ interface Props {
   value: string | undefined;
 }
 
-enum MetricsEnum {
-  A = 'A',
-  B = 'B',
-  C = 'C',
-  D = 'D',
-  E = 'E',
-}
-
 export default function MeasureIndicator(props: Props) {
   const { className, metricKey, metricType, value } = props;
 
@@ -66,7 +63,7 @@ export default function MeasureIndicator(props: Props) {
 
   const ratingFormatted = formatMeasure(value, MetricType.Rating);
   const ratingComponent = (
-    <MetricsRatingBadge rating={ratingFormatted as MetricsEnum} label={ratingFormatted} />
+    <MetricsRatingBadge rating={ratingFormatted as RatingEnum} label={ratingFormatted} />
   );
 
   return <Measure {...props} ratingComponent={ratingComponent} />;