@blaze-dev/ui 0.3.0 → 0.5.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.
- package/dist/action-button.d.ts +27 -0
- package/dist/action-button.d.ts.map +1 -0
- package/dist/action-button.js +18 -0
- package/dist/action-button.js.map +1 -0
- package/dist/breadcrumbs.d.ts +18 -0
- package/dist/breadcrumbs.d.ts.map +1 -0
- package/dist/breadcrumbs.js +12 -0
- package/dist/breadcrumbs.js.map +1 -0
- package/dist/context-menu.d.ts +14 -0
- package/dist/context-menu.d.ts.map +1 -0
- package/dist/context-menu.js +5 -0
- package/dist/context-menu.js.map +1 -0
- package/dist/copy-button.d.ts +8 -0
- package/dist/copy-button.d.ts.map +1 -0
- package/dist/copy-button.js +7 -0
- package/dist/copy-button.js.map +1 -0
- package/dist/danger-zone.d.ts +10 -0
- package/dist/danger-zone.d.ts.map +1 -0
- package/dist/danger-zone.js +5 -0
- package/dist/danger-zone.js.map +1 -0
- package/dist/data/index.d.ts +2 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +2 -0
- package/dist/data/index.js.map +1 -1
- package/dist/data/info-row.d.ts +9 -0
- package/dist/data/info-row.d.ts.map +1 -0
- package/dist/data/info-row.js +5 -0
- package/dist/data/info-row.js.map +1 -0
- package/dist/data/stats-grid.d.ts +14 -0
- package/dist/data/stats-grid.d.ts.map +1 -0
- package/dist/data/stats-grid.js +10 -0
- package/dist/data/stats-grid.js.map +1 -0
- package/dist/feedback/app-error-boundary.d.ts +21 -0
- package/dist/feedback/app-error-boundary.d.ts.map +1 -0
- package/dist/feedback/app-error-boundary.js +80 -0
- package/dist/feedback/app-error-boundary.js.map +1 -0
- package/dist/feedback/async-state.d.ts +18 -0
- package/dist/feedback/async-state.d.ts.map +1 -0
- package/dist/feedback/async-state.js +24 -0
- package/dist/feedback/async-state.js.map +1 -0
- package/dist/feedback/confirm-modal.d.ts +14 -0
- package/dist/feedback/confirm-modal.d.ts.map +1 -0
- package/dist/feedback/confirm-modal.js +19 -0
- package/dist/feedback/confirm-modal.js.map +1 -0
- package/dist/feedback/index.d.ts +4 -0
- package/dist/feedback/index.d.ts.map +1 -1
- package/dist/feedback/index.js +4 -0
- package/dist/feedback/index.js.map +1 -1
- package/dist/feedback/info-alert.d.ts +16 -0
- package/dist/feedback/info-alert.d.ts.map +1 -0
- package/dist/feedback/info-alert.js +11 -0
- package/dist/feedback/info-alert.js.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +10 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use-confirm.d.ts +36 -0
- package/dist/hooks/use-confirm.d.ts.map +1 -0
- package/dist/hooks/use-confirm.js +49 -0
- package/dist/hooks/use-confirm.js.map +1 -0
- package/dist/hooks/use-copy-to-clipboard.d.ts +2 -0
- package/dist/hooks/use-copy-to-clipboard.d.ts.map +1 -0
- package/dist/hooks/use-copy-to-clipboard.js +16 -0
- package/dist/hooks/use-copy-to-clipboard.js.map +1 -0
- package/dist/hooks/use-debounced-search.d.ts +10 -0
- package/dist/hooks/use-debounced-search.d.ts.map +1 -0
- package/dist/hooks/use-debounced-search.js +18 -0
- package/dist/hooks/use-debounced-search.js.map +1 -0
- package/dist/hooks/use-infinite-scroll.d.ts +12 -0
- package/dist/hooks/use-infinite-scroll.d.ts.map +1 -0
- package/dist/hooks/use-infinite-scroll.js +22 -0
- package/dist/hooks/use-infinite-scroll.js.map +1 -0
- package/dist/hooks/use-modal-state.d.ts +20 -0
- package/dist/hooks/use-modal-state.d.ts.map +1 -0
- package/dist/hooks/use-modal-state.js +22 -0
- package/dist/hooks/use-modal-state.js.map +1 -0
- package/dist/hooks/use-mutation-toast.d.ts +25 -0
- package/dist/hooks/use-mutation-toast.d.ts.map +1 -0
- package/dist/hooks/use-mutation-toast.js +48 -0
- package/dist/hooks/use-mutation-toast.js.map +1 -0
- package/dist/hooks/use-page-title.d.ts +5 -0
- package/dist/hooks/use-page-title.d.ts.map +1 -0
- package/dist/hooks/use-page-title.js +10 -0
- package/dist/hooks/use-page-title.js.map +1 -0
- package/dist/hooks/use-persisted-state.d.ts +7 -0
- package/dist/hooks/use-persisted-state.d.ts.map +1 -0
- package/dist/hooks/use-persisted-state.js +34 -0
- package/dist/hooks/use-persisted-state.js.map +1 -0
- package/dist/hooks/use-theme.d.ts +8 -0
- package/dist/hooks/use-theme.d.ts.map +1 -0
- package/dist/hooks/use-theme.js +26 -0
- package/dist/hooks/use-theme.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/status-badge.d.ts +12 -0
- package/dist/status-badge.d.ts.map +1 -0
- package/dist/status-badge.js +23 -0
- package/dist/status-badge.js.map +1 -0
- package/dist/tabs.d.ts +15 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +8 -0
- package/dist/tabs.js.map +1 -0
- package/dist/utils/date-utils.d.ts +31 -0
- package/dist/utils/date-utils.d.ts.map +1 -0
- package/dist/utils/date-utils.js +78 -0
- package/dist/utils/date-utils.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +23 -2
|
@@ -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"}
|
package/dist/data/index.d.ts
CHANGED
package/dist/data/index.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/data/index.js
CHANGED
package/dist/data/index.js.map
CHANGED
|
@@ -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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Component, type ReactNode } from 'react';
|
|
2
|
+
interface Props {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
interface State {
|
|
6
|
+
hasError: boolean;
|
|
7
|
+
error: Error | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Full-page error boundary with retry and navigation.
|
|
11
|
+
* Uses inline styles intentionally — error boundaries must not depend on CSS
|
|
12
|
+
* since the CSS may be the thing that's broken.
|
|
13
|
+
*/
|
|
14
|
+
export declare class AppErrorBoundary extends Component<Props, State> {
|
|
15
|
+
constructor(props: Props);
|
|
16
|
+
static getDerivedStateFromError(error: Error): State;
|
|
17
|
+
handleReset: () => void;
|
|
18
|
+
render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=app-error-boundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-error-boundary.d.ts","sourceRoot":"","sources":["../../src/feedback/app-error-boundary.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjD,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,UAAU,KAAK;IACb,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC/C,KAAK,EAAE,KAAK;IAKxB,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IAIpD,WAAW,aAEV;IAED,MAAM;CAoHP"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Component } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Full-page error boundary with retry and navigation.
|
|
5
|
+
* Uses inline styles intentionally — error boundaries must not depend on CSS
|
|
6
|
+
* since the CSS may be the thing that's broken.
|
|
7
|
+
*/
|
|
8
|
+
export class AppErrorBoundary extends Component {
|
|
9
|
+
constructor(props) {
|
|
10
|
+
super(props);
|
|
11
|
+
this.state = { hasError: false, error: null };
|
|
12
|
+
}
|
|
13
|
+
static getDerivedStateFromError(error) {
|
|
14
|
+
return { hasError: true, error };
|
|
15
|
+
}
|
|
16
|
+
handleReset = () => {
|
|
17
|
+
this.setState({ hasError: false, error: null });
|
|
18
|
+
};
|
|
19
|
+
render() {
|
|
20
|
+
if (!this.state.hasError) {
|
|
21
|
+
return this.props.children;
|
|
22
|
+
}
|
|
23
|
+
const { error } = this.state;
|
|
24
|
+
return (_jsx("div", { style: {
|
|
25
|
+
minHeight: '100vh',
|
|
26
|
+
display: 'flex',
|
|
27
|
+
alignItems: 'center',
|
|
28
|
+
justifyContent: 'center',
|
|
29
|
+
padding: '24px',
|
|
30
|
+
fontFamily: 'system-ui, -apple-system, sans-serif',
|
|
31
|
+
background: '#1d232a',
|
|
32
|
+
color: '#a6adba',
|
|
33
|
+
}, children: _jsxs("div", { style: {
|
|
34
|
+
maxWidth: '480px',
|
|
35
|
+
width: '100%',
|
|
36
|
+
background: '#2a323c',
|
|
37
|
+
borderRadius: '16px',
|
|
38
|
+
padding: '32px',
|
|
39
|
+
textAlign: 'center',
|
|
40
|
+
}, children: [_jsx("h1", { style: { fontSize: '20px', fontWeight: 700, color: '#fff', margin: '0 0 8px' }, children: "Something went wrong" }), _jsx("p", { style: { fontSize: '14px', margin: '0 0 24px', opacity: 0.6 }, children: "The application encountered an unexpected error." }), _jsxs("div", { style: { display: 'flex', gap: '8px', justifyContent: 'center' }, children: [_jsx("button", { type: 'button', onClick: this.handleReset, style: {
|
|
41
|
+
padding: '8px 20px',
|
|
42
|
+
borderRadius: '8px',
|
|
43
|
+
border: 'none',
|
|
44
|
+
background: '#661ae6',
|
|
45
|
+
color: '#fff',
|
|
46
|
+
fontWeight: 600,
|
|
47
|
+
fontSize: '14px',
|
|
48
|
+
cursor: 'pointer',
|
|
49
|
+
}, children: "Try Again" }), _jsx("button", { type: 'button', onClick: () => { window.location.href = '/'; }, style: {
|
|
50
|
+
padding: '8px 20px',
|
|
51
|
+
borderRadius: '8px',
|
|
52
|
+
border: '1px solid rgba(255,255,255,0.1)',
|
|
53
|
+
background: 'transparent',
|
|
54
|
+
color: '#a6adba',
|
|
55
|
+
fontWeight: 600,
|
|
56
|
+
fontSize: '14px',
|
|
57
|
+
cursor: 'pointer',
|
|
58
|
+
}, children: "Go Home" })] }), _jsxs("details", { style: { marginTop: '24px', textAlign: 'left' }, children: [_jsx("summary", { style: { cursor: 'pointer', fontSize: '12px', opacity: 0.4, textAlign: 'center' }, children: "Show error details" }), _jsxs("div", { style: {
|
|
59
|
+
marginTop: '8px',
|
|
60
|
+
background: '#1d232a',
|
|
61
|
+
borderRadius: '8px',
|
|
62
|
+
padding: '12px',
|
|
63
|
+
overflow: 'auto',
|
|
64
|
+
}, children: [_jsx("p", { style: {
|
|
65
|
+
fontSize: '12px',
|
|
66
|
+
fontFamily: 'monospace',
|
|
67
|
+
color: '#ef4444',
|
|
68
|
+
margin: '0 0 8px',
|
|
69
|
+
wordBreak: 'break-all',
|
|
70
|
+
}, children: error?.message }), error?.stack && (_jsx("pre", { style: {
|
|
71
|
+
fontSize: '10px',
|
|
72
|
+
fontFamily: 'monospace',
|
|
73
|
+
opacity: 0.5,
|
|
74
|
+
margin: 0,
|
|
75
|
+
whiteSpace: 'pre-wrap',
|
|
76
|
+
wordBreak: 'break-all',
|
|
77
|
+
}, children: error.stack }))] })] })] }) }));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=app-error-boundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-error-boundary.js","sourceRoot":"","sources":["../../src/feedback/app-error-boundary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface AsyncStateProps {
|
|
3
|
+
isLoading: boolean;
|
|
4
|
+
error?: Error | string | {
|
|
5
|
+
message?: string;
|
|
6
|
+
} | null;
|
|
7
|
+
onRetry?: () => void;
|
|
8
|
+
loadingText?: string;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* When true, keeps showing the previous children while loading new data
|
|
12
|
+
* instead of replacing content with a spinner. Only shows the spinner
|
|
13
|
+
* on the very first load when no content has been rendered yet.
|
|
14
|
+
*/
|
|
15
|
+
keepContentOnRefetch?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function AsyncState({ isLoading, error, onRetry, loadingText, children, keepContentOnRefetch, }: AsyncStateProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=async-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-state.d.ts","sourceRoot":"","sources":["../../src/feedback/async-state.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAA;AAI9C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACpD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,SAAS,CAAA;IACnB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,KAAK,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,oBAA4B,GAC7B,EAAE,eAAe,2CA8BjB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import { ErrorBox } from './error-box.js';
|
|
4
|
+
import { LoadingSpinner } from './loading-spinner.js';
|
|
5
|
+
export function AsyncState({ isLoading, error, onRetry, loadingText, children, keepContentOnRefetch = false, }) {
|
|
6
|
+
const previousChildrenRef = useRef(null);
|
|
7
|
+
if (!isLoading && !error) {
|
|
8
|
+
previousChildrenRef.current = children;
|
|
9
|
+
}
|
|
10
|
+
if (error) {
|
|
11
|
+
previousChildrenRef.current = null;
|
|
12
|
+
}
|
|
13
|
+
if (isLoading) {
|
|
14
|
+
if (keepContentOnRefetch && previousChildrenRef.current != null) {
|
|
15
|
+
return (_jsxs("div", { className: 'relative', children: [_jsx("div", { className: 'opacity-60 pointer-events-none', children: previousChildrenRef.current }), _jsx("div", { className: 'absolute inset-x-0 top-8 flex justify-center', children: _jsx(LoadingSpinner, { size: 'sm', text: loadingText }) })] }));
|
|
16
|
+
}
|
|
17
|
+
return _jsx(LoadingSpinner, { text: loadingText });
|
|
18
|
+
}
|
|
19
|
+
if (error) {
|
|
20
|
+
return _jsx(ErrorBox, { error: error, onRetry: onRetry });
|
|
21
|
+
}
|
|
22
|
+
return _jsx(_Fragment, { children: children });
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=async-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-state.js","sourceRoot":"","sources":["../../src/feedback/async-state.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,MAAM,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAgBrD,MAAM,UAAU,UAAU,CAAC,EACzB,SAAS,EACT,KAAK,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,oBAAoB,GAAG,KAAK,GACZ;IAChB,MAAM,mBAAmB,GAAG,MAAM,CAAY,IAAI,CAAC,CAAA;IAEnD,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,mBAAmB,CAAC,OAAO,GAAG,QAAQ,CAAA;IACxC,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAA;IACpC,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,oBAAoB,IAAI,mBAAmB,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAChE,OAAO,CACL,eAAK,SAAS,EAAC,UAAU,aACvB,cAAK,SAAS,EAAC,gCAAgC,YAAE,mBAAmB,CAAC,OAAO,GAAO,EACnF,cAAK,SAAS,EAAC,8CAA8C,YAC3D,KAAC,cAAc,IAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAE,WAAW,GAAI,GAC3C,IACF,CACP,CAAA;QACH,CAAC;QACD,OAAO,KAAC,cAAc,IAAC,IAAI,EAAE,WAAW,GAAI,CAAA;IAC9C,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAI,CAAA;IACrD,CAAC;IAED,OAAO,4BAAG,QAAQ,GAAI,CAAA;AACxB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface ConfirmModalProps {
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
onClose: () => void;
|
|
5
|
+
onConfirm: () => void | Promise<void>;
|
|
6
|
+
title?: string;
|
|
7
|
+
message: ReactNode;
|
|
8
|
+
confirmLabel?: string;
|
|
9
|
+
cancelLabel?: string;
|
|
10
|
+
variant?: 'danger' | 'warning' | 'default';
|
|
11
|
+
isLoading?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function ConfirmModal({ isOpen, onClose, onConfirm, title, message, confirmLabel, cancelLabel, variant, isLoading: externalLoading, }: ConfirmModalProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=confirm-modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-modal.d.ts","sourceRoot":"","sources":["../../src/feedback/confirm-modal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAA;AAGhD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,SAAS,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAiB,EACjB,OAAO,EACP,YAAwB,EACxB,WAAsB,EACtB,OAAmB,EACnB,SAAS,EAAE,eAAe,GAC3B,EAAE,iBAAiB,2CAmCnB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Modal } from '../modal.js';
|
|
4
|
+
export function ConfirmModal({ isOpen, onClose, onConfirm, title = 'Confirm', message, confirmLabel = 'Confirm', cancelLabel = 'Cancel', variant = 'default', isLoading: externalLoading, }) {
|
|
5
|
+
const [internalLoading, setInternalLoading] = useState(false);
|
|
6
|
+
const isLoading = externalLoading ?? internalLoading;
|
|
7
|
+
const handleConfirm = async () => {
|
|
8
|
+
setInternalLoading(true);
|
|
9
|
+
try {
|
|
10
|
+
await onConfirm();
|
|
11
|
+
}
|
|
12
|
+
finally {
|
|
13
|
+
setInternalLoading(false);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const btnClass = variant === 'danger' ? 'btn-error' : variant === 'warning' ? 'btn-warning' : 'btn-primary';
|
|
17
|
+
return (_jsxs(Modal, { isOpen: isOpen, onClose: onClose, title: title, children: [_jsx("div", { className: 'py-2', children: typeof message === 'string' ? _jsx("p", { children: message }) : message }), _jsxs("div", { className: 'modal-action', children: [_jsx("button", { type: 'button', className: 'btn btn-ghost btn-sm', onClick: onClose, disabled: isLoading, children: cancelLabel }), _jsxs("button", { type: 'button', className: `btn ${btnClass} btn-sm`, onClick: handleConfirm, disabled: isLoading, children: [isLoading && _jsx("span", { className: 'loading loading-spinner loading-xs' }), confirmLabel] })] })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=confirm-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-modal.js","sourceRoot":"","sources":["../../src/feedback/confirm-modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAcnC,MAAM,UAAU,YAAY,CAAC,EAC3B,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,GAAG,SAAS,EACjB,OAAO,EACP,YAAY,GAAG,SAAS,EACxB,WAAW,GAAG,QAAQ,EACtB,OAAO,GAAG,SAAS,EACnB,SAAS,EAAE,eAAe,GACR;IAClB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,eAAe,IAAI,eAAe,CAAA;IAEpD,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACxB,IAAI,CAAC;YACH,MAAM,SAAS,EAAE,CAAA;QACnB,CAAC;gBAAS,CAAC;YACT,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC,CAAA;IAED,MAAM,QAAQ,GACZ,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAA;IAE5F,OAAO,CACL,MAAC,KAAK,IAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,aACnD,cAAK,SAAS,EAAC,MAAM,YAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAI,OAAO,GAAK,CAAC,CAAC,CAAC,OAAO,GAAO,EACtF,eAAK,SAAS,EAAC,cAAc,aAC3B,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,sBAAsB,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,YACzF,WAAW,GACL,EACT,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,OAAO,QAAQ,SAAS,EACnC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,SAAS,aAElB,SAAS,IAAI,eAAM,SAAS,EAAC,oCAAoC,GAAG,EACpE,YAAY,IACN,IACL,IACA,CACT,CAAA;AACH,CAAC"}
|
package/dist/feedback/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
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';
|
|
6
|
+
export { AsyncState, type AsyncStateProps } from './async-state.js';
|
|
7
|
+
export { ConfirmModal, type ConfirmModalProps } from './confirm-modal.js';
|
|
8
|
+
export { AppErrorBoundary } from './app-error-boundary.js';
|
|
5
9
|
//# 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;AACzF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA"}
|
package/dist/feedback/index.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
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';
|
|
6
|
+
export { AsyncState } from './async-state.js';
|
|
7
|
+
export { ConfirmModal } from './confirm-modal.js';
|
|
8
|
+
export { AppErrorBoundary } from './app-error-boundary.js';
|
|
5
9
|
//# 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;AACzF,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,YAAY,EAA0B,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,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,10 @@
|
|
|
1
|
+
export { useCopyToClipboard } from './use-copy-to-clipboard.js';
|
|
2
|
+
export { useMutationToast, type MutationToastOptions } from './use-mutation-toast.js';
|
|
3
|
+
export { useModalState, useItemModal } from './use-modal-state.js';
|
|
4
|
+
export { useDebouncedSearch } from './use-debounced-search.js';
|
|
5
|
+
export { usePersistedState } from './use-persisted-state.js';
|
|
6
|
+
export { usePageTitle } from './use-page-title.js';
|
|
7
|
+
export { useTheme } from './use-theme.js';
|
|
8
|
+
export { useConfirm, type ConfirmOptions, type ConfirmModalState } from './use-confirm.js';
|
|
9
|
+
export { useInfiniteScroll } from './use-infinite-scroll.js';
|
|
10
|
+
//# 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;AAC/D,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { useCopyToClipboard } from './use-copy-to-clipboard.js';
|
|
2
|
+
export { useMutationToast } from './use-mutation-toast.js';
|
|
3
|
+
export { useModalState, useItemModal } from './use-modal-state.js';
|
|
4
|
+
export { useDebouncedSearch } from './use-debounced-search.js';
|
|
5
|
+
export { usePersistedState } from './use-persisted-state.js';
|
|
6
|
+
export { usePageTitle } from './use-page-title.js';
|
|
7
|
+
export { useTheme } from './use-theme.js';
|
|
8
|
+
export { useConfirm } from './use-confirm.js';
|
|
9
|
+
export { useInfiniteScroll } from './use-infinite-scroll.js';
|
|
10
|
+
//# 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;AAC/D,OAAO,EAAE,gBAAgB,EAA6B,MAAM,yBAAyB,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,UAAU,EAA+C,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
|