diff --git a/packages/core/package.json b/packages/core/package.json index a703da8..3e2a1c0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -59,7 +59,19 @@ "./listbox": { "solid": "./src/components/listbox/index.ts", "import": "./dist/components/listbox/index.js", "require": "./dist/components/listbox/index.cjs" }, "./dropdown-menu": { "solid": "./src/components/dropdown-menu/index.ts", "import": "./dist/components/dropdown-menu/index.js", "require": "./dist/components/dropdown-menu/index.cjs" }, "./context-menu": { "solid": "./src/components/context-menu/index.ts", "import": "./dist/components/context-menu/index.js", "require": "./dist/components/context-menu/index.cjs" }, - "./toast": { "solid": "./src/components/toast/index.ts", "import": "./dist/components/toast/index.js", "require": "./dist/components/toast/index.cjs" } + "./toast": { "solid": "./src/components/toast/index.ts", "import": "./dist/components/toast/index.js", "require": "./dist/components/toast/index.cjs" }, + "./tooltip": { "solid": "./src/components/tooltip/index.ts", "import": "./dist/components/tooltip/index.js", "require": "./dist/components/tooltip/index.cjs" }, + "./alert": { "solid": "./src/components/alert/index.ts", "import": "./dist/components/alert/index.js", "require": "./dist/components/alert/index.cjs" }, + "./badge": { "solid": "./src/components/badge/index.ts", "import": "./dist/components/badge/index.js", "require": "./dist/components/badge/index.cjs" }, + "./skeleton": { "solid": "./src/components/skeleton/index.ts", "import": "./dist/components/skeleton/index.js", "require": "./dist/components/skeleton/index.cjs" }, + "./popover": { "solid": "./src/components/popover/index.ts", "import": "./dist/components/popover/index.js", "require": "./dist/components/popover/index.cjs" }, + "./breadcrumbs": { "solid": "./src/components/breadcrumbs/index.ts", "import": "./dist/components/breadcrumbs/index.js", "require": "./dist/components/breadcrumbs/index.cjs" }, + "./link": { "solid": "./src/components/link/index.ts", "import": "./dist/components/link/index.js", "require": "./dist/components/link/index.cjs" }, + "./button": { "solid": "./src/components/button/index.ts", "import": "./dist/components/button/index.js", "require": "./dist/components/button/index.cjs" }, + "./hover-card": { "solid": "./src/components/hover-card/index.ts", "import": "./dist/components/hover-card/index.js", "require": "./dist/components/hover-card/index.cjs" }, + "./image": { "solid": "./src/components/image/index.ts", "import": "./dist/components/image/index.js", "require": "./dist/components/image/index.cjs" }, + "./meter": { "solid": "./src/components/meter/index.ts", "import": "./dist/components/meter/index.js", "require": "./dist/components/meter/index.cjs" }, + "./number-field": { "solid": "./src/components/number-field/index.ts", "import": "./dist/components/number-field/index.js", "require": "./dist/components/number-field/index.cjs" } }, "scripts": { "build": "tsdown", diff --git a/packages/core/src/components/alert/alert.tsx b/packages/core/src/components/alert/alert.tsx new file mode 100644 index 0000000..da9e6a4 --- /dev/null +++ b/packages/core/src/components/alert/alert.tsx @@ -0,0 +1,16 @@ +import type { JSX } from "solid-js"; +import { splitProps } from "solid-js"; + +export interface AlertProps extends JSX.HTMLAttributes { + children?: JSX.Element; +} + +/** An alert element that announces important messages to screen readers via role="alert". */ +export function Alert(props: AlertProps): JSX.Element { + const [local, rest] = splitProps(props, ["children"]); + return ( +
+ {local.children} +
+ ); +} diff --git a/packages/core/src/components/alert/index.ts b/packages/core/src/components/alert/index.ts new file mode 100644 index 0000000..74a66f0 --- /dev/null +++ b/packages/core/src/components/alert/index.ts @@ -0,0 +1,2 @@ +export { Alert } from "./alert"; +export type { AlertProps } from "./alert"; diff --git a/packages/core/src/components/badge/badge.tsx b/packages/core/src/components/badge/badge.tsx new file mode 100644 index 0000000..04015d9 --- /dev/null +++ b/packages/core/src/components/badge/badge.tsx @@ -0,0 +1,16 @@ +import type { JSX } from "solid-js"; +import { splitProps } from "solid-js"; + +export interface BadgeProps extends JSX.HTMLAttributes { + children?: JSX.Element; +} + +/** A status badge that announces its content to screen readers via role="status". */ +export function Badge(props: BadgeProps): JSX.Element { + const [local, rest] = splitProps(props, ["children"]); + return ( + + {local.children} + + ); +} diff --git a/packages/core/src/components/badge/index.ts b/packages/core/src/components/badge/index.ts new file mode 100644 index 0000000..5389c10 --- /dev/null +++ b/packages/core/src/components/badge/index.ts @@ -0,0 +1,2 @@ +export { Badge } from "./badge"; +export type { BadgeProps } from "./badge"; diff --git a/packages/core/src/components/breadcrumbs/breadcrumbs-item.tsx b/packages/core/src/components/breadcrumbs/breadcrumbs-item.tsx new file mode 100644 index 0000000..cd8ca83 --- /dev/null +++ b/packages/core/src/components/breadcrumbs/breadcrumbs-item.tsx @@ -0,0 +1,20 @@ +import type { JSX } from "solid-js"; +import { splitProps } from "solid-js"; + +/** Props for a breadcrumbs list item. */ +export interface BreadcrumbsItemProps extends JSX.LiHTMLAttributes { + /** When true, marks this item as the current page via aria-current="page". */ + current?: boolean | undefined; + children?: JSX.Element | undefined; +} + +/** A single item in the breadcrumbs trail. Renders as `
  • `. */ +export function BreadcrumbsItem(props: BreadcrumbsItemProps): JSX.Element { + const [local, rest] = splitProps(props, ["current", "children"]); + + return ( +
  • + {local.children} +
  • + ); +} diff --git a/packages/core/src/components/breadcrumbs/breadcrumbs-link.tsx b/packages/core/src/components/breadcrumbs/breadcrumbs-link.tsx new file mode 100644 index 0000000..d5e3b75 --- /dev/null +++ b/packages/core/src/components/breadcrumbs/breadcrumbs-link.tsx @@ -0,0 +1,20 @@ +import type { JSX } from "solid-js"; +import { splitProps } from "solid-js"; + +/** Props for a breadcrumbs link anchor element. */ +export interface BreadcrumbsLinkProps extends JSX.AnchorHTMLAttributes { + /** The URL the breadcrumb link navigates to. */ + href: string; + children?: JSX.Element | undefined; +} + +/** An anchor link inside a breadcrumbs item. */ +export function BreadcrumbsLink(props: BreadcrumbsLinkProps): JSX.Element { + const [local, rest] = splitProps(props, ["href", "children"]); + + return ( + + {local.children} + + ); +} diff --git a/packages/core/src/components/breadcrumbs/breadcrumbs-root.tsx b/packages/core/src/components/breadcrumbs/breadcrumbs-root.tsx new file mode 100644 index 0000000..983deca --- /dev/null +++ b/packages/core/src/components/breadcrumbs/breadcrumbs-root.tsx @@ -0,0 +1,23 @@ +import type { JSX } from "solid-js"; +import { splitProps } from "solid-js"; + +/** Props for the root breadcrumbs navigation container. */ +export interface BreadcrumbsRootProps extends JSX.HTMLAttributes { + /** Accessible label for the navigation landmark. @default "Breadcrumbs" */ + "aria-label"?: string | undefined; + children: JSX.Element; +} + +/** + * Root navigation container for breadcrumbs. + * Renders a `