@object-ui/plugin-list 3.1.5 → 3.3.0

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 (33) hide show
  1. package/.turbo/turbo-build.log +83 -10
  2. package/CHANGELOG.md +22 -0
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +34834 -34375
  5. package/dist/index.umd.cjs +34 -33
  6. package/dist/{src → packages/plugin-list/src}/ListView.d.ts +17 -1
  7. package/dist/packages/plugin-list/src/ListView.d.ts.map +1 -0
  8. package/dist/packages/plugin-list/src/ListView.stories.d.ts.map +1 -0
  9. package/dist/packages/plugin-list/src/ObjectGallery.d.ts.map +1 -0
  10. package/dist/packages/plugin-list/src/UserFilters.d.ts.map +1 -0
  11. package/dist/packages/plugin-list/src/ViewSwitcher.d.ts.map +1 -0
  12. package/dist/packages/plugin-list/src/components/TabBar.d.ts.map +1 -0
  13. package/dist/{src → packages/plugin-list/src}/index.d.ts +1 -1
  14. package/dist/packages/plugin-list/src/index.d.ts.map +1 -0
  15. package/dist/plugin-list.css +1 -1
  16. package/package.json +11 -11
  17. package/src/ListView.tsx +41 -4
  18. package/src/__tests__/ListRefresh.test.tsx +276 -0
  19. package/src/__tests__/ListView.test.tsx +4 -2
  20. package/src/index.tsx +1 -1
  21. package/vite.config.ts +1 -0
  22. package/dist/src/ListView.d.ts.map +0 -1
  23. package/dist/src/ListView.stories.d.ts.map +0 -1
  24. package/dist/src/ObjectGallery.d.ts.map +0 -1
  25. package/dist/src/UserFilters.d.ts.map +0 -1
  26. package/dist/src/ViewSwitcher.d.ts.map +0 -1
  27. package/dist/src/components/TabBar.d.ts.map +0 -1
  28. package/dist/src/index.d.ts.map +0 -1
  29. /package/dist/{src → packages/plugin-list/src}/ListView.stories.d.ts +0 -0
  30. /package/dist/{src → packages/plugin-list/src}/ObjectGallery.d.ts +0 -0
  31. /package/dist/{src → packages/plugin-list/src}/UserFilters.d.ts +0 -0
  32. /package/dist/{src → packages/plugin-list/src}/ViewSwitcher.d.ts +0 -0
  33. /package/dist/{src → packages/plugin-list/src}/components/TabBar.d.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@object-ui/plugin-list",
3
- "version": "3.1.5",
3
+ "version": "3.3.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "ListView plugin for Object UI - unified view component with view type switching",
@@ -24,13 +24,13 @@
24
24
  }
25
25
  },
26
26
  "dependencies": {
27
- "lucide-react": "^0.577.0",
28
- "@object-ui/components": "3.1.5",
29
- "@object-ui/core": "3.1.5",
30
- "@object-ui/i18n": "3.1.5",
31
- "@object-ui/mobile": "3.1.5",
32
- "@object-ui/react": "3.1.5",
33
- "@object-ui/types": "3.1.5"
27
+ "lucide-react": "^1.8.0",
28
+ "@object-ui/components": "3.3.0",
29
+ "@object-ui/core": "3.3.0",
30
+ "@object-ui/i18n": "3.3.0",
31
+ "@object-ui/mobile": "3.3.0",
32
+ "@object-ui/react": "3.3.0",
33
+ "@object-ui/types": "3.3.0"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "react": "^18.0.0 || ^19.0.0",
@@ -40,10 +40,10 @@
40
40
  "@types/react": "19.2.14",
41
41
  "@types/react-dom": "19.2.3",
42
42
  "@vitejs/plugin-react": "^6.0.1",
43
- "typescript": "^5.9.3",
44
- "vite": "^8.0.1",
43
+ "typescript": "^6.0.2",
44
+ "vite": "^8.0.8",
45
45
  "vite-plugin-dts": "^4.5.4",
46
- "vitest": "^4.1.0"
46
+ "vitest": "^4.1.4"
47
47
  },
48
48
  "scripts": {
49
49
  "build": "vite build",
package/src/ListView.tsx CHANGED
@@ -273,7 +273,24 @@ function useListFieldLabel() {
273
273
  }
274
274
  }
275
275
 
