diff --git a/web/panda.config.ts b/web/panda.config.ts index 1fbdb2f9c..f7e712831 100644 --- a/web/panda.config.ts +++ b/web/panda.config.ts @@ -13,6 +13,7 @@ import { headingInput } from "@/recipes/heading-input"; import { input } from "@/recipes/input"; import { popover } from "@/recipes/popover"; import { richCard } from "@/recipes/rich-card"; +import { table } from "@/recipes/table"; import { treeView } from "@/recipes/tree-view"; import { typographyHeading } from "@/recipes/typography-heading"; @@ -239,6 +240,7 @@ export default defineConfig({ }, slotRecipes: { popover: popover, + table: table, treeView: treeView, }, semanticTokens, diff --git a/web/src/app/(dashboard)/@contextpane/[...catchAll]/page.tsx b/web/src/app/(dashboard)/@contextpane/[...catchAll]/page.tsx new file mode 100644 index 000000000..221737a85 --- /dev/null +++ b/web/src/app/(dashboard)/@contextpane/[...catchAll]/page.tsx @@ -0,0 +1,5 @@ +import { RootContextPane } from "@/screens/site/RootContextPane"; + +export default async function Page() { + return ; +} diff --git a/web/src/app/(dashboard)/@contextpane/default.tsx b/web/src/app/(dashboard)/@contextpane/default.tsx new file mode 100644 index 000000000..b5c264711 --- /dev/null +++ b/web/src/app/(dashboard)/@contextpane/default.tsx @@ -0,0 +1,5 @@ +import { RootContextPane } from "@/screens/site/RootContextPane"; + +export default async function Default() { + return ; +} diff --git a/web/src/app/(dashboard)/@contextpane/t/[slug]/default.tsx b/web/src/app/(dashboard)/@contextpane/t/[slug]/default.tsx new file mode 100644 index 000000000..b5c264711 --- /dev/null +++ b/web/src/app/(dashboard)/@contextpane/t/[slug]/default.tsx @@ -0,0 +1,5 @@ +import { RootContextPane } from "@/screens/site/RootContextPane"; + +export default async function Default() { + return ; +} diff --git a/web/src/app/(dashboard)/@contextpane/t/[slug]/page.tsx b/web/src/app/(dashboard)/@contextpane/t/[slug]/page.tsx new file mode 100644 index 000000000..d5e30059d --- /dev/null +++ b/web/src/app/(dashboard)/@contextpane/t/[slug]/page.tsx @@ -0,0 +1,15 @@ +import { threadGet } from "@/api/openapi-server/threads"; +import { ThreadScreenContextPane } from "@/screens/thread/ThreadScreen/ThreadScreenContextPane"; + +export default async function Page(props: { params: { slug: string } }) { + const { slug } = props.params; + + try { + const { data } = await threadGet(slug); + + return ; + } catch (e) { + console.error(e); + return null; + } +} diff --git a/web/src/app/(dashboard)/@contextpane/t/default.tsx b/web/src/app/(dashboard)/@contextpane/t/default.tsx new file mode 100644 index 000000000..b5c264711 --- /dev/null +++ b/web/src/app/(dashboard)/@contextpane/t/default.tsx @@ -0,0 +1,5 @@ +import { RootContextPane } from "@/screens/site/RootContextPane"; + +export default async function Default() { + return ; +} diff --git a/web/src/app/(dashboard)/layout.tsx b/web/src/app/(dashboard)/layout.tsx index 877c815a0..18c899062 100644 --- a/web/src/app/(dashboard)/layout.tsx +++ b/web/src/app/(dashboard)/layout.tsx @@ -2,6 +2,9 @@ import { PropsWithChildren } from "react"; import { Default } from "src/layouts/Default"; -export default async function Layout({ children }: PropsWithChildren) { - return {children}; +export default async function Layout({ + children, + contextpane, +}: PropsWithChildren<{ contextpane: React.ReactNode }>) { + return {children}; } diff --git a/web/src/app/default.tsx b/web/src/app/default.tsx new file mode 100644 index 000000000..c6437a5e3 --- /dev/null +++ b/web/src/app/default.tsx @@ -0,0 +1,3 @@ +export default async function Page() { + return null; +} diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx index 110b6b2eb..d425c9851 100644 --- a/web/src/app/layout.tsx +++ b/web/src/app/layout.tsx @@ -13,7 +13,7 @@ import { Providers } from "./providers"; export const dynamic = "force-dynamic"; -export default function RootLayout({ children }: PropsWithChildren) { +export default async function RootLayout({ children }: PropsWithChildren) { return ( diff --git a/web/src/components/member/MemberBadge/MemberIdent.tsx b/web/src/components/member/MemberBadge/MemberIdent.tsx index 63285b9aa..e0819d8bd 100644 --- a/web/src/components/member/MemberBadge/MemberIdent.tsx +++ b/web/src/components/member/MemberBadge/MemberIdent.tsx @@ -21,12 +21,7 @@ export function MemberIdent({ roles = "hidden", }: Props) { return ( - + {avatar === "visible" && } @@ -47,7 +42,7 @@ export function MemberName({ minW="0" fontSize={size === "lg" ? "md" : "sm"} fontWeight={size === "lg" ? "bold" : "medium"} - overflowX="hidden" + overflow="hidden" textWrap="nowrap" textOverflow="ellipsis" color="fg.default" diff --git a/web/src/components/site/Navigation/ContextPane.tsx b/web/src/components/site/Navigation/ContextPane.tsx new file mode 100644 index 000000000..7900ba693 --- /dev/null +++ b/web/src/components/site/Navigation/ContextPane.tsx @@ -0,0 +1,24 @@ +import React, { PropsWithChildren } from "react"; + +import { Box, styled } from "@/styled-system/jsx"; +import { Floating } from "@/styled-system/patterns"; + +export function ContextPane({ children }: PropsWithChildren) { + return ( + + + {children} + + + ); +} diff --git a/web/src/components/site/Navigation/Top/Top.tsx b/web/src/components/site/Navigation/DesktopCommandBar.tsx similarity index 70% rename from web/src/components/site/Navigation/Top/Top.tsx rename to web/src/components/site/Navigation/DesktopCommandBar.tsx index 4a8996723..8b7604862 100644 --- a/web/src/components/site/Navigation/Top/Top.tsx +++ b/web/src/components/site/Navigation/DesktopCommandBar.tsx @@ -4,14 +4,15 @@ import { HStack } from "@/styled-system/jsx"; import { Floating } from "@/styled-system/patterns"; import { getInfo } from "@/utils/info"; -import { Search } from "../Search/Search"; -import { SidebarToggle } from "../Sidebar/SidebarToggle"; -import { getServerSidebarState } from "../Sidebar/server"; -import { Title } from "../components/Title"; -import { Toolbar } from "../components/Toolbar"; -import styles from "../navigation.module.css"; +import styles from "./navigation.module.css"; -export async function Top() { +import { MemberActions } from "./MemberActions"; +import { SidebarToggle } from "./NavigationPane/SidebarToggle"; +import { getServerSidebarState } from "./NavigationPane/server"; +import { Search } from "./Search/Search"; +import { Title } from "./Title"; + +export async function DesktopCommandBar() { const { title } = await getInfo(); const initialSidebarState = await getServerSidebarState(); @@ -35,7 +36,7 @@ export async function Top() { - + ); diff --git a/web/src/components/site/Navigation/components/Toolbar.tsx b/web/src/components/site/Navigation/MemberActions.tsx similarity index 83% rename from web/src/components/site/Navigation/components/Toolbar.tsx rename to web/src/components/site/Navigation/MemberActions.tsx index 54352e32b..2a0d008d6 100644 --- a/web/src/components/site/Navigation/components/Toolbar.tsx +++ b/web/src/components/site/Navigation/MemberActions.tsx @@ -10,14 +10,14 @@ import { Account } from "@/api/openapi-schema"; import { NotificationsMenu } from "@/components/notifications/NotificationsMenu"; import { HStack } from "@/styled-system/jsx"; -import { AccountMenu } from "../AccountMenu/AccountMenu"; -import { ComposeAnchor } from "../Anchors/Compose"; +import { AccountMenu } from "./AccountMenu/AccountMenu"; +import { ComposeAnchor } from "./Anchors/Compose"; type Props = { session: Account | undefined; }; -export function Toolbar({ session }: Props) { +export function MemberActions({ session }: Props) { const account = useSession(session); return ( diff --git a/web/src/components/site/Navigation/Navpill/Navpill.tsx b/web/src/components/site/Navigation/MobileCommandBar/MobileCommandBar.tsx similarity index 94% rename from web/src/components/site/Navigation/Navpill/Navpill.tsx rename to web/src/components/site/Navigation/MobileCommandBar/MobileCommandBar.tsx index a2c28f9dd..d0bde622b 100644 --- a/web/src/components/site/Navigation/Navpill/Navpill.tsx +++ b/web/src/components/site/Navigation/MobileCommandBar/MobileCommandBar.tsx @@ -21,10 +21,10 @@ import { SettingsAnchor } from "../Anchors/Settings"; import { ContentNavigationList } from "../ContentNavigationList/ContentNavigationList"; import { Search } from "../Search/Search"; -import { useNavpill } from "./useNavpill"; +import { useMobileCommandBar } from "./useMobileCommandBar"; -export function Navpill() { - const { isExpanded, onExpand, onClose, account } = useNavpill(); +export function MobileCommandBar() { + const { isExpanded, onExpand, onClose, account } = useMobileCommandBar(); return ( ) { const showLeftBar = await getServerSidebarState(); return ( @@ -40,19 +48,18 @@ export async function Navigation({ children }: PropsWithChildren) { className={styles["navgrid"]} pointerEvents="none" > - + - + - {/* RIGHT BAR NOT DONE YET */} - {/* */} + {contextpane} - + diff --git a/web/src/components/site/Navigation/Left/Left.tsx b/web/src/components/site/Navigation/NavigationPane/NavigationPane.tsx similarity index 93% rename from web/src/components/site/Navigation/Left/Left.tsx rename to web/src/components/site/Navigation/NavigationPane/NavigationPane.tsx index ce94555c7..3c520bfc8 100644 --- a/web/src/components/site/Navigation/Left/Left.tsx +++ b/web/src/components/site/Navigation/NavigationPane/NavigationPane.tsx @@ -5,7 +5,7 @@ import { Floating } from "@/styled-system/patterns"; import { ContentNavigationList } from "../ContentNavigationList/ContentNavigationList"; -export function Left() { +export function NavigationPane() { return ( -

Threadbase

-

Southclaws

- - - -

sidebar stuff

-

sidebar stuff

-

sidebar stuff

-

sidebar stuff

-

sidebar stuff

-

sidebar stuff

-

sidebar stuff

-

sidebar stuff

-

sidebar stuff

-

sidebar stuff

- - ); -} diff --git a/web/src/components/site/Navigation/components/Title.tsx b/web/src/components/site/Navigation/Title.tsx similarity index 100% rename from web/src/components/site/Navigation/components/Title.tsx rename to web/src/components/site/Navigation/Title.tsx diff --git a/web/src/components/site/Navigation/navigation.module.css b/web/src/components/site/Navigation/navigation.module.css index e50c7e9f1..f9db7f3ea 100644 --- a/web/src/components/site/Navigation/navigation.module.css +++ b/web/src/components/site/Navigation/navigation.module.css @@ -20,8 +20,6 @@ --grid-col-padding-inner: var(--spacing-3); --grid-col-padding-inner-right: 0px; - --navgrid-right-bar-display: none; - min-height: 100dvh; } @@ -69,6 +67,10 @@ display: none; } +.rightbar { + display: none; +} + .navpill { display: block; grid-area: navpill; @@ -143,22 +145,45 @@ padding: 15px; } + .rightbar { + opacity: 0; + display: block; + grid-area: rightbar; + overflow: hidden; + + /* NOTE: This maintains the shadow bleed despite the overflow hidden prop. */ + margin: -15px; + padding: 15px; + } + .navigation__container[data-leftbar-shown="false"] .leftbar { opacity: 0; pointer-events: none; /* NOTE: Doesn't work properly on initial page load, causes the sidebar to flicker visible and play the animation, need a way to not do this soon. */ - /* animation: fadeOut 0.2s ease-in-out; */ + /* animation: fadeOutLeft 0.2s ease-in-out; */ } .navigation__container[data-leftbar-shown="true"] .leftbar { opacity: 1; pointer-events: all; - animation: fadeIn 0.2s ease-in-out; + animation: fadeInLeft 0.2s ease-in-out; } - @keyframes fadeIn { + .navigation__container[data-leftbar-shown="false"] .rightbar { + opacity: 0; + pointer-events: none; + } + + .navigation__container[data-leftbar-shown="true"] .rightbar { + opacity: 1; + pointer-events: all; + + animation: fadeInRight 0.2s ease-in-out; + } + + @keyframes fadeInLeft { from { opacity: 0; transform: translateX(-10px); @@ -168,7 +193,7 @@ transform: translateX(0px); } } - @keyframes fadeOut { + @keyframes fadeOutLeft { from { opacity: 1; transform: translateX(0px); @@ -179,18 +204,25 @@ } } - .rightbar { - display: var(--navgrid-right-bar-display); - grid-area: rightbar; - - /* TODO: Remove this when the right is actually used */ - pointer-events: none; - - overflow: hidden; - - /* NOTE: This maintains the shadow bleed despite the overflow hidden prop. */ - margin: -15px; - padding: 15px; + @keyframes fadeInRight { + from { + opacity: 0; + transform: translateX(10px); + } + to { + opacity: 1; + transform: translateX(0px); + } + } + @keyframes fadeOutRight { + from { + opacity: 1; + transform: translateX(0px); + } + to { + opacity: 0; + transform: translateX(10px); + } } .navpill { @@ -222,6 +254,11 @@ .navigation__container[data-leftbar-shown="false"] .main { grid-column: leftbar / main; } + + /* Hide the context pane when the screen is at "tablet" size */ + .rightbar { + display: none; + } } .navigation__container *::-webkit-scrollbar { diff --git a/web/src/components/ui/link-button.tsx b/web/src/components/ui/link-button.tsx index fb371901b..f41b6b88b 100644 --- a/web/src/components/ui/link-button.tsx +++ b/web/src/components/ui/link-button.tsx @@ -23,7 +23,9 @@ export function LinkButton({ const cn = cx(button(vp), css(stripped)); - const isExternal = !href.toString().startsWith("/"); + const isExternal = !( + href.toString().startsWith("/") || href.toString().startsWith("#") + ); const target = isExternal ? "_blank" : undefined; diff --git a/web/src/components/ui/table.tsx b/web/src/components/ui/table.tsx index 32878db73..1ed8afe5a 100644 --- a/web/src/components/ui/table.tsx +++ b/web/src/components/ui/table.tsx @@ -1,27 +1,53 @@ -'use client' - -import { ark } from '@ark-ui/react/factory' -import type { ComponentProps } from 'react' -import { styled } from 'styled-system/jsx' -import { table } from 'styled-system/recipes' -import { createStyleContext } from '@/utils/create-style-context' - -const { withProvider, withContext } = createStyleContext(table) - -export const Root = withProvider(styled(ark.table), 'root') -export const Body = withContext(styled(ark.tbody), 'body') -export const Caption = withContext(styled(ark.caption), 'caption') -export const Cell = withContext(styled(ark.td), 'cell') -export const Footer = withContext(styled(ark.tfoot), 'footer') -export const Head = withContext(styled(ark.thead), 'head') -export const Header = withContext(styled(ark.th), 'header') -export const Row = withContext(styled(ark.tr), 'row') - -export interface RootProps extends ComponentProps {} -export interface BodyProps extends ComponentProps {} -export interface CaptionProps extends ComponentProps {} -export interface CellProps extends ComponentProps {} -export interface FooterProps extends ComponentProps {} -export interface HeadProps extends ComponentProps {} -export interface HeaderProps extends ComponentProps {} -export interface RowProps extends ComponentProps {} +"use client"; + +import type { Assign, PolymorphicProps } from "@ark-ui/react"; +import { ark } from "@ark-ui/react/factory"; +import { type TableVariantProps, table } from "styled-system/recipes"; + +import type { HTMLStyledProps } from "@/styled-system/types"; +import { createStyleContext } from "@/utils/create-style-context"; + +const { withProvider, withContext } = createStyleContext(table); + +export interface RootProps + extends Assign, PolymorphicProps>, + TableVariantProps {} +export const Root = withProvider( + ark.table, + "root", +); + +export const Body = withContext< + HTMLTableSectionElement, + Assign, PolymorphicProps> +>(ark.tbody, "body"); + +export const Caption = withContext< + HTMLTableCaptionElement, + Assign, PolymorphicProps> +>(ark.caption, "caption"); + +export const Cell = withContext< + HTMLTableCellElement, + Assign, PolymorphicProps> +>(ark.td, "cell"); + +export const Foot = withContext< + HTMLTableSectionElement, + Assign, PolymorphicProps> +>(ark.tfoot, "footer"); + +export const Head = withContext< + HTMLTableSectionElement, + Assign, PolymorphicProps> +>(ark.thead, "head"); + +export const Header = withContext< + HTMLTableCellElement, + Assign, PolymorphicProps> +>(ark.th, "header"); + +export const Row = withContext< + HTMLTableRowElement, + Assign, PolymorphicProps> +>(ark.tr, "row"); diff --git a/web/src/layouts/Default.tsx b/web/src/layouts/Default.tsx index 9ca6b2c41..5fd45c015 100644 --- a/web/src/layouts/Default.tsx +++ b/web/src/layouts/Default.tsx @@ -1,10 +1,17 @@ -import { PropsWithChildren } from "react"; +import { PropsWithChildren, ReactNode } from "react"; import { Navigation } from "src/components/site/Navigation/Navigation"; import { Box, Flex, styled } from "@/styled-system/jsx"; -export async function Default(props: PropsWithChildren) { +type Props = { + contextpane: ReactNode; +}; + +export async function Default({ + contextpane, + children, +}: PropsWithChildren) { return ( - + - {props.children} + {children} diff --git a/web/src/recipes/table.ts b/web/src/recipes/table.ts new file mode 100644 index 000000000..a9cd43cab --- /dev/null +++ b/web/src/recipes/table.ts @@ -0,0 +1,102 @@ +import { defineSlotRecipe } from "@pandacss/dev"; + +export const table = defineSlotRecipe({ + className: "table", + slots: ["root", "body", "cell", "footer", "head", "header", "row", "caption"], + base: { + root: { + captionSide: "bottom", + width: "full", + }, + body: { + "& tr:last-child": { + borderBottomWidth: "0", + }, + }, + caption: { + color: "fg.subtle", + }, + cell: { + verticalAlign: "middle", + }, + footer: { + fontWeight: "medium", + borderTopWidth: "1px", + "& tr:last-child": { + borderBottomWidth: "0", + }, + }, + header: { + color: "fg.muted", + fontWeight: "medium", + textAlign: "left", + verticalAlign: "middle", + }, + row: { + borderBottomWidth: "1px", + transitionDuration: "normal", + transitionProperty: "background, color", + transitionTimingFunction: "default", + }, + }, + defaultVariants: { + size: "md", + variant: "plain", + }, + variants: { + variant: { + outline: { + root: { + borderWidth: "1px", + }, + head: { + bg: "bg.subtle", + }, + }, + plain: { + row: { + _hover: { + bg: "bg.subtle", + }, + _selected: { + bg: "bg.muted", + }, + }, + }, + }, + size: { + sm: { + root: { + textStyle: "xs", + }, + caption: { + mt: "1", + }, + cell: { + height: "8", + px: "2", + }, + header: { + height: "11", + px: "3", + }, + }, + md: { + root: { + textStyle: "sm", + }, + caption: { + mt: "4", + }, + cell: { + height: "14", + px: "4", + }, + header: { + height: "11", + px: "4", + }, + }, + }, + }, +}); diff --git a/web/src/screens/site/RootContextPane.tsx b/web/src/screens/site/RootContextPane.tsx new file mode 100644 index 000000000..fb8c66ba8 --- /dev/null +++ b/web/src/screens/site/RootContextPane.tsx @@ -0,0 +1,32 @@ +import Image from "next/image"; + +import { Heading } from "@/components/ui/heading"; +import { css } from "@/styled-system/css"; +import { HStack, LStack } from "@/styled-system/jsx"; +import { getIconURL } from "@/utils/icon"; +import { getInfo } from "@/utils/info"; + +export async function RootContextPane() { + const info = await getInfo(); + const iconURL = getIconURL("512x512"); + + return ( + + + {info.title} + + Icon + + +

{info.description}

+
+ ); +} diff --git a/web/src/screens/thread/ThreadScreen/ThreadScreenContextPane.tsx b/web/src/screens/thread/ThreadScreen/ThreadScreenContextPane.tsx new file mode 100644 index 000000000..9c7ddb823 --- /dev/null +++ b/web/src/screens/thread/ThreadScreen/ThreadScreenContextPane.tsx @@ -0,0 +1,126 @@ +"use client"; + +import { formatDate } from "date-fns"; +import { + CalendarIcon, + HandHeartIcon, + PencilLineIcon, + TagIcon, + UsersIcon, +} from "lucide-react"; + +import { MemberBadge } from "@/components/member/MemberBadge/MemberBadge"; +import { Unready } from "@/components/site/Unready"; +import { Heading } from "@/components/ui/heading"; +import * as Table from "@/components/ui/table"; +import { cva } from "@/styled-system/css"; +import { HStack, LStack, styled } from "@/styled-system/jsx"; +import { button } from "@/styled-system/recipes"; + +import { Props, useThreadScreen } from "./useThreadScreen"; + +const valueStyles = cva({ + base: {}, + defaultVariants: { + style: "base", + }, + variants: { + style: { + base: {}, + numeric: { + fontVariant: "tabular-nums", + fontFamily: "mono", + }, + }, + }, +}); + +export function ThreadScreenContextPane(props: Props) { + const { ready, error, form, isEditing, isEmpty, resetKey, data, handlers } = + useThreadScreen(props); + if (!ready) { + return ; + } + + const { thread } = data; + + const tableData = [ + { + label: "ID", + icon: TagIcon, + value: thread.id, + style: "numeric" as const, + }, + { + label: "author", + icon: PencilLineIcon, + value: ( + + ), + }, + { + label: "started", + icon: CalendarIcon, + value: formatDate(thread.createdAt, "MMM d, yyyy"), + }, + { + label: "replies", + icon: UsersIcon, + value: `${thread.reply_status.replies}`, + }, + { + label: "participating", + icon: HandHeartIcon, + value: thread.reply_status.replied ? "Yes" : "No", + }, + ]; + + return ( + + {thread.title} + {thread.description} + + + + {tableData.map((item) => ( + + + + + {item.label} + + + + {item.value} + + + ))} + + + + + + scroll to top + + + + ); +} diff --git a/web/styled-system/recipes/index.d.ts b/web/styled-system/recipes/index.d.ts index 586cf080f..6d4a31131 100644 --- a/web/styled-system/recipes/index.d.ts +++ b/web/styled-system/recipes/index.d.ts @@ -37,7 +37,6 @@ export * from './menu'; export * from './number-input'; export * from './pagination'; export * from './pin-input'; -export * from './popover'; export * from './progress'; export * from './radio-button-group'; export * from './radio-group'; @@ -53,6 +52,7 @@ export * from './tabs'; export * from './tags-input'; export * from './toast'; export * from './toggle-group'; -export * from './qr-code'; export * from './tooltip'; +export * from './qr-code'; +export * from './popover'; export * from './tree-view'; \ No newline at end of file diff --git a/web/styled-system/recipes/index.mjs b/web/styled-system/recipes/index.mjs index 8c4688af9..b39291ac6 100644 --- a/web/styled-system/recipes/index.mjs +++ b/web/styled-system/recipes/index.mjs @@ -36,7 +36,6 @@ export * from './menu.mjs'; export * from './number-input.mjs'; export * from './pagination.mjs'; export * from './pin-input.mjs'; -export * from './popover.mjs'; export * from './progress.mjs'; export * from './radio-button-group.mjs'; export * from './radio-group.mjs'; @@ -52,6 +51,7 @@ export * from './tabs.mjs'; export * from './tags-input.mjs'; export * from './toast.mjs'; export * from './toggle-group.mjs'; -export * from './qr-code.mjs'; export * from './tooltip.mjs'; +export * from './qr-code.mjs'; +export * from './popover.mjs'; export * from './tree-view.mjs'; \ No newline at end of file diff --git a/web/styled-system/recipes/table.d.ts b/web/styled-system/recipes/table.d.ts index 34eb2ec72..5f0971662 100644 --- a/web/styled-system/recipes/table.d.ts +++ b/web/styled-system/recipes/table.d.ts @@ -23,7 +23,7 @@ export type TableVariantProps = { export interface TableRecipe { __type: TableVariantProps - (props?: TableVariantProps): Pretty> + (props?: TableVariantProps): Pretty> raw: (props?: TableVariantProps) => TableVariantProps variantMap: TableVariantMap variantKeys: Array diff --git a/web/styled-system/recipes/table.mjs b/web/styled-system/recipes/table.mjs index 510f3ace4..b34b0137d 100644 --- a/web/styled-system/recipes/table.mjs +++ b/web/styled-system/recipes/table.mjs @@ -68,6 +68,38 @@ const tableSlotNames = [ "row", "table__row" ], + [ + "caption", + "table__caption" + ], + [ + "root", + "table__root" + ], + [ + "body", + "table__body" + ], + [ + "cell", + "table__cell" + ], + [ + "footer", + "table__footer" + ], + [ + "head", + "table__head" + ], + [ + "header", + "table__header" + ], + [ + "row", + "table__row" + ], [ "caption", "table__caption"