diff --git a/frontend/src/metabase/admin/datamodel/components/QueryDefinitionTooltip/QueryDefinitionTooltip.jsx b/frontend/src/metabase/admin/datamodel/components/QueryDefinitionTooltip/QueryDefinitionTooltip.jsx index 341f8a66da9e3e8c79e629533c25ffc199e75b9b..d5567266d72f673f5bfc5b5778c900f107ab06b1 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 18914da44941497a4263d635d2835518ecf63b6b..63f3c2401a91f7facd078e9f259bb364afa46b1e 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 b4899f6f1318857be08a39e1d30c7a38a4ea7353..b307985135c18a6ace9184f3d27f9a9312320dbf 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 3106fa5bf50be808bf43616bb4240fefd114fb22..57900300111eb327effbb330f9c7d7a58cfce518 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 7f0bd2bc239d5e76b5552d1dc3d5b511443a83b5..cd0aa06269e98c6d865246fb3a3cc03028c84c8b 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 a77da5b0d3d396d1aa03c4e62546fb204981b124..5ad71aa1e99b8a1a407f54ccf9f521179958ab28 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 d08b5481500a3b47da99ef980ed9762ecf4abffe..75038cd731eb391a33f0a814bbca89dd3fff8d07 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 465aea888494a4dfe30313bea9c58eeecdeb4a42..78bbdd5b0fe6087d5b4eed908e36a94950d8b656 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 e73a6ef996573e9e5ef1b12ebb939acd2e87a587..0f776964061ed8db780c3ea18ece6be91481a403 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 a6f644422428f032741a6f7b921cbf291099c53d..664692dcd8a24a45ad93520b2a285683dcc165e9 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 5a8cf3e3a96b963dd4084a139020c85ffffaa377..9c7d04c8bd1f7af4d7aff6a635f39042d3aa65e9 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 d040ebb13a45d2bda6e32553e61164ee9ae9bc17..e6350f9e375c89012f8bcf442470eff5b9fdadf1 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 4ef6dcc3a8565ea472608f5f6383afbe6c745f65..2d8640bff1784e065114ebaa25c31158560cf9cd 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 7b50a66b324ff4f0047ad27e59dc9080127cdef1..e27a043e48563924ac2d23ba8d9be40efbb5a15f 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 9b07a270f3c113dde8cd983bf4731836c65d5c1c..6aa8778bd6a9b3dd0b5cc2fb6dbf2610f3922bbc 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 e514b9eb6412b5a137ca586754f7822bad4b817e..ee5fa1e7e849320b7c89f16e6365f3a6150ceb8a 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 7a6f77315ce6e7869d51ce1f114c1a5a445d2bf0..eef73460d82be87fe133baf4e1aefc4d3ce3e4a0 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 4146547f837a77f568c601f66a291782d28be712..3585f08134f240d35f255a606ea48134ba88e507 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 77247cf4386d6b31df1de1b4bfc9b3010aca4857..2cc35cd68565af7eff0745fb48b1cd6b5f0ced85 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 }} />