@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,201 @@
1
+ /**
2
+ * NiceOfflineStorage — IndexedDB-based offline storage
3
+ * Sprint 5: Offline Support & Cross-tab Sync
4
+ */
5
+ import type { NiceDataSource, NiceLoadOptions, NiceSortExpression, NiceFilterGroup } from './datasource';
6
+ export interface NiceIndexedDBConfig {
7
+ /** Database name */
8
+ dbName: string;
9
+ /** Store/table name */
10
+ storeName: string;
11
+ /** Key field (default 'id') */
12
+ keyField?: string;
13
+ /** Database version (default 1) */
14
+ version?: number;
15
+ /** Additional indexes to create */
16
+ indexes?: Array<{
17
+ name: string;
18
+ keyPath: string | string[];
19
+ unique?: boolean;
20
+ }>;
21
+ }
22
+ /**
23
+ * Creates a data source backed by IndexedDB for offline storage.
24
+ */
25
+ export declare function createIndexedDBDataSource<T extends Record<string, any>>(config: NiceIndexedDBConfig): NiceDataSource<T> & {
26
+ clear(): Promise<void>;
27
+ count(): Promise<number>;
28
+ getAll(): Promise<T[]>;
29
+ bulkInsert(items: T[]): Promise<void>;
30
+ bulkDelete(keys: unknown[]): Promise<void>;
31
+ exportData(): Promise<T[]>;
32
+ importData(items: T[]): Promise<void>;
33
+ };
34
+ export interface NiceOfflineFirstConfig<T> {
35
+ /** Remote data source */
36
+ remoteSource: NiceDataSource<T>;
37
+ /** IndexedDB configuration */
38
+ offlineConfig: NiceIndexedDBConfig;
39
+ /** Sync strategy */
40
+ syncStrategy?: 'remote-first' | 'local-first' | 'merge';
41
+ /** Conflict resolution */
42
+ onConflict?: (local: T, remote: T) => T;
43
+ /** Called when sync completes */
44
+ onSync?: (result: {
45
+ added: number;
46
+ updated: number;
47
+ removed: number;
48
+ }) => void;
49
+ /** Auto-sync interval in ms (0 to disable) */
50
+ autoSyncInterval?: number;
51
+ }
52
+ export interface NicePendingChange<T> {
53
+ id: string;
54
+ action: 'insert' | 'update' | 'remove';
55
+ key?: unknown;
56
+ data?: Partial<T>;
57
+ timestamp: number;
58
+ retries: number;
59
+ }
60
+ /**
61
+ * Creates an offline-first data source that syncs with a remote source.
62
+ * Works offline and syncs changes when back online.
63
+ */
64
+ export declare function createOfflineFirstDataSource<T extends Record<string, any>>(config: NiceOfflineFirstConfig<T>): NiceDataSource<T> & {
65
+ sync(): Promise<void>;
66
+ isOnline(): boolean;
67
+ getPendingChanges(): Promise<NicePendingChange<T>[]>;
68
+ clearPendingChanges(): Promise<void>;
69
+ };
70
+ export interface NiceCrossTabSyncConfig<T> {
71
+ /** Channel name for BroadcastChannel */
72
+ channelName: string;
73
+ /** Data source to sync */
74
+ source: NiceDataSource<T>;
75
+ }
76
+ export type CrossTabMessage<T> = {
77
+ type: 'insert';
78
+ data: T;
79
+ } | {
80
+ type: 'update';
81
+ key: unknown;
82
+ changes: Partial<T>;
83
+ } | {
84
+ type: 'remove';
85
+ key: unknown;
86
+ } | {
87
+ type: 'refresh';
88
+ } | {
89
+ type: 'request-sync';
90
+ } | {
91
+ type: 'sync-data';
92
+ data: T[];
93
+ };
94
+ /**
95
+ * Wraps a data source with cross-tab synchronization using BroadcastChannel.
96
+ */
97
+ export declare function withCrossTabSync<T extends Record<string, any>>(config: NiceCrossTabSyncConfig<T>): NiceDataSource<T> & {
98
+ broadcast(msg: CrossTabMessage<T>): void;
99
+ requestSync(): void;
100
+ };
101
+ export interface NiceURLStateConfig {
102
+ /** Prefix for URL params (default '') */
103
+ prefix?: string;
104
+ /** Which state to persist */
105
+ persist?: {
106
+ filter?: boolean;
107
+ sort?: boolean;
108
+ page?: boolean;
109
+ search?: boolean;
110
+ };
111
+ /** Use hash instead of query string */
112
+ useHash?: boolean;
113
+ }
114
+ export interface NiceURLState {
115
+ filter?: NiceFilterGroup;
116
+ sort?: NiceSortExpression[];
117
+ skip?: number;
118
+ take?: number;
119
+ search?: string;
120
+ }
121
+ /**
122
+ * Manages data source state in URL for bookmarkable/shareable views.
123
+ */
124
+ export declare function createURLStateManager(config?: NiceURLStateConfig): {
125
+ /**
126
+ * Read current state from URL.
127
+ */
128
+ read(): NiceURLState;
129
+ /**
130
+ * Write state to URL.
131
+ */
132
+ write(state: NiceURLState): void;
133
+ /**
134
+ * Clear all state from URL.
135
+ */
136
+ clear(): void;
137
+ /**
138
+ * Create load options from URL state.
139
+ */
140
+ toLoadOptions(): NiceLoadOptions;
141
+ };
142
+ export interface NiceStateSnapshot {
143
+ version: string;
144
+ timestamp: number;
145
+ data: unknown[];
146
+ metadata?: Record<string, unknown>;
147
+ }
148
+ /**
149
+ * Utilities for exporting and importing data source state.
150
+ */
151
+ export declare const NiceStateIO: {
152
+ /**
153
+ * Export data to JSON string.
154
+ */
155
+ exportToJSON<T>(source: NiceDataSource<T>, metadata?: Record<string, unknown>): Promise<string>;
156
+ /**
157
+ * Import data from JSON string.
158
+ */
159
+ importFromJSON<T>(source: NiceDataSource<T> & {
160
+ bulkInsert?(items: T[]): Promise<void>;
161
+ }, json: string, options?: {
162
+ replace?: boolean;
163
+ validate?: (item: T) => boolean;
164
+ }): Promise<{
165
+ imported: number;
166
+ skipped: number;
167
+ }>;
168
+ /**
169
+ * Download data as JSON file.
170
+ */
171
+ downloadAsJSON<T>(source: NiceDataSource<T>, filename?: string): Promise<void>;
172
+ /**
173
+ * Import from file input.
174
+ */
175
+ importFromFile<T>(source: NiceDataSource<T>, file: File, options?: {
176
+ replace?: boolean;
177
+ validate?: (item: T) => boolean;
178
+ }): Promise<{
179
+ imported: number;
180
+ skipped: number;
181
+ }>;
182
+ };
183
+ export interface NiceUserPreferences {
184
+ [key: string]: unknown;
185
+ }
186
+ /**
187
+ * Manages user preferences with localStorage backend.
188
+ */
189
+ export declare function createUserPreferencesStore(storageKey?: string): {
190
+ get<T>(key: string, defaultValue?: T): T | undefined;
191
+ set<T>(key: string, value: T): void;
192
+ remove(key: string): void;
193
+ getAll(): NiceUserPreferences;
194
+ setAll(prefs: NiceUserPreferences): void;
195
+ clear(): void;
196
+ /**
197
+ * Merge with existing preferences.
198
+ */
199
+ merge(prefs: Partial<NiceUserPreferences>): void;
200
+ };
201
+ //# sourceMappingURL=datasource-offline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasource-offline.d.ts","sourceRoot":"","sources":["../../src/core/datasource-offline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * NiceDataSource — Universal data-binding abstraction.
3
+ *
4
+ * Protocol-agnostic interface for fetching, querying and mutating data.
5
+ * Works with REST, OData v4, GraphQL, static arrays, or any custom backend.
6
+ *
7
+ * Usage:
8
+ * const src = createRestDataSource({ url: '/api/employees', keyField: 'id' });
9
+ * <NiceDataGrid dataSource={src} columns={[...]} />
10
+ */
11
+ export type NiceFilterOperator = '=' | '<>' | '<' | '<=' | '>' | '>=' | 'contains' | 'notcontains' | 'startswith' | 'endswith' | 'between' | 'isblank' | 'isnotblank' | (string & {});
12
+ export type NiceFilterCondition = {
13
+ type: 'condition';
14
+ field: string;
15
+ operator: NiceFilterOperator;
16
+ value: unknown;
17
+ };
18
+ export type NiceFilterGroup = {
19
+ type: 'group';
20
+ logic: 'and' | 'or';
21
+ items: (NiceFilterCondition | NiceFilterGroup)[];
22
+ };
23
+ /** Sort direction for data source queries. */
24
+ export type NiceSortDirection = 'asc' | 'desc';
25
+ /** A single sort expression: field name + direction. */
26
+ export interface NiceSortExpression {
27
+ field: string;
28
+ direction: NiceSortDirection;
29
+ }
30
+ /** Parameters sent to `load()`. All optional — adapters use what they support. */
31
+ export interface NiceLoadOptions {
32
+ filter?: NiceFilterGroup;
33
+ sort?: NiceSortExpression[];
34
+ skip?: number;
35
+ take?: number;
36
+ search?: string;
37
+ searchFields?: string[];
38
+ select?: string[];
39
+ expand?: string[];
40
+ group?: {
41
+ field: string;
42
+ direction?: NiceSortDirection;
43
+ }[];
44
+ /** Arbitrary parameters forwarded to the adapter (e.g. custom query strings). */
45
+ customParams?: Record<string, unknown>;
46
+ }
47
+ /** Result returned by {@link NiceDataSource.load}. */
48
+ export interface NiceLoadResult<T> {
49
+ data: T[];
50
+ totalCount: number;
51
+ summary?: Record<string, unknown>;
52
+ }
53
+ /** Events emitted by all NiceDataSource implementations. */
54
+ export type NiceDataSourceEventMap = {
55
+ changed: [];
56
+ loading: [boolean];
57
+ error: [Error | null];
58
+ loaded: [NiceLoadResult<unknown>];
59
+ };
60
+ type Listener<Args extends unknown[]> = (...args: Args) => void;
61
+ /**
62
+ * Universal data source interface for Nice2Dev UI data components.
63
+ * All data-bound components (NiceDataGrid, NiceList, NiceForm, etc.) accept a `NiceDataSource`.
64
+ * Create one via `createArrayDataSource`, `createRestDataSource`, `createODataDataSource`,
65
+ * `createGraphQLDataSource`, or `createCustomDataSource`.
66
+ */
67
+ export interface NiceDataSource<T = any> {
68
+ /** Field name used as unique row key. */
69
+ readonly keyField: string;
70
+ /** True when insert/update/remove are available. */
71
+ readonly writable: boolean;
72
+ load(options?: NiceLoadOptions): Promise<NiceLoadResult<T>>;
73
+ byKey(key: unknown): Promise<T | undefined>;
74
+ insert?(item: Partial<T>): Promise<T>;
75
+ update?(key: unknown, changes: Partial<T>): Promise<T>;
76
+ remove?(key: unknown): Promise<void>;
77
+ on<K extends keyof NiceDataSourceEventMap>(event: K, handler: Listener<NiceDataSourceEventMap[K]>): () => void;
78
+ }
79
+ /** Configuration for {@link createArrayDataSource}. */
80
+ export interface NiceArrayDataSourceConfig<T = any> {
81
+ keyField?: string;
82
+ data: T[];
83
+ }
84
+ /**
85
+ * Creates an in-memory data source backed by a plain array.
86
+ * Supports sort, filter, paginate, search, and full CRUD — all client-side.
87
+ */
88
+ export declare function createArrayDataSource<T extends Record<string, any> = any>(config: NiceArrayDataSourceConfig<T>): NiceDataSource<T>;
89
+ /** Configuration for {@link createRestDataSource}. */
90
+ export interface NiceRestConfig<T = any> {
91
+ /** Base URL, e.g. `/api/employees` */
92
+ url: string;
93
+ keyField?: string;
94
+ /** GET URL for loading. Default: `url`. */
95
+ loadUrl?: string;
96
+ /** POST URL. Default: `url`. */
97
+ insertUrl?: string;
98
+ /** PUT/PATCH URL builder. Default: `url/:key`. */
99
+ updateUrl?: string | ((key: unknown) => string);
100
+ /** DELETE URL builder. Default: `url/:key`. */
101
+ deleteUrl?: string | ((key: unknown) => string);
102
+ /** GET URL for single record. Default: `url/:key`. */
103
+ byKeyUrl?: string | ((key: unknown) => string);
104
+ headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);
105
+ fetchOptions?: RequestInit;
106
+ /** 'PUT' (default) or 'PATCH'. */
107
+ updateMethod?: 'PUT' | 'PATCH';
108
+ /** Map NiceLoadOptions → query-string params. If omitted, default mapping is used. */
109
+ mapLoadParams?: (options: NiceLoadOptions) => Record<string, string>;
110
+ /** Extract NiceLoadResult from fetch response JSON. */
111
+ extractLoadResult?: (json: unknown) => NiceLoadResult<T>;
112
+ /** Extract single item from response JSON. */
113
+ extractItem?: (json: unknown) => T;
114
+ prepareInsertBody?: (item: Partial<T>) => unknown;
115
+ prepareUpdateBody?: (key: unknown, changes: Partial<T>) => unknown;
116
+ onError?: (error: Error, operation: string) => void;
117
+ }
118
+ /**
119
+ * Creates a data source that communicates with a REST API.
120
+ * Supports customizable URL patterns, headers, request/response mapping,
121
+ * and optional auth header factories.
122
+ */
123
+ export declare function createRestDataSource<T extends Record<string, any> = any>(config: NiceRestConfig<T>): NiceDataSource<T>;
124
+ /** Configuration for {@link createODataDataSource}. */
125
+ export interface NiceODataConfig<T = any> {
126
+ /** OData entity set URL, e.g. `/odata/Employees`. */
127
+ url: string;
128
+ keyField?: string;
129
+ version?: 3 | 4;
130
+ headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);
131
+ fetchOptions?: RequestInit;
132
+ onError?: (error: Error, operation: string) => void;
133
+ }
134
+ export declare function createODataDataSource<T extends Record<string, any> = any>(config: NiceODataConfig<T>): NiceDataSource<T>;
135
+ /** Configuration for {@link createGraphQLDataSource}. */
136
+ export interface NiceGraphQLConfig<T = any> {
137
+ /** GraphQL endpoint URL. */
138
+ url: string;
139
+ keyField?: string;
140
+ /** Named queries / mutations. */
141
+ queries: {
142
+ /** Query returning list + totalCount. */
143
+ load: string;
144
+ /** Query returning single item by key. */
145
+ byKey?: string;
146
+ /** Mutation for insert. */
147
+ insert?: string;
148
+ /** Mutation for update. */
149
+ update?: string;
150
+ /** Mutation for delete. */
151
+ remove?: string;
152
+ };
153
+ /** Map NiceLoadOptions → GraphQL variables. Default: pass skip/take/sort/filter/search directly. */
154
+ mapVariables?: (options: NiceLoadOptions) => Record<string, unknown>;
155
+ /** Extract NiceLoadResult from query response data. */
156
+ extractLoadResult?: (data: unknown) => NiceLoadResult<T>;
157
+ /** Extract single item from query/mutation response data. */
158
+ extractItem?: (data: unknown) => T;
159
+ headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);
160
+ onError?: (error: Error, operation: string) => void;
161
+ }
162
+ export declare function createGraphQLDataSource<T extends Record<string, any> = any>(config: NiceGraphQLConfig<T>): NiceDataSource<T>;
163
+ /**
164
+ * Handler functions for a fully custom data source.
165
+ * Provide your own `load`, `byKey`, `insert`, `update`, `remove` implementations.
166
+ */
167
+ export interface NiceCustomDataSourceHandlers<T = any> {
168
+ keyField?: string;
169
+ load: (options: NiceLoadOptions) => Promise<NiceLoadResult<T>>;
170
+ byKey?: (key: unknown) => Promise<T | undefined>;
171
+ insert?: (item: Partial<T>) => Promise<T>;
172
+ update?: (key: unknown, changes: Partial<T>) => Promise<T>;
173
+ remove?: (key: unknown) => Promise<void>;
174
+ }
175
+ /**
176
+ * Creates a data source from user-supplied handler functions.
177
+ * Use this when none of the built-in adapters (Array, REST, OData, GraphQL) fits your backend.
178
+ */
179
+ export declare function createCustomDataSource<T extends Record<string, any> = any>(handlers: NiceCustomDataSourceHandlers<T>): NiceDataSource<T>;
180
+ export {};
181
+ //# sourceMappingURL=datasource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../src/core/datasource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Shared helpers for the `displayMode` prop on form-field controls.
3
+ *
4
+ * When `displayMode` is `true`, a control should render as a label-style,
5
+ * clickable text representation of its value (no input chrome). Clicking it
6
+ * (or focusing via Tab + Enter) should switch the control into the regular
7
+ * editable rendering for in-place editing — this replaces the standalone
8
+ * NiceInPlaceEditor and gives every base control the "click-to-edit" pattern.
9
+ */
10
+ import React from 'react';
11
+ export interface UseDisplayModeOptions {
12
+ enabled?: boolean;
13
+ readOnly?: boolean;
14
+ disabled?: boolean;
15
+ }
16
+ export interface UseDisplayModeResult {
17
+ /** True when the control should render as a clickable label (not the editor). */
18
+ isDisplay: boolean;
19
+ /** Switches into edit mode (focus the editor on next render). */
20
+ enterEdit: () => void;
21
+ /** Switches back into display mode. */
22
+ exitEdit: () => void;
23
+ /** Ref-callback that, when set on the editable input/textarea/etc., focuses it on enter. */
24
+ autoFocusRef: (node: HTMLElement | null) => void;
25
+ }
26
+ /**
27
+ * Tracks edit/display state for a control that supports `displayMode`.
28
+ * The editor is rendered when display mode is off OR the user has clicked
29
+ * to edit. On blur the control returns to display mode.
30
+ */
31
+ export declare function useDisplayModeEdit({ enabled, readOnly, disabled, }: UseDisplayModeOptions): UseDisplayModeResult;
32
+ export interface DisplayModeViewProps {
33
+ value: React.ReactNode;
34
+ placeholder?: React.ReactNode;
35
+ disabled?: boolean;
36
+ readOnly?: boolean;
37
+ onActivate: () => void;
38
+ className?: string;
39
+ ariaLabel?: string;
40
+ }
41
+ /**
42
+ * Renders a clickable label-style view of the value. Pressing Enter or Space
43
+ * (when focused) activates edit mode just like clicking it.
44
+ */
45
+ export declare const DisplayModeView: React.FC<DisplayModeViewProps>;
46
+ //# sourceMappingURL=displayMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"displayMode.d.ts","sourceRoot":"","sources":["../../src/core/displayMode.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,iFAAiF;IACjF,SAAS,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,4FAA4F;IAC5F,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;CAClD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,qBAAqB,GAAG,oBAAoB,CA8C9C;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAsC1D,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type { ThemeVariantConfig } from './themeVariants';
2
+ /**
3
+ * Cross-component visual presentation style.
4
+ * Each style maps 1:1 to a ThemeVariantConfig preset controlling
5
+ * buttons, inputs, cards, badges, tabs, toggles, tooltips, tables, etc.
6
+ */
7
+ export type NiceDisplayStyle = 'default' | 'minimal' | 'rounded' | 'sharp' | 'glass' | 'neumorphic' | 'playful' | 'enterprise' | 'modern3d' | 'brutalist' | 'luxe' | 'pill' | 'flat' | 'editorial' | 'dashboard' | 'softCloud' | 'cosmic' | 'corporate' | 'bank' | 'government' | 'military' | 'legal' | 'medical' | 'swiss' | 'scandinavian' | 'bauhaus' | 'notebook' | 'origami' | 'watercolor' | 'monochrome' | 'paper' | 'zen' | 'terminal' | 'hacker' | 'retro8bit' | 'synthwave' | 'cyberpunk' | 'steampunk' | 'vapor' | 'neon' | 'windows95' | 'material' | 'fluent' | 'cupertino' | 'ant' | 'bootstrap' | 'chakra' | 'notion' | 'linear' | 'vercel' | 'candy' | 'bubblegum' | 'cartoon' | 'kawaii' | 'circus' | 'gaming' | 'kiddo' | 'disco' | 'clown';
8
+ /** All available display style names. */
9
+ export declare const NICE_DISPLAY_STYLES: NiceDisplayStyle[];
10
+ /** Resolves a display style name to a full ThemeVariantConfig. */
11
+ export declare function resolveDisplayStyleConfig(style: NiceDisplayStyle): ThemeVariantConfig;
12
+ /** Component categories for style resolution. */
13
+ export type NiceComponentType = 'button' | 'input' | 'card' | 'badge' | 'tab' | 'toggle' | 'tooltip' | 'modal' | 'table' | 'menu';
14
+ export interface NiceDisplayStyleContextValue {
15
+ /** Currently active global display style. */
16
+ displayStyle: NiceDisplayStyle;
17
+ /** Resolved variant config for the current display style. */
18
+ variantConfig: ThemeVariantConfig;
19
+ /** Change the global display style. */
20
+ setDisplayStyle: (style: NiceDisplayStyle) => void;
21
+ }
22
+ export declare const NiceDisplayStyleContext: import("react").Context<NiceDisplayStyleContextValue>;
23
+ /**
24
+ * Returns the current global display style from context.
25
+ */
26
+ export declare function useNiceDisplayStyle(): NiceDisplayStyleContextValue;
27
+ /**
28
+ * Resolves the effective display style for a component, with priority:
29
+ * prop (per-component) → context (global) → 'default'
30
+ */
31
+ export declare function useResolvedDisplayStyle(propStyle?: NiceDisplayStyle): {
32
+ style: NiceDisplayStyle;
33
+ config: ThemeVariantConfig;
34
+ };
35
+ /**
36
+ * Returns inline CSS properties for a specific component type
37
+ * based on the resolved display style.
38
+ *
39
+ * @param componentType - Which component category to style
40
+ * @param propStyle - Optional per-component display style override
41
+ * @param primaryColor - Primary color for style generators (e.g. badge, button)
42
+ */
43
+ export declare function useComponentDisplayStyle(componentType: NiceComponentType, propStyle?: NiceDisplayStyle, primaryColor?: string): React.CSSProperties;
44
+ /**
45
+ * Returns the CSS class suffix for a given component type and display style.
46
+ * Components use this to apply style-specific classes: e.g. `nice-btn--style-gradient`
47
+ */
48
+ export declare function useComponentDisplayClass(componentType: NiceComponentType, propStyle?: NiceDisplayStyle): string;
49
+ /**
50
+ * Returns density CSS properties for the current display style.
51
+ */
52
+ export declare function useDisplayDensity(propStyle?: NiceDisplayStyle): React.CSSProperties;
53
+ /**
54
+ * Returns animation CSS properties for the current display style.
55
+ */
56
+ export declare function useDisplayAnimation(propStyle?: NiceDisplayStyle): React.CSSProperties;
57
+ /**
58
+ * Generates inline style properties for a specific component type
59
+ * from a ThemeVariantConfig.
60
+ */
61
+ export declare function getComponentStyleFromConfig(componentType: NiceComponentType, config: ThemeVariantConfig, primaryColor?: string): React.CSSProperties;
62
+ /**
63
+ * Returns a CSS class string expressing the display-style data attributes.
64
+ * Apply this to a container to let CSS selectors respond to the style.
65
+ */
66
+ export declare function getDisplayStyleDataAttrs(style: NiceDisplayStyle): Record<string, string>;
67
+ /**
68
+ * Describes a display style for UI pickers / documentation.
69
+ */
70
+ export interface NiceDisplayStyleInfo {
71
+ name: NiceDisplayStyle;
72
+ label: string;
73
+ description: string;
74
+ density: string;
75
+ animation: string;
76
+ }
77
+ /** Metadata for all built-in display styles. */
78
+ export declare const NICE_DISPLAY_STYLE_INFO: NiceDisplayStyleInfo[];
79
+ //# sourceMappingURL=displayStyle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"displayStyle.d.ts","sourceRoot":"","sources":["../../src/core/displayStyle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * NiceHelpContext — Global context for inline help system
3
+ *
4
+ * Provides:
5
+ * - Global enable/disable for inline help
6
+ * - Per-component help visibility control
7
+ * - Help content loading from .doc.json files
8
+ * - Localization support
9
+ *
10
+ * @since 2.6.0
11
+ */
12
+ import React, { type ReactNode } from 'react';
13
+ export interface HelpProp {
14
+ name: string;
15
+ type: string;
16
+ required?: boolean;
17
+ default?: string | number | boolean;
18
+ description: string;
19
+ }
20
+ export interface HelpExample {
21
+ title: string;
22
+ code: string;
23
+ language?: string;
24
+ }
25
+ export interface HelpContent {
26
+ name: string;
27
+ description: string;
28
+ category: string;
29
+ version?: string;
30
+ since?: string;
31
+ status?: 'stable' | 'beta' | 'deprecated';
32
+ author?: string;
33
+ props?: HelpProp[];
34
+ examples?: HelpExample[];
35
+ tips?: string[];
36
+ seeAlso?: string[];
37
+ }
38
+ export interface HelpConfig {
39
+ /** Global enable/disable for all inline help */
40
+ enabled: boolean;
41
+ /** Default visibility for help panels (collapsed/expanded) */
42
+ defaultExpanded: boolean;
43
+ /** Show help icon in component headers */
44
+ showHelpIcon: boolean;
45
+ /** Help panel position */
46
+ position: 'top' | 'bottom' | 'tooltip' | 'sidebar';
47
+ /** Locale for help content */
48
+ locale: string;
49
+ /** Custom help content loader */
50
+ contentLoader?: (componentName: string, locale: string) => Promise<HelpContent | null>;
51
+ }
52
+ export interface HelpContextValue {
53
+ /** Current help configuration */
54
+ config: HelpConfig;
55
+ /** Update help configuration */
56
+ setConfig: (config: Partial<HelpConfig>) => void;
57
+ /** Toggle global help visibility */
58
+ toggleGlobalHelp: () => void;
59
+ /** Per-component disabled set */
60
+ disabledComponents: Set<string>;
61
+ /** Disable help for specific component */
62
+ disableComponentHelp: (componentName: string) => void;
63
+ /** Enable help for specific component */
64
+ enableComponentHelp: (componentName: string) => void;
65
+ /** Check if help is enabled for component */
66
+ isHelpEnabled: (componentName: string) => boolean;
67
+ /** Get help content for component */
68
+ getHelpContent: (componentName: string) => Promise<HelpContent | null>;
69
+ /** Loaded help content cache */
70
+ helpCache: Map<string, HelpContent>;
71
+ }
72
+ export interface NiceHelpProviderProps {
73
+ children: ReactNode;
74
+ /** Initial configuration */
75
+ config?: Partial<HelpConfig>;
76
+ /** Preloaded help content */
77
+ helpContent?: Record<string, HelpContent>;
78
+ }
79
+ export declare const NiceHelpProvider: React.FC<NiceHelpProviderProps>;
80
+ /**
81
+ * Hook to access global help configuration and utilities
82
+ */
83
+ export declare function useNiceHelp(): HelpContextValue;
84
+ /**
85
+ * Hook to get help content for a specific component
86
+ */
87
+ export declare function useComponentHelp(componentName: string): {
88
+ content: HelpContent | null;
89
+ loading: boolean;
90
+ enabled: boolean;
91
+ loadContent: () => Promise<void>;
92
+ position: "tooltip" | "top" | "bottom" | "sidebar";
93
+ defaultExpanded: boolean;
94
+ showHelpIcon: boolean;
95
+ };
96
+ export default NiceHelpProvider;
97
+ //# sourceMappingURL=helpContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpContext.d.ts","sourceRoot":"","sources":["../../src/core/helpContext.tsx"],"names":[],"mappings":"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"}