@blaze-dev/ui 0.12.0 → 0.13.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/ambient-background.d.ts +8 -0
  2. package/dist/ambient-background.d.ts.map +1 -0
  3. package/dist/ambient-background.js +8 -0
  4. package/dist/ambient-background.js.map +1 -0
  5. package/dist/error-page.d.ts +9 -0
  6. package/dist/error-page.d.ts.map +1 -0
  7. package/dist/error-page.js +9 -0
  8. package/dist/error-page.js.map +1 -0
  9. package/dist/hooks/index.d.ts +2 -0
  10. package/dist/hooks/index.d.ts.map +1 -1
  11. package/dist/hooks/index.js +2 -0
  12. package/dist/hooks/index.js.map +1 -1
  13. package/dist/hooks/use-command-palette-shortcut.d.ts +5 -0
  14. package/dist/hooks/use-command-palette-shortcut.d.ts.map +1 -0
  15. package/dist/hooks/use-command-palette-shortcut.js +17 -0
  16. package/dist/hooks/use-command-palette-shortcut.js.map +1 -0
  17. package/dist/hooks/use-save-confirmation.d.ts +10 -0
  18. package/dist/hooks/use-save-confirmation.d.ts.map +1 -0
  19. package/dist/hooks/use-save-confirmation.js +15 -0
  20. package/dist/hooks/use-save-confirmation.js.map +1 -0
  21. package/dist/index.d.ts +9 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +10 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/metric-card.d.ts +13 -0
  26. package/dist/metric-card.d.ts.map +1 -0
  27. package/dist/metric-card.js +15 -0
  28. package/dist/metric-card.js.map +1 -0
  29. package/dist/not-found-page.d.ts +8 -0
  30. package/dist/not-found-page.d.ts.map +1 -0
  31. package/dist/not-found-page.js +9 -0
  32. package/dist/not-found-page.js.map +1 -0
  33. package/dist/resource-bar.d.ts +11 -0
  34. package/dist/resource-bar.d.ts.map +1 -0
  35. package/dist/resource-bar.js +10 -0
  36. package/dist/resource-bar.js.map +1 -0
  37. package/dist/segmented-control.d.ts +15 -0
  38. package/dist/segmented-control.d.ts.map +1 -0
  39. package/dist/segmented-control.js +10 -0
  40. package/dist/segmented-control.js.map +1 -0
  41. package/dist/user-avatar.d.ts +17 -0
  42. package/dist/user-avatar.d.ts.map +1 -0
  43. package/dist/user-avatar.js +16 -0
  44. package/dist/user-avatar.js.map +1 -0
  45. package/dist/utils/cached-getter.d.ts +14 -0
  46. package/dist/utils/cached-getter.d.ts.map +1 -0
  47. package/dist/utils/cached-getter.js +36 -0
  48. package/dist/utils/cached-getter.js.map +1 -0
  49. package/dist/utils/chunk-error.d.ts +6 -0
  50. package/dist/utils/chunk-error.d.ts.map +1 -0
  51. package/dist/utils/chunk-error.js +12 -0
  52. package/dist/utils/chunk-error.js.map +1 -0
  53. package/dist/utils/index.d.ts +3 -0
  54. package/dist/utils/index.d.ts.map +1 -1
  55. package/dist/utils/index.js +3 -0
  56. package/dist/utils/index.js.map +1 -1
  57. package/dist/utils/recent-history.d.ts +15 -0
  58. package/dist/utils/recent-history.d.ts.map +1 -0
  59. package/dist/utils/recent-history.js +23 -0
  60. package/dist/utils/recent-history.js.map +1 -0
  61. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ export interface AmbientBackgroundProps {
2
+ readonly className?: string;
3
+ }
4
+ /**
5
+ * Decorative ambient blur blobs for auth/public pages.
6
+ */
7
+ export declare function AmbientBackground({ className }: AmbientBackgroundProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=ambient-background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambient-background.d.ts","sourceRoot":"","sources":["../src/ambient-background.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,sBAAsB,2CAOtE"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Decorative ambient blur blobs for auth/public pages.
4
+ */
5
+ export function AmbientBackground({ className }) {
6
+ return (_jsxs("div", { className: className, "aria-hidden": true, children: [_jsx("div", { className: 'absolute -top-[30%] -left-[15%] w-[60%] h-[60%] rounded-full opacity-[0.04] bg-primary blur-[150px]' }), _jsx("div", { className: 'absolute -bottom-[20%] -right-[15%] w-[50%] h-[50%] rounded-full opacity-[0.04] bg-secondary blur-[150px]' })] }));
7
+ }
8
+ //# sourceMappingURL=ambient-background.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambient-background.js","sourceRoot":"","sources":["../src/ambient-background.tsx"],"names":[],"mappings":";AAIA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,SAAS,EAA0B;IACrE,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,kCACvB,cAAK,SAAS,EAAC,qGAAqG,GAAG,EACvH,cAAK,SAAS,EAAC,2GAA2G,GAAG,IACzH,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface ErrorPageProps {
2
+ readonly error: Error;
3
+ readonly homeUrl?: string;
4
+ }
5
+ /**
6
+ * Full-page error display with ambient background.
7
+ */
8
+ export declare function ErrorPage({ error, homeUrl }: ErrorPageProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=error-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-page.d.ts","sourceRoot":"","sources":["../src/error-page.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,OAAa,EAAE,EAAE,cAAc,2CAcjE"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AmbientBackground } from './ambient-background.js';
3
+ /**
4
+ * Full-page error display with ambient background.
5
+ */
6
+ export function ErrorPage({ error, homeUrl = '/' }) {
7
+ return (_jsxs("div", { className: 'min-h-screen flex items-center justify-center bg-base-100 relative overflow-hidden', children: [_jsx(AmbientBackground, {}), _jsxs("div", { className: 'text-center relative z-10 max-w-md px-6', children: [_jsx("h1", { className: 'text-7xl font-bold text-base-content/20 mb-4 tracking-tight', children: "Error" }), _jsx("p", { className: 'text-lg text-base-content/55 mb-2', children: "Something went wrong" }), _jsx("p", { className: 'text-sm text-base-content/35 mb-6 break-words', children: error.message }), _jsx("a", { href: homeUrl, className: 'btn btn-primary', children: "Go Home" })] })] }));
8
+ }
9
+ //# sourceMappingURL=error-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-page.js","sourceRoot":"","sources":["../src/error-page.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAO3D;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,EAAkB;IAChE,OAAO,CACL,eAAK,SAAS,EAAC,oFAAoF,aACjG,KAAC,iBAAiB,KAAG,EACrB,eAAK,SAAS,EAAC,yCAAyC,aACtD,aAAI,SAAS,EAAC,6DAA6D,sBAAW,EACtF,YAAG,SAAS,EAAC,mCAAmC,qCAAyB,EACzE,YAAG,SAAS,EAAC,+CAA+C,YAAE,KAAK,CAAC,OAAO,GAAK,EAChF,YAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAC,iBAAiB,wBAEzC,IACA,IACF,CACP,CAAA;AACH,CAAC"}
@@ -10,5 +10,7 @@ export { useConfirm, type ConfirmOptions, type ConfirmModalState } from './use-c
10
10
  export { useInfiniteScroll } from './use-infinite-scroll.js';
11
11
  export { useDatePeriodFilter, type DatePeriodFilter, type DefaultPeriod } from './use-date-period-filter.js';
12
12
  export { useApexChart } from './use-apex-chart.js';
13
+ export { useCommandPaletteShortcut } from './use-command-palette-shortcut.js';
14
+ export { useSaveConfirmation } from './use-save-confirmation.js';
13
15
  export { useIntegrationStatus, checkConnectedField, checkIsConnectedField, type IntegrationStatus, type UseIntegrationStatusOptions, type IntegrationStatusResult, } from './use-integration-status.js';
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,GAC7B,MAAM,6BAA6B,CAAA"}
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,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,GAC7B,MAAM,6BAA6B,CAAA"}
@@ -10,5 +10,7 @@ export { useConfirm } from './use-confirm.js';
10
10
  export { useInfiniteScroll } from './use-infinite-scroll.js';
11
11
  export { useDatePeriodFilter } from './use-date-period-filter.js';
12
12
  export { useApexChart } from './use-apex-chart.js';
13
+ export { useCommandPaletteShortcut } from './use-command-palette-shortcut.js';
14
+ export { useSaveConfirmation } from './use-save-confirmation.js';
13
15
  export { useIntegrationStatus, checkConnectedField, checkIsConnectedField, } from './use-integration-status.js';
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +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,YAAY,EAAmB,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAA+C,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAA6C,MAAM,6BAA6B,CAAA;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GAItB,MAAM,6BAA6B,CAAA"}
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,YAAY,EAAmB,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAA+C,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAA6C,MAAM,6BAA6B,CAAA;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GAItB,MAAM,6BAA6B,CAAA"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Listen for Cmd+K / Ctrl+K and call the provided callback.
3
+ */
4
+ export declare function useCommandPaletteShortcut(onOpen: () => void): void;
5
+ //# sourceMappingURL=use-command-palette-shortcut.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-command-palette-shortcut.d.ts","sourceRoot":"","sources":["../../src/hooks/use-command-palette-shortcut.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,IAAI,QAW3D"}
@@ -0,0 +1,17 @@
1
+ import { useEffect } from 'react';
2
+ /**
3
+ * Listen for Cmd+K / Ctrl+K and call the provided callback.
4
+ */
5
+ export function useCommandPaletteShortcut(onOpen) {
6
+ useEffect(() => {
7
+ function handleKeyDown(e) {
8
+ if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
9
+ e.preventDefault();
10
+ onOpen();
11
+ }
12
+ }
13
+ window.addEventListener('keydown', handleKeyDown);
14
+ return () => window.removeEventListener('keydown', handleKeyDown);
15
+ }, [onOpen]);
16
+ }
17
+ //# sourceMappingURL=use-command-palette-shortcut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-command-palette-shortcut.js","sourceRoot":"","sources":["../../src/hooks/use-command-palette-shortcut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAkB;IAC1D,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,aAAa,CAAC,CAAgB;YACrC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC9C,CAAC,CAAC,cAAc,EAAE,CAAA;gBAClB,MAAM,EAAE,CAAA;YACV,CAAC;QACH,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QACjD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACnE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;AACd,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Manage a transient "saved" indicator that auto-dismisses after a duration.
3
+ *
4
+ * @param durationMs - How long to show the "saved" state (default 2000ms)
5
+ */
6
+ export declare function useSaveConfirmation(durationMs?: number): {
7
+ readonly saved: boolean;
8
+ readonly markSaved: () => void;
9
+ };
10
+ //# sourceMappingURL=use-save-confirmation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-save-confirmation.d.ts","sourceRoot":"","sources":["../../src/hooks/use-save-confirmation.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,SAAO;;;EASpD"}
@@ -0,0 +1,15 @@
1
+ import { useState, useCallback } from 'react';
2
+ /**
3
+ * Manage a transient "saved" indicator that auto-dismisses after a duration.
4
+ *
5
+ * @param durationMs - How long to show the "saved" state (default 2000ms)
6
+ */
7
+ export function useSaveConfirmation(durationMs = 2000) {
8
+ const [saved, setSaved] = useState(false);
9
+ const markSaved = useCallback(() => {
10
+ setSaved(true);
11
+ setTimeout(() => setSaved(false), durationMs);
12
+ }, [durationMs]);
13
+ return { saved, markSaved };
14
+ }
15
+ //# sourceMappingURL=use-save-confirmation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-save-confirmation.js","sourceRoot":"","sources":["../../src/hooks/use-save-confirmation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAE7C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAU,GAAG,IAAI;IACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAA;IAC/C,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEhB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAW,CAAA;AACtC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -26,6 +26,13 @@ export { StatusBadge } from './status-badge.js';
26
26
  export { LabelBadge } from './label-badge.js';
