@progress/kendo-react-data-tools 11.0.0-develop.9 → 11.0.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.
package/index.d.mts CHANGED
@@ -16,6 +16,7 @@ import { GroupDescriptor } from '@progress/kendo-data-query';
16
16
  import { JSX } from 'react/jsx-runtime';
17
17
  import * as React_2 from 'react';
18
18
  import { SortDescriptor } from '@progress/kendo-data-query';
19
+ import { State } from '@progress/kendo-data-query';
19
20
  import { SVGIcon } from '@progress/kendo-react-common';
20
21
 
21
22
  /**
@@ -726,6 +727,181 @@ declare interface DataItemWrapper {
726
727
  levelCount: number;
727
728
  }
728
729
 
730
+ /**
731
+ * Represents a data source with data presentation operations (filtering, sorting, paging, grouping).
732
+ *
733
+ * @template T - The type of data items in the data source. Defaults to any.
734
+ */
735
+ export declare type DataSource<T extends object = any> = {
736
+ /** The array of data items. */
737
+ data: T[];
738
+ /**
739
+ * Sets the data items in the data source.
740
+ *
741
+ * @param value - The array of new data items.
742
+ */
743
+ setData: (value: T[]) => void;
744
+ /** The total number of data items. */
745
+ total: number;
746
+ /** The schema used for data validation and transformation. */
747
+ schema: DataSourceProps<T>['schema'];
748
+ /** The current sort descriptors applied to the data. */
749
+ sort: SortDescriptor[] | undefined;
750
+ /**
751
+ * Sets the sort descriptors for the data.
752
+ *
753
+ * @param value - The new sort descriptors.
754
+ */
755
+ setSort: (value: SortDescriptor[] | undefined) => void;
756
+ /** The current filter descriptor applied to the data. */
757
+ filter: CompositeFilterDescriptor | undefined;
758
+ /**
759
+ * Sets the filter descriptor for the data.
760
+ *
761
+ * @param value - The new filter descriptor.
762
+ */
763
+ setFilter: (value: CompositeFilterDescriptor | undefined) => void;
764
+ /** The current skip value for pagination. */
765
+ skip: number | undefined;
766
+ /**
767
+ * Sets the skip value for pagination.
768
+ *
769
+ * @param value - The new skip value.
770
+ */
771
+ setSkip: (value: number | undefined) => void;
772
+ /** The current take value for pagination. */
773
+ take: number | undefined;
774
+ /**
775
+ * Sets the take value for pagination.
776
+ *
777
+ * @param value - The new take value.
778
+ */
779
+ setTake: (value: number | undefined) => void;
780
+ /** The current group descriptors applied to the data. */
781
+ group: GroupDescriptor[] | undefined;
782
+ /**
783
+ * Sets the group descriptors for the data.
784
+ *
785
+ * @param value - The new group descriptors.
786
+ */
787
+ setGroup: (value: GroupDescriptor[] | undefined) => void;
788
+ /** The current data state, including sorting, filtering, and pagination. */
789
+ dataState: Partial<DataSourceProps<T>>;
790
+ /**
791
+ * Sets the data state, including sorting, filtering, and pagination.
792
+ *
793
+ * @param dataState - The new data state.
794
+ */
795
+ setDataState: (dataState: Partial<DataSourceProps<T>>) => void;
796
+ /**
797
+ * Sets the total number of data items.
798
+ *
799
+ * @param value - The new total value.
800
+ */
801
+ setTotal: (value: number | undefined) => void;
802
+ };
803
+
804
+ /**
805
+ * Describes the options for configuring the useDataSource hook.
806
+ *
807
+ * @template T - The type of data items in the data source. Defaults to any.
808
+ */
809
+ export declare type DataSourceProps<T extends object = any> = {
810
+ /**
811
+ * The total number of records in the data source.
812
+ */
813
+ total?: number;
814
+ /**
815
+ * The initial total number of records in the data source.
816
+ */
817
+ defaultTotal?: number;
818
+ /**
819
+ * The current data array to be managed by the hook.
820
+ * This represents the data items that are currently available in the data source.
821
+ * If not provided, the `defaultData` will be used as the initial value.
822
+ */
823
+ data?: T[];
824
+ /**
825
+ * The initial data array to be managed by the hook.
826
+ */
827
+ defaultData?: T[];
828
+ /**
829
+ * The current sorting configuration.
830
+ */
831
+ sort?: SortDescriptor[];
832
+ /**
833
+ * The initial sorting configuration.
834
+ */
835
+ defaultSort?: SortDescriptor[];
836
+ /**
837
+ * The current filter configuration.
838
+ */
839
+ filter?: CompositeFilterDescriptor;
840
+ /**
841
+ * The initial filter configuration.
842
+ */
843
+ defaultFilter?: CompositeFilterDescriptor;
844
+ /**
845
+ * The current number of records to skip (for paging).
846
+ */
847
+ skip?: number;
848
+ /**
849
+ * The initial number of records to skip (for paging).
850
+ */
851
+ defaultSkip?: number;
852
+ /**
853
+ * The current number of records to take per page.
854
+ */
855
+ take?: number;
856
+ /**
857
+ * The initial number of records to take per page.
858
+ */
859
+ defaultTake?: number;
860
+ /**
861
+ * The current grouping configuration.
862
+ */
863
+ group?: GroupDescriptor[];
864
+ /**
865
+ * The initial grouping configuration.
866
+ */
867
+ defaultGroup?: GroupDescriptor[];
868
+ /**
869
+ * Specifies whether filtering is enabled.
870
+ *
871
+ * @default true
872
+ */
873
+ filterable?: boolean;
874
+ /**
875
+ * Specifies whether sorting is enabled.
876
+ *
877
+ * @default true
878
+ */
879
+ sortable?: boolean;
880
+ /**
881
+ * Specifies whether paging is enabled.
882
+ *
883
+ * @default true
884
+ */
885
+ pageable?: boolean;
886
+ /**
887
+ * Specifies whether grouping is enabled.
888
+ *
889
+ * @default true
890
+ */
891
+ groupable?: boolean;
892
+ /**
893
+ * Configuration for the data schema, including model definition.
894
+ */
895
+ schema: {
896
+ model: {
897
+ /**
898
+ * The field that serves as the unique identifier for records.
899
+ */
900
+ id: string;
901
+ };
902
+ };
903
+ };
904
+
729
905
  /**
730
906
  * The DateFilter component used for editing date value of FilterDescriptor object.
731
907
  */
