neo-lite 0.1.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 (52) hide show
  1. package/README.md +332 -0
  2. package/package-dist/assets/icons/Icon.d.ts +23 -0
  3. package/package-dist/assets/icons/Icon.d.ts.map +1 -0
  4. package/package-dist/components/badge/Badge.d.ts +8 -0
  5. package/package-dist/components/badge/Badge.d.ts.map +1 -0
  6. package/package-dist/components/badge/index.d.ts +3 -0
  7. package/package-dist/components/badge/index.d.ts.map +1 -0
  8. package/package-dist/components/button/Button.d.ts +11 -0
  9. package/package-dist/components/button/Button.d.ts.map +1 -0
  10. package/package-dist/components/button/index.d.ts +3 -0
  11. package/package-dist/components/button/index.d.ts.map +1 -0
  12. package/package-dist/components/card/Card.d.ts +11 -0
  13. package/package-dist/components/card/Card.d.ts.map +1 -0
  14. package/package-dist/components/card/index.d.ts +3 -0
  15. package/package-dist/components/card/index.d.ts.map +1 -0
  16. package/package-dist/components/checkbox/Checkbox.d.ts +7 -0
  17. package/package-dist/components/checkbox/Checkbox.d.ts.map +1 -0
  18. package/package-dist/components/checkbox/index.d.ts +3 -0
  19. package/package-dist/components/checkbox/index.d.ts.map +1 -0
  20. package/package-dist/components/dialog/Dialog.d.ts +12 -0
  21. package/package-dist/components/dialog/Dialog.d.ts.map +1 -0
  22. package/package-dist/components/dialog/index.d.ts +3 -0
  23. package/package-dist/components/dialog/index.d.ts.map +1 -0
  24. package/package-dist/components/input/Input.d.ts +11 -0
  25. package/package-dist/components/input/Input.d.ts.map +1 -0
  26. package/package-dist/components/input/index.d.ts +3 -0
  27. package/package-dist/components/input/index.d.ts.map +1 -0
  28. package/package-dist/components/menu/Menu.d.ts +6 -0
  29. package/package-dist/components/menu/Menu.d.ts.map +1 -0
  30. package/package-dist/components/menu/MenuItem.d.ts +7 -0
  31. package/package-dist/components/menu/MenuItem.d.ts.map +1 -0
  32. package/package-dist/components/menu/index.d.ts +5 -0
  33. package/package-dist/components/menu/index.d.ts.map +1 -0
  34. package/package-dist/components/menu/styles.d.ts +6 -0
  35. package/package-dist/components/menu/styles.d.ts.map +1 -0
  36. package/package-dist/components/selection/Selection.d.ts +21 -0
  37. package/package-dist/components/selection/Selection.d.ts.map +1 -0
  38. package/package-dist/components/selection/index.d.ts +3 -0
  39. package/package-dist/components/selection/index.d.ts.map +1 -0
  40. package/package-dist/components/tabs/Tab.d.ts +7 -0
  41. package/package-dist/components/tabs/Tab.d.ts.map +1 -0
  42. package/package-dist/components/tabs/Tabs.d.ts +23 -0
  43. package/package-dist/components/tabs/Tabs.d.ts.map +1 -0
  44. package/package-dist/components/tabs/index.d.ts +5 -0
  45. package/package-dist/components/tabs/index.d.ts.map +1 -0
  46. package/package-dist/index.d.ts +19 -0
  47. package/package-dist/index.d.ts.map +1 -0
  48. package/package-dist/index.js +879 -0
  49. package/package-dist/neo-lite.css +1 -0
  50. package/package-dist/utils/cn.d.ts +2 -0
  51. package/package-dist/utils/cn.d.ts.map +1 -0
  52. package/package.json +69 -0
