cleanplate 0.1.11 → 0.2.1
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 +193 -60
- package/dist/components/accordion/Accordion.d.ts +23 -12
- package/dist/components/accordion/Accordion.d.ts.map +1 -1
- package/dist/components/accordion/index.d.ts +2 -1
- package/dist/components/accordion/index.d.ts.map +1 -1
- package/dist/components/app-shell/AppShell.d.ts +35 -3
- package/dist/components/app-shell/AppShell.d.ts.map +1 -1
- package/dist/components/app-shell/index.d.ts +2 -1
- package/dist/components/app-shell/index.d.ts.map +1 -1
- package/dist/components/bottom-sheet/BottomSheet.d.ts +17 -16
- package/dist/components/bottom-sheet/BottomSheet.d.ts.map +1 -1
- package/dist/components/bottom-sheet/index.d.ts +2 -1
- package/dist/components/bottom-sheet/index.d.ts.map +1 -1
- package/dist/components/breadcrumb/BreadCrumb.d.ts +26 -0
- package/dist/components/breadcrumb/BreadCrumb.d.ts.map +1 -0
- package/dist/components/breadcrumb/index.d.ts +3 -2
- package/dist/components/breadcrumb/index.d.ts.map +1 -1
- package/dist/components/footer/Footer.d.ts +21 -16
- package/dist/components/footer/Footer.d.ts.map +1 -1
- package/dist/components/footer/index.d.ts +2 -1
- package/dist/components/footer/index.d.ts.map +1 -1
- package/dist/components/header/Header.d.ts +32 -28
- package/dist/components/header/Header.d.ts.map +1 -1
- package/dist/components/header/index.d.ts +2 -1
- package/dist/components/header/index.d.ts.map +1 -1
- package/dist/components/icon/material-icon-names.d.ts +5 -5
- package/dist/components/icon/material-icon-names.d.ts.map +1 -1
- package/dist/components/menu-list/MenuList.d.ts +32 -22
- package/dist/components/menu-list/MenuList.d.ts.map +1 -1
- package/dist/components/menu-list/index.d.ts +2 -1
- package/dist/components/menu-list/index.d.ts.map +1 -1
- package/dist/components/page-header/PageHeader.d.ts +22 -3
- package/dist/components/page-header/PageHeader.d.ts.map +1 -1
- package/dist/components/page-header/index.d.ts +2 -1
- package/dist/components/page-header/index.d.ts.map +1 -1
- package/dist/components/toast/Toast.d.ts +20 -12
- package/dist/components/toast/Toast.d.ts.map +1 -1
- package/dist/components/toast/index.d.ts +2 -1
- package/dist/components/toast/index.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.es.css +1 -1
- package/dist/index.es.js +3 -3
- package/dist/index.js +3 -3
- package/docs/Accordion.md +125 -0
- package/docs/Alert.md +131 -0
- package/docs/Animated.md +101 -0
- package/docs/AppShell.md +145 -0
- package/docs/Avatar.md +130 -0
- package/docs/Badge.md +83 -0
- package/docs/BottomSheet.md +78 -0
- package/docs/BreadCrumb.md +133 -0
- package/docs/Button.md +189 -0
- package/docs/ConfirmDialog.md +139 -0
- package/docs/Container.md +230 -0
- package/docs/Dropdown.md +175 -0
- package/docs/Footer.md +93 -0
- package/docs/FormControls.md +115 -0
- package/docs/Header.md +115 -0
- package/docs/Icon.md +225 -0
- package/docs/MediaObject.md +303 -0
- package/docs/MenuList.md +113 -0
- package/docs/Modal.md +152 -0
- package/docs/PageHeader.md +134 -0
- package/docs/Pagination.md +142 -0
- package/docs/Pills.md +104 -0
- package/docs/Spinner.md +115 -0
- package/docs/Stepper.md +131 -0
- package/docs/Table.md +194 -0
- package/docs/Toast.md +96 -0
- package/docs/Typography.md +231 -0
- package/llms.txt +293 -0
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -1,104 +1,237 @@
|
|
|
1
|
-
#
|
|
1
|
+
# CleanPlate
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**A headless React UI framework** — reusable, accessible components you can style to match your brand. No opinionated theme; you bring the look and feel.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- [Installation](#installation)
|
|
6
|
+
- [Quick start](#quick-start)
|
|
7
|
+
- [Available components](#available-components)
|
|
8
|
+
- [Documentation](#documentation)
|
|
9
|
+
- [TypeScript](#typescript)
|
|
10
|
+
- [LLM / AI-friendly docs & agents](#llm--ai-friendly-docs--agents)
|
|
11
|
+
- [GitHub MCP server](#github-mcp-server)
|
|
6
12
|
|
|
7
|
-
|
|
8
|
-
npm install cleanplate
|
|
9
|
-
```
|
|
13
|
+
---
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
## Requirements
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
- **React** 18 or higher
|
|
18
|
+
- **React DOM** 18 or higher
|
|
14
19
|
|
|
15
|
-
|
|
20
|
+
---
|
|
16
21
|
|
|
17
|
-
|
|
22
|
+
## Installation
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
import "cleanplate/dist/index.css";
|
|
24
|
+
```bash
|
|
25
|
+
npm install cleanplate
|
|
23
26
|
```
|
|
24
27
|
|
|
25
|
-
|
|
28
|
+
Or with Yarn:
|
|
26
29
|
|
|
30
|
+
```bash
|
|
31
|
+
yarn add cleanplate
|
|
27
32
|
```
|
|
28
|
-
import { Button } from "cleanplate";
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
<Button variant="secondary" onClick={() => {}}>Save</Button>
|
|
32
|
-
<Button variant="nude" onClick={() => {}}>Save</Button>
|
|
33
|
-
<Button variant="special" onClick={() => {}}>Save</Button>
|
|
34
|
-
```
|
|
34
|
+
Published packages: [npm — cleanplate](https://www.npmjs.com/package/cleanplate)
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
---
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
import { Typography } from "cleanplate";
|
|
38
|
+
## Quick start
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
<Typography variant="h2">Hello World!</Typography>
|
|
43
|
-
<Typography variant="h3">Hello World!</Typography>
|
|
44
|
-
<Typography variant="h4">Hello World!</Typography>
|
|
45
|
-
<Typography variant="h5">Hello World!</Typography>
|
|
46
|
-
<Typography variant="h6">Hello World!</Typography>
|
|
47
|
-
<Typography variant="p">Hello World!</Typography>
|
|
48
|
-
<Typography variant="small">Hello World!</Typography>
|
|
40
|
+
### 1. Add styles
|
|
49
41
|
|
|
42
|
+
Import the reset and base styles **once** at your app root (e.g. `main.jsx`, `App.jsx`, or `index.js`):
|
|
43
|
+
|
|
44
|
+
```jsx
|
|
45
|
+
import "cleanplate/dist/index.css";
|
|
50
46
|
```
|
|
51
47
|
|
|
52
|
-
|
|
48
|
+
### 2. Import and use components
|
|
53
49
|
|
|
54
|
-
|
|
55
|
-
import { Badge } from "cleanplate";
|
|
50
|
+
All components are **named exports** from `cleanplate`:
|
|
56
51
|
|
|
57
|
-
|
|
52
|
+
```jsx
|
|
53
|
+
import { Button, Typography, Container } from "cleanplate";
|
|
54
|
+
|
|
55
|
+
function App() {
|
|
56
|
+
return (
|
|
57
|
+
<Container padding="4">
|
|
58
|
+
<Typography variant="h1">Hello</Typography>
|
|
59
|
+
<Button variant="solid" onClick={() => alert("Saved!")}>
|
|
60
|
+
Save
|
|
61
|
+
</Button>
|
|
62
|
+
</Container>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
58
65
|
```
|
|
59
66
|
|
|
60
|
-
|
|
67
|
+
### Example: Button
|
|
61
68
|
|
|
62
|
-
```
|
|
63
|
-
import {
|
|
69
|
+
```jsx
|
|
70
|
+
import { Button } from "cleanplate";
|
|
64
71
|
|
|
65
|
-
<
|
|
72
|
+
<Button variant="solid">Primary action</Button>
|
|
73
|
+
<Button variant="outline">Secondary</Button>
|
|
74
|
+
<Button variant="ghost">Tertiary</Button>
|
|
66
75
|
```
|
|
67
76
|
|
|
68
|
-
|
|
77
|
+
Variants: `solid`, `outline`, `ghost`, `icon`. Sizes: `small`, `medium`.
|
|
78
|
+
|
|
79
|
+
### Example: Typography
|
|
69
80
|
|
|
81
|
+
```jsx
|
|
82
|
+
import { Typography } from "cleanplate";
|
|
83
|
+
|
|
84
|
+
<Typography variant="h1">Heading 1</Typography>
|
|
85
|
+
<Typography variant="h4">Heading 4</Typography>
|
|
86
|
+
<Typography variant="p">Body paragraph.</Typography>
|
|
70
87
|
```
|
|
71
|
-
import { FormControl } from "cleanplate";
|
|
72
88
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
89
|
+
Variants: `h1`–`h6`, `p`, `span`, `small`.
|
|
90
|
+
|
|
91
|
+
### Example: Form controls
|
|
92
|
+
|
|
93
|
+
```jsx
|
|
94
|
+
import { FormControls } from "cleanplate";
|
|
95
|
+
|
|
96
|
+
<FormControls.Input
|
|
97
|
+
label="Email"
|
|
98
|
+
value={email}
|
|
99
|
+
onChange={(e) => setEmail(e.target.value)}
|
|
77
100
|
/>
|
|
78
101
|
|
|
79
|
-
<
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
value
|
|
102
|
+
<FormControls.Select
|
|
103
|
+
label="Country"
|
|
104
|
+
options={[
|
|
105
|
+
{ label: "United States", value: "us" },
|
|
106
|
+
{ label: "Canada", value: "ca" },
|
|
107
|
+
]}
|
|
108
|
+
value={country}
|
|
109
|
+
onChange={(e) => setCountry(e.target.value)}
|
|
83
110
|
/>
|
|
84
111
|
```
|
|
85
112
|
|
|
86
|
-
|
|
113
|
+
Other form primitives: `TextArea`, `Checkbox`, `Radio`, `Date`, `File`, `Toggle`, etc.
|
|
87
114
|
|
|
88
|
-
|
|
115
|
+
### Example: Icon
|
|
116
|
+
|
|
117
|
+
Uses [Google Material Symbols](https://fonts.google.com/icons). Include the font in your app; then:
|
|
118
|
+
|
|
119
|
+
```jsx
|
|
89
120
|
import { Icon } from "cleanplate";
|
|
90
121
|
|
|
91
|
-
<Icon name="settings" size="small" color="
|
|
122
|
+
<Icon name="settings" size="small" color="black" />
|
|
123
|
+
<Icon name="check_circle" size="medium" />
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Available components
|
|
129
|
+
|
|
130
|
+
| Component | Use case |
|
|
131
|
+
|----------------|----------|
|
|
132
|
+
| Accordion | Collapsible panels, FAQ sections |
|
|
133
|
+
| Alert | Inline feedback (success, error, warning, info) |
|
|
134
|
+
| Animated | Scroll-triggered animations |
|
|
135
|
+
| AppShell | Full-page layout with Header, Footer, sidebar |
|
|
136
|
+
| Avatar | User initials, image, or icon |
|
|
137
|
+
| Badge | Status labels, tags |
|
|
138
|
+
| BottomSheet | Slide-up panel |
|
|
139
|
+
| BreadCrumb | Navigation trail |
|
|
140
|
+
| Button | Actions and buttons |
|
|
141
|
+
| ConfirmDialog | Confirmation modals |
|
|
142
|
+
| Container | Layout, spacing, flex |
|
|
143
|
+
| Dropdown | Menus, floating panels |
|
|
144
|
+
| Footer | App footer |
|
|
145
|
+
| FormControls | Input, Select, TextArea, Checkbox, etc. |
|
|
146
|
+
| Header | App header with nav |
|
|
147
|
+
| Icon | Material Symbols icons |
|
|
148
|
+
| MediaObject | Media + title + description |
|
|
149
|
+
| MenuList | Navigation lists |
|
|
150
|
+
| Modal | Dialogs, overlays |
|
|
151
|
+
| PageHeader | Page title + CTA + more menu |
|
|
152
|
+
| Pagination | Page navigation |
|
|
153
|
+
| Pills | Tags/chips |
|
|
154
|
+
| ProgressBar | Progress indicator |
|
|
155
|
+
| Spinner | Loading indicator |
|
|
156
|
+
| Stepper | Multi-step flows |
|
|
157
|
+
| Table | Tabular data |
|
|
158
|
+
| Toast | Transient messages |
|
|
159
|
+
| Typography | Headings and text |
|
|
160
|
+
|
|
161
|
+
Import any of them from `cleanplate`:
|
|
162
|
+
|
|
163
|
+
```jsx
|
|
164
|
+
import {
|
|
165
|
+
Button,
|
|
166
|
+
Typography,
|
|
167
|
+
Container,
|
|
168
|
+
Header,
|
|
169
|
+
PageHeader,
|
|
170
|
+
BreadCrumb,
|
|
171
|
+
Table,
|
|
172
|
+
FormControls,
|
|
173
|
+
// ... etc.
|
|
174
|
+
} from "cleanplate";
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Documentation
|
|
180
|
+
|
|
181
|
+
- **Storybook** — Interactive playground and docs for every component:
|
|
182
|
+
[https://cleanplate.sivadass.in](https://cleanplate.sivadass.in)
|
|
183
|
+
- **GitHub** — Source and issue tracker:
|
|
184
|
+
[github.com/sivadass/cleanplate](https://github.com/sivadass/cleanplate)
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## TypeScript
|
|
189
|
+
|
|
190
|
+
CleanPlate is written in TypeScript and ships type definitions. Types are included in the package (`dist/index.d.ts`). No extra `@types` package needed.
|
|
191
|
+
|
|
192
|
+
```tsx
|
|
193
|
+
import { Button } from "cleanplate";
|
|
194
|
+
import type { ButtonProps } from "cleanplate";
|
|
92
195
|
```
|
|
93
196
|
|
|
94
|
-
|
|
197
|
+
---
|
|
95
198
|
|
|
96
|
-
|
|
199
|
+
## LLM / AI-friendly docs & agents
|
|
97
200
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
201
|
+
Documentation for **coding agents** and LLMs ships with the npm package alongside the compiled library.
|
|
202
|
+
|
|
203
|
+
### After `npm install cleanplate`
|
|
204
|
+
|
|
205
|
+
- **Index:** `node_modules/cleanplate/llms.txt` — component list, conventions, and links to each doc file.
|
|
206
|
+
- **Per-component docs:** `node_modules/cleanplate/docs/<ComponentName>.md` — props, types, examples, behavior.
|
|
207
|
+
|
|
208
|
+
**Agent workflow:** read `node_modules/cleanplate/llms.txt` first, then open the specific files under `node_modules/cleanplate/docs/` (not imports alone).
|
|
209
|
+
|
|
210
|
+
### Version-pinned URLs (no download step)
|
|
211
|
+
|
|
212
|
+
CDN mirrors of the published tarball work well for prompts and CI; pin the semver you depend on:
|
|
213
|
+
|
|
214
|
+
- **Latest:** [unpkg — `llms.txt`](https://unpkg.com/cleanplate@latest/llms.txt) · [jsDelivr — `llms.txt`](https://cdn.jsdelivr.net/npm/cleanplate@latest/llms.txt)
|
|
215
|
+
- **Pinned example:** `https://unpkg.com/cleanplate@0.2.0/llms.txt` and `https://unpkg.com/cleanplate@0.2.0/docs/Button.md` (substitute your installed version)
|
|
216
|
+
|
|
217
|
+
Human-facing Storybook: [cleanplate.sivadass.in](https://cleanplate.sivadass.in).
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## GitHub MCP server
|
|
222
|
+
|
|
223
|
+
This repository is **compatible with the [GitHub MCP server](https://github.com/github/github-mcp-server)** (Model Context Protocol). The GitHub MCP server lets AI assistants (e.g. in Cursor or VS Code) access GitHub—repos, issues, pull requests, and workflows—so you can work with this codebase using natural language.
|
|
224
|
+
|
|
225
|
+
- **Compatibility:** CleanPlate is a standard GitHub repo with no special constraints. The GitHub MCP server can read and interact with it once connected.
|
|
226
|
+
- **Setup:** Add the GitHub MCP server in your editor:
|
|
227
|
+
- **Cursor:** Settings → Tools & MCP → add the GitHub MCP server (or add it to `~/.cursor/mcp.json`). Use [Cursor’s MCP docs](https://cursor.com/docs/context/mcp) for the exact config.
|
|
228
|
+
- **VS Code (1.101+):** Use the MCP servers UI or add the server to `.vscode/mcp.json`. See [GitHub: Using the GitHub MCP Server](https://docs.github.com/en/copilot/how-tos/provide-context/use-mcp/use-the-github-mcp-server).
|
|
229
|
+
- **Auth:** You’ll need to authenticate with GitHub (OAuth or a Personal Access Token with the scopes the MCP server needs).
|
|
230
|
+
|
|
231
|
+
No project-level MCP config is required; configure the GitHub MCP server in your editor or global config and point it at this repo.
|
|
232
|
+
|
|
233
|
+
---
|
|
101
234
|
|
|
102
|
-
|
|
235
|
+
## License
|
|
103
236
|
|
|
104
|
-
|
|
237
|
+
MIT © Sivadass N
|
|
@@ -1,15 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SPACING_OPTIONS } from "../../constants/common";
|
|
3
|
+
export interface AccordionItem {
|
|
4
|
+
title: string;
|
|
5
|
+
content: React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export type SpacingOption = (typeof SPACING_OPTIONS)[number];
|
|
8
|
+
export type AccordionIconVariant = "expand" | "plus";
|
|
9
|
+
export type AccordionVariant = "grouped" | "spaced";
|
|
10
|
+
export type AccordionTitleTag = "span" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
11
|
+
export type AccordionMargin = string | SpacingOption[];
|
|
12
|
+
export type AccordionPadding = string | SpacingOption[];
|
|
13
|
+
export interface AccordionProps {
|
|
14
|
+
items: AccordionItem[];
|
|
15
|
+
allowMultiple?: boolean;
|
|
16
|
+
defaultExpandedIndex?: number | number[];
|
|
17
|
+
iconVariant?: AccordionIconVariant;
|
|
18
|
+
variant?: AccordionVariant;
|
|
19
|
+
titleTag?: AccordionTitleTag;
|
|
20
|
+
margin?: AccordionMargin;
|
|
21
|
+
padding?: AccordionPadding;
|
|
6
22
|
className?: string;
|
|
7
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
declare namespace Accordion {
|
|
9
|
-
namespace propTypes {
|
|
10
|
-
let size: any;
|
|
11
|
-
let variant: any;
|
|
12
|
-
let margin: any;
|
|
13
|
-
}
|
|
14
23
|
}
|
|
24
|
+
declare const Accordion: React.FC<AccordionProps>;
|
|
25
|
+
export default Accordion;
|
|
15
26
|
//# sourceMappingURL=Accordion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/Accordion.
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/Accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAMzD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,aAAa,EAAE,CAAC;AACvD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,EAAE,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAiHvC,CAAC;AAIF,eAAe,SAAS,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import Accordion from "./Accordion";
|
|
1
2
|
export default Accordion;
|
|
2
|
-
|
|
3
|
+
export type { AccordionProps, AccordionItem, AccordionIconVariant, AccordionVariant, AccordionTitleTag, AccordionMargin, AccordionPadding } from "./Accordion";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/index.
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,eAAe,SAAS,CAAC;AACzB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,5 +1,37 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { MenuListItem } from "../menu-list";
|
|
3
|
+
import type { MenuListSize, MenuListVariant } from "../menu-list";
|
|
4
|
+
import type { HeaderProps } from "../header";
|
|
5
|
+
import type { FooterProps } from "../footer";
|
|
6
|
+
/** Sidebar configuration: MenuList as vertical nav. Direction is always "vertical". */
|
|
7
|
+
export interface AppShellSidebarConfig {
|
|
8
|
+
/** Menu items for the sidebar navigation */
|
|
9
|
+
items: MenuListItem[];
|
|
10
|
+
/** Value of the currently active item */
|
|
11
|
+
activeItem?: string;
|
|
12
|
+
/** Called when a menu item is clicked */
|
|
13
|
+
onMenuClick?: (item: MenuListItem) => void;
|
|
14
|
+
/** Size of menu items */
|
|
15
|
+
size?: MenuListSize;
|
|
16
|
+
/** Visual variant for the sidebar */
|
|
17
|
+
variant?: MenuListVariant;
|
|
18
|
+
}
|
|
19
|
+
export interface AppShellProps {
|
|
20
|
+
/** Main content (page area) */
|
|
21
|
+
children: React.ReactNode;
|
|
22
|
+
/** Top bar: pass Header props or custom ReactNode. Omit to hide header. */
|
|
23
|
+
header?: React.ReactNode | HeaderProps;
|
|
24
|
+
/** Bottom bar: pass Footer props or custom ReactNode. Omit to hide footer. */
|
|
25
|
+
footer?: React.ReactNode | FooterProps;
|
|
26
|
+
/** Sidebar config (MenuList as vertical nav on the left). Omit to hide sidebar. */
|
|
27
|
+
sidebar?: AppShellSidebarConfig;
|
|
28
|
+
/** Width of the sidebar (e.g. "240px", "16rem") */
|
|
29
|
+
sidebarWidth?: string;
|
|
30
|
+
/** Additional class name for the root element */
|
|
31
|
+
className?: string;
|
|
32
|
+
/** Additional class name for the main content wrapper */
|
|
33
|
+
contentClassName?: string;
|
|
34
|
+
}
|
|
35
|
+
declare const AppShell: React.FC<AppShellProps>;
|
|
1
36
|
export default AppShell;
|
|
2
|
-
declare function AppShell({ children }: {
|
|
3
|
-
children: any;
|
|
4
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
5
37
|
//# sourceMappingURL=AppShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/components/app-shell/AppShell.
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/components/app-shell/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,uFAAuF;AACvF,MAAM,WAAW,qBAAqB;IACpC,4CAA4C;IAC5C,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,yBAAyB;IACzB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,qCAAqC;IACrC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC;IACvC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC;IACvC,mFAAmF;IACnF,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAQD,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAuDrC,CAAC;AAIF,eAAe,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/app-shell/index.
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/app-shell/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,eAAe,QAAQ,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SPACING_OPTIONS } from "../../constants/common";
|
|
3
|
+
export type SpacingOption = (typeof SPACING_OPTIONS)[number];
|
|
4
|
+
export type BottomSheetMargin = string | SpacingOption[];
|
|
5
|
+
export interface BottomSheetProps {
|
|
6
|
+
/** Whether the bottom sheet is open */
|
|
7
|
+
isOpen: boolean;
|
|
8
|
+
/** Called when the sheet should close (e.g. after drag-to-close) */
|
|
9
|
+
onClose?: () => void;
|
|
10
|
+
/** Spacing suffix(s) for outer margin; component adds m- prefix */
|
|
11
|
+
margin?: BottomSheetMargin;
|
|
12
|
+
/** Additional class names for the sheet panel */
|
|
13
|
+
className?: string;
|
|
14
|
+
/** Content rendered inside the sheet */
|
|
15
|
+
children?: React.ReactNode;
|
|
17
16
|
}
|
|
17
|
+
declare const BottomSheet: React.FC<BottomSheetProps>;
|
|
18
|
+
export default BottomSheet;
|
|
18
19
|
//# sourceMappingURL=BottomSheet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../../src/components/bottom-sheet/BottomSheet.
|
|
1
|
+
{"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../../../src/components/bottom-sheet/BottomSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAKzD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,aAAa,EAAE,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mEAAmE;IACnE,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAMD,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAkJ3C,CAAC;AAIF,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/bottom-sheet/index.
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/bottom-sheet/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,eAAe,WAAW,CAAC;AAC3B,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SPACING_OPTIONS } from "../../constants/common";
|
|
3
|
+
export type SpacingOption = (typeof SPACING_OPTIONS)[number];
|
|
4
|
+
export type BreadCrumbMargin = string | SpacingOption[];
|
|
5
|
+
export type BreadCrumbSeparator = "slash" | "chevron";
|
|
6
|
+
export interface BreadCrumbItem {
|
|
7
|
+
/** Display label for the crumb */
|
|
8
|
+
label: string;
|
|
9
|
+
/** URL for the crumb. Omit for the current page (last item). */
|
|
10
|
+
href?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface BreadCrumbProps {
|
|
13
|
+
/** List of breadcrumb items. Last item is treated as current page when it has no href. */
|
|
14
|
+
items: BreadCrumbItem[];
|
|
15
|
+
/** Visual separator between items */
|
|
16
|
+
separator?: BreadCrumbSeparator;
|
|
17
|
+
/** Accessible label for the navigation landmark (default: "Breadcrumb") */
|
|
18
|
+
ariaLabel?: string;
|
|
19
|
+
/** Spacing suffix for outer margin (e.g. "0" → m-0). */
|
|
20
|
+
margin?: BreadCrumbMargin;
|
|
21
|
+
/** Additional class name for the root nav element */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
declare const BreadCrumb: React.FC<BreadCrumbProps>;
|
|
25
|
+
export default BreadCrumb;
|
|
26
|
+
//# sourceMappingURL=BreadCrumb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BreadCrumb.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/BreadCrumb.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,EAAE,CAAC;AACxD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,qCAAqC;IACrC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAsEzC,CAAC;AAIF,eAAe,UAAU,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import BreadCrumb from "./BreadCrumb";
|
|
2
|
+
export default BreadCrumb;
|
|
3
|
+
export type { BreadCrumbProps, BreadCrumbItem, BreadCrumbSeparator, BreadCrumbMargin, SpacingOption, } from "./BreadCrumb";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/index.
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,eAAe,UAAU,CAAC;AAC1B,YAAY,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,GACd,MAAM,cAAc,CAAC"}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SPACING_OPTIONS } from "../../constants/common";
|
|
3
|
+
export type SpacingOption = (typeof SPACING_OPTIONS)[number];
|
|
4
|
+
export type FooterSize = "small" | "medium" | "large";
|
|
5
|
+
export type FooterVariant = "light" | "dark";
|
|
6
|
+
export type FooterMargin = string | SpacingOption[];
|
|
7
|
+
export interface FooterProps {
|
|
8
|
+
/** Spacing suffix(s) for outer margin; component adds m- prefix */
|
|
9
|
+
margin?: FooterMargin;
|
|
10
|
+
/** Size of the footer */
|
|
11
|
+
size?: FooterSize;
|
|
12
|
+
/** Visual variant */
|
|
13
|
+
variant?: FooterVariant;
|
|
14
|
+
/** Brand name shown in copyright (e.g. "Acme Inc") */
|
|
6
15
|
brandName?: string;
|
|
16
|
+
/** Label for the powered-by link (e.g. "Powered by X") */
|
|
7
17
|
poweredByLabel?: string;
|
|
18
|
+
/** URL for the powered-by link; shown when poweredByLabel is also set */
|
|
8
19
|
poweredByLink?: string;
|
|
9
|
-
|
|
20
|
+
/** Custom content rendered above the copyright line */
|
|
21
|
+
children?: React.ReactNode;
|
|
22
|
+
/** Additional class names for the root element */
|
|
10
23
|
className?: string;
|
|
11
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
declare namespace Footer {
|
|
13
|
-
namespace propTypes {
|
|
14
|
-
let brandName: any;
|
|
15
|
-
let poweredByLabel: any;
|
|
16
|
-
let poweredByLink: any;
|
|
17
|
-
let size: any;
|
|
18
|
-
let variant: any;
|
|
19
|
-
let margin: any;
|
|
20
|
-
}
|
|
21
24
|
}
|
|
25
|
+
declare const Footer: React.FC<FooterProps>;
|
|
26
|
+
export default Footer;
|
|
22
27
|
//# sourceMappingURL=Footer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/components/footer/Footer.
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/components/footer/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAKzD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,EAAE,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,yBAAyB;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qBAAqB;IACrB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA0CjC,CAAC;AAIF,eAAe,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/footer/index.
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/footer/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,eAAe,MAAM,CAAC;AACtB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -1,30 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SPACING_OPTIONS } from "../../constants/common";
|
|
3
|
+
import type { MenuListItem } from "../menu-list";
|
|
4
|
+
export type SpacingOption = (typeof SPACING_OPTIONS)[number];
|
|
5
|
+
export type HeaderSize = "small" | "medium" | "large";
|
|
6
|
+
export type HeaderVariant = "light" | "dark";
|
|
7
|
+
export type HeaderMargin = string | SpacingOption[];
|
|
8
|
+
export interface HeaderProps {
|
|
9
|
+
/** URL for the logo image (shown when headerLeft is not provided) */
|
|
10
|
+
logoUrl?: string;
|
|
11
|
+
/** Value of the currently active menu item */
|
|
12
|
+
activeMenuItem?: string;
|
|
13
|
+
/** Called when a menu item is clicked */
|
|
14
|
+
onMenuItemClick?: (item: MenuListItem) => void;
|
|
15
|
+
/** Additional class names for the root element */
|
|
16
|
+
className?: string;
|
|
17
|
+
/** Custom content for the left area (replaces logo when provided) */
|
|
18
|
+
headerLeft?: React.ReactNode;
|
|
19
|
+
/** Custom content for the right area */
|
|
20
|
+
headerRight?: React.ReactNode;
|
|
21
|
+
/** Custom content for the center area (replaces MenuList when provided) */
|
|
22
|
+
headerCenter?: React.ReactNode;
|
|
23
|
+
/** Menu items for the center/vertical menu */
|
|
24
|
+
menuItems: MenuListItem[];
|
|
25
|
+
/** Size of the header */
|
|
26
|
+
size?: HeaderSize;
|
|
27
|
+
/** Visual variant */
|
|
28
|
+
variant?: HeaderVariant;
|
|
29
|
+
/** Spacing suffix(s) for outer margin; component adds m- prefix */
|
|
30
|
+
margin?: HeaderMargin;
|
|
29
31
|
}
|
|
32
|
+
declare const Header: React.FC<HeaderProps>;
|
|
33
|
+
export default Header;
|
|
30
34
|
//# sourceMappingURL=Header.d.ts.map
|