From 9e88fb35fd4dbdf2839bec783c3a6ed4896ec435 Mon Sep 17 00:00:00 2001
From: "Mahatthana (Kelvin) Nomsawadi" <me@bboykelvin.dev>
Date: Fri, 12 Apr 2024 00:38:47 +0700
Subject: [PATCH] Migrate `bordered.module.css` (#41307)

* Migrate .bordered

* Migrate .borderBottom, .borderTop

* Fix typo

* Remove unused classes

* Migrate .borderRight

* Migrate .borderLeft

* Migrate .borderLight

* Migrate .borderError

* Migrate .borderSuccess

* Migrate .borderBrand

* Migrate .borderTransparent

* Migrate .borderless

* Migrate .borderMedium

* Review: Add missing CS import
---
 .../QueryDefinitionTooltip.jsx                |  2 +-
 .../components/filters/OperatorSelector.jsx   |  2 +-
 .../components/revisions/Revision.jsx         |  2 +-
 .../MetadataTable/MetadataTable.tsx           |  2 +-
 .../admin/people/components/AddMemberRow.jsx  |  2 +-
 .../admin/people/components/GroupsListing.jsx |  2 +-
 .../PermissionsPageLayout.tsx                 |  2 +-
 .../components/ApiKeys/ManageApiKeys.tsx      |  2 +-
 .../VersionUpdateNotice.jsx                   |  2 +-
 .../ModelCacheRefreshJobs.tsx                 |  3 +-
 frontend/src/metabase/components/FieldSet.tsx |  2 +-
 .../InputWithSelectPrefix.jsx                 |  2 +-
 .../components/YearPicker/YearPicker.tsx      |  3 +-
 .../src/metabase/css/core/bordered.module.css | 35 +++++--------------
 .../src/metabase/css/dashboard.module.css     |  7 ----
 .../AddSeriesModal/AddSeriesModal.tsx         |  2 +-
 frontend/src/metabase/lib/utils.ts            | 25 -------------
 .../template_tags/SnippetRow/SnippetRow.jsx   |  2 +-
 .../settings/ChartSettingsTableFormatting.jsx |  2 +-
 19 files changed, 27 insertions(+), 74 deletions(-)

diff --git a/frontend/src/metabase/admin/datamodel/components/QueryDefinitionTooltip/QueryDefinitionTooltip.jsx b/frontend/src/metabase/admin/datamodel/components/QueryDefinitionTooltip/QueryDefinitionTooltip.jsx
index 341f8a66da9..d5567266d72 100644
--- a/frontend/src/metabase/admin/datamodel/components/QueryDefinitionTooltip/QueryDefinitionTooltip.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/QueryDefinitionTooltip/QueryDefinitionTooltip.jsx
@@ -28,7 +28,7 @@ export class QueryDefinitionTooltip extends Component {
         </div>
         {object.definition && (
           <div className={CS.mt2}>
-            <FieldSet legend={t`Definition`} className="border-light">
+            <FieldSet legend={t`Definition`} className={CS.borderLight}>
               <QueryDefinition
                 className={QueryBuilderS.TooltipFilterList}
                 object={object}
diff --git a/frontend/src/metabase/admin/datamodel/components/filters/OperatorSelector.jsx b/frontend/src/metabase/admin/datamodel/components/filters/OperatorSelector.jsx
index 18914da4494..63f3c2401a9 100644
--- a/frontend/src/metabase/admin/datamodel/components/filters/OperatorSelector.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/filters/OperatorSelector.jsx
@@ -20,7 +20,7 @@ export default class OperatorSelector extends Component {
       <Select
         value={operator}
         onChange={e => onOperatorChange(e.target.value)}
-        className={cx("border-medium", CS.textDefault, className)}
+        className={cx(CS.borderMedium, CS.textDefault, className)}
         data-testid="operator-select"
       >
         {operators.map(o => (
diff --git a/frontend/src/metabase/admin/datamodel/components/revisions/Revision.jsx b/frontend/src/metabase/admin/datamodel/components/revisions/Revision.jsx
index b4899f6f131..b307985135c 100644
--- a/frontend/src/metabase/admin/datamodel/components/revisions/Revision.jsx
+++ b/frontend/src/metabase/admin/datamodel/components/revisions/Revision.jsx
@@ -71,7 +71,7 @@ export default class Revision extends Component {
             <UserAvatar user={revision.user} bg={userColor} />
           </div>
           <div
-            className={cx(CS.flexFull, CS.my1, "border-left")}
+            className={cx(CS.flexFull, CS.my1, CS.borderLeft)}
             style={{ borderWidth: 2 }}
           />
         </div>
diff --git a/frontend/src/metabase/admin/datamodel/metadata/components/MetadataTable/MetadataTable.tsx b/frontend/src/metabase/admin/datamodel/metadata/components/MetadataTable/MetadataTable.tsx
index 3106fa5bf50..57900300111 100644
--- a/frontend/src/metabase/admin/datamodel/metadata/components/MetadataTable/MetadataTable.tsx
+++ b/frontend/src/metabase/admin/datamodel/metadata/components/MetadataTable/MetadataTable.tsx
@@ -251,7 +251,7 @@ const TableVisibilitySection = ({
         </MetadataVisibilityBadge>
 
         {table.visibility_type && (
-          <span id="VisibilitySubTypes" className={cx("border-left", CS.mx2)}>
+          <span id="VisibilitySubTypes" className={cx(CS.borderLeft, CS.mx2)}>
             <span
               className={cx(CS.mx2, CS.textUppercase, CS.textMedium)}
             >{t`Why Hide?`}</span>
diff --git a/frontend/src/metabase/admin/people/components/AddMemberRow.jsx b/frontend/src/metabase/admin/people/components/AddMemberRow.jsx
index 7f0bd2bc239..cd0aa06269e 100644
--- a/frontend/src/metabase/admin/people/components/AddMemberRow.jsx
+++ b/frontend/src/metabase/admin/people/components/AddMemberRow.jsx
@@ -131,7 +131,7 @@ const AddMemberTypeaheadPopover = Typeahead({
 
   return (
     <TippyPopover
-      className="bordered"
+      className={CS.bordered}
       offset={0}
       placement="bottom-start"
       visible={suggestions.length > 0}
diff --git a/frontend/src/metabase/admin/people/components/GroupsListing.jsx b/frontend/src/metabase/admin/people/components/GroupsListing.jsx
index a77da5b0d3d..5ad71aa1e99 100644
--- a/frontend/src/metabase/admin/people/components/GroupsListing.jsx
+++ b/frontend/src/metabase/admin/people/components/GroupsListing.jsx
@@ -152,7 +152,7 @@ function EditingGroupRow({
 }) {
   const textIsValid = group.name && group.name.length;
   return (
-    <tr className="bordered border-brand rounded">
+    <tr className={cx(CS.bordered, CS.borderBrand, "rounded")}>
       <td>
         <Input
           className={CS.h3}
diff --git a/frontend/src/metabase/admin/permissions/components/PermissionsPageLayout/PermissionsPageLayout.tsx b/frontend/src/metabase/admin/permissions/components/PermissionsPageLayout/PermissionsPageLayout.tsx
index d08b5481500..75038cd731e 100644
--- a/frontend/src/metabase/admin/permissions/components/PermissionsPageLayout/PermissionsPageLayout.tsx
+++ b/frontend/src/metabase/admin/permissions/components/PermissionsPageLayout/PermissionsPageLayout.tsx
@@ -118,7 +118,7 @@ function PermissionsPageLayout({
 
         <LeaveConfirmationModal isEnabled={isDirty} route={route} />
 
-        <TabsContainer className="border-bottom">
+        <TabsContainer className={CS.borderBottom}>
           <PermissionsTabs tab={tab} onChangeTab={navigateToTab} />
           <ToolbarButtonsContainer>
             {toolbarRightContent}
diff --git a/frontend/src/metabase/admin/settings/components/ApiKeys/ManageApiKeys.tsx b/frontend/src/metabase/admin/settings/components/ApiKeys/ManageApiKeys.tsx
index 465aea88849..78bbdd5b0fe 100644
--- a/frontend/src/metabase/admin/settings/components/ApiKeys/ManageApiKeys.tsx
+++ b/frontend/src/metabase/admin/settings/components/ApiKeys/ManageApiKeys.tsx
@@ -64,7 +64,7 @@ function ApiKeysTable({
         </thead>
         <tbody>
           {apiKeys?.map(apiKey => (
-            <tr key={apiKey.id} className="border-bottom">
+            <tr key={apiKey.id} className={CS.borderBottom}>
               <td className={CS.textBold} style={{ maxWidth: 400 }}>
                 <Ellipsified>{apiKey.name}</Ellipsified>
               </td>
diff --git a/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm/VersionUpdateNotice/VersionUpdateNotice.jsx b/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm/VersionUpdateNotice/VersionUpdateNotice.jsx
index e73a6ef9965..0f776964061 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm/VersionUpdateNotice/VersionUpdateNotice.jsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm/VersionUpdateNotice/VersionUpdateNotice.jsx
@@ -79,7 +79,7 @@ function NewVersionAvailable({ currentVersion }) {
           CS.p2,
           CS.bordered,
           CS.rounded,
-          "border-success",
+          CS.borderSuccess,
           CS.flex,
           CS.flexRow,
           CS.alignCenter,
diff --git a/frontend/src/metabase/admin/tasks/containers/ModelCacheRefreshJobs/ModelCacheRefreshJobs.tsx b/frontend/src/metabase/admin/tasks/containers/ModelCacheRefreshJobs/ModelCacheRefreshJobs.tsx
index a6f64442242..664692dcd8a 100644
--- a/frontend/src/metabase/admin/tasks/containers/ModelCacheRefreshJobs/ModelCacheRefreshJobs.tsx
+++ b/frontend/src/metabase/admin/tasks/containers/ModelCacheRefreshJobs/ModelCacheRefreshJobs.tsx
@@ -11,6 +11,7 @@ import PaginationControls from "metabase/components/PaginationControls";
 import Link from "metabase/core/components/Link";
 import Tooltip from "metabase/core/components/Tooltip";
 import AdminS from "metabase/css/admin.module.css";
+import CS from "metabase/css/core/index.css";
 import PersistedModels from "metabase/entities/persisted-models";
 import { usePagination } from "metabase/hooks/use-pagination";
 import { capitalize } from "metabase/lib/formatting";
@@ -147,7 +148,7 @@ function ModelCacheRefreshJobs({ children, onRefresh }: Props) {
 
           return (
             <div data-testid="model-cache-logs">
-              <table className={cx(AdminS.ContentTable, "border-bottom")}>
+              <table className={cx(AdminS.ContentTable, CS.borderBottom)}>
                 <colgroup>
                   <col style={{ width: "30%" }} />
                   <col style={{ width: "40%" }} />
diff --git a/frontend/src/metabase/components/FieldSet.tsx b/frontend/src/metabase/components/FieldSet.tsx
index 5a8cf3e3a96..9c7d04c8bd1 100644
--- a/frontend/src/metabase/components/FieldSet.tsx
+++ b/frontend/src/metabase/components/FieldSet.tsx
@@ -12,7 +12,7 @@ interface FieldSetProps {
 }
 
 export function FieldSet({
-  className = "border-brand",
+  className = CS.borderBrand,
   legend,
   required = false,
   noPadding = false,
diff --git a/frontend/src/metabase/components/InputWithSelectPrefix/InputWithSelectPrefix.jsx b/frontend/src/metabase/components/InputWithSelectPrefix/InputWithSelectPrefix.jsx
index d040ebb13a4..e6350f9e375 100644
--- a/frontend/src/metabase/components/InputWithSelectPrefix/InputWithSelectPrefix.jsx
+++ b/frontend/src/metabase/components/InputWithSelectPrefix/InputWithSelectPrefix.jsx
@@ -79,7 +79,7 @@ export default class InputWithSelectPrefix extends Component {
         )}
       >
         <Select
-          className="border-right"
+          className={CS.borderRight}
           value={prefix || defaultPrefix}
           onChange={e => this.setState({ prefix: e.target.value })}
           buttonProps={{ className: CS.borderless }}
diff --git a/frontend/src/metabase/components/YearPicker/YearPicker.tsx b/frontend/src/metabase/components/YearPicker/YearPicker.tsx
index 4ef6dcc3a85..2d8640bff17 100644
--- a/frontend/src/metabase/components/YearPicker/YearPicker.tsx
+++ b/frontend/src/metabase/components/YearPicker/YearPicker.tsx
@@ -2,6 +2,7 @@ import type { ChangeEvent } from "react";
 import _ from "underscore";
 
 import Select from "metabase/core/components/Select";
+import CS from "metabase/css/core/index.css";
 
 const YEARS = _.range(new Date().getFullYear(), 1900, -1);
 
@@ -12,7 +13,7 @@ export interface YearPickerProps {
 
 const YearPicker = ({ value, onChange }: YearPickerProps) => (
   <Select
-    className="borderless"
+    className={CS.borderless}
     value={value}
     options={YEARS}
     optionNameFn={(option: any) => option}
diff --git a/frontend/src/metabase/css/core/bordered.module.css b/frontend/src/metabase/css/core/bordered.module.css
index 7b50a66b324..e27a043e485 100644
--- a/frontend/src/metabase/css/core/bordered.module.css
+++ b/frontend/src/metabase/css/core/bordered.module.css
@@ -5,88 +5,71 @@
   --border-color: var(--color-border);
 }
 
-:global(.bordered),
 .bordered {
   border: var(--border-size) var(--border-style) var(--color-border);
 }
 
-:global(.border-bottom),
-.border-bottom,
 .borderBottom {
   border-bottom: var(--border-size) var(--border-style) var(--color-border);
 }
 
-/* ensure that a border-top item inside of a bordred element won't double up */
-:global(.bordered > .border-bottom:last-child) {
+/* ensure that a border-top item inside of a bordered element won't double up */
+.bordered > .border-bottom:last-child {
   border-bottom: none;
 }
 
-:global(.border-top),
-.border-top,
 .borderTop {
   border-top: var(--border-size) var(--border-style) var(--color-border);
 }
 
-/* ensure that a border-top item inside of a bordred element won't double up */
-:global(.bordered > .border-top:first-child) {
+/* ensure that a border-top item inside of a bordered element won't double up */
+.bordered > .border-top:first-child {
   border-top: none;
 }
 
-:global(.border-row-divider),
 .borderRowDivider {
   border-bottom: var(--border-size) var(--border-style) var(--color-border);
 }
 
-:global(.border-row-divider:last-child),
 .borderRowDivider:last-child {
   border-bottom: none;
 }
 
-:global(.border-right) {
+.borderRight {
   border-right: var(--border-size) var(--border-style) var(--color-border);
 }
 
-:global(.border-left),
 .borderLeft {
   border-left: var(--border-size) var(--border-style) var(--color-border);
 }
 
-:global(.border-light) {
+.borderLight {
   border-color: color-mod(var(--color-border) alpha(-80%)) !important;
 }
 
-:global(.border-error),
-.border-error,
 .borderError {
   border-color: var(--color-error) !important;
 }
 
-:global(.border-success) {
+.borderSuccess {
   border-color: var(--color-success) !important;
 }
 
-:global(.border-brand),
-.border-brand,
 .borderBrand {
   border-color: var(--color-brand) !important;
 }
 
-:global(.border-transparent) {
+.borderTransparent {
   border-color: transparent;
 }
 
 /* BORDERLESS IS THE DEFAULT */
 /* ONLY USE IF needing to override an existing border! */
 /* ensure there is no border via important */
-:global(.borderless),
 .borderless {
   border: none !important;
 }
 
-.border-bottom {
-  border-bottom: var(--border-size) dashed var(--color-border);
-}
-
-:global(.border-medium) {
+.borderMedium {
   border-width: var(--border-size-medium);
 }
diff --git a/frontend/src/metabase/css/dashboard.module.css b/frontend/src/metabase/css/dashboard.module.css
index 9b07a270f3c..6aa8778bd6a 100644
--- a/frontend/src/metabase/css/dashboard.module.css
+++ b/frontend/src/metabase/css/dashboard.module.css
@@ -34,13 +34,6 @@
   fill: currentColor;
 }
 
-.Dashboard.DashboardNight :global(.border-top),
-.Dashboard.DashboardNight :global(.border-left),
-.Dashboard.DashboardNight :global(.border-bottom),
-.Dashboard.DashboardNight :global(.border-right) {
-  border-color: var(--color-bg-dark);
-}
-
 /* Night mode transition */
 .Dashboard.DashboardFullscreen,
 .Dashboard.DashboardFullscreen .DashCard .Card {
diff --git a/frontend/src/metabase/dashboard/components/AddSeriesModal/AddSeriesModal.tsx b/frontend/src/metabase/dashboard/components/AddSeriesModal/AddSeriesModal.tsx
index e514b9eb641..ee5fa1e7e84 100644
--- a/frontend/src/metabase/dashboard/components/AddSeriesModal/AddSeriesModal.tsx
+++ b/frontend/src/metabase/dashboard/components/AddSeriesModal/AddSeriesModal.tsx
@@ -202,7 +202,7 @@ export class AddSeriesModal extends Component<Props, State> {
           </div>
         </div>
         <div
-          className={cx("border-left", CS.flex, CS.flexColumn)}
+          className={cx(CS.borderLeft, CS.flex, CS.flexColumn)}
           style={{
             width: 370,
             backgroundColor: color("bg-light"),
diff --git a/frontend/src/metabase/lib/utils.ts b/frontend/src/metabase/lib/utils.ts
index 7a6f77315ce..eef73460d82 100644
--- a/frontend/src/metabase/lib/utils.ts
+++ b/frontend/src/metabase/lib/utils.ts
@@ -3,34 +3,9 @@ import _ from "underscore";
 
 import { PLUGIN_IS_EE_BUILD } from "metabase/plugins";
 
-const LAYOUT_PROPS = [
-  "m",
-  "ml",
-  "mr",
-  "mt",
-  "mb",
-  "mx",
-  "my",
-  "p",
-  "pl",
-  "pr",
-  "pt",
-  "pb",
-  "px",
-  "py",
-  "bg",
-  "color",
-  "hover",
-  "bordered",
-];
-
 const EMAIL_REGEX =
   /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
 
-export function stripLayoutProps(props: unknown) {
-  return _.omit(props, LAYOUT_PROPS);
-}
-
 function s4() {
   return Math.floor((1 + Math.random()) * 0x10000)
     .toString(16)
diff --git a/frontend/src/metabase/query_builder/components/template_tags/SnippetRow/SnippetRow.jsx b/frontend/src/metabase/query_builder/components/template_tags/SnippetRow/SnippetRow.jsx
index 4146547f837..3585f08134f 100644
--- a/frontend/src/metabase/query_builder/components/template_tags/SnippetRow/SnippetRow.jsx
+++ b/frontend/src/metabase/query_builder/components/template_tags/SnippetRow/SnippetRow.jsx
@@ -23,7 +23,7 @@ class SnippetRowInner extends Component {
     return (
       <div
         className={cx(
-          { "border-transparent": !isOpen },
+          { [CS.borderTransparent]: !isOpen },
           CS.borderBottom,
           CS.borderTop,
         )}
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingsTableFormatting.jsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingsTableFormatting.jsx
index 77247cf4386..2cc35cd6856 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingsTableFormatting.jsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingsTableFormatting.jsx
@@ -295,7 +295,7 @@ const RulePreview = ({ rule, cols, onClick, onRemove }) => (
       <RuleBackground
         rule={rule}
         className={cx(CS.mr2, CS.flexNoShrink, CS.rounded, {
-          bordered: rule.type === "range",
+          [CS.bordered]: rule.type === "range",
         })}
         style={{ width: 40, height: 40 }}
       />
-- 
GitLab