@ngrok/mantle 0.68.7 → 0.69.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.
- package/README.md +10 -2
- package/dist/alert-dialog.d.ts +4 -4
- package/dist/{button-CX98GGHD.d.ts → button-BaNwe1ud.d.ts} +4 -4
- package/dist/button.d.ts +2 -2
- package/dist/checkbox.d.ts +1 -1
- package/dist/command.d.ts +3 -3
- package/dist/data-table.d.ts +1 -1
- package/dist/empty.d.ts +149 -0
- package/dist/empty.js +2 -0
- package/dist/empty.js.map +1 -0
- package/dist/hooks.d.ts +2 -2
- package/dist/{index-Cj2NX2Dg.d.ts → index-BCZ3y0yi.d.ts} +2 -2
- package/dist/{index-Bw97R9Kw.d.ts → index-DXuVn00J.d.ts} +4 -4
- package/dist/input.d.ts +1 -1
- package/dist/pagination.d.ts +1 -1
- package/dist/split-button.d.ts +1 -1
- package/dist/theme.d.ts +1 -1
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -48,8 +48,6 @@ Mantle ships runtime components from `@ngrok/mantle`, while build-time and serve
|
|
|
48
48
|
|
|
49
49
|
This keeps Vite/Shiki/parser dependencies out of frontend installs that only need Mantle's runtime UI package.
|
|
50
50
|
|
|
51
|
-
For a concrete service implementation, see [`apps/highlight-server`](../../apps/highlight-server/README.md), a Bun + Hono syntax-highlighting API that preloads Shiki and serves highlighted HTML for server-side use cases.
|
|
52
|
-
|
|
53
51
|
### Vite + MDX
|
|
54
52
|
|
|
55
53
|
```ts
|
|
@@ -70,6 +68,16 @@ const result = await highlighter.highlight({
|
|
|
70
68
|
});
|
|
71
69
|
```
|
|
72
70
|
|
|
71
|
+
## Scaffolding a New Component
|
|
72
|
+
|
|
73
|
+
If you're contributing a new mantle component and use [Claude Code](https://claude.com/claude-code), run the `/scaffold-component` slash command to scaffold one end-to-end (component files, package.json export, docs page, route, navigation entry, and changeset):
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
/scaffold-component <component-name>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
See [`.claude/commands/scaffold-component.md`](https://github.com/ngrok-oss/mantle/blob/main/.claude/commands/scaffold-component.md) for the full step-by-step reference — it's also useful if you'd rather scaffold by hand.
|
|
80
|
+
|
|
73
81
|
## Git Hooks
|
|
74
82
|
|
|
75
83
|
Pre-commit hooks run automatically via [husky](https://typicode.github.io/husky/) and [lint-staged](https://github.com/lint-staged/lint-staged). On every commit, staged files are formatted with oxfmt and linted with oxlint.
|
package/dist/alert-dialog.d.ts
CHANGED
|
@@ -149,7 +149,7 @@ declare const AlertDialog: {
|
|
|
149
149
|
readonly Action: _$react.ForwardRefExoticComponent<(Omit<_$react.ClassAttributes<HTMLButtonElement> & _$react.ButtonHTMLAttributes<HTMLButtonElement> & Partial<DeepNonNullable<_$class_variance_authority0.VariantProps<(props?: ({
|
|
150
150
|
appearance?: "filled" | "link" | "ghost" | "outlined" | null | undefined;
|
|
151
151
|
isLoading?: boolean | null | undefined;
|
|
152
|
-
priority?: "
|
|
152
|
+
priority?: "default" | "danger" | "neutral" | null | undefined;
|
|
153
153
|
} & _$class_variance_authority_types0.ClassProp) | undefined) => string>>> & {
|
|
154
154
|
icon?: ReactNode;
|
|
155
155
|
iconPlacement?: "start" | "end";
|
|
@@ -159,7 +159,7 @@ declare const AlertDialog: {
|
|
|
159
159
|
}, "ref"> | Omit<_$react.ClassAttributes<HTMLButtonElement> & _$react.ButtonHTMLAttributes<HTMLButtonElement> & Partial<DeepNonNullable<_$class_variance_authority0.VariantProps<(props?: ({
|
|
160
160
|
appearance?: "filled" | "link" | "ghost" | "outlined" | null | undefined;
|
|
161
161
|
isLoading?: boolean | null | undefined;
|
|
162
|
-
priority?: "
|
|
162
|
+
priority?: "default" | "danger" | "neutral" | null | undefined;
|
|
163
163
|
} & _$class_variance_authority_types0.ClassProp) | undefined) => string>>> & {
|
|
164
164
|
icon?: ReactNode;
|
|
165
165
|
iconPlacement?: "start" | "end";
|
|
@@ -206,7 +206,7 @@ declare const AlertDialog: {
|
|
|
206
206
|
readonly Cancel: _$react.ForwardRefExoticComponent<(Omit<_$react.ClassAttributes<HTMLButtonElement> & _$react.ButtonHTMLAttributes<HTMLButtonElement> & Partial<DeepNonNullable<_$class_variance_authority0.VariantProps<(props?: ({
|
|
207
207
|
appearance?: "filled" | "link" | "ghost" | "outlined" | null | undefined;
|
|
208
208
|
isLoading?: boolean | null | undefined;
|
|
209
|
-
priority?: "
|
|
209
|
+
priority?: "default" | "danger" | "neutral" | null | undefined;
|
|
210
210
|
} & _$class_variance_authority_types0.ClassProp) | undefined) => string>>> & {
|
|
211
211
|
icon?: ReactNode;
|
|
212
212
|
iconPlacement?: "start" | "end";
|
|
@@ -216,7 +216,7 @@ declare const AlertDialog: {
|
|
|
216
216
|
}, "ref"> | Omit<_$react.ClassAttributes<HTMLButtonElement> & _$react.ButtonHTMLAttributes<HTMLButtonElement> & Partial<DeepNonNullable<_$class_variance_authority0.VariantProps<(props?: ({
|
|
217
217
|
appearance?: "filled" | "link" | "ghost" | "outlined" | null | undefined;
|
|
218
218
|
isLoading?: boolean | null | undefined;
|
|
219
|
-
priority?: "
|
|
219
|
+
priority?: "default" | "danger" | "neutral" | null | undefined;
|
|
220
220
|
} & _$class_variance_authority_types0.ClassProp) | undefined) => string>>> & {
|
|
221
221
|
icon?: ReactNode;
|
|
222
222
|
iconPlacement?: "start" | "end";
|
|
@@ -9,7 +9,7 @@ import * as _$class_variance_authority_types0 from "class-variance-authority/typ
|
|
|
9
9
|
declare const buttonVariants: (props?: ({
|
|
10
10
|
appearance?: "filled" | "link" | "ghost" | "outlined" | null | undefined;
|
|
11
11
|
isLoading?: boolean | null | undefined;
|
|
12
|
-
priority?: "
|
|
12
|
+
priority?: "default" | "danger" | "neutral" | null | undefined;
|
|
13
13
|
} & _$class_variance_authority_types0.ClassProp) | undefined) => string;
|
|
14
14
|
type ButtonVariants = VariantProps$1<typeof buttonVariants>;
|
|
15
15
|
/**
|
|
@@ -93,7 +93,7 @@ type ButtonProps = ComponentProps<"button"> & ButtonVariants & {
|
|
|
93
93
|
declare const Button: _$react.ForwardRefExoticComponent<(Omit<_$react.ClassAttributes<HTMLButtonElement> & _$react.ButtonHTMLAttributes<HTMLButtonElement> & Partial<DeepNonNullable<_$class_variance_authority0.VariantProps<(props?: ({
|
|
94
94
|
appearance?: "filled" | "link" | "ghost" | "outlined" | null | undefined;
|
|
95
95
|
isLoading?: boolean | null | undefined;
|
|
96
|
-
priority?: "
|
|
96
|
+
priority?: "default" | "danger" | "neutral" | null | undefined;
|
|
97
97
|
} & _$class_variance_authority_types0.ClassProp) | undefined) => string>>> & {
|
|
98
98
|
/**
|
|
99
99
|
* An icon to render inside the button. If the `state` is `"pending"`, then
|
|
@@ -139,7 +139,7 @@ declare const Button: _$react.ForwardRefExoticComponent<(Omit<_$react.ClassAttri
|
|
|
139
139
|
}, "ref"> | Omit<_$react.ClassAttributes<HTMLButtonElement> & _$react.ButtonHTMLAttributes<HTMLButtonElement> & Partial<DeepNonNullable<_$class_variance_authority0.VariantProps<(props?: ({
|
|
140
140
|
appearance?: "filled" | "link" | "ghost" | "outlined" | null | undefined;
|
|
141
141
|
isLoading?: boolean | null | undefined;
|
|
142
|
-
priority?: "
|
|
142
|
+
priority?: "default" | "danger" | "neutral" | null | undefined;
|
|
143
143
|
} & _$class_variance_authority_types0.ClassProp) | undefined) => string>>> & {
|
|
144
144
|
/**
|
|
145
145
|
* An icon to render inside the button. If the `state` is `"pending"`, then
|
|
@@ -172,4 +172,4 @@ declare const Button: _$react.ForwardRefExoticComponent<(Omit<_$react.ClassAttri
|
|
|
172
172
|
}, "ref">) & _$react.RefAttributes<HTMLButtonElement>>;
|
|
173
173
|
//#endregion
|
|
174
174
|
export { ButtonProps as n, Button as t };
|
|
175
|
-
//# sourceMappingURL=button-
|
|
175
|
+
//# sourceMappingURL=button-BaNwe1ud.d.ts.map
|
package/dist/button.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { n as IconButtonProps, t as IconButton } from "./icon-button-gO-7F_MZ.js";
|
|
2
|
-
import { n as ButtonProps, t as Button } from "./button-
|
|
3
|
-
import { n as ButtonGroupProps, t as ButtonGroup } from "./index-
|
|
2
|
+
import { n as ButtonProps, t as Button } from "./button-BaNwe1ud.js";
|
|
3
|
+
import { n as ButtonGroupProps, t as ButtonGroup } from "./index-BCZ3y0yi.js";
|
|
4
4
|
export { Button, ButtonGroup, ButtonGroupProps, ButtonProps, IconButton, IconButtonProps };
|
package/dist/checkbox.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ type CheckedState = boolean | "indeterminate";
|
|
|
19
19
|
* </form>
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
|
-
declare const Checkbox: _$react.ForwardRefExoticComponent<Omit<Omit<_$react.DetailedHTMLProps<_$react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "
|
|
22
|
+
declare const Checkbox: _$react.ForwardRefExoticComponent<Omit<Omit<_$react.DetailedHTMLProps<_$react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "checked" | "type" | "defaultChecked"> & WithValidation & {
|
|
23
23
|
/**
|
|
24
24
|
* The controlled checked state of the checkbox. Must be used in conjunction with onChange.
|
|
25
25
|
*/
|
package/dist/command.d.ts
CHANGED
|
@@ -178,7 +178,7 @@ declare const Command: {
|
|
|
178
178
|
ref?: React.Ref<HTMLInputElement>;
|
|
179
179
|
} & {
|
|
180
180
|
asChild?: boolean;
|
|
181
|
-
}, "key" |
|
|
181
|
+
}, "key" | keyof _$react.InputHTMLAttributes<HTMLInputElement> | "asChild">, "type" | "value" | "onChange"> & {
|
|
182
182
|
value?: string;
|
|
183
183
|
onValueChange?: (search: string) => void;
|
|
184
184
|
} & _$react.RefAttributes<HTMLInputElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
@@ -239,7 +239,7 @@ declare const Command: {
|
|
|
239
239
|
ref?: React.Ref<HTMLDivElement>;
|
|
240
240
|
} & {
|
|
241
241
|
asChild?: boolean;
|
|
242
|
-
}, "key" | keyof _$react.HTMLAttributes<HTMLDivElement> | "asChild">, "
|
|
242
|
+
}, "key" | keyof _$react.HTMLAttributes<HTMLDivElement> | "asChild">, "value" | "heading"> & {
|
|
243
243
|
heading?: React.ReactNode;
|
|
244
244
|
value?: string;
|
|
245
245
|
forceMount?: boolean;
|
|
@@ -262,7 +262,7 @@ declare const Command: {
|
|
|
262
262
|
ref?: React.Ref<HTMLDivElement>;
|
|
263
263
|
} & {
|
|
264
264
|
asChild?: boolean;
|
|
265
|
-
}, "key" | keyof _$react.HTMLAttributes<HTMLDivElement> | "asChild">, "disabled" | "
|
|
265
|
+
}, "key" | keyof _$react.HTMLAttributes<HTMLDivElement> | "asChild">, "disabled" | "value" | "onSelect"> & {
|
|
266
266
|
disabled?: boolean;
|
|
267
267
|
onSelect?: (value: string) => void;
|
|
268
268
|
value?: string;
|
package/dist/data-table.d.ts
CHANGED
package/dist/empty.d.ts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { t as SvgAttributes } from "./types-yU-Byhue.js";
|
|
2
|
+
import { t as WithAsChild } from "./as-child-CRRsxi3Y.js";
|
|
3
|
+
import { ComponentProps, HTMLAttributes, ReactNode } from "react";
|
|
4
|
+
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/components/empty/empty.d.ts
|
|
7
|
+
type EmptyIconProps = Omit<SvgAttributes, "children"> & {
|
|
8
|
+
/**
|
|
9
|
+
* A single SVG icon element.
|
|
10
|
+
*/
|
|
11
|
+
svg: ReactNode;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Compound component for rendering empty states. Use with `Empty.Root`,
|
|
15
|
+
* `Empty.Icon`, `Empty.Title`, `Empty.Description`, and `Empty.Actions`.
|
|
16
|
+
*
|
|
17
|
+
* @see https://mantle.ngrok.com/components/empty
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* <Empty.Root>
|
|
22
|
+
* <Empty.Icon svg={<GhostIcon />} />
|
|
23
|
+
* <Empty.Title>No endpoints yet</Empty.Title>
|
|
24
|
+
* <Empty.Description>
|
|
25
|
+
* Create your first endpoint to get started.
|
|
26
|
+
* </Empty.Description>
|
|
27
|
+
* <Empty.Actions>
|
|
28
|
+
* <Button>Create endpoint</Button>
|
|
29
|
+
* </Empty.Actions>
|
|
30
|
+
* </Empty.Root>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
declare const Empty: {
|
|
34
|
+
/**
|
|
35
|
+
* The root container for an empty state. Centers content vertically and
|
|
36
|
+
* horizontally with consistent padding and max-width.
|
|
37
|
+
*
|
|
38
|
+
* @see https://mantle.ngrok.com/components/empty
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```tsx
|
|
42
|
+
* <Empty.Root>
|
|
43
|
+
* <Empty.Icon svg={<GhostIcon />} />
|
|
44
|
+
* <Empty.Title>No endpoints yet</Empty.Title>
|
|
45
|
+
* <Empty.Description>Create your first endpoint to get started.</Empty.Description>
|
|
46
|
+
* <Empty.Actions>
|
|
47
|
+
* <Button>Create endpoint</Button>
|
|
48
|
+
* </Empty.Actions>
|
|
49
|
+
* </Empty.Root>
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
readonly Root: {
|
|
53
|
+
({
|
|
54
|
+
children,
|
|
55
|
+
className,
|
|
56
|
+
...props
|
|
57
|
+
}: ComponentProps<"div">): _$react_jsx_runtime0.JSX.Element;
|
|
58
|
+
displayName: string;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Renders a large icon for the empty state. Pass a single SVG icon element
|
|
62
|
+
* via the `svg` prop.
|
|
63
|
+
*
|
|
64
|
+
* @see https://mantle.ngrok.com/components/empty
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```tsx
|
|
68
|
+
* <Empty.Icon svg={<GhostIcon />} />
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
readonly Icon: {
|
|
72
|
+
({
|
|
73
|
+
className,
|
|
74
|
+
svg,
|
|
75
|
+
...props
|
|
76
|
+
}: EmptyIconProps): _$react_jsx_runtime0.JSX.Element;
|
|
77
|
+
displayName: string;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* The heading text for the empty state. Renders as an `h3` by default.
|
|
81
|
+
* Use `asChild` to render as a different heading level.
|
|
82
|
+
*
|
|
83
|
+
* @see https://mantle.ngrok.com/components/empty
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```tsx
|
|
87
|
+
* <Empty.Title>No results found</Empty.Title>
|
|
88
|
+
*
|
|
89
|
+
* <Empty.Title asChild>
|
|
90
|
+
* <h2>No results found</h2>
|
|
91
|
+
* </Empty.Title>
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
readonly Title: {
|
|
95
|
+
({
|
|
96
|
+
asChild,
|
|
97
|
+
children,
|
|
98
|
+
className,
|
|
99
|
+
...props
|
|
100
|
+
}: HTMLAttributes<HTMLHeadingElement> & WithAsChild): _$react_jsx_runtime0.JSX.Element;
|
|
101
|
+
displayName: string;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Supporting descriptive text below the title. Renders as a `div` with
|
|
105
|
+
* `space-y-4` for multiple paragraphs. Use `asChild` to render as a
|
|
106
|
+
* different element.
|
|
107
|
+
*
|
|
108
|
+
* @see https://mantle.ngrok.com/components/empty
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```tsx
|
|
112
|
+
* <Empty.Description>
|
|
113
|
+
* <p>Please try again in a few minutes.</p>
|
|
114
|
+
* </Empty.Description>
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
readonly Description: {
|
|
118
|
+
({
|
|
119
|
+
asChild,
|
|
120
|
+
children,
|
|
121
|
+
className,
|
|
122
|
+
...props
|
|
123
|
+
}: ComponentProps<"div"> & WithAsChild): _$react_jsx_runtime0.JSX.Element;
|
|
124
|
+
displayName: string;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* A container for action buttons or links in the empty state.
|
|
128
|
+
*
|
|
129
|
+
* @see https://mantle.ngrok.com/components/empty
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```tsx
|
|
133
|
+
* <Empty.Actions>
|
|
134
|
+
* <Button>Clear filters</Button>
|
|
135
|
+
* </Empty.Actions>
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
readonly Actions: {
|
|
139
|
+
({
|
|
140
|
+
children,
|
|
141
|
+
className,
|
|
142
|
+
...props
|
|
143
|
+
}: ComponentProps<"div">): _$react_jsx_runtime0.JSX.Element;
|
|
144
|
+
displayName: string;
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
//#endregion
|
|
148
|
+
export { Empty };
|
|
149
|
+
//# sourceMappingURL=empty.d.ts.map
|
package/dist/empty.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./cx-D1HYnpvA.js";import{t}from"./svg-only-DnZldAY9.js";import{t as n}from"./slot-D_ZUrdEW.js";import{jsx as r}from"react/jsx-runtime";const i=({children:t,className:n,...i})=>r(`div`,{className:e(`mx-auto flex max-w-lg flex-col items-center py-14 text-center`,n),...i,children:t});i.displayName=`Empty`;const a=({className:n,svg:i,...a})=>r(t,{className:e(`mb-2 size-16 text-muted`,n),svg:i,...a});a.displayName=`EmptyIcon`;const o=({asChild:t,children:i,className:a,...o})=>r(t?n:`h3`,{className:e(`text-strong text-xl font-medium`,a),...o,children:i});o.displayName=`EmptyTitle`;const s=({asChild:t,children:i,className:a,...o})=>r(t?n:`div`,{className:e(`text-body mt-1 space-y-4 text-sm`,a),...o,children:i});s.displayName=`EmptyDescription`;const c=({children:t,className:n,...i})=>r(`div`,{className:e(`mt-4 flex items-center gap-2`,n),...i,children:t});c.displayName=`EmptyActions`;const l={Root:i,Icon:a,Title:o,Description:s,Actions:c};export{l as Empty};
|
|
2
|
+
//# sourceMappingURL=empty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty.js","names":[],"sources":["../src/components/empty/empty.tsx"],"sourcesContent":["import type { ComponentProps, HTMLAttributes, ReactNode } from \"react\";\nimport type { WithAsChild } from \"../../types/as-child.js\";\nimport { cx } from \"../../utils/cx/cx.js\";\nimport { SvgOnly } from \"../icon/svg-only.js\";\nimport type { SvgAttributes } from \"../icon/types.js\";\nimport { Slot } from \"../slot/index.js\";\n\n/**\n * The root container for an empty state. Centers content horizontally\n * with consistent vertical padding and max-width.\n *\n * @see https://mantle.ngrok.com/components/empty\n *\n * @example\n * ```tsx\n * <Empty.Root>\n * <Empty.Icon svg={<GhostIcon />} />\n * <Empty.Title>No results found</Empty.Title>\n * <Empty.Description>Try adjusting your search or filters.</Empty.Description>\n * <Empty.Actions>\n * <Button>Clear filters</Button>\n * </Empty.Actions>\n * </Empty.Root>\n * ```\n */\nconst Root = ({ children, className, ...props }: ComponentProps<\"div\">) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cx(\"mx-auto flex max-w-lg flex-col items-center py-14 text-center\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\nRoot.displayName = \"Empty\";\n\ntype EmptyIconProps = Omit<SvgAttributes, \"children\"> & {\n\t/**\n\t * A single SVG icon element.\n\t */\n\tsvg: ReactNode;\n};\n\n/**\n * Renders a large icon for the empty state. Pass a single SVG icon element\n * via the `svg` prop (e.g. from `@phosphor-icons/react`).\n *\n * @see https://mantle.ngrok.com/components/empty\n *\n * @example\n * ```tsx\n * <Empty.Icon svg={<GhostIcon />} />\n * ```\n */\nconst Icon = ({ className, svg, ...props }: EmptyIconProps) => {\n\treturn <SvgOnly className={cx(\"mb-2 size-16 text-muted\", className)} svg={svg} {...props} />;\n};\nIcon.displayName = \"EmptyIcon\";\n\n/**\n * The heading text for the empty state. Renders as an `h3` by default. Use the\n * `asChild` prop to render as a different heading level (e.g. `h1`, `h2`).\n *\n * @see https://mantle.ngrok.com/components/empty\n *\n * @example\n * ```tsx\n * <Empty.Title>No results found</Empty.Title>\n *\n * <Empty.Title asChild>\n * <h2>No results found</h2>\n * </Empty.Title>\n * ```\n */\nconst Title = ({\n\tasChild,\n\tchildren,\n\tclassName,\n\t...props\n}: HTMLAttributes<HTMLHeadingElement> & WithAsChild) => {\n\tconst Comp = asChild ? Slot : \"h3\";\n\n\treturn (\n\t\t<Comp className={cx(\"text-strong text-xl font-medium\", className)} {...props}>\n\t\t\t{children}\n\t\t</Comp>\n\t);\n};\nTitle.displayName = \"EmptyTitle\";\n\n/**\n * Supporting descriptive text below the title. Renders as a `div` with\n * `space-y-4` so multiple paragraphs can be placed inside. Use the `asChild`\n * prop to render as a different element.\n *\n * @see https://mantle.ngrok.com/components/empty\n *\n * @example\n * ```tsx\n * <Empty.Description>\n * <p>Try adjusting your search or filters.</p>\n * </Empty.Description>\n *\n * <Empty.Description>\n * <p>Something went wrong.</p>\n * <p>Please try again in a few minutes.</p>\n * </Empty.Description>\n * ```\n */\nconst Description = ({\n\tasChild,\n\tchildren,\n\tclassName,\n\t...props\n}: ComponentProps<\"div\"> & WithAsChild) => {\n\tconst Comp = asChild ? Slot : \"div\";\n\n\treturn (\n\t\t<Comp className={cx(\"text-body mt-1 space-y-4 text-sm\", className)} {...props}>\n\t\t\t{children}\n\t\t</Comp>\n\t);\n};\nDescription.displayName = \"EmptyDescription\";\n\n/**\n * A container for action buttons or links in the empty state.\n *\n * @see https://mantle.ngrok.com/components/empty\n *\n * @example\n * ```tsx\n * <Empty.Actions>\n * <Button>Clear filters</Button>\n * <Button appearance=\"outlined\">Go back</Button>\n * </Empty.Actions>\n * ```\n */\nconst Actions = ({ children, className, ...props }: ComponentProps<\"div\">) => {\n\treturn (\n\t\t<div className={cx(\"mt-4 flex items-center gap-2\", className)} {...props}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\nActions.displayName = \"EmptyActions\";\n\n/**\n * Compound component for rendering empty states. Use with `Empty.Root`,\n * `Empty.Icon`, `Empty.Title`, `Empty.Description`, and `Empty.Actions`.\n *\n * @see https://mantle.ngrok.com/components/empty\n *\n * @example\n * ```tsx\n * <Empty.Root>\n * <Empty.Icon svg={<GhostIcon />} />\n * <Empty.Title>No endpoints yet</Empty.Title>\n * <Empty.Description>\n * Create your first endpoint to get started.\n * </Empty.Description>\n * <Empty.Actions>\n * <Button>Create endpoint</Button>\n * </Empty.Actions>\n * </Empty.Root>\n * ```\n */\nconst Empty = {\n\t/**\n\t * The root container for an empty state. Centers content vertically and\n\t * horizontally with consistent padding and max-width.\n\t *\n\t * @see https://mantle.ngrok.com/components/empty\n\t *\n\t * @example\n\t * ```tsx\n\t * <Empty.Root>\n\t * <Empty.Icon svg={<GhostIcon />} />\n\t * <Empty.Title>No endpoints yet</Empty.Title>\n\t * <Empty.Description>Create your first endpoint to get started.</Empty.Description>\n\t * <Empty.Actions>\n\t * <Button>Create endpoint</Button>\n\t * </Empty.Actions>\n\t * </Empty.Root>\n\t * ```\n\t */\n\tRoot,\n\t/**\n\t * Renders a large icon for the empty state. Pass a single SVG icon element\n\t * via the `svg` prop.\n\t *\n\t * @see https://mantle.ngrok.com/components/empty\n\t *\n\t * @example\n\t * ```tsx\n\t * <Empty.Icon svg={<GhostIcon />} />\n\t * ```\n\t */\n\tIcon,\n\t/**\n\t * The heading text for the empty state. Renders as an `h3` by default.\n\t * Use `asChild` to render as a different heading level.\n\t *\n\t * @see https://mantle.ngrok.com/components/empty\n\t *\n\t * @example\n\t * ```tsx\n\t * <Empty.Title>No results found</Empty.Title>\n\t *\n\t * <Empty.Title asChild>\n\t * <h2>No results found</h2>\n\t * </Empty.Title>\n\t * ```\n\t */\n\tTitle,\n\t/**\n\t * Supporting descriptive text below the title. Renders as a `div` with\n\t * `space-y-4` for multiple paragraphs. Use `asChild` to render as a\n\t * different element.\n\t *\n\t * @see https://mantle.ngrok.com/components/empty\n\t *\n\t * @example\n\t * ```tsx\n\t * <Empty.Description>\n\t * <p>Please try again in a few minutes.</p>\n\t * </Empty.Description>\n\t * ```\n\t */\n\tDescription,\n\t/**\n\t * A container for action buttons or links in the empty state.\n\t *\n\t * @see https://mantle.ngrok.com/components/empty\n\t *\n\t * @example\n\t * ```tsx\n\t * <Empty.Actions>\n\t * <Button>Clear filters</Button>\n\t * </Empty.Actions>\n\t * ```\n\t */\n\tActions,\n} as const;\n\nexport {\n\t//,\n\tEmpty,\n};\n"],"mappings":"0JAyBA,MAAM,GAAQ,CAAE,WAAU,YAAW,GAAG,KAEtC,EAAC,MAAD,CACC,UAAW,EAAG,gEAAiE,EAAU,CACzF,GAAI,EAEH,WACI,CAAA,CAGR,EAAK,YAAc,QAoBnB,MAAM,GAAQ,CAAE,YAAW,MAAK,GAAG,KAC3B,EAAC,EAAD,CAAS,UAAW,EAAG,0BAA2B,EAAU,CAAO,MAAK,GAAI,EAAS,CAAA,CAE7F,EAAK,YAAc,YAiBnB,MAAM,GAAS,CACd,UACA,WACA,YACA,GAAG,KAKF,EAHY,EAAU,EAAO,KAG7B,CAAM,UAAW,EAAG,kCAAmC,EAAU,CAAE,GAAI,EACrE,WACK,CAAA,CAGT,EAAM,YAAc,aAqBpB,MAAM,GAAe,CACpB,UACA,WACA,YACA,GAAG,KAKF,EAHY,EAAU,EAAO,MAG7B,CAAM,UAAW,EAAG,mCAAoC,EAAU,CAAE,GAAI,EACtE,WACK,CAAA,CAGT,EAAY,YAAc,mBAe1B,MAAM,GAAW,CAAE,WAAU,YAAW,GAAG,KAEzC,EAAC,MAAD,CAAK,UAAW,EAAG,+BAAgC,EAAU,CAAE,GAAI,EACjE,WACI,CAAA,CAGR,EAAQ,YAAc,eAsBtB,MAAM,EAAQ,CAmBb,OAYA,OAgBA,QAeA,cAaA,UACA"}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as MarginType, o as useComposedRefs } from "./in-view-DS0PgFGa.js";
|
|
2
|
-
import { RefObject,
|
|
2
|
+
import { RefObject, useEffect } from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/hooks/use-breakpoint.d.ts
|
|
5
5
|
/**
|
|
@@ -177,7 +177,7 @@ declare function useIsHydrated(): boolean;
|
|
|
177
177
|
/**
|
|
178
178
|
* useIsomorphicLayoutEffect is a hook that uses useLayoutEffect on the client and useEffect on the server.
|
|
179
179
|
*/
|
|
180
|
-
declare const useIsomorphicLayoutEffect: typeof
|
|
180
|
+
declare const useIsomorphicLayoutEffect: typeof useEffect;
|
|
181
181
|
//#endregion
|
|
182
182
|
//#region src/hooks/use-matches-media-query.d.ts
|
|
183
183
|
/**
|
|
@@ -5,7 +5,7 @@ import * as _$class_variance_authority_types0 from "class-variance-authority/typ
|
|
|
5
5
|
|
|
6
6
|
//#region src/components/button/button-group.d.ts
|
|
7
7
|
declare const buttonGroupVariants: (props?: ({
|
|
8
|
-
appearance?: "
|
|
8
|
+
appearance?: "panel" | "ghost" | "outlined" | null | undefined;
|
|
9
9
|
} & _$class_variance_authority_types0.ClassProp) | undefined) => string;
|
|
10
10
|
type ButtonGroupVariants = VariantProps<typeof buttonGroupVariants>;
|
|
11
11
|
type ButtonGroupProps = ComponentProps<"div"> & ButtonGroupVariants;
|
|
@@ -26,4 +26,4 @@ type ButtonGroupProps = ComponentProps<"div"> & ButtonGroupVariants;
|
|
|
26
26
|
declare const ButtonGroup: _$react.ForwardRefExoticComponent<Omit<ButtonGroupProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
27
27
|
//#endregion
|
|
28
28
|
export { ButtonGroupProps as n, ButtonGroup as t };
|
|
29
|
-
//# sourceMappingURL=index-
|
|
29
|
+
//# sourceMappingURL=index-BCZ3y0yi.d.ts.map
|
|
@@ -23,7 +23,7 @@ type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, "autoComplete" | "
|
|
|
23
23
|
* />
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
|
-
declare const Input: _$react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "
|
|
26
|
+
declare const Input: _$react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "autoComplete" | "type"> & WithAutoComplete & WithInputType & WithValidation & {
|
|
27
27
|
children?: _$react.ReactNode | undefined;
|
|
28
28
|
} & _$react.RefAttributes<HTMLInputElement>>;
|
|
29
29
|
type InputCaptureProps = Omit<InputHTMLAttributes<HTMLInputElement>, "autoComplete" | "type"> & BaseProps;
|
|
@@ -41,7 +41,7 @@ type InputCaptureProps = Omit<InputHTMLAttributes<HTMLInputElement>, "autoComple
|
|
|
41
41
|
* </Input>
|
|
42
42
|
* ```
|
|
43
43
|
*/
|
|
44
|
-
declare const InputCapture: _$react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "
|
|
44
|
+
declare const InputCapture: _$react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "autoComplete" | "type"> & WithAutoComplete & WithInputType & WithValidation & _$react.RefAttributes<HTMLInputElement>>;
|
|
45
45
|
//#endregion
|
|
46
46
|
//#region src/components/input/password-input.d.ts
|
|
47
47
|
type PasswordInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, "autoComplete" | "type"> & WithValidation & WithAutoComplete & {
|
|
@@ -70,7 +70,7 @@ type PasswordInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, "autoCompl
|
|
|
70
70
|
* />
|
|
71
71
|
* ```
|
|
72
72
|
*/
|
|
73
|
-
declare const PasswordInput: _$react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "
|
|
73
|
+
declare const PasswordInput: _$react.ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "autoComplete" | "type"> & WithValidation & WithAutoComplete & {
|
|
74
74
|
/**
|
|
75
75
|
* Callback for when the visibility of the password value changes.
|
|
76
76
|
*/
|
|
@@ -100,4 +100,4 @@ declare const PasswordInput: _$react.ForwardRefExoticComponent<Omit<InputHTMLAtt
|
|
|
100
100
|
declare function isInput(value: unknown): value is HTMLInputElement;
|
|
101
101
|
//#endregion
|
|
102
102
|
export { InputCapture as a, Input as i, PasswordInput as n, InputCaptureProps as o, PasswordInputProps as r, InputProps as s, isInput as t };
|
|
103
|
-
//# sourceMappingURL=index-
|
|
103
|
+
//# sourceMappingURL=index-DXuVn00J.d.ts.map
|
package/dist/input.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { a as WithInputType, i as WithAutoComplete, n as InputType, o as WithValidation, r as Validation, t as AutoComplete } from "./types-Cq6RWU7Q.js";
|
|
2
|
-
import { a as InputCapture, i as Input, n as PasswordInput, o as InputCaptureProps, r as PasswordInputProps, s as InputProps, t as isInput } from "./index-
|
|
2
|
+
import { a as InputCapture, i as Input, n as PasswordInput, o as InputCaptureProps, r as PasswordInputProps, s as InputProps, t as isInput } from "./index-DXuVn00J.js";
|
|
3
3
|
export { AutoComplete, Input, InputCapture, InputCaptureProps, InputProps, InputType, PasswordInput, PasswordInputProps, Validation, WithAutoComplete, WithInputType, WithValidation, isInput };
|
package/dist/pagination.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as WithAsChild } from "./as-child-CRRsxi3Y.js";
|
|
2
|
-
import { t as ButtonGroup } from "./index-
|
|
2
|
+
import { t as ButtonGroup } from "./index-BCZ3y0yi.js";
|
|
3
3
|
import { t as Select } from "./select-DJmjfGjt.js";
|
|
4
4
|
import * as _$react from "react";
|
|
5
5
|
import { ComponentProps } from "react";
|
package/dist/split-button.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as IconButton } from "./icon-button-gO-7F_MZ.js";
|
|
2
|
-
import { t as Button } from "./button-
|
|
2
|
+
import { t as Button } from "./button-BaNwe1ud.js";
|
|
3
3
|
import { t as DropdownMenu } from "./dropdown-menu-D6MiVSR-.js";
|
|
4
4
|
import * as _$react from "react";
|
|
5
5
|
import { ComponentProps, ReactNode } from "react";
|
package/dist/theme.d.ts
CHANGED
|
@@ -203,7 +203,7 @@ declare function useTheme(): ThemeProviderState;
|
|
|
203
203
|
*/
|
|
204
204
|
declare function readThemeFromHtmlElement(): {
|
|
205
205
|
appliedTheme: "dark" | "light" | "light-high-contrast" | "dark-high-contrast" | undefined;
|
|
206
|
-
theme: "dark" | "light" | "
|
|
206
|
+
theme: "dark" | "light" | "light-high-contrast" | "dark-high-contrast" | "system" | undefined;
|
|
207
207
|
};
|
|
208
208
|
/**
|
|
209
209
|
* If the theme is "system", it will resolve the theme based on the user's media query preferences, otherwise it will return the theme as is.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngrok/mantle",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.69.0",
|
|
4
4
|
"description": "mantle is ngrok's UI library and design system.",
|
|
5
5
|
"homepage": "https://mantle.ngrok.com",
|
|
6
6
|
"license": "MIT",
|
|
@@ -154,6 +154,11 @@
|
|
|
154
154
|
"types": "./dist/dropdown-menu.d.ts",
|
|
155
155
|
"import": "./dist/dropdown-menu.js"
|
|
156
156
|
},
|
|
157
|
+
"./empty": {
|
|
158
|
+
"@ngrok/src-live-types": "./src/components/empty/index.ts",
|
|
159
|
+
"types": "./dist/empty.d.ts",
|
|
160
|
+
"import": "./dist/empty.js"
|
|
161
|
+
},
|
|
157
162
|
"./flag": {
|
|
158
163
|
"@ngrok/src-live-types": "./src/components/flag/index.ts",
|
|
159
164
|
"types": "./dist/flag.d.ts",
|