@nice2dev/ui-core 1.0.10

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 (107) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +62 -0
  3. package/dist/core/NiceInlineHelp.d.ts +69 -0
  4. package/dist/core/NiceInlineHelp.d.ts.map +1 -0
  5. package/dist/core/NiceThemeProvider.d.ts +31 -0
  6. package/dist/core/NiceThemeProvider.d.ts.map +1 -0
  7. package/dist/core/NiceThemeVariants.d.ts +55 -0
  8. package/dist/core/NiceThemeVariants.d.ts.map +1 -0
  9. package/dist/core/NiceUserPreferences.d.ts +304 -0
  10. package/dist/core/NiceUserPreferences.d.ts.map +1 -0
  11. package/dist/core/a11y-advanced.d.ts +157 -0
  12. package/dist/core/a11y-advanced.d.ts.map +1 -0
  13. package/dist/core/a11y.d.ts +299 -0
  14. package/dist/core/a11y.d.ts.map +1 -0
  15. package/dist/core/access-control.d.ts +59 -0
  16. package/dist/core/access-control.d.ts.map +1 -0
  17. package/dist/core/adapters.d.ts +178 -0
  18. package/dist/core/adapters.d.ts.map +1 -0
  19. package/dist/core/ai.d.ts +191 -0
  20. package/dist/core/ai.d.ts.map +1 -0
  21. package/dist/core/animations.d.ts +48 -0
  22. package/dist/core/animations.d.ts.map +1 -0
  23. package/dist/core/colorBlind.d.ts +22 -0
  24. package/dist/core/colorBlind.d.ts.map +1 -0
  25. package/dist/core/datasource-advanced.d.ts +261 -0
  26. package/dist/core/datasource-advanced.d.ts.map +1 -0
  27. package/dist/core/datasource-aggregation.d.ts +221 -0
  28. package/dist/core/datasource-aggregation.d.ts.map +1 -0
  29. package/dist/core/datasource-hooks.d.ts +93 -0
  30. package/dist/core/datasource-hooks.d.ts.map +1 -0
  31. package/dist/core/datasource-offline.d.ts +201 -0
  32. package/dist/core/datasource-offline.d.ts.map +1 -0
  33. package/dist/core/datasource.d.ts +181 -0
  34. package/dist/core/datasource.d.ts.map +1 -0
  35. package/dist/core/displayMode.d.ts +46 -0
  36. package/dist/core/displayMode.d.ts.map +1 -0
  37. package/dist/core/displayStyle.d.ts +79 -0
  38. package/dist/core/displayStyle.d.ts.map +1 -0
  39. package/dist/core/helpContext.d.ts +97 -0
  40. package/dist/core/helpContext.d.ts.map +1 -0
  41. package/dist/core/hooks.d.ts +149 -0
  42. package/dist/core/hooks.d.ts.map +1 -0
  43. package/dist/core/i18n.d.ts +10 -0
  44. package/dist/core/i18n.d.ts.map +1 -0
  45. package/dist/core/i18nDictionaries.d.ts +4 -0
  46. package/dist/core/i18nDictionaries.d.ts.map +1 -0
  47. package/dist/core/icons.d.ts +45 -0
  48. package/dist/core/icons.d.ts.map +1 -0
  49. package/dist/core/icuMessageFormat.d.ts +10 -0
  50. package/dist/core/icuMessageFormat.d.ts.map +1 -0
  51. package/dist/core/leak-detector.d.ts +263 -0
  52. package/dist/core/leak-detector.d.ts.map +1 -0
  53. package/dist/core/omniverkTypes.d.ts +164 -0
  54. package/dist/core/omniverkTypes.d.ts.map +1 -0
  55. package/dist/core/pluginSystem.d.ts +97 -0
  56. package/dist/core/pluginSystem.d.ts.map +1 -0
  57. package/dist/core/profiling.d.ts +276 -0
  58. package/dist/core/profiling.d.ts.map +1 -0
  59. package/dist/core/responsive.d.ts +107 -0
  60. package/dist/core/responsive.d.ts.map +1 -0
  61. package/dist/core/rtl.d.ts +47 -0
  62. package/dist/core/rtl.d.ts.map +1 -0
  63. package/dist/core/sanitizeHtml.d.ts +16 -0
  64. package/dist/core/sanitizeHtml.d.ts.map +1 -0
  65. package/dist/core/testing.d.ts +107 -0
  66. package/dist/core/testing.d.ts.map +1 -0
  67. package/dist/core/theme.d.ts +213 -0
  68. package/dist/core/theme.d.ts.map +1 -0
  69. package/dist/core/themeGallery.d.ts +104 -0
  70. package/dist/core/themeGallery.d.ts.map +1 -0
  71. package/dist/core/themePacks.d.ts +53 -0
  72. package/dist/core/themePacks.d.ts.map +1 -0
  73. package/dist/core/themePacksExtended.d.ts +59 -0
  74. package/dist/core/themePacksExtended.d.ts.map +1 -0
  75. package/dist/core/themePresets.d.ts +10 -0
  76. package/dist/core/themePresets.d.ts.map +1 -0
  77. package/dist/core/themeVariants.d.ts +204 -0
  78. package/dist/core/themeVariants.d.ts.map +1 -0
  79. package/dist/core/touch.d.ts +208 -0
  80. package/dist/core/touch.d.ts.map +1 -0
  81. package/dist/core/traceless.d.ts +461 -0
  82. package/dist/core/traceless.d.ts.map +1 -0
  83. package/dist/core/types.d.ts +105 -0
  84. package/dist/core/types.d.ts.map +1 -0
  85. package/dist/core/useThemeIsDark.d.ts +15 -0
  86. package/dist/core/useThemeIsDark.d.ts.map +1 -0
  87. package/dist/index.cjs +128 -0
  88. package/dist/index.cjs.map +1 -0
  89. package/dist/index.d.ts +49 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.mjs +16881 -0
  92. package/dist/index.mjs.map +1 -0
  93. package/dist/performance/concurrent.d.ts +190 -0
  94. package/dist/performance/concurrent.d.ts.map +1 -0
  95. package/dist/performance/images.d.ts +189 -0
  96. package/dist/performance/images.d.ts.map +1 -0
  97. package/dist/performance/index.d.ts +17 -0
  98. package/dist/performance/index.d.ts.map +1 -0
  99. package/dist/performance/memory.d.ts +223 -0
  100. package/dist/performance/memory.d.ts.map +1 -0
  101. package/dist/performance/virtualization.d.ts +166 -0
  102. package/dist/performance/virtualization.d.ts.map +1 -0
  103. package/dist/performance/workers.d.ts +125 -0
  104. package/dist/performance/workers.d.ts.map +1 -0
  105. package/dist/viewSchema.d.ts +81 -0
  106. package/dist/viewSchema.d.ts.map +1 -0
  107. package/package.json +61 -0
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Returns `true` when the primary pointer is coarse (touch device).
3
+ * Listens for media-query changes so it reacts to device switching.
4
+ */
5
+ export declare function useIsTouchDevice(): boolean;
6
+ /**
7
+ * Tracks the current input mode by watching `touchstart` and `pointerdown` events.
8
+ * @returns `'touch'` after a touch event, `'mouse'` after a mouse/trackpad event.
9
+ */
10
+ export declare function useInputMode(): 'touch' | 'mouse';
11
+ /**
12
+ * Returns pointer event handlers that trigger `callback` after a sustained touch of `holdMs` milliseconds.
13
+ * Mouse/pen interactions are ignored — this is touch-only.
14
+ * @param callback - Function invoked after the hold duration.
15
+ * @param holdMs - Hold duration in milliseconds (default `500`).
16
+ */
17
+ export declare function useLongPress(callback: () => void, holdMs?: number): {
18
+ onPointerDown: (e: React.PointerEvent) => void;
19
+ onPointerUp: () => void;
20
+ onPointerCancel: () => void;
21
+ };
22
+ /**
23
+ * Returns a stable unique HTML id. Passes through `externalId` when provided,
24
+ * otherwise generates one via React's `useId()`.
25
+ * @param externalId - Optional id explicitly set by the consumer.
26
+ */
27
+ export declare function useControlId(externalId?: string): string;
28
+ /**
29
+ * Debounces a rapidly-changing value. The returned value only updates
30
+ * after the source has been stable for `delayMs` milliseconds.
31
+ * @param value - Source value to debounce.
32
+ * @param delayMs - Debounce delay in milliseconds.
33
+ */
34
+ export declare function useDebouncedValue<T>(value: T, delayMs: number): T;
35
+ /**
36
+ * Calls `handler` whenever a `mousedown` or `touchstart` event occurs outside the referenced element.
37
+ * @param ref - React ref to the element whose outside clicks should be detected.
38
+ * @param handler - Callback invoked on outside click.
39
+ */
40
+ export declare function useClickOutside(ref: React.RefObject<HTMLElement | null>, handler: () => void): void;
41
+ /**
42
+ * Traps keyboard focus within the referenced container while `active` is `true`.
43
+ * On activation the first focusable element receives focus.
44
+ * `Tab` / `Shift+Tab` cycle through focusable children without leaving the container.
45
+ * @param ref - Container element ref.
46
+ * @param active - Enable/disable the trap.
47
+ */
48
+ export declare function useFocusTrap(ref: React.RefObject<HTMLElement | null>, active: boolean): void;
49
+ export interface UseDarkModeOptions {
50
+ /** Default mode if no preference stored */
51
+ defaultMode?: 'light' | 'dark' | 'system';
52
+ /** localStorage key for persisting preference */
53
+ storageKey?: string;
54
+ /** CSS class applied to documentElement for dark mode */
55
+ darkClass?: string;
56
+ /** CSS class applied to documentElement for light mode */
57
+ lightClass?: string;
58
+ }
59
+ export interface UseDarkModeReturn {
60
+ /** Current resolved mode ('light' or 'dark') */
61
+ isDark: boolean;
62
+ /** User preference ('light', 'dark', or 'system') */
63
+ mode: 'light' | 'dark' | 'system';
64
+ /** System preference detected via prefers-color-scheme */
65
+ systemPreference: 'light' | 'dark';
66
+ /** Set mode to light */
67
+ setLight: () => void;
68
+ /** Set mode to dark */
69
+ setDark: () => void;
70
+ /** Set mode to follow system preference */
71
+ setSystem: () => void;
72
+ /** Toggle between light and dark (ignores system) */
73
+ toggle: () => void;
74
+ }
75
+ /**
76
+ * Hook for managing dark mode with system preference detection and persistence.
77
+ * Automatically applies CSS classes to documentElement.
78
+ *
79
+ * @example
80
+ * ```tsx
81
+ * const { isDark, toggle, mode, setSystem } = useDarkMode();
82
+ * return (
83
+ * <button onClick={toggle}>
84
+ * {isDark ? '☀️ Light' : '🌙 Dark'}
85
+ * </button>
86
+ * );
87
+ * ```
88
+ */
89
+ export declare function useDarkMode(options?: UseDarkModeOptions): UseDarkModeReturn;
90
+ export interface BrandColors {
91
+ /** Primary brand color (most dominant) */
92
+ primary: string;
93
+ /** Secondary brand color */
94
+ secondary: string;
95
+ /** Accent color (most vibrant) */
96
+ accent: string;
97
+ /** All extracted colors sorted by dominance */
98
+ palette: string[];
99
+ /** Suggested text color for primary background */
100
+ primaryText: string;
101
+ /** Suggested text color for secondary background */
102
+ secondaryText: string;
103
+ }
104
+ export interface UseBrandColorsOptions {
105
+ /** Number of colors to extract (default: 5) */
106
+ colorCount?: number;
107
+ /** Quality of color extraction 1-10 (default: 5) */
108
+ quality?: number;
109
+ }
110
+ /**
111
+ * Extracts dominant colors from an image to generate brand colors.
112
+ * Uses canvas for color sampling and k-means clustering for color extraction.
113
+ *
114
+ * @example
115
+ * ```tsx
116
+ * const { colors, loading, error } = useBrandColors('/logo.png');
117
+ * if (colors) {
118
+ * console.log('Primary:', colors.primary);
119
+ * console.log('Palette:', colors.palette);
120
+ * }
121
+ * ```
122
+ */
123
+ export declare function useBrandColors(imageSource: string | HTMLImageElement | null, options?: UseBrandColorsOptions): {
124
+ colors: BrandColors | null;
125
+ loading: boolean;
126
+ error: string | null;
127
+ };
128
+ /**
129
+ * Generate a cohesive color palette from a single brand color.
130
+ * Creates variations for backgrounds, text, and accents.
131
+ *
132
+ * @example
133
+ * ```tsx
134
+ * const palette = generatePaletteFromColor('#3b82f6');
135
+ * // { light: '#dbeafe', base: '#3b82f6', dark: '#1e40af', ... }
136
+ * ```
137
+ */
138
+ export declare function generatePaletteFromColor(baseColor: string): {
139
+ lightest: string;
140
+ lighter: string;
141
+ light: string;
142
+ base: string;
143
+ dark: string;
144
+ darker: string;
145
+ darkest: string;
146
+ text: string;
147
+ textInverse: string;
148
+ };
149
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Re-export i18n from @nice2dev/i18n
3
+ * This module is kept for backward compatibility with existing imports.
4
+ *
5
+ * @see {@link @nice2dev/i18n} for the canonical implementation
6
+ */
7
+ export { NiceI18nProvider, useNiceTranslation } from '@nice2dev/i18n';
8
+ export type { NiceTranslateFn, NiceSupportedLang, NiceI18nProviderProps } from '@nice2dev/i18n';
9
+ export { NICE_SUPPORTED_LANGS, NICE_I18N_DICTIONARIES } from '@nice2dev/i18n';
10
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/core/i18n.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACtE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const NICE_SUPPORTED_LANGS: readonly ["en", "pl", "de", "fr", "es", "it", "pt", "nl", "sv", "no", "da", "fi", "cs", "sk", "hu", "ro", "bg", "uk", "ja", "ko", "zh", "ar"];
2
+ export type NiceSupportedLang = (typeof NICE_SUPPORTED_LANGS)[number];
3
+ export declare const NICE_I18N_DICTIONARIES: Record<NiceSupportedLang, Record<string, string>>;
4
+ //# sourceMappingURL=i18nDictionaries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18nDictionaries.d.ts","sourceRoot":"","sources":["../../src/core/i18nDictionaries.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oBAAoB,+IAuBvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAi6KtE,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuBpF,CAAC"}
@@ -0,0 +1,45 @@
1
+ import React from 'react';
2
+ /** T-shirt size for icons mapped to pixel values (xs=12, sm=16, md=20, lg=24, xl=32). */
3
+ export type NiceIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ /** Props for the {@link NiceIcon} component. */
5
+ export interface NiceIconProps {
6
+ /** Icon name (resolved via provider) or React node */
7
+ name: string;
8
+ size?: NiceIconSize | number;
9
+ className?: string;
10
+ style?: React.CSSProperties;
11
+ color?: string;
12
+ title?: string;
13
+ onClick?: (e: React.MouseEvent) => void;
14
+ }
15
+ /**
16
+ * Resolver function used by {@link NiceIconProvider} to map icon names to React nodes.
17
+ * Return `undefined` to fall back to built-in SVG icons.
18
+ */
19
+ export type NiceIconResolver = (name: string, size: number) => React.ReactNode | undefined;
20
+ /** Props for the {@link NiceIconProvider}. */
21
+ export interface NiceIconProviderProps {
22
+ /** Custom icon resolver (e.g. FontAwesome, Material Icons) */
23
+ resolver: NiceIconResolver;
24
+ children: React.ReactNode;
25
+ }
26
+ /**
27
+ * Provides a custom icon resolver to all nested NiceToDev components.
28
+ * Use this to plug in icon libraries like FontAwesome or Material Icons.
29
+ */
30
+ export declare const NiceIconProvider: React.FC<NiceIconProviderProps>;
31
+ /**
32
+ * Renders an icon — tries the provider's custom resolver first, then falls back to built-in SVG icons.
33
+ * If the name is unresolvable, renders nothing.
34
+ */
35
+ export declare const NiceIcon: React.FC<NiceIconProps>;
36
+ /**
37
+ * Hook that provides a `renderIcon` helper for resolving icon names or React nodes.
38
+ * Used internally by components that accept `icon: string | ReactNode` props.
39
+ */
40
+ export declare function useNiceIcon(): {
41
+ renderIcon: (icon: React.ReactNode | string | undefined, size?: NiceIconSize | number) => React.ReactNode;
42
+ };
43
+ /** Array of all 78 built-in icon names available without a custom resolver. */
44
+ export declare const NICE_BUILTIN_ICONS: string[];
45
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/core/icons.tsx"],"names":[],"mappings":"AACA,OAAO,KAAiD,MAAM,OAAO,CAAC;AA2FtE,yFAAyF;AACzF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAU5D,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;AAW3F,8CAA8C;AAC9C,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAE5D,CAAC;AAiDF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA0C5C,CAAC;AAKF;;;GAGG;AACH,wBAAgB,WAAW;uBAKf,KAAK,CAAC,SAAS,GAAG,MAAM,GAAG,SAAS,SACpC,YAAY,GAAG,MAAM,KAC1B,KAAK,CAAC,SAAS;EAarB;AAED,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,UAA6B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Re-export ICU MessageFormat from @nice2dev/i18n
3
+ * This module is kept for backward compatibility with existing imports.
4
+ *
5
+ * @see {@link @nice2dev/i18n} for the canonical implementation
6
+ */
7
+ export { formatICU, createICUTranslator } from '@nice2dev/i18n';
8
+ export type { ICUFormatOptions } from '@nice2dev/i18n';
9
+ export type ICUValues = Record<string, string | number | Date>;
10
+ //# sourceMappingURL=icuMessageFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icuMessageFormat.d.ts","sourceRoot":"","sources":["../../src/core/icuMessageFormat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * @file leak-detector.tsx
3
+ * @description Memory leak detection utilities for development
4
+ *
5
+ * Detects common React memory leaks:
6
+ * - Unmounted component setState calls
7
+ * - Orphaned event listeners
8
+ * - Uncleared timers/intervals
9
+ * - WebSocket connections not closed
10
+ * - AbortController not aborted
11
+ * - Large retained closures
12
+ *
13
+ * @version 1.0.0
14
+ * @since 2026-03
15
+ * @license MIT
16
+ */
17
+ /**
18
+ * Memory leak warning severity
19
+ */
20
+ export type LeakSeverity = 'info' | 'warning' | 'critical';
21
+ /**
22
+ * Type of memory leak detected
23
+ */
24
+ export type LeakType = 'setState-after-unmount' | 'timer-not-cleared' | 'listener-not-removed' | 'subscription-not-unsubscribed' | 'websocket-not-closed' | 'abort-controller-not-aborted' | 'large-closure' | 'component-retained' | 'detached-dom-node';
25
+ /**
26
+ * Memory leak report entry
27
+ */
28
+ export interface LeakReport {
29
+ /** Unique ID */
30
+ id: string;
31
+ /** Type of leak */
32
+ type: LeakType;
33
+ /** Severity level */
34
+ severity: LeakSeverity;
35
+ /** Component name (if available) */
36
+ componentName?: string;
37
+ /** Description of the leak */
38
+ message: string;
39
+ /** Stack trace (if available) */
40
+ stack?: string;
41
+ /** Timestamp */
42
+ timestamp: number;
43
+ /** Additional data */
44
+ data?: Record<string, unknown>;
45
+ }
46
+ /**
47
+ * Leak detector configuration
48
+ */
49
+ export interface LeakDetectorConfig {
50
+ /** Enable detection (default: true in dev) */
51
+ enabled?: boolean;
52
+ /** Log to console */
53
+ logToConsole?: boolean;
54
+ /** Custom reporter */
55
+ onLeak?: (report: LeakReport) => void;
56
+ /** Component names to ignore */
57
+ ignoreComponents?: string[];
58
+ /** Sampling rate (0-1, default: 1) */
59
+ samplingRate?: number;
60
+ /** Track detached DOM nodes */
61
+ trackDetachedNodes?: boolean;
62
+ /** Closure size threshold (bytes) */
63
+ closureSizeThreshold?: number;
64
+ }
65
+ /**
66
+ * Configure the leak detector globally
67
+ *
68
+ * @example
69
+ * ```tsx
70
+ * configureLeakDetector({
71
+ * enabled: process.env.NODE_ENV === 'development',
72
+ * logToConsole: true,
73
+ * onLeak: (report) => sendToAnalytics(report),
74
+ * ignoreComponents: ['ThirdPartyComponent'],
75
+ * });
76
+ * ```
77
+ */
78
+ export declare function configureLeakDetector(config: Partial<LeakDetectorConfig>): void;
79
+ /**
80
+ * Get all leaked reports
81
+ */
82
+ export declare function getLeakReports(): LeakReport[];
83
+ /**
84
+ * Clear all leak reports
85
+ */
86
+ export declare function clearLeakReports(): void;
87
+ /**
88
+ * Get summary of leaks by type
89
+ */
90
+ export declare function getLeakSummary(): Record<LeakType, number>;
91
+ /**
92
+ * useState that prevents setState calls after unmount
93
+ * Logs a warning if setState is called after unmount
94
+ *
95
+ * @example
96
+ * ```tsx
97
+ * const [data, setData] = useSafeState<Data | null>(null);
98
+ *
99
+ * useEffect(() => {
100
+ * fetchData().then(setData); // Safe even if component unmounts
101
+ * }, []);
102
+ * ```
103
+ */
104
+ export declare function useSafeState<T>(initialState: T | (() => T), componentName?: string): [T, React.Dispatch<React.SetStateAction<T>>];
105
+ /**
106
+ * setTimeout that auto-clears on unmount
107
+ *
108
+ * @example
109
+ * ```tsx
110
+ * const [startTimeout, clearTimeout] = useSafeTimeout();
111
+ *
112
+ * startTimeout(() => {
113
+ * console.log('Delayed action');
114
+ * }, 1000);
115
+ * ```
116
+ */
117
+ export declare function useSafeTimeout(componentName?: string): [(callback: () => void, delay: number) => void, () => void];
118
+ /**
119
+ * setInterval that auto-clears on unmount
120
+ *
121
+ * @example
122
+ * ```tsx
123
+ * const [startInterval, clearInterval] = useSafeInterval();
124
+ *
125
+ * useEffect(() => {
126
+ * startInterval(() => {
127
+ * console.log('Tick');
128
+ * }, 1000);
129
+ * }, [startInterval]);
130
+ * ```
131
+ */
132
+ export declare function useSafeInterval(componentName?: string): [(callback: () => void, delay: number) => void, () => void];
133
+ /**
134
+ * addEventListener with auto-cleanup on unmount
135
+ *
136
+ * @example
137
+ * ```tsx
138
+ * const addListener = useSafeEventListener();
139
+ *
140
+ * useEffect(() => {
141
+ * const cleanup = addListener(window, 'resize', handleResize);
142
+ * return cleanup;
143
+ * }, [addListener, handleResize]);
144
+ * ```
145
+ */
146
+ export declare function useSafeEventListener(componentName?: string): <K extends keyof WindowEventMap>(target: EventTarget, type: K | string, listener: EventListener, options?: AddEventListenerOptions) => () => void;
147
+ /**
148
+ * AbortController that auto-aborts on unmount
149
+ *
150
+ * @example
151
+ * ```tsx
152
+ * const getAbortSignal = useSafeAbortController();
153
+ *
154
+ * useEffect(() => {
155
+ * const signal = getAbortSignal();
156
+ * fetch('/api/data', { signal }).then(handleData).catch(handleError);
157
+ * }, [getAbortSignal]);
158
+ * ```
159
+ */
160
+ export declare function useSafeAbortController(componentName?: string): () => AbortSignal;
161
+ /**
162
+ * Fetch with auto-abort on unmount
163
+ *
164
+ * @example
165
+ * ```tsx
166
+ * const safeFetch = useSafeFetch();
167
+ *
168
+ * useEffect(() => {
169
+ * safeFetch('/api/data')
170
+ * .then(res => res.json())
171
+ * .then(setData)
172
+ * .catch(err => {
173
+ * if (err.name !== 'AbortError') {
174
+ * setError(err);
175
+ * }
176
+ * });
177
+ * }, [safeFetch]);
178
+ * ```
179
+ */
180
+ export declare function useSafeFetch(componentName?: string): (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
181
+ /**
182
+ * Subscription manager with auto-cleanup
183
+ *
184
+ * @example
185
+ * ```tsx
186
+ * const subscribe = useSafeSubscription();
187
+ *
188
+ * useEffect(() => {
189
+ * subscribe(eventEmitter.on('event', handleEvent));
190
+ * // or with custom cleanup
191
+ * subscribe(() => cleanup());
192
+ * }, [subscribe]);
193
+ * ```
194
+ */
195
+ export declare function useSafeSubscription(componentName?: string): (cleanup: (() => void) | {
196
+ unsubscribe: () => void;
197
+ }) => void;
198
+ /**
199
+ * WebSocket with auto-close on unmount
200
+ *
201
+ * @example
202
+ * ```tsx
203
+ * const { socket, send, close } = useSafeWebSocket('wss://api.example.com');
204
+ *
205
+ * useEffect(() => {
206
+ * if (socket) {
207
+ * socket.onmessage = (e) => handleMessage(e.data);
208
+ * }
209
+ * }, [socket]);
210
+ * ```
211
+ */
212
+ export declare function useSafeWebSocket(url: string | null, protocols?: string | string[], componentName?: string): {
213
+ socket: WebSocket | null;
214
+ readyState: number;
215
+ send: (data: string | ArrayBufferLike | Blob | ArrayBufferView) => void;
216
+ close: (code?: number, reason?: string) => void;
217
+ };
218
+ /**
219
+ * HOC to track component mount/unmount for leak detection
220
+ * Use in development to identify retained components
221
+ *
222
+ * @example
223
+ * ```tsx
224
+ * const TrackedMyComponent = withLeakTracking(MyComponent, 'MyComponent');
225
+ * ```
226
+ */
227
+ export declare function withLeakTracking<P extends object>(Component: React.ComponentType<P>, displayName?: string): React.FC<P>;
228
+ /**
229
+ * Hook to log when component unmounts
230
+ * Useful for debugging component lifecycle
231
+ *
232
+ * @example
233
+ * ```tsx
234
+ * function MyComponent() {
235
+ * useUnmountLog('MyComponent');
236
+ * // ...
237
+ * }
238
+ * ```
239
+ */
240
+ export declare function useUnmountLog(componentName: string): void;
241
+ /**
242
+ * Take a memory snapshot (Chrome DevTools only)
243
+ * Use in development for debugging memory issues
244
+ */
245
+ export declare function takeMemorySnapshot(label?: string): Promise<void>;
246
+ /**
247
+ * Force garbage collection (Chrome with --expose-gc flag only)
248
+ */
249
+ export declare function forceGC(): void;
250
+ /**
251
+ * Hook to monitor memory usage
252
+ */
253
+ export declare function useMemoryMonitor(intervalMs?: number, warnThresholdMB?: number): {
254
+ usedMB: number;
255
+ totalMB: number;
256
+ limitMB: number;
257
+ isWarning: boolean;
258
+ };
259
+ /**
260
+ * Display leak detector status in React DevTools (via component props)
261
+ */
262
+ export declare const LeakDetectorStatus: React.FC;
263
+ //# sourceMappingURL=leak-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leak-detector.d.ts","sourceRoot":"","sources":["../../src/core/leak-detector.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,wBAAwB,GACxB,mBAAmB,GACnB,sBAAsB,GACtB,+BAA+B,GAC/B,sBAAsB,GACtB,8BAA8B,GAC9B,eAAe,GACf,oBAAoB,GACpB,mBAAmB,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qBAAqB;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB;IACtB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qCAAqC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAsHD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAE/E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,EAAE,CAE7C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAQzD;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAC3B,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CA2B9C;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC,CAiD7D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC,CAiD7D;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,CAAC,SAAS,MAAM,cAAc,EAChC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,CAAC,GAAG,MAAM,EAChB,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,uBAAuB,KAC9B,MAAM,IAAI,CAwEd;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,WAAW,CA8BhF;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC1B,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAUrE;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,IAAI,CAAA;CAAE,KAAK,IAAI,CAkC/D;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAC7B,aAAa,CAAC,EAAE,MAAM,GACrB;IACD,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,eAAe,KAAK,IAAI,CAAC;IACxE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD,CAkDA;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACjC,WAAW,CAAC,EAAE,MAAM,GACnB,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CA6Bb;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAkBzD;AAMD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BtE;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAW9B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,GAAE,MAAa,EACzB,eAAe,GAAE,MAAY,GAC5B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB,CA6CA;AAMD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAUtC,CAAC"}
@@ -0,0 +1,164 @@
1
+ /** A work mode supported by the OmniVerk platform (test, demo, dev, prod, etc.). */
2
+ export interface NiceModeInfo {
3
+ key: string;
4
+ displayName: string;
5
+ icon?: string;
6
+ color?: string;
7
+ sourcePackage?: string;
8
+ description?: string;
9
+ }
10
+ /** A top-level module in the navigation sidebar. */
11
+ export interface NiceModuleMenuDto {
12
+ id: string;
13
+ name: string;
14
+ label: string;
15
+ icon?: string;
16
+ order: number;
17
+ isAvailable: boolean;
18
+ entities: NiceEntityMenuDto[];
19
+ children?: NiceModuleMenuDto[];
20
+ }
21
+ /** A single entity (list view / form view) inside a module. */
22
+ export interface NiceEntityMenuDto {
23
+ id: string;
24
+ name: string;
25
+ label: string;
26
+ icon?: string;
27
+ listViewId?: string;
28
+ formViewId?: string;
29
+ route: string;
30
+ }
31
+ /** Full API response for user-scoped navigation menu. */
32
+ export interface NiceUserMenuResponse {
33
+ modules: NiceModuleMenuDto[];
34
+ quickActions: NiceQuickAction[];
35
+ favorites: NiceFavoriteItem[];
36
+ }
37
+ export interface NiceQuickAction {
38
+ id: string;
39
+ label: string;
40
+ icon?: string;
41
+ route: string;
42
+ shortcut?: string;
43
+ }
44
+ export interface NiceFavoriteItem {
45
+ id: string;
46
+ label: string;
47
+ icon?: string;
48
+ route: string;
49
+ entityId?: string;
50
+ moduleId?: string;
51
+ }
52
+ /** Descriptor for a single MDI tab. */
53
+ export interface NiceTabDescriptor {
54
+ id: string;
55
+ route: string;
56
+ title: string;
57
+ icon?: string;
58
+ entityId?: string;
59
+ isDirty?: boolean;
60
+ isPinned?: boolean;
61
+ closable?: boolean;
62
+ }
63
+ /** Request payload for persisting workspace state. */
64
+ export interface NiceSaveWorkspaceStateRequest {
65
+ openTabsJson: string;
66
+ activeTabIndex: number;
67
+ layoutPreferencesJson?: string;
68
+ }
69
+ /** Response from workspace state API. */
70
+ export interface NiceWorkspaceState {
71
+ tabs: NiceTabDescriptor[];
72
+ activeTabIndex: number;
73
+ layoutPreferences?: Record<string, unknown>;
74
+ }
75
+ /** A single question in the onboarding wizard. */
76
+ export interface NiceOnboardingQuestion {
77
+ id: string;
78
+ question: string;
79
+ questionType: 'text' | 'select' | 'multiSelect' | 'boolean' | 'number' | 'date';
80
+ category: string;
81
+ orderIndex: number;
82
+ isRequired: boolean;
83
+ options?: string[];
84
+ helpText?: string;
85
+ defaultValue?: string;
86
+ }
87
+ /** Answer submitted for an onboarding question. */
88
+ export interface NiceOnboardingAnswer {
89
+ questionId: string;
90
+ answer: string;
91
+ }
92
+ /** Full organization profile DTO (30+ fields across 8 sections). */
93
+ export interface NiceOrganizationProfile {
94
+ id?: string;
95
+ name: string;
96
+ legalName?: string;
97
+ taxId?: string;
98
+ registrationNumber?: string;
99
+ industry?: string;
100
+ employeeCount?: number;
101
+ email?: string;
102
+ phone?: string;
103
+ website?: string;
104
+ fax?: string;
105
+ street?: string;
106
+ city?: string;
107
+ state?: string;
108
+ postalCode?: string;
109
+ country?: string;
110
+ logoUrl?: string;
111
+ primaryColor?: string;
112
+ secondaryColor?: string;
113
+ defaultLanguage?: string;
114
+ defaultCurrency?: string;
115
+ defaultTimezone?: string;
116
+ dateFormat?: string;
117
+ fiscalYearStart?: string;
118
+ vatEnabled?: boolean;
119
+ defaultVatRate?: number;
120
+ workingDays?: string[];
121
+ workingHoursStart?: string;
122
+ workingHoursEnd?: string;
123
+ createdAt?: string;
124
+ updatedAt?: string;
125
+ }
126
+ export type NiceModuleStatus = 'available' | 'installed' | 'active' | 'disabled' | 'error' | 'updating';
127
+ /** A module entry in the lifecycle management panel. */
128
+ export interface NiceModuleInfo {
129
+ id: string;
130
+ name: string;
131
+ label: string;
132
+ description: string;
133
+ version: string;
134
+ icon?: string;
135
+ status: NiceModuleStatus;
136
+ author?: string;
137
+ dependencies?: string[];
138
+ isCore?: boolean;
139
+ }
140
+ /** Supported application display modes / shell types. */
141
+ export type NiceDisplayMode = 'classic' | 'console' | 'desktop' | 'dashboard' | 'compact' | 'kiosk';
142
+ /**
143
+ * Information about the current tenant displayed in shells.
144
+ * Used by NiceModernShell, NiceMinimalShell, NiceHybridShell, NicePwaShell.
145
+ */
146
+ export interface NiceTenantInfo {
147
+ /** Stable tenant identifier (UUID, slug). */
148
+ id: string;
149
+ /** Human-readable tenant name. */
150
+ name: string;
151
+ /** Optional short display name / acronym. */
152
+ shortName?: string;
153
+ /** Optional logo URL. */
154
+ logoUrl?: string;
155
+ /** Optional brand primary color (hex / css). */
156
+ primaryColor?: string;
157
+ /** Plan / subscription tier label (e.g. 'Free', 'Pro', 'Enterprise'). */
158
+ plan?: string;
159
+ /** Region / data residency region (e.g. 'eu-central-1'). */
160
+ region?: string;
161
+ /** Tenant locale (BCP 47, e.g. 'pl-PL'). */
162
+ locale?: string;
163
+ }
164
+ //# sourceMappingURL=omniverkTypes.d.ts.map