diff --git a/packages/app-elements/src/styles/global.css b/packages/app-elements/src/styles/global.css index fbbefa9d..6db9fa76 100644 --- a/packages/app-elements/src/styles/global.css +++ b/packages/app-elements/src/styles/global.css @@ -9,9 +9,9 @@ --breakpoint-xl: 1280px; --radius-*: initial; - --radius: 0.313rem; - --radius-sm: 0.188rem; - --radius-md: 0.625rem; + --radius: 0.5rem; + --radius-sm: 0.375rem; + --radius-md: 1rem; --radius-full: 9999px; --color-*: initial; diff --git a/packages/app-elements/src/ui/atoms/A.test.tsx b/packages/app-elements/src/ui/atoms/A.test.tsx index 26ad50ca..8a083f41 100644 --- a/packages/app-elements/src/ui/atoms/A.test.tsx +++ b/packages/app-elements/src/ui/atoms/A.test.tsx @@ -54,7 +54,8 @@ describe("Anchor", () => { click me , ) - expect(getByRole("link").className).toContain("px-4 h-9") + expect(getByRole("link").className).toContain("h-9") + expect(getByRole("link").className).toContain("px-4") }) it("Should render as size regular (default)", () => { @@ -63,7 +64,8 @@ describe("Anchor", () => { click me , ) - expect(getByRole("link").className).toContain("px-4 h-10") + expect(getByRole("link").className).toContain("px-4") + expect(getByRole("link").className).toContain("h-10") }) it("Should render with flex alignment", () => { @@ -72,6 +74,6 @@ describe("Anchor", () => { click me , ) - expect(getByRole("link").className).toContain("flex gap-1 items-center") + expect(getByRole("link").className).toContain("inline") }) }) diff --git a/packages/app-elements/src/ui/atoms/Button.test.tsx b/packages/app-elements/src/ui/atoms/Button.test.tsx index 4c80d154..17d4c381 100644 --- a/packages/app-elements/src/ui/atoms/Button.test.tsx +++ b/packages/app-elements/src/ui/atoms/Button.test.tsx @@ -39,16 +39,20 @@ describe("Button", () => { it("Should render as size small", () => { const { getByRole } = render(click me) - expect(getByRole("button").className).toContain("px-4 h-9") + expect(getByRole("button").className).toContain("px-4") + expect(getByRole("button").className).toContain("h-9") }) it("Should render as size regular (default)", () => { const { getByRole } = render(click me) - expect(getByRole("button").className).toContain("px-4 h-10") + expect(getByRole("button").className).toContain("px-4") + expect(getByRole("button").className).toContain("h-10") }) it("Should render with flex alignment", () => { const { getByRole } = render(click me) - expect(getByRole("button").className).toContain("flex gap-1 items-center") + expect(getByRole("button").className).toContain("inline-flex") + expect(getByRole("button").className).toContain("gap-1") + expect(getByRole("button").className).toContain("items-center") }) }) diff --git a/packages/app-elements/src/ui/atoms/Tag.tsx b/packages/app-elements/src/ui/atoms/Tag.tsx index f38dac87..ebba77ac 100644 --- a/packages/app-elements/src/ui/atoms/Tag.tsx +++ b/packages/app-elements/src/ui/atoms/Tag.tsx @@ -103,8 +103,8 @@ export const Tag: FC = ({ icon, children, className, ...rest }) => { className={cn([ className, "flex gap-2 items-center select-none", - "text-xs font-bold", - "py-[3px] px-2 rounded text-gray bg-gray-200", + "text-xs font-semibold", + "py-[3px] px-2 rounded-sm text-gray bg-gray-200", { "cursor-pointer hover:bg-gray-100 outline-primary-light": hasHover, }, diff --git a/packages/app-elements/src/ui/composite/Dropdown/Dropdown.test.tsx b/packages/app-elements/src/ui/composite/Dropdown/Dropdown.test.tsx index 9d83ada0..3218c04c 100644 --- a/packages/app-elements/src/ui/composite/Dropdown/Dropdown.test.tsx +++ b/packages/app-elements/src/ui/composite/Dropdown/Dropdown.test.tsx @@ -33,7 +33,7 @@ describe("Dropdown", () => { Open dropdown diff --git a/packages/app-elements/src/ui/composite/Dropdown/Dropdown.tsx b/packages/app-elements/src/ui/composite/Dropdown/Dropdown.tsx index ffea9cc2..22eb66fd 100644 --- a/packages/app-elements/src/ui/composite/Dropdown/Dropdown.tsx +++ b/packages/app-elements/src/ui/composite/Dropdown/Dropdown.tsx @@ -108,10 +108,10 @@ export const Dropdown: React.FC = ({ // biome-ignore lint/a11y/useKeyWithClickEvents: Using click handler to close the dropdown diff --git a/packages/app-elements/src/ui/composite/Dropdown/DropdownDivider.tsx b/packages/app-elements/src/ui/composite/Dropdown/DropdownDivider.tsx index 0c354d6f..8f77d45d 100644 --- a/packages/app-elements/src/ui/composite/Dropdown/DropdownDivider.tsx +++ b/packages/app-elements/src/ui/composite/Dropdown/DropdownDivider.tsx @@ -11,7 +11,7 @@ export const DropdownDivider: FC = ({ }) => { return ( - + ) } diff --git a/packages/app-elements/src/ui/composite/Dropdown/DropdownItem.tsx b/packages/app-elements/src/ui/composite/Dropdown/DropdownItem.tsx index fe6eb6d1..5c38818a 100644 --- a/packages/app-elements/src/ui/composite/Dropdown/DropdownItem.tsx +++ b/packages/app-elements/src/ui/composite/Dropdown/DropdownItem.tsx @@ -61,14 +61,14 @@ export const DropdownItem = withSkeletonTemplate( }} href={href} className={cn( - "w-full bg-black text-white! py-1.5 pl-4 text-sm font-medium flex items-center focus:outline-hidden!", + "w-[calc(100%-1rem)] bg-white text-black! py-1.5 pl-4 mx-2 text-sm font-regular flex items-center focus:outline-hidden!", { "pr-8": info == null, "min-w-[250px] pr-6": info != null, }, className, { - "hover:bg-gray-600 cursor-pointer focus:bg-gray-600 group": + "hover:bg-gray-100 hover:rounded cursor-pointer focus:bg-gray-100 group": onClick != null || href != null, "cursor-default": onClick == null && href == null, "opacity-50 pointer-events-none": isDisabled, diff --git a/packages/app-elements/src/ui/composite/Dropdown/DropdownMenu.tsx b/packages/app-elements/src/ui/composite/Dropdown/DropdownMenu.tsx index 5c6e3084..b496b6fa 100644 --- a/packages/app-elements/src/ui/composite/Dropdown/DropdownMenu.tsx +++ b/packages/app-elements/src/ui/composite/Dropdown/DropdownMenu.tsx @@ -1,11 +1,14 @@ import cn from "classnames" -import { type FC, useEffect, useState } from "react" +import type { FC } from "react" import { DropdownDivider } from "./DropdownDivider" export interface DropdownMenuProps extends React.HTMLAttributes { /** Menu content */ children?: React.ReactNode - /** Set to `none` to hide the top arrow */ + /** + * Set to `none` to hide the top arrow + * @deprecated We decided to remove the arrow from the dropdown menu + */ arrow?: "none" /** Optional header for the dropdown menu */ menuHeader?: string @@ -28,18 +31,12 @@ export interface DropdownMenuProps extends React.HTMLAttributes { export const DropdownMenu: FC = ({ children, - arrow, menuHeader, menuPosition = "bottom-right", parentElementRef, menuWidth, ...rest }) => { - const [centerToWidth, setCenterToWidth] = useState() - useEffect(() => { - setCenterToWidth(parentElementRef?.current?.clientWidth) - }, [parentElementRef]) - return ( = ({ "flex-col-reverse items-start": menuPosition === "top-left", })} > - {arrow === "none" ? null : ( - - )} {menuHeader != null && ( <> {menuHeader} @@ -80,64 +74,3 @@ export const DropdownMenu: FC = ({ } DropdownMenu.displayName = "DropdownMenu" - -const Arrow: FC<{ - menuPosition: DropdownMenuProps["menuPosition"] - centerToWidth?: number -}> = ({ menuPosition = "bottom-right", centerToWidth }) => { - const arrowHeight = 5 - const arrowWidth = 12 - - const centeringOffset = calculateArrowCenteringOffset({ - arrowWidth, - centerToWidth, - }) - - const alignProp = menuPosition.includes("right") ? "right" : "left" - const arrowDirection = - menuPosition === "bottom-right" || menuPosition === "bottom-left" - ? "top" - : "bottom" - const cssForPointingDirection = - arrowDirection === "top" - ? { - borderBottomWidth: arrowHeight, - borderTopColor: "transparent", - } - : { - borderTopWidth: arrowHeight, - borderBottomColor: "transparent", - } - - return ( - - ) -} - -// Calculate the offset for centering the arrow on the dropdown button when this does not excide 50px -// This means that for smaller buttons (up to 50px) the arrow will be centered on the button -// otherwise it will 10px from the left or right as design system -function calculateArrowCenteringOffset({ - arrowWidth, - centerToWidth, -}: { - arrowWidth: number - centerToWidth?: number -}): number { - if (centerToWidth == null || centerToWidth > 50) { - return 10 // default offset calculated on a base of 32px button width - } - - const centeringOffset = centerToWidth / 2 - arrowWidth / 2 - return centeringOffset -} diff --git a/packages/app-elements/src/ui/composite/Dropdown/DropdownSearch.tsx b/packages/app-elements/src/ui/composite/Dropdown/DropdownSearch.tsx index 1f61f3ee..d1b0c93e 100644 --- a/packages/app-elements/src/ui/composite/Dropdown/DropdownSearch.tsx +++ b/packages/app-elements/src/ui/composite/Dropdown/DropdownSearch.tsx @@ -50,7 +50,7 @@ export const DropdownSearch = forwardRef( ) return ( - + ( /> Should be rendering bottom-left 1`] = ` open dropdown Should be rendering bottom-left 1`] = ` - @@ -53,7 +49,7 @@ exports[`Dropdown > Should be rendering top-left 1`] = ` open dropdown Should be rendering top-left 1`] = ` - @@ -98,7 +90,7 @@ exports[`Dropdown > Should be rendering top-right 1`] = ` open dropdown Should be rendering top-right 1`] = ` - @@ -143,7 +131,7 @@ exports[`Dropdown > Should be rendering with default bottom-right position 1`] = open dropdown Should be rendering with default bottom-right position 1`] = - Should be rendering with default bottom-right position 1`] = Should be rendering with default bottom-right position 1`] = class="h-px my-2" > ({ ...style, zIndex: 100, - border: "1px solid rgb(230 231 231)", - borderRadius: 5, - boxShadow: "2px 2px 0 #f8f8f8;", - padding: "1px", + border: "1px solid #e5e5e5", + borderRadius: 8, + boxShadow: + "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);", + padding: "8px", }), menuList: (style) => ({ ...style, @@ -22,25 +23,18 @@ export const getSelectStyles = ( ...style, padding: "0.375rem 1rem", backgroundColor: isSelected - ? "#EDEEEE" + ? "#f8f8f8" : isFocused - ? "#F8F8F8" + ? "#edeeee" : "transparent", color: isDisabled ? "#BBBEBE" : "rgb(40 41 41)", fontSize: 14, lineHeight: "20px", - fontWeight: isSelected ? 700 : 500, + fontWeight: isSelected ? 600 : 400, cursor: "pointer", + borderRadius: "8px", "&:active": { - backgroundColor: isSelected ? "#EDEEEE" : "rgb(248 248 248)", - }, - "&:first-of-type": { - borderTopLeftRadius: 5, - borderTopRightRadius: 5, - }, - "&:last-child": { - borderBottomLeftRadius: 5, - borderBottomRightRadius: 5, + backgroundColor: isSelected ? "#f8f8f8" : "rgb(248 248 248)", }, }), noOptionsMessage: (style) => ({ @@ -58,8 +52,14 @@ export const getSelectStyles = ( }), valueContainer: (style, { isMulti }) => ({ ...style, - padding: isMulti ? "0.4375rem 1rem" : "0.5rem 1rem", - gap: "0.5rem", + padding: isMulti ? "0.4375rem 0.625rem" : "0.5rem 1rem", + gap: "0", + "> div[class^='flex']": { + marginRight: "6px", + }, + "> div[class^='flex']:not(:has(~ div[class^='flex']))": { + marginRight: "0", + }, }), singleValue: (style) => ({ ...style, @@ -92,7 +92,7 @@ export const getSelectStyles = ( backgroundColor: "transparent", }, "> button": { - borderRadius: "5px", + borderRadius: "8px", }, "> button:focus-within": { color: "black", @@ -109,22 +109,24 @@ export const getSelectStyles = ( minHeight: "44px", outline: "none", - borderRadius: 5, + borderRadius: 8, cursor: "pointer", } }, - placeholder: (style) => ({ + placeholder: (style, { isMulti }) => ({ ...style, margin: 0, fontSize: 14, lineHeight: "20px", fontWeight: 500, color: "#686E6E", + paddingLeft: isMulti ? "0.375rem" : "0", }), - input: (style) => ({ + input: (style, { isMulti }) => ({ ...style, margin: 0, padding: 0, + paddingLeft: isMulti ? "0.375rem" : "0", fontSize: 14, lineHeight: "20px", "& > input": { diff --git a/packages/app-elements/src/ui/forms/RuleEngine/__snapshots__/index.test.tsx.snap b/packages/app-elements/src/ui/forms/RuleEngine/__snapshots__/index.test.tsx.snap index 15287517..770c6fdb 100644 --- a/packages/app-elements/src/ui/forms/RuleEngine/__snapshots__/index.test.tsx.snap +++ b/packages/app-elements/src/ui/forms/RuleEngine/__snapshots__/index.test.tsx.snap @@ -24,7 +24,7 @@ exports[`RuleEngine > renders empty without any error 1`] = ` class="min-h-[49px] flex items-center" > renders empty without any error 1`] = ` class="grow flex justify-end" > , string> + + return mapping[size] +} + function getSizeCss(size: InteractiveElementProps["size"]): string | undefined { if (size == null) { return undefined } const mapping = { - mini: "px-2.5 h-[30px]", - small: "px-4 h-9", - regular: "px-4 h-10", + mini: "h-[30px] min-w-[30px]", + small: "h-9 min-w-9", + regular: "h-10 min-w-10", } satisfies Record, string> return mapping[size] diff --git a/packages/app-elements/src/ui/resources/ResourceLineItems/__snapshots__/ResourceLineItems.test.tsx.snap b/packages/app-elements/src/ui/resources/ResourceLineItems/__snapshots__/ResourceLineItems.test.tsx.snap index bf7e28c4..96d28b21 100644 --- a/packages/app-elements/src/ui/resources/ResourceLineItems/__snapshots__/ResourceLineItems.test.tsx.snap +++ b/packages/app-elements/src/ui/resources/ResourceLineItems/__snapshots__/ResourceLineItems.test.tsx.snap @@ -156,7 +156,7 @@ exports[`ResourceLineItems > should disable the remove action when \`onSwap\` is > should disable the remove action when \`onSwap\` is > should render the InputSpinner and the trash icon w > should render the swap action when \`onSwap\` is de > should render the swap action when \`onSwap\` is de should render the swap action when \`onSwap\` is de > should render the swap action when \`onSwap\` is de