@omnitron-dev/prism 0.1.1

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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/bin/prism.js +13 -0
  4. package/dist/accessibility/index.d.ts +157 -0
  5. package/dist/accessibility/index.js +186 -0
  6. package/dist/accessibility/index.js.map +1 -0
  7. package/dist/blocks/index.d.ts +1239 -0
  8. package/dist/blocks/index.js +1712 -0
  9. package/dist/blocks/index.js.map +1 -0
  10. package/dist/chunk-77KIJLPP.js +37 -0
  11. package/dist/chunk-77KIJLPP.js.map +1 -0
  12. package/dist/chunk-BTIT7WYH.js +339 -0
  13. package/dist/chunk-BTIT7WYH.js.map +1 -0
  14. package/dist/chunk-BV32OJ2A.js +1409 -0
  15. package/dist/chunk-BV32OJ2A.js.map +1 -0
  16. package/dist/chunk-DDY7TLUI.js +139 -0
  17. package/dist/chunk-DDY7TLUI.js.map +1 -0
  18. package/dist/chunk-DXXZ3ITR.js +4227 -0
  19. package/dist/chunk-DXXZ3ITR.js.map +1 -0
  20. package/dist/chunk-E3XANPTO.js +2319 -0
  21. package/dist/chunk-E3XANPTO.js.map +1 -0
  22. package/dist/chunk-FU52GL2E.js +3 -0
  23. package/dist/chunk-FU52GL2E.js.map +1 -0
  24. package/dist/chunk-GYDT5EKX.js +16505 -0
  25. package/dist/chunk-GYDT5EKX.js.map +1 -0
  26. package/dist/chunk-HO2GKTWJ.js +28 -0
  27. package/dist/chunk-HO2GKTWJ.js.map +1 -0
  28. package/dist/chunk-JDTC2SBY.js +140 -0
  29. package/dist/chunk-JDTC2SBY.js.map +1 -0
  30. package/dist/chunk-JNU4QHJK.js +6 -0
  31. package/dist/chunk-JNU4QHJK.js.map +1 -0
  32. package/dist/chunk-LAEY5USO.js +2621 -0
  33. package/dist/chunk-LAEY5USO.js.map +1 -0
  34. package/dist/chunk-UR6X3W5I.js +530 -0
  35. package/dist/chunk-UR6X3W5I.js.map +1 -0
  36. package/dist/chunk-WC2WM2JD.js +883 -0
  37. package/dist/chunk-WC2WM2JD.js.map +1 -0
  38. package/dist/chunk-XWL6J6IO.js +40 -0
  39. package/dist/chunk-XWL6J6IO.js.map +1 -0
  40. package/dist/cli/index.js +2695 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/config-BA6IeTq9.d.ts +100 -0
  43. package/dist/core/index.d.ts +454 -0
  44. package/dist/core/index.js +9 -0
  45. package/dist/core/index.js.map +1 -0
  46. package/dist/forms/index.d.ts +562 -0
  47. package/dist/forms/index.js +545 -0
  48. package/dist/forms/index.js.map +1 -0
  49. package/dist/hooks/index.d.ts +7 -0
  50. package/dist/hooks/index.js +10 -0
  51. package/dist/hooks/index.js.map +1 -0
  52. package/dist/http/index.d.ts +233 -0
  53. package/dist/http/index.js +282 -0
  54. package/dist/http/index.js.map +1 -0
  55. package/dist/index-odhPSv9I.d.ts +2491 -0
  56. package/dist/index.css +131 -0
  57. package/dist/index.css.map +1 -0
  58. package/dist/index.d.ts +9109 -0
  59. package/dist/index.js +13280 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/layouts/index.d.ts +854 -0
  62. package/dist/layouts/index.js +6 -0
  63. package/dist/layouts/index.js.map +1 -0
  64. package/dist/netron/index.d.ts +4 -0
  65. package/dist/netron/index.js +4 -0
  66. package/dist/netron/index.js.map +1 -0
  67. package/dist/registry/index.d.ts +352 -0
  68. package/dist/registry/index.js +4 -0
  69. package/dist/registry/index.js.map +1 -0
  70. package/dist/registry-BrDNftd5.d.ts +574 -0
  71. package/dist/settings-plpR26Xk.d.ts +455 -0
  72. package/dist/state/index.d.ts +981 -0
  73. package/dist/state/index.js +5 -0
  74. package/dist/state/index.js.map +1 -0
  75. package/dist/theme/index.d.ts +1049 -0
  76. package/dist/theme/index.js +5 -0
  77. package/dist/theme/index.js.map +1 -0
  78. package/dist/theme-CrXLfP1c.d.ts +389 -0
  79. package/dist/types/index.d.ts +146 -0
  80. package/dist/types/index.js +5 -0
  81. package/dist/types/index.js.map +1 -0
  82. package/dist/use-timeout-D7U3EAtH.d.ts +808 -0
  83. package/package.json +194 -0
@@ -0,0 +1,981 @@
1
+ import * as immer from 'immer';
2
+ import * as zustand from 'zustand';
3
+ import { StateCreator, UseBoundStore, StoreApi } from 'zustand';
4
+ import { PersistOptions, StateStorage } from 'zustand/middleware';
5
+ import { a as ThemeMode, c as ThemeDirection } from '../theme-CrXLfP1c.js';
6
+ export { N as NavColor, b as NavLayout, a as SettingsState, S as SettingsValues, g as getDefaultSettings, s as settingsStore, u as useSettingsStore } from '../settings-plpR26Xk.js';
7
+ import '@mui/material/styles';
8
+
9
+ /**
10
+ * Options for creating a Prism store.
11
+ */
12
+ interface CreateStoreOptions<T> {
13
+ /** Store name for DevTools and persistence */
14
+ name: string;
15
+ /** Enable persistence to localStorage */
16
+ persist?: boolean | Partial<PersistOptions<T>>;
17
+ /** Enable Redux DevTools (default: true in development) */
18
+ devtools?: boolean;
19
+ }
20
+ /**
21
+ * Middleware type helpers for proper typing.
22
+ */
23
+ type ImmerMiddleware = ['zustand/immer', never];
24
+ /**
25
+ * Creates a Zustand store with Prism defaults.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * interface CounterState {
30
+ * count: number;
31
+ * increment: () => void;
32
+ * decrement: () => void;
33
+ * }
34
+ *
35
+ * export const useCounterStore = createPrismStore<CounterState>(
36
+ * (set) => ({
37
+ * count: 0,
38
+ * increment: () => set((state) => { state.count += 1; }),
39
+ * decrement: () => set((state) => { state.count -= 1; }),
40
+ * }),
41
+ * { name: 'counter', persist: true }
42
+ * );
43
+ * ```
44
+ */
45
+ declare function createPrismStore<T extends object>(initializer: StateCreator<T, [ImmerMiddleware], []>, options: CreateStoreOptions<T>): UseBoundStore<Omit<Omit<StoreApi<T>, "devtools" | "setState"> & {
46
+ setState(partial: T | Partial<T> | ((state: T) => T | Partial<T>), replace?: false | undefined, action?: (string | {
47
+ [x: string]: unknown;
48
+ [x: number]: unknown;
49
+ [x: symbol]: unknown;
50
+ type: string;
51
+ }) | undefined): void;
52
+ setState(state: T | ((state: T) => T), replace: true, action?: (string | {
53
+ [x: string]: unknown;
54
+ [x: number]: unknown;
55
+ [x: symbol]: unknown;
56
+ type: string;
57
+ }) | undefined): void;
58
+ devtools: {
59
+ cleanup: () => void;
60
+ };
61
+ }, "setState"> & {
62
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | Partial<Exclude<T, (...args: any[]) => any>> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace?: false, action?: (string | {
63
+ [x: string]: unknown;
64
+ [x: number]: unknown;
65
+ [x: symbol]: unknown;
66
+ type: string;
67
+ }) | undefined): void;
68
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace: true, action?: (string | {
69
+ [x: string]: unknown;
70
+ [x: number]: unknown;
71
+ [x: symbol]: unknown;
72
+ type: string;
73
+ }) | undefined): void;
74
+ }> | UseBoundStore<Omit<StoreApi<T>, "setState"> & {
75
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | Partial<Exclude<T, (...args: any[]) => any>> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace?: false): void;
76
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace: true): void;
77
+ }>;
78
+ /**
79
+ * Creates a simple store without persistence (for UI-only state).
80
+ */
81
+ declare function createUIStore<T extends object>(initializer: StateCreator<T, [ImmerMiddleware], []>, name: string): UseBoundStore<Omit<Omit<StoreApi<T>, "devtools" | "setState"> & {
82
+ setState(partial: T | Partial<T> | ((state: T) => T | Partial<T>), replace?: false | undefined, action?: (string | {
83
+ [x: string]: unknown;
84
+ [x: number]: unknown;
85
+ [x: symbol]: unknown;
86
+ type: string;
87
+ }) | undefined): void;
88
+ setState(state: T | ((state: T) => T), replace: true, action?: (string | {
89
+ [x: string]: unknown;
90
+ [x: number]: unknown;
91
+ [x: symbol]: unknown;
92
+ type: string;
93
+ }) | undefined): void;
94
+ devtools: {
95
+ cleanup: () => void;
96
+ };
97
+ }, "setState"> & {
98
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | Partial<Exclude<T, (...args: any[]) => any>> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace?: false, action?: (string | {
99
+ [x: string]: unknown;
100
+ [x: number]: unknown;
101
+ [x: symbol]: unknown;
102
+ type: string;
103
+ }) | undefined): void;
104
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace: true, action?: (string | {
105
+ [x: string]: unknown;
106
+ [x: number]: unknown;
107
+ [x: symbol]: unknown;
108
+ type: string;
109
+ }) | undefined): void;
110
+ }> | UseBoundStore<Omit<StoreApi<T>, "setState"> & {
111
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | Partial<Exclude<T, (...args: any[]) => any>> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace?: false): void;
112
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace: true): void;
113
+ }>;
114
+ /**
115
+ * Creates a persisted store (for settings, preferences).
116
+ *
117
+ * Includes a storage wrapper that catches errors from localStorage
118
+ * (e.g., private browsing, quota exceeded) and falls back gracefully.
119
+ */
120
+ declare function createPersistedStore<T extends object>(initializer: StateCreator<T, [ImmerMiddleware], []>, name: string, persistOptions?: Partial<PersistOptions<T>>): UseBoundStore<Omit<Omit<StoreApi<T>, "devtools" | "setState"> & {
121
+ setState(partial: T | Partial<T> | ((state: T) => T | Partial<T>), replace?: false | undefined, action?: (string | {
122
+ [x: string]: unknown;
123
+ [x: number]: unknown;
124
+ [x: symbol]: unknown;
125
+ type: string;
126
+ }) | undefined): void;
127
+ setState(state: T | ((state: T) => T), replace: true, action?: (string | {
128
+ [x: string]: unknown;
129
+ [x: number]: unknown;
130
+ [x: symbol]: unknown;
131
+ type: string;
132
+ }) | undefined): void;
133
+ devtools: {
134
+ cleanup: () => void;
135
+ };
136
+ }, "setState"> & {
137
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | Partial<Exclude<T, (...args: any[]) => any>> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace?: false, action?: (string | {
138
+ [x: string]: unknown;
139
+ [x: number]: unknown;
140
+ [x: symbol]: unknown;
141
+ type: string;
142
+ }) | undefined): void;
143
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace: true, action?: (string | {
144
+ [x: string]: unknown;
145
+ [x: number]: unknown;
146
+ [x: symbol]: unknown;
147
+ type: string;
148
+ }) | undefined): void;
149
+ }> | UseBoundStore<Omit<StoreApi<T>, "setState"> & {
150
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | Partial<Exclude<T, (...args: any[]) => any>> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace?: false): void;
151
+ setState(nextStateOrUpdater: Exclude<T, (...args: any[]) => any> | ((state: immer.Draft<Exclude<T, (...args: any[]) => any>>) => void), shouldReplace: true): void;
152
+ }>;
153
+ /**
154
+ * Selector type for store state.
155
+ */
156
+ type StoreSelector<T, U> = (state: T) => U;
157
+ /**
158
+ * Helper to create typed selectors for a store.
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * const selectors = createSelectors(useUserStore);
163
+ * const userName = selectors.use.name();
164
+ * ```
165
+ */
166
+ declare function createSelectors<T extends object>(store: UseBoundStore<StoreApi<T>>): {
167
+ (): T;
168
+ <U>(selector: (state: T) => U): U;
169
+ } & StoreApi<T> & {
170
+ use: { [K in keyof T]: () => T[K]; };
171
+ };
172
+
173
+ /**
174
+ * Theme store state and actions.
175
+ */
176
+ interface ThemeState {
177
+ /** Current theme mode */
178
+ mode: ThemeMode;
179
+ /** Text direction */
180
+ direction: ThemeDirection;
181
+ /** Current preset name */
182
+ preset: string;
183
+ /** Compact layout mode */
184
+ compactLayout: boolean;
185
+ /** High contrast mode */
186
+ contrast: 'default' | 'high';
187
+ /** Primary color override */
188
+ primaryColor: string | null;
189
+ setMode: (mode: ThemeMode) => void;
190
+ toggleMode: () => void;
191
+ setDirection: (direction: ThemeDirection) => void;
192
+ setPreset: (preset: string) => void;
193
+ setCompactLayout: (compact: boolean) => void;
194
+ setContrast: (contrast: 'default' | 'high') => void;
195
+ setPrimaryColor: (color: string | null) => void;
196
+ reset: () => void;
197
+ }
198
+ /**
199
+ * Theme store with persistence.
200
+ *
201
+ * @example
202
+ * ```tsx
203
+ * function ThemeToggle() {
204
+ * const { mode, toggleMode } = useThemeStore();
205
+ * return <button onClick={toggleMode}>{mode}</button>;
206
+ * }
207
+ * ```
208
+ */
209
+ declare const useThemeStore: zustand.UseBoundStore<Omit<Omit<zustand.StoreApi<ThemeState>, "devtools" | "setState"> & {
210
+ setState(partial: ThemeState | Partial<ThemeState> | ((state: ThemeState) => ThemeState | Partial<ThemeState>), replace?: false | undefined, action?: (string | {
211
+ [x: string]: unknown;
212
+ [x: number]: unknown;
213
+ [x: symbol]: unknown;
214
+ type: string;
215
+ }) | undefined): void;
216
+ setState(state: ThemeState | ((state: ThemeState) => ThemeState), replace: true, action?: (string | {
217
+ [x: string]: unknown;
218
+ [x: number]: unknown;
219
+ [x: symbol]: unknown;
220
+ type: string;
221
+ }) | undefined): void;
222
+ devtools: {
223
+ cleanup: () => void;
224
+ };
225
+ }, "setState"> & {
226
+ setState(nextStateOrUpdater: ThemeState | Partial<ThemeState> | ((state: {
227
+ mode: ThemeMode;
228
+ direction: ThemeDirection;
229
+ preset: string;
230
+ compactLayout: boolean;
231
+ contrast: "default" | "high";
232
+ primaryColor: string | null;
233
+ setMode: (mode: ThemeMode) => void;
234
+ toggleMode: () => void;
235
+ setDirection: (direction: ThemeDirection) => void;
236
+ setPreset: (preset: string) => void;
237
+ setCompactLayout: (compact: boolean) => void;
238
+ setContrast: (contrast: "default" | "high") => void;
239
+ setPrimaryColor: (color: string | null) => void;
240
+ reset: () => void;
241
+ }) => void), shouldReplace?: false, action?: (string | {
242
+ [x: string]: unknown;
243
+ [x: number]: unknown;
244
+ [x: symbol]: unknown;
245
+ type: string;
246
+ }) | undefined): void;
247
+ setState(nextStateOrUpdater: ThemeState | ((state: {
248
+ mode: ThemeMode;
249
+ direction: ThemeDirection;
250
+ preset: string;
251
+ compactLayout: boolean;
252
+ contrast: "default" | "high";
253
+ primaryColor: string | null;
254
+ setMode: (mode: ThemeMode) => void;
255
+ toggleMode: () => void;
256
+ setDirection: (direction: ThemeDirection) => void;
257
+ setPreset: (preset: string) => void;
258
+ setCompactLayout: (compact: boolean) => void;
259
+ setContrast: (contrast: "default" | "high") => void;
260
+ setPrimaryColor: (color: string | null) => void;
261
+ reset: () => void;
262
+ }) => void), shouldReplace: true, action?: (string | {
263
+ [x: string]: unknown;
264
+ [x: number]: unknown;
265
+ [x: symbol]: unknown;
266
+ type: string;
267
+ }) | undefined): void;
268
+ }> | zustand.UseBoundStore<Omit<zustand.StoreApi<ThemeState>, "setState"> & {
269
+ setState(nextStateOrUpdater: ThemeState | Partial<ThemeState> | ((state: {
270
+ mode: ThemeMode;
271
+ direction: ThemeDirection;
272
+ preset: string;
273
+ compactLayout: boolean;
274
+ contrast: "default" | "high";
275
+ primaryColor: string | null;
276
+ setMode: (mode: ThemeMode) => void;
277
+ toggleMode: () => void;
278
+ setDirection: (direction: ThemeDirection) => void;
279
+ setPreset: (preset: string) => void;
280
+ setCompactLayout: (compact: boolean) => void;
281
+ setContrast: (contrast: "default" | "high") => void;
282
+ setPrimaryColor: (color: string | null) => void;
283
+ reset: () => void;
284
+ }) => void), shouldReplace?: false): void;
285
+ setState(nextStateOrUpdater: ThemeState | ((state: {
286
+ mode: ThemeMode;
287
+ direction: ThemeDirection;
288
+ preset: string;
289
+ compactLayout: boolean;
290
+ contrast: "default" | "high";
291
+ primaryColor: string | null;
292
+ setMode: (mode: ThemeMode) => void;
293
+ toggleMode: () => void;
294
+ setDirection: (direction: ThemeDirection) => void;
295
+ setPreset: (preset: string) => void;
296
+ setCompactLayout: (compact: boolean) => void;
297
+ setContrast: (contrast: "default" | "high") => void;
298
+ setPrimaryColor: (color: string | null) => void;
299
+ reset: () => void;
300
+ }) => void), shouldReplace: true): void;
301
+ }>;
302
+ /**
303
+ * Theme store with auto-generated selectors.
304
+ *
305
+ * @example
306
+ * ```tsx
307
+ * const mode = themeStore.use.mode();
308
+ * ```
309
+ */
310
+ declare const themeStore: {
311
+ (): {
312
+ mode: ThemeMode;
313
+ direction: ThemeDirection;
314
+ preset: string;
315
+ compactLayout: boolean;
316
+ contrast: "default" | "high";
317
+ primaryColor: string | null;
318
+ setMode: (mode: ThemeMode) => void;
319
+ toggleMode: () => void;
320
+ setDirection: (direction: ThemeDirection) => void;
321
+ setPreset: (preset: string) => void;
322
+ setCompactLayout: (compact: boolean) => void;
323
+ setContrast: (contrast: "default" | "high") => void;
324
+ setPrimaryColor: (color: string | null) => void;
325
+ reset: () => void;
326
+ };
327
+ <U>(selector: (state: {
328
+ mode: ThemeMode;
329
+ direction: ThemeDirection;
330
+ preset: string;
331
+ compactLayout: boolean;
332
+ contrast: "default" | "high";
333
+ primaryColor: string | null;
334
+ setMode: (mode: ThemeMode) => void;
335
+ toggleMode: () => void;
336
+ setDirection: (direction: ThemeDirection) => void;
337
+ setPreset: (preset: string) => void;
338
+ setCompactLayout: (compact: boolean) => void;
339
+ setContrast: (contrast: "default" | "high") => void;
340
+ setPrimaryColor: (color: string | null) => void;
341
+ reset: () => void;
342
+ }) => U): U;
343
+ } & zustand.StoreApi<{
344
+ mode: ThemeMode;
345
+ direction: ThemeDirection;
346
+ preset: string;
347
+ compactLayout: boolean;
348
+ contrast: "default" | "high";
349
+ primaryColor: string | null;
350
+ setMode: (mode: ThemeMode) => void;
351
+ toggleMode: () => void;
352
+ setDirection: (direction: ThemeDirection) => void;
353
+ setPreset: (preset: string) => void;
354
+ setCompactLayout: (compact: boolean) => void;
355
+ setContrast: (contrast: "default" | "high") => void;
356
+ setPrimaryColor: (color: string | null) => void;
357
+ reset: () => void;
358
+ }> & {
359
+ use: {
360
+ mode: () => ThemeMode;
361
+ direction: () => ThemeDirection;
362
+ preset: () => string;
363
+ compactLayout: () => boolean;
364
+ contrast: () => "default" | "high";
365
+ primaryColor: () => string | null;
366
+ setMode: () => (mode: ThemeMode) => void;
367
+ toggleMode: () => () => void;
368
+ setDirection: () => (direction: ThemeDirection) => void;
369
+ setPreset: () => (preset: string) => void;
370
+ setCompactLayout: () => (compact: boolean) => void;
371
+ setContrast: () => (contrast: "default" | "high") => void;
372
+ setPrimaryColor: () => (color: string | null) => void;
373
+ reset: () => () => void;
374
+ };
375
+ };
376
+
377
+ /**
378
+ * Auth Store
379
+ *
380
+ * Manages authentication state (UI-side).
381
+ * Server-side token validation should use Netron auth.
382
+ *
383
+ * SECURITY NOTE: Tokens are stored in session storage (not localStorage)
384
+ * and are NOT persisted across browser sessions. Only the auth status
385
+ * is persisted to allow checking login state on page load.
386
+ *
387
+ * @module @omnitron-dev/prism/state/stores
388
+ */
389
+ /**
390
+ * Authentication status.
391
+ */
392
+ type AuthStatus = 'loading' | 'authenticated' | 'unauthenticated';
393
+ /**
394
+ * Auth store state (persisted - only status).
395
+ */
396
+ interface AuthStoreState {
397
+ /** Current auth status */
398
+ status: AuthStatus;
399
+ /** Session ID (non-sensitive) */
400
+ sessionId: string | null;
401
+ setStatus: (status: AuthStatus) => void;
402
+ setAuthenticated: (sessionId?: string) => void;
403
+ setUnauthenticated: () => void;
404
+ clearSession: () => void;
405
+ }
406
+ /**
407
+ * Auth store with partial persistence.
408
+ * Only status and sessionId are persisted, NOT the token.
409
+ *
410
+ * @example
411
+ * ```tsx
412
+ * function AuthGuard({ children }) {
413
+ * const status = useAuthStore((s) => s.status);
414
+ * const isAuthenticated = selectIsAuthenticated(useAuthStore.getState());
415
+ *
416
+ * if (status === 'loading') return <Spinner />;
417
+ * if (!isAuthenticated) return <Navigate to="/login" />;
418
+ *
419
+ * return children;
420
+ * }
421
+ * ```
422
+ */
423
+ declare const useAuthStore: zustand.UseBoundStore<Omit<Omit<zustand.StoreApi<AuthStoreState>, "devtools" | "setState"> & {
424
+ setState(partial: AuthStoreState | Partial<AuthStoreState> | ((state: AuthStoreState) => AuthStoreState | Partial<AuthStoreState>), replace?: false | undefined, action?: (string | {
425
+ [x: string]: unknown;
426
+ [x: number]: unknown;
427
+ [x: symbol]: unknown;
428
+ type: string;
429
+ }) | undefined): void;
430
+ setState(state: AuthStoreState | ((state: AuthStoreState) => AuthStoreState), replace: true, action?: (string | {
431
+ [x: string]: unknown;
432
+ [x: number]: unknown;
433
+ [x: symbol]: unknown;
434
+ type: string;
435
+ }) | undefined): void;
436
+ devtools: {
437
+ cleanup: () => void;
438
+ };
439
+ }, "setState"> & {
440
+ setState(nextStateOrUpdater: AuthStoreState | Partial<AuthStoreState> | ((state: {
441
+ status: AuthStatus;
442
+ sessionId: string | null;
443
+ setStatus: (status: AuthStatus) => void;
444
+ setAuthenticated: (sessionId?: string) => void;
445
+ setUnauthenticated: () => void;
446
+ clearSession: () => void;
447
+ }) => void), shouldReplace?: false, action?: (string | {
448
+ [x: string]: unknown;
449
+ [x: number]: unknown;
450
+ [x: symbol]: unknown;
451
+ type: string;
452
+ }) | undefined): void;
453
+ setState(nextStateOrUpdater: AuthStoreState | ((state: {
454
+ status: AuthStatus;
455
+ sessionId: string | null;
456
+ setStatus: (status: AuthStatus) => void;
457
+ setAuthenticated: (sessionId?: string) => void;
458
+ setUnauthenticated: () => void;
459
+ clearSession: () => void;
460
+ }) => void), shouldReplace: true, action?: (string | {
461
+ [x: string]: unknown;
462
+ [x: number]: unknown;
463
+ [x: symbol]: unknown;
464
+ type: string;
465
+ }) | undefined): void;
466
+ }> | zustand.UseBoundStore<Omit<zustand.StoreApi<AuthStoreState>, "setState"> & {
467
+ setState(nextStateOrUpdater: AuthStoreState | Partial<AuthStoreState> | ((state: {
468
+ status: AuthStatus;
469
+ sessionId: string | null;
470
+ setStatus: (status: AuthStatus) => void;
471
+ setAuthenticated: (sessionId?: string) => void;
472
+ setUnauthenticated: () => void;
473
+ clearSession: () => void;
474
+ }) => void), shouldReplace?: false): void;
475
+ setState(nextStateOrUpdater: AuthStoreState | ((state: {
476
+ status: AuthStatus;
477
+ sessionId: string | null;
478
+ setStatus: (status: AuthStatus) => void;
479
+ setAuthenticated: (sessionId?: string) => void;
480
+ setUnauthenticated: () => void;
481
+ clearSession: () => void;
482
+ }) => void), shouldReplace: true): void;
483
+ }>;
484
+ /**
485
+ * Auth store with auto-generated selectors.
486
+ */
487
+ declare const authStore: {
488
+ (): {
489
+ status: AuthStatus;
490
+ sessionId: string | null;
491
+ setStatus: (status: AuthStatus) => void;
492
+ setAuthenticated: (sessionId?: string) => void;
493
+ setUnauthenticated: () => void;
494
+ clearSession: () => void;
495
+ };
496
+ <U>(selector: (state: {
497
+ status: AuthStatus;
498
+ sessionId: string | null;
499
+ setStatus: (status: AuthStatus) => void;
500
+ setAuthenticated: (sessionId?: string) => void;
501
+ setUnauthenticated: () => void;
502
+ clearSession: () => void;
503
+ }) => U): U;
504
+ } & zustand.StoreApi<{
505
+ status: AuthStatus;
506
+ sessionId: string | null;
507
+ setStatus: (status: AuthStatus) => void;
508
+ setAuthenticated: (sessionId?: string) => void;
509
+ setUnauthenticated: () => void;
510
+ clearSession: () => void;
511
+ }> & {
512
+ use: {
513
+ status: () => AuthStatus;
514
+ sessionId: () => string | null;
515
+ setStatus: () => (status: AuthStatus) => void;
516
+ setAuthenticated: () => (sessionId?: string) => void;
517
+ setUnauthenticated: () => () => void;
518
+ clearSession: () => () => void;
519
+ };
520
+ };
521
+
522
+ /**
523
+ * UI Store
524
+ *
525
+ * Manages transient UI state (not persisted).
526
+ *
527
+ * @module @omnitron-dev/prism/state/stores
528
+ */
529
+ /**
530
+ * UI store state and actions.
531
+ */
532
+ interface UIState {
533
+ /** Sidebar open state */
534
+ sidebarOpen: boolean;
535
+ /** Sidebar collapsed state (mini mode) */
536
+ sidebarCollapsed: boolean;
537
+ /** Active dialog ID */
538
+ activeDialog: string | null;
539
+ /** Global loading overlay */
540
+ globalLoading: boolean;
541
+ /** Search modal open */
542
+ searchOpen: boolean;
543
+ toggleSidebar: () => void;
544
+ setSidebarOpen: (open: boolean) => void;
545
+ setSidebarCollapsed: (collapsed: boolean) => void;
546
+ openDialog: (dialogId: string) => void;
547
+ closeDialog: () => void;
548
+ setGlobalLoading: (loading: boolean) => void;
549
+ toggleSearch: () => void;
550
+ setSearchOpen: (open: boolean) => void;
551
+ }
552
+ /**
553
+ * UI store for transient state.
554
+ *
555
+ * @example
556
+ * ```tsx
557
+ * function Sidebar() {
558
+ * const { sidebarOpen, sidebarCollapsed, toggleSidebar } = useUIStore();
559
+ *
560
+ * return (
561
+ * <Drawer
562
+ * open={sidebarOpen}
563
+ * variant={sidebarCollapsed ? 'mini' : 'permanent'}
564
+ * >
565
+ * <SidebarContent />
566
+ * </Drawer>
567
+ * );
568
+ * }
569
+ * ```
570
+ */
571
+ declare const useUIStore: zustand.UseBoundStore<Omit<Omit<zustand.StoreApi<UIState>, "devtools" | "setState"> & {
572
+ setState(partial: UIState | Partial<UIState> | ((state: UIState) => UIState | Partial<UIState>), replace?: false | undefined, action?: (string | {
573
+ [x: string]: unknown;
574
+ [x: number]: unknown;
575
+ [x: symbol]: unknown;
576
+ type: string;
577
+ }) | undefined): void;
578
+ setState(state: UIState | ((state: UIState) => UIState), replace: true, action?: (string | {
579
+ [x: string]: unknown;
580
+ [x: number]: unknown;
581
+ [x: symbol]: unknown;
582
+ type: string;
583
+ }) | undefined): void;
584
+ devtools: {
585
+ cleanup: () => void;
586
+ };
587
+ }, "setState"> & {
588
+ setState(nextStateOrUpdater: UIState | Partial<UIState> | ((state: {
589
+ sidebarOpen: boolean;
590
+ sidebarCollapsed: boolean;
591
+ activeDialog: string | null;
592
+ globalLoading: boolean;
593
+ searchOpen: boolean;
594
+ toggleSidebar: () => void;
595
+ setSidebarOpen: (open: boolean) => void;
596
+ setSidebarCollapsed: (collapsed: boolean) => void;
597
+ openDialog: (dialogId: string) => void;
598
+ closeDialog: () => void;
599
+ setGlobalLoading: (loading: boolean) => void;
600
+ toggleSearch: () => void;
601
+ setSearchOpen: (open: boolean) => void;
602
+ }) => void), shouldReplace?: false, action?: (string | {
603
+ [x: string]: unknown;
604
+ [x: number]: unknown;
605
+ [x: symbol]: unknown;
606
+ type: string;
607
+ }) | undefined): void;
608
+ setState(nextStateOrUpdater: UIState | ((state: {
609
+ sidebarOpen: boolean;
610
+ sidebarCollapsed: boolean;
611
+ activeDialog: string | null;
612
+ globalLoading: boolean;
613
+ searchOpen: boolean;
614
+ toggleSidebar: () => void;
615
+ setSidebarOpen: (open: boolean) => void;
616
+ setSidebarCollapsed: (collapsed: boolean) => void;
617
+ openDialog: (dialogId: string) => void;
618
+ closeDialog: () => void;
619
+ setGlobalLoading: (loading: boolean) => void;
620
+ toggleSearch: () => void;
621
+ setSearchOpen: (open: boolean) => void;
622
+ }) => void), shouldReplace: true, action?: (string | {
623
+ [x: string]: unknown;
624
+ [x: number]: unknown;
625
+ [x: symbol]: unknown;
626
+ type: string;
627
+ }) | undefined): void;
628
+ }> | zustand.UseBoundStore<Omit<zustand.StoreApi<UIState>, "setState"> & {
629
+ setState(nextStateOrUpdater: UIState | Partial<UIState> | ((state: {
630
+ sidebarOpen: boolean;
631
+ sidebarCollapsed: boolean;
632
+ activeDialog: string | null;
633
+ globalLoading: boolean;
634
+ searchOpen: boolean;
635
+ toggleSidebar: () => void;
636
+ setSidebarOpen: (open: boolean) => void;
637
+ setSidebarCollapsed: (collapsed: boolean) => void;
638
+ openDialog: (dialogId: string) => void;
639
+ closeDialog: () => void;
640
+ setGlobalLoading: (loading: boolean) => void;
641
+ toggleSearch: () => void;
642
+ setSearchOpen: (open: boolean) => void;
643
+ }) => void), shouldReplace?: false): void;
644
+ setState(nextStateOrUpdater: UIState | ((state: {
645
+ sidebarOpen: boolean;
646
+ sidebarCollapsed: boolean;
647
+ activeDialog: string | null;
648
+ globalLoading: boolean;
649
+ searchOpen: boolean;
650
+ toggleSidebar: () => void;
651
+ setSidebarOpen: (open: boolean) => void;
652
+ setSidebarCollapsed: (collapsed: boolean) => void;
653
+ openDialog: (dialogId: string) => void;
654
+ closeDialog: () => void;
655
+ setGlobalLoading: (loading: boolean) => void;
656
+ toggleSearch: () => void;
657
+ setSearchOpen: (open: boolean) => void;
658
+ }) => void), shouldReplace: true): void;
659
+ }>;
660
+ /**
661
+ * UI store with auto-generated selectors.
662
+ */
663
+ declare const uiStore: {
664
+ (): {
665
+ sidebarOpen: boolean;
666
+ sidebarCollapsed: boolean;
667
+ activeDialog: string | null;
668
+ globalLoading: boolean;
669
+ searchOpen: boolean;
670
+ toggleSidebar: () => void;
671
+ setSidebarOpen: (open: boolean) => void;
672
+ setSidebarCollapsed: (collapsed: boolean) => void;
673
+ openDialog: (dialogId: string) => void;
674
+ closeDialog: () => void;
675
+ setGlobalLoading: (loading: boolean) => void;
676
+ toggleSearch: () => void;
677
+ setSearchOpen: (open: boolean) => void;
678
+ };
679
+ <U>(selector: (state: {
680
+ sidebarOpen: boolean;
681
+ sidebarCollapsed: boolean;
682
+ activeDialog: string | null;
683
+ globalLoading: boolean;
684
+ searchOpen: boolean;
685
+ toggleSidebar: () => void;
686
+ setSidebarOpen: (open: boolean) => void;
687
+ setSidebarCollapsed: (collapsed: boolean) => void;
688
+ openDialog: (dialogId: string) => void;
689
+ closeDialog: () => void;
690
+ setGlobalLoading: (loading: boolean) => void;
691
+ toggleSearch: () => void;
692
+ setSearchOpen: (open: boolean) => void;
693
+ }) => U): U;
694
+ } & zustand.StoreApi<{
695
+ sidebarOpen: boolean;
696
+ sidebarCollapsed: boolean;
697
+ activeDialog: string | null;
698
+ globalLoading: boolean;
699
+ searchOpen: boolean;
700
+ toggleSidebar: () => void;
701
+ setSidebarOpen: (open: boolean) => void;
702
+ setSidebarCollapsed: (collapsed: boolean) => void;
703
+ openDialog: (dialogId: string) => void;
704
+ closeDialog: () => void;
705
+ setGlobalLoading: (loading: boolean) => void;
706
+ toggleSearch: () => void;
707
+ setSearchOpen: (open: boolean) => void;
708
+ }> & {
709
+ use: {
710
+ sidebarOpen: () => boolean;
711
+ sidebarCollapsed: () => boolean;
712
+ activeDialog: () => string | null;
713
+ globalLoading: () => boolean;
714
+ searchOpen: () => boolean;
715
+ toggleSidebar: () => () => void;
716
+ setSidebarOpen: () => (open: boolean) => void;
717
+ setSidebarCollapsed: () => (collapsed: boolean) => void;
718
+ openDialog: () => (dialogId: string) => void;
719
+ closeDialog: () => () => void;
720
+ setGlobalLoading: () => (loading: boolean) => void;
721
+ toggleSearch: () => () => void;
722
+ setSearchOpen: () => (open: boolean) => void;
723
+ };
724
+ };
725
+
726
+ /**
727
+ * Settings Version Management
728
+ *
729
+ * Utilities for managing versioned settings with safe migrations.
730
+ * Enables breaking changes to settings structure while preserving user data.
731
+ *
732
+ * @module @omnitron-dev/prism/state
733
+ */
734
+
735
+ /**
736
+ * Migration function signature.
737
+ * Transforms settings from one version to the next.
738
+ */
739
+ type MigrationFn<TPrev = unknown, TNext = unknown> = (prevState: TPrev) => TNext;
740
+ /**
741
+ * Version-specific migration configuration.
742
+ */
743
+ interface VersionMigration<TPrev = unknown, TNext = unknown> {
744
+ /** Target version number */
745
+ version: number;
746
+ /** Migration function */
747
+ migrate: MigrationFn<TPrev, TNext>;
748
+ }
749
+ /**
750
+ * Versioned settings configuration.
751
+ */
752
+ interface VersionedSettingsConfig<TState> {
753
+ /** Current version number (increment when structure changes) */
754
+ version: number;
755
+ /** Storage key prefix */
756
+ name: string;
757
+ /** Ordered list of migrations (version -> next version) */
758
+ migrations: VersionMigration[];
759
+ /** Validation function (optional) */
760
+ validate?: (state: unknown) => state is TState;
761
+ /** Called when migration fails */
762
+ onMigrationError?: (error: unknown, fromVersion: number, toVersion: number) => void;
763
+ /** Called when stored data is corrupt/invalid */
764
+ onCorruptData?: (error: unknown, rawData: unknown) => void;
765
+ /** Default state (used when migration fails or data is corrupt) */
766
+ defaultState: TState;
767
+ }
768
+ /**
769
+ * Persisted settings with version metadata.
770
+ */
771
+ interface VersionedPersistedState<TState> {
772
+ state: TState;
773
+ version: number;
774
+ }
775
+ /**
776
+ * Run migrations from one version to another.
777
+ *
778
+ * @param state - Current state
779
+ * @param fromVersion - Starting version
780
+ * @param toVersion - Target version
781
+ * @param migrations - Available migrations
782
+ * @returns Migrated state or null if migration failed
783
+ */
784
+ declare function runMigrations<TState>(state: unknown, fromVersion: number, toVersion: number, migrations: VersionMigration[]): TState | null;
785
+ /**
786
+ * Create a versioned storage adapter for Zustand persist.
787
+ *
788
+ * This adapter handles:
789
+ * - Version tracking in stored data
790
+ * - Automatic migrations when version changes
791
+ * - Safe fallback to defaults on corrupt data
792
+ *
793
+ * @example
794
+ * ```tsx
795
+ * interface AppSettings {
796
+ * theme: 'light' | 'dark';
797
+ * language: string;
798
+ * notifications: { email: boolean; push: boolean };
799
+ * }
800
+ *
801
+ * const versionedStorage = createVersionedStorage<AppSettings>({
802
+ * version: 3,
803
+ * name: 'app-settings',
804
+ * defaultState: {
805
+ * theme: 'light',
806
+ * language: 'en',
807
+ * notifications: { email: true, push: true },
808
+ * },
809
+ * migrations: [
810
+ * {
811
+ * version: 2,
812
+ * migrate: (prev: { theme: string }) => ({
813
+ * ...prev,
814
+ * language: 'en', // Added in v2
815
+ * }),
816
+ * },
817
+ * {
818
+ * version: 3,
819
+ * migrate: (prev: { theme: string; language: string }) => ({
820
+ * ...prev,
821
+ * notifications: { email: true, push: true }, // Added in v3
822
+ * }),
823
+ * },
824
+ * ],
825
+ * });
826
+ *
827
+ * // Use with createPrismStore
828
+ * const useSettings = createPrismStore<AppSettings>(
829
+ * (set) => ({
830
+ * ...versionedStorage.defaultState,
831
+ * setTheme: (theme) => set({ theme }),
832
+ * }),
833
+ * {
834
+ * name: 'settings',
835
+ * persist: {
836
+ * storage: versionedStorage.storage,
837
+ * version: versionedStorage.version,
838
+ * migrate: versionedStorage.migrate,
839
+ * },
840
+ * }
841
+ * );
842
+ * ```
843
+ */
844
+ declare function createVersionedStorage<TState>(config: VersionedSettingsConfig<TState>): {
845
+ storage: StateStorage;
846
+ version: number;
847
+ migrate: (persistedState: unknown, version: number) => TState;
848
+ defaultState: TState;
849
+ };
850
+ /**
851
+ * Create persist options for versioned settings.
852
+ * Convenience function that returns properly typed PersistOptions.
853
+ *
854
+ * @example
855
+ * ```tsx
856
+ * const persistOptions = createVersionedPersistOptions<MySettings>({
857
+ * version: 2,
858
+ * name: 'my-settings',
859
+ * defaultState: { /* ... *\/ },
860
+ * migrations: [{ version: 2, migrate: (prev) => ({ ...prev, newField: 'default' }) }],
861
+ * });
862
+ *
863
+ * const useStore = createPrismStore(initializer, {
864
+ * name: 'my-settings',
865
+ * persist: persistOptions,
866
+ * });
867
+ * ```
868
+ */
869
+ declare function createVersionedPersistOptions<TState>(config: VersionedSettingsConfig<TState>): Partial<PersistOptions<TState>>;
870
+ /**
871
+ * Check if settings need migration.
872
+ *
873
+ * @param name - Settings name
874
+ * @param currentVersion - Current app settings version
875
+ * @returns Object with migration status
876
+ */
877
+ declare function checkSettingsVersion(name: string, currentVersion: number): {
878
+ needsMigration: boolean;
879
+ storedVersion: number | null;
880
+ currentVersion: number;
881
+ };
882
+ /**
883
+ * Clear stored settings (useful for testing or reset).
884
+ */
885
+ declare function clearSettings(name: string): void;
886
+ /**
887
+ * Export settings to JSON.
888
+ */
889
+ declare function exportSettings<TState>(name: string, currentVersion: number): VersionedPersistedState<TState> | null;
890
+ /**
891
+ * Import settings from JSON.
892
+ * Will trigger migration if version differs.
893
+ */
894
+ declare function importSettings<TState>(name: string, data: VersionedPersistedState<TState>): void;
895
+ /**
896
+ * Create a type guard for settings validation.
897
+ *
898
+ * @example
899
+ * ```tsx
900
+ * const isValidSettings = createSettingsValidator<MySettings>({
901
+ * requiredKeys: ['theme', 'language'],
902
+ * typeChecks: {
903
+ * theme: (v) => v === 'light' || v === 'dark',
904
+ * language: (v) => typeof v === 'string',
905
+ * },
906
+ * });
907
+ * ```
908
+ */
909
+ declare function createSettingsValidator<TState extends Record<string, unknown>>(config: {
910
+ requiredKeys?: (keyof TState)[];
911
+ typeChecks?: Partial<{
912
+ [K in keyof TState]: (value: unknown) => boolean;
913
+ }>;
914
+ }): (state: unknown) => state is TState;
915
+ /**
916
+ * Creates a simple migration from one version to the next.
917
+ *
918
+ * @example
919
+ * ```typescript
920
+ * const v2Migration = createMigration(2, (state) => ({
921
+ * ...state,
922
+ * navLayout: 'vertical',
923
+ * }));
924
+ * ```
925
+ */
926
+ declare function createMigration<TPrev = unknown, TNext = unknown>(version: number, migrate: MigrationFn<TPrev, TNext>): VersionMigration<TPrev, TNext>;
927
+ /**
928
+ * Creates a migration that renames a field.
929
+ *
930
+ * @example
931
+ * ```typescript
932
+ * const renameMigration = createRenameMigration(3, 'theme', 'mode', 'light');
933
+ * ```
934
+ */
935
+ declare function createRenameMigration<TNext>(version: number, oldKey: string, newKey: string, defaultValue: unknown): VersionMigration;
936
+ /**
937
+ * Creates a migration that adds a new field with a default value.
938
+ *
939
+ * @example
940
+ * ```typescript
941
+ * const addFieldMigration = createAddFieldMigration(4, 'stretch', false);
942
+ * ```
943
+ */
944
+ declare function createAddFieldMigration<TNext>(version: number, key: string, defaultValue: unknown): VersionMigration;
945
+ /**
946
+ * Creates a migration that removes a field.
947
+ *
948
+ * @example
949
+ * ```typescript
950
+ * const removeFieldMigration = createRemoveFieldMigration(5, 'legacyOption');
951
+ * ```
952
+ */
953
+ declare function createRemoveFieldMigration<TNext>(version: number, key: string): VersionMigration;
954
+ /**
955
+ * Creates a migration that transforms a field's value.
956
+ *
957
+ * @example
958
+ * ```typescript
959
+ * const transformMigration = createTransformMigration(
960
+ * 6,
961
+ * 'fontSize',
962
+ * (value) => typeof value === 'string' ? parseInt(value, 10) : value,
963
+ * 16
964
+ * );
965
+ * ```
966
+ */
967
+ declare function createTransformMigration<TNext>(version: number, key: string, transform: (value: unknown) => unknown, defaultValue: unknown): VersionMigration;
968
+ /**
969
+ * Validates that migrations are in correct sequential order.
970
+ *
971
+ * @throws If migrations have duplicate versions
972
+ */
973
+ declare function validateMigrations(migrations: VersionMigration[]): void;
974
+ /**
975
+ * Gets migration info for debugging.
976
+ */
977
+ declare function getMigrationInfo(migrations: VersionMigration[]): Array<{
978
+ version: number;
979
+ }>;
980
+
981
+ export { type AuthStatus, type AuthStoreState, type CreateStoreOptions, type MigrationFn, type StoreSelector, type ThemeState, type UIState, type VersionMigration, type VersionedPersistedState, type VersionedSettingsConfig, authStore, checkSettingsVersion, clearSettings, createAddFieldMigration, createMigration, createPersistedStore, createPrismStore, createRemoveFieldMigration, createRenameMigration, createSelectors, createSettingsValidator, createTransformMigration, createUIStore, createVersionedPersistOptions, createVersionedStorage, exportSettings, getMigrationInfo, importSettings, runMigrations, themeStore, uiStore, useAuthStore, useThemeStore, useUIStore, validateMigrations };