@gratiaos/ui 1.0.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 (60) hide show
  1. package/LICENSE +243 -0
  2. package/README.md +170 -0
  3. package/dist/hooks/index.d.ts +2 -0
  4. package/dist/hooks/index.d.ts.map +1 -0
  5. package/dist/hooks/index.js +2 -0
  6. package/dist/hooks/index.js.map +1 -0
  7. package/dist/hooks/useMissingScrew.d.ts +40 -0
  8. package/dist/hooks/useMissingScrew.d.ts.map +1 -0
  9. package/dist/hooks/useMissingScrew.js +76 -0
  10. package/dist/hooks/useMissingScrew.js.map +1 -0
  11. package/dist/index.d.ts +9 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +9 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/pad/Button.d.ts +10 -0
  16. package/dist/pad/Button.d.ts.map +1 -0
  17. package/dist/pad/Button.js +7 -0
  18. package/dist/pad/Button.js.map +1 -0
  19. package/dist/pad/Card.d.ts +8 -0
  20. package/dist/pad/Card.d.ts.map +1 -0
  21. package/dist/pad/Card.js +3 -0
  22. package/dist/pad/Card.js.map +1 -0
  23. package/dist/primitives/badge.d.ts +66 -0
  24. package/dist/primitives/badge.d.ts.map +1 -0
  25. package/dist/primitives/badge.js +23 -0
  26. package/dist/primitives/badge.js.map +1 -0
  27. package/dist/primitives/button.d.ts +60 -0
  28. package/dist/primitives/button.d.ts.map +1 -0
  29. package/dist/primitives/button.js +39 -0
  30. package/dist/primitives/button.js.map +1 -0
  31. package/dist/primitives/card.d.ts +54 -0
  32. package/dist/primitives/card.d.ts.map +1 -0
  33. package/dist/primitives/card.js +11 -0
  34. package/dist/primitives/card.js.map +1 -0
  35. package/dist/primitives/field.d.ts +107 -0
  36. package/dist/primitives/field.d.ts.map +1 -0
  37. package/dist/primitives/field.js +154 -0
  38. package/dist/primitives/field.js.map +1 -0
  39. package/dist/primitives/pill.d.ts +59 -0
  40. package/dist/primitives/pill.d.ts.map +1 -0
  41. package/dist/primitives/pill.js +26 -0
  42. package/dist/primitives/pill.js.map +1 -0
  43. package/dist/primitives/slot.d.ts +7 -0
  44. package/dist/primitives/slot.d.ts.map +1 -0
  45. package/dist/primitives/slot.js +9 -0
  46. package/dist/primitives/slot.js.map +1 -0
  47. package/dist/primitives/toast.d.ts +125 -0
  48. package/dist/primitives/toast.d.ts.map +1 -0
  49. package/dist/primitives/toast.js +462 -0
  50. package/dist/primitives/toast.js.map +1 -0
  51. package/package.json +87 -0
  52. package/styles/badge.css +175 -0
  53. package/styles/base.css +7 -0
  54. package/styles/button.css +257 -0
  55. package/styles/card.css +195 -0
  56. package/styles/field.css +195 -0
  57. package/styles/pad.css +140 -0
  58. package/styles/pill.css +167 -0
  59. package/styles/theme.css +492 -0
  60. package/styles/toast.css +286 -0
@@ -0,0 +1,462 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Garden UI — Toast primitive (headless)
4
+ * --------------------------------------
5
+ * Rendering is data-attribute driven; visuals live in styles/toast.css.
6
+ * Emit with `showToast(...)` (CustomEvent), render with `<Toaster/>`.
7
+ *
8
+ * A11y
9
+ * • Each item is `role="status"` with `aria-atomic="true"` so screen readers
10
+ * announce the toast as a single unit.
11
+ * • Items are focusable by default (tabIndex=0). Focus/hover pauses auto‑dismiss;
12
+ * blur/mouseleave resumes. Keyboard: Enter/Space dismiss (when dismissOnClick),
13
+ * Escape always dismisses.
14
+ *
15
+ * Theming
16
+ * • Duration prefers `--dur-toast`; otherwise derives from `--dur-pulse` with a
17
+ * generous hold. Colors/shape come from tokens: `--elev`, `--text`, `--border`,
18
+ * and `--color-*` accents.
19
+ *
20
+ *
21
+ * UI data‑states (handled by the primitive)
22
+ * • Each toast mounts with `data-state="entering"` and clears it on next frame
23
+ * so CSS can ease in.
24
+ * • On dismiss, we set `data-state="leaving"` and remove the node after the
25
+ * tokenized transition (see styles/toast.css).
26
+ *
27
+ * Event API (headless, global)
28
+ * • showToast("Saved ✓", { variant: "positive" })
29
+ * • showToast({ key: "sync", title: "Syncing…", variant: "neutral" }) // keyed upsert
30
+ * • clearToast() // remove all
31
+ * • clearToast("sync") // remove item(s) with key
32
+ */
33
+ import React, { useEffect, useMemo, useRef, useState } from 'react';
34
+ // Detect dev mode without importing Node types (works in browser ESM).
35
+ function isDevEnvironment() {
36
+ const globalProcess = globalThis.process;
37
+ const env = globalProcess && typeof globalProcess === 'object' ? globalProcess.env : undefined;
38
+ const mode = env && typeof env === 'object' && 'NODE_ENV' in env ? env.NODE_ENV : undefined;
39
+ return mode !== 'production';
40
+ }
41
+ /**
42
+ * Dev helper — `useToasterTest()`
43
+ * --------------------------------
44
+ * Whisper: "debug should feel playful, not noisy." 🌬️
45
+ *
46
+ * Purpose
47
+ * • Tiny opt‑in hook to exercise the toast stack during development.
48
+ * • Provides a keyboard hotkey (Alt+T) that cycles demo toasts and Alt+Y to clear.
49
+ * • Exposes helpers to fire, clear, and run an interval-based "auto" demo.
50
+ *
51
+ * Usage
52
+ * import { Toaster, useToasterTest } from '@gratiaos/ui';
53
+ * ...
54
+ * function DevRoot() {
55
+ * useToasterTest(); // Alt+T to push a demo toast, Alt+Y to clear
56
+ * return <Toaster />;
57
+ * }
58
+ */
59
+ export function useToasterTest(opts) {
60
+ const enabled = opts?.enabled ?? isDevEnvironment();
61
+ const intervalMs = Math.max(800, opts?.intervalMs ?? 3200);
62
+ const idxRef = React.useRef(0);
63
+ const autoRef = React.useRef(null);
64
+ const fireDemo = React.useCallback(() => {
65
+ if (typeof window === 'undefined')
66
+ return;
67
+ // A small sequence that shows: neutral → positive → warning → danger,
68
+ // plus a keyed upsert pair ("sync" → "synced").
69
+ const sequence = [
70
+ { message: 'A little breeze — hello there', icon: '🪁', variant: 'neutral' },
71
+ { title: 'Saved', desc: 'Your note is tucked in the timeline.', icon: '🌈', variant: 'positive' },
72
+ { message: 'Heads up — something wobbled', icon: '🪶', variant: 'warning' },
73
+ { key: 'sync', title: 'Syncing…', desc: 'Holding steady', icon: '🪁', variant: 'neutral' },
74
+ { key: 'sync', title: 'Synced', desc: 'All good', icon: '🌈', variant: 'positive' },
75
+ { title: 'Plot twist', desc: 'We rolled back the change.', icon: '🎭', variant: 'danger' },
76
+ ];
77
+ const i = idxRef.current++ % sequence.length;
78
+ showToast(sequence[i]);
79
+ }, []);
80
+ const clearDemo = React.useCallback(() => {
81
+ clearToast();
82
+ }, []);
83
+ const startAuto = React.useCallback(() => {
84
+ if (typeof window === 'undefined')
85
+ return;
86
+ if (autoRef.current != null)
87
+ return; // already running
88
+ autoRef.current = window.setInterval(() => {
89
+ fireDemo();
90
+ }, intervalMs);
91
+ }, [fireDemo, intervalMs]);
92
+ const stopAuto = React.useCallback(() => {
93
+ if (autoRef.current != null) {
94
+ clearInterval(autoRef.current);
95
+ autoRef.current = null;
96
+ }
97
+ }, []);
98
+ React.useEffect(() => {
99
+ if (!enabled || typeof window === 'undefined')
100
+ return;
101
+ const onKey = (e) => {
102
+ // Alt+T → demo toast, Alt+Y → clear
103
+ const key = (e.key || '').toLowerCase();
104
+ if (e.altKey && key === 't') {
105
+ e.preventDefault();
106
+ fireDemo();
107
+ }
108
+ else if (e.altKey && key === 'y') {
109
+ e.preventDefault();
110
+ clearDemo();
111
+ }
112
+ };
113
+ window.addEventListener('keydown', onKey);
114
+ // Friendly console hint (non-fatal if console is blocked)
115
+ try {
116
+ // eslint-disable-next-line no-console
117
+ console.info('[garden/ui] useToasterTest — Alt+T: demo toast · Alt+Y: clear · startAuto()/stopAuto() available');
118
+ }
119
+ catch {
120
+ /* noop */
121
+ }
122
+ return () => {
123
+ window.removeEventListener('keydown', onKey);
124
+ stopAuto();
125
+ };
126
+ }, [enabled, fireDemo, clearDemo, stopAuto]);
127
+ return {
128
+ fireDemo,
129
+ clearDemo,
130
+ startAuto,
131
+ stopAuto,
132
+ get running() {
133
+ return autoRef.current != null;
134
+ },
135
+ };
136
+ }
137
+ export function showToast(messageOrOpts, opts = {}) {
138
+ try {
139
+ // SSR-safe: silently no-op when window is missing
140
+ if (typeof window === 'undefined')
141
+ return;
142
+ const detail = typeof messageOrOpts === 'string' ? { message: messageOrOpts, ...opts } : messageOrOpts ?? {};
143
+ // Ensure at least one renderable field is present
144
+ if (!detail.message && !detail.title && !detail.desc)
145
+ return;
146
+ window.dispatchEvent(new CustomEvent('garden:toast', { detail }));
147
+ }
148
+ catch {
149
+ /* noop */
150
+ }
151
+ }
152
+ /** Clear by key or all. */
153
+ export function clearToast(key) {
154
+ try {
155
+ if (typeof window === 'undefined')
156
+ return;
157
+ window.dispatchEvent(new CustomEvent('garden:toast:clear', { detail: { key } }));
158
+ }
159
+ catch {
160
+ /* noop */
161
+ }
162
+ }
163
+ function readToastBaseMs() {
164
+ try {
165
+ const css = getComputedStyle(document.documentElement);
166
+ // 1) Prefer explicit toast duration token if present
167
+ const t = css.getPropertyValue('--dur-toast').trim();
168
+ if (t) {
169
+ if (t.endsWith('ms'))
170
+ return Math.max(1800, parseFloat(t));
171
+ if (t.endsWith('s'))
172
+ return Math.max(1800, parseFloat(t) * 1000);
173
+ const n = parseFloat(t);
174
+ if (Number.isFinite(n))
175
+ return Math.max(1800, n);
176
+ }
177
+ // 2) Fallback: derive from pulse duration with a bigger hold
178
+ const raw = css.getPropertyValue('--dur-pulse').trim();
179
+ if (raw) {
180
+ if (raw.endsWith('ms'))
181
+ return Math.max(3600, parseFloat(raw) * 5);
182
+ if (raw.endsWith('s'))
183
+ return Math.max(3600, parseFloat(raw) * 1000 * 5);
184
+ const n = parseFloat(raw);
185
+ if (Number.isFinite(n))
186
+ return Math.max(3600, n * 5);
187
+ }
188
+ // 3) Final fallback
189
+ return 4200; // a touch longer than before
190
+ }
191
+ catch {
192
+ return 4200;
193
+ }
194
+ }
195
+ function readTransitionMs() {
196
+ try {
197
+ const css = getComputedStyle(document.documentElement);
198
+ const t = css.getPropertyValue('--duration-snug').trim();
199
+ if (t.endsWith('ms'))
200
+ return Math.max(120, parseFloat(t));
201
+ if (t.endsWith('s'))
202
+ return Math.max(120, parseFloat(t) * 1000);
203
+ const n = parseFloat(t);
204
+ return Number.isFinite(n) ? Math.max(120, n) : 180;
205
+ }
206
+ catch {
207
+ return 180;
208
+ }
209
+ }
210
+ /**
211
+ * Toaster — headless renderer using data attributes only.
212
+ * Visuals are provided by styles/toast.css.
213
+ */
214
+ export const Toaster = ({ position = 'bottom-center', max = 3, dismissOnClick = true, className, renderIcon, focusable = true, }) => {
215
+ const [items, setItems] = useState([]);
216
+ const idRef = useRef(1);
217
+ const baseDuration = useMemo(() => readToastBaseMs(), []);
218
+ const transitionMs = useMemo(() => readTransitionMs(), []);
219
+ const timersRef = useRef(new Map());
220
+ // Stack ref for burst auto-scroll
221
+ const stackRef = useRef(null);
222
+ const hoveringStackRef = useRef(false);
223
+ const pinnedScrollRef = useRef(false); // true when user has scrolled away from the edge
224
+ // Dev visibility for auto-scroll state (pinned|free)
225
+ const [autoscrollPinned, setAutoscrollPinned] = useState(false);
226
+ function atTop(el) {
227
+ return el.scrollTop <= 12;
228
+ }
229
+ function atBottom(el) {
230
+ return el.scrollHeight - el.scrollTop - el.clientHeight <= 12;
231
+ }
232
+ // Dismiss helper that also clears timer state
233
+ const dismiss = (id) => {
234
+ // snapshot callback before state changes
235
+ const target = items.find((t) => t.id === id);
236
+ const onDismissCb = target?.onDismiss;
237
+ // clear timer bookkeeping first
238
+ const info = timersRef.current.get(id);
239
+ if (info?.timeoutId != null)
240
+ clearTimeout(info.timeoutId);
241
+ timersRef.current.delete(id);
242
+ // flag leaving to trigger CSS exit; then hard-remove after tokenized delay
243
+ setItems((prev) => prev.map((t) => (t.id === id ? { ...t, uiState: 'leaving' } : t)));
244
+ window.setTimeout(() => {
245
+ setItems((prev) => prev.filter((t) => t.id !== id));
246
+ try {
247
+ onDismissCb?.();
248
+ }
249
+ catch {
250
+ /* ignore */
251
+ }
252
+ }, Math.max(120, transitionMs));
253
+ };
254
+ // Schedule/clear/pause/resume helpers
255
+ const clearTimer = (id) => {
256
+ const info = timersRef.current.get(id);
257
+ if (info?.timeoutId != null)
258
+ clearTimeout(info.timeoutId);
259
+ };
260
+ const schedule = (id, delay) => {
261
+ clearTimer(id);
262
+ const startedAt = Date.now();
263
+ const timeoutId = window.setTimeout(() => dismiss(id), Math.max(0, delay));
264
+ timersRef.current.set(id, { timeoutId, startedAt, remainingMs: delay });
265
+ };
266
+ const pause = (id) => {
267
+ const info = timersRef.current.get(id);
268
+ if (!info)
269
+ return;
270
+ const elapsed = Date.now() - info.startedAt;
271
+ const remaining = Math.max(0, info.remainingMs - elapsed);
272
+ clearTimer(id);
273
+ timersRef.current.set(id, { timeoutId: null, startedAt: Date.now(), remainingMs: remaining });
274
+ };
275
+ const resume = (id) => {
276
+ const info = timersRef.current.get(id);
277
+ if (!info)
278
+ return;
279
+ const delay = info.remainingMs;
280
+ if (delay <= 0) {
281
+ dismiss(id);
282
+ }
283
+ else {
284
+ schedule(id, delay);
285
+ }
286
+ };
287
+ useEffect(() => {
288
+ function onToast(ev) {
289
+ const ce = ev;
290
+ const d = ce?.detail ?? {};
291
+ const hasContent = Boolean(d.title || d.desc || d.message);
292
+ if (!hasContent)
293
+ return;
294
+ const variant = d.variant ?? 'neutral';
295
+ const durationMs = Number(d.durationMs ?? baseDuration);
296
+ // Upsert by key when provided
297
+ if (d.key) {
298
+ setItems((prev) => {
299
+ const idx = prev.findIndex((x) => x.key === d.key);
300
+ if (idx >= 0) {
301
+ const existing = prev[idx];
302
+ const updated = {
303
+ ...existing,
304
+ variant,
305
+ durationMs,
306
+ title: d.title ?? existing.title,
307
+ desc: d.desc ?? existing.desc,
308
+ message: d.message ?? existing.message,
309
+ icon: d.icon ?? existing.icon,
310
+ onDismiss: d.onDismiss ?? existing.onDismiss,
311
+ onClick: d.onClick ?? existing.onClick,
312
+ };
313
+ const next = [...prev];
314
+ next[idx] = updated;
315
+ // reschedule timer for the existing id
316
+ schedule(existing.id, Math.max(800, durationMs));
317
+ return next.slice(Math.max(0, next.length - max));
318
+ }
319
+ else {
320
+ const id = idRef.current++;
321
+ const item = {
322
+ id,
323
+ key: d.key,
324
+ variant,
325
+ durationMs,
326
+ title: d.title,
327
+ desc: d.desc,
328
+ message: d.message,
329
+ icon: d.icon,
330
+ onDismiss: d.onDismiss,
331
+ onClick: d.onClick,
332
+ uiState: 'entering',
333
+ };
334
+ const next = [...prev, item];
335
+ // clear entering pose on next frame so CSS can ease to settled state
336
+ queueMicrotask?.(() => {
337
+ requestAnimationFrame(() => {
338
+ setItems((curr) => curr.map((t) => (t.id === id ? { ...t, uiState: undefined } : t)));
339
+ });
340
+ });
341
+ schedule(id, Math.max(800, durationMs));
342
+ return next.slice(Math.max(0, next.length - max));
343
+ }
344
+ });
345
+ return;
346
+ }
347
+ // Normal append (no key)
348
+ const id = idRef.current++;
349
+ const item = {
350
+ id,
351
+ variant,
352
+ durationMs,
353
+ title: d.title,
354
+ desc: d.desc,
355
+ message: d.message,
356
+ icon: d.icon,
357
+ onDismiss: d.onDismiss,
358
+ onClick: d.onClick,
359
+ uiState: 'entering',
360
+ };
361
+ setItems((prev) => {
362
+ const next = [...prev, item];
363
+ return next.slice(Math.max(0, next.length - max));
364
+ });
365
+ // clear entering pose on the next frame; then set up auto-dismiss
366
+ queueMicrotask?.(() => {
367
+ requestAnimationFrame(() => {
368
+ setItems((curr) => curr.map((t) => (t.id === id ? { ...t, uiState: undefined } : t)));
369
+ });
370
+ });
371
+ const hold = Math.max(800, durationMs);
372
+ schedule(id, hold);
373
+ }
374
+ function onClear(ev) {
375
+ const ce = ev;
376
+ const key = ce?.detail?.key;
377
+ const targets = key ? items.filter((it) => it.key === key) : items.slice();
378
+ for (const it of targets) {
379
+ dismiss(it.id);
380
+ }
381
+ }
382
+ window.addEventListener('garden:toast', onToast);
383
+ window.addEventListener('garden:toast:clear', onClear);
384
+ return () => {
385
+ window.removeEventListener('garden:toast', onToast);
386
+ window.removeEventListener('garden:toast:clear', onClear);
387
+ // cleanup all timers on unmount
388
+ for (const info of timersRef.current.values()) {
389
+ if (info.timeoutId != null)
390
+ clearTimeout(info.timeoutId);
391
+ }
392
+ timersRef.current.clear();
393
+ };
394
+ // eslint-disable-next-line react-hooks/exhaustive-deps
395
+ }, [baseDuration, max, items, transitionMs]);
396
+ // Auto-scroll the stack to the newest toast on bursts,
397
+ // but only when the user isn't hovering or manually scrolled away.
398
+ useEffect(() => {
399
+ const el = stackRef.current;
400
+ if (!el)
401
+ return;
402
+ const isBottom = position.startsWith('bottom');
403
+ const nearEdge = isBottom ? atBottom(el) : atTop(el);
404
+ // reflect current pin state for dev visibility
405
+ setAutoscrollPinned(hoveringStackRef.current || pinnedScrollRef.current);
406
+ // Only auto-scroll when we're already near the edge to avoid stealing scroll
407
+ if (hoveringStackRef.current || pinnedScrollRef.current || !nearEdge)
408
+ return;
409
+ // Defer until items are laid out
410
+ requestAnimationFrame(() => {
411
+ const node = stackRef.current;
412
+ if (!node)
413
+ return;
414
+ if (isBottom) {
415
+ node.scrollTo({ top: node.scrollHeight, behavior: 'smooth' });
416
+ }
417
+ else {
418
+ node.scrollTo({ top: 0, behavior: 'smooth' });
419
+ }
420
+ });
421
+ }, [items, position]);
422
+ return (_jsx("div", { "data-ui": "toast", "data-position": position, "aria-live": "polite", className: className, children: _jsx("div", { "data-role": "stack", "data-autoscroll": autoscrollPinned ? 'pinned' : 'free', ref: stackRef, onMouseEnter: () => {
423
+ hoveringStackRef.current = true;
424
+ setAutoscrollPinned(true);
425
+ }, onMouseLeave: () => {
426
+ hoveringStackRef.current = false;
427
+ // reflect whether user has scrolled away from the auto edge
428
+ setAutoscrollPinned(pinnedScrollRef.current);
429
+ }, onScroll: (e) => {
430
+ const el = e.currentTarget;
431
+ const isBottom = position.startsWith('bottom');
432
+ pinnedScrollRef.current = isBottom ? !atBottom(el) : !atTop(el);
433
+ setAutoscrollPinned(pinnedScrollRef.current);
434
+ }, children: items.map((t) => {
435
+ const hasRich = Boolean(t.title || t.desc);
436
+ const renderedIcon = renderIcon
437
+ ? renderIcon({ variant: t.variant, title: t.title, desc: t.desc, message: t.message, icon: t.icon, key: t.key })
438
+ : undefined;
439
+ const iconNode = renderedIcon ?? (t.icon ? _jsx("span", { "aria-hidden": true, children: t.icon }) : null);
440
+ const invokeClick = () => {
441
+ try {
442
+ t.onClick?.();
443
+ }
444
+ catch {
445
+ /* ignore */
446
+ }
447
+ if (dismissOnClick)
448
+ dismiss(t.id);
449
+ };
450
+ return (_jsxs("div", { role: "status", "aria-atomic": "true", "data-ui": "toast-item", "data-variant": t.variant, "data-state": t.uiState, onClick: t.onClick || dismissOnClick ? invokeClick : undefined, onMouseEnter: () => pause(t.id), onMouseLeave: () => resume(t.id), title: dismissOnClick ? 'Click to dismiss' : undefined, tabIndex: focusable ? 0 : -1, onFocus: () => pause(t.id), onBlur: () => resume(t.id), onKeyDown: (e) => {
451
+ if (e.key === 'Enter' || e.key === ' ') {
452
+ e.preventDefault();
453
+ invokeClick();
454
+ }
455
+ else if (e.key === 'Escape') {
456
+ e.preventDefault();
457
+ dismiss(t.id);
458
+ }
459
+ }, children: [iconNode ? (_jsx("span", { "data-role": "icon", "aria-hidden": true, children: iconNode })) : null, hasRich ? (_jsxs("div", { "data-role": "content", children: [t.title ? _jsx("span", { "data-role": "title", children: t.title }) : null, t.desc ? _jsx("span", { "data-role": "desc", children: t.desc }) : null] })) : (_jsx("span", { "data-role": "message", children: t.message }))] }, t.id));
460
+ }) }) }));
461
+ };
462
+ //# sourceMappingURL=toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.js","sourceRoot":"","sources":["../../src/primitives/toast.tsx"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@gratiaos/ui",
3
+ "version": "1.0.0",
4
+ "funding": "https://github.com/sponsors/GratiaOS",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./primitives/Button": {
14
+ "types": "./dist/primitives/button.d.ts",
15
+ "import": "./dist/primitives/button.js"
16
+ },
17
+ "./primitives/Card": {
18
+ "types": "./dist/primitives/card.d.ts",
19
+ "import": "./dist/primitives/card.js"
20
+ },
21
+ "./primitives/Pill": {
22
+ "types": "./dist/primitives/pill.d.ts",
23
+ "import": "./dist/primitives/pill.js"
24
+ },
25
+ "./primitives/Field": {
26
+ "types": "./dist/primitives/field.d.ts",
27
+ "import": "./dist/primitives/field.js"
28
+ },
29
+ "./primitives/Toast": {
30
+ "types": "./dist/primitives/toast.d.ts",
31
+ "import": "./dist/primitives/toast.js"
32
+ },
33
+ "./primitives/Badge": {
34
+ "types": "./dist/primitives/badge.d.ts",
35
+ "import": "./dist/primitives/badge.js"
36
+ },
37
+ "./styles/base.css": {
38
+ "default": "./styles/base.css"
39
+ },
40
+ "./styles/button.css": {
41
+ "default": "./styles/button.css"
42
+ },
43
+ "./styles/card.css": {
44
+ "default": "./styles/card.css"
45
+ },
46
+ "./styles/field.css": {
47
+ "default": "./styles/field.css"
48
+ },
49
+ "./styles/toast.css": {
50
+ "default": "./styles/toast.css"
51
+ },
52
+ "./styles/pad.css": {
53
+ "default": "./styles/pad.css"
54
+ },
55
+ "./styles/theme.css": {
56
+ "default": "./styles/theme.css"
57
+ },
58
+ "./styles/pill.css": {
59
+ "default": "./styles/pill.css"
60
+ },
61
+ "./styles/badge.css": {
62
+ "default": "./styles/badge.css"
63
+ }
64
+ },
65
+ "files": [
66
+ "dist/**",
67
+ "styles/**",
68
+ "README.md",
69
+ "LICENSE"
70
+ ],
71
+ "sideEffects": [
72
+ "**/*.css",
73
+ "styles/*.css"
74
+ ],
75
+ "peerDependencies": {
76
+ "react": "^18 || ^19"
77
+ },
78
+ "devDependencies": {
79
+ "typescript": "^5.6.3",
80
+ "react": "^19.1.1",
81
+ "@types/react": "^19.1.13"
82
+ },
83
+ "scripts": {
84
+ "build": "tsc -p tsconfig.build.json && node ./scripts/copy-styles.mjs",
85
+ "check:headers": "node ./scripts/check-headers.mjs"
86
+ }
87
+ }