@@ -2072,9 +2248,7 @@ export declare interface PopulateClipboardArgs {
2072
2248
  /**
2073
2249
  * Represents the current selected state of the data.
2074
2250
  */
2075
- selectedState: {
2076
- [key: string | number]: boolean | number[];
2077
- };
2251
+ selectedState: SelectDescriptor;
2078
2252
  /**
2079
2253
  * Passes the data currently displayed.
2080
2254
  */
@@ -2109,6 +2283,401 @@ export declare function readColumns<C = CellProps, H = HeaderCellProps, F = Filt
2109
2283
  /** @hidden */
2110
2284
  export declare const relativeContextElement: (element: any) => any;
2111
2285
 
2286
+ /**
2287
+ * Represents a remote data source with CRUD operations (Create, Read, Update, Delete).
2288
+ *
2289
+ * @template T - The type of data items in the data source. Defaults to any.
2290
+ */
2291
+ export declare type RemoteDataSource<T extends object = any> = DataSource<T> & {
2292
+ /** Set of original data items read from the remote source, indexed by ID */
2293
+ reads: Map<string | number | symbol | null, T>;
2294
+ /** Map of created items that need to be synced */
2295
+ creates: Map<string | number | symbol | null, T>;
2296
+ /** Map of updated items that need to be synced */
2297
+ updates: Map<string | number | symbol | null, T>;
2298
+ /** Map of items marked for deletion that need to be synced */
2299
+ deletes: Map<string | number | symbol | null, T>;
2300
+ /** Map of dirty fields for each item */
2301
+ dirty: Map<string | number | symbol | null, Set<string>>;
2302
+ /** Map of errors for each item */
2303
+ errors: Map<string | number | symbol | null, any[]>;
2304
+ /** Adds an error to an item */
2305
+ addError: (params: {
2306
+ error: any;
2307
+ data?: T;
2308
+ }) => void;
2309
+ /** Removes an error from an item */
2310
+ removeError: (params: {
2311
+ error: any;
2312
+ }) => void;
2313
+ /** Removes all errors for an item */
2314
+ removeErrors: (params: {
2315
+ data: T;
2316
+ }) => void;
2317
+ /** Removes all errors */
2318
+ removeAllErrors: () => void;
2319
+ /** Reads data from the remote source */
2320
+ read: (state?: State) => Promise<T[]>;
2321
+ /** Creates a new item */
2322
+ create: (params: {
2323
+ data: T;
2324
+ }) => void;
2325
+ /** Updates an existing item */
2326
+ update: (params: {
2327
+ data: T;
2328
+ field?: string;
2329
+ }) => void;
2330
+ /** Deletes an item */
2331
+ delete: (params: {
2332
+ data: T;
2333
+ }) => void;
2334
+ /** Syncs all pending changes with the remote source */
2335
+ sync: () => Promise<void>;
2336
+ /** Syncs a single item with the remote source */
2337
+ syncItem: (params: {
2338
+ data: T;
2339
+ }) => Promise<void>;
2340
+ /** Removes an item from creates */
2341
+ removeCreate: (params: {
2342
+ data: T;
2343
+ }) => void;
2344
+ /** Removes an item from updates */
2345
+ removeUpdate: (params: {
2346
+ data: T;
2347
+ }) => void;
2348
+ /** Removes an item from deletes */
2349
+ removeDelete: (params: {
2350
+ data: T;
2351
+ }) => void;
2352
+ /** Adds an item to reads */
2353
+ pushCreate: (params: {
2354
+ data: T;
2355
+ }) => void;
2356
+ /** Updates an item in reads */
2357
+ pushUpdate: (params: {
2358
+ data: T;
2359
+ }) => void;
2360
+ /** Removes an item from reads */
2361
+ pushDelete: (params: {
2362
+ data: T;
2363
+ }) => void;
2364
+ /** Discards all pending changes */
2365
+ discard: () => void;
2366
+ };
2367
+
2368
+ /**
2369
+ * Configuration properties for the remote data source.
2370
+ * Extends the basic DataSourceProps with remote data operations capabilities.
2371
+ *
2372
+ * @template T - The type of data items in the data source. Defaults to any object.
2373
+ */
2374
+ export declare interface RemoteDataSourceProps<T extends object = any> extends DataSourceProps<T> {
2375
+ /**
2376
+ * Map of original data items read from the remote source, indexed by ID.
2377
+ */
2378
+ reads?: Map<string | number | symbol | null, T>;
2379
+ /**
2380
+ * Map of created items that need to be synced with the remote source.
2381
+ */
2382
+ creates?: Map<string | number | symbol | null, T>;
2383
+ /**
2384
+ * Map of updated items that need to be synced with the remote source.
2385
+ */
2386
+ updates?: Map<string | number | symbol | null, T>;
2387
+ /**
2388
+ * Map of items marked for deletion that need to be synced with the remote source.
2389
+ */
2390
+ deletes?: Map<string | number | symbol | null, T>;
2391
+ /**
2392
+ * Determines if filtering operations should be performed on the server.
2393
+ * When true, filter parameters are sent to the server during read operations.
2394
+ *
2395
+ * @default true
2396
+ */
2397
+ serverFiltering?: boolean;
2398
+ /**
2399
+ * Determines if sorting operations should be performed on the server.
2400
+ * When true, sort parameters are sent to the server during read operations.
2401
+ *
2402
+ * @default true
2403
+ */
2404
+ serverSorting?: boolean;
2405
+ /**
2406
+ * Determines if paging operations should be performed on the server.
2407
+ * When true, skip and take parameters are sent to the server during read operations.
2408
+ *
2409
+ * @default true
2410
+ */
2411
+ serverPaging?: boolean;
2412
+ /**
2413
+ * Determines if grouping operations should be performed on the server.
2414
+ * When true, group parameters are sent to the server during read operations.
2415
+ *
2416
+ * @default true
2417
+ */
2418
+ serverGrouping?: boolean;
2419
+ /**
2420
+ * Configuration for CRUD operations transport.
2421
+ * Defines how data is sent to and received from the server.
2422
+ */
2423
+ transport?: {
2424
+ /**
2425
+ * Configuration for create operations.
2426
+ * Can be either an object specifying the endpoint configuration or a function for custom implementation.
2427
+ */
2428
+ create?: {
2429
+ /**
2430
+ * URL for the create operation. Can be a string or a function that returns a string based on the data item.
2431
+ */
2432
+ url: string | ((dataItem: T) => string);
2433
+ /**
2434
+ * HTTP method to use for the create operation.
2435
+ *
2436
+ * @default "POST"
2437
+ */
2438
+ method?: string;
2439
+ /**
2440
+ * Content-Type header to use for the request.
2441
+ *
2442
+ * @default "application/json"
2443
+ */
2444
+ contentType?: string;
2445
+ /**
2446
+ * Additional data to include in the request.
2447
+ */
2448
+ data?: {
2449
+ [key: string]: any;
2450
+ };
2451
+ /**
2452
+ * Function that transforms the request data before sending it to the server.
2453
+ *
2454
+ * @param data - The data item to transform
2455
+ * @returns Transformed data
2456
+ */
2457
+ parameterMap?: (data: T) => any;
2458
+ /**
2459
+ * Callback executed when the create operation is successful.
2460
+ *
2461
+ * @param data - The created data item
2462
+ */
2463
+ onSuccess?: (data: T) => void;
2464
+ /**
2465
+ * Function to process the server response.
2466
+ *
2467
+ * @param response - The server response
2468
+ * @returns Processed data item or null
2469
+ */
2470
+ onResponse?: (response: any) => T | null;
2471
+ /**
2472
+ * Callback executed when the create operation fails.
2473
+ *
2474
+ * @param error - The error from the server
2475
+ */
2476
+ onError?: (error: any) => void;
2477
+ } | ((options: {
2478
+ data: T;
2479
+ }) => Promise<T>);
2480
+ /**
2481
+ * Configuration for read operations.
2482
+ * Can be either an object specifying the endpoint configuration or a function for custom implementation.
2483
+ */
2484
+ read?: {
2485
+ /**
2486
+ * URL for the read operation. Can be a string or a function that returns a string.
2487
+ */
2488
+ url: string | (() => string);
2489
+ /**
2490
+ * HTTP method to use for the read operation.
2491
+ *
2492
+ * @default "GET"
2493
+ */
2494
+ method?: string;
2495
+ /**
2496
+ * Content-Type header to use for the request.
2497
+ */
2498
+ contentType?: string;
2499
+ /**
2500
+ * Additional data to include in the request.
2501
+ */
2502
+ data?: {
2503
+ [key: string]: any;
2504
+ };
2505
+ /**
2506
+ * Function that transforms the request data before sending it to the server.
2507
+ *
2508
+ * @param data - The request parameters including filter, paging, sorting, and grouping info
2509
+ * @returns Transformed request parameters
2510
+ */
2511
+ parameterMap?: (data: {
2512
+ filter?: CompositeFilterDescriptor;
2513
+ skip?: number;
2514
+ take?: number;
2515
+ sort?: SortDescriptor[];
2516
+ group?: GroupDescriptor[];
2517
+ }) => any;
2518
+ /**
2519
+ * Callback executed when the read operation is successful.
2520
+ *
2521
+ * @param data - The retrieved data items
2522
+ */
2523
+ onSuccess?: (data: T[]) => void;
2524
+ /**
2525
+ * Function to process the server response.
2526
+ *
2527
+ * @param response - The server response
2528
+ * @returns Processed data item or null
2529
+ */
2530
+ onResponse?: (response: any) => T | null;
2531
+ /**
2532
+ * Callback executed when the read operation fails.
2533
+ *
2534
+ * @param error - The error from the server
2535
+ */
2536
+ onError?: (error: any) => void;
2537
+ } | ((options: {
2538
+ filter?: CompositeFilterDescriptor;
2539
+ skip?: number;
2540
+ take?: number;
2541
+ sort?: SortDescriptor[];
2542
+ group?: GroupDescriptor[];
2543
+ onSuccess?: (data: T[]) => void;
2544
+ onResponse?: (response: any) => T | null;
2545
+ onError?: (error: any) => void;
2546
+ }) => Promise<T[]>);
2547
+ /**
2548
+ * Configuration for update operations.
2549
+ * Can be either an object specifying the endpoint configuration or a function for custom implementation.
2550
+ */
2551
+ update?: {
2552
+ /**
2553
+ * URL for the update operation. Can be a string or a function that returns a string based on the data item.
2554
+ */
2555
+ url: string | ((dataItem: T) => string);
2556
+ /**
2557
+ * HTTP method to use for the update operation.
2558
+ *
2559
+ * @default "PUT"
2560
+ */
2561
+ method?: string;
2562
+ /**
2563
+ * Content-Type header to use for the request.
2564
+ *
2565
+ * @default "application/json"
2566
+ */
2567
+ contentType?: string;
2568
+ /**
2569
+ * Additional data to include in the request.
2570
+ */
2571
+ data?: {
2572
+ [key: string]: any;
2573
+ };
2574
+ /**
2575
+ * Function that transforms the request data before sending it to the server.
2576
+ *
2577
+ * @param data - The data item to transform
2578
+ * @returns Transformed data
2579
+ */
2580
+ parameterMap?: (data: T) => any;
2581
+ /**
2582
+ * Callback executed when the update operation is successful.
2583
+ *
2584
+ * @param data - The updated data item
2585
+ */
2586
+ onSuccess?: (data: T) => void;
2587
+ /**
2588
+ * Function to process the server response.
2589
+ *
2590
+ * @param response - The server response
2591
+ * @returns Processed data item or null
2592
+ */
2593
+ onResponse?: (response: any) => T | null;
2594
+ /**
2595
+ * Callback executed when the update operation fails.
2596
+ *
2597
+ * @param error - The error from the server
2598
+ */
2599
+ onError?: (error: any) => void;
2600
+ } | ((options: {
2601
+ data: T;
2602
+ }) => Promise<T>);
2603
+ /**
2604
+ * Configuration for delete operations.
2605
+ * Can be either an object specifying the endpoint configuration or a function for custom implementation.
2606
+ */
2607
+ delete?: {
2608
+ /**
2609
+ * URL for the delete operation. Can be a string or a function that returns a string based on the data item.
2610
+ */
2611
+ url: string | ((dataItem: T) => string);
2612
+ /**
2613
+ * HTTP method to use for the delete operation.
2614
+ *
2615
+ * @default "DELETE"
2616
+ */
2617
+ method?: string;
2618
+ /**
2619
+ * Content-Type header to use for the request.
2620
+ */
2621
+ contentType?: string;
2622
+ /**
2623
+ * Additional data to include in the request.
2624
+ */
2625
+ data?: {
2626
+ [key: string]: any;
2627
+ };
2628
+ /**
2629
+ * Function that transforms the request data before sending it to the server.
2630
+ *
2631
+ * @param data - The data item to transform
2632
+ * @returns Transformed data
2633
+ */
2634
+ parameterMap?: (data: T) => any;
2635
+ /**
2636
+ * Callback executed when the delete operation is successful.
2637
+ *
2638
+ * @param data - The deleted data item
2639
+ */
2640
+ onSuccess?: (data: T) => void;
2641
+ /**
2642
+ * Function to process the server response.
2643
+ *
2644
+ * @param response - The server response
2645
+ * @returns Processed data item or null
2646
+ */
2647
+ onResponse?: (response: any) => T | null;
2648
+ /**
2649
+ * Callback executed when the delete operation fails.
2650
+ *
2651
+ * @param error - The error from the server
2652
+ */
2653
+ onError?: (error: any) => void;
2654
+ } | ((options: {
2655
+ data: T;
2656
+ }) => Promise<T>);
2657
+ };
2658
+ /**
2659
+ * Schema configuration for parsing and mapping server responses.
2660
+ * Extends the base DataSourceProps schema with additional properties for remote data.
2661
+ */
2662
+ schema: DataSourceProps['schema'] & {
2663
+ /**
2664
+ * Specifies the field in the response that contains the data items,
2665
+ * or a function that extracts the data items from the response.
2666
+ */
2667
+ data?: string | ((data: any) => T[]);
2668
+ /**
2669
+ * Specifies the field in the response that contains the total count,
2670
+ * or a function that extracts the total count from the response.
2671
+ */
2672
+ total?: string | ((data: any) => number);
2673
+ /**
2674
+ * Specifies the field in the response that contains error information,
2675
+ * or a function that extracts error information from the response.
2676
+ */
2677
+ errors?: string | ((data: any) => any);
2678
+ };
2679
+ }
2680
+
2112
2681
  /**
2113
2682
  * Removes the items from the passed `data` which match the passed `condition`.
2114
2683
  *
@@ -2758,6 +3327,94 @@ export declare function updateRight(columnsMap: number[][], columns: Array<{
2758
3327
  ariaColumnIndex: number;
2759
3328
  }>, generateRight?: boolean): void;
2760
3329
 
3330
+ /**
3331
+ * A hook that provides functionality for managing local data with built-in support for filtering, sorting, paging, and grouping.
3332
+ *
3333
+ * @template T - The type of data items in the data source. Defaults to any.
3334
+ * @param {DataSourceProps<T>} props - The configuration options for the data source.
3335
+ * @returns {DataSource<T>} An object containing data management methods and properties.
3336
+ *
3337
+ * @example
3338
+ * ```tsx
3339
+ * interface Product {
3340
+ * ProductID: number;
3341
+ * ProductName: string;
3342
+ * UnitPrice: number;
3343
+ * }
3344
+ *
3345
+ * const dataSource = useDataSource<Product>({
3346
+ * defaultData: products,
3347
+ * defaultSort: [{ field: 'UnitPrice', dir: 'desc' }],
3348
+ * defaultSkip: 0,
3349
+ * take: 10,
3350
+ * schema: {
3351
+ * model: {
3352
+ * id: 'ProductID'
3353
+ * }
3354
+ * }
3355
+ * });
3356
+ *
3357
+ * return (
3358
+ * <Grid
3359
+ * data={dataSource.data}
3360
+ * total={dataSource.total}
3361
+ * {...dataSource.dataState}
3362
+ * onDataStateChange={(event) => {
3363
+ * dataSource.setDataState(event.dataState);
3364
+ * }}
3365
+ * >
3366
+ * <GridColumn field="ProductID" title="ID" />
3367
+ * <GridColumn field="ProductName" title="Product Name" />
3368
+ * </Grid>
3369
+ * );
3370
+ * ```
3371
+ */
3372
+ export declare const useDataSource: <T extends object = any>(props: DataSourceProps<T>) => DataSource<T>;
3373
+
3374
+ /**
3375
+ * A specialized version of useRemoteDataSource tailored for working with OData services.
3376
+ * It automatically handles the construction of OData queries and the processing of OData responses.
3377
+ *
3378
+ * @template T - The type of data items in the data source. Defaults to any.
3379
+ * @param {RemoteDataSourceProps<T>} props - The configuration options for the OData data source.
3380
+ * @returns {RemoteDataSource<T>} An object containing all the properties and methods from useRemoteDataSource with OData-specific defaults for transport and schema configurations.
3381
+ *
3382
+ * @example
3383
+ * ```tsx
3384
+ * interface Product {
3385
+ * ProductID: number;
3386
+ * ProductName: string;
3387
+ * UnitPrice: number;
3388
+ * }
3389
+ *
3390
+ * const dataSource = useODataDataSource<Product>({
3391
+ * take: 10,
3392
+ * skip: 0,
3393
+ * transport: {
3394
+ * read: {
3395
+ * url: 'https://demos.telerik.com/kendo-ui/service-v4/odata/Products'
3396
+ * }
3397
+ * },
3398
+ * schema: {
3399
+ * model: {
3400
+ * id: 'ProductID'
3401
+ * }
3402
+ * }
3403
+ * });
3404
+ * ```
3405
+ */
3406
+ export declare const useODataDataSource: <T extends object = any>(props: RemoteDataSourceProps<T>) => RemoteDataSource<T>;
3407
+
3408
+ /**
3409
+ * A hook that extends the functionality of useDataSource by adding support for remote data operations.
3410
+ * It enables you to connect to remote endpoints and perform CRUD operations while managing the data state locally.
3411
+ *
3412
+ * @template T - The type of data items in the data source
3413
+ * @param {RemoteDataSourceProps<T>} props - The configuration options for the remote data source.
3414
+ * @returns {RemoteDataSource<T>} An object containing all the properties and methods from useDataSource plus additional methods for interacting with remote data.
3415
+ */
3416
+ export declare const useRemoteDataSource: <T extends object = any>(props: RemoteDataSourceProps<T>) => RemoteDataSource<T>;
3417
+
2761
3418
  /**
2762
3419
  * @hidden
2763
3420
  */