diff --git a/src/components.ts b/src/components.ts index 7a37e4334..20c5e09c6 100644 --- a/src/components.ts +++ b/src/components.ts @@ -59,3 +59,5 @@ export * from "./components/dapp/Countdown"; export { default as Countdown } from "./components/dapp/Countdown"; export * from "./components/primitives/Bar"; export { default as Bar } from "./components/primitives/Bar"; +export * from "./components/dapp/Connected"; +export { default as Connected } from "./components/dapp/Connected"; diff --git a/src/components/dapp/Connected.tsx b/src/components/dapp/Connected.tsx new file mode 100644 index 000000000..d1ed82403 --- /dev/null +++ b/src/components/dapp/Connected.tsx @@ -0,0 +1,18 @@ +import { Button, type ButtonProps, Modal, WalletConnectors } from "../.."; +import { useWalletContext } from "../../context/Wallet.context"; + +export type ConnectedProps = ButtonProps; + +export default function Connected({ children, ...props }: ConnectedProps) { + const { connected } = useWalletContext(); + + if (!connected) + return ( + }> + + + ); + return children; +} diff --git a/src/components/primitives/Divider.tsx b/src/components/primitives/Divider.tsx index c74c18bd6..fd1d4e60c 100644 --- a/src/components/primitives/Divider.tsx +++ b/src/components/primitives/Divider.tsx @@ -44,9 +44,7 @@ export type DividerProps = Component< >; export default function Divider({ vertical = false, horizontal = true, look, className, ...props }: DividerProps) { - if (horizontal) return
; + if (horizontal && !vertical) return
; - return ( -
- ); + return
; } diff --git a/src/components/primitives/List.tsx b/src/components/primitives/List.tsx index 7791c14a3..28965a747 100644 --- a/src/components/primitives/List.tsx +++ b/src/components/primitives/List.tsx @@ -19,6 +19,7 @@ export const listStyles = tv({ }, index: { first: "", + alone: "", last: "", }, look: { @@ -109,17 +110,36 @@ export const listStyles = tv({ ], }); -type ListElement = ReactElement<{ look: unknown; size: unknown; className?: string }>; -export type ListProps = Component & { indexOffset?: number }, HTMLDivElement>; +type ListElement = ReactElement<{ + look: unknown; + size: unknown; + className?: string; +}>; +export type ListProps = Component< + Styled & { indexOffset?: number; dividerClassName?: (index: number) => string }, + HTMLDivElement +>; -export default function List({ look, size, flex, content, className, children, indexOffset, ...props }: ListProps) { +export default function List({ + look, + size, + flex, + content, + className, + children, + indexOffset, + dividerClassName, + ...props +}: ListProps) { const { base, item, divider } = listStyles({ look, size, content: size, flex }); const definedChild = useMemo(() => { const [first, last] = getDefinedIndexesOfChildren(children); + //TODO: workaround for borders, might just need to update the coumpound styling + if (first === 0 && last === 0) return children; return Children.map(children as ListElement | ListElement[], (child, index) => { - let position: "first" | "last" | undefined = "first"; + let position: "first" | "last" | "alone" | undefined = "first"; if (index > (first ?? 0) + (indexOffset ?? 0)) position = undefined; if (index >= (last ?? 0) + (indexOffset ?? 0)) position = "last"; @@ -136,11 +156,11 @@ export default function List({ look, size, flex, content, className, children, i }), ), }), - index <= (last ?? 0) &&
, + position !== "last" &&
, ] ); }); - }, [children, divider, item, look, size, indexOffset]); + }, [children, divider, item, look, size, indexOffset, dividerClassName]); return (
diff --git a/src/components/primitives/Table.tsx b/src/components/primitives/Table.tsx index f7eedccf4..a98e74021 100644 --- a/src/components/primitives/Table.tsx +++ b/src/components/primitives/Table.tsx @@ -6,7 +6,7 @@ import type { Component, Styled } from "../../utils/types"; import Box from "./Box"; import EventBlocker from "./EventBlocker"; import Icon from "./Icon"; -import List from "./List"; +import List, { type ListProps } from "./List"; import Text from "./Text"; export const tableStyles = tv({ @@ -144,6 +144,7 @@ export type TableProps = Component< header?: ReactNode; footer?: ReactNode; order?: Order; + hideLabels?: boolean; sort?: keyof T; loading?: boolean; sortable?: (keyof T)[]; @@ -197,12 +198,13 @@ export function Table({ header, footer, order, + hideLabels, sort, onSort, className, children, ...props -}: TableProps) { +}: TableProps & { dividerClassName: ListProps["dividerClassName"] }) { const [_order, setOrder] = useState<"asc" | "desc">("desc"); const [sortBy, setSortBy] = useState(sortable?.[0]); @@ -221,7 +223,7 @@ export function Table({ {!!header ? {header} : undefined} {/* biome-ignore lint/suspicious/noExplicitAny: please forgive this one as well */} - + {!hideLabels ? : undefined} {children} {!!footer ? {footer} : undefined} @@ -229,8 +231,10 @@ export function Table({ } export function createTable(columns: T) { - // biome-ignore lint/suspicious/noExplicitAny: no reasons for it to have type errors - const TemplateTable = (props: Omit, "columns">) => ; + const TemplateTable = (props: Omit, "columns"> & ListProps) => ( + // biome-ignore lint/suspicious/noExplicitAny: no reasons for it to have type errors +
+ ); // biome-ignore lint/suspicious/noExplicitAny: no reasons for it to have type errors const TemplateRow = (props: Omit, "columns">) => ; diff --git a/src/components/primitives/Time.tsx b/src/components/primitives/Time.tsx index 6e9db387c..09042898f 100644 --- a/src/components/primitives/Time.tsx +++ b/src/components/primitives/Time.tsx @@ -3,21 +3,23 @@ import { useMemo } from "react"; export type TimeProps = { timestamp: number | bigint; + prefix?: string; relative?: "hours" | "day" | "auto"; }; -export default function Time({ timestamp }: TimeProps) { +export default function Time({ timestamp, prefix }: TimeProps) { const time = useMemo(() => { const then = moment(Number(timestamp)).fromNow(); return then + .replace("in ", (prefix && `${prefix} `) ?? "in ") .replace("/ minute| minutes/g", "m") .replace(/\ba\b/, "1") .replace(/ seconds| second/g, "s") - .replace(/ hours| hour/g, "h") - .replace(/ days| day/g, "d") - .replace(/ months| month/g, "d"); - }, [timestamp]); + .replace(/ hours| hour/g, "hours") + .replace(/ days| day/g, " days") + .replace(/ months| month/g, " months"); + }, [timestamp, prefix]); return time; }