@nice2dev/ui 1.0.5 → 1.0.6

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 (49) hide show
  1. package/README.md +253 -207
  2. package/dist/NiceButton-B5RXLDwI.cjs +1 -0
  3. package/dist/NiceButton-DmTHNHet.js +450 -0
  4. package/dist/NiceErrorBoundary-D1hh5GGe.js +732 -0
  5. package/dist/NiceErrorBoundary-Dta4TGee.cjs +1 -0
  6. package/dist/NiceModuleLifecyclePanel-BapdidD6.js +4776 -0
  7. package/dist/NiceModuleLifecyclePanel-CsFsm534.cjs +1 -0
  8. package/dist/NicePinCodeInput-4q8yULuo.js +13359 -0
  9. package/dist/NicePinCodeInput-eD2q8nGa.cjs +692 -0
  10. package/dist/NicePinCodeInput.css +1 -0
  11. package/dist/NiceSavedQueryPanel-DUw8plYP.js +5666 -0
  12. package/dist/NiceSavedQueryPanel-xpk09zy1.cjs +596 -0
  13. package/dist/NiceSavedQueryPanel.css +1 -0
  14. package/dist/NiceStockChart-CHlOnWzN.cjs +287 -0
  15. package/dist/NiceStockChart-Cpmv9_Cc.js +2341 -0
  16. package/dist/NiceStockChart.css +1 -0
  17. package/dist/NiceToggle-C1UKGXmJ.js +209 -0
  18. package/dist/NiceToggle-lVi-ETi0.cjs +1 -0
  19. package/dist/NiceWindow-D1awkyFl.js +1636 -0
  20. package/dist/NiceWindow-yARTUJsg.cjs +1 -0
  21. package/dist/charts.cjs +1 -0
  22. package/dist/charts.d.ts +1043 -0
  23. package/dist/charts.mjs +23 -0
  24. package/dist/core-CfXsl755.js +16305 -0
  25. package/dist/core-DGJSUW64.cjs +96 -0
  26. package/dist/data.cjs +1 -0
  27. package/dist/data.d.ts +2003 -0
  28. package/dist/data.mjs +21 -0
  29. package/dist/editors.cjs +1 -0
  30. package/dist/editors.d.ts +2728 -0
  31. package/dist/editors.mjs +66 -0
  32. package/dist/feedback.cjs +1 -0
  33. package/dist/feedback.d.ts +339 -0
  34. package/dist/feedback.mjs +16 -0
  35. package/dist/index-C853adw1.cjs +6199 -0
  36. package/dist/index-CNwVELPJ.js +62857 -0
  37. package/dist/index-CUx_-gKK.cjs +1 -0
  38. package/dist/index-x8mRM4Jc.js +17 -0
  39. package/dist/index.cjs +1 -7866
  40. package/dist/index.css +1 -0
  41. package/dist/index.d.ts +1160 -2
  42. package/dist/index.mjs +972 -105889
  43. package/dist/navigation.cjs +1 -0
  44. package/dist/navigation.d.ts +1862 -0
  45. package/dist/navigation.mjs +519 -0
  46. package/dist/overlays.cjs +1 -0
  47. package/dist/overlays.d.ts +706 -0
  48. package/dist/overlays.mjs +26 -0
  49. package/package.json +31 -1
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import { ComponentType } from 'react';
4
4
  import { Context } from 'react';
5
5
  import { CSSProperties } from 'react';
6
6
  import { default as default_2 } from 'react';
7
+ import { Dispatch } from 'react';
7
8
  import { ForwardedRef } from 'react';
8
9
  import { ForwardRefExoticComponent } from 'react';
9
10
  import { HTMLAttributes } from 'react';
@@ -12,6 +13,7 @@ import { PointerEvent as PointerEvent_2 } from 'react';
12
13
  import { ReactNode } from 'react';
13
14
  import { RefAttributes } from 'react';
14
15
  import { RefObject } from 'react';
16
+ import { SetStateAction } from 'react';
15
17
 