276
- export const ListView: React.FC<ListViewProps> = ({
276
+ /**
277
+ * Imperative handle exposed by ListView via React.forwardRef.
278
+ * Allows parent components to trigger a data refresh programmatically.
279
+ *
280
+ * @example
281
+ * ```tsx
282
+ * const listRef = React.useRef<ListViewHandle>(null);
283
+ * <ListView ref={listRef} schema={schema} />
284
+ * // After a mutation:
285
+ * listRef.current?.refresh();
286
+ * ```
287
+ */
288
+ export interface ListViewHandle {
289
+ /** Force the ListView to re-fetch data from the DataSource */
290
+ refresh(): void;
291
+ }
292
+
293
+ export const ListView = React.forwardRef<ListViewHandle, ListViewProps>(({
277
294
  schema: propSchema,
278
295
  className,
279
296
  onViewChange,
@@ -283,7 +300,7 @@ export const ListView: React.FC<ListViewProps> = ({
283
300
  onRowClick,
284
301
  showViewSwitcher = false,
285
302
  ...props
286
- }) => {
303
+ }, ref) => {
287
304
  // i18n support for record count and other labels
288
305
  const { t } = useListViewTranslation();
289
306
  const { fieldLabel: resolveFieldLabel } = useListFieldLabel();
@@ -393,6 +410,24 @@ export const ListView: React.FC<ListViewProps> = ({
393
410
  const [refreshKey, setRefreshKey] = React.useState(0);
394
411
  const [dataLimitReached, setDataLimitReached] = React.useState(false);
395
412
 
413
+ // --- P1: Imperative refresh API ---
414
+ React.useImperativeHandle(ref, () => ({
415
+ refresh: () => setRefreshKey(k => k + 1),
416
+ }), []);
417
+
418
+ // --- P2: Auto-subscribe to DataSource mutation events ---
419
+ // When an external refreshTrigger is provided, rely on that instead of
420
+ // subscribing to dataSource mutations to avoid double refreshes.
421
+ React.useEffect(() => {
422
+ if (!dataSource?.onMutation || !schema.objectName || schema.refreshTrigger) return;
423
+ const unsub = dataSource.onMutation((event) => {
424
+ if (event.resource === schema.objectName) {
425
+ setRefreshKey(k => k + 1);
426
+ }
427
+ });
428
+ return unsub;
429
+ }, [dataSource, schema.objectName, schema.refreshTrigger]);
430
+
396
431
  // Dynamic page size state (wired from pageSizeOptions selector)
397
432
  const [dynamicPageSize, setDynamicPageSize] = React.useState<number | undefined>(undefined);
398
433
  const effectivePageSize = dynamicPageSize ?? schema.pagination?.pageSize ?? 100;
@@ -683,7 +718,7 @@ export const ListView: React.FC<ListViewProps> = ({
683
718
  fetchData();
684
719
 
685
720
  return () => { isMounted = false; };
686
- }, [schema.objectName, schema.data, dataSource, schema.filters, effectivePageSize, currentSort, currentFilters, activeQuickFilters, normalizedQuickFilters, userFilterConditions, refreshKey, searchTerm, schema.searchableFields, expandFields, objectDefLoaded]); // Re-fetch on filter/sort/search change
721
+ }, [schema.objectName, schema.data, dataSource, schema.filters, effectivePageSize, currentSort, currentFilters, activeQuickFilters, normalizedQuickFilters, userFilterConditions, refreshKey, searchTerm, schema.searchableFields, expandFields, objectDefLoaded, schema.refreshTrigger]); // Re-fetch on filter/sort/search/refreshTrigger change
687
722
 
688
723
  // Available view types based on schema configuration
689
724
  const availableViews = React.useMemo(() => {
@@ -1685,4 +1720,6 @@ export const ListView: React.FC<ListViewProps> = ({
1685
1720
  )}
1686
1721
  </div>
1687
1722
  );
1688
- };
1723
+ });
1724
+
1725
+ ListView.displayName = 'ListView';
@@ -0,0 +1,276 @@
1
+ /**
2
+ * ObjectUI — List Refresh Tests
3
+ * Tests for the standardized list refresh after mutation mechanism.
4
+ *
5
+ * Covers:
6
+ * - P0: refreshTrigger prop triggers data re-fetch
7
+ * - P1: Imperative refresh() via forwardRef
8
+ * - P2: Auto-refresh via DataSource.onMutation()
9
+ */
10
+
11
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
12
+ import * as React from 'react';
13
+ import { render, act } from '@testing-library/react';
14
+ import { ListView } from '../ListView';
15
+ import type { ListViewHandle } from '../ListView';
16
+ import type { ListViewSchema } from '@object-ui/types';
17
+ import { SchemaRendererProvider } from '@object-ui/react';
18
+
19
+ let mockDataSource: any;
20
+
21
+ const renderWithProvider = (component: React.ReactNode, ds?: any) =>
22
+ render(
23
+ <SchemaRendererProvider dataSource={ds || mockDataSource}>
24
+ {component}
25
+ </SchemaRendererProvider>,
26
+ );
27
+
28
+ describe('ListView Refresh Mechanisms', () => {
29
+ beforeEach(() => {
30
+ mockDataSource = {
31
+ find: vi.fn().mockResolvedValue([]),
32
+ findOne: vi.fn(),
33
+ create: vi.fn(),
34
+ update: vi.fn(),
35
+ delete: vi.fn(),
36
+ getObjectSchema: vi.fn().mockResolvedValue({ name: 'contacts', fields: {} }),
37
+ };
38
+ });
39
+
40
+ // =========================================================================
41
+ // P0: refreshTrigger schema prop
42
+ // =========================================================================
43
+ describe('P0 — refreshTrigger prop', () => {
44
+ it('should re-fetch data when refreshTrigger changes', async () => {
45
+ const schema: ListViewSchema = {
46
+ type: 'list-view',
47
+ objectName: 'contacts',
48
+ fields: ['name'],
49
+ refreshTrigger: 0,
50
+ };
51
+
52
+ const { rerender } = renderWithProvider(
53
+ <ListView schema={schema} dataSource={mockDataSource} />,
54
+ );
55
+
56
+ // Wait for initial data fetch
57
+ await vi.waitFor(() => {
58
+ expect(mockDataSource.find).toHaveBeenCalled();
59
+ });
60
+
61
+ const initialCallCount = mockDataSource.find.mock.calls.length;
62
+
63
+ // Increment refreshTrigger → should trigger a new data fetch
64
+ const updatedSchema: ListViewSchema = { ...schema, refreshTrigger: 1 };
65
+ rerender(
66
+ <SchemaRendererProvider dataSource={mockDataSource}>
67
+ <ListView schema={updatedSchema} dataSource={mockDataSource} />
68
+ </SchemaRendererProvider>,
69
+ );
70
+
71
+ await vi.waitFor(() => {
72
+ expect(mockDataSource.find.mock.calls.length).toBeGreaterThan(initialCallCount);
73
+ });
74
+ });
75
+
76
+ it('should NOT re-fetch when refreshTrigger stays the same', async () => {
77
+ const schema: ListViewSchema = {
78
+ type: 'list-view',
79
+ objectName: 'contacts',
80
+ fields: ['name'],
81
+ refreshTrigger: 5,
82
+ };
83
+
84
+ const { rerender } = renderWithProvider(
85
+ <ListView schema={schema} dataSource={mockDataSource} />,
86
+ );
87
+
88
+ await vi.waitFor(() => {
89
+ expect(mockDataSource.find).toHaveBeenCalled();
90
+ });
91
+
92
+ const callCount = mockDataSource.find.mock.calls.length;
93
+
94
+ // Re-render with the same refreshTrigger → no extra fetch
95
+ rerender(
96
+ <SchemaRendererProvider dataSource={mockDataSource}>
97
+ <ListView schema={{ ...schema }} dataSource={mockDataSource} />
98
+ </SchemaRendererProvider>,
99
+ );
100
+
101
+ // Wait a tick and verify no extra call
102
+ await new Promise(r => setTimeout(r, 100));
103
+ expect(mockDataSource.find.mock.calls.length).toBe(callCount);
104
+ });
105
+ });
106
+
107
+ // =========================================================================
108
+ // P1: Imperative refresh() via forwardRef
109
+ // =========================================================================
110
+ describe('P1 — imperative refresh() API', () => {
111
+ it('should expose a refresh() method via ref', () => {
112
+ const ref = React.createRef<ListViewHandle>();
113
+ const schema: ListViewSchema = {
114
+ type: 'list-view',
115
+ objectName: 'contacts',
116
+ fields: ['name'],
117
+ };
118
+
119
+ renderWithProvider(<ListView ref={ref} schema={schema} dataSource={mockDataSource} />);
120
+
121
+ expect(ref.current).toBeDefined();
122
+ expect(typeof ref.current?.refresh).toBe('function');
123
+ });
124
+
125
+ it('calling refresh() should trigger a data re-fetch', async () => {
126
+ const ref = React.createRef<ListViewHandle>();
127
+ const schema: ListViewSchema = {
128
+ type: 'list-view',
129
+ objectName: 'contacts',
130
+ fields: ['name'],
131
+ };
132
+
133
+ renderWithProvider(<ListView ref={ref} schema={schema} dataSource={mockDataSource} />);
134
+
135
+ await vi.waitFor(() => {
136
+ expect(mockDataSource.find).toHaveBeenCalled();
137
+ });
138
+
139
+ const callCount = mockDataSource.find.mock.calls.length;
140
+
141
+ // Call imperative refresh
142
+ act(() => {
143
+ ref.current?.refresh();
144
+ });
145
+
146
+ await vi.waitFor(() => {
147
+ expect(mockDataSource.find.mock.calls.length).toBeGreaterThan(callCount);
148
+ });
149
+ });
150
+ });
151
+
152
+ // =========================================================================
153
+ // P2: Auto-refresh via DataSource.onMutation()
154
+ // =========================================================================
155
+ describe('P2 — DataSource.onMutation() auto-refresh', () => {
156
+ it('should auto-refresh when a mutation event fires for the same resource', async () => {
157
+ let mutationCallback: ((event: any) => void) | null = null;
158
+ const unsub = vi.fn();
159
+
160
+ const dsWithMutation = {
161
+ ...mockDataSource,
162
+ onMutation: vi.fn((cb: any) => {
163
+ mutationCallback = cb;
164
+ return unsub;
165
+ }),
166
+ };
167
+
168
+ const schema: ListViewSchema = {
169
+ type: 'list-view',
170
+ objectName: 'contacts',
171
+ fields: ['name'],
172
+ };
173
+
174
+ renderWithProvider(
175
+ <ListView schema={schema} dataSource={dsWithMutation} />,
176
+ dsWithMutation,
177
+ );
178
+
179
+ await vi.waitFor(() => {
180
+ expect(dsWithMutation.find).toHaveBeenCalled();
181
+ });
182
+
183
+ const callCount = dsWithMutation.find.mock.calls.length;
184
+
185
+ // Simulate a mutation on the same resource
186
+ act(() => {
187
+ mutationCallback?.({ type: 'create', resource: 'contacts', record: { id: '1' } });
188
+ });
189
+
190
+ await vi.waitFor(() => {
191
+ expect(dsWithMutation.find.mock.calls.length).toBeGreaterThan(callCount);
192
+ });
193
+ });
194
+
195
+ it('should NOT refresh when a mutation fires for a different resource', async () => {
196
+ let mutationCallback: ((event: any) => void) | null = null;
197
+
198
+ const dsWithMutation = {
199
+ ...mockDataSource,
200
+ onMutation: vi.fn((cb: any) => {
201
+ mutationCallback = cb;
202
+ return vi.fn();
203
+ }),
204
+ };
205
+
206
+ const schema: ListViewSchema = {
207
+ type: 'list-view',
208
+ objectName: 'contacts',
209
+ fields: ['name'],
210
+ };
211
+
212
+ renderWithProvider(
213
+ <ListView schema={schema} dataSource={dsWithMutation} />,
214
+ dsWithMutation,
215
+ );
216
+
217
+ await vi.waitFor(() => {
218
+ expect(dsWithMutation.find).toHaveBeenCalled();
219
+ });
220
+
221
+ const callCount = dsWithMutation.find.mock.calls.length;
222
+
223
+ // Fire a mutation for a different resource
224
+ act(() => {
225
+ mutationCallback?.({ type: 'create', resource: 'accounts', record: { id: '2' } });
226
+ });
227
+
228
+ // Should NOT trigger a refresh
229
+ await new Promise(r => setTimeout(r, 100));
230
+ expect(dsWithMutation.find.mock.calls.length).toBe(callCount);
231
+ });
232
+
233
+ it('should unsubscribe when unmounted', async () => {
234
+ const unsub = vi.fn();
235
+ const dsWithMutation = {
236
+ ...mockDataSource,
237
+ onMutation: vi.fn(() => unsub),
238
+ };
239
+
240
+ const schema: ListViewSchema = {
241
+ type: 'list-view',
242
+ objectName: 'contacts',
243
+ fields: ['name'],
244
+ };
245
+
246
+ const { unmount } = renderWithProvider(
247
+ <ListView schema={schema} dataSource={dsWithMutation} />,
248
+ dsWithMutation,
249
+ );
250
+
251
+ await vi.waitFor(() => {
252
+ expect(dsWithMutation.onMutation).toHaveBeenCalled();
253
+ });
254
+
255
+ unmount();
256
+ expect(unsub).toHaveBeenCalled();
257
+ });
258
+
259
+ it('should work without onMutation (backward compatible)', async () => {
260
+ // DataSource without onMutation — should not throw
261
+ const schema: ListViewSchema = {
262
+ type: 'list-view',
263
+ objectName: 'contacts',
264
+ fields: ['name'],
265
+ };
266
+
267
+ renderWithProvider(
268
+ <ListView schema={schema} dataSource={mockDataSource} />,
269
+ );
270
+
271
+ await vi.waitFor(() => {
272
+ expect(mockDataSource.find).toHaveBeenCalled();
273
+ });
274
+ });
275
+ });
276
+ });
@@ -50,8 +50,10 @@ describe('ListView', () => {
50
50
  expect(ListView).toBeDefined();
51
51
  });
52
52
 
53
- it('should be a function', () => {
54
- expect(typeof ListView).toBe('function');
53
+ it('should be a forwardRef component', () => {
54
+ // React.forwardRef wraps the component — typeof is 'object' with a render function
55
+ expect(typeof ListView).toBe('object');
56
+ expect(typeof (ListView as any).render).toBe('function');
55
57
  });
56
58
 
57
59
  it('should render with basic schema', () => {
package/src/index.tsx CHANGED
@@ -17,7 +17,7 @@ export type { TabBarProps, ViewTab } from './components/TabBar';
17
17
  export { UserFilters } from './UserFilters';
18
18
  export type { UserFiltersProps } from './UserFilters';
19
19
  export { evaluateConditionalFormatting, normalizeFilterCondition, normalizeFilters } from './ListView';
20
- export type { ListViewProps } from './ListView';
20
+ export type { ListViewProps, ListViewHandle } from './ListView';
21
21
  export type { ObjectGalleryProps } from './ObjectGallery';
22
22
  export type { ViewSwitcherProps, ViewType } from './ViewSwitcher';
23
23
 
package/vite.config.ts CHANGED
@@ -8,6 +8,7 @@ export default defineConfig({
8
8
  react(),
9
9
  dts({
10
10
  insertTypesEntry: true,
11
+ compilerOptions: { rootDir: resolve(__dirname, '../..') },
11
12
  outDir: 'dist',
12
13
  tsconfigPath: './tsconfig.json',
13
14
  }),
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../src/ListView.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAgB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAMxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,uEAAuE;IACvE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvD,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAqBD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAyBhE;AAUD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAKtD;AAmBD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,CAAC,EAAE,cAAc,CAAC,uBAAuB,CAAC,GAC9C,KAAK,CAAC,aAAa,CAoDrB;AAuFD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAo4C5C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListView.stories.d.ts","sourceRoot":"","sources":["../../src/ListView.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIvD,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;CAUW,CAAC;AAEtB,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAInC,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAexB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAczB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObjectGallery.d.ts","sourceRoot":"","sources":["../../src/ObjectGallery.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAgE,MAAM,OAAO,CAAC;AAIrF,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG5F,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE;QACJ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACjC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,aAAa,CAAC;QACxB,gDAAgD;QAChD,UAAU,CAAC,EAAE,oBAAoB,CAAC;QAClC,mDAAmD;QACnD,QAAQ,CAAC,EAAE,cAAc,CAAC;QAC1B,iDAAiD;QACjD,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iDAAiD;QACjD,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IAC1E,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACxD,uEAAuE;IACvE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC1D;AAcD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAyPtD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserFilters.d.ts","sourceRoot":"","sources":["../../src/UserFilters.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAoBvD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACnD,wDAAwD;IACxD,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,wCAAwC;IACxC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,yCAAyC;IACzC,cAAc,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACzC,gGAAgG;IAChG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,SAAS,EACT,IAAS,EACT,cAAc,EACd,UAAU,EACV,SAAS,GACV,EAAE,gBAAgB,kDAkClB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ViewSwitcher.d.ts","sourceRoot":"","sources":["../../src/ViewSwitcher.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,QAAQ,GACR,SAAS,GACT,UAAU,GACV,UAAU,GACV,OAAO,GACP,KAAK,CAAC;AAEV,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,QAAQ,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAsBD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAsDpD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../src/components/TabBar.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyBD;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA4DxC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACvG,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}