27
27
  export { ConnectionBadge, type ConnectionStatus } from './connection-badge.js';
28
28
  export { IntegrationCard } from './integration-card.js';
29
+ export { UserAvatar, type UserAvatarProps } from './user-avatar.js';
30
+ export { ResourceBar, type ResourceBarProps } from './resource-bar.js';
31
+ export { MetricCard, type MetricCardProps } from './metric-card.js';
32
+ export { SegmentedControl, type SegmentedControlProps, type SegmentedControlOption } from './segmented-control.js';
33
+ export { AmbientBackground } from './ambient-background.js';
34
+ export { NotFoundPage } from './not-found-page.js';
35
+ export { ErrorPage } from './error-page.js';
29
36
  export { useCopyToClipboard } from './hooks/use-copy-to-clipboard.js';
30
37
  export { useMutationToast, type MutationToastOptions } from './hooks/use-mutation-toast.js';
31
38
  export { useModalState, useItemModal } from './hooks/use-modal-state.js';
@@ -38,6 +45,8 @@ export { useConfirm, type ConfirmOptions, type ConfirmModalState } from './hooks
38
45
  export { useInfiniteScroll } from './hooks/use-infinite-scroll.js';
39
46
  export { useDatePeriodFilter, type DatePeriodFilter, type DefaultPeriod } from './hooks/use-date-period-filter.js';
