@blaze-dev/ui 0.3.0 → 0.4.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 (57) hide show
  1. package/dist/action-button.d.ts +27 -0
  2. package/dist/action-button.d.ts.map +1 -0
  3. package/dist/action-button.js +18 -0
  4. package/dist/action-button.js.map +1 -0
  5. package/dist/breadcrumbs.d.ts +18 -0
  6. package/dist/breadcrumbs.d.ts.map +1 -0
  7. package/dist/breadcrumbs.js +12 -0
  8. package/dist/breadcrumbs.js.map +1 -0
  9. package/dist/context-menu.d.ts +14 -0
  10. package/dist/context-menu.d.ts.map +1 -0
  11. package/dist/context-menu.js +5 -0
  12. package/dist/context-menu.js.map +1 -0
  13. package/dist/copy-button.d.ts +8 -0
  14. package/dist/copy-button.d.ts.map +1 -0
  15. package/dist/copy-button.js +7 -0
  16. package/dist/copy-button.js.map +1 -0
  17. package/dist/danger-zone.d.ts +10 -0
  18. package/dist/danger-zone.d.ts.map +1 -0
  19. package/dist/danger-zone.js +5 -0
  20. package/dist/danger-zone.js.map +1 -0
  21. package/dist/data/index.d.ts +2 -0
  22. package/dist/data/index.d.ts.map +1 -1
  23. package/dist/data/index.js +2 -0
  24. package/dist/data/index.js.map +1 -1
  25. package/dist/data/info-row.d.ts +9 -0
  26. package/dist/data/info-row.d.ts.map +1 -0
  27. package/dist/data/info-row.js +5 -0
  28. package/dist/data/info-row.js.map +1 -0
  29. package/dist/data/stats-grid.d.ts +14 -0
  30. package/dist/data/stats-grid.d.ts.map +1 -0
  31. package/dist/data/stats-grid.js +10 -0
  32. package/dist/data/stats-grid.js.map +1 -0
  33. package/dist/feedback/index.d.ts +1 -0
  34. package/dist/feedback/index.d.ts.map +1 -1
  35. package/dist/feedback/index.js +1 -0
  36. package/dist/feedback/index.js.map +1 -1
  37. package/dist/feedback/info-alert.d.ts +16 -0
  38. package/dist/feedback/info-alert.d.ts.map +1 -0
  39. package/dist/feedback/info-alert.js +11 -0
  40. package/dist/feedback/info-alert.js.map +1 -0
  41. package/dist/hooks/index.d.ts +2 -0
  42. package/dist/hooks/index.d.ts.map +1 -0
  43. package/dist/hooks/index.js +2 -0
  44. package/dist/hooks/index.js.map +1 -0
  45. package/dist/hooks/use-copy-to-clipboard.d.ts +2 -0
  46. package/dist/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  47. package/dist/hooks/use-copy-to-clipboard.js +16 -0
  48. package/dist/hooks/use-copy-to-clipboard.js.map +1 -0
  49. package/dist/index.d.ts +10 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +12 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/status-badge.d.ts +12 -0
  54. package/dist/status-badge.d.ts.map +1 -0
  55. package/dist/status-badge.js +23 -0
  56. package/dist/status-badge.js.map +1 -0
  57. package/package.json +5 -1
