@pattern-stack/frontend-patterns 0.2.0-alpha.0 → 0.2.0-alpha.11

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 (160) hide show
  1. package/dist/atoms/components/core/Badge/Badge.d.ts +1 -1
  2. package/dist/atoms/components/data/DataTable/ColumnFilterDropdown.d.ts +32 -0
  3. package/dist/atoms/components/data/DataTable/ColumnFilterDropdown.d.ts.map +1 -0
  4. package/dist/atoms/components/data/DataTable/ColumnVisibilityToggle.d.ts +32 -0
  5. package/dist/atoms/components/data/DataTable/ColumnVisibilityToggle.d.ts.map +1 -0
  6. package/dist/atoms/components/data/DataTable/DataTable.d.ts +5 -2
  7. package/dist/atoms/components/data/DataTable/DataTable.d.ts.map +1 -1
  8. package/dist/atoms/components/data/DataTable/DataTable.expansion.d.ts +91 -0
  9. package/dist/atoms/components/data/DataTable/DataTable.expansion.d.ts.map +1 -0
  10. package/dist/atoms/components/data/DataTable/DataTable.filters.d.ts +271 -0
  11. package/dist/atoms/components/data/DataTable/DataTable.filters.d.ts.map +1 -0
  12. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts +155 -5
  13. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts.map +1 -1
  14. package/dist/atoms/components/data/DataTable/ExpandButton.d.ts +37 -0
  15. package/dist/atoms/components/data/DataTable/ExpandButton.d.ts.map +1 -0
  16. package/dist/atoms/components/data/DataTable/FilterPill.d.ts +25 -0
  17. package/dist/atoms/components/data/DataTable/FilterPill.d.ts.map +1 -0
  18. package/dist/atoms/components/data/DataTable/QuickFilterBar.d.ts +35 -0
  19. package/dist/atoms/components/data/DataTable/QuickFilterBar.d.ts.map +1 -0
  20. package/dist/atoms/components/data/DataTable/filters/BooleanFilterEditor.d.ts +10 -0
  21. package/dist/atoms/components/data/DataTable/filters/BooleanFilterEditor.d.ts.map +1 -0
  22. package/dist/atoms/components/data/DataTable/filters/DateFilterEditor.d.ts +11 -0
  23. package/dist/atoms/components/data/DataTable/filters/DateFilterEditor.d.ts.map +1 -0
  24. package/dist/atoms/components/data/DataTable/filters/MultiSelectFilterEditor.d.ts +10 -0
  25. package/dist/atoms/components/data/DataTable/filters/MultiSelectFilterEditor.d.ts.map +1 -0
  26. package/dist/atoms/components/data/DataTable/filters/NumberFilterEditor.d.ts +10 -0
  27. package/dist/atoms/components/data/DataTable/filters/NumberFilterEditor.d.ts.map +1 -0
  28. package/dist/atoms/components/data/DataTable/filters/SelectFilterEditor.d.ts +10 -0
  29. package/dist/atoms/components/data/DataTable/filters/SelectFilterEditor.d.ts.map +1 -0
  30. package/dist/atoms/components/data/DataTable/filters/TextFilterEditor.d.ts +10 -0
  31. package/dist/atoms/components/data/DataTable/filters/TextFilterEditor.d.ts.map +1 -0
  32. package/dist/atoms/components/data/DataTable/filters/index.d.ts +14 -0
  33. package/dist/atoms/components/data/DataTable/filters/index.d.ts.map +1 -0
  34. package/dist/atoms/components/data/DataTable/index.d.ts +9 -0
  35. package/dist/atoms/components/data/DataTable/index.d.ts.map +1 -1
  36. package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts +1 -1
  37. package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts.map +1 -1
  38. package/dist/atoms/components/data/index.d.ts +3 -2
  39. package/dist/atoms/components/data/index.d.ts.map +1 -1
  40. package/dist/atoms/composed/ConnectionStatus/ConnectionStatus.d.ts +16 -0
  41. package/dist/atoms/composed/ConnectionStatus/ConnectionStatus.d.ts.map +1 -0
  42. package/dist/atoms/composed/ConnectionStatus/index.d.ts +3 -0
  43. package/dist/atoms/composed/ConnectionStatus/index.d.ts.map +1 -0
  44. package/dist/atoms/hooks/index.d.ts +9 -0
  45. package/dist/atoms/hooks/index.d.ts.map +1 -1
  46. package/dist/atoms/hooks/useAdaptiveTable.d.ts +49 -0
  47. package/dist/atoms/hooks/useAdaptiveTable.d.ts.map +1 -0
  48. package/dist/atoms/hooks/useApi.d.ts +1 -1
  49. package/dist/atoms/hooks/useApi.d.ts.map +1 -1
  50. package/dist/atoms/hooks/useColumnVisibility.d.ts +75 -0
  51. package/dist/atoms/hooks/useColumnVisibility.d.ts.map +1 -0
  52. package/dist/atoms/hooks/useEntityData.d.ts +36 -0
  53. package/dist/atoms/hooks/useEntityData.d.ts.map +1 -0
  54. package/dist/atoms/hooks/useEntityDetail.d.ts +43 -0
  55. package/dist/atoms/hooks/useEntityDetail.d.ts.map +1 -0
  56. package/dist/atoms/hooks/useExpandedRows.d.ts +66 -0
  57. package/dist/atoms/hooks/useExpandedRows.d.ts.map +1 -0
  58. package/dist/atoms/hooks/useFieldMetadata.d.ts +18 -0
  59. package/dist/atoms/hooks/useFieldMetadata.d.ts.map +1 -0
  60. package/dist/atoms/hooks/useOnlineStatus.d.ts +16 -0
  61. package/dist/atoms/hooks/useOnlineStatus.d.ts.map +1 -0
  62. package/dist/atoms/hooks/useResponsiveTable.d.ts +123 -0
  63. package/dist/atoms/hooks/useResponsiveTable.d.ts.map +1 -0
  64. package/dist/atoms/hooks/useTableFilters.d.ts +92 -0
  65. package/dist/atoms/hooks/useTableFilters.d.ts.map +1 -0
  66. package/dist/atoms/index.d.ts +1 -0
  67. package/dist/atoms/index.d.ts.map +1 -1
  68. package/dist/atoms/primitives/sheet.d.ts +23 -0
  69. package/dist/atoms/primitives/sheet.d.ts.map +1 -0
  70. package/dist/atoms/primitives/table.d.ts.map +1 -1
  71. package/dist/atoms/services/api/client.d.ts +12 -2
  72. package/dist/atoms/services/api/client.d.ts.map +1 -1
  73. package/dist/atoms/services/auth-service.d.ts +15 -0
  74. package/dist/atoms/services/auth-service.d.ts.map +1 -1
  75. package/dist/atoms/services/index.d.ts +2 -2
  76. package/dist/atoms/services/index.d.ts.map +1 -1
  77. package/dist/atoms/shared/config/table-config.d.ts +79 -0
  78. package/dist/atoms/shared/config/table-config.d.ts.map +1 -0
  79. package/dist/atoms/shared/index.d.ts +1 -0
  80. package/dist/atoms/shared/index.d.ts.map +1 -1
  81. package/dist/atoms/types/auth.d.ts +95 -2
  82. package/dist/atoms/types/auth.d.ts.map +1 -1
  83. package/dist/atoms/types/index.d.ts +1 -0
  84. package/dist/atoms/types/index.d.ts.map +1 -1
  85. package/dist/atoms/types/navigation.d.ts +1 -1
  86. package/dist/atoms/types/navigation.d.ts.map +1 -1
  87. package/dist/atoms/types/ui-config.d.ts +46 -11
  88. package/dist/atoms/types/ui-config.d.ts.map +1 -1
  89. package/dist/atoms/types/ui-metadata.d.ts +103 -0
  90. package/dist/atoms/types/ui-metadata.d.ts.map +1 -0
  91. package/dist/atoms/utils/entity-card-mapping.d.ts +105 -0
  92. package/dist/atoms/utils/entity-card-mapping.d.ts.map +1 -0
  93. package/dist/atoms/utils/field-detection.d.ts +2 -2
  94. package/dist/atoms/utils/field-detection.d.ts.map +1 -1
  95. package/dist/atoms/utils/icon-map.d.ts +48 -0
  96. package/dist/atoms/utils/icon-map.d.ts.map +1 -1
  97. package/dist/atoms/utils/index.d.ts +2 -0
  98. package/dist/atoms/utils/index.d.ts.map +1 -1
  99. package/dist/atoms/utils/ui-mapping.d.ts +9 -3
  100. package/dist/atoms/utils/ui-mapping.d.ts.map +1 -1
  101. package/dist/features/auth/components/ProtectedRoute.d.ts +3 -1
  102. package/dist/features/auth/components/ProtectedRoute.d.ts.map +1 -1
  103. package/dist/features/auth/hooks/useAuth.d.ts.map +1 -1
  104. package/dist/features/auth/providers/NoAuthProvider.d.ts +17 -0
  105. package/dist/features/auth/providers/NoAuthProvider.d.ts.map +1 -0
  106. package/dist/features/auth/providers/index.d.ts +1 -0
  107. package/dist/features/auth/providers/index.d.ts.map +1 -1
  108. package/dist/frontend-patterns.css +1 -4554
  109. package/dist/index.d.ts +12 -4
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.es.js +8793 -18275
  112. package/dist/index.es.js.map +1 -1
  113. package/dist/index.js +8790 -18271
  114. package/dist/index.js.map +1 -1
  115. package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -1
  116. package/dist/molecules/layout/BulkSelectionBar.d.ts +14 -2
  117. package/dist/molecules/layout/BulkSelectionBar.d.ts.map +1 -1
  118. package/dist/molecules/layout/FieldGrid/FieldGrid.d.ts +61 -0
  119. package/dist/molecules/layout/FieldGrid/FieldGrid.d.ts.map +1 -0
  120. package/dist/molecules/layout/FieldGrid/index.d.ts +2 -0
  121. package/dist/molecules/layout/FieldGrid/index.d.ts.map +1 -0
  122. package/dist/molecules/layout/ListToolbar/ListToolbar.d.ts +37 -0
  123. package/dist/molecules/layout/ListToolbar/ListToolbar.d.ts.map +1 -0
  124. package/dist/molecules/layout/ListToolbar/index.d.ts +2 -0
  125. package/dist/molecules/layout/ListToolbar/index.d.ts.map +1 -0
  126. package/dist/molecules/layout/PageTitle/PageTitle.d.ts +17 -0
  127. package/dist/molecules/layout/PageTitle/PageTitle.d.ts.map +1 -0
  128. package/dist/molecules/layout/PageTitle/index.d.ts +2 -0
  129. package/dist/molecules/layout/PageTitle/index.d.ts.map +1 -0
  130. package/dist/molecules/layout/index.d.ts +3 -0
  131. package/dist/molecules/layout/index.d.ts.map +1 -1
  132. package/dist/molecules/layout/navigation-context.d.ts.map +1 -1
  133. package/dist/sync/EntityStoreProvider.d.ts +35 -0
  134. package/dist/sync/EntityStoreProvider.d.ts.map +1 -0
  135. package/dist/sync/createEntityHooks.d.ts +29 -0
  136. package/dist/sync/createEntityHooks.d.ts.map +1 -0
  137. package/dist/sync/createStore.d.ts +65 -0
  138. package/dist/sync/createStore.d.ts.map +1 -0
  139. package/dist/sync/index.d.ts +6 -0
  140. package/dist/sync/index.d.ts.map +1 -0
  141. package/dist/sync/types.d.ts +383 -0
  142. package/dist/sync/types.d.ts.map +1 -0
  143. package/dist/templates/ListPageTemplate.d.ts +21 -0
  144. package/dist/templates/ListPageTemplate.d.ts.map +1 -0
  145. package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -1
  146. package/dist/templates/factory.d.ts +11 -0
  147. package/dist/templates/factory.d.ts.map +1 -1
  148. package/dist/templates/index.d.ts +1 -0
  149. package/dist/templates/index.d.ts.map +1 -1
  150. package/package.json +11 -7
  151. package/cli/commands/generate-hooks.ts +0 -316
  152. package/cli/commands/init.ts +0 -33
  153. package/cli/commands/scaffold.ts +0 -224
  154. package/cli/index.ts +0 -122
  155. package/cli/src/codegen/openapi/client-generator.js +0 -659
  156. package/cli/src/codegen/openapi/hook-generator.js +0 -725
  157. package/cli/src/codegen/openapi/parser.js +0 -274
  158. package/cli/src/codegen/openapi/type-generator.js +0 -329
  159. package/dist/codegen/openapi/bulk-types.d.ts +0 -142
  160. package/dist/codegen/openapi/bulk-types.d.ts.map +0 -1
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Core types for the unified entity store system.
3
+ *
4
+ * These types define the interfaces for entity hooks, API clients,
5
+ * and the store system that provides a unified consumption API
6
+ * regardless of sync mode (optimistic vs confirmed).
7
+ *
8
+ * @module sync/types
9
+ */
10
+ import type { UseMutationResult } from '@tanstack/react-query';
11
+ import type { Collection } from '@tanstack/db';
12
+ /**
13
+ * Configuration for an entity's hooks.
14
+ *
15
+ * @template TEntity - The entity type (must have an `id` field)
16
+ * @template TCreate - The type for creating new entities
17
+ * @template TUpdate - The type for updating existing entities
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const config: EntityHookConfig<Transaction, TransactionCreate, TransactionUpdate> = {
22
+ * name: 'transactions',
23
+ * collection: transactionCollection,
24
+ * api: transactionApi,
25
+ * localFirst: true,
26
+ * }
27
+ * ```
28
+ */
29
+ export interface EntityHookConfig<TEntity extends object & {
30
+ id?: string | null;
31
+ }, TCreate = Partial<TEntity>, TUpdate = Partial<TEntity>> {
32
+ /** Entity name (e.g., 'transactions') - used for query keys */
33
+ name: string;
34
+ /**
35
+ * TanStack DB collection for this entity.
36
+ * Uses `any` to avoid version mismatch issues with TanStack DB beta types
37
+ * across npm link boundaries.
38
+ */
39
+ collection: any;
40
+ /** API client methods */
41
+ api: EntityApi<TEntity, TCreate, TUpdate>;
42
+ /**
43
+ * Sync mode configuration.
44
+ * - true: Optimistic mutations (instant UI, background sync)
45
+ * - false: Confirmed mutations (wait for server)
46
+ * - function: Dynamic resolution (for runtime config)
47
+ */
48
+ localFirst: boolean | (() => boolean);
49
+ /** Query stale time in ms (default: 60000) */
50
+ staleTime?: number;
51
+ }
52
+ /**
53
+ * API client interface that generated clients must implement.
54
+ *
55
+ * @template TEntity - The entity type
56
+ * @template TCreate - The type for creating new entities
57
+ * @template TUpdate - The type for updating existing entities
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const transactionApi: EntityApi<Transaction, TransactionCreate, TransactionUpdate> = {
62
+ * list: (params) => fetch('/api/transactions', { params }),
63
+ * get: (id) => fetch(`/api/transactions/${id}`),
64
+ * create: (data) => fetch('/api/transactions', { method: 'POST', body: data }),
65
+ * update: (id, data) => fetch(`/api/transactions/${id}`, { method: 'PATCH', body: data }),
66
+ * delete: (id) => fetch(`/api/transactions/${id}`, { method: 'DELETE' }),
67
+ * }
68
+ * ```
69
+ */
70
+ export interface EntityApi<TEntity, TCreate, TUpdate> {
71
+ /**
72
+ * Fetch a list of entities with optional filtering/pagination.
73
+ * @param params - Optional list parameters
74
+ * @returns Promise resolving to array of entities
75
+ */
76
+ list(params?: ListParams): Promise<TEntity[]>;
77
+ /**
78
+ * Fetch a single entity by ID.
79
+ * @param id - The entity ID
80
+ * @returns Promise resolving to the entity
81
+ */
82
+ get(id: string): Promise<TEntity>;
83
+ /**
84
+ * Create a new entity.
85
+ * @param data - The entity data to create
86
+ * @returns Promise resolving to the created entity (may include txid for sync)
87
+ */
88
+ create(data: TCreate): Promise<TEntity & {
89
+ txid?: number;
90
+ }>;
91
+ /**
92
+ * Update an existing entity.
93
+ * @param id - The entity ID
94
+ * @param data - The partial entity data to update
95
+ * @returns Promise resolving to the updated entity (may include txid for sync)
96
+ */
97
+ update(id: string, data: TUpdate): Promise<TEntity & {
98
+ txid?: number;
99
+ }>;
100
+ /**
101
+ * Delete an entity.
102
+ * @param id - The entity ID
103
+ * @returns Promise resolving when deleted (may include txid for sync)
104
+ */
105
+ delete(id: string): Promise<void | {
106
+ txid?: number;
107
+ }>;
108
+ }
109
+ /**
110
+ * Common list parameters for API queries.
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * const params: ListParams = {
115
+ * skip: 0,
116
+ * limit: 20,
117
+ * sort_by: 'created_at',
118
+ * sort_order: 'desc',
119
+ * status: 'active', // Additional filter
120
+ * }
121
+ * ```
122
+ */
123
+ export interface ListParams {
124
+ /** Number of items to skip (for pagination) */
125
+ skip?: number;
126
+ /** Maximum number of items to return */
127
+ limit?: number;
128
+ /** Field to sort by */
129
+ sort_by?: string;
130
+ /** Sort direction */
131
+ sort_order?: 'asc' | 'desc';
132
+ /** Additional filter parameters */
133
+ [key: string]: unknown;
134
+ }
135
+ /**
136
+ * Type-safe filter where value types match field types.
137
+ *
138
+ * Supports single values for equality or arrays for IN queries.
139
+ *
140
+ * @template TEntity - The entity type to filter
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * // Type-safe filtering
145
+ * const where: WhereClause<Transaction> = {
146
+ * state: 'active', // string field, string value
147
+ * amount: 100, // number field, number value
148
+ * category_id: ['a', 'b'], // string field, string[] for IN
149
+ * }
150
+ * ```
151
+ */
152
+ export type WhereClause<TEntity> = {
153
+ [K in keyof TEntity]?: TEntity[K] | TEntity[K][];
154
+ };
155
+ /**
156
+ * Options for useList hook.
157
+ *
158
+ * @template TEntity - The entity type
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * const options: UseListOptions<Transaction> = {
163
+ * where: { state: 'active' },
164
+ * orderBy: { field: 'created_at', direction: 'desc' },
165
+ * skip: 0,
166
+ * limit: 20,
167
+ * }
168
+ * ```
169
+ */
170
+ export interface UseListOptions<TEntity> {
171
+ /** Filter criteria - applied client-side to collection */
172
+ where?: WhereClause<TEntity>;
173
+ /** Sort configuration */
174
+ orderBy?: {
175
+ field: keyof TEntity;
176
+ direction: 'asc' | 'desc';
177
+ };
178
+ /** Number of items to skip (for pagination) */
179
+ skip?: number;
180
+ /** Maximum number of items to return */
181
+ limit?: number;
182
+ /** Enable hook (default: true) */
183
+ enabled?: boolean;
184
+ }
185
+ /**
186
+ * Options for useGet hook.
187
+ *
188
+ * @example
189
+ * ```typescript
190
+ * const options: UseGetOptions = {
191
+ * enabled: !!selectedId, // Only fetch when ID is available
192
+ * }
193
+ * ```
194
+ */
195
+ export interface UseGetOptions {
196
+ /** Enable hook (default: true) */
197
+ enabled?: boolean;
198
+ }
199
+ /**
200
+ * Result type for list hooks.
201
+ *
202
+ * @template TEntity - The entity type
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * const { data, isLoading, error, refetch, collection } = useTransactionList()
207
+ *
208
+ * if (isLoading) return <Spinner />
209
+ * if (error) return <Error message={error.message} />
210
+ *
211
+ * return <DataTable data={data} />
212
+ * ```
213
+ */
214
+ export interface UseListResult<TEntity extends object> {
215
+ /** Array of entities (empty array if loading or error) */
216
+ data: TEntity[];
217
+ /** True while initial data is loading */
218
+ isLoading: boolean;
219
+ /** True if an error occurred */
220
+ isError: boolean;
221
+ /** Error object if an error occurred, null otherwise */
222
+ error: Error | null;
223
+ /** Function to manually refetch data */
224
+ refetch: () => void;
225
+ /** Direct collection access for mutations */
226
+ collection: Collection<TEntity, string>;
227
+ }
228
+ /**
229
+ * Result type for single entity hooks.
230
+ *
231
+ * @template TEntity - The entity type
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * const { data, isLoading, error, refetch, collection } = useTransaction(id)
236
+ *
237
+ * if (isLoading) return <Spinner />
238
+ * if (error) return <Error message={error.message} />
239
+ * if (!data) return <NotFound />
240
+ *
241
+ * return <TransactionDetail transaction={data} />
242
+ * ```
243
+ */
244
+ export interface UseGetResult<TEntity extends object> {
245
+ /** The entity if found, undefined otherwise */
246
+ data: TEntity | undefined;
247
+ /** True while initial data is loading */
248
+ isLoading: boolean;
249
+ /** True if an error occurred */
250
+ isError: boolean;
251
+ /** Error object if an error occurred, null otherwise */
252
+ error: Error | null;
253
+ /** Function to manually refetch data */
254
+ refetch: () => void;
255
+ /** Direct collection access for mutations */
256
+ collection: Collection<TEntity, string>;
257
+ }
258
+ /**
259
+ * Query key factory for cache management.
260
+ *
261
+ * Provides consistent query keys for TanStack Query cache operations.
262
+ *
263
+ * @example
264
+ * ```typescript
265
+ * // Invalidate all transaction queries
266
+ * queryClient.invalidateQueries({ queryKey: transactionKeys.all })
267
+ *
268
+ * // Invalidate only list queries
269
+ * queryClient.invalidateQueries({ queryKey: transactionKeys.lists() })
270
+ *
271
+ * // Invalidate specific detail query
272
+ * queryClient.invalidateQueries({ queryKey: transactionKeys.detail(id) })
273
+ * ```
274
+ */
275
+ export interface EntityQueryKeys {
276
+ /** Base key for all queries of this entity */
277
+ all: readonly string[];
278
+ /** Key factory for all list queries */
279
+ lists: () => readonly string[];
280
+ /** Key factory for a specific list query with parameters */
281
+ list: (params?: Record<string, unknown>) => readonly unknown[];
282
+ /** Key factory for all detail queries */
283
+ details: () => readonly string[];
284
+ /** Key factory for a specific detail query */
285
+ detail: (id: string) => readonly unknown[];
286
+ }
287
+ /**
288
+ * The hooks object returned by createEntityHooks.
289
+ *
290
+ * Provides a complete set of typed hooks for CRUD operations
291
+ * with automatic optimistic updates (when localFirst is enabled).
292
+ *
293
+ * @template TEntity - The entity type (must have an `id` field)
294
+ * @template TCreate - The type for creating new entities
295
+ * @template TUpdate - The type for updating existing entities
296
+ *
297
+ * @example
298
+ * ```typescript
299
+ * // Generated code creates hooks
300
+ * export const transactionHooks = createEntityHooks<
301
+ * Transaction,
302
+ * TransactionCreate,
303
+ * TransactionUpdate
304
+ * >({
305
+ * name: 'transactions',
306
+ * collection: transactionCollection,
307
+ * api: transactionApi,
308
+ * localFirst: true,
309
+ * })
310
+ *
311
+ * // Usage in components
312
+ * function TransactionsPage() {
313
+ * const { data, isLoading } = transactionHooks.useList()
314
+ * const create = transactionHooks.useCreate()
315
+ *
316
+ * return (
317
+ * <DataTable
318
+ * data={data}
319
+ * isLoading={isLoading}
320
+ * onAdd={() => create.mutate({ amount: 0 })}
321
+ * />
322
+ * )
323
+ * }
324
+ * ```
325
+ */
326
+ export interface EntityHooks<TEntity extends object & {
327
+ id?: string | null;
328
+ }, TCreate, TUpdate> {
329
+ /**
330
+ * Fetch and subscribe to list of entities.
331
+ * Data updates reactively when collection changes.
332
+ */
333
+ useList: (options?: UseListOptions<TEntity>) => UseListResult<TEntity>;
334
+ /**
335
+ * Fetch and subscribe to single entity by ID.
336
+ * Data updates reactively when entity changes in collection.
337
+ */
338
+ useGet: (id: string | null | undefined, options?: UseGetOptions) => UseGetResult<TEntity>;
339
+ /**
340
+ * Create mutation (optimistic if localFirst).
341
+ * Returns standard TanStack Query mutation result.
342
+ *
343
+ * Context includes tempId for optimistic rollback.
344
+ */
345
+ useCreate: () => UseMutationResult<TEntity, Error, TCreate, {
346
+ tempId?: string;
347
+ wasOptimistic?: boolean;
348
+ }>;
349
+ /**
350
+ * Update mutation (optimistic if localFirst).
351
+ * Returns standard TanStack Query mutation result.
352
+ *
353
+ * Context includes previous state for rollback.
354
+ */
355
+ useUpdate: () => UseMutationResult<TEntity, Error, {
356
+ id: string;
357
+ data: TUpdate;
358
+ }, {
359
+ previous?: TEntity;
360
+ wasOptimistic?: boolean;
361
+ }>;
362
+ /**
363
+ * Delete mutation (optimistic if localFirst).
364
+ * Returns standard TanStack Query mutation result.
365
+ *
366
+ * Context includes previous state for rollback.
367
+ */
368
+ useDelete: () => UseMutationResult<void | {
369
+ txid?: number;
370
+ }, Error, string, {
371
+ previous?: TEntity;
372
+ wasOptimistic?: boolean;
373
+ }>;
374
+ /**
375
+ * Direct collection access (for advanced use cases).
376
+ * Uses `any` to avoid version mismatch issues with TanStack DB beta types
377
+ * across npm link boundaries.
378
+ */
379
+ collection: any;
380
+ /** Query key factories (for cache management) */
381
+ keys: EntityQueryKeys;
382
+ }
383
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB,CAC/B,OAAO,SAAS,MAAM,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC/C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAC1B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAE1B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAA;IAEZ;;;;OAIG;IAEH,UAAU,EAAE,GAAG,CAAA;IAEf,yBAAyB;IACzB,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAEzC;;;;;OAKG;IACH,UAAU,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAA;IAErC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO;IAClD;;;;OAIG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IAE7C;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEjC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAE3D;;;;;OAKG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAEvE;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACtD;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qBAAqB;IACrB,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IAC3B,mCAAmC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI;KAChC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE;CACjD,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAC5B,yBAAyB;IACzB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,OAAO,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAA;IAC7D,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kCAAkC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,MAAM;IACnD,0DAA0D;IAC1D,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAA;IAClB,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,wDAAwD;IACxD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,wCAAwC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,6CAA6C;IAC7C,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;CACxC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,YAAY,CAAC,OAAO,SAAS,MAAM;IAClD,+CAA+C;IAC/C,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;IACzB,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAA;IAClB,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,wDAAwD;IACxD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,wCAAwC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,6CAA6C;IAC7C,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;CACxC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,GAAG,EAAE,SAAS,MAAM,EAAE,CAAA;IACtB,uCAAuC;IACvC,KAAK,EAAE,MAAM,SAAS,MAAM,EAAE,CAAA;IAC9B,4DAA4D;IAC5D,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,OAAO,EAAE,CAAA;IAC9D,yCAAyC;IACzC,OAAO,EAAE,MAAM,SAAS,MAAM,EAAE,CAAA;IAChC,8CAA8C;IAC9C,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,SAAS,OAAO,EAAE,CAAA;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,WAAW,WAAW,CAC1B,OAAO,SAAS,MAAM,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC/C,OAAO,EACP,OAAO;IAEP;;;OAGG;IACH,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,aAAa,CAAC,OAAO,CAAC,CAAA;IAEtE;;;OAGG;IACH,MAAM,EAAE,CACN,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7B,OAAO,CAAC,EAAE,aAAa,KACpB,YAAY,CAAC,OAAO,CAAC,CAAA;IAE1B;;;;;OAKG;IACH,SAAS,EAAE,MAAM,iBAAiB,CAChC,OAAO,EACP,KAAK,EACL,OAAO,EACP;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAC7C,CAAA;IAED;;;;;OAKG;IACH,SAAS,EAAE,MAAM,iBAAiB,CAChC,OAAO,EACP,KAAK,EACL;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,EAC7B;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAChD,CAAA;IAED;;;;;OAKG;IACH,SAAS,EAAE,MAAM,iBAAiB,CAChC,IAAI,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EACxB,KAAK,EACL,MAAM,EACN;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAChD,CAAA;IAED;;;;OAIG;IAEH,UAAU,EAAE,GAAG,CAAA;IAEf,iDAAiD;IACjD,IAAI,EAAE,eAAe,CAAA;CACtB"}
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ export interface ListPageTemplateProps {
3
+ /** Page title element or string */
4
+ title: React.ReactNode;
5
+ /** Toolbar element (use ListToolbar or custom) */
6
+ toolbar?: React.ReactNode;
7
+ /** Main content (table, cards, etc) */
8
+ children: React.ReactNode;
9
+ /** Footer content (pagination, stats, etc) */
10
+ footer?: React.ReactNode;
11
+ /** Additional className for outer container */
12
+ className?: string;
13
+ /** Content area className */
14
+ contentClassName?: string;
15
+ /** Maximum width constraint */
16
+ maxWidth?: "sm" | "md" | "lg" | "xl" | "2xl" | "full" | "none";
17
+ /** Padding size */
18
+ padding?: "none" | "sm" | "md" | "lg";
19
+ }
20
+ export declare const ListPageTemplate: React.FC<ListPageTemplateProps>;
21
+ //# sourceMappingURL=ListPageTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListPageTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/ListPageTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,kDAAkD;IAClD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/D,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CACvC;AAmBD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAqE5D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdminCRUDTemplate.d.ts","sourceRoot":"","sources":["../../../src/templates/admin/AdminCRUDTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAoBxC,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,IAAI,EACA,MAAM,GACN,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,UAAU,GACV,MAAM,CAAC;IACX,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,gCAAgC;IAChC,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,kCAAkC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;CAC7E;AAED,MAAM,WAAW,eAAe;IAC9B,yBAAyB;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,+BAA+B;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,kCAAkC;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,sBAAsB;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,sBAAsB;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,sBAAsB;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,4BAA4B;IAC5B,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,kBAAkB;IAClB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,kBAAkB;IAClB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,uBAAuB;IACvB,WAAW,EAAE,eAAe,CAAC;IAC7B,2BAA2B;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B;IAC3B,YAAY,CAAC,EAAE;QACb,aAAa,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACrE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;KAC7B,CAAC;IACF,gCAAgC;IAChC,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACvB,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;KACjD,CAAC,CAAC;IACH,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,yBAAyB;IACzB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA+hB9D,CAAC"}
1
+ {"version":3,"file":"AdminCRUDTemplate.d.ts","sourceRoot":"","sources":["../../../src/templates/admin/AdminCRUDTemplate.tsx"],"names":[],"mappings":"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"}
@@ -18,6 +18,17 @@ export interface AppConfig {
18
18
  customProviders?: React.ComponentType<{
19
19
  children: ReactNode;
20
20
  }>[];
21
+ /**
22
+ * Enable Query cache persistence to localStorage.
23
+ * When true, cached data survives page refresh for instant offline UI.
24
+ * @default false
25
+ */
26
+ persistQueryCache?: boolean;
27
+ /**
28
+ * Storage key for persisted Query cache.
29
+ * @default 'PATTERN_STACK_QUERY_CACHE'
30
+ */
31
+ queryCacheKey?: string;
21
32
  }
22
33
  export interface AppInstance {
23
34
  render: () => ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/templates/factory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAUnE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,CAAC,EAAE,CAAC;CAClE;AAGD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,SAAS,CAAC;IACxB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CA6HtE;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAE1D"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/templates/factory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAwCnE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,CAAC,EAAE,CAAC;IACjE;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,SAAS,CAAC;IACxB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAyLtE;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAE1D"}
@@ -2,6 +2,7 @@ export { ComponentShowcaseTemplate } from "./ComponentShowcaseTemplate";
2
2
  export { DashboardTemplate, DashboardGrid, DashboardCard, type DashboardTemplateProps, type DashboardGridProps, type DashboardCardProps, } from "./DashboardTemplate";
3
3
  export { AuthTemplate, AuthFormField, AuthLink, AuthDivider, type AuthTemplateProps, type AuthFormFieldProps, type AuthLinkProps, type AuthDividerProps, } from "./AuthTemplate";
4
4
  export { DataTemplate, DataDetailTemplate, type DataTemplateProps, type DataDetailTemplateProps, } from "./DataTemplate";
5
+ export { ListPageTemplate, type ListPageTemplateProps, } from "./ListPageTemplate";
5
6
  export { EnhancedDataTemplate, type EnhancedDataTemplateProps, type ServerSideConfig, type FilterField, type ServerParams, type InlineEditConfig, type EditableField, } from "./EnhancedDataTemplate";
6
7
  export * from "./admin";
7
8
  export * from "./api";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAGhC,cAAc,SAAS,CAAC;AAGxB,cAAc,OAAO,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,SAAS,EACd,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAGhC,cAAc,SAAS,CAAC;AAGxB,cAAc,OAAO,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,SAAS,EACd,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@pattern-stack/frontend-patterns",
3
3
  "description": "Production-ready React frontend template with atomic architecture patterns. Build ultra-lean applications by importing shared UI foundation patterns.",
4
4
  "private": false,
5
- "version": "0.2.0-alpha.0",
5
+ "version": "0.2.0-alpha.11",
6
6
  "keywords": [
7
7
  "react",
8
8
  "typescript",
@@ -65,10 +65,8 @@
65
65
  "style:check": "npm run lint:design-system",
66
66
  "style:fix": "npm run lint:fix && npm run style:check",
67
67
  "preview": "vite preview",
68
- "generate-types": "npx openapi-typescript ./openapi.json -o src/atoms/types/generated.ts",
69
- "generate-types:live": "npx openapi-typescript ${OPENAPI_URL:-http://localhost:8080/openapi.json} -o src/atoms/types/generated.ts",
68
+ "generate": "sync-patterns generate ./openapi.json --output ./src/generated --entities --collections",
70
69
  "generate:hooks": "npx tsx cli/index.ts generate hooks",
71
- "dev:with-types": "npm run generate-types && npm run dev",
72
70
  "test": "vitest",
73
71
  "test:ui": "vitest --ui",
74
72
  "test:run": "vitest run",
@@ -94,11 +92,18 @@
94
92
  "dependencies": {
95
93
  "@hookform/resolvers": "^5.0.1",
96
94
  "@radix-ui/react-avatar": "^1.1.10",
95
+ "@radix-ui/react-dialog": "^1.1.15",
97
96
  "@radix-ui/react-dropdown-menu": "^2.1.15",
98
97
  "@radix-ui/react-label": "^2.1.7",
99
98
  "@radix-ui/react-slot": "^1.2.3",
99
+ "@tanstack/db": "^0.5.11",
100
+ "@tanstack/electric-db-collection": "^0.2.11",
101
+ "@tanstack/query-db-collection": "^1.0.6",
102
+ "@tanstack/query-sync-storage-persister": "^5.90.14",
103
+ "@tanstack/react-db": "^0.1.55",
100
104
  "@tanstack/react-query": "^5.77.2",
101
105
  "@tanstack/react-query-devtools": "^5.79.0",
106
+ "@tanstack/react-query-persist-client": "^5.90.14",
102
107
  "axios": "^1.9.0",
103
108
  "class-variance-authority": "^0.7.1",
104
109
  "clsx": "^2.1.1",
@@ -106,7 +111,6 @@
106
111
  "lucide-react": "^0.511.0",
107
112
  "mapbox-gl": "^3.1.2",
108
113
  "openapi-types": "^12.1.3",
109
- "openapi-typescript": "^7.8.0",
110
114
  "react-hook-form": "^7.56.4",
111
115
  "react-map-gl": "^7.1.7",
112
116
  "react-router-dom": "^7.6.1",
@@ -120,8 +124,8 @@
120
124
  "@testing-library/jest-dom": "^6.6.3",
121
125
  "@testing-library/react": "^16.3.0",
122
126
  "@testing-library/user-event": "^14.6.1",
123
- "@types/node": "^22.15.21",
124
- "@types/react": "^19.1.2",
127
+ "@types/node": "^22.19.1",
128
+ "@types/react": "^19.2.2",
125
129
  "@types/react-dom": "^19.1.2",
126
130
  "@vitejs/plugin-react": "^4.4.1",
127
131
  "@vitest/coverage-v8": "^3.2.1",