package/README.md ADDED
@@ -0,0 +1,332 @@
1
+ # Neo-Lite UI
2
+
3
+ Neo-Lite UI is a small, opinionated React component library and documentation website with a lightweight neo-brutalist visual language.
4
+
5
+ The system is designed in Figma, translated into component specifications, and implemented as accessible React, TypeScript, and Tailwind CSS v4 components. The public website presents the foundations and component examples. Its production deployment also serves the component Storybook at `/storybook`.
6
+
7
+ ## Design
8
+
9
+ Neo-Lite is characterized by:
10
+
11
+ - strong one-pixel borders
12
+ - hard offset shadows
13
+ - restrained corner radii
14
+ - a mostly neutral interface palette
15
+ - purple emphasis and focus states
16
+ - expressive headings with practical interface typography
17
+ - short, purposeful interaction motion
18
+
19
+ The design system has four sources of truth:
20
+
21
+ | Area | Source of truth |
22
+ | --- | --- |
23
+ | Visual design and intent | Figma |
24
+ | Tokens and theme values | `src/styles/theme.css` |
25
+ | Component behavior and public APIs | React components in `src/components` |
26
+ | Component development and state coverage | Storybook stories |
27
+
28
+ View the design file in the [Figma Community](https://www.figma.com/community/file/1683319542113903903).
29
+
30
+ ## Technology
31
+
32
+ - React 19
33
+ - TypeScript 5
34
+ - Tailwind CSS 4
35
+ - Vite 6
36
+ - Storybook 9
37
+ - Shiki for documentation-site code highlighting
38
+
39
+ React and React DOM are peer dependencies for library consumers. This repository currently uses React 19 for local development.
40
+
41
+ ## Getting Started
42
+
43
+ ### Prerequisites
44
+
45
+ - Node.js 20 or newer
46
+ - npm
47
+
48
+ ### Install dependencies
49
+
50
+ ```bash
51
+ npm install
52
+ ```
53
+
54
+ ### Start the Neo-Lite website
55
+
56
+ ```bash
57
+ npm run dev
58
+ ```
59
+
60
+ Vite serves the website at `http://localhost:5173` by default.
61
+
62
+ Primary routes:
63
+
64
+ - `/` - Home
65
+ - `/overview` - Design foundations
66
+ - `/components/badge` - Component documentation, starting with Badge
67
+ - `/components/button`
68
+ - `/components/card`
69
+ - `/components/checkbox`
70
+ - `/components/dialog`
71
+ - `/components/input`
72
+ - `/components/selection`
73
+ - `/components/tabs`
74
+
75
+ The website is independent from Storybook. Do not add website pages as Storybook stories.
76
+
77
+ ### Start Storybook
78
+
79
+ ```bash
80
+ npm run storybook
81
+ ```
82
+
83
+ Storybook runs separately at `http://localhost:6006`. It is the component laboratory for inspecting variants, states, interactions, and edge cases.
84
+
85
+ ## Available Scripts
86
+
87
+ | Command | Purpose |
88
+ | --- | --- |
89
+ | `npm run dev` | Start the standalone Neo-Lite website with Vite |
90
+ | `npm run build` | Create a production website build in `dist` |
91
+ | `npm run build:site` | Create only the documentation website build |
92
+ | `npm run build:package` | Compile the npm package into `package-dist` |
93
+ | `npm run build:vercel` | Build the website and place Storybook at `dist/storybook` |
94
+ | `npm run typecheck` | Run TypeScript without emitting files |
95
+ | `npm run storybook` | Start the Storybook development server on port 6006 |
96
+ | `npm run build-storybook` | Generate a static Storybook build |
97
+
98
+ ## Using the Components
99
+
100
+ Import components from the package entry point and include the Neo-Lite theme once in the consuming application.
101
+
102
+ ```tsx
103
+ import { Badge, Button, Card } from "neo-lite";
104
+ import "neo-lite/styles.css";
105
+
106
+ export function Example() {
107
+ return (
108
+ <Card
109
+ title="Your profile"
110
+ badges={<Badge variant="accent">New</Badge>}
111
+ footer={<Button variant="primary">Save</Button>}
112
+ >
113
+ Manage your details in one place.
114
+ </Card>
115
+ );
116
+ }
117
+ ```
118
+
119
+ The package is prepared for public npm publication but is not yet published. Until the first release is available from the registry, the same API can be tested by installing the tarball produced by `npm pack`.
120
+
121
+ ### Public Components
122
+
123
+ | Component | Purpose |
124
+ | --- | --- |
125
+ | `Badge` | Compact status, category, or supporting label |
126
+ | `Button` | Primary, secondary, accent, and destructive actions |
127
+ | `Card` | Structured content surface with optional media, badges, body, and footer |
128
+ | `Checkbox` | Binary and indeterminate selection control |
129
+ | `Dialog` | Accessible modal surface with focus management |
130
+ | `Input` | Single-line text input with labels, decorations, hints, and errors |
131
+ | `Menu` | Presentational popup surface for menu content |
132
+ | `MenuItem` | Interactive item used inside a Menu |
133
+ | `Selection` | Single-value dropdown selection control |
134
+ | `Tabs` and `Tab` | Keyboard-accessible tab selection group and items |
135
+
136
+ Public exports are maintained in `src/index.ts`.
137
+
138
+ ## Theme and Tokens
139
+
140
+ The theme is defined in `src/styles/theme.css`. It contains:
141
+
142
+ - primitive neutral, purple, blue, green, yellow, and red colors
143
+ - semantic background, foreground, border, focus, state, and feedback colors
144
+ - Nokora and Playfair Display font families
145
+ - a 4px-based spacing scale with selected fine and layout values
146
+ - radius tokens from `--radius-sm` to `--radius-full`
147
+ - motion duration, easing, and hover offset tokens
148
+ - hard shadow tokens and focus rings
149
+ - component geometry such as button heights
150
+
151
+ Tailwind CSS v4 consumes these values through the `@theme inline` bridge in the same file. Prefer semantic utilities such as `bg-background`, `text-foreground`, and `border-border` over raw colors when a matching token exists.
152
+
153
+ Do not introduce hard-coded visual values when an existing Neo-Lite token represents the same design decision.
154
+
155
+ ## Project Structure
156
+
157
+ ```text
158
+ .
159
+ |-- .storybook/ Storybook configuration
160
+ |-- docs/ Foundation and release-readiness documents
161
+ |-- src/
162
+ | |-- assets/ Website images, illustrations, and icons
163
+ | |-- components/ Reusable library components and stories
164
+ | |-- constants/ Shared website constants and external links
165
+ | |-- pages/ Standalone documentation website pages
166
+ | |-- styles/ Neo-Lite theme and Tailwind token bridge
167
+ | |-- utils/ Shared implementation utilities
168
+ | |-- index.ts Public component exports
169
+ | `-- main.tsx Website entry point and route selection
170
+ |-- package-dist/ Generated npm package artifacts
171
+ |-- dist/ Generated Vercel website and hosted Storybook
172
+ |-- neo-lite-*-spec-v0.1.md Component specifications
173
+ |-- package.json
174
+ |-- tsconfig.build.json Package declaration build configuration
175
+ |-- tsconfig.json
176
+ |-- vercel.json Vercel build and route configuration
177
+ |-- vite.lib.config.ts npm library build configuration
178
+ `-- vite.config.ts
179
+ ```
180
+
181
+ Each component folder generally contains:
182
+
183
+ ```text
184
+ Component.tsx
185
+ Component.stories.tsx
186
+ index.ts
187
+ ```
188
+
189
+ ## Documentation Website
190
+
191
+ The website is implemented in `src/pages` and rendered by `src/main.tsx`.
192
+
193
+ It currently includes:
194
+
195
+ - a responsive Home page
196
+ - a foundations Overview page covering color, spacing, radius, effects, and motion
197
+ - component documentation routes with live previews
198
+ - complete TSX examples with syntax highlighting
199
+ - copy-to-clipboard controls with success feedback
200
+ - shared responsive navigation and mobile menu behavior
201
+
202
+ The website uses a mobile-first responsive strategy:
203
+
204
+ - Mobile: below 640px
205
+ - Tablet: 640px to 1023px using `sm:` styles
206
+ - Desktop: 1024px and above using `lg:` styles
207
+
208
+ The mobile and desktop Figma frames are visual anchors. Layouts remain fluid between those anchors and content is constrained at wide viewport sizes.
209
+
210
+ The Vercel configuration serves existing static files first and falls back to `index.html` for routes such as `/overview` and `/components/badge`.
211
+
212
+ ## Storybook Workflow
213
+
214
+ Storybook is intentionally separate from the documentation website.
215
+
216
+ Use stories to cover:
217
+
218
+ - variants and sizes
219
+ - default, hover, focus, disabled, selected, and error states
220
+ - content combinations
221
+ - keyboard and pointer interaction
222
+ - accessibility behavior
223
+ - long content and layout stress cases
224
+
225
+ Do not put Storybook-only behavior inside production components.
226
+
227
+ The production Vercel build writes Storybook to `dist/storybook`, making it available from the website at `/storybook`. The local Storybook development server remains independent at `http://localhost:6006`.
228
+
229
+ ## Deployment
230
+
231
+ Connect this repository to a Vercel project. The checked-in `vercel.json` runs `npm run build:vercel` and deploys `dist`, which contains both the website and the static Storybook build.
232
+
233
+ Before deploying, verify the combined output locally:
234
+
235
+ ```bash
236
+ npm run build:vercel
237
+ ```
238
+
239
+ Vercel preview deployments should be checked at `/`, `/overview`, `/components/badge`, and `/storybook` before promoting a release to production.
240
+
241
+ ## Package Publishing
242
+
243
+ The npm package build is intentionally separate from the website build:
244
+
245
+ ```bash
246
+ npm run build:package
247
+ npm pack --dry-run
248
+ ```
249
+
250
+ `package-dist` contains the compiled ESM bundle, TypeScript declarations, declaration maps, and `neo-lite.css`. React and React DOM remain peer dependencies and are not bundled. Website pages, Storybook, specifications, and documentation assets are excluded by the package `files` allowlist.
251
+
252
+ Before the first public release:
253
+
254
+ 1. Choose a project license, add a root `LICENSE` file, and add the matching `license` field to `package.json`.
255
+ 2. Confirm ownership of the `neo-lite` name on npm.
256
+ 3. Test the generated tarball in a clean React project.
257
+ 4. Sign in to npm and run `npm publish`.
258
+
259
+ The `prepack` script runs typechecking and rebuilds the package automatically before npm creates or publishes a tarball.
260
+
261
+ ## Component Specifications
262
+
263
+ Every current component has one canonical specification named `neo-lite-<component>-spec-v0.1.md`.
264
+
265
+ The specifications document:
266
+
267
+ - component purpose
268
+ - Figma source nodes
269
+ - anatomy
270
+ - public React API
271
+ - variants and states
272
+ - token usage
273
+ - interactions and keyboard behavior
274
+ - accessibility requirements
275
+ - Storybook coverage
276
+ - acceptance criteria
277
+
278
+ When a specification changes, update the existing `v0.1` file rather than creating parallel versioned copies unless the project adopts a formal specification-versioning policy.
279
+
280
+ The shared foundation specification is available at `docs/neo-lite-foundations-v0.1.md`.
281
+
282
+ ## Accessibility
283
+
284
+ Components should preserve native semantics wherever possible and provide equivalent keyboard behavior where custom interaction is required.
285
+
286
+ Current accessibility considerations include:
287
+
288
+ - visible keyboard focus using Neo-Lite focus tokens
289
+ - native form controls where practical
290
+ - modal focus movement, trapping, Escape handling, and focus restoration
291
+ - keyboard navigation for Selection and Tabs
292
+ - accessible labels for icon-only controls
293
+ - reduced-motion handling for hover transforms
294
+ - `aria` state exposure for interactive components
295
+
296
+ Accessibility behavior belongs in the React implementation, even when it is not represented explicitly in Figma.
297
+
298
+ ## Development Workflow
299
+
300
+ Use the following sequence for component work:
301
+
302
+ ```text
303
+ Figma design
304
+ -> design tokens
305
+ -> component specification
306
+ -> React API design
307
+ -> React and Tailwind implementation
308
+ -> Storybook validation
309
+ -> documentation website example
310
+ -> responsive and interaction QA
311
+ ```
312
+
313
+ Before considering a change complete:
314
+
315
+ 1. Check the relevant Figma component or page.
316
+ 2. Reuse existing tokens, components, and icons.
317
+ 3. Update the canonical component specification when behavior or API changes.
318
+ 4. Add or update Storybook coverage.
319
+ 5. Run `npm run typecheck`.
320
+ 6. Run `npm run build`.
321
+ 7. Verify affected website routes at mobile, tablet, and desktop widths.
322
+
323
+ ## Design Resources
324
+
325
+ - [Neo-Lite UI Kit on Figma Community](https://www.figma.com/community/file/1683319542113903903)
326
+ - `neo-lite-project-context.md` for project principles and source-of-truth responsibilities
327
+ - `docs/neo-lite-foundations-v0.1.md` for the foundation token specification
328
+ - `docs/neo-lite-v0.1.0-release-readiness.md` for the current release checklist
329
+
330
+ ## Project Status
331
+
332
+ Neo-Lite UI is a public repository under active development. The website is configured for Vercel deployment, and the `neo-lite` package is prepared for public npm publication but has not yet been released. APIs and documentation may evolve as components are refined against Figma and exercised in Storybook.
@@ -0,0 +1,23 @@
1
+ declare const icons: {
2
+ "arrow-right": string;
3
+ figma: string;
4
+ github: string;
5
+ react: string;
6
+ star: string;
7
+ storybook: string;
8
+ "tailwind-css": string;
9
+ };
10
+ export type IconName = keyof typeof icons;
11
+ type IconProps = ({
12
+ svg: string;
13
+ name?: never;
14
+ } | {
15
+ name: IconName;
16
+ svg?: never;
17
+ }) & {
18
+ className?: string;
19
+ ariaLabel?: string;
20
+ };
21
+ export declare function Icon({ svg, name, className, ariaLabel }: IconProps): import("react").JSX.Element;
22
+ export {};
23
+ //# sourceMappingURL=Icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/assets/icons/Icon.tsx"],"names":[],"mappings":"AASA,QAAA,MAAM,KAAK;;;;;;;;CAQV,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,KAAK,CAAC;AAE1C,KAAK,SAAS,GAAG,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,GAAG;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF,wBAAgB,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,SAAS,+BAclE"}
@@ -0,0 +1,8 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export type BadgeVariant = "accent" | "secondary" | "primary" | "destructive";
3
+ export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
4
+ variant?: BadgeVariant;
5
+ leadingIcon?: ReactNode;
6
+ }
7
+ export declare function Badge({ variant, leadingIcon, className, children, ...props }: BadgeProps): import("react").JSX.Element;
8
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvD,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,WAAW,GACX,SAAS,GACT,aAAa,CAAC;AAElB,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,eAAe,CAAC;IACjE,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AASD,wBAAgB,KAAK,CAAC,EACpB,OAAkB,EAClB,WAAW,EACX,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,UAAU,+BAkBZ"}
@@ -0,0 +1,3 @@
1
+ export { Badge } from "./Badge";
2
+ export type { BadgeProps, BadgeVariant } from "./Badge";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from "react";
2
+ export type ButtonVariant = "accent" | "primary" | "secondary" | "destructive";
3
+ export type ButtonSize = "xs" | "sm" | "lg";
4
+ export type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
5
+ variant?: ButtonVariant;
6
+ size?: ButtonSize;
7
+ leadingIcon?: ReactNode;
8
+ trailingIcon?: ReactNode;
9
+ };
10
+ export declare function Button({ variant, size, type, leadingIcon, trailingIcon, className, children, ...props }: ButtonProps): import("react").JSX.Element;
11
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAC/E,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAClE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B,CAAC;AAsCF,wBAAgB,MAAM,CAAC,EACrB,OAAkB,EAClB,IAAW,EACX,IAAe,EACf,WAAW,EACX,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,+BAuCb"}
@@ -0,0 +1,3 @@
1
+ export { Button } from "./Button";
2
+ export type { ButtonProps, ButtonSize, ButtonVariant } from "./Button";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
3
+ image?: ReactNode;
4
+ badges?: ReactNode;
5
+ subtitle?: ReactNode;
6
+ title: ReactNode;
7
+ children?: ReactNode;
8
+ footer?: ReactNode;
9
+ }
10
+ export declare function Card({ image, badges, subtitle, title, children, footer, className, ...props }: CardProps): import("react").JSX.Element;
11
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/components/card/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvD,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAC9E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IAEjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,SAAS,+BA+DX"}
@@ -0,0 +1,3 @@
1
+ export { Card } from "./Card";
2
+ export type { CardProps } from "./Card";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/card/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type InputHTMLAttributes } from "react";
2
+ export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "type"> {
3
+ indeterminate?: boolean;
4
+ error?: boolean;
5
+ }
6
+ export declare const Checkbox: import("react").ForwardRefExoticComponent<CheckboxProps & import("react").RefAttributes<HTMLInputElement>>;
7
+ //# sourceMappingURL=Checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,OAAO,CAAC;AAIf,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,QAAQ,4GAiFpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Checkbox } from "./Checkbox";
2
+ export type { CheckboxProps } from "./Checkbox";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type ReactNode } from "react";
2
+ export interface DialogProps {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ title: ReactNode;
6
+ children: ReactNode;
7
+ footer?: ReactNode;
8
+ closeLabel?: string;
9
+ className?: string;
10
+ }
11
+ export declare function Dialog({ open, onOpenChange, title, children, footer, closeLabel, className, }: DialogProps): import("react").ReactPortal | null;
12
+ //# sourceMappingURL=Dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAOf,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEtC,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IAEpB,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,UAA2B,EAC3B,SAAS,GACV,EAAE,WAAW,sCAqIb"}
@@ -0,0 +1,3 @@
1
+ export { Dialog } from "./Dialog";
2
+ export type { DialogProps } from "./Dialog";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { InputHTMLAttributes, ReactNode } from "react";
2
+ export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
3
+ label?: ReactNode;
4
+ hint?: ReactNode;
5
+ error?: ReactNode;
6
+ leadingDecoration?: ReactNode;
7
+ trailingDecoration?: ReactNode;
8
+ containerClassName?: string;
9
+ }
10
+ export declare function Input({ id, label, hint, error, leadingDecoration, trailingDecoration, containerClassName, className, disabled, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, ...props }: InputProps): import("react").JSX.Element;
11
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/input/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAK5D,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC3D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,KAAK,CAAC,EACpB,EAAE,EACF,KAAK,EACL,IAAI,EACJ,KAAK,EACL,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACT,QAAQ,EACR,kBAAkB,EAAE,eAAe,EACnC,cAAc,EAAE,WAAW,EAC3B,GAAG,KAAK,EACT,EAAE,UAAU,+BAoEZ"}
@@ -0,0 +1,3 @@
1
+ export { Input } from "./Input";
2
+ export type { InputProps } from "./Input";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/input/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ export interface MenuProps extends HTMLAttributes<HTMLDivElement> {
3
+ children: ReactNode;
4
+ }
5
+ export declare function Menu({ className, children, ...props }: MenuProps): import("react").JSX.Element;
6
+ //# sourceMappingURL=Menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/components/menu/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvD,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC/D,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,+BAShE"}
@@ -0,0 +1,7 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from "react";
2
+ export interface MenuItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {
3
+ selected?: boolean;
4
+ leadingDecoration?: ReactNode;
5
+ }
6
+ export declare const MenuItem: import("react").ForwardRefExoticComponent<MenuItemProps & import("react").RefAttributes<HTMLButtonElement>>;
7
+ //# sourceMappingURL=MenuItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuItem.d.ts","sourceRoot":"","sources":["../../../src/components/menu/MenuItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,oBAAoB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI9E,MAAM,WAAW,aACf,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED,eAAO,MAAM,QAAQ,6GA4BpB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { Menu } from "./Menu";
2
+ export type { MenuProps } from "./Menu";
3
+ export { MenuItem } from "./MenuItem";
4
+ export type { MenuItemProps } from "./MenuItem";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const menuClassName = "w-full rounded-sm border border-border bg-background p-2 shadow-sm";
2
+ export declare function menuItemClassName({ selected, className, }: {
3
+ selected?: boolean;
4
+ className?: string;
5
+ }): string;
6
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/components/menu/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,uEAC4C,CAAC;AAEvE,wBAAgB,iBAAiB,CAAC,EAChC,QAAgB,EAChB,SAAS,GACV,EAAE;IACD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,UAQA"}
@@ -0,0 +1,21 @@
1
+ import { type ReactNode } from "react";
2
+ export interface SelectionOption {
3
+ value: string;
4
+ label: ReactNode;
5
+ disabled?: boolean;
6
+ }
7
+ export interface SelectionProps {
8
+ options: SelectionOption[];
9
+ value?: string;
10
+ defaultValue?: string;
11
+ onValueChange?: (value: string) => void;
12
+ label?: ReactNode;
13
+ placeholder?: ReactNode;
14
+ error?: boolean;
15
+ disabled?: boolean;
16
+ name?: string;
17
+ required?: boolean;
18
+ className?: string;
19
+ }
20
+ export declare function Selection({ options, value, defaultValue, onValueChange, label, placeholder, error, disabled, name, required, className, }: SelectionProps): import("react").JSX.Element;
21
+ //# sourceMappingURL=Selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Selection.d.ts","sourceRoot":"","sources":["../../../src/components/selection/Selection.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;IAE3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAExC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,KAAK,EACL,YAAY,EACZ,aAAa,EACb,KAAK,EACL,WAAgC,EAChC,KAAa,EACb,QAAgB,EAChB,IAAI,EACJ,QAAgB,EAChB,SAAS,GACV,EAAE,cAAc,+BA2RhB"}
@@ -0,0 +1,3 @@
1
+ export { Selection } from "./Selection";
2
+ export type { SelectionOption, SelectionProps } from "./Selection";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/selection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from "react";
2
+ export interface TabProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "value"> {
3
+ value: string;
4
+ leadingIcon?: ReactNode;
5
+ }
6
+ export declare const Tab: import("react").ForwardRefExoticComponent<TabProps & import("react").RefAttributes<HTMLButtonElement>>;
7
+ //# sourceMappingURL=Tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,oBAAoB,EAEzB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,MAAM,WAAW,QACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,eAAO,MAAM,GAAG,wGAqGf,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type HTMLAttributes, type ReactNode, type RefObject } from "react";
2
+ type RegisteredTab = {
3
+ value: string;
4
+ disabled: boolean;
5
+ ref: RefObject<HTMLButtonElement | null>;
6
+ };
7
+ type TabsContextValue = {
8
+ value: string | undefined;
9
+ registerTab: (tab: RegisteredTab) => void;
10
+ unregisterTab: (value: string) => void;
11
+ selectTab: (value: string) => void;
12
+ moveFocus: (currentValue: string, direction: 1 | -1 | "first" | "last") => void;
13
+ };
14
+ export declare function useTabsContext(): TabsContextValue;
15
+ export interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
16
+ value?: string;
17
+ defaultValue?: string;
18
+ onValueChange?: (value: string) => void;
19
+ children: ReactNode;
20
+ }
21
+ export declare function Tabs({ value, defaultValue, onValueChange, children, className, role, ...props }: TabsProps): import("react").JSX.Element;
22
+ export {};
23
+ //# sourceMappingURL=Tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;CACjF,CAAC;AAIF,wBAAgB,cAAc,qBAQ7B;AAED,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,SAAS,+BA+GX"}
@@ -0,0 +1,5 @@
1
+ export { Tab } from "./Tab";
2
+ export type { TabProps } from "./Tab";
3
+ export { Tabs } from "./Tabs";
4
+ export type { TabsProps } from "./Tabs";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC"}