40
47
  export { useApexChart } from './hooks/use-apex-chart.js';
48
+ export { useCommandPaletteShortcut } from './hooks/use-command-palette-shortcut.js';
49
+ export { useSaveConfirmation } from './hooks/use-save-confirmation.js';
41
50
  export { useIntegrationStatus, checkConnectedField, checkIsConnectedField, type IntegrationStatus, type UseIntegrationStatusOptions, type IntegrationStatusResult, } from './hooks/use-integration-status.js';
42
51
  export { formatUsd, formatCurrencyValue } from './utils/currency-utils.js';
43
52
  export { FormField } from './forms/form-field.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -31,6 +31,14 @@ export { StatusBadge } from './status-badge.js';
31
31
  export { LabelBadge } from './label-badge.js';
32
32
  export { ConnectionBadge } from './connection-badge.js';
33
33
  export { IntegrationCard } from './integration-card.js';
34
+ // Presentation
35
+ export { UserAvatar } from './user-avatar.js';
36
+ export { ResourceBar } from './resource-bar.js';
37
+ export { MetricCard } from './metric-card.js';
38
+ export { SegmentedControl } from './segmented-control.js';
39
+ export { AmbientBackground } from './ambient-background.js';
40
+ export { NotFoundPage } from './not-found-page.js';
41
+ export { ErrorPage } from './error-page.js';
34
42
  // Hooks
