@blaze-dev/ui 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 (61) hide show
  1. package/dist/data/data-table.d.ts +12 -0
  2. package/dist/data/data-table.d.ts.map +1 -0
  3. package/dist/data/data-table.js +14 -0
  4. package/dist/data/data-table.js.map +1 -0
  5. package/dist/data/index.d.ts +3 -0
  6. package/dist/data/index.d.ts.map +1 -0
  7. package/dist/data/index.js +3 -0
  8. package/dist/data/index.js.map +1 -0
  9. package/dist/data/stat-card.d.ts +11 -0
  10. package/dist/data/stat-card.d.ts.map +1 -0
  11. package/dist/data/stat-card.js +5 -0
  12. package/dist/data/stat-card.js.map +1 -0
  13. package/dist/feedback/empty-state.d.ts +10 -0
  14. package/dist/feedback/empty-state.d.ts.map +1 -0
  15. package/dist/feedback/empty-state.js +5 -0
  16. package/dist/feedback/empty-state.js.map +1 -0
  17. package/dist/feedback/error-box.d.ts +11 -0
  18. package/dist/feedback/error-box.d.ts.map +1 -0
  19. package/dist/feedback/error-box.js +8 -0
  20. package/dist/feedback/error-box.js.map +1 -0
  21. package/dist/feedback/index.d.ts +5 -0
  22. package/dist/feedback/index.d.ts.map +1 -0
  23. package/dist/feedback/index.js +5 -0
  24. package/dist/feedback/index.js.map +1 -0
  25. package/dist/feedback/loading-spinner.d.ts +8 -0
  26. package/dist/feedback/loading-spinner.d.ts.map +1 -0
  27. package/dist/feedback/loading-spinner.js +10 -0
  28. package/dist/feedback/loading-spinner.js.map +1 -0
  29. package/dist/feedback/toast-provider.d.ts +18 -0
  30. package/dist/feedback/toast-provider.d.ts.map +1 -0
  31. package/dist/feedback/toast-provider.js +31 -0
  32. package/dist/feedback/toast-provider.js.map +1 -0
  33. package/dist/forms/form-field.d.ts +16 -0
  34. package/dist/forms/form-field.d.ts.map +1 -0
  35. package/dist/forms/form-field.js +6 -0
  36. package/dist/forms/form-field.js.map +1 -0
  37. package/dist/forms/form-select.d.ts +19 -0
  38. package/dist/forms/form-select.d.ts.map +1 -0
  39. package/dist/forms/form-select.js +6 -0
  40. package/dist/forms/form-select.js.map +1 -0
  41. package/dist/forms/form-textarea.d.ts +15 -0
  42. package/dist/forms/form-textarea.d.ts.map +1 -0
  43. package/dist/forms/form-textarea.js +6 -0
  44. package/dist/forms/form-textarea.js.map +1 -0
  45. package/dist/forms/index.d.ts +4 -0
  46. package/dist/forms/index.d.ts.map +1 -0
  47. package/dist/forms/index.js +4 -0
  48. package/dist/forms/index.js.map +1 -0
  49. package/dist/index.d.ts +12 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +16 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/modal.d.ts +13 -0
  54. package/dist/modal.d.ts.map +1 -0
  55. package/dist/modal.js +15 -0
  56. package/dist/modal.js.map +1 -0
  57. package/dist/page-header.d.ts +9 -0
  58. package/dist/page-header.d.ts.map +1 -0
  59. package/dist/page-header.js +5 -0
  60. package/dist/page-header.js.map +1 -0
  61. package/package.json +52 -0