16
18
  declare interface A11yContextValue {
17
19
  config: NiceA11yConfig;
@@ -358,6 +360,36 @@ export declare interface Allocation {
358
360
 
359
361
  export declare const AmazonMarketplaceConnector: ConnectorDefinition;
360
362
 
363
+ declare interface AnalyticsContextValue {
364
+ isActive: boolean;
365
+ trackEvent: (event: AnalyticsEvent) => void;
366
+ trackPageView: (event: PageViewEvent) => void;
367
+ setUserProperties: (properties: Record<string, unknown>) => void;
368
+ mode: TracelessMode;
369
+ provider: AnalyticsProvider;
370
+ }
371
+
372
+ /**
373
+ * Analytics event type.
374
+ */
375
+ export declare interface AnalyticsEvent {
376
+ /** Event name/action */
377
+ name: string;
378
+ /** Event category */
379
+ category?: string;
380
+ /** Event label */
381
+ label?: string;
382
+ /** Event value */
383
+ value?: number;
384
+ /** Additional properties */
385
+ properties?: Record<string, unknown>;
386
+ }
387
+
388
+ /**
389
+ * Analytics provider type.
390
+ */
391
+ export declare type AnalyticsProvider = 'google-analytics' | 'google-tag-manager' | 'matomo' | 'plausible' | 'simple-analytics' | 'umami' | 'fathom' | 'pirsch' | 'custom';
392
+
361
393
  /**
362
394
  * Animation timing presets
363
395
  */
@@ -609,6 +641,12 @@ export declare interface AudioEncodingSettings {
609
641
  loudnessTarget?: number;
610
642
  }
611
643
 
644
+ /**
645
+ * Audit scanner: checks if any storage is being used against policy.
646
+ * Returns violations found.
647
+ */
648
+ export declare function auditStorageCompliance(policy: ITracelessPolicy): StorageAuditResult;
649
+
612
650
  /**
613
651
  * Run a comprehensive WCAG 2.2 AAA audit on the current document.
614
652
  */
@@ -2791,6 +2829,24 @@ export declare interface CurrencyDef {
2791
2829
  /** Current schema version. */
2792
2830
  export declare const CURRENT_SCHEMA_VERSION = 2;
2793
2831
 
2832
+ /**
2833
+ * Custom analytics handler for 'custom' provider.
2834
+ */
2835
+ export declare interface CustomAnalyticsHandler {
2836
+ /** Initialize analytics */
2837
+ init: () => void | Promise<void>;
2838
+ /** Track page view */
2839
+ trackPageView: (event: PageViewEvent) => void;
2840
+ /** Track custom event */
2841
+ trackEvent: (event: AnalyticsEvent) => void;
2842
+ /** Set user properties */
2843
+ setUserProperties?: (properties: Record<string, unknown>) => void;
2844
+ /** Opt out of tracking */
2845
+ optOut?: () => void;
2846
+ /** Opt in to tracking */
2847
+ optIn?: () => void;
2848
+ }
2849
+
2794
2850
  export declare interface CustomEmoji {
2795
2851
  id: string;
2796
2852
  name: string;
@@ -3749,6 +3805,23 @@ export declare const DynamicsBCConnector: ConnectorDefinition;
3749
3805
 
3750
3806
  export declare const EBayConnector: ConnectorDefinition;
3751
3807
 
3808
+ /**
3809
+ * State type for text editor persistence (drafts, history, etc.)
3810
+ */
3811
+ export declare interface EditorPersistentState {
3812
+ content?: string;
3813
+ cursorPosition?: {
3814
+ line: number;
3815
+ column: number;
3816
+ };
3817
+ selectionRange?: {
3818
+ start: number;
3819
+ end: number;
3820
+ };
3821
+ lastModified?: number;
3822
+ version?: number;
3823
+ }
3824
+
3752
3825
  export declare interface EllipseAnnotation extends AnnotationBase {
3753
3826
  tool: 'ellipse';
3754
3827
  }
@@ -5147,6 +5220,11 @@ export declare function generateTokens(tokens: FlatTokenMap, format: TokenFormat
5147
5220
  /** Generate tooltip styles */
5148
5221
  export declare function generateTooltipStyles(variant: TooltipStyleVariant): Record<string, string>;
5149
5222
 
5223
+ /**
5224
+ * Generates a compliance report for the current traceless configuration.
5225
+ */
5226
+ export declare function generateTracelessComplianceReport(policy: ITracelessPolicy, instanceId: string, tenantId?: string): TracelessComplianceReport;
5227
+
5150
5228
  /** Generate a TypeScript interface from a view definition's data bindings. */
5151
5229
  export declare function generateTypescriptModel(view: NiceViewDefinitionV2): NiceGeneratedFile;
5152
5230
 
@@ -5275,6 +5353,11 @@ export declare function getRecentTimings(limit?: number): RenderTiming[];
5275
5353
  */
5276
5354
  export declare function getSlowRenders(thresholdMs?: number): RenderTiming[];
5277
5355
 
5356
+ /**
5357
+ * Gets badge display info for the current mode.
5358
+ */
5359
+ export declare function getTracelessBadgeInfo(policy: ITracelessPolicy): TracelessBadgeInfo;
5360
+
5278
5361
  export declare interface GitBlameEntry {
5279
5362
  lineStart: number;
5280
5363
  lineEnd: number;
@@ -5470,6 +5553,20 @@ export declare interface GridColumnPreference {
5470
5553
  cellColor?: string;
5471
5554
  }
5472
5555
 
5556
+ /**
5557
+ * State type for NiceDataGrid persistence.
5558
+ */
5559
+ export declare interface GridPersistentState {
5560
+ columnWidths?: Record<string, number>;
5561
+ columnOrder?: string[];
5562
+ sortField?: string;
5563
+ sortDirection?: 'asc' | 'desc' | null;
5564
+ pageSize?: number;
5565
+ expandedGroups?: string[];
5566
+ filters?: Record<string, any>;
5567
+ hiddenColumns?: string[];
5568
+ }
5569
+
5473
5570
  /**
5474
5571
  * Grid preferences
5475
5572
  */
@@ -5492,6 +5589,20 @@ export declare interface GridPreferences {
5492
5589
  rowColors?: Record<string | number, string>;
5493
5590
  }
5494
5591
 
5592
+ /**
5593
+ * Options for useGridStatePersistence hook.
5594
+ */
5595
+ export declare interface GridStatePersistenceOptions {
5596
+ /** Unique storage key for this grid instance */
5597
+ storageKey: string;
5598
+ /** Initial state (used when no saved state exists) */
5599
+ initialState?: GridPersistentState;
5600
+ /** Callback when state changes */
5601
+ onStateChange?: (state: GridPersistentState) => void;
5602
+ /** Specific storage type override */
5603
+ storageType?: 'local' | 'session' | 'auto';
5604
+ }
5605
+
5495
5606
  /**
5496
5607
  * Groups data by specified fields with optional aggregation.
5497
5608
  */
@@ -5646,6 +5757,56 @@ export declare type HeaderVariant = 'default' | 'transparent' | 'blur' | 'solid'
5646
5757
  /** Health check severity levels. */
5647
5758
  export declare type HealthSeverity = 'error' | 'warning' | 'info';
5648
5759
 
5760
+ export declare interface HelpConfig {
5761
+ /** Global enable/disable for all inline help */
5762
+ enabled: boolean;
5763
+ /** Default visibility for help panels (collapsed/expanded) */
5764
+ defaultExpanded: boolean;
5765
+ /** Show help icon in component headers */
5766
+ showHelpIcon: boolean;
5767
+ /** Help panel position */
5768
+ position: 'top' | 'bottom' | 'tooltip' | 'sidebar';
5769
+ /** Locale for help content */
5770
+ locale: string;
5771
+ /** Custom help content loader */
5772
+ contentLoader?: (componentName: string, locale: string) => Promise<HelpContent | null>;
5773
+ }
5774
+
5775
+ export declare interface HelpContent {
5776
+ name: string;
5777
+ description: string;
5778
+ category: string;
5779
+ version?: string;
5780
+ since?: string;
5781
+ status?: 'stable' | 'beta' | 'deprecated';
5782
+ author?: string;
5783
+ props?: HelpProp[];
5784
+ examples?: HelpExample[];
5785
+ tips?: string[];
5786
+ seeAlso?: string[];
5787
+ }
5788
+
5789
+ export declare interface HelpContextValue {
5790
+ /** Current help configuration */
5791
+ config: HelpConfig;
5792
+ /** Update help configuration */
5793
+ setConfig: (config: Partial<HelpConfig>) => void;
5794
+ /** Toggle global help visibility */
5795
+ toggleGlobalHelp: () => void;
5796
+ /** Per-component disabled set */
5797
+ disabledComponents: Set<string>;
5798
+ /** Disable help for specific component */
5799
+ disableComponentHelp: (componentName: string) => void;
5800
+ /** Enable help for specific component */
5801
+ enableComponentHelp: (componentName: string) => void;
5802
+ /** Check if help is enabled for component */
5803
+ isHelpEnabled: (componentName: string) => boolean;
5804
+ /** Get help content for component */
5805
+ getHelpContent: (componentName: string) => Promise<HelpContent | null>;
5806
+ /** Loaded help content cache */
5807
+ helpCache: Map<string, HelpContent>;
5808
+ }
5809
+
5649
5810
  declare interface HelpDeskAttachment {
5650
5811
  id: string;
5651
5812
  filename: string;
@@ -5737,6 +5898,20 @@ declare interface HelpDeskUser {
5737
5898
 
5738
5899
  declare type HelpDeskView = 'list' | 'detail' | 'create' | 'dashboard' | 'knowledge-base' | 'settings';
5739
5900
 
5901
+ export declare interface HelpExample {
5902
+ title: string;
5903
+ code: string;
5904
+ language?: string;
5905
+ }
5906
+
5907
+ export declare interface HelpProp {
5908
+ name: string;
5909
+ type: string;
5910
+ required?: boolean;
5911
+ default?: string | number | boolean;
5912
+ description: string;
5913
+ }
5914
+
5740
5915
  /**
5741
5916
  * Hero header with background image
5742
5917
  */
@@ -6032,6 +6207,31 @@ export declare function isVibrationSupported(): boolean;
6032
6207
  /** Check if a view is compatible with a given platform. */
6033
6208
  export declare function isViewCompatibleWith(view: NiceCrossPlatformView, platform: NicePlatformCapability): boolean;
6034
6209
 
6210
+ /**
6211
+ * Main policy interface for Traceless system.
6212
+ * Three independent flags for granular control.
6213
+ */
6214
+ export declare interface ITracelessPolicy {
6215
+ /** Whether cookies are allowed (any cookies) */
6216
+ cookiesAllowed: boolean;
6217
+ /** Whether localStorage is allowed */
6218
+ localStorageAllowed: boolean;
6219
+ /** Whether sessionStorage is allowed */
6220
+ sessionStorageAllowed: boolean;
6221
+ /** Whether only strictly necessary auth cookie is allowed (httpOnly) */
6222
+ strictAuthCookieOnly: boolean;
6223
+ /** The effective mode derived from flags */
6224
+ effectiveMode: TracelessMode;
6225
+ /** Source of the policy (instance, tenant, group, user) */
6226
+ source: TracelessPolicySource;
6227
+ /** Whether consent banner should be shown */
6228
+ requiresConsentBanner: boolean;
6229
+ /** Timestamp when policy was resolved */
6230
+ resolvedAt: number;
6231
+ /** Policy version for cache invalidation */
6232
+ version: string;
6233
+ }
6234
+
6035
6235
  /** Job priority */
6036
6236
  export declare type JobPriority = 'low' | 'normal' | 'high' | 'urgent';
6037
6237
 
@@ -7837,6 +8037,63 @@ export declare interface NiceAmountBreakdownProps extends NiceFormFieldProps {
7837
8037
  compact?: boolean;
7838
8038
  }
7839
8039
 
8040
+ /**
8041
+ * NiceAnalyticsTracker — Traceless-aware analytics wrapper.
8042
+ *
8043
+ * @example
8044
+ * ```tsx
8045
+ * // Wrap your app
8046
+ * <NiceAnalyticsTracker
8047
+ * provider="plausible"
8048
+ * trackingId="your-domain.com"
8049
+ * autoTrackPageViews
8050
+ * >
8051
+ * <App />
8052
+ * </NiceAnalyticsTracker>
8053
+ *
8054
+ * // Or use the hook in components
8055
+ * const { trackEvent, isActive } = useAnalytics();
8056
+ * trackEvent({ name: 'button_click', category: 'engagement' });
8057
+ * ```
8058
+ */
8059
+ export declare function NiceAnalyticsTracker({ children, provider, trackingId, endpoint, customHandler, cookies, localStorage, minMode, autoTrackPageViews, respectDoNotTrack, debug, domain, scriptUrl, anonymizeIp, cookieless, }: NiceAnalyticsTrackerProps): default_2.ReactElement | null;
8060
+
8061
+ /**
8062
+ * Props for NiceAnalyticsTracker.
8063
+ */
8064
+ export declare interface NiceAnalyticsTrackerProps {
8065
+ /** Children to render (optional - can be used as wrapper or standalone) */
8066
+ children?: ReactNode;
8067
+ /** Analytics provider */
8068
+ provider: AnalyticsProvider;
8069
+ /** Provider-specific ID (e.g., GA measurement ID) */
8070
+ trackingId?: string;
8071
+ /** Provider endpoint URL (for self-hosted solutions) */
8072
+ endpoint?: string;
8073
+ /** Custom handler for 'custom' provider */
8074
+ customHandler?: CustomAnalyticsHandler;
8075
+ /** Whether this component may use cookies */
8076
+ cookies?: boolean;
8077
+ /** Whether this component may use localStorage */
8078
+ localStorage?: boolean;
8079
+ /** Minimum mode required for tracking to be active */
8080
+ minMode?: TracelessMode;
8081
+ /** Auto-track page views */
8082
+ autoTrackPageViews?: boolean;
8083
+ /** Respect Do Not Track header */
8084
+ respectDoNotTrack?: boolean;
8085
+ /** Debug mode - logs events to console */
8086
+ debug?: boolean;
8087
+ /** Domain for analytics (for cross-domain tracking) */
8088
+ domain?: string;
8089
+ /** Custom script URL override */
8090
+ scriptUrl?: string;
8091
+ /** Anonymize IP addresses */
8092
+ anonymizeIp?: boolean;
8093
+ /** Disable cookies (use cookieless tracking) */
8094
+ cookieless?: boolean;
8095
+ }
8096
+
7840
8097
  export declare interface NiceAnimationConfig {
7841
8098
  /** Animation preset or 'none' to disable */
7842
8099
  type: NiceAnimationPreset;
@@ -8614,7 +8871,7 @@ export declare const NiceCalculatorKeyboard: default_2.ForwardRefExoticComponent
8614
8871
  export declare const NiceCalendar: default_2.FC<NiceCalendarProps>;
8615
8872
 
8616
8873
  /** Props for the {@link NiceCalendar} component — an inline month calendar with day/month/year views and multi-select support. */
8617
- export declare interface NiceCalendarProps extends NiceBaseProps {
8874
+ export declare interface NiceCalendarProps extends NiceBaseProps, TracelessStorageProps {
8618
8875
  /** Single selected date (ISO). Use together with onChange for single-select mode. */
8619
8876
  value?: string;
8620
8877
  onChange?: (date: string) => void;
@@ -8634,6 +8891,8 @@ export declare interface NiceCalendarProps extends NiceBaseProps {
8634
8891
  renderDay?: (date: string, day: number) => default_2.ReactNode;
8635
8892
  /** Show keyboard hints. */
8636
8893
  showKeyboardHints?: boolean;
8894
+ /** Persist view preferences (requires Traceless storage props) */
8895
+ persistPreferences?: boolean;
8637
8896
  }
8638
8897
 
8639
8898
  export declare type NiceCalendarView = 'days' | 'months' | 'years' | 'decade';
@@ -9695,6 +9954,35 @@ export declare interface NiceConnectorSelectorProps extends NiceBaseProps {
9695
9954
  disabledConnectors?: string[];
9696
9955
  }
9697
9956
 
9957
+ /**
9958
+ * Cookie/storage consent banner that auto-hides based on Traceless policy.
9959
+ */
9960
+ export declare function NiceConsentBanner({ className, position, variant, onAccept, onDecline, onCustomize, privacyPolicyUrl, acceptText, declineText, }: NiceConsentBannerProps): default_2.ReactElement | null;
9961
+
9962
+ /**
9963
+ * Props for NiceConsentBanner.
9964
+ */
9965
+ export declare interface NiceConsentBannerProps {
9966
+ /** Custom class name */
9967
+ className?: string;
9968
+ /** Position */
9969
+ position?: 'top' | 'bottom';
9970
+ /** Theme variant */
9971
+ variant?: 'minimal' | 'detailed';
9972
+ /** Callback when consent is given */
9973
+ onAccept?: () => void;
9974
+ /** Callback when consent is declined */
9975
+ onDecline?: () => void;
9976
+ /** Callback when user wants to customize */
9977
+ onCustomize?: () => void;
9978
+ /** Privacy policy URL */
9979
+ privacyPolicyUrl?: string;
9980
+ /** Custom accept button text */
9981
+ acceptText?: string;
9982
+ /** Custom decline button text */
9983
+ declineText?: string;
9984
+ }
9985
+
9698
9986
  /**
9699
9987
  * {@link NiceConsentPanel} — GDPR/terms consent tracking panel with individual
9700
9988
  * accept/reject toggles, required consent markers, bulk actions, and confirm button.
@@ -12961,6 +13249,32 @@ export declare interface NiceHelpDeskProps extends NiceBaseProps {
12961
13249
  onExportTickets?: (filter: TicketFilter, format: 'csv' | 'xlsx' | 'pdf') => Promise<void>;
12962
13250
  }
12963
13251
 
13252
+ /**
13253
+ * Help icon that shows help content on click
13254
+ */
13255
+ export declare const NiceHelpIcon: default_2.FC<NiceHelpIconProps>;
13256
+
13257
+ export declare interface NiceHelpIconProps {
13258
+ /** Help content to show */
13259
+ content: string | HelpContent;
13260
+ /** Button size */
13261
+ size?: 'sm' | 'md' | 'lg';
13262
+ /** Custom className */
13263
+ className?: string;
13264
+ /** Callback when help is opened */
13265
+ onOpen?: () => void;
13266
+ }
13267
+
13268
+ export declare const NiceHelpProvider: default_2.FC<NiceHelpProviderProps>;
13269
+
13270
+ export declare interface NiceHelpProviderProps {
13271
+ children: ReactNode;
13272
+ /** Initial configuration */
13273
+ config?: Partial<HelpConfig>;
13274
+ /** Preloaded help content */
13275
+ helpContent?: Record<string, HelpContent>;
13276
+ }
13277
+
12964
13278
  /**
12965
13279
  * Conditionally hide content based on breakpoint
12966
13280
  *
@@ -13450,6 +13764,37 @@ export declare interface NiceInfiniteScrollState<T> {
13450
13764
  totalCount: number;
13451
13765
  }
13452
13766
 
13767
+ export declare const NiceInlineHelp: default_2.FC<NiceInlineHelpProps>;
13768
+
13769
+ export declare interface NiceInlineHelpProps {
13770
+ /** Component name for help lookup */
13771
+ componentName: string;
13772
+ /** Override help content (instead of loading from .doc.json) */
13773
+ content?: HelpContent;
13774
+ /** Custom children to render inside help panel */
13775
+ children?: ReactNode;
13776
+ /** Position override */
13777
+ position?: 'top' | 'bottom' | 'tooltip' | 'inline';
13778
+ /** Initial expanded state */
13779
+ defaultExpanded?: boolean;
13780
+ /** Disable help for this instance */
13781
+ disabled?: boolean;
13782
+ /** Additional className */
13783
+ className?: string;
13784
+ /** Custom trigger icon */
13785
+ icon?: ReactNode;
13786
+ /** Title override */
13787
+ title?: string;
13788
+ /** Show props table */
13789
+ showProps?: boolean;
13790
+ /** Show examples */
13791
+ showExamples?: boolean;
13792
+ /** Show tips */
13793
+ showTips?: boolean;
13794
+ /** Compact mode */
13795
+ compact?: boolean;
13796
+ }
13797
+
13453
13798
  export declare const NiceInPlaceEditor: default_2.ForwardRefExoticComponent<NiceInPlaceEditorProps & default_2.RefAttributes<HTMLDivElement>>;
13454
13799
 
13455
13800
  declare interface NiceInPlaceEditorOption {
@@ -13606,7 +13951,7 @@ declare interface NiceJSONOptions extends NiceExportOptions {
13606
13951
  export declare const NiceKanbanBoard: default_2.ForwardRefExoticComponent<NiceKanbanBoardProps & default_2.RefAttributes<HTMLDivElement>>;
13607
13952
 
13608
13953
  /** Props for the {@link NiceKanbanBoard} component — a drag-and-drop kanban board with columns, WIP limits, and custom card rendering. */
13609
- export declare interface NiceKanbanBoardProps extends NiceBaseProps {
13954
+ export declare interface NiceKanbanBoardProps extends NiceBaseProps, TracelessStorageProps {
13610
13955
  /** Column definitions. */
13611
13956
  columns: NiceKanbanColumn[];
13612
13957
  /** Card data. */
@@ -13623,6 +13968,16 @@ export declare interface NiceKanbanBoardProps extends NiceBaseProps {
13623
13968
  disabled?: boolean;
13624
13969
  /** Size preset. */
13625
13970
  size?: NiceSize;
13971
+ /** Allow columns to be collapsed */
13972
+ collapsible?: boolean;
13973
+ /** View mode (default, compact, detailed) */
13974
+ viewMode?: NiceKanbanViewMode;
13975
+ /** Callback when view mode changes */
13976
+ onViewModeChange?: (mode: NiceKanbanViewMode) => void;
13977
+ /** Initial collapsed columns (controlled) */
13978
+ collapsedColumns?: (string | number)[];
13979
+ /** Callback when collapsed columns change */
13980
+ onCollapsedColumnsChange?: (keys: (string | number)[]) => void;
13626
13981
  }
13627
13982
 
13628
13983
  /** A card on the {@link NiceKanbanBoard}. */
@@ -13653,6 +14008,19 @@ export declare interface NiceKanbanColumn {
13653
14008
  limit?: number;
13654
14009
  }
13655
14010
 
14011
+ /** Persisted state for NiceKanbanBoard */
14012
+ export declare interface NiceKanbanPersistedState {
14013
+ /** Collapsed column keys */
14014
+ collapsedColumns?: (string | number)[];
14015
+ /** Current view mode */
14016
+ viewMode?: NiceKanbanViewMode;
14017
+ /** Custom column widths (key -> width) */
14018
+ columnWidths?: Record<string, number>;
14019
+ }
14020
+
14021
+ /** Display mode for kanban cards */
14022
+ export declare type NiceKanbanViewMode = 'default' | 'compact' | 'detailed';
14023
+
13656
14024
  /**
13657
14025
  * A small question mark icon that shows keyboard shortcuts on hover.
13658
14026
  * Use this to inform users about available keyboard interactions.
@@ -17037,6 +17405,22 @@ export declare interface NiceQuickAction {
17037
17405
  shortcut?: string;
17038
17406
  }
17039
17407
 
17408
+ /**
17409
+ * Lightweight inline help that shows on hover/focus
17410
+ */
17411
+ export declare const NiceQuickHelp: default_2.FC<NiceQuickHelpProps>;
17412
+
17413
+ export declare interface NiceQuickHelpProps {
17414
+ /** Help text to display */
17415
+ text: string;
17416
+ /** Help position */
17417
+ position?: 'top' | 'right' | 'bottom' | 'left';
17418
+ /** Custom className */
17419
+ className?: string;
17420
+ /** Trigger element */
17421
+ children: ReactNode;
17422
+ }
17423
+
17040
17424
  /**
17041
17425
  * NiceQuiz — Interactive quiz component with gamification features
17042
17426
  *
@@ -19850,6 +20234,55 @@ export declare interface NiceThemeSpacing {
19850
20234
  space16?: string;
19851
20235
  }
19852
20236
 
20237
+ /**
20238
+ * NiceThemeSwitcher — Traceless-aware theme selection component.
20239
+ *
20240
+ * @example
20241
+ * ```tsx
20242
+ * // Basic usage with themes
20243
+ * <NiceThemeSwitcher
20244
+ * themes={[
20245
+ * { key: 'light', label: 'Light', icon: '☀️', theme: lightTheme },
20246
+ * { key: 'dark', label: 'Dark', icon: '🌙', theme: darkTheme },
20247
+ * ]}
20248
+ * />
20249
+ *
20250
+ * // In traceless mode (no persistence)
20251
+ * <NiceThemeSwitcher themes={myThemes} storageMode="traceless" />
20252
+ * ```
20253
+ */
20254
+ export declare function NiceThemeSwitcher({ variant, themes, size, showLabels, onThemeChange, defaultTheme, showSystemOption, className, style, disabled, label, hideLabel, cookies, localStorage, sessionStorage, storageMode, storageKey, }: NiceThemeSwitcherProps): default_2.ReactElement;
20255
+
20256
+ /**
20257
+ * Props for NiceThemeSwitcher.
20258
+ */
20259
+ export declare interface NiceThemeSwitcherProps extends ThemeSwitcherStorageProps {
20260
+ /** Display variant */
20261
+ variant?: ThemeSwitcherVariant;
20262
+ /** Available theme options (required - define your light/dark themes) */
20263
+ themes: ThemeOption[];
20264
+ /** Size */
20265
+ size?: 'sm' | 'md' | 'lg';
20266
+ /** Show labels (only applies to 'icons' and 'buttons' variants) */
20267
+ showLabels?: boolean;
20268
+ /** Callback when theme changes */
20269
+ onThemeChange?: (theme: NiceTheme, key: string) => void;
20270
+ /** Default theme key (if not persisted or in traceless mode) */
20271
+ defaultTheme?: string;
20272
+ /** Show "System" option that follows OS preference */
20273
+ showSystemOption?: boolean;
20274
+ /** Custom class name */
20275
+ className?: string;
20276
+ /** Inline styles */
20277
+ style?: default_2.CSSProperties;
20278
+ /** Disabled state */
20279
+ disabled?: boolean;
20280
+ /** Label for the switcher */
20281
+ label?: string;
20282
+ /** Hide label visually (still accessible) */
20283
+ hideLabel?: boolean;
20284
+ }
20285
+
19853
20286
  /** Text colour levels. */
19854
20287
  export declare interface NiceThemeText {
19855
20288
  primary: string;
@@ -22885,6 +23318,20 @@ export declare interface PackageDoc {
22885
23318
  }>;
22886
23319
  }
22887
23320
 
23321
+ /**
23322
+ * Page view event.
23323
+ */
23324
+ export declare interface PageViewEvent {
23325
+ /** Page path */
23326
+ path: string;
23327
+ /** Page title */
23328
+ title?: string;
23329
+ /** Referrer */
23330
+ referrer?: string;
23331
+ /** Additional properties */
23332
+ properties?: Record<string, unknown>;
23333
+ }
23334
+
22888
23335
  /**
22889
23336
  * Panel customization.
22890
23337
  */
@@ -23277,6 +23724,11 @@ export declare type PreloadFn = () => Promise<void>;
23277
23724
  */
23278
23725
  export declare function printPerformanceReport(): void;
23279
23726
 
23727
+ /**
23728
+ * Privacy level ordering (lower index = more private).
23729
+ */
23730
+ export declare const PRIVACY_LEVEL_ORDER: TracelessMode[];
23731
+
23280
23732
  export declare interface ProcessIncident {
23281
23733
  id: string;
23282
23734
  instanceId: string;
@@ -23942,6 +24394,12 @@ export declare function resolveDisplayStyleConfig(style: NiceDisplayStyle): Them
23942
24394
  /** Resolve permissions for a set of user roles. */
23943
24395
  export declare function resolvePermissions(userRoleIds: string[], policy: NiceRbacPolicy): NiceResolvedPermissions;
23944
24396
 
24397
+ /**
24398
+ * Resolves effective policy from hierarchy.
24399
+ * Instance ceiling → Tenant policy → Group policy → User preference
24400
+ */
24401
+ export declare function resolveTracelessPolicy(instanceCeiling: TracelessInstanceCeiling, tenantPolicy?: TracelessTenantPolicy, groupPolicy?: TracelessGroupPolicy, userPreference?: TracelessUserPreference): ITracelessPolicy;
24402
+
23945
24403
  export declare interface Resource {
23946
24404
  id: string;
23947
24405
  name: string;
@@ -25052,6 +25510,99 @@ export declare function startMark(name: string, detail?: Record<string, unknown>
25052
25510
  /** Predefined status semantic categories. */
25053
25511
  export declare type StatusCategory = 'success' | 'warning' | 'error' | 'info' | 'neutral' | 'custom';
25054
25512
 
25513
+ /**
25514
+ * Unified storage adapter that respects Traceless policy.
25515
+ * Gracefully degrades based on what's available.
25516
+ */
25517
+ export declare class StorageAdapter {
25518
+ private policy;
25519
+ private namespace;
25520
+ private defaultBackend;
25521
+ constructor(policy: ITracelessPolicy, namespace?: string, defaultBackend?: StorageBackendType);
25522
+ /**
25523
+ * Gets the appropriate storage backend based on policy.
25524
+ */
25525
+ private getBackend;
25526
+ /**
25527
+ * Gets the prefixed key.
25528
+ */
25529
+ private getKey;
25530
+ /**
25531
+ * Gets a value from storage.
25532
+ */
25533
+ get<T = string>(key: string, preferredBackend?: StorageBackendType): T | null;
25534
+ /**
25535
+ * Sets a value in storage.
25536
+ * Silently no-ops if storage is not available (graceful degradation).
25537
+ */
25538
+ set(key: string, value: unknown, preferredBackend?: StorageBackendType): boolean;
25539
+ /**
25540
+ * Removes a value from storage.
25541
+ */
25542
+ remove(key: string, preferredBackend?: StorageBackendType): boolean;
25543
+ /**
25544
+ * Clears all namespaced values from storage.
25545
+ */
25546
+ clear(preferredBackend?: StorageBackendType): void;
25547
+ /**
25548
+ * Gets all keys in the namespace.
25549
+ */
25550
+ keys(preferredBackend?: StorageBackendType): string[];
25551
+ /**
25552
+ * Checks if a key exists.
25553
+ */
25554
+ has(key: string, preferredBackend?: StorageBackendType): boolean;
25555
+ /**
25556
+ * Gets info about current storage capabilities.
25557
+ */
25558
+ getCapabilities(): StorageCapabilities;
25559
+ /**
25560
+ * Gets the actual backend type being used.
25561
+ */
25562
+ private getActualBackendType;
25563
+ /**
25564
+ * Updates the policy (e.g., after user changes preferences).
25565
+ */
25566
+ updatePolicy(policy: ITracelessPolicy): void;
25567
+ }
25568
+
25569
+ /**
25570
+ * Storage audit result.
25571
+ */
25572
+ export declare interface StorageAuditResult {
25573
+ compliant: boolean;
25574
+ violations: StorageViolation[];
25575
+ auditedAt: number;
25576
+ policy: TracelessMode;
25577
+ }
25578
+
25579
+ /**
25580
+ * Storage backend type.
25581
+ */
25582
+ export declare type StorageBackendType = 'memory' | 'session' | 'local';
25583
+
25584
+ /**
25585
+ * Storage capabilities info.
25586
+ */
25587
+ declare interface StorageCapabilities {
25588
+ canUseCookies: boolean;
25589
+ canUseLocalStorage: boolean;
25590
+ canUseSessionStorage: boolean;
25591
+ canPersist: boolean;
25592
+ effectiveMode: TracelessMode;
25593
+ actualBackend: StorageBackendType;
25594
+ }
25595
+
25596
+ /**
25597
+ * Storage violation entry.
25598
+ */
25599
+ export declare interface StorageViolation {
25600
+ type: 'cookie' | 'localStorage' | 'sessionStorage';
25601
+ severity: 'low' | 'medium' | 'high';
25602
+ message: string;
25603
+ data?: string;
25604
+ }
25605
+
25055
25606
  /** Stream analytics */
25056
25607
  export declare interface StreamAnalytics {
25057
25608
  totalViewers: number;
@@ -25681,6 +26232,22 @@ export declare const themeOneDark: NiceTheme;
25681
26232
 
25682
26233
  export declare const themeOnyx: NiceTheme;
25683
26234
 
26235
+ /**
26236
+ * Theme option for the switcher.
26237
+ */
26238
+ export declare interface ThemeOption {
26239
+ /** Unique key */
26240
+ key: string;
26241
+ /** Display label */
26242
+ label: string;
26243
+ /** Icon or emoji */
26244
+ icon?: default_2.ReactNode;
26245
+ /** The theme object */
26246
+ theme: NiceTheme;
26247
+ /** Whether this is the system theme (follows OS preference) */
26248
+ isSystem?: boolean;
26249
+ }
26250
+
25684
26251
  export declare const themeOrange: NiceTheme;
25685
26252
 
25686
26253
  export declare const themePastelCoral: NiceTheme;
@@ -25701,6 +26268,11 @@ export declare const themePastelSky: NiceTheme;
25701
26268
 
25702
26269
  export declare const themePink: NiceTheme;
25703
26270
 
26271
+ /**
26272
+ * Built-in theme presets.
26273
+ */
26274
+ export declare type ThemePreset = 'light' | 'dark' | 'system' | 'custom';
26275
+
25704
26276
  export declare const themeRealEstate: NiceTheme;
25705
26277
 
25706
26278
  export declare const themeRetrowave: NiceTheme;
@@ -25735,6 +26307,27 @@ export declare const themeSummerBeach: NiceTheme;
25735
26307
 
25736
26308
  export declare const themeSunset: NiceTheme;
25737
26309
 
26310
+ /**
26311
+ * Traceless storage props interface for theme switcher.
26312
+ */
26313
+ declare interface ThemeSwitcherStorageProps {
26314
+ /** Whether this component may use cookies */
26315
+ cookies?: boolean;
26316
+ /** Whether this component may use localStorage */
26317
+ localStorage?: boolean;
26318
+ /** Whether this component may use sessionStorage */
26319
+ sessionStorage?: boolean;
26320
+ /** Override storage mode for this component */
26321
+ storageMode?: TracelessMode;
26322
+ /** Storage key for persisting component state */
26323
+ storageKey?: string;
26324
+ }
26325
+
26326
+ /**
26327
+ * Display variant for the theme switcher.
26328
+ */
26329
+ export declare type ThemeSwitcherVariant = 'dropdown' | 'radio' | 'buttons' | 'icons';
26330
+
25738
26331
  export declare const themeSynthwave: NiceTheme;
25739
26332
 
25740
26333
  export declare const themeTeal: NiceTheme;
@@ -26151,6 +26744,360 @@ export declare interface TouchTargetProps {
26151
26744
  onClick?: () => void;
26152
26745
  }
26153
26746
 
26747
+ /**
26748
+ * Default values for Traceless storage props (safe by default).
26749
+ */
26750
+ export declare const TRACELESS_DEFAULT_PROPS: Record<string, unknown>;
26751
+
26752
+ /**
26753
+ * Policy presets for each mode.
26754
+ */
26755
+ export declare const TRACELESS_MODE_PRESETS: Record<TracelessMode, Omit<ITracelessPolicy, 'source' | 'resolvedAt' | 'version'>>;
26756
+
26757
+ /**
26758
+ * Standard Traceless storage prop descriptors.
26759
+ * Add these to any control that can persist state.
26760
+ */
26761
+ export declare const TRACELESS_PROP_DESCRIPTORS: NiceConfiguratorPropDescriptor[];
26762
+
26763
+ /**
26764
+ * Displays current Traceless mode with visual indicator.
26765
+ *
26766
+ * @example
26767
+ * ```tsx
26768
+ * <TracelessBadge showTooltip onClick={() => openPrivacySettings()} />
26769
+ * ```
26770
+ */
26771
+ export declare function TracelessBadge({ className, size, showTooltip, showLabel, onClick, label: customLabel, tooltipPosition, }: TracelessBadgeProps): default_2.ReactElement;
26772
+
26773
+ /**
26774
+ * Badge display info for TracelessBadge component.
26775
+ */
26776
+ export declare interface TracelessBadgeInfo {
26777
+ mode: TracelessMode;
26778
+ icon: string;
26779
+ color: string;
26780
+ label: string;
26781
+ tooltip: string;
26782
+ cssClass: string;
26783
+ }
26784
+
26785
+ /**
26786
+ * Props for TracelessBadge component.
26787
+ */
26788
+ export declare interface TracelessBadgeProps {
26789
+ /** Custom class name */
26790
+ className?: string;
26791
+ /** Size variant */
26792
+ size?: 'sm' | 'md' | 'lg';
26793
+ /** Show tooltip on hover */
26794
+ showTooltip?: boolean;
26795
+ /** Show label text */
26796
+ showLabel?: boolean;
26797
+ /** Click handler (e.g., to open settings) */
26798
+ onClick?: () => void;
26799
+ /** Custom label override */
26800
+ label?: string;
26801
+ /** Position for tooltip */
26802
+ tooltipPosition?: 'top' | 'bottom' | 'left' | 'right';
26803
+ }
26804
+
26805
+ /**
26806
+ * Compliance report structure.
26807
+ */
26808
+ export declare interface TracelessComplianceReport {
26809
+ generatedAt: string;
26810
+ instanceId: string;
26811
+ tenantId?: string;
26812
+ effectiveMode: TracelessMode;
26813
+ cookies: {
26814
+ count: number;
26815
+ allowed: boolean;
26816
+ strictAuthOnly: boolean;
26817
+ thirdParty: boolean;
26818
+ tracking: boolean;
26819
+ };
26820
+ localStorage: {
26821
+ bytesUsed: number;
26822
+ allowed: boolean;
26823
+ keysCount: number;
26824
+ };
26825
+ sessionStorage: {
26826
+ bytesUsed: number;
26827
+ allowed: boolean;
26828
+ keysCount: number;
26829
+ };
26830
+ consentBanner: {
26831
+ required: boolean;
26832
+ shown: boolean;
26833
+ };
26834
+ compliance: {
26835
+ ePrivacyCompliant: boolean;
26836
+ gdprCompliant: boolean;
26837
+ pecrCompliant: boolean;
26838
+ };
26839
+ statement: string;
26840
+ }
26841
+
26842
+ /**
26843
+ * Traceless context value.
26844
+ */
26845
+ export declare interface TracelessContextValue {
26846
+ /** Current effective policy */
26847
+ policy: ITracelessPolicy;
26848
+ /** Whether cookies are allowed */
26849
+ canUseCookies: boolean;
26850
+ /** Whether localStorage is allowed */
26851
+ canUseLocalStorage: boolean;
26852
+ /** Whether sessionStorage is allowed */
26853
+ canUseSessionStorage: boolean;
26854
+ /** Whether data can be persisted across sessions */
26855
+ canPersist: boolean;
26856
+ /** Current mode */
26857
+ mode: TracelessMode;
26858
+ /** Whether consent banner should be shown */
26859
+ requiresConsentBanner: boolean;
26860
+ /** Badge info for UI display */
26861
+ badgeInfo: TracelessBadgeInfo;
26862
+ /** Update user preference (can only increase privacy) */
26863
+ setUserPreference: (preference: Partial<TracelessUserPreference>) => void;
26864
+ /** Generate compliance report */
26865
+ generateReport: () => TracelessComplianceReport;
26866
+ /** Run storage audit */
26867
+ runAudit: () => StorageAuditResult;
26868
+ /** Force refresh policy from API */
26869
+ refreshPolicy: () => Promise<void>;
26870
+ /** Get storage adapter for a namespace */
26871
+ getStorageAdapter: (namespace?: string) => StorageAdapter;
26872
+ /** Whether policy is still loading */
26873
+ isLoading: boolean;
26874
+ /** Error if policy fetch failed */
26875
+ error: Error | null;
26876
+ }
26877
+
26878
+ /**
26879
+ * User group policy.
26880
+ */
26881
+ declare interface TracelessGroupPolicy {
26882
+ groupId: string;
26883
+ tenantId: string;
26884
+ /** Policy mode (cannot exceed tenant policy) */
26885
+ mode: TracelessMode;
26886
+ /** Allow users in this group to self-lockdown? */
26887
+ allowUserLockdown: boolean;
26888
+ }
26889
+
26890
+ /**
26891
+ * Instance-level ceiling configuration.
26892
+ * Sets the maximum permissions any tenant/user can have.
26893
+ */
26894
+ declare interface TracelessInstanceCeiling {
26895
+ /** Maximum cookie permission for all tenants */
26896
+ maxCookies: boolean;
26897
+ /** Maximum localStorage permission for all tenants */
26898
+ maxLocalStorage: boolean;
26899
+ /** Maximum sessionStorage permission for all tenants */
26900
+ maxSessionStorage: boolean;
26901
+ /** Instance-wide default mode */
26902
+ defaultMode: TracelessMode;
26903
+ /** Allow tenants to override? */
26904
+ allowTenantOverride: boolean;
26905
+ /** Instance ID for audit */
26906
+ instanceId: string;
26907
+ }
26908
+
26909
+ /**
26910
+ * @fileoverview Traceless™ — Zero-Trace Privacy Architecture
26911
+ * @module @nice2dev/ui/core/traceless
26912
+ *
26913
+ * Traceless™ is OmniVerk's flagship privacy feature that allows complete control
26914
+ * over client-side storage (cookies, localStorage, sessionStorage).
26915
+ *
26916
+ * "Żadnych śladów. Żadnych cookies. Żadnego localStorage. Żadnego bannera. Traceless."
26917
+ *
26918
+ * @example
26919
+ * ```tsx
26920
+ * import { TracelessProvider, useTracelessPolicy, StorageAdapter } from '@nice2dev/ui';
26921
+ *
26922
+ * // In your app root:
26923
+ * <TracelessProvider>
26924
+ * <App />
26925
+ * </TracelessProvider>
26926
+ *
26927
+ * // In components:
26928
+ * const { mode, canUseCookies, canUseLocalStorage } = useTracelessPolicy();
26929
+ * const storage = useStorageAdapter();
26930
+ * storage.set('key', 'value'); // Automatically respects policy
26931
+ * ```
26932
+ */
26933
+ /**
26934
+ * Privacy storage modes from most private to most permissive.
26935
+ *
26936
+ * | Mode | Cookies | localStorage | sessionStorage | Consent Banner |
26937
+ * |------------|---------|--------------|----------------|----------------|
26938
+ * | traceless | ❌ | ❌ | ❌ | ❌ Never |
26939
+ * | ephemeral | ❌ | ❌ | ✅ | ❌ Never |
26940
+ * | private | 1 auth | ❌ | ✅ | ❌ Exempt |
26941
+ * | balanced | ❌ | ✅ | ✅ | ⚠️ Maybe |
26942
+ * | full | ✅ | ✅ | ✅ | ✅ Required |
26943
+ * | custom | Config | Config | Config | Config |
26944
+ */
26945
+ export declare type TracelessMode = 'traceless' | 'ephemeral' | 'private' | 'balanced' | 'full' | 'custom';
26946
+
26947
+ /**
26948
+ * Full privacy settings panel.
26949
+ */
26950
+ export declare function TracelessPanel({ className, showReport, showAudit, showModeSelector, availableModes, onModeChange, }: TracelessPanelProps): default_2.ReactElement;
26951
+
26952
+ /**
26953
+ * Props for TracelessPanel component.
26954
+ */
26955
+ export declare interface TracelessPanelProps {
26956
+ /** Custom class name */
26957
+ className?: string;
26958
+ /** Show compliance report */
26959
+ showReport?: boolean;
26960
+ /** Show audit results */
26961
+ showAudit?: boolean;
26962
+ /** Show mode selector */
26963
+ showModeSelector?: boolean;
26964
+ /** Available modes to select from */
26965
+ availableModes?: TracelessMode[];
26966
+ /** Callback when user changes mode */
26967
+ onModeChange?: (mode: TracelessMode) => void;
26968
+ }
26969
+
26970
+ /**
26971
+ * Source hierarchy for policy resolution.
26972
+ * Lower sources cannot exceed permissions of higher sources.
26973
+ */
26974
+ export declare type TracelessPolicySource = 'instance' | 'tenant' | 'group' | 'user' | 'control' | 'default';
26975
+
26976
+ /**
26977
+ * Provider component for Traceless context.
26978
+ */
26979
+ export declare function TracelessProvider({ children, initialPolicy, policyEndpoint, instanceCeiling, tenantPolicy, groupPolicy, userPreference: initialUserPreference, instanceId, tenantId, onPolicyChange, }: TracelessProviderProps): default_2.ReactElement;
26980
+
26981
+ /**
26982
+ * Props for TracelessProvider.
26983
+ */
26984
+ export declare interface TracelessProviderProps {
26985
+ children: ReactNode;
26986
+ /**
26987
+ * Initial policy to use before fetching from API.
26988
+ * Defaults to most restrictive (traceless).
26989
+ */
26990
+ initialPolicy?: ITracelessPolicy;
26991
+ /**
26992
+ * API endpoint to fetch policy from.
26993
+ * If not provided, uses initialPolicy or default.
26994
+ */
26995
+ policyEndpoint?: string;
26996
+ /**
26997
+ * Instance ceiling configuration.
26998
+ * If not provided, uses permissive defaults.
26999
+ */
27000
+ instanceCeiling?: TracelessInstanceCeiling;
27001
+ /**
27002
+ * Tenant policy configuration.
27003
+ */
27004
+ tenantPolicy?: TracelessTenantPolicy;
27005
+ /**
27006
+ * Group policy configuration.
27007
+ */
27008
+ groupPolicy?: TracelessGroupPolicy;
27009
+ /**
27010
+ * User preference configuration.
27011
+ */
27012
+ userPreference?: TracelessUserPreference;
27013
+ /**
27014
+ * Instance ID for reports.
27015
+ */
27016
+ instanceId?: string;
27017
+ /**
27018
+ * Tenant ID for reports.
27019
+ */
27020
+ tenantId?: string;
27021
+ /**
27022
+ * Callback when policy changes.
27023
+ */
27024
+ onPolicyChange?: (policy: ITracelessPolicy) => void;
27025
+ }
27026
+
27027
+ /**
27028
+ * Standard props that can be added to any component to support Traceless policy.
27029
+ */
27030
+ export declare interface TracelessStorageProps {
27031
+ /** Whether this component may use cookies */
27032
+ cookies?: boolean;
27033
+ /** Whether this component may use localStorage */
27034
+ localStorage?: boolean;
27035
+ /** Whether this component may use sessionStorage */
27036
+ sessionStorage?: boolean;
27037
+ /** Override storage mode for this component */
27038
+ storageMode?: TracelessMode;
27039
+ /** Storage key for persisting component state */
27040
+ storageKey?: string;
27041
+ }
27042
+
27043
+ /**
27044
+ * Tenant-level policy configuration.
27045
+ */
27046
+ declare interface TracelessTenantPolicy {
27047
+ tenantId: string;
27048
+ /** Policy mode (cannot exceed instance ceiling) */
27049
+ mode: TracelessMode;
27050
+ /** Custom overrides */
27051
+ customPolicy?: Partial<ITracelessPolicy>;
27052
+ /** Allow user groups to override? */
27053
+ allowGroupOverride: boolean;
27054
+ /** Allow individual users to override? */
27055
+ allowUserOverride: boolean;
27056
+ /** Last updated timestamp */
27057
+ updatedAt: number;
27058
+ /** Updated by user ID */
27059
+ updatedBy?: string;
27060
+ }
27061
+
27062
+ /**
27063
+ * User self-lockdown configuration.
27064
+ * Users can only INCREASE privacy, never decrease it.
27065
+ */
27066
+ declare interface TracelessUserPreference {
27067
+ userId: string;
27068
+ /** User's preferred mode (must be >= group mode in privacy) */
27069
+ preferredMode: TracelessMode;
27070
+ /** Explicit overrides (can only restrict, not permit) */
27071
+ restrictCookies?: boolean;
27072
+ restrictLocalStorage?: boolean;
27073
+ restrictSessionStorage?: boolean;
27074
+ /** When user set this preference */
27075
+ setAt: number;
27076
+ }
27077
+
27078
+ /**
27079
+ * Shows warning when functionality is degraded due to privacy settings.
27080
+ */
27081
+ export declare function TracelessWarning({ useCase, className, message: customMessage, variant, dismissible, onDismiss, }: TracelessWarningProps): default_2.ReactElement | null;
27082
+
27083
+ /**
27084
+ * Props for TracelessWarning.
27085
+ */
27086
+ export declare interface TracelessWarningProps {
27087
+ /** Use case type */
27088
+ useCase: 'preferences' | 'draft' | 'history' | 'auth' | 'grid-state';
27089
+ /** Custom class name */
27090
+ className?: string;
27091
+ /** Custom message override */
27092
+ message?: string;
27093
+ /** Variant */
27094
+ variant?: 'inline' | 'banner' | 'toast';
27095
+ /** Show dismiss button */
27096
+ dismissible?: boolean;
27097
+ /** Callback when dismissed */
27098
+ onDismiss?: () => void;
27099
+ }
27100
+
26154
27101
  export declare interface Track {
26155
27102
  id: string;
26156
27103
  type: TrackType;
@@ -26475,6 +27422,11 @@ declare interface UseAICompletionResult {
26475
27422
  clearHistory: () => void;
26476
27423
  }
26477
27424
 
27425
+ /**
27426
+ * Hook to access analytics tracking functions.
27427
+ */
27428
+ export declare function useAnalytics(): AnalyticsContextValue;
27429
+
26478
27430
  export declare function useAuditLog(options?: UseAuditLogOptions): UseAuditLogResult;
26479
27431
 
26480
27432
  export declare interface UseAuditLogOptions {
@@ -26826,6 +27778,19 @@ export declare function useComponentDisplayClass(componentType: NiceComponentTyp
26826
27778
  */
26827
27779
  export declare function useComponentDisplayStyle(componentType: NiceComponentType, propStyle?: NiceDisplayStyle, primaryColor?: string): React.CSSProperties;
26828
27780
 
27781
+ /**
27782
+ * Hook to get help content for a specific component
27783
+ */
27784
+ export declare function useComponentHelp(componentName: string): {
27785
+ content: HelpContent | null;
27786
+ loading: boolean;
27787
+ enabled: boolean;
27788
+ loadContent: () => Promise<void>;
27789
+ position: "tooltip" | "top" | "bottom" | "sidebar";
27790
+ defaultExpanded: boolean;
27791
+ showHelpIcon: boolean;
27792
+ };
27793
+
26829
27794
  export declare function useContainerSize(ref: React.RefObject<HTMLElement | null>): UseContainerSizeResult;
26830
27795
 
26831
27796
  export declare interface UseContainerSizeResult {
@@ -26849,6 +27814,15 @@ ControlPreferences[T] | undefined,
26849
27814
  (updates: Partial<NonNullable<ControlPreferences[T]>>) => void
26850
27815
  ];
26851
27816
 
27817
+ /**
27818
+ * Hook for cookie banner visibility.
27819
+ */
27820
+ export declare function useCookieBannerVisibility(): {
27821
+ shouldShow: boolean;
27822
+ mode: TracelessMode;
27823
+ dismiss: () => void;
27824
+ };
27825
+
26852
27826
  /**
26853
27827
  * Hook for managing dark mode with system preference detection and persistence.
26854
27828
  * Automatically applies CSS classes to documentElement.
@@ -26949,6 +27923,29 @@ export declare interface UseDrawerResult {
26949
27923
  setOpen: (open: boolean) => void;
26950
27924
  }
26951
27925
 
27926
+ /**
27927
+ * Hook for persisting editor state with Traceless policy awareness.
27928
+ * Useful for NiceRichTextEditor, NiceCodeEditor, etc.
27929
+ */
27930
+ export declare function useEditorStatePersistence({ storageKey, autoSaveInterval, maxVersions, }: {
27931
+ storageKey: string;
27932
+ autoSaveInterval?: number;
27933
+ maxVersions?: number;
27934
+ }): {
27935
+ draft: EditorPersistentState | null;
27936
+ saveDraft: (content: string, cursorPosition?: {
27937
+ line: number;
27938
+ column: number;
27939
+ }) => void;
27940
+ saveToHistory: () => void;
27941
+ restoreVersion: (version: number) => void;
27942
+ clearDraft: () => void;
27943
+ history: EditorPersistentState[];
27944
+ hasDraft: boolean;
27945
+ degraded: boolean;
27946
+ policy: ITracelessPolicy;
27947
+ };
27948
+
26952
27949
  export declare function useERPReportDesigner(): ERPReportDesignerContextValue;
26953
27950
 
26954
27951
  export declare function useFAQ(): FAQContextValue;
@@ -27053,6 +28050,30 @@ export declare interface UseGesturesReturn {
27053
28050
  */
27054
28051
  export declare function useGridPreferences(gridId: string): [GridPreferences | undefined, (prefs: GridPreferences | undefined) => void, (updates: Partial<GridPreferences>) => void];
27055
28052
 
28053
+ /**
28054
+ * Hook for persisting grid state with Traceless policy awareness.
28055
+ *
28056
+ * @example
28057
+ * ```tsx
28058
+ * const { state, updateState, clearState, degraded } = useGridStatePersistence({
28059
+ * storageKey: 'my-grid',
28060
+ * initialState: { pageSize: 10 },
28061
+ * });
28062
+ *
28063
+ * // Show warning if storage is degraded
28064
+ * {degraded && <TracelessWarning useCase="grid-state" />}
28065
+ * ```
28066
+ */
28067
+ export declare function useGridStatePersistence({ storageKey, initialState, onStateChange, storageType, }: GridStatePersistenceOptions): {
28068
+ state: GridPersistentState;
28069
+ updateState: (partial: Partial<GridPersistentState>) => void;
28070
+ setState: Dispatch<SetStateAction<GridPersistentState>>;
28071
+ clearState: () => void;
28072
+ degraded: boolean;
28073
+ effectiveStorageType: "local" | "memory" | "session";
28074
+ policy: ITracelessPolicy;
28075
+ };
28076
+
27056
28077
  /**
27057
28078
  * Hook that returns a function to trigger haptic feedback.
27058
28079
  */
@@ -27415,6 +28436,11 @@ export declare function useNiceDisplayStyle(): NiceDisplayStyleContextValue;
27415
28436
 
27416
28437
  export declare function useNiceField<T = any>(source: NiceDataSource<T> | null | undefined, key: unknown, field: string): NiceFieldState;
27417
28438
 
28439
+ /**
28440
+ * Hook to access global help configuration and utilities
28441
+ */
28442
+ export declare function useNiceHelp(): HelpContextValue;
28443
+
27418
28444
  /**
27419
28445
  * Hook that provides a `renderIcon` helper for resolving icon names or React nodes.
27420
28446
  * Used internally by components that accept `icon: string | ReactNode` props.
@@ -27549,6 +28575,15 @@ export declare interface UsePanResult {
27549
28575
  deltaY: number;
27550
28576
  }
27551
28577
 
28578
+ /**
28579
+ * Hook for persisted state with graceful degradation.
28580
+ * Falls back to in-memory state if storage not available.
28581
+ */
28582
+ export declare function usePersistedState<T>(key: string, defaultValue: T, options?: {
28583
+ namespace?: string;
28584
+ storageMode?: 'local' | 'session';
28585
+ }): [T, (value: T | ((prev: T) => T)) => void, boolean];
28586
+
27552
28587
  /**
27553
28588
  * Hook for detecting pinch-to-zoom gestures.
27554
28589
  */
@@ -27660,6 +28695,19 @@ export declare function useResolvedDisplayStyle(propStyle?: NiceDisplayStyle): {
27660
28695
  config: ThemeVariantConfig;
27661
28696
  };
27662
28697
 
28698
+ /**
28699
+ * Resolve storage props against the current Traceless policy.
28700
+ * Components can use this to determine what storage is actually available.
28701
+ */
28702
+ export declare function useResolvedStorageProps(props: TracelessStorageProps): {
28703
+ cookiesAllowed: boolean;
28704
+ localStorageAllowed: boolean;
28705
+ sessionStorageAllowed: boolean;
28706
+ effectiveMode: TracelessMode;
28707
+ canPersist: boolean;
28708
+ degraded: boolean;
28709
+ };
28710
+
27663
28711
  export declare function useResponsiveValue<T>(value: NiceResponsiveValue<T>, breakpoints?: NiceBreakpoints): T;
27664
28712
 
27665
28713
  /** Return focus to the element that was focused before the component mounted */
@@ -27955,6 +29003,20 @@ export declare interface UseSliderReturn {
27955
29003
  snap: (value: number) => number;
27956
29004
  }
27957
29005
 
29006
+ /**
29007
+ * Hook to get a namespaced storage adapter.
29008
+ */
29009
+ export declare function useStorageAdapter(namespace?: string): StorageAdapter;
29010
+
29011
+ /**
29012
+ * Hook for running compliance audit on mount.
29013
+ */
29014
+ export declare function useStorageAudit(autoRun?: boolean): {
29015
+ result: StorageAuditResult | null;
29016
+ run: () => StorageAuditResult;
29017
+ isCompliant: boolean | null;
29018
+ };
29019
+
27958
29020
  export declare function useStreamDashboard(): StreamDashboardContextValue;
27959
29021
 
27960
29022
  /**
@@ -28087,6 +29149,80 @@ export declare function useTouchForm(): TouchFormContextType;
28087
29149
  */
28088
29150
  export declare function useTouchSlider(options: UseSliderOptions): UseSliderReturn;
28089
29151
 
29152
+ /**
29153
+ * Drop-in replacement for localStorage that respects Traceless policy.
29154
+ * Use this when migrating existing components that use localStorage directly.
29155
+ *
29156
+ * @example
29157
+ * ```tsx
29158
+ * // Before:
29159
+ * const savedValue = localStorage.getItem('my-key');
29160
+ * localStorage.setItem('my-key', value);
29161
+ *
29162
+ * // After:
29163
+ * const { getItem, setItem } = useTracelessLocalStorage();
29164
+ * const savedValue = getItem('my-key');
29165
+ * setItem('my-key', value);
29166
+ * ```
29167
+ */
29168
+ export declare function useTracelessLocalStorage(): {
29169
+ getItem: (key: string) => string | null;
29170
+ setItem: (key: string, value: string) => void;
29171
+ removeItem: (key: string) => void;
29172
+ clear: () => void;
29173
+ isAvailable: boolean;
29174
+ effectiveMode: TracelessMode;
29175
+ policy: ITracelessPolicy;
29176
+ };
29177
+
29178
+ /**
29179
+ * Hook to access the Traceless policy context.
29180
+ * Throws if used outside TracelessProvider.
29181
+ */
29182
+ export declare function useTracelessPolicy(): TracelessContextValue;
29183
+
29184
+ /**
29185
+ * Hook to access Traceless policy with fallback.
29186
+ * Returns default policy if outside provider.
29187
+ */
29188
+ export declare function useTracelessPolicySafe(): TracelessContextValue;
29189
+
29190
+ /**
29191
+ * Drop-in replacement for sessionStorage that respects Traceless policy.
29192
+ */
29193
+ export declare function useTracelessSessionStorage(): {
29194
+ getItem: (key: string) => string | null;
29195
+ setItem: (key: string, value: string) => void;
29196
+ removeItem: (key: string) => void;
29197
+ clear: () => void;
29198
+ isAvailable: boolean;
29199
+ effectiveMode: TracelessMode;
29200
+ };
29201
+
29202
+ /**
29203
+ * Creates a storage object that mimics the Storage interface but respects
29204
+ * Traceless policy. Use this for migrating existing code that expects a
29205
+ * Storage-like object.
29206
+ *
29207
+ * @example
29208
+ * ```tsx
29209
+ * // In component
29210
+ * const storage = useTracelessStorage();
29211
+ *
29212
+ * // Uses same interface as localStorage/sessionStorage
29213
+ * storage.setItem('key', 'value');
29214
+ * const val = storage.getItem('key');
29215
+ * ```
29216
+ */
29217
+ export declare function useTracelessStorage(preferredType?: 'local' | 'session'): {
29218
+ getItem(key: string): string | null;
29219
+ setItem(key: string, value: string): void;
29220
+ removeItem(key: string): void;
29221
+ clear(): void;
29222
+ readonly length: number;
29223
+ key(index: number): string | null;
29224
+ };
29225
+
28090
29226
  export declare function useTranscoder(): TranscoderContextValue;
28091
29227
 
28092
29228
  export declare function useUndoKeyboard<T = unknown>(manager: NiceUndoManager<T>): void;
@@ -28818,6 +29954,28 @@ export declare function withPolling<T extends Record<string, any>>(source: NiceD
28818
29954
  setInterval(ms: number): void;
28819
29955
  };
28820
29956
 
29957
+ /**
29958
+ * Adds Traceless storage props to a control registry entry.
29959
+ * Use this when registering controls that can persist state.
29960
+ *
29961
+ * @example
29962
+ * ```ts
29963
+ * const myControl = withTracelessProps({
29964
+ * type: 'NiceDataGrid',
29965
+ * label: 'Data Grid',
29966
+ * category: 'Data',
29967
+ * propDescriptors: [...myProps],
29968
+ * defaultProps: { ...myDefaults },
29969
+ * });
29970
+ * ```
29971
+ */
29972
+ export declare function withTracelessProps(entry: NiceControlRegistryEntry): NiceControlRegistryEntry;
29973
+
29974
+ /**
29975
+ * Adds Traceless storage props to all entries in a control registry array.
29976
+ */
29977
+ export declare function withTracelessPropsAll(entries: NiceControlRegistryEntry[]): NiceControlRegistryEntry[];
29978
+
28821
29979
  /**
28822
29980
  * HOC version of useWhyDidYouRender
28823
29981
  */