@@ -0,0 +1,27 @@
1
+ import type { ReactNode } from 'react';
2
+ declare const variantClasses: {
3
+ readonly primary: "btn-primary";
4
+ readonly secondary: "btn-secondary";
5
+ readonly ghost: "btn-ghost";
6
+ readonly error: "btn-error";
7
+ readonly outline: "btn-outline";
8
+ };
9
+ declare const sizeClasses: {
10
+ readonly xs: "btn-xs";
11
+ readonly sm: "btn-sm";
12
+ readonly md: "";
13
+ readonly lg: "btn-lg";
14
+ };
15
+ interface ActionButtonProps {
16
+ children: ReactNode;
17
+ onClick?: () => void;
18
+ isLoading?: boolean;
19
+ disabled?: boolean;
20
+ variant?: keyof typeof variantClasses;
21
+ size?: keyof typeof sizeClasses;
22
+ className?: string;
23
+ type?: 'button' | 'submit';
24
+ }
25
+ export declare function ActionButton({ children, onClick, isLoading, disabled, variant, size, className, type, }: ActionButtonProps): import("react/jsx-runtime").JSX.Element;
26
+ export {};
27
+ //# sourceMappingURL=action-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-button.d.ts","sourceRoot":"","sources":["../src/action-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,QAAA,MAAM,cAAc;;;;;;CAMV,CAAA;AAEV,QAAA,MAAM,WAAW;;;;;CAKP,CAAA;AAEV,UAAU,iBAAiB;IACzB,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,OAAO,cAAc,CAAA;IACrC,IAAI,CAAC,EAAE,MAAM,OAAO,WAAW,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,OAAO,EACP,SAAiB,EACjB,QAAgB,EAChB,OAAmB,EACnB,IAAW,EACX,SAAc,EACd,IAAe,GAChB,EAAE,iBAAiB,2CAYnB"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const variantClasses = {
3
+ primary: 'btn-primary',
4
+ secondary: 'btn-secondary',
5
+ ghost: 'btn-ghost',
6
+ error: 'btn-error',
7
+ outline: 'btn-outline',
8
+ };
9
+ const sizeClasses = {
10
+ xs: 'btn-xs',
11
+ sm: 'btn-sm',
12
+ md: '',
13
+ lg: 'btn-lg',
14
+ };
15
+ export function ActionButton({ children, onClick, isLoading = false, disabled = false, variant = 'primary', size = 'sm', className = '', type = 'button', }) {
16
+ return (_jsxs("button", { type: type, onClick: onClick, disabled: disabled || isLoading, className: `btn ${variantClasses[variant]} ${sizeClasses[size]} ${className}`, children: [isLoading && _jsx("span", { className: 'loading loading-spinner loading-xs' }), children] }));
17
+ }
18
+ //# sourceMappingURL=action-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-button.js","sourceRoot":"","sources":["../src/action-button.tsx"],"names":[],"mappings":";AAEA,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,eAAe;IAC1B,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;CACd,CAAA;AAEV,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,QAAQ;CACJ,CAAA;AAaV,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,OAAO,EACP,SAAS,GAAG,KAAK,EACjB,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,EAAE,EACd,IAAI,GAAG,QAAQ,GACG;IAClB,OAAO,CACL,kBACE,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAC/B,SAAS,EAAE,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,aAE5E,SAAS,IAAI,eAAM,SAAS,EAAC,oCAAoC,GAAG,EACpE,QAAQ,IACF,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ReactNode } from 'react';
2
+ interface BreadcrumbItem {
3
+ label: ReactNode;
4
+ to?: string;
5
+ params?: Record<string, string>;
6
+ }
7
+ interface BreadcrumbsProps {
8
+ items: BreadcrumbItem[];
9
+ className?: string;
10
+ renderLink?: (props: {
11
+ to: string;
12
+ params?: Record<string, string>;
13
+ children: ReactNode;
14
+ }) => ReactNode;
15
+ }
16
+ export declare function Breadcrumbs({ items, className, renderLink }: BreadcrumbsProps): import("react/jsx-runtime").JSX.Element;
17
+ export {};
18
+ //# sourceMappingURL=breadcrumbs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../src/breadcrumbs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,UAAU,cAAc;IACtB,KAAK,EAAE,SAAS,CAAA;IAChB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE,KAAK,SAAS,CAAA;CACxG;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,SAAc,EAAE,UAAU,EAAE,EAAE,gBAAgB,2CAmBlF"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function Breadcrumbs({ items, className = '', renderLink }) {
3
+ return (_jsx("div", { className: `breadcrumbs text-sm ${className}`, children: _jsx("ul", { children: items.map((item, i) => {
4
+ const isLast = i === items.length - 1;
5
+ return (_jsx("li", { className: isLast ? 'font-medium' : undefined, children: item.to && renderLink
6
+ ? renderLink({ to: item.to, params: item.params, children: item.label })
7
+ : item.to
8
+ ? _jsx("a", { href: item.to, children: item.label })
9
+ : item.label }, i));
10
+ }) }) }));
11
+ }
12
+ //# sourceMappingURL=breadcrumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.js","sourceRoot":"","sources":["../src/breadcrumbs.tsx"],"names":[],"mappings":";AAcA,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE,EAAE,UAAU,EAAoB;IACjF,OAAO,CACL,cAAK,SAAS,EAAE,uBAAuB,SAAS,EAAE,YAChD,uBACG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACrB,MAAM,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;gBACrC,OAAO,CACL,aAAY,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,YACtD,IAAI,CAAC,EAAE,IAAI,UAAU;wBACpB,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;wBACxE,CAAC,CAAC,IAAI,CAAC,EAAE;4BACP,CAAC,CAAC,YAAG,IAAI,EAAE,IAAI,CAAC,EAAE,YAAG,IAAI,CAAC,KAAK,GAAK;4BACpC,CAAC,CAAC,IAAI,CAAC,KAAK,IALT,CAAC,CAML,CACN,CAAA;YACH,CAAC,CAAC,GACC,GACD,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from 'react';
2
+ interface MenuItem {
3
+ label: ReactNode;
4
+ onClick: () => void;
5
+ variant?: 'default' | 'danger';
6
+ disabled?: boolean;
7
+ }
8
+ interface ContextMenuProps {
9
+ items: MenuItem[];
10
+ className?: string;
11
+ }
12
+ export declare function ContextMenu({ items, className }: ContextMenuProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=context-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../src/context-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,UAAU,QAAQ;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,SAAc,EAAE,EAAE,gBAAgB,2CAuBtE"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function ContextMenu({ items, className = '' }) {
3
+ return (_jsxs("div", { className: `dropdown dropdown-end ${className}`, children: [_jsx("label", { tabIndex: 0, className: 'btn btn-ghost btn-xs btn-square', children: _jsx("svg", { xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 24 24', strokeWidth: 1.5, stroke: 'currentColor', className: 'w-4 h-4', children: _jsx("path", { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M12 6.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 12.75a.75.75 0 110-1.5.75.75 0 010 1.5zM12 18.75a.75.75 0 110-1.5.75.75 0 010 1.5z' }) }) }), _jsx("ul", { tabIndex: 0, className: 'dropdown-content menu bg-base-300 rounded-2xl w-36 p-2 shadow-xl z-50', children: items.map((item, i) => (_jsx("li", { children: _jsx("button", { onClick: item.onClick, disabled: item.disabled, className: `text-sm rounded-[10px] ${item.variant === 'danger' ? 'text-error' : ''}`, children: item.label }) }, i))) })] }));
4
+ }
5
+ //# sourceMappingURL=context-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.js","sourceRoot":"","sources":["../src/context-menu.tsx"],"names":[],"mappings":";AAcA,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE,EAAoB;IACrE,OAAO,CACL,eAAK,SAAS,EAAE,yBAAyB,SAAS,EAAE,aAClD,gBAAO,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAC,iCAAiC,YAC7D,cAAK,KAAK,EAAC,4BAA4B,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAC,cAAc,EAAC,SAAS,EAAC,SAAS,YACjI,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,kIAAkI,GAAG,GACtL,GACA,EACR,aAAI,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAC,uEAAuE,YAC/F,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,uBACE,iBACE,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,SAAS,EAAE,0BAA0B,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,YAEnF,IAAI,CAAC,KAAK,GACJ,IAPF,CAAC,CAQL,CACN,CAAC,GACC,IACD,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface CopyButtonProps {
2
+ value: string;
3
+ label?: string;
4
+ className?: string;
5
+ }
6
+ export declare function CopyButton({ value, label, className }: CopyButtonProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=copy-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-button.d.ts","sourceRoot":"","sources":["../src/copy-button.tsx"],"names":[],"mappings":"AAEA,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAc,EAAE,EAAE,eAAe,2CAsB3E"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCopyToClipboard } from './hooks/use-copy-to-clipboard.js';
3
+ export function CopyButton({ value, label, className = '' }) {
4
+ const [copied, copy] = useCopyToClipboard();
5
+ return (_jsxs("button", { type: 'button', onClick: () => copy(value), className: `btn btn-ghost btn-sm gap-1.5 ${className}`, title: 'Copy to clipboard', children: [copied ? (_jsx("svg", { xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 24 24', strokeWidth: 1.5, stroke: 'currentColor', className: 'w-4 h-4 text-success', children: _jsx("path", { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M4.5 12.75l6 6 9-13.5' }) })) : (_jsx("svg", { xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 24 24', strokeWidth: 1.5, stroke: 'currentColor', className: 'w-4 h-4', children: _jsx("path", { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M15.666 3.888A2.25 2.25 0 0013.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 01-.75.75H9.75a.75.75 0 01-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 01-2.25 2.25H6.75A2.25 2.25 0 014.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 011.927-.184' }) })), label && _jsx("span", { children: copied ? 'Copied' : label })] }));
6
+ }
7
+ //# sourceMappingURL=copy-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-button.js","sourceRoot":"","sources":["../src/copy-button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAQrE,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE,EAAmB;IAC1E,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAA;IAE3C,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAC1B,SAAS,EAAE,gCAAgC,SAAS,EAAE,EACtD,KAAK,EAAC,mBAAmB,aAExB,MAAM,CAAC,CAAC,CAAC,CACR,cAAK,KAAK,EAAC,4BAA4B,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAC,cAAc,EAAC,SAAS,EAAC,sBAAsB,YAC9I,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,uBAAuB,GAAG,GAC3E,CACP,CAAC,CAAC,CAAC,CACF,cAAK,KAAK,EAAC,4BAA4B,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAC,cAAc,EAAC,SAAS,EAAC,SAAS,YACjI,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,4WAA4W,GAAG,GACha,CACP,EACA,KAAK,IAAI,yBAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAQ,IAC3C,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from 'react';
2
+ interface DangerZoneProps {
3
+ title?: string;
4
+ description: string;
5
+ action: ReactNode;
6
+ className?: string;
7
+ }
8
+ export declare function DangerZone({ title, description, action, className }: DangerZoneProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=danger-zone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"danger-zone.d.ts","sourceRoot":"","sources":["../src/danger-zone.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAqB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAc,EAAE,EAAE,eAAe,2CAUzG"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function DangerZone({ title = 'Danger Zone', description, action, className = '' }) {
3
+ return (_jsx("div", { className: `card bg-error/5 border border-error/20 ${className}`, children: _jsxs("div", { className: 'card-body p-4', children: [_jsx("h3", { className: 'font-semibold text-error text-sm', children: title }), _jsx("p", { className: 'text-base-content/50 text-sm mb-3', children: description }), action] }) }));
4
+ }
5
+ //# sourceMappingURL=danger-zone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"danger-zone.js","sourceRoot":"","sources":["../src/danger-zone.tsx"],"names":[],"mappings":";AASA,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,GAAG,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE,EAAmB;IACxG,OAAO,CACL,cAAK,SAAS,EAAE,0CAA0C,SAAS,EAAE,YACnE,eAAK,SAAS,EAAC,eAAe,aAC5B,aAAI,SAAS,EAAC,kCAAkC,YAAE,KAAK,GAAM,EAC7D,YAAG,SAAS,EAAC,mCAAmC,YAAE,WAAW,GAAK,EACjE,MAAM,IACH,GACF,CACP,CAAA;AACH,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export { StatCard } from './stat-card.js';
2
2
  export { DataTable } from './data-table.js';
3
+ export { InfoRow } from './info-row.js';
4
+ export { StatsGrid } from './stats-grid.js';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
@@ -1,3 +1,5 @@
1
1
  export { StatCard } from './stat-card.js';
2
2
  export { DataTable } from './data-table.js';
3
+ export { InfoRow } from './info-row.js';
4
+ export { StatsGrid } from './stats-grid.js';
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +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"}
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;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ interface InfoRowProps {
3
+ label: string;
4
+ value?: ReactNode;
5
+ className?: string;
6
+ }
7
+ export declare function InfoRow({ label, value, className }: InfoRowProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=info-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info-row.d.ts","sourceRoot":"","sources":["../../src/data/info-row.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAc,EAAE,EAAE,YAAY,2CAOrE"}
@@ -0,0 +1,5 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ export function InfoRow({ label, value, className = '' }) {
3
+ return (_jsxs("div", { className: `flex flex-col sm:flex-row sm:gap-2 min-w-0 ${className}`, children: [_jsxs("span", { className: 'text-base-content/60 shrink-0 text-sm', children: [label, ":"] }), _jsx("span", { className: 'text-base-content/70 min-w-0 break-words text-sm', children: value ?? '—' })] }));
4
+ }
5
+ //# sourceMappingURL=info-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info-row.js","sourceRoot":"","sources":["../../src/data/info-row.tsx"],"names":[],"mappings":";AAQA,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE,EAAgB;IACpE,OAAO,CACL,eAAK,SAAS,EAAE,8CAA8C,SAAS,EAAE,aACvE,gBAAM,SAAS,EAAC,uCAAuC,aAAE,KAAK,SAAS,EACvE,eAAM,SAAS,EAAC,kDAAkD,YAAE,KAAK,IAAI,GAAG,GAAQ,IACpF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from 'react';
2
+ declare const columnClasses: {
3
+ readonly 2: "grid-cols-1 sm:grid-cols-2";
4
+ readonly 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3";
5
+ readonly 4: "grid-cols-2 sm:grid-cols-2 lg:grid-cols-4";
6
+ };
7
+ interface StatsGridProps {
8
+ children: ReactNode;
9
+ columns?: keyof typeof columnClasses;
10
+ className?: string;
11
+ }
12
+ export declare function StatsGrid({ children, columns, className }: StatsGridProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=stats-grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-grid.d.ts","sourceRoot":"","sources":["../../src/data/stats-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,QAAA,MAAM,aAAa;;;;CAIT,CAAA;AAEV,UAAU,cAAc;IACtB,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,OAAO,aAAa,CAAA;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAW,EAAE,SAAc,EAAE,EAAE,cAAc,2CAMlF"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ const columnClasses = {
3
+ 2: 'grid-cols-1 sm:grid-cols-2',
4
+ 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',
5
+ 4: 'grid-cols-2 sm:grid-cols-2 lg:grid-cols-4',
6
+ };
7
+ export function StatsGrid({ children, columns = 2, className = '' }) {
8
+ return (_jsx("div", { className: `grid ${columnClasses[columns]} gap-2 ${className}`, children: children }));
9
+ }
10
+ //# sourceMappingURL=stats-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-grid.js","sourceRoot":"","sources":["../../src/data/stats-grid.tsx"],"names":[],"mappings":";AAEA,MAAM,aAAa,GAAG;IACpB,CAAC,EAAE,4BAA4B;IAC/B,CAAC,EAAE,2CAA2C;IAC9C,CAAC,EAAE,2CAA2C;CACtC,CAAA;AAQV,MAAM,UAAU,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,CAAC,EAAE,SAAS,GAAG,EAAE,EAAkB;IACjF,OAAO,CACL,cAAK,SAAS,EAAE,QAAQ,aAAa,CAAC,OAAO,CAAC,UAAU,SAAS,EAAE,YAChE,QAAQ,GACL,CACP,CAAA;AACH,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export { LoadingSpinner } from './loading-spinner.js';
2
2
  export { ErrorBox } from './error-box.js';
3
3
  export { EmptyState } from './empty-state.js';
4
+ export { InfoAlert } from './info-alert.js';
4
5
  export { ToastProvider, useToast, type Toast, type ToastType } from './toast-provider.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA"}
@@ -1,5 +1,6 @@
1
1
  export { LoadingSpinner } from './loading-spinner.js';
2
2
  export { ErrorBox } from './error-box.js';
3
3
  export { EmptyState } from './empty-state.js';
4
+ export { InfoAlert } from './info-alert.js';
4
5
  export { ToastProvider, useToast } from './toast-provider.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +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"}
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,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAA8B,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,16 @@
1
+ declare const variantClasses: {
2
+ readonly info: "alert-info";
3
+ readonly success: "alert-success";
4
+ readonly warning: "alert-warning";
5
+ readonly error: "alert-error";
6
+ };
7
+ interface InfoAlertProps {
8
+ message: string;
9
+ variant?: keyof typeof variantClasses;
10
+ dismissible?: boolean;
11
+ onDismiss?: () => void;
12
+ className?: string;
13
+ }
14
+ export declare function InfoAlert({ message, variant, dismissible, onDismiss, className, }: InfoAlertProps): import("react/jsx-runtime").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=info-alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info-alert.d.ts","sourceRoot":"","sources":["../../src/feedback/info-alert.tsx"],"names":[],"mappings":"AAAA,QAAA,MAAM,cAAc;;;;;CAKV,CAAA;AAEV,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,OAAO,cAAc,CAAA;IACrC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,OAAgB,EAChB,WAAmB,EACnB,SAAS,EACT,SAAc,GACf,EAAE,cAAc,2CAWhB"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const variantClasses = {
3
+ info: 'alert-info',
4
+ success: 'alert-success',
5
+ warning: 'alert-warning',
6
+ error: 'alert-error',
7
+ };
8
+ export function InfoAlert({ message, variant = 'info', dismissible = false, onDismiss, className = '', }) {
9
+ return (_jsxs("div", { className: `alert ${variantClasses[variant]} ${className}`, children: [_jsx("span", { className: 'text-sm', children: message }), dismissible && onDismiss && (_jsx("button", { type: 'button', onClick: onDismiss, className: 'btn btn-ghost btn-sm btn-circle', "aria-label": 'Dismiss', children: "\u2715" }))] }));
10
+ }
11
+ //# sourceMappingURL=info-alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info-alert.js","sourceRoot":"","sources":["../../src/feedback/info-alert.tsx"],"names":[],"mappings":";AAAA,MAAM,cAAc,GAAG;IACrB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,aAAa;CACZ,CAAA;AAUV,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,EACP,OAAO,GAAG,MAAM,EAChB,WAAW,GAAG,KAAK,EACnB,SAAS,EACT,SAAS,GAAG,EAAE,GACC;IACf,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,cAAc,CAAC,OAAO,CAAC,IAAI,SAAS,EAAE,aAC7D,eAAM,SAAS,EAAC,SAAS,YAAE,OAAO,GAAQ,EACzC,WAAW,IAAI,SAAS,IAAI,CAC3B,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAC,iCAAiC,gBAAY,SAAS,uBAEjG,CACV,IACG,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useCopyToClipboard } from './use-copy-to-clipboard.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { useCopyToClipboard } from './use-copy-to-clipboard.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function useCopyToClipboard(resetMs?: number): [boolean, (text: string) => Promise<void>];
2
+ //# sourceMappingURL=use-copy-to-clipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-copy-to-clipboard.d.ts","sourceRoot":"","sources":["../../src/hooks/use-copy-to-clipboard.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,OAAO,SAAO,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAc7F"}
@@ -0,0 +1,16 @@
1
+ import { useState } from 'react';
2
+ export function useCopyToClipboard(resetMs = 2000) {
3
+ const [copied, setCopied] = useState(false);
4
+ const copy = async (text) => {
5
+ try {
6
+ await navigator.clipboard.writeText(text);
7
+ setCopied(true);
8
+ setTimeout(() => setCopied(false), resetMs);
9
+ }
10
+ catch {
11
+ // Clipboard API may not be available
12
+ }
13
+ };
14
+ return [copied, copy];
15
+ }
16
+ //# sourceMappingURL=use-copy-to-clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-copy-to-clipboard.js","sourceRoot":"","sources":["../../src/hooks/use-copy-to-clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,MAAM,UAAU,kBAAkB,CAAC,OAAO,GAAG,IAAI;IAC/C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE3C,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACzC,SAAS,CAAC,IAAI,CAAC,CAAA;YACf,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACvB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,21 @@
1
1
  export { Modal } from './modal.js';
2
2
  export { PageHeader } from './page-header.js';
3
+ export { Breadcrumbs } from './breadcrumbs.js';
4
+ export { DangerZone } from './danger-zone.js';
5
+ export { ContextMenu } from './context-menu.js';
3
6
  export { LoadingSpinner } from './feedback/loading-spinner.js';
4
7
  export { ErrorBox } from './feedback/error-box.js';
5
8
  export { EmptyState } from './feedback/empty-state.js';
9
+ export { InfoAlert } from './feedback/info-alert.js';
6
10
  export { ToastProvider, useToast, type Toast, type ToastType } from './feedback/toast-provider.js';
7
11
  export { StatCard } from './data/stat-card.js';
8
12
  export { DataTable } from './data/data-table.js';
13
+ export { InfoRow } from './data/info-row.js';
14
+ export { StatsGrid } from './data/stats-grid.js';
15
+ export { ActionButton } from './action-button.js';
16
+ export { CopyButton } from './copy-button.js';
17
+ export { StatusBadge } from './status-badge.js';
18
+ export { useCopyToClipboard } from './hooks/use-copy-to-clipboard.js';
9
19
  export { FormField } from './forms/form-field.js';
10
20
  export { FormSelect } from './forms/form-select.js';
11
21
  export { FormTextarea } from './forms/form-textarea.js';
@@ -1 +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;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
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;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,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,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,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;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
package/dist/index.js CHANGED
@@ -1,14 +1,26 @@
1
1
  // Layout
2
2
  export { Modal } from './modal.js';
3
3
  export { PageHeader } from './page-header.js';
4
+ export { Breadcrumbs } from './breadcrumbs.js';
5
+ export { DangerZone } from './danger-zone.js';
6
+ export { ContextMenu } from './context-menu.js';
4
7
  // Feedback
5
8
  export { LoadingSpinner } from './feedback/loading-spinner.js';
6
9
  export { ErrorBox } from './feedback/error-box.js';
7
10
  export { EmptyState } from './feedback/empty-state.js';
11
+ export { InfoAlert } from './feedback/info-alert.js';
8
12
  export { ToastProvider, useToast } from './feedback/toast-provider.js';
9
13
  // Data
10
14
  export { StatCard } from './data/stat-card.js';
11
15
  export { DataTable } from './data/data-table.js';
16
+ export { InfoRow } from './data/info-row.js';
17
+ export { StatsGrid } from './data/stats-grid.js';
18
+ // Buttons
19
+ export { ActionButton } from './action-button.js';
20
+ export { CopyButton } from './copy-button.js';
21
+ export { StatusBadge } from './status-badge.js';
22
+ // Hooks
23
+ export { useCopyToClipboard } from './hooks/use-copy-to-clipboard.js';
12
24
  // Forms
13
25
  export { FormField } from './forms/form-field.js';
14
26
  export { FormSelect } from './forms/form-select.js';
package/dist/index.js.map CHANGED
@@ -1 +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;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
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;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,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,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,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;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEhD,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAErE,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;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,12 @@
1
+ interface StatusConfig {
2
+ badge: string;
3
+ dot: string;
4
+ }
5
+ interface StatusBadgeProps {
6
+ status: string;
7
+ statusMap?: Record<string, StatusConfig>;
8
+ className?: string;
9
+ }
10
+ export declare function StatusBadge({ status, statusMap, className }: StatusBadgeProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=status-badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-badge.d.ts","sourceRoot":"","sources":["../src/status-badge.tsx"],"names":[],"mappings":"AAAA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAoBD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAc,EAAE,EAAE,gBAAgB,2CAUlF"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const defaultStatusMap = {
3
+ running: { badge: 'badge-success', dot: 'bg-success' },
4
+ connected: { badge: 'badge-success', dot: 'bg-success' },
5
+ active: { badge: 'badge-success', dot: 'bg-success' },
6
+ success: { badge: 'badge-success', dot: 'bg-success' },
7
+ stopped: { badge: 'badge-ghost', dot: 'bg-base-content/30' },
8
+ queued: { badge: 'badge-ghost', dot: 'bg-base-content/30' },
9
+ disconnected: { badge: 'badge-ghost', dot: 'bg-base-content/30' },
10
+ deploying: { badge: 'badge-warning', dot: 'bg-warning animate-pulse' },
11
+ building: { badge: 'badge-warning', dot: 'bg-warning animate-pulse' },
12
+ provisioning: { badge: 'badge-warning', dot: 'bg-warning animate-pulse' },
13
+ deleting: { badge: 'badge-warning', dot: 'bg-warning animate-pulse' },
14
+ error: { badge: 'badge-error', dot: 'bg-error' },
15
+ failed: { badge: 'badge-error', dot: 'bg-error' },
16
+ };
17
+ const fallback = { badge: 'badge-ghost', dot: 'bg-base-content/30' };
18
+ export function StatusBadge({ status, statusMap, className = '' }) {
19
+ const map = statusMap ?? defaultStatusMap;
20
+ const config = map[status] ?? fallback;
21
+ return (_jsxs("span", { className: `badge badge-sm inline-flex items-center gap-1.5 ${config.badge} ${className}`, children: [_jsx("span", { className: `w-1.5 h-1.5 rounded-full ${config.dot}` }), status] }));
22
+ }
23
+ //# sourceMappingURL=status-badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-badge.js","sourceRoot":"","sources":["../src/status-badge.tsx"],"names":[],"mappings":";AAKA,MAAM,gBAAgB,GAAiC;IACrD,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE;IACtD,SAAS,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE;IACxD,MAAM,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE;IACrD,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE;IACtD,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,oBAAoB,EAAE;IAC5D,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,oBAAoB,EAAE;IAC3D,YAAY,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,oBAAoB,EAAE;IACjE,SAAS,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,0BAA0B,EAAE;IACtE,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,0BAA0B,EAAE;IACrE,YAAY,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,0BAA0B,EAAE;IACzE,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,0BAA0B,EAAE;IACrE,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,EAAE;IAChD,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,EAAE;CAClD,CAAA;AAED,MAAM,QAAQ,GAAiB,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAA;AAQlF,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,EAAE,EAAoB;IACjF,MAAM,GAAG,GAAG,SAAS,IAAI,gBAAgB,CAAA;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAA;IAEtC,OAAO,CACL,gBAAM,SAAS,EAAE,mDAAmD,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,aAC7F,eAAM,SAAS,EAAE,4BAA4B,MAAM,CAAC,GAAG,EAAE,GAAI,EAC5D,MAAM,IACF,CACR,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "type": "git",
5
5
  "url": "https://github.com/blaze-it/ui"
6
6
  },
7
- "version": "0.3.0",
7
+ "version": "0.4.0",
8
8
  "private": false,
9
9
  "description": "Shared React + DaisyUI component library for Blaze projects",
10
10
  "type": "module",
@@ -24,6 +24,10 @@
24
24
  "./data": {
25
25
  "types": "./dist/data/index.d.ts",
26
26
  "default": "./dist/data/index.js"
27
+ },
28
+ "./hooks": {
29
+ "types": "./dist/hooks/index.d.ts",
30
+ "default": "./dist/hooks/index.js"
27
31
  }
28
32
  },
29
33
  "types": "./dist/index.d.ts",