35
43
  export { useCopyToClipboard } from './hooks/use-copy-to-clipboard.js';
36
44
  export { useMutationToast } from './hooks/use-mutation-toast.js';
@@ -44,6 +52,8 @@ export { useConfirm } from './hooks/use-confirm.js';
44
52
  export { useInfiniteScroll } from './hooks/use-infinite-scroll.js';
45
53
  export { useDatePeriodFilter } from './hooks/use-date-period-filter.js';
46
54
  export { useApexChart } from './hooks/use-apex-chart.js';
55
+ export { useCommandPaletteShortcut } from './hooks/use-command-palette-shortcut.js';
56
+ export { useSaveConfirmation } from './hooks/use-save-confirmation.js';
47
57
  export { useIntegrationStatus, checkConnectedField, checkIsConnectedField, } from './hooks/use-integration-status.js';
48
58
  // Utils (re-exported for convenience)
49
59
  export { formatUsd, formatCurrencyValue } from './utils/currency-utils.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface MetricCardProps {
2
+ readonly label: string;
3
+ readonly value: string;
4
+ readonly unit?: string;
5
+ readonly percent?: number;
6
+ readonly footer?: string;
7
+ readonly className?: string;
8
+ }
9
+ /**
10
+ * Dashboard metric card with optional progress bar and semantic color.
11
+ */
12
+ export declare function MetricCard({ label, value, unit, percent, footer, className }: MetricCardProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=metric-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-card.d.ts","sourceRoot":"","sources":["../src/metric-card.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,eAAe,2CA6B7F"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Dashboard metric card with optional progress bar and semantic color.
4
+ */
5
+ export function MetricCard({ label, value, unit, percent, footer, className }) {
6
+ const progressColor = percent !== undefined
7
+ ? percent > 90
8
+ ? 'progress-error'
9
+ : percent > 70
10
+ ? 'progress-warning'
11
+ : 'progress-success'
12
+ : '';
13
+ return (_jsx("div", { className: `card bg-base-200 shadow-sm ${className ?? ''}`, children: _jsxs("div", { className: 'card-body p-4', children: [_jsx("p", { className: 'text-xs text-base-content/50 uppercase tracking-wider', children: label }), _jsxs("p", { className: 'text-2xl font-bold', children: [value, unit && _jsx("span", { className: 'text-sm font-normal text-base-content/50 ml-1', children: unit })] }), percent !== undefined && (_jsx("progress", { className: `progress ${progressColor} h-1.5`, value: Math.min(percent, 100), max: 100 })), footer && _jsx("p", { className: 'text-xs text-base-content/50', children: footer })] }) }));
14
+ }
15
+ //# sourceMappingURL=metric-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-card.js","sourceRoot":"","sources":["../src/metric-card.tsx"],"names":[],"mappings":";AASA;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAmB;IAC5F,MAAM,aAAa,GACjB,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,OAAO,GAAG,EAAE;YACZ,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,OAAO,GAAG,EAAE;gBACZ,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,kBAAkB;QACxB,CAAC,CAAC,EAAE,CAAA;IAER,OAAO,CACL,cAAK,SAAS,EAAE,8BAA8B,SAAS,IAAI,EAAE,EAAE,YAC7D,eAAK,SAAS,EAAC,eAAe,aAC5B,YAAG,SAAS,EAAC,uDAAuD,YAAE,KAAK,GAAK,EAChF,aAAG,SAAS,EAAC,oBAAoB,aAC9B,KAAK,EACL,IAAI,IAAI,eAAM,SAAS,EAAC,+CAA+C,YAAE,IAAI,GAAQ,IACpF,EACH,OAAO,KAAK,SAAS,IAAI,CACxB,mBACE,SAAS,EAAE,YAAY,aAAa,QAAQ,EAC5C,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAC7B,GAAG,EAAE,GAAG,GACR,CACH,EACA,MAAM,IAAI,YAAG,SAAS,EAAC,8BAA8B,YAAE,MAAM,GAAK,IAC/D,GACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface NotFoundPageProps {
2
+ readonly homeUrl?: string;
3
+ }
4
+ /**
5
+ * Full-page 404 Not Found with ambient background.
6
+ */
7
+ export declare function NotFoundPage({ homeUrl }: NotFoundPageProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=not-found-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-found-page.d.ts","sourceRoot":"","sources":["../src/not-found-page.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,OAAa,EAAE,EAAE,iBAAiB,2CAahE"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AmbientBackground } from './ambient-background.js';
3
+ /**
4
+ * Full-page 404 Not Found with ambient background.
5
+ */
6
+ export function NotFoundPage({ homeUrl = '/' }) {
7
+ return (_jsxs("div", { className: 'min-h-screen flex items-center justify-center bg-base-100 relative overflow-hidden', children: [_jsx(AmbientBackground, {}), _jsxs("div", { className: 'text-center relative z-10', children: [_jsx("h1", { className: 'text-7xl font-bold text-base-content/20 mb-4 tracking-tight', children: "404" }), _jsx("p", { className: 'text-lg text-base-content/55 mb-6', children: "Page not found" }), _jsx("a", { href: homeUrl, className: 'btn btn-primary', children: "Go Home" })] })] }));
8
+ }
9
+ //# sourceMappingURL=not-found-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-found-page.js","sourceRoot":"","sources":["../src/not-found-page.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAM3D;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,GAAG,GAAG,EAAqB;IAC/D,OAAO,CACL,eAAK,SAAS,EAAC,oFAAoF,aACjG,KAAC,iBAAiB,KAAG,EACrB,eAAK,SAAS,EAAC,2BAA2B,aACxC,aAAI,SAAS,EAAC,6DAA6D,oBAAS,EACpF,YAAG,SAAS,EAAC,mCAAmC,+BAAmB,EACnE,YAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAC,iBAAiB,wBAEzC,IACA,IACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface ResourceBarProps {
2
+ readonly label: string;
3
+ readonly percent: number;
4
+ readonly className?: string;
5
+ }
6
+ /**
7
+ * Horizontal progress bar with semantic color thresholds.
8
+ * Green < 70%, yellow 70-90%, red > 90%.
9
+ */
10
+ export declare function ResourceBar({ label, percent, className }: ResourceBarProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=resource-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-bar.d.ts","sourceRoot":"","sources":["../src/resource-bar.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAoB1E"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Horizontal progress bar with semantic color thresholds.
4
+ * Green < 70%, yellow 70-90%, red > 90%.
5
+ */
6
+ export function ResourceBar({ label, percent, className }) {
7
+ const barColor = percent > 90 ? 'bg-error' : percent > 70 ? 'bg-warning' : 'bg-success';
8
+ return (_jsxs("div", { className: `flex items-center gap-3 ${className ?? ''}`, children: [_jsx("span", { className: 'text-xs text-base-content/50 w-10 shrink-0 uppercase tracking-wider', children: label }), _jsx("div", { className: 'flex-1 bg-base-300 rounded-full h-2 overflow-hidden', children: _jsx("div", { className: `h-full rounded-full transition-all duration-500 ${barColor}`, style: { width: `${Math.min(percent, 100)}%` } }) }), _jsxs("span", { className: 'text-xs font-mono text-base-content/70 w-10 text-right', children: [percent.toFixed(0), "%"] })] }));
9
+ }
10
+ //# sourceMappingURL=resource-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-bar.js","sourceRoot":"","sources":["../src/resource-bar.tsx"],"names":[],"mappings":";AAMA;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAoB;IACzE,MAAM,QAAQ,GACZ,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;IAExE,OAAO,CACL,eAAK,SAAS,EAAE,2BAA2B,SAAS,IAAI,EAAE,EAAE,aAC1D,eAAM,SAAS,EAAC,qEAAqE,YAClF,KAAK,GACD,EACP,cAAK,SAAS,EAAC,qDAAqD,YAClE,cACE,SAAS,EAAE,mDAAmD,QAAQ,EAAE,EACxE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAC9C,GACE,EACN,gBAAM,SAAS,EAAC,wDAAwD,aACrE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SACd,IACH,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface SegmentedControlOption<T extends string = string> {
2
+ readonly value: T;
3
+ readonly label: string;
4
+ }
5
+ export interface SegmentedControlProps<T extends string = string> {
6
+ readonly options: ReadonlyArray<SegmentedControlOption<T>>;
7
+ readonly value: T;
8
+ readonly onChange: (value: T) => void;
9
+ readonly className?: string;
10
+ }
11
+ /**
12
+ * Pill-style segmented control / toggle group.
13
+ */
14
+ export declare function SegmentedControl<T extends string = string>({ options, value, onChange, className, }: SegmentedControlProps<T>): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=segmented-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmented-control.d.ts","sourceRoot":"","sources":["../src/segmented-control.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC/D,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC9D,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1D,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EAC1D,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,qBAAqB,CAAC,CAAC,CAAC,2CAmB1B"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Pill-style segmented control / toggle group.
4
+ */
5
+ export function SegmentedControl({ options, value, onChange, className, }) {
6
+ return (_jsx("div", { className: `flex gap-1 p-0.5 rounded-[10px] bg-base-content/[0.04] w-fit ${className ?? ''}`, children: options.map((option) => (_jsx("button", { type: 'button', className: `px-4 py-1.5 text-xs font-medium rounded-[8px] transition-all ${value === option.value
7
+ ? 'bg-base-content/[0.08] text-base-content shadow-sm'
8
+ : 'text-base-content/55 hover:text-base-content'}`, onClick: () => onChange(option.value), children: option.label }, option.value))) }));
9
+ }
10
+ //# sourceMappingURL=segmented-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmented-control.js","sourceRoot":"","sources":["../src/segmented-control.tsx"],"names":[],"mappings":";AAYA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAA4B,EAC1D,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,GACgB;IACzB,OAAO,CACL,cAAK,SAAS,EAAE,gEAAgE,SAAS,IAAI,EAAE,EAAE,YAC9F,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,gEACT,KAAK,KAAK,MAAM,CAAC,KAAK;gBACpB,CAAC,CAAC,oDAAoD;gBACtD,CAAC,CAAC,8CACN,EAAE,EACF,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,YAEpC,MAAM,CAAC,KAAK,IATR,MAAM,CAAC,KAAK,CAUV,CACV,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ interface UserAvatarUser {
2
+ readonly name?: string | null;
3
+ readonly email?: string | null;
4
+ readonly image?: string | null;
5
+ }
6
+ type AvatarSize = 'xs' | 'sm' | 'md' | 'lg';
7
+ export interface UserAvatarProps {
8
+ readonly user: UserAvatarUser;
9
+ readonly size?: AvatarSize;
10
+ readonly className?: string;
11
+ }
12
+ /**
13
+ * User avatar with image or initials fallback.
14
+ */
15
+ export declare function UserAvatar({ user, size, className }: UserAvatarProps): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=user-avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-avatar.d.ts","sourceRoot":"","sources":["../src/user-avatar.tsx"],"names":[],"mappings":"AAAA,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAS3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,IAAW,EAAE,SAAS,EAAE,EAAE,eAAe,2CAmB3E"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ const sizeClasses = {
3
+ xs: { container: 'w-6', text: 'text-[10px]' },
4
+ sm: { container: 'w-8', text: 'text-xs' },
5
+ md: { container: 'w-10', text: 'text-sm' },
6
+ lg: { container: 'w-16', text: 'text-2xl' },
7
+ };
8
+ /**
9
+ * User avatar with image or initials fallback.
10
+ */
11
+ export function UserAvatar({ user, size = 'sm', className }) {
12
+ const { container, text } = sizeClasses[size];
13
+ const initial = (user.name ?? user.email)?.[0]?.toUpperCase() ?? 'U';
14
+ return (_jsx("div", { className: `avatar placeholder ${className ?? ''}`, children: user.image ? (_jsx("div", { className: `rounded-full ${container}`, children: _jsx("img", { src: user.image, alt: user.name ?? 'User' }) })) : (_jsx("div", { className: `bg-base-content/[0.06] text-base-content/55 rounded-full ${container} flex items-center justify-center`, children: _jsx("span", { className: `${text} font-semibold`, children: initial }) })) }));
15
+ }
16
+ //# sourceMappingURL=user-avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-avatar.js","sourceRoot":"","sources":["../src/user-avatar.tsx"],"names":[],"mappings":";AAQA,MAAM,WAAW,GAA4D;IAC3E,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE;IAC7C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;IACzC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;IAC1C,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;CAC5C,CAAA;AAQD;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAmB;IAC1E,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,CAAA;IAEpE,OAAO,CACL,cAAK,SAAS,EAAE,sBAAsB,SAAS,IAAI,EAAE,EAAE,YACpD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACZ,cAAK,SAAS,EAAE,gBAAgB,SAAS,EAAE,YACzC,cAAK,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,GAAI,GAC9C,CACP,CAAC,CAAC,CAAC,CACF,cACE,SAAS,EAAE,4DAA4D,SAAS,mCAAmC,YAEnH,eAAM,SAAS,EAAE,GAAG,IAAI,gBAAgB,YAAG,OAAO,GAAQ,GACtD,CACP,GACG,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Create a cached async getter with TTL and inflight request deduplication.
3
+ *
4
+ * Subsequent calls within the TTL window return the cached result.
5
+ * Concurrent calls while a request is in flight share the same promise.
6
+ *
7
+ * @param fn - The async function to cache
8
+ * @param ttlMs - Time-to-live in milliseconds
9
+ */
10
+ export declare function createCachedGetter<T>(fn: () => Promise<T>, ttlMs: number): {
11
+ get: () => Promise<T>;
12
+ invalidate: () => void;
13
+ };
14
+ //# sourceMappingURL=cached-getter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cached-getter.d.ts","sourceRoot":"","sources":["../../src/utils/cached-getter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM;eAIjD,OAAO,CAAC,CAAC,CAAC;;EAyBjC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Create a cached async getter with TTL and inflight request deduplication.
3
+ *
4
+ * Subsequent calls within the TTL window return the cached result.
5
+ * Concurrent calls while a request is in flight share the same promise.
6
+ *
7
+ * @param fn - The async function to cache
8
+ * @param ttlMs - Time-to-live in milliseconds
9
+ */
10
+ export function createCachedGetter(fn, ttlMs) {
11
+ let cache = null;
12
+ let inflight = null;
13
+ async function get() {
14
+ if (cache && Date.now() - cache.timestamp < ttlMs) {
15
+ return cache.data;
16
+ }
17
+ if (inflight)
18
+ return inflight;
19
+ inflight = fn()
20
+ .then((result) => {
21
+ cache = { data: result, timestamp: Date.now() };
22
+ inflight = null;
23
+ return result;
24
+ })
25
+ .catch((err) => {
26
+ inflight = null;
27
+ throw err;
28
+ });
29
+ return inflight;
30
+ }
31
+ function invalidate() {
32
+ cache = null;
33
+ }
34
+ return { get, invalidate };
35
+ }
36
+ //# sourceMappingURL=cached-getter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cached-getter.js","sourceRoot":"","sources":["../../src/utils/cached-getter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAI,EAAoB,EAAE,KAAa;IACvE,IAAI,KAAK,GAA0C,IAAI,CAAA;IACvD,IAAI,QAAQ,GAAsB,IAAI,CAAA;IAEtC,KAAK,UAAU,GAAG;QAChB,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC,IAAI,CAAA;QACnB,CAAC;QACD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAE7B,QAAQ,GAAG,EAAE,EAAE;aACZ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;YAC/C,QAAQ,GAAG,IAAI,CAAA;YACf,OAAO,MAAM,CAAA;QACf,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,QAAQ,GAAG,IAAI,CAAA;YACf,MAAM,GAAG,CAAA;QACX,CAAC,CAAC,CAAA;QAEJ,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,SAAS,UAAU;QACjB,KAAK,GAAG,IAAI,CAAA;IACd,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Detect code-splitting / dynamic import failures in SPAs.
3
+ * Useful in error boundaries to auto-reload on stale chunks after deploys.
4
+ */
5
+ export declare function isChunkLoadError(error: Error): boolean;
6
+ //# sourceMappingURL=chunk-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-error.d.ts","sourceRoot":"","sources":["../../src/utils/chunk-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAQtD"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Detect code-splitting / dynamic import failures in SPAs.
3
+ * Useful in error boundaries to auto-reload on stale chunks after deploys.
4
+ */
5
+ export function isChunkLoadError(error) {
6
+ const message = error.message.toLowerCase();
7
+ return (message.includes('failed to fetch dynamically imported module') ||
8
+ message.includes('loading chunk') ||
9
+ message.includes('loading css chunk') ||
10
+ error.name === 'ChunkLoadError');
11
+ }
12
+ //# sourceMappingURL=chunk-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-error.js","sourceRoot":"","sources":["../../src/utils/chunk-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IAC3C,OAAO,CACL,OAAO,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;QACjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACrC,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAChC,CAAA;AACH,CAAC"}
@@ -3,4 +3,7 @@ export { fuzzySearch, getHighlightSegments, type SearchableItem, type SearchResu
3
3
  export { readImageAsDataUrl } from './image-upload.js';
4
4
  export { isLightHexColor } from './color-utils.js';
5
5
  export { formatUsd, formatCurrencyValue } from './currency-utils.js';
6
+ export { isChunkLoadError } from './chunk-error.js';
7
+ export { createCachedGetter } from './cached-getter.js';
8
+ export { createRecentHistory, type RecentItem } from './recent-history.js';
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,OAAO,EACP,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,OAAO,EACP,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,OAAO,EAAE,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA"}
@@ -3,4 +3,7 @@ export { fuzzySearch, getHighlightSegments, } from './fuzzy-search.js';
3
3
  export { readImageAsDataUrl } from './image-upload.js';
4
4
  export { isLightHexColor } from './color-utils.js';
5
5
  export { formatUsd, formatCurrencyValue } from './currency-utils.js';
6
+ export { isChunkLoadError } from './chunk-error.js';
7
+ export { createCachedGetter } from './cached-getter.js';
8
+ export { createRecentHistory } from './recent-history.js';
6
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,OAAO,EACP,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,WAAW,EACX,oBAAoB,GAIrB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,OAAO,EACP,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,WAAW,EACX,oBAAoB,GAIrB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,OAAO,EAAE,mBAAmB,EAAmB,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,15 @@
1
+ export interface RecentItem {
2
+ readonly title: string;
3
+ readonly url: string;
4
+ }
5
+ /**
6
+ * Create a localStorage-backed recent history tracker.
7
+ *
8
+ * @param storageKey - The localStorage key
9
+ * @param maxItems - Maximum items to keep (default 6)
10
+ */
11
+ export declare function createRecentHistory(storageKey: string, maxItems?: number): {
12
+ getItems: () => RecentItem[];
13
+ track: (title: string, url: string) => void;
14
+ };
15
+ //# sourceMappingURL=recent-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-history.d.ts","sourceRoot":"","sources":["../../src/utils/recent-history.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,SAAI;oBAC7C,UAAU,EAAE;mBAQX,MAAM,OAAO,MAAM;EAO1C"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Create a localStorage-backed recent history tracker.
3
+ *
4
+ * @param storageKey - The localStorage key
5
+ * @param maxItems - Maximum items to keep (default 6)
6
+ */
7
+ export function createRecentHistory(storageKey, maxItems = 6) {
8
+ function getItems() {
9
+ try {
10
+ return JSON.parse(localStorage.getItem(storageKey) ?? '[]');
11
+ }
12
+ catch {
13
+ return [];
14
+ }
15
+ }
16
+ function track(title, url) {
17
+ const items = getItems().filter((p) => p.url !== url);
18
+ const updated = [{ title, url }, ...items].slice(0, maxItems);
19
+ localStorage.setItem(storageKey, JSON.stringify(updated));
20
+ }
21
+ return { getItems, track };
22
+ }
23
+ //# sourceMappingURL=recent-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-history.js","sourceRoot":"","sources":["../../src/utils/recent-history.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,QAAQ,GAAG,CAAC;IAClE,SAAS,QAAQ;QACf,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAA;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW;QACvC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QACrD,MAAM,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAC7D,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AAC5B,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.12.0",
7
+ "version": "0.13.0",
8
8
  "private": false,
9
9
  "description": "Shared React + DaisyUI component library for Blaze projects",
10
10
  "type": "module",