@mercury-fx/ui 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/dist/components/actions/Button/Button.d.ts +17 -0
  4. package/dist/components/actions/Button/index.d.ts +1 -0
  5. package/dist/components/actions/IconButton/IconButton.d.ts +24 -0
  6. package/dist/components/actions/IconButton/index.d.ts +1 -0
  7. package/dist/components/actions/Link/Link.d.ts +26 -0
  8. package/dist/components/actions/Link/index.d.ts +1 -0
  9. package/dist/components/data-display/Avatar/Avatar.d.ts +8 -0
  10. package/dist/components/data-display/Avatar/index.d.ts +1 -0
  11. package/dist/components/data-display/Badge/Badge.d.ts +8 -0
  12. package/dist/components/data-display/Badge/index.d.ts +1 -0
  13. package/dist/components/data-display/Blockquote/Blockquote.d.ts +18 -0
  14. package/dist/components/data-display/Blockquote/index.d.ts +1 -0
  15. package/dist/components/data-display/Card/Card.d.ts +9 -0
  16. package/dist/components/data-display/Card/index.d.ts +1 -0
  17. package/dist/components/data-display/Chart/Chart.d.ts +41 -0
  18. package/dist/components/data-display/Chart/index.d.ts +1 -0
  19. package/dist/components/data-display/Checklist/Checklist.d.ts +14 -0
  20. package/dist/components/data-display/Checklist/index.d.ts +1 -0
  21. package/dist/components/data-display/Chip/Chip.d.ts +13 -0
  22. package/dist/components/data-display/Chip/index.d.ts +1 -0
  23. package/dist/components/data-display/Code/Code.d.ts +22 -0
  24. package/dist/components/data-display/Code/index.d.ts +1 -0
  25. package/dist/components/data-display/DataList/DataList.d.ts +27 -0
  26. package/dist/components/data-display/DataList/index.d.ts +1 -0
  27. package/dist/components/data-display/Kbd/Kbd.d.ts +14 -0
  28. package/dist/components/data-display/Kbd/index.d.ts +1 -0
  29. package/dist/components/data-display/ListRow/ListRow.d.ts +16 -0
  30. package/dist/components/data-display/ListRow/index.d.ts +1 -0
  31. package/dist/components/data-display/Stat/Stat.d.ts +16 -0
  32. package/dist/components/data-display/Stat/index.d.ts +1 -0
  33. package/dist/components/data-display/Table/Table.d.ts +14 -0
  34. package/dist/components/data-display/Table/index.d.ts +1 -0
  35. package/dist/components/data-display/Tag/Tag.d.ts +9 -0
  36. package/dist/components/data-display/Tag/index.d.ts +1 -0
  37. package/dist/components/feedback/Alert/Alert.d.ts +11 -0
  38. package/dist/components/feedback/Alert/index.d.ts +1 -0
  39. package/dist/components/feedback/Callout/Callout.d.ts +26 -0
  40. package/dist/components/feedback/Callout/index.d.ts +1 -0
  41. package/dist/components/feedback/PasswordStrength/PasswordStrength.d.ts +13 -0
  42. package/dist/components/feedback/PasswordStrength/index.d.ts +1 -0
  43. package/dist/components/feedback/Progress/Progress.d.ts +9 -0
  44. package/dist/components/feedback/Progress/index.d.ts +1 -0
  45. package/dist/components/feedback/Skeleton/Skeleton.d.ts +19 -0
  46. package/dist/components/feedback/Skeleton/index.d.ts +1 -0
  47. package/dist/components/feedback/Spinner/Spinner.d.ts +18 -0
  48. package/dist/components/feedback/Spinner/index.d.ts +1 -0
  49. package/dist/components/foundations/Divider/Divider.d.ts +11 -0
  50. package/dist/components/foundations/Divider/index.d.ts +1 -0
  51. package/dist/components/foundations/Heading/Heading.d.ts +26 -0
  52. package/dist/components/foundations/Heading/index.d.ts +1 -0
  53. package/dist/components/foundations/Icon/Icon.d.ts +9 -0
  54. package/dist/components/foundations/Icon/index.d.ts +1 -0
  55. package/dist/components/foundations/Separator/Separator.d.ts +20 -0
  56. package/dist/components/foundations/Separator/index.d.ts +1 -0
  57. package/dist/components/foundations/Text/Text.d.ts +19 -0
  58. package/dist/components/foundations/Text/index.d.ts +1 -0
  59. package/dist/components/inputs/AuthCode/AuthCode.d.ts +10 -0
  60. package/dist/components/inputs/AuthCode/index.d.ts +1 -0
  61. package/dist/components/inputs/Calendar/Calendar.d.ts +24 -0
  62. package/dist/components/inputs/Calendar/index.d.ts +1 -0
  63. package/dist/components/inputs/DateField/DateField.d.ts +25 -0
  64. package/dist/components/inputs/DateField/index.d.ts +1 -0
  65. package/dist/components/inputs/Input/Input.d.ts +9 -0
  66. package/dist/components/inputs/Input/index.d.ts +1 -0
  67. package/dist/components/inputs/Label/Label.d.ts +20 -0
  68. package/dist/components/inputs/Label/index.d.ts +1 -0
  69. package/dist/components/inputs/MoneyInput/MoneyInput.d.ts +12 -0
  70. package/dist/components/inputs/MoneyInput/index.d.ts +1 -0
  71. package/dist/components/inputs/Search/Search.d.ts +7 -0
  72. package/dist/components/inputs/Search/index.d.ts +1 -0
  73. package/dist/components/inputs/Select/Select.d.ts +14 -0
  74. package/dist/components/inputs/Select/index.d.ts +1 -0
  75. package/dist/components/inputs/Textarea/Textarea.d.ts +9 -0
  76. package/dist/components/inputs/Textarea/index.d.ts +1 -0
  77. package/dist/components/layout/AspectRatio/AspectRatio.d.ts +14 -0
  78. package/dist/components/layout/AspectRatio/index.d.ts +1 -0
  79. package/dist/components/layout/AuthLayout/AuthLayout.d.ts +30 -0
  80. package/dist/components/layout/AuthLayout/index.d.ts +1 -0
  81. package/dist/components/layout/Box/Box.d.ts +35 -0
  82. package/dist/components/layout/Box/index.d.ts +1 -0
  83. package/dist/components/layout/Center/Center.d.ts +13 -0
  84. package/dist/components/layout/Center/index.d.ts +1 -0
  85. package/dist/components/layout/Cluster/Cluster.d.ts +18 -0
  86. package/dist/components/layout/Cluster/index.d.ts +1 -0
  87. package/dist/components/layout/Collapsible/Collapsible.d.ts +26 -0
  88. package/dist/components/layout/Collapsible/index.d.ts +1 -0
  89. package/dist/components/layout/Container/Container.d.ts +19 -0
  90. package/dist/components/layout/Container/index.d.ts +1 -0
  91. package/dist/components/layout/Flex/Flex.d.ts +24 -0
  92. package/dist/components/layout/Flex/index.d.ts +1 -0
  93. package/dist/components/layout/Grid/Grid.d.ts +26 -0
  94. package/dist/components/layout/Grid/index.d.ts +1 -0
  95. package/dist/components/layout/GridItem/GridItem.d.ts +19 -0
  96. package/dist/components/layout/GridItem/index.d.ts +1 -0
  97. package/dist/components/layout/ScrollArea/ScrollArea.d.ts +22 -0
  98. package/dist/components/layout/ScrollArea/index.d.ts +1 -0
  99. package/dist/components/layout/Section/Section.d.ts +18 -0
  100. package/dist/components/layout/Section/index.d.ts +1 -0
  101. package/dist/components/layout/Sidebar/Sidebar.d.ts +21 -0
  102. package/dist/components/layout/Sidebar/index.d.ts +1 -0
  103. package/dist/components/layout/Spacer/Spacer.d.ts +15 -0
  104. package/dist/components/layout/Spacer/index.d.ts +1 -0
  105. package/dist/components/layout/Stack/Stack.d.ts +20 -0
  106. package/dist/components/layout/Stack/index.d.ts +1 -0
  107. package/dist/components/layout/scales.d.ts +20 -0
  108. package/dist/components/navigation/Accordion/Accordion.d.ts +17 -0
  109. package/dist/components/navigation/Accordion/index.d.ts +1 -0
  110. package/dist/components/navigation/Menubar/Menubar.d.ts +53 -0
  111. package/dist/components/navigation/Menubar/index.d.ts +1 -0
  112. package/dist/components/navigation/Pagination/Pagination.d.ts +14 -0
  113. package/dist/components/navigation/Pagination/index.d.ts +1 -0
  114. package/dist/components/navigation/TabNav/TabNav.d.ts +38 -0
  115. package/dist/components/navigation/TabNav/index.d.ts +1 -0
  116. package/dist/components/navigation/Tabs/Tabs.d.ts +12 -0
  117. package/dist/components/navigation/Tabs/index.d.ts +1 -0
  118. package/dist/components/overlay/AlertDialog/AlertDialog.d.ts +33 -0
  119. package/dist/components/overlay/AlertDialog/index.d.ts +1 -0
  120. package/dist/components/overlay/ContextMenu/ContextMenu.d.ts +40 -0
  121. package/dist/components/overlay/ContextMenu/index.d.ts +1 -0
  122. package/dist/components/overlay/Dialog/Dialog.d.ts +33 -0
  123. package/dist/components/overlay/Dialog/index.d.ts +1 -0
  124. package/dist/components/overlay/Dropdown/Dropdown.d.ts +48 -0
  125. package/dist/components/overlay/Dropdown/index.d.ts +1 -0
  126. package/dist/components/overlay/HoverCard/HoverCard.d.ts +35 -0
  127. package/dist/components/overlay/HoverCard/index.d.ts +1 -0
  128. package/dist/components/overlay/LinkPreview/LinkPreview.d.ts +33 -0
  129. package/dist/components/overlay/LinkPreview/index.d.ts +1 -0
  130. package/dist/components/overlay/Modal/Modal.d.ts +10 -0
  131. package/dist/components/overlay/Modal/index.d.ts +1 -0
  132. package/dist/components/overlay/Popover/Popover.d.ts +35 -0
  133. package/dist/components/overlay/Popover/index.d.ts +1 -0
  134. package/dist/components/overlay/Tooltip/Tooltip.d.ts +6 -0
  135. package/dist/components/overlay/Tooltip/index.d.ts +1 -0
  136. package/dist/components/overlay/_overlay/Portal.d.ts +14 -0
  137. package/dist/components/selection/Checkbox/Checkbox.d.ts +12 -0
  138. package/dist/components/selection/Checkbox/index.d.ts +1 -0
  139. package/dist/components/selection/CheckboxCards/CheckboxCards.d.ts +20 -0
  140. package/dist/components/selection/CheckboxCards/index.d.ts +1 -0
  141. package/dist/components/selection/CheckboxGroup/CheckboxGroup.d.ts +17 -0
  142. package/dist/components/selection/CheckboxGroup/index.d.ts +1 -0
  143. package/dist/components/selection/Radio/Radio.d.ts +11 -0
  144. package/dist/components/selection/Radio/index.d.ts +1 -0
  145. package/dist/components/selection/RadioCards/RadioCards.d.ts +20 -0
  146. package/dist/components/selection/RadioCards/index.d.ts +1 -0
  147. package/dist/components/selection/RadioGroup/RadioGroup.d.ts +18 -0
  148. package/dist/components/selection/RadioGroup/index.d.ts +1 -0
  149. package/dist/components/selection/Segmented/Segmented.d.ts +13 -0
  150. package/dist/components/selection/Segmented/index.d.ts +1 -0
  151. package/dist/components/selection/Slider/Slider.d.ts +13 -0
  152. package/dist/components/selection/Slider/index.d.ts +1 -0
  153. package/dist/components/selection/Switch/Switch.d.ts +10 -0
  154. package/dist/components/selection/Switch/index.d.ts +1 -0
  155. package/dist/components/selection/Toggle/Toggle.d.ts +36 -0
  156. package/dist/components/selection/Toggle/index.d.ts +1 -0
  157. package/dist/index.d.ts +93 -0
  158. package/dist/mercury-ui.css +1 -0
  159. package/dist/mercury-ui.js +4049 -0
  160. package/package.json +58 -0
  161. package/src/styles/additions.css +1030 -0
  162. package/src/styles/fonts/DMMono-Italic.woff2 +0 -0
  163. package/src/styles/fonts/DMMono-Light.woff2 +0 -0
  164. package/src/styles/fonts/DMMono-LightItalic.woff2 +0 -0
  165. package/src/styles/fonts/DMMono-Medium.woff2 +0 -0
  166. package/src/styles/fonts/DMMono-MediumItalic.woff2 +0 -0
  167. package/src/styles/fonts/DMMono-Regular.woff2 +0 -0
  168. package/src/styles/fonts/DMSans-Bold.woff2 +0 -0
  169. package/src/styles/fonts/DMSans-BoldItalic.woff2 +0 -0
  170. package/src/styles/fonts/DMSans-Italic.woff2 +0 -0
  171. package/src/styles/fonts/DMSans-Medium.woff2 +0 -0
  172. package/src/styles/fonts/DMSans-MediumItalic.woff2 +0 -0
  173. package/src/styles/fonts/DMSans-Regular.woff2 +0 -0
  174. package/src/styles/fonts/DMSerifDisplay-Italic.woff2 +0 -0
  175. package/src/styles/fonts/DMSerifDisplay-Regular.woff2 +0 -0
  176. package/src/styles/index.css +5 -0
  177. package/src/styles/layout.css +55 -0
  178. package/src/styles/mercury.css +676 -0
  179. package/src/styles/tokens.css +438 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jonnify <mercury@jonnify.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # @mercury-fx/ui
2
+
3
+ The **Mercury** design system's React component library — token-driven,
4
+ presentational components styled through enum props (`variant` / `size` / `tone`).
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ npm i @mercury-fx/ui
10
+ npm i react react-dom # peer dependencies
11
+ ```
12
+
13
+ [`@mercury-fx/core`](https://www.npmjs.com/package/@mercury-fx/core) comes along
14
+ transitively.
15
+
16
+ ## Use
17
+
18
+ ```tsx
19
+ import "@mercury-fx/ui/styles.css"; // required — components are class-driven
20
+ import { Button, Card } from "@mercury-fx/ui";
21
+
22
+ export function App() {
23
+ return (
24
+ <Card>
25
+ <Button variant="primary">Ship it</Button>
26
+ </Card>
27
+ );
28
+ }
29
+ ```
30
+
31
+ ### Styles
32
+
33
+ Components carry no inline CSS — import the bundle once at your app root:
34
+
35
+ ```ts
36
+ import "@mercury-fx/ui/styles.css"; // the full component CSS
37
+ import "@mercury-fx/ui/tokens.css"; // …or just the design tokens
38
+ ```
39
+
40
+ A `dark-theme` class on any ancestor flips every token.
41
+
42
+ ## License
43
+
44
+ MIT
@@ -0,0 +1,17 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from "react";
2
+ export type ButtonVariant = "primary" | "secondary" | "outline" | "ghost" | "destructive" | "inverse";
3
+ export type ButtonSize = "sm" | "md" | "lg";
4
+ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type"> {
5
+ variant?: ButtonVariant;
6
+ size?: ButtonSize;
7
+ /** Swap the label for a spinner and disable interaction. */
8
+ loading?: boolean;
9
+ /** Stretch to the container width. */
10
+ fullWidth?: boolean;
11
+ /** Element rendered before the label (usually an `<Icon />`). */
12
+ leading?: ReactNode;
13
+ /** Element rendered after the label. */
14
+ trailing?: ReactNode;
15
+ type?: "button" | "submit" | "reset";
16
+ }
17
+ export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1 @@
1
+ export * from "./Button";
@@ -0,0 +1,24 @@
1
+ import type { ButtonHTMLAttributes } from "react";
2
+ import type { IconName } from "../../foundations/Icon";
3
+ export type IconButtonVariant = "primary" | "secondary" | "outline" | "ghost" | "destructive";
4
+ export type IconButtonSize = "sm" | "md" | "lg";
5
+ export type IconButtonShape = "circle" | "square";
6
+ export interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type"> {
7
+ /** The icon glyph name (from the `Icon` set). */
8
+ icon: IconName;
9
+ /** Required accessible name — there is no visible text. Becomes `aria-label` + `title`. */
10
+ label: string;
11
+ variant?: IconButtonVariant;
12
+ size?: IconButtonSize;
13
+ /** Mercury icon buttons are fully round by default. */
14
+ shape?: IconButtonShape;
15
+ type?: "button" | "submit" | "reset";
16
+ }
17
+ /**
18
+ * IconButton — a square/round button carrying only an icon. It reuses the Button token
19
+ * surface (`.mx-btn--<variant>`) for fill/ink and adds the `.mx-icon-btn` square-box
20
+ * geometry; `shape="circle"` is `--radius-full`. The required `label` becomes the
21
+ * `aria-label` (icon-only controls need an accessible name).
22
+ */
23
+ export declare const IconButton: import("react").ForwardRefExoticComponent<IconButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
24
+ export default IconButton;
@@ -0,0 +1 @@
1
+ export * from "./IconButton";
@@ -0,0 +1,26 @@
1
+ import type { MouseEvent, ReactNode } from "react";
2
+ export type LinkSize = "sm" | "md";
3
+ /**
4
+ * Link — the inline text affordance used across forms and flows:
5
+ * "Forgot password?", "Create an account", "Back to sign in", "Resend code".
6
+ * Renders an <a> when `href` is set, otherwise a <button> — so the same brand
7
+ * affordance covers both navigation and in-app actions. Presentational; the
8
+ * caller owns the navigation or click.
9
+ */
10
+ export interface LinkProps {
11
+ href?: string;
12
+ onClick?: (e: MouseEvent) => void;
13
+ disabled?: boolean;
14
+ size?: LinkSize;
15
+ /** Muted (tertiary) colour instead of the brand colour. */
16
+ muted?: boolean;
17
+ leading?: ReactNode;
18
+ trailing?: ReactNode;
19
+ type?: "button" | "submit" | "reset";
20
+ target?: string;
21
+ rel?: string;
22
+ className?: string;
23
+ children?: ReactNode;
24
+ "aria-label"?: string;
25
+ }
26
+ export declare function Link({ href, onClick, disabled, size, muted, leading, trailing, type, target, rel, className, children, "aria-label": ariaLabel, }: LinkProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Link";
@@ -0,0 +1,8 @@
1
+ export type AvatarStatus = "positive" | "caution" | "negative" | "info";
2
+ export interface AvatarProps {
3
+ name?: string;
4
+ src?: string;
5
+ size?: number;
6
+ status?: AvatarStatus;
7
+ }
8
+ export declare function Avatar({ name, src, size, status }: AvatarProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Avatar";
@@ -0,0 +1,8 @@
1
+ import type { ReactNode } from "react";
2
+ export type BadgeVariant = "brand" | "negative" | "positive" | "caution" | "info";
3
+ export interface BadgeProps {
4
+ children: ReactNode;
5
+ variant?: BadgeVariant;
6
+ size?: "sm" | "md" | "lg";
7
+ }
8
+ export declare function Badge({ children, variant, size }: BadgeProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Badge";
@@ -0,0 +1,18 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type BlockquoteSize = "sm" | "md" | "lg";
3
+ export interface BlockquoteProps extends Omit<HTMLAttributes<HTMLQuoteElement>, "cite"> {
4
+ children?: ReactNode;
5
+ size?: BlockquoteSize;
6
+ /** Colour of the leading rule + attribution ink, from an accent ramp (rule `--<ramp>-9`, ink `--<ramp>-11`). */
7
+ accent?: "iris" | "indigo" | "green" | "orange" | "plum" | "red";
8
+ /** Attribution line, rendered below in DM Mono. */
9
+ cite?: ReactNode;
10
+ }
11
+ /**
12
+ * Blockquote — a quotation set off by a leading rule, in secondary ink with an
13
+ * optional attribution line (DM Mono). The rule is `--border-strong` by default;
14
+ * an `accent` recolours the rule (`--<ramp>-9`) and the attribution (`--<ramp>-11`).
15
+ * Styled through `.mx-blockquote` token classes — no inline ink.
16
+ */
17
+ export declare function Blockquote({ children, size, accent, cite, className, ...rest }: BlockquoteProps): import("react").JSX.Element;
18
+ export default Blockquote;
@@ -0,0 +1 @@
1
+ export * from "./Blockquote";
@@ -0,0 +1,9 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
3
+ variant?: "flat" | "raised" | "floating";
4
+ padding?: number | string;
5
+ title?: ReactNode;
6
+ actions?: ReactNode;
7
+ children?: ReactNode;
8
+ }
9
+ export declare function Card({ variant, padding, title, actions, className, style, children, ...rest }: CardProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Card";
@@ -0,0 +1,41 @@
1
+ export interface ChartSeries {
2
+ /** Precomputed line path ("M.. L.."). */
3
+ d: string;
4
+ /** Optional precomputed, closed area path (filled with the gradient). */
5
+ area?: string;
6
+ /** A token color expression, e.g. "rgb(var(--iris-9))". */
7
+ stroke: string;
8
+ /** Gradient id to fill the area with. */
9
+ fillId?: string;
10
+ width?: number;
11
+ dashed?: boolean;
12
+ }
13
+ export interface ChartMarker {
14
+ /** y in viewBox units — a full-width threshold line (e.g. a zero/loss boundary). */
15
+ y: number;
16
+ dashed?: boolean;
17
+ }
18
+ export interface ChartProps {
19
+ /** e.g. "0 0 1000 300". */
20
+ viewBox: string;
21
+ series: ChartSeries[];
22
+ /** Horizontal grid-line y positions (viewBox units). */
23
+ gridY?: number[];
24
+ /** Vertical grid-line x positions (viewBox units). */
25
+ gridX?: number[];
26
+ /** Labels down the left rail (top → bottom). */
27
+ yTicks?: string[];
28
+ /** Labels along the bottom rail (left → right). */
29
+ xTicks?: string[];
30
+ /** Linear gradients (top → transparent) referenced by series.fillId. */
31
+ gradients?: {
32
+ id: string;
33
+ stroke: string;
34
+ }[];
35
+ /** Full-width threshold markers (e.g. the zero line). */
36
+ markers?: ChartMarker[];
37
+ /** CSS height of the chart box. */
38
+ height?: number | string;
39
+ ariaLabel?: string;
40
+ }
41
+ export declare function Chart({ viewBox, series, gridY, gridX, yTicks, xTicks, gradients, markers, height, ariaLabel, }: ChartProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Chart";
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Checklist — a list of requirements with met / unmet markers. Used for
4
+ * password rules, onboarding steps, or any "criteria satisfied" UI.
5
+ */
6
+ export interface ChecklistItem {
7
+ label: ReactNode;
8
+ met: boolean;
9
+ }
10
+ export interface ChecklistProps {
11
+ items: ChecklistItem[];
12
+ className?: string;
13
+ }
14
+ export declare function Checklist({ items, className }: ChecklistProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Checklist";
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from "react";
2
+ export type ChipVariant = "neutral" | "brand" | "positive" | "negative" | "caution" | "info" | "discovery";
3
+ export interface ChipProps {
4
+ children: ReactNode;
5
+ variant?: ChipVariant;
6
+ size?: "sm" | "md" | "lg";
7
+ selected?: boolean;
8
+ leading?: ReactNode;
9
+ onRemove?: () => void;
10
+ onClick?: () => void;
11
+ className?: string;
12
+ }
13
+ export declare function Chip({ children, variant, size, selected, leading, onRemove, onClick, className }: ChipProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Chip";
@@ -0,0 +1,22 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type CodeVariant = "soft" | "solid" | "outline" | "ghost";
3
+ export type CodeSize = "sm" | "md" | "lg";
4
+ export interface CodeProps extends HTMLAttributes<HTMLElement> {
5
+ children?: ReactNode;
6
+ /** Surface treatment. Default `soft`. */
7
+ variant?: CodeVariant;
8
+ /** Type size + inline padding. Default `md`. */
9
+ size?: CodeSize;
10
+ /** Accent ramp — tints soft/outline/ghost and recolours solid (`--<ramp>-9` / `--<ramp>-11`). */
11
+ accent?: "iris" | "indigo" | "green" | "orange" | "plum" | "red";
12
+ /** Render as a multi-line block (`<pre>`) instead of inline (`<code>`). Default `false`. */
13
+ block?: boolean;
14
+ }
15
+ /**
16
+ * Code — inline (or block) monospace code in DM Mono on a tinted surface. Inline
17
+ * renders `<code>`; `block` renders a scrollable `<pre>`. `variant` picks the
18
+ * surface (soft/solid/outline/ghost); `accent` re-skins it from a ramp. Styled
19
+ * through `.mx-code` token classes — no inline ink.
20
+ */
21
+ export declare function Code({ children, variant, size, accent, block, className, ...rest }: CodeProps): import("react").JSX.Element;
22
+ export default Code;
@@ -0,0 +1 @@
1
+ export * from "./Code";
@@ -0,0 +1,27 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type DataListOrientation = "horizontal" | "vertical";
3
+ export type DataListSize = "sm" | "md" | "lg";
4
+ export interface DataListEntry {
5
+ /** The term — rendered in the `<dt>`. */
6
+ label: ReactNode;
7
+ /** The description — rendered in the `<dd>`. */
8
+ value: ReactNode;
9
+ }
10
+ export interface DataListProps extends Omit<HTMLAttributes<HTMLDListElement>, "children"> {
11
+ /** The term/description pairs. */
12
+ items: DataListEntry[];
13
+ /** Lay each pair side-by-side (`horizontal`) or stacked (`vertical`). Default `horizontal`. */
14
+ orientation?: DataListOrientation;
15
+ /** Type size + row gap. Default `md`. */
16
+ size?: DataListSize;
17
+ /** Label-column width in the horizontal layout (number → px). Default `140`. */
18
+ labelWidth?: number;
19
+ }
20
+ /**
21
+ * DataList — key/value pairs as a semantic `<dl>`: account fields, transaction
22
+ * metadata, settings summaries. `horizontal` lays each term beside its value in a
23
+ * fixed `labelWidth` column; `vertical` stacks them. Styled through `.mx-datalist`
24
+ * token classes — no inline ink.
25
+ */
26
+ export declare function DataList({ items, orientation, size, labelWidth, className, ...rest }: DataListProps): import("react").JSX.Element;
27
+ export default DataList;
@@ -0,0 +1 @@
1
+ export * from "./DataList";
@@ -0,0 +1,14 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type KbdSize = "sm" | "md" | "lg";
3
+ export interface KbdProps extends HTMLAttributes<HTMLElement> {
4
+ children?: ReactNode;
5
+ /** Cap size. Default `md`. */
6
+ size?: KbdSize;
7
+ }
8
+ /**
9
+ * Kbd — a keyboard keycap in DM Mono on a raised surface with a subtle bottom
10
+ * edge. Reach for it to mark a key a user presses (`⌘`, `Esc`, `K`); compose
11
+ * several for a shortcut. Styled through `.mx-kbd` token classes — no inline ink.
12
+ */
13
+ export declare function Kbd({ children, size, className, ...rest }: KbdProps): import("react").JSX.Element;
14
+ export default Kbd;
@@ -0,0 +1 @@
1
+ export * from "./Kbd";
@@ -0,0 +1,16 @@
1
+ import type { HTMLAttributes, MouseEventHandler, ReactNode } from "react";
2
+ export interface ListRowProps extends Omit<HTMLAttributes<HTMLElement>, "onClick"> {
3
+ /** The primary text (required). */
4
+ label: ReactNode;
5
+ /** A leading glyph/avatar slot — drive with a real <Icon /> / <Avatar />. */
6
+ leading?: ReactNode;
7
+ /** Secondary text below `label` (the "meta"/subtitle). */
8
+ description?: ReactNode;
9
+ /** Trailing value text, right-aligned — e.g. a settings value or an amount. */
10
+ value?: ReactNode;
11
+ /** A trailing affordance after `value` (a chevron / action). */
12
+ trailing?: ReactNode;
13
+ /** When present, the row is interactive (rendered as a <button>); else a non-interactive <div>. */
14
+ onClick?: MouseEventHandler<HTMLElement>;
15
+ }
16
+ export declare function ListRow({ label, leading, description, value, trailing, onClick, className, ...rest }: ListRowProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./ListRow";
@@ -0,0 +1,16 @@
1
+ import type { ReactNode } from "react";
2
+ export type StatTone = "neutral" | "positive" | "negative" | "caution" | "brand" | "info";
3
+ export interface StatProps {
4
+ label: string;
5
+ /** Formatted by the caller (renders in DM Mono via .mx-stat__value). */
6
+ value: ReactNode;
7
+ /** Optional delta chip, e.g. "+30.3%". */
8
+ delta?: ReactNode;
9
+ deltaTone?: StatTone;
10
+ /** Sub-caption under the value. */
11
+ hint?: ReactNode;
12
+ /** Optional leading icon. */
13
+ leading?: ReactNode;
14
+ align?: "left" | "center";
15
+ }
16
+ export declare function Stat({ label, value, delta, deltaTone, hint, leading, align }: StatProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Stat";
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from "react";
2
+ export interface Column<Row> {
3
+ key: string;
4
+ label: ReactNode;
5
+ align?: "left" | "right";
6
+ render?: (row: Row) => ReactNode;
7
+ }
8
+ export interface TableProps<Row> {
9
+ columns: Column<Row>[];
10
+ data: Row[];
11
+ striped?: boolean;
12
+ getRowKey?: (row: Row, index: number) => string | number;
13
+ }
14
+ export declare function Table<Row extends Record<string, unknown>>({ columns, data, striped, getRowKey }: TableProps<Row>): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Table";
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from "react";
2
+ import type { ChipVariant } from "../Chip/index.js";
3
+ export interface TagProps {
4
+ children: ReactNode;
5
+ tone?: ChipVariant;
6
+ dot?: boolean;
7
+ size?: "sm" | "md" | "lg";
8
+ }
9
+ export declare function Tag({ children, tone, dot, size }: TagProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Tag";
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from "react";
2
+ export type AlertTone = "info" | "success" | "warning" | "danger";
3
+ export interface AlertProps {
4
+ tone?: AlertTone;
5
+ title?: ReactNode;
6
+ children?: ReactNode;
7
+ dismissible?: boolean;
8
+ onDismiss?: () => void;
9
+ actions?: ReactNode;
10
+ }
11
+ export declare function Alert({ tone, title, children, dismissible, onDismiss, actions }: AlertProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Alert";
@@ -0,0 +1,26 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ import type { IconName } from "../../foundations/Icon";
3
+ export type CalloutIntent = "info" | "brand" | "positive" | "caution" | "negative" | "discovery";
4
+ export type CalloutVariant = "soft" | "surface" | "outline";
5
+ export type CalloutSize = "sm" | "md" | "lg";
6
+ export interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
7
+ /** Optional bold lead line above the body. */
8
+ title?: ReactNode;
9
+ /** Tone family — resolves to the semantic token families (canon §6). Default `info`. */
10
+ intent?: CalloutIntent;
11
+ /** Fill/border treatment. Default `soft`. */
12
+ variant?: CalloutVariant;
13
+ size?: CalloutSize;
14
+ /** Override the default intent glyph; pass `null` to hide the icon. */
15
+ icon?: IconName | null;
16
+ children?: ReactNode;
17
+ }
18
+ /**
19
+ * Callout — an inline emphasis block: a note set into the reading flow on a tinted,
20
+ * surface, or outlined card. Distinct from Alert (a status message, the result of an
21
+ * action) — Callout is editorial emphasis. `intent` selects the semantic token family;
22
+ * `variant` selects the fill/border treatment. Styled through `.mx-callout` token
23
+ * classes — no inline ink.
24
+ */
25
+ export declare function Callout({ title, intent, variant, size, icon, className, children, ...rest }: CalloutProps): import("react").JSX.Element;
26
+ export default Callout;
@@ -0,0 +1 @@
1
+ export * from "./Callout";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * PasswordStrength — a labelled strength meter for a password field.
3
+ * Presentational: pass a `score` (0–100), `label` and `variant` — the
4
+ * `passwordStrength()` helper in @mercury-fx/effector computes all three.
5
+ */
6
+ export type StrengthVariant = "negative" | "caution" | "positive";
7
+ export interface PasswordStrengthProps {
8
+ score: number;
9
+ label?: string;
10
+ variant?: StrengthVariant;
11
+ className?: string;
12
+ }
13
+ export declare function PasswordStrength({ score, label, variant, className }: PasswordStrengthProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./PasswordStrength";
@@ -0,0 +1,9 @@
1
+ export type ProgressVariant = "brand" | "positive" | "negative" | "caution" | "info";
2
+ export interface ProgressProps {
3
+ value?: number;
4
+ max?: number;
5
+ variant?: ProgressVariant;
6
+ size?: "sm" | "md" | "lg";
7
+ indeterminate?: boolean;
8
+ }
9
+ export declare function Progress({ value, max, variant, size, indeterminate }: ProgressProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Progress";
@@ -0,0 +1,19 @@
1
+ import type { HTMLAttributes } from "react";
2
+ export interface SkeletonProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children"> {
3
+ /** CSS width — number (px) or any length string. Default `100%`. */
4
+ width?: number | string;
5
+ /** CSS height — number (px) or string. Ignored when `circle`. Default `16`. */
6
+ height?: number | string;
7
+ /** Corner radius in px (ignored when `circle`). Default `6`. */
8
+ radius?: number;
9
+ /** Render a circle of diameter `width` (for avatars). */
10
+ circle?: boolean;
11
+ }
12
+ /**
13
+ * Skeleton — a pulsing placeholder that holds layout while content loads. The
14
+ * dimensions (`width`/`height`/`radius`/`circle`) are non-color inline styles; the
15
+ * surface (`--bg-tertiary`) and the 1.5s pulse live in `.mx-skeleton`. Decorative
16
+ * (`aria-hidden`) — announce the load with a sibling `Spinner`/live region.
17
+ */
18
+ export declare function Skeleton({ width, height, radius, circle, className, style, ...rest }: SkeletonProps): import("react").JSX.Element;
19
+ export default Skeleton;
@@ -0,0 +1 @@
1
+ export * from "./Skeleton";
@@ -0,0 +1,18 @@
1
+ import type { HTMLAttributes } from "react";
2
+ export type SpinnerSize = "sm" | "md" | "lg";
3
+ export interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children"> {
4
+ /** Named size or an explicit pixel diameter. Default `md`. */
5
+ size?: SpinnerSize | number;
6
+ /** Accent ramp for the moving arc (reads `--<ramp>-9`). Omit to inherit `currentColor` (e.g. inside a button). */
7
+ accent?: "iris" | "indigo" | "green" | "orange" | "plum" | "red";
8
+ /** Accessible label announced to screen readers. Default `Loading`. */
9
+ label?: string;
10
+ }
11
+ /**
12
+ * Spinner — an indeterminate loading indicator: a token-coloured ring on a 360°/1s
13
+ * spin. With no `accent` the arc inherits `currentColor` (so it reads correctly inside
14
+ * a button); an `accent` paints the arc from a ramp. Carries `role="status"` + the
15
+ * `label` as its accessible name. Honours `prefers-reduced-motion`.
16
+ */
17
+ export declare function Spinner({ size, accent, label, className, style, ...rest }: SpinnerProps): import("react").JSX.Element;
18
+ export default Spinner;
@@ -0,0 +1 @@
1
+ export * from "./Spinner";
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Divider — a separator rule. With a `label` it becomes the "— or —" splitter
4
+ * used between a primary and an alternate action (e.g. email vs. SSO sign-in).
5
+ */
6
+ export interface DividerProps {
7
+ label?: ReactNode;
8
+ orientation?: "horizontal" | "vertical";
9
+ className?: string;
10
+ }
11
+ export declare function Divider({ label, orientation, className }: DividerProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from "./Divider";
@@ -0,0 +1,26 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type HeadingSize = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
3
+ export type HeadingWeight = "regular" | "medium" | "semibold" | "bold";
4
+ export type HeadingAlign = "left" | "center" | "right";
5
+ export type HeadingTag = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div";
6
+ export interface HeadingProps extends HTMLAttributes<HTMLElement> {
7
+ children?: ReactNode;
8
+ /** 1 (smallest) → 9 (display). Default 6. Maps onto the canon 18..72 type scale. */
9
+ size?: HeadingSize;
10
+ /** Type weight. Default `bold` (the canon heading weight). */
11
+ weight?: HeadingWeight;
12
+ align?: HeadingAlign;
13
+ /** Render tag. Defaults to a sensible h-level derived from `size`. */
14
+ as?: HeadingTag;
15
+ /** Ink from an accent ramp (reads `--<ramp>-11`). Overrides the default ink. */
16
+ accent?: "iris" | "indigo" | "green" | "orange" | "plum" | "red";
17
+ truncate?: boolean;
18
+ }
19
+ /**
20
+ * Heading — section titles across the Mercury type scale. The display sizes (5–9)
21
+ * ride DM Mono (`--font-secondary`), Mercury's technical display face; the small
22
+ * sizes (1–4) use DM Sans (`--font-primary`). Styled entirely through `.mx-heading`
23
+ * token classes — no inline ink.
24
+ */
25
+ export declare function Heading({ size, weight, align, as, accent, truncate, className, children, ...rest }: HeadingProps): import("react").JSX.Element;
26
+ export default Heading;
@@ -0,0 +1 @@
1
+ export * from "./Heading";
@@ -0,0 +1,9 @@
1
+ import type { ReactNode, SVGProps } from "react";
2
+ declare const ICONS: Record<string, ReactNode>;
3
+ export type IconName = keyof typeof ICONS;
4
+ export interface IconProps extends Omit<SVGProps<SVGSVGElement>, "name"> {
5
+ name: IconName;
6
+ size?: number;
7
+ }
8
+ export declare function Icon({ name, size, strokeWidth, ...rest }: IconProps): import("react").JSX.Element;
9
+ export {};