@@ -0,0 +1,12 @@
1
+ import { type ColumnDef, type Row } from '@tanstack/react-table';
2
+ import type { ReactNode } from 'react';
3
+ interface DataTableProps<TData> {
4
+ columns: ColumnDef<TData, unknown>[];
5
+ data: TData[];
6
+ emptyState?: ReactNode;
7
+ onRowClick?: (row: Row<TData>) => void;
8
+ className?: string;
9
+ }
10
+ export declare function DataTable<TData>({ columns, data, emptyState, onRowClick, className, }: DataTableProps<TData>): import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=data-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../src/data/data-table.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAGd,KAAK,GAAG,EAET,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,UAAU,cAAc,CAAC,KAAK;IAC5B,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAA;IACpC,IAAI,EAAE,KAAK,EAAE,CAAA;IACb,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,EAC/B,OAAO,EACP,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,GACV,EAAE,cAAc,CAAC,KAAK,CAAC,2CAoDvB"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { flexRender, getCoreRowModel, useReactTable, } from '@tanstack/react-table';
3
+ export function DataTable({ columns, data, emptyState, onRowClick, className, }) {
4
+ const table = useReactTable({
5
+ data,
6
+ columns,
7
+ getCoreRowModel: getCoreRowModel(),
8
+ });
9
+ const visibleColumnsCount = table.getVisibleLeafColumns().length || 1;
10
+ return (_jsx("div", { className: `overflow-x-auto scrollbar-thin ${className ?? ''}`, children: _jsxs("table", { className: 'table table-zebra w-full min-w-max', children: [_jsx("thead", { className: 'bg-primary text-primary-content', children: table.getHeaderGroups().map((headerGroup) => (_jsx("tr", { children: headerGroup.headers.map((header) => (_jsx("th", { colSpan: header.colSpan, children: header.isPlaceholder
11
+ ? null
12
+ : flexRender(header.column.columnDef.header, header.getContext()) }, header.id))) }, headerGroup.id))) }), _jsx("tbody", { children: table.getRowModel().rows.length > 0 ? (table.getRowModel().rows.map((row) => (_jsx("tr", { onClick: onRowClick ? () => onRowClick(row) : undefined, className: onRowClick ? 'hover cursor-pointer' : undefined, children: row.getVisibleCells().map((cell) => (_jsx("td", { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id)))) : (_jsx("tr", { children: _jsx("td", { colSpan: visibleColumnsCount, className: 'text-center text-base-content/60 text-sm', children: emptyState ?? 'No data' }) })) })] }) }));
13
+ }
14
+ //# sourceMappingURL=data-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.js","sourceRoot":"","sources":["../../src/data/data-table.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,UAAU,EACV,eAAe,EAEf,aAAa,GACd,MAAM,uBAAuB,CAAA;AAW9B,MAAM,UAAU,SAAS,CAAQ,EAC/B,OAAO,EACP,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,GACa;IACtB,MAAM,KAAK,GAAG,aAAa,CAAC;QAC1B,IAAI;QACJ,OAAO;QACP,eAAe,EAAE,eAAe,EAAE;KACnC,CAAC,CAAA;IAEF,MAAM,mBAAmB,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC,MAAM,IAAI,CAAC,CAAA;IAErE,OAAO,CACL,cAAK,SAAS,EAAE,kCAAkC,SAAS,IAAI,EAAE,EAAE,YACjE,iBAAO,SAAS,EAAC,oCAAoC,aACnD,gBAAO,SAAS,EAAC,iCAAiC,YAC/C,KAAK,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAC5C,uBACG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACnC,aAAoB,OAAO,EAAE,MAAM,CAAC,OAAO,YACxC,MAAM,CAAC,aAAa;gCACnB,CAAC,CAAC,IAAI;gCACN,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,IAH5D,MAAM,CAAC,EAAE,CAIb,CACN,CAAC,IAPK,WAAW,CAAC,EAAE,CAQlB,CACN,CAAC,GACI,EACR,0BACG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACrC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACpC,aAEE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EACvD,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,YAEzD,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnC,uBAAmB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,IAAnE,IAAI,CAAC,EAAE,CAAkE,CACnF,CAAC,IANG,GAAG,CAAC,EAAE,CAOR,CACN,CAAC,CACH,CAAC,CAAC,CAAC,CACF,uBACE,aACE,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAC,0CAA0C,YAEnD,UAAU,IAAI,SAAS,GACrB,GACF,CACN,GACK,IACF,GACJ,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { StatCard } from './stat-card.js';
2
+ export { DataTable } from './data-table.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { StatCard } from './stat-card.js';
2
+ export { DataTable } from './data-table.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from 'react';
2
+ interface StatCardProps {
3
+ value: string | number;
4
+ label: string;
5
+ icon?: ReactNode;
6
+ className?: string;
7
+ valueClassName?: string;
8
+ }
9
+ export declare function StatCard({ value, label, icon, className, valueClassName, }: StatCardProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=stat-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stat-card.d.ts","sourceRoot":"","sources":["../../src/data/stat-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAc,EACd,cAAmB,GACpB,EAAE,aAAa,2CAQf"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function StatCard({ value, label, icon, className = '', valueClassName = '', }) {
3
+ return (_jsxs("div", { className: `stat bg-base-200 border border-base-300 rounded-lg p-2 ${className}`, children: [icon && _jsx("div", { className: 'stat-figure text-secondary', children: icon }), _jsx("div", { className: `stat-value text-xl ${valueClassName}`, children: value }), _jsx("div", { className: 'stat-desc text-xs', children: label })] }));
4
+ }
5
+ //# sourceMappingURL=stat-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stat-card.js","sourceRoot":"","sources":["../../src/data/stat-card.tsx"],"names":[],"mappings":";AAUA,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAS,GAAG,EAAE,EACd,cAAc,GAAG,EAAE,GACL;IACd,OAAO,CACL,eAAK,SAAS,EAAE,0DAA0D,SAAS,EAAE,aAClF,IAAI,IAAI,cAAK,SAAS,EAAC,4BAA4B,YAAE,IAAI,GAAO,EACjE,cAAK,SAAS,EAAE,sBAAsB,cAAc,EAAE,YAAG,KAAK,GAAO,EACrE,cAAK,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAO,IAC5C,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from 'react';
2
+ interface EmptyStateProps {
3
+ message: string;
4
+ icon?: ReactNode;
5
+ action?: ReactNode;
6
+ className?: string;
7
+ }
8
+ export declare function EmptyState({ message, icon, action, className }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=empty-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-state.d.ts","sourceRoot":"","sources":["../../src/feedback/empty-state.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAc,EAAE,EAAE,eAAe,2CAUpF"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function EmptyState({ message, icon, action, className = '' }) {
3
+ return (_jsx("div", { className: `py-8 ${className}`, children: _jsxs("div", { className: 'flex flex-col items-center text-center', children: [icon && _jsx("div", { className: 'mb-2', children: icon }), _jsx("p", { className: 'opacity-60', children: message }), action && _jsx("div", { className: 'mt-4', children: action })] }) }));
4
+ }
5
+ //# sourceMappingURL=empty-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-state.js","sourceRoot":"","sources":["../../src/feedback/empty-state.tsx"],"names":[],"mappings":";AASA,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE,EAAmB;IACnF,OAAO,CACL,cAAK,SAAS,EAAE,QAAQ,SAAS,EAAE,YACjC,eAAK,SAAS,EAAC,wCAAwC,aACpD,IAAI,IAAI,cAAK,SAAS,EAAC,MAAM,YAAE,IAAI,GAAO,EAC3C,YAAG,SAAS,EAAC,YAAY,YAAE,OAAO,GAAK,EACtC,MAAM,IAAI,cAAK,SAAS,EAAC,MAAM,YAAE,MAAM,GAAO,IAC3C,GACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface ErrorBoxProps {
2
+ error: Error | string | {
3
+ message?: string;
4
+ };
5
+ onRetry?: () => void;
6
+ className?: string;
7
+ title?: string;
8
+ }
9
+ export declare function ErrorBox({ error, onRetry, className, title }: ErrorBoxProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=error-box.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-box.d.ts","sourceRoot":"","sources":["../../src/feedback/error-box.tsx"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,2CAe3E"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ExclamationCircleIcon } from '@heroicons/react/24/outline';
3
+ export function ErrorBox({ error, onRetry, className, title }) {
4
+ const detail = typeof error === 'string' ? error : error.message || 'Unknown error';
5
+ const message = title ? `${title}: ${detail}` : detail;
6
+ return (_jsxs("div", { className: className ? `alert alert-error ${className}` : 'alert alert-error', children: [_jsx(ExclamationCircleIcon, { className: 'h-6 w-6 shrink-0' }), _jsx("span", { className: 'flex-1 break-words', children: message }), onRetry && (_jsx("button", { type: 'button', onClick: onRetry, className: 'btn btn-sm btn-ghost', children: "Retry" }))] }));
7
+ }
8
+ //# sourceMappingURL=error-box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-box.js","sourceRoot":"","sources":["../../src/feedback/error-box.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AASnE,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAiB;IAC1E,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,eAAe,CAAA;IACnF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IAEtD,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,qBAAqB,SAAS,EAAE,CAAC,CAAC,CAAC,mBAAmB,aAChF,KAAC,qBAAqB,IAAC,SAAS,EAAC,kBAAkB,GAAG,EACtD,eAAM,SAAS,EAAC,oBAAoB,YAAE,OAAO,GAAQ,EACpD,OAAO,IAAI,CACV,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,sBAAsB,sBAE/D,CACV,IACG,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { LoadingSpinner } from './loading-spinner.js';
2
+ export { ErrorBox } from './error-box.js';
3
+ export { EmptyState } from './empty-state.js';
4
+ export { ToastProvider, useToast, type Toast, type ToastType } from './toast-provider.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feedback/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { LoadingSpinner } from './loading-spinner.js';
2
+ export { ErrorBox } from './error-box.js';
3
+ export { EmptyState } from './empty-state.js';
4
+ export { ToastProvider, useToast } from './toast-provider.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/feedback/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAA8B,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,8 @@
1
+ interface LoadingSpinnerProps {
2
+ size?: 'sm' | 'md' | 'lg';
3
+ className?: string;
4
+ text?: string;
5
+ }
6
+ export declare function LoadingSpinner({ size, className, text }: LoadingSpinnerProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=loading-spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-spinner.d.ts","sourceRoot":"","sources":["../../src/feedback/loading-spinner.tsx"],"names":[],"mappings":"AAAA,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAQD,wBAAgB,cAAc,CAAC,EAAE,IAAW,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,mBAAmB,2CAOnF"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const sizeClasses = {
3
+ sm: 'loading-sm',
4
+ md: 'loading-md',
5
+ lg: 'loading-lg',
6
+ };
7
+ export function LoadingSpinner({ size = 'md', className, text }) {
8
+ return (_jsxs("div", { className: className ?? 'flex flex-col items-center justify-center gap-3 py-8', children: [_jsx("span", { className: `loading loading-spinner ${sizeClasses[size]}` }), text && _jsx("p", { className: 'text-sm opacity-60', children: text })] }));
9
+ }
10
+ //# sourceMappingURL=loading-spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-spinner.js","sourceRoot":"","sources":["../../src/feedback/loading-spinner.tsx"],"names":[],"mappings":";AAMA,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;CACjB,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,EAAuB;IAClF,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,IAAI,sDAAsD,aACjF,eAAM,SAAS,EAAE,2BAA2B,WAAW,CAAC,IAAI,CAAC,EAAE,GAAI,EAClE,IAAI,IAAI,YAAG,SAAS,EAAC,oBAAoB,YAAE,IAAI,GAAK,IACjD,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type ReactNode } from 'react';
2
+ export type ToastType = 'success' | 'error' | 'info' | 'warning';
3
+ export interface Toast {
4
+ id: string;
5
+ message: string;
6
+ type: ToastType;
7
+ }
8
+ interface ToastContextValue {
9
+ toasts: Toast[];
10
+ addToast: (message: string, type: ToastType) => void;
11
+ removeToast: (id: string) => void;
12
+ }
13
+ export declare function ToastProvider({ children }: {
14
+ children: ReactNode;
15
+ }): import("react/jsx-runtime").JSX.Element;
16
+ export declare function useToast(): ToastContextValue;
17
+ export {};
18
+ //# sourceMappingURL=toast-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-provider.d.ts","sourceRoot":"","sources":["../../src/feedback/toast-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAA;AAE3E,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;AAEhE,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,UAAU,iBAAiB;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IACpD,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC;AAWD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAoClE;AAED,wBAAgB,QAAQ,sBAMvB"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useContext, useState } from 'react';
3
+ const ToastContext = createContext(undefined);
4
+ const alertClasses = {
5
+ success: 'alert-success',
6
+ error: 'alert-error',
7
+ info: 'alert-info',
8
+ warning: 'alert-warning',
9
+ };
10
+ export function ToastProvider({ children }) {
11
+ const [toasts, setToasts] = useState([]);
12
+ const addToast = (message, type) => {
13
+ const id = Math.random().toString(36).substring(2, 9);
14
+ setToasts((prev) => [...prev, { id, message, type }]);
15
+ setTimeout(() => {
16
+ removeToast(id);
17
+ }, 5000);
18
+ };
19
+ const removeToast = (id) => {
20
+ setToasts((prev) => prev.filter((toast) => toast.id !== id));
21
+ };
22
+ return (_jsxs(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [children, _jsx("div", { className: 'toast toast-end toast-bottom z-50', children: toasts.map((toast) => (_jsxs("div", { className: `alert ${alertClasses[toast.type]} shadow-lg`, children: [_jsx("span", { className: 'text-sm font-medium', children: toast.message }), _jsx("button", { type: 'button', onClick: () => removeToast(toast.id), "aria-label": 'Close', className: 'btn btn-ghost btn-sm btn-circle', children: "\u2715" })] }, toast.id))) })] }));
23
+ }
24
+ export function useToast() {
25
+ const context = useContext(ToastContext);
26
+ if (!context) {
27
+ throw new Error('useToast must be used within ToastProvider');
28
+ }
29
+ return context;
30
+ }
31
+ //# sourceMappingURL=toast-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-provider.js","sourceRoot":"","sources":["../../src/feedback/toast-provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAgB3E,MAAM,YAAY,GAAG,aAAa,CAAgC,SAAS,CAAC,CAAA;AAE5E,MAAM,YAAY,GAA8B;IAC9C,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,eAAe;CACzB,CAAA;AAED,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAA2B;IACjE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,EAAE,CAAC,CAAA;IAEjD,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,IAAe,EAAE,EAAE;QACpD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAErD,UAAU,CAAC,GAAG,EAAE;YACd,WAAW,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC,EAAE,IAAI,CAAC,CAAA;IACV,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,EAAU,EAAE,EAAE;QACjC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IAC9D,CAAC,CAAA;IAED,OAAO,CACL,MAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAC5D,QAAQ,EACT,cAAK,SAAS,EAAC,mCAAmC,YAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,eAAoB,SAAS,EAAE,SAAS,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,aAC1E,eAAM,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,OAAO,GAAQ,EAC5D,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,gBACzB,OAAO,EAClB,SAAS,EAAC,iCAAiC,uBAGpC,KATD,KAAK,CAAC,EAAE,CAUZ,CACP,CAAC,GACE,IACgB,CACzB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { FieldError, FieldValues, Path, UseFormRegister } from 'react-hook-form';
2
+ interface FormFieldProps<T extends FieldValues> {
3
+ label: string;
4
+ name: Path<T>;
5
+ register: UseFormRegister<T>;
6
+ error?: FieldError;
7
+ type?: 'text' | 'email' | 'number' | 'password' | 'tel' | 'url' | 'date' | 'time';
8
+ placeholder?: string;
9
+ step?: string;
10
+ className?: string;
11
+ required?: boolean;
12
+ disabled?: boolean;
13
+ }
14
+ export declare function FormField<T extends FieldValues>({ label, name, register, error, type, placeholder, step, className, required, disabled, }: FormFieldProps<T>): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=form-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-field.d.ts","sourceRoot":"","sources":["../../src/forms/form-field.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAErF,UAAU,cAAc,CAAC,CAAC,SAAS,WAAW;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACb,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;IACjF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,EAC/C,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,IAAa,EACb,WAAW,EACX,IAAI,EACJ,SAAc,EACd,QAAgB,EAChB,QAAgB,GACjB,EAAE,cAAc,CAAC,CAAC,CAAC,2CA2BnB"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function FormField({ label, name, register, error, type = 'text', placeholder, step, className = '', required = false, disabled = false, }) {
3
+ const inputId = `field-${String(name)}`;
4
+ return (_jsxs("div", { className: `form-control ${className}`, children: [_jsx("label", { htmlFor: inputId, className: 'label', children: _jsxs("span", { className: 'label-text', children: [label, required && _jsx("span", { className: 'text-error ml-1', children: "*" })] }) }), _jsx("input", { id: inputId, type: type, step: step, placeholder: placeholder, ...register(name), disabled: disabled, className: 'input input-bordered w-full' }), error && (_jsx("div", { className: 'label', children: _jsx("span", { className: 'label-text-alt text-error', children: error.message }) }))] }));
5
+ }
6
+ //# sourceMappingURL=form-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-field.js","sourceRoot":"","sources":["../../src/forms/form-field.tsx"],"names":[],"mappings":";AAeA,MAAM,UAAU,SAAS,CAAwB,EAC/C,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,IAAI,GAAG,MAAM,EACb,WAAW,EACX,IAAI,EACJ,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,GACE;IAClB,MAAM,OAAO,GAAG,SAAS,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;IAEvC,OAAO,CACL,eAAK,SAAS,EAAE,gBAAgB,SAAS,EAAE,aACzC,gBAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,OAAO,YACxC,gBAAM,SAAS,EAAC,YAAY,aACzB,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,iBAAiB,kBAAS,IAClD,GACD,EACR,gBACE,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,KACpB,QAAQ,CAAC,IAAI,CAAC,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,6BAA6B,GACvC,EACD,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,OAAO,YACpB,eAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,CAAC,OAAO,GAAQ,GAC9D,CACP,IACG,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { FieldError, FieldValues, Path, UseFormRegister } from 'react-hook-form';
2
+ interface SelectOption {
3
+ value: string;
4
+ label: string;
5
+ }
6
+ interface FormSelectProps<T extends FieldValues> {
7
+ label: string;
8
+ name: Path<T>;
9
+ register: UseFormRegister<T>;
10
+ error?: FieldError;
11
+ options: SelectOption[];
12
+ placeholder?: string;
13
+ className?: string;
14
+ required?: boolean;
15
+ disabled?: boolean;
16
+ }
17
+ export declare function FormSelect<T extends FieldValues>({ label, name, register, error, options, placeholder, className, required, disabled, }: FormSelectProps<T>): import("react/jsx-runtime").JSX.Element;
18
+ export {};
19
+ //# sourceMappingURL=form-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-select.d.ts","sourceRoot":"","sources":["../../src/forms/form-select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAErF,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,eAAe,CAAC,CAAC,SAAS,WAAW;IAC7C,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACb,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,EAChD,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,OAAO,EACP,WAAW,EACX,SAAc,EACd,QAAgB,EAChB,QAAgB,GACjB,EAAE,eAAe,CAAC,CAAC,CAAC,2CA+BpB"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function FormSelect({ label, name, register, error, options, placeholder, className = '', required = false, disabled = false, }) {
3
+ const selectId = `field-${String(name)}`;
4
+ return (_jsxs("div", { className: `form-control ${className}`, children: [_jsx("label", { htmlFor: selectId, className: 'label', children: _jsxs("span", { className: 'label-text', children: [label, required && _jsx("span", { className: 'text-error ml-1', children: "*" })] }) }), _jsxs("select", { id: selectId, ...register(name), disabled: disabled, className: `select select-bordered w-full ${error ? 'select-error' : ''}`, children: [placeholder && _jsx("option", { value: '', children: placeholder }), options.map((option) => (_jsx("option", { value: option.value, children: option.label }, option.value)))] }), error && (_jsx("div", { className: 'label', children: _jsx("span", { className: 'label-text-alt text-error', children: error.message }) }))] }));
5
+ }
6
+ //# sourceMappingURL=form-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-select.js","sourceRoot":"","sources":["../../src/forms/form-select.tsx"],"names":[],"mappings":";AAmBA,MAAM,UAAU,UAAU,CAAwB,EAChD,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,OAAO,EACP,WAAW,EACX,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,GACG;IACnB,MAAM,QAAQ,GAAG,SAAS,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;IAExC,OAAO,CACL,eAAK,SAAS,EAAE,gBAAgB,SAAS,EAAE,aACzC,gBAAO,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAC,OAAO,YACzC,gBAAM,SAAS,EAAC,YAAY,aACzB,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,iBAAiB,kBAAS,IAClD,GACD,EACR,kBACE,EAAE,EAAE,QAAQ,KACR,QAAQ,CAAC,IAAI,CAAC,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,iCAAiC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,aAExE,WAAW,IAAI,iBAAQ,KAAK,EAAC,EAAE,YAAE,WAAW,GAAU,EACtD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,iBAA2B,KAAK,EAAE,MAAM,CAAC,KAAK,YAC3C,MAAM,CAAC,KAAK,IADF,MAAM,CAAC,KAAK,CAEhB,CACV,CAAC,IACK,EACR,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,OAAO,YACpB,eAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,CAAC,OAAO,GAAQ,GAC9D,CACP,IACG,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { FieldError, FieldValues, Path, UseFormRegister } from 'react-hook-form';
2
+ interface FormTextareaProps<T extends FieldValues> {
3
+ label?: string;
4
+ name: Path<T>;
5
+ register: UseFormRegister<T>;
6
+ error?: FieldError;
7
+ placeholder?: string;
8
+ rows?: number;
9
+ className?: string;
10
+ required?: boolean;
11
+ disabled?: boolean;
12
+ }
13
+ export declare function FormTextarea<T extends FieldValues>({ label, name, register, error, placeholder, rows, className, required, disabled, }: FormTextareaProps<T>): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=form-textarea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-textarea.d.ts","sourceRoot":"","sources":["../../src/forms/form-textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAErF,UAAU,iBAAiB,CAAC,CAAC,SAAS,WAAW;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACb,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,EAClD,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,IAAQ,EACR,SAAc,EACd,QAAgB,EAChB,QAAgB,GACjB,EAAE,iBAAiB,CAAC,CAAC,CAAC,2CA4BtB"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function FormTextarea({ label, name, register, error, placeholder, rows = 3, className = '', required = false, disabled = false, }) {
3
+ const textareaId = `field-${String(name)}`;
4
+ return (_jsxs("div", { className: `form-control ${className}`, children: [label && (_jsx("label", { htmlFor: textareaId, className: 'label', children: _jsxs("span", { className: 'label-text', children: [label, required && _jsx("span", { className: 'text-error ml-1', children: "*" })] }) })), _jsx("textarea", { id: textareaId, ...register(name), disabled: disabled, placeholder: placeholder, rows: rows, className: `textarea textarea-bordered w-full ${error ? 'textarea-error' : ''}` }), error && (_jsx("div", { className: 'label', children: _jsx("span", { className: 'label-text-alt text-error', children: error.message }) }))] }));
5
+ }
6
+ //# sourceMappingURL=form-textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-textarea.js","sourceRoot":"","sources":["../../src/forms/form-textarea.tsx"],"names":[],"mappings":";AAcA,MAAM,UAAU,YAAY,CAAwB,EAClD,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,IAAI,GAAG,CAAC,EACR,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,GACK;IACrB,MAAM,UAAU,GAAG,SAAS,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;IAE1C,OAAO,CACL,eAAK,SAAS,EAAE,gBAAgB,SAAS,EAAE,aACxC,KAAK,IAAI,CACR,gBAAO,OAAO,EAAE,UAAU,EAAE,SAAS,EAAC,OAAO,YAC3C,gBAAM,SAAS,EAAC,YAAY,aACzB,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,iBAAiB,kBAAS,IAClD,GACD,CACT,EACD,mBACE,EAAE,EAAE,UAAU,KACV,QAAQ,CAAC,IAAI,CAAC,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,qCAAqC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,GAC/E,EACD,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,OAAO,YACpB,eAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,CAAC,OAAO,GAAQ,GAC9D,CACP,IACG,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { FormField } from './form-field.js';
2
+ export { FormSelect } from './form-select.js';
3
+ export { FormTextarea } from './form-textarea.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { FormField } from './form-field.js';
2
+ export { FormSelect } from './form-select.js';
3
+ export { FormTextarea } from './form-textarea.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,12 @@
1
+ export { Modal } from './modal.js';
2
+ export { PageHeader } from './page-header.js';
3
+ export { LoadingSpinner } from './feedback/loading-spinner.js';
4
+ export { ErrorBox } from './feedback/error-box.js';
5
+ export { EmptyState } from './feedback/empty-state.js';
6
+ export { ToastProvider, useToast, type Toast, type ToastType } from './feedback/toast-provider.js';
7
+ export { StatCard } from './data/stat-card.js';
8
+ export { DataTable } from './data/data-table.js';
9
+ export { FormField } from './forms/form-field.js';
10
+ export { FormSelect } from './forms/form-select.js';
11
+ export { FormTextarea } from './forms/form-textarea.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAGlG,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ // Layout
2
+ export { Modal } from './modal.js';
3
+ export { PageHeader } from './page-header.js';
4
+ // Feedback
5
+ export { LoadingSpinner } from './feedback/loading-spinner.js';
6
+ export { ErrorBox } from './feedback/error-box.js';
7
+ export { EmptyState } from './feedback/empty-state.js';
8
+ export { ToastProvider, useToast } from './feedback/toast-provider.js';
9
+ // Data
10
+ export { StatCard } from './data/stat-card.js';
11
+ export { DataTable } from './data/data-table.js';
12
+ // Forms
13
+ export { FormField } from './forms/form-field.js';
14
+ export { FormSelect } from './forms/form-select.js';
15
+ export { FormTextarea } from './forms/form-textarea.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAA8B,MAAM,8BAA8B,CAAA;AAElG,OAAO;AACP,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEhD,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from 'react';
2
+ interface ModalProps {
3
+ isOpen: boolean;
4
+ onClose: () => void;
5
+ title: string;
6
+ subtitle?: string;
7
+ children: ReactNode;
8
+ size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';
9
+ className?: string;
10
+ }
11
+ export declare function Modal({ isOpen, onClose, title, subtitle, children, size, className, }: ModalProps): import("react/jsx-runtime").JSX.Element | null;
12
+ export {};
13
+ //# sourceMappingURL=modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../src/modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,UAAU,UAAU;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,CAAA;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAA;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAUD,wBAAgB,KAAK,CAAC,EACpB,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,IAAW,EACX,SAAc,GACf,EAAE,UAAU,kDA+BZ"}
package/dist/modal.js ADDED
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { XMarkIcon } from '@heroicons/react/24/outline';
3
+ const sizeClasses = {
4
+ sm: 'max-w-sm',
5
+ md: 'max-w-md',
6
+ lg: 'max-w-lg',
7
+ xl: 'max-w-xl',
8
+ '2xl': 'max-w-2xl',
9
+ };
10
+ export function Modal({ isOpen, onClose, title, subtitle, children, size = 'lg', className = '', }) {
11
+ if (!isOpen)
12
+ return null;
13
+ return (_jsxs("div", { className: 'modal modal-open', role: 'dialog', "aria-modal": 'true', children: [_jsxs("div", { className: `modal-box p-0 overflow-hidden w-[calc(100%-2rem)] sm:w-full ${sizeClasses[size]} ${className}`, children: [_jsxs("div", { className: 'flex items-center justify-between px-4 sm:px-6 py-3 sm:py-4 border-b border-base-300 bg-base-200', children: [_jsxs("div", { children: [_jsx("h3", { className: 'text-lg font-semibold', children: title }), subtitle && _jsx("p", { className: 'text-sm text-base-content/60', children: subtitle })] }), _jsx("button", { type: 'button', onClick: onClose, className: 'btn btn-ghost btn-sm btn-circle', "aria-label": 'Close modal', children: _jsx(XMarkIcon, { className: 'w-5 h-5' }) })] }), children] }), _jsx("button", { type: 'button', className: 'modal-backdrop', onClick: onClose, "aria-label": 'Close modal', tabIndex: 0 })] }));
14
+ }
15
+ //# sourceMappingURL=modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.js","sourceRoot":"","sources":["../src/modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAavD,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,WAAW;CACnB,CAAA;AAED,MAAM,UAAU,KAAK,CAAC,EACpB,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,EAAE,GACH;IACX,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAExB,OAAO,CACL,eAAK,SAAS,EAAC,kBAAkB,EAAC,IAAI,EAAC,QAAQ,gBAAY,MAAM,aAC/D,eAAK,SAAS,EAAE,+DAA+D,WAAW,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,aAC7G,eAAK,SAAS,EAAC,kGAAkG,aAC/G,0BACE,aAAI,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAM,EACjD,QAAQ,IAAI,YAAG,SAAS,EAAC,8BAA8B,YAAE,QAAQ,GAAK,IACnE,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,iCAAiC,gBAChC,aAAa,YAExB,KAAC,SAAS,IAAC,SAAS,EAAC,SAAS,GAAG,GAC1B,IACL,EACL,QAAQ,IACL,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,gBAAgB,EAC1B,OAAO,EAAE,OAAO,gBACL,aAAa,EACxB,QAAQ,EAAE,CAAC,GACX,IACE,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ interface PageHeaderProps {
3
+ title: ReactNode;
4
+ subtitle?: string;
5
+ action?: ReactNode;
6
+ }
7
+ export declare function PageHeader({ title, subtitle, action }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=page-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../src/page-header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,eAAe,2CAUtE"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function PageHeader({ title, subtitle, action }) {
3
+ return (_jsxs("div", { className: 'mb-8 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between', children: [_jsxs("div", { children: [_jsx("h1", { className: 'text-2xl sm:text-3xl font-semibold', children: title }), subtitle && _jsx("p", { className: 'mt-2 text-sm opacity-60', children: subtitle })] }), action && _jsx("div", { className: 'flex-shrink-0', children: action })] }));
4
+ }
5
+ //# sourceMappingURL=page-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-header.js","sourceRoot":"","sources":["../src/page-header.tsx"],"names":[],"mappings":";AAQA,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAmB;IACrE,OAAO,CACL,eAAK,SAAS,EAAC,yEAAyE,aACtF,0BACE,aAAI,SAAS,EAAC,oCAAoC,YAAE,KAAK,GAAM,EAC9D,QAAQ,IAAI,YAAG,SAAS,EAAC,yBAAyB,YAAE,QAAQ,GAAK,IAC9D,EACL,MAAM,IAAI,cAAK,SAAS,EAAC,eAAe,YAAE,MAAM,GAAO,IACpD,CACP,CAAA;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@blaze-dev/ui",
3
+ "repository": {
4
+ "type": "git",
5
+ "url": "https://github.com/blaze-it/ui"
6
+ },
7
+ "version": "0.1.0",
8
+ "private": false,
9
+ "description": "Shared React + DaisyUI component library for Blaze projects",
10
+ "type": "module",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.js"
15
+ },
16
+ "./forms": {
17
+ "types": "./dist/forms/index.d.ts",
18
+ "default": "./dist/forms/index.js"
19
+ },
20
+ "./feedback": {
21
+ "types": "./dist/feedback/index.d.ts",
22
+ "default": "./dist/feedback/index.js"
23
+ },
24
+ "./data": {
25
+ "types": "./dist/data/index.d.ts",
26
+ "default": "./dist/data/index.js"
27
+ }
28
+ },
29
+ "types": "./dist/index.d.ts",
30
+ "files": [
31
+ "dist"
32
+ ],
33
+ "peerDependencies": {
34
+ "react": ">=18.0.0",
35
+ "react-dom": ">=18.0.0",
36
+ "@tanstack/react-table": ">=8.0.0",
37
+ "react-hook-form": ">=7.0.0",
38
+ "@heroicons/react": ">=2.0.0"
39
+ },
40
+ "devDependencies": {
41
+ "@heroicons/react": "^2.2.0",
42
+ "@tanstack/react-table": "^8.21.0",
43
+ "@types/react": "^19.0.0",
44
+ "react": "^19.0.0",
45
+ "react-dom": "^19.0.0",
46
+ "react-hook-form": "^7.54.0",
47
+ "typescript": "^5.7.0"
48
+ },
49
+ "scripts": {
50
+ "build": "tsc"
51
+ }
52
+ }