0
# Data Display Components
1
2
Advanced components for displaying, sorting, and managing large datasets with selection, bulk operations, and comprehensive data presentation features. These components are optimized for enterprise-level data management and provide consistent patterns for resource handling.
3
4
## Capabilities
5
6
### DataTable
7
8
Sortable data table component for displaying structured data with column headers, row data, and sorting functionality.
9
10
```typescript { .api }
11
/**
12
* Sortable data table for structured data display
13
* @param columnContentTypes - Content types for each column
14
* @param headings - Column header content
15
* @param rows - Table row data
16
* @param sortable - Sortable columns configuration
17
* @returns JSX element with data table
18
*/
19
function DataTable(props: DataTableProps): JSX.Element;
20
21
interface DataTableProps {
22
/** Content types for column alignment and formatting */
23
columnContentTypes: ColumnContentType[];
24
/** Column header content */
25
headings: React.ReactNode[];
26
/** Table row data */
27
rows: TableRow[];
28
/** Sortable columns (boolean for each column) */
29
sortable?: boolean[];
30
/** Default sort direction */
31
defaultSortDirection?: SortDirection;
32
/** Initial sort column index */
33
initialSortColumnIndex?: number;
34
/** Sort change handler */
35
onSort?: (headingIndex: number, direction: SortDirection) => void;
36
/** Footer content */
37
footerContent?: TableData;
38
/** Truncate cell content */
39
truncate?: boolean;
40
/** Vertical alignment of cell content */
41
verticalAlign?: 'top' | 'bottom' | 'middle' | 'baseline';
42
/** Show totals row */
43
totals?: TableData[];
44
/** Show totals in footer */
45
totalsInFooter?: boolean;
46
/** Loading state */
47
loading?: boolean;
48
/** Empty state content */
49
emptyState?: React.ReactNode;
50
/** Increase density */
51
increasedTableDensity?: boolean;
52
/** Has zebra striping */
53
hasZebraStriping?: boolean;
54
}
55
56
/** Column content type for alignment and formatting */
57
type ColumnContentType = 'text' | 'numeric' | 'date';
58
59
/** Table row data array */
60
type TableRow = TableData[];
61
62
/** Individual table cell data */
63
type TableData = string | number | React.ReactNode;
64
65
/** Sort direction enum */
66
enum SortDirection {
67
ascending = 'ascending',
68
descending = 'descending',
69
}
70
```
71
72
**Usage Example:**
73
74
```typescript
75
import React, { useState } from 'react';
76
import { DataTable, Card, SortDirection } from '@shopify/polaris';
77
78
function SalesTable() {
79
const [sortedRows, setSortedRows] = useState([
80
['Emerald Silk Gown', '$875.00', 124689, 140, '$122,500.00'],
81
['Mauve Cashmere Scarf', '$230.00', 124533, 83, '$19,090.00'],
82
['Navy Merino Wool Blazer', '$445.00', 124518, 32, '$14,240.00'],
83
]);
84
85
const columnContentTypes: ColumnContentType[] = [
86
'text',
87
'numeric',
88
'numeric',
89
'numeric',
90
'numeric',
91
];
92
93
const headings = [
94
'Product',
95
'Price',
96
'SKU Number',
97
'Net quantity',
98
'Net sales',
99
];
100
101
const handleSort = (index: number, direction: SortDirection) => {
102
const newRows = [...sortedRows].sort((rowA, rowB) => {
103
const a = rowA[index];
104
const b = rowB[index];
105
106
if (typeof a === 'string' && typeof b === 'string') {
107
return direction === SortDirection.descending
108
? b.localeCompare(a)
109
: a.localeCompare(b);
110
}
111
112
return direction === SortDirection.descending
113
? (b as number) - (a as number)
114
: (a as number) - (b as number);
115
});
116
117
setSortedRows(newRows);
118
};
119
120
return (
121
<Card>
122
<DataTable
123
columnContentTypes={columnContentTypes}
124
headings={headings}
125
rows={sortedRows}
126
sortable={[true, true, false, true, true]}
127
defaultSortDirection={SortDirection.descending}
128
initialSortColumnIndex={4}
129
onSort={handleSort}
130
/>
131
</Card>
132
);
133
}
134
```
135
136
### IndexTable
137
138
Enhanced data table component specifically designed for resource lists with selection, bulk actions, and advanced data management features.
139
140
```typescript { .api }
141
/**
142
* Enhanced data table for resource management
143
* @param resourceName - Resource naming configuration
144
* @param selectedItemsCount - Count of selected items
145
* @param onSelectionChange - Selection change handler
146
* @param bulkActions - Available bulk actions
147
* @returns JSX element with index table
148
*/
149
function IndexTable(props: IndexTableProps): JSX.Element;
150
151
interface IndexTableProps extends DataTableProps {
152
/** Resource naming for accessibility and bulk actions */
153
resourceName: ResourceName;
154
/** Number of selected items or 'All' */
155
selectedItemsCount: number | 'All';
156
/** Selection change handler */
157
onSelectionChange: (
158
selectionType: SelectionType,
159
isSelecting: boolean,
160
selection?: string | string[]
161
) => void;
162
/** Available bulk actions */
163
bulkActions?: BulkAction[];
164
/** Promoted bulk actions */
165
promotedBulkActions?: BulkAction[];
166
/** Loading state */
167
loading?: boolean;
168
/** Last column sticky */
169
lastColumnSticky?: boolean;
170
/** Selection type */
171
selectionType?: IndexTableSelectionType;
172
/** Condensed layout */
173
condensed?: boolean;
174
/** Flush left content */
175
flushLeft?: boolean;
176
}
177
178
/**
179
* Individual index table row
180
* @param children - Row cell content
181
* @param id - Row identifier for selection
182
* @param selected - Row selection state
183
* @param position - Row position in table
184
* @returns JSX element with table row
185
*/
186
function IndexTableRow(props: IndexTableRowProps): JSX.Element;
187
188
interface IndexTableRowProps {
189
/** Row cell content */
190
children: React.ReactNode;
191
/** Unique row identifier */
192
id: string;
193
/** Row selection state */
194
selected?: boolean;
195
/** Row position for accessibility */
196
position: number;
197
/** Disabled selection */
198
disabled?: boolean;
199
/** Row click handler */
200
onClick?: () => void;
201
/** Row tone/status */
202
tone?: 'default' | 'subdued' | 'success' | 'warning' | 'critical';
203
}
204
205
/**
206
* Index table cell component
207
* @param children - Cell content
208
* @param className - Additional CSS classes
209
* @returns JSX element with table cell
210
*/
211
function IndexTableCell(props: IndexTableCellProps): JSX.Element;
212
213
interface IndexTableCellProps {
214
/** Cell content */
215
children?: React.ReactNode;
216
/** Additional CSS class names */
217
className?: string;
218
/** Flush content left */
219
flush?: boolean;
220
}
221
222
interface ResourceName {
223
/** Singular resource name */
224
singular: string;
225
/** Plural resource name */
226
plural: string;
227
}
228
229
interface BulkAction extends Action {
230
/** Action type */
231
type?: 'default' | 'destructive';
232
/** Action icon */
233
icon?: IconSource;
234
}
235
236
enum IndexTableSelectionType {
237
All = 'all',
238
Page = 'page',
239
Multiple = 'multiple',
240
Single = 'single',
241
}
242
243
enum SelectionType {
244
All = 'all',
245
Page = 'page',
246
Range = 'range',
247
Single = 'single',
248
}
249
```
250
251
### ResourceList
252
253
List component for displaying resources with filtering, sorting, selection, and item-level actions.
254
255
```typescript { .api }
256
/**
257
* List of resources with selection and filtering
258
* @param resourceName - Resource naming configuration
259
* @param items - Resource items to display
260
* @param renderItem - Item rendering function
261
* @returns JSX element with resource list
262
*/
263
function ResourceList<T>(props: ResourceListProps<T>): JSX.Element;
264
265
interface ResourceListProps<T> {
266
/** Resource naming */
267
resourceName: ResourceName;
268
/** Resource items array */
269
items: T[];
270
/** Item rendering function */
271
renderItem: (item: T, id: string, index: number) => React.ReactNode;
272
/** Selected item IDs */
273
selectedItems?: string[];
274
/** Selection change handler */
275
onSelectionChange?: (selectedIds: string[]) => void;
276
/** Bulk actions for selected items */
277
bulkActions?: BulkAction[];
278
/** Promoted bulk actions */
279
promotedBulkActions?: BulkAction[];
280
/** Loading state */
281
loading?: boolean;
282
/** Show header */
283
showHeader?: boolean;
284
/** Total item count */
285
totalItemsCount?: number;
286
/** Sort options */
287
sortOptions?: SortOption[];
288
/** Current sort value */
289
sortValue?: string;
290
/** Sort change handler */
291
onSortChange?: (selected: string) => void;
292
/** Filter control */
293
filterControl?: React.ReactNode;
294
/** Alternate tool */
295
alternateTool?: React.ReactNode;
296
/** Empty state */
297
emptyState?: React.ReactNode;
298
/** Item ID resolver */
299
idForItem?: (item: T, index: number) => string;
300
/** Resolve item ID callback */
301
resolveItemId?: (item: T) => string;
302
}
303
304
interface SortOption {
305
/** Option label */
306
label: string;
307
/** Option value */
308
value: string;
309
/** Sort direction */
310
directionLabel: string;
311
}
312
```
313
314
### ResourceItem
315
316
Individual resource item component for display within ResourceList with actions and media.
317
318
```typescript { .api }
319
/**
320
* Individual resource item with actions and media
321
* @param id - Resource item ID
322
* @param children - Item content
323
* @param url - Item navigation URL
324
* @param media - Item media content
325
* @returns JSX element with resource item
326
*/
327
function ResourceItem(props: ResourceItemProps): JSX.Element;
328
329
interface ResourceItemProps {
330
/** Unique resource identifier */
331
id: string;
332
/** Item content */
333
children?: React.ReactNode;
334
/** Navigation URL */
335
url?: string;
336
/** Media content (avatar, thumbnail, etc.) */
337
media?: React.ReactNode;
338
/** Shortcut actions */
339
shortcutActions?: DisableableAction[];
340
/** Persistent actions */
341
persistActions?: boolean;
342
/** Item accessibility label */
343
accessibilityLabel?: string;
344
/** Item name */
345
name?: string;
346
/** onClick handler */
347
onClick?: (id?: string) => void;
348
/** Vertical alignment */
349
verticalAlignment?: 'leading' | 'trailing' | 'center' | 'fill' | 'baseline';
350
}
351
```
352
353
### List
354
355
Simple list component for displaying content items with consistent styling and spacing.
356
357
```typescript { .api }
358
/**
359
* Simple content list component
360
* @param children - List items
361
* @param type - List type styling
362
* @returns JSX element with list
363
*/
364
function List(props: ListProps): JSX.Element;
365
366
interface ListProps {
367
/** List items */
368
children?: React.ReactNode;
369
/** List type */
370
type?: 'bullet' | 'number';
371
/** Gap between items */
372
gap?: 'extraTight' | 'tight' | 'loose';
373
}
374
375
/**
376
* Individual list item
377
* @param children - Item content
378
* @returns JSX element with list item
379
*/
380
function ListItem(props: ListItemProps): JSX.Element;
381
382
interface ListItemProps {
383
/** Item content */
384
children?: React.ReactNode;
385
}
386
```
387
388
### DescriptionList
389
390
Key-value description lists for displaying structured information with consistent formatting.
391
392
```typescript { .api }
393
/**
394
* Key-value description list
395
* @param items - Description items
396
* @param spacing - Spacing between items
397
* @returns JSX element with description list
398
*/
399
function DescriptionList(props: DescriptionListProps): JSX.Element;
400
401
interface DescriptionListProps {
402
/** Description items */
403
items: DescriptionListItem[];
404
/** Spacing between items */
405
spacing?: 'tight' | 'loose';
406
}
407
408
interface DescriptionListItem {
409
/** Item term/key */
410
term: React.ReactNode;
411
/** Item description/value */
412
description: React.ReactNode;
413
}
414
```
415
416
## Resource Management Utilities
417
418
```typescript { .api }
419
/** Constant for selecting all items in IndexTable */
420
const INDEX_TABLE_SELECT_ALL_ITEMS = 'SELECT_ALL_ITEMS';
421
422
/**
423
* Hook for managing resource selection state
424
* @param resources - Array of resources
425
* @param options - Configuration options
426
* @returns Resource state management object
427
*/
428
function useIndexResourceState<T>(
429
resources: T[],
430
options?: IndexResourceStateOptions<T>
431
): IndexResourceState<T>;
432
433
interface IndexResourceStateOptions<T> {
434
/** Resource ID resolver */
435
resourceIDResolver?: (resource: T) => string;
436
/** Initial selected resources */
437
resourceFilter?: (resource: T) => boolean;
438
}
439
440
interface IndexResourceState<T> {
441
/** Currently selected resource IDs */
442
selectedResources: string[];
443
/** All resources selected */
444
allResourcesSelected: boolean;
445
/** Handle resource selection change */
446
handleSelectionChange: (
447
selectionType: SelectionType,
448
isSelecting: boolean,
449
selection?: string | string[]
450
) => void;
451
/** Clear all selection */
452
clearSelection: () => void;
453
/** Remove selected resources */
454
removeSelectedResources: (removeResources: string[]) => void;
455
}
456
```
457
458
## Shared Data Display Types
459
460
```typescript { .api }
461
interface DisableableAction extends Action {
462
/** Disabled state */
463
disabled?: boolean;
464
}
465
466
type IconSource = React.ComponentType<any> | 'placeholder' | string;
467
468
interface PaginationDescriptor {
469
/** Has previous page */
470
hasPrevious?: boolean;
471
/** Previous page handler */
472
onPrevious?: () => void;
473
/** Has next page */
474
hasNext?: boolean;
475
/** Next page handler */
476
onNext?: () => void;
477
/** Pagination label */
478
label: string;
479
}
480
```
481
482
### EmptySearchResult
483
484
Specialized empty state component for search results that provides clear messaging and helpful actions when no search results are found.
485
486
```typescript { .api }
487
/**
488
* Empty state component for search results
489
* @param title - Main message for empty search
490
* @param description - Additional context about the empty search
491
* @param withIllustration - Whether to show search illustration
492
* @returns JSX element with empty search result display
493
*/
494
function EmptySearchResult(props: EmptySearchResultProps): JSX.Element;
495
496
interface EmptySearchResultProps {
497
/** Give the empty state a title */
498
title: string;
499
/** Give the empty state a description */
500
description?: string;
501
/** Whether or not to show the border */
502
withIllustration?: boolean;
503
}
504
```
505
506
### EmptyState
507
508
General purpose empty state component for when content is unavailable, with customizable illustration, title, and action buttons.
509
510
```typescript { .api }
511
/**
512
* Empty state component for missing content
513
* @param heading - Main heading for empty state
514
* @param children - Content and actions for empty state
515
* @param image - Custom image or illustration
516
* @returns JSX element with empty state display
517
*/
518
function EmptyState(props: EmptyStateProps): JSX.Element;
519
520
interface EmptyStateProps {
521
/** The empty state heading */
522
heading?: string;
523
/** The path to the image to display */
524
image?: string;
525
/** Elements to display inside empty state */
526
children?: React.ReactNode;
527
/** Action for empty state */
528
action?: ComplexAction;
529
/** Secondary action for empty state */
530
secondaryAction?: ComplexAction;
531
/** Footer help text for empty state */
532
footerContent?: React.ReactNode;
533
/** Whether or not to limit the image to the size of its container. */
534
imageContained?: boolean;
535
/** Whether or not to show the border */
536
withIllustration?: boolean;
537
}
538
```
539
540
### ExceptionList
541
542
Component for displaying a list of exceptions, warnings, or errors with consistent formatting and appropriate visual hierarchy.
543
544
```typescript { .api }
545
/**
546
* List component for displaying exceptions and errors
547
* @param items - Array of exception items to display
548
* @returns JSX element with formatted exception list
549
*/
550
function ExceptionList(props: ExceptionListProps): JSX.Element;
551
552
interface ExceptionListProps {
553
/** Collection of exceptions to render */
554
items: {
555
/** Icon to display with the item */
556
icon?: IconSource;
557
/** Item title */
558
title?: string;
559
/** Item description */
560
description: string;
561
/** Truncate content */
562
truncate?: boolean;
563
}[];
564
}
565
```
566
567
### Card
568
569
Container component that groups related information and actions with consistent padding, borders, and visual hierarchy.
570
571
```typescript { .api }
572
/**
573
* Container component for grouping related content
574
* @param children - Content to display in the card
575
* @param title - Card title
576
* @param sectioned - Whether to add default padding to content
577
* @returns JSX element with card container
578
*/
579
function Card(props: CardProps): JSX.Element;
580
581
interface CardProps {
582
/** Title content for the card */
583
title?: React.ReactNode;
584
/** Card header actions */
585
actions?: ActionListItemDescriptor[];
586
/** Auto wrap content in padding */
587
sectioned?: boolean;
588
/** Card content */
589
children?: React.ReactNode;
590
/** A less prominent card */
591
subdued?: boolean;
592
/** Size of the card */
593
size?: 'medium' | 'small';
594
/** Background color of the card */
595
background?: string;
596
/** Padding around the card */
597
padding?: SpaceScale;
598
/** Border radius of the card */
599
borderRadius?: BorderRadiusScale;
600
}
601
```
602
603
### CalloutCard
604
605
Specialized card component for highlighting important information, announcements, or calls-to-action with visual emphasis.
606
607
```typescript { .api }
608
/**
609
* Card component for important announcements and calls to action
610
* @param title - Card title
611
* @param children - Card content
612
* @param primaryAction - Main action button
613
* @returns JSX element with callout card
614
*/
615
function CalloutCard(props: CalloutCardProps): JSX.Element;
616
617
interface CalloutCardProps {
618
/** The content to display inside the callout card. */
619
children: React.ReactNode;
620
/** The callout card's title. */
621
title: React.ReactNode;
622
/** URL to the card illustration. */
623
illustration?: string;
624
/** Primary action for the card */
625
primaryAction?: ComplexAction;
626
/** Secondary action for the card */
627
secondaryAction?: ComplexAction;
628
/** Callback when the dismiss button is clicked */
629
onDismiss?(): void;
630
}
631
```
632
633
### Connected
634
635
Layout component that visually connects related form fields and controls, typically used for input groups and compound controls.
636
637
```typescript { .api }
638
/**
639
* Layout component for visually connecting related form elements
640
* @param children - Form elements to connect
641
* @param left - Content to display on the left
642
* @param right - Content to display on the right
643
* @returns JSX element with connected form layout
644
*/
645
function Connected(props: ConnectedProps): JSX.Element;
646
647
interface ConnectedProps {
648
/** Components to connect together */
649
children: React.ReactNode;
650
/** Content to display to the left of the connected children */
651
left?: React.ReactNode;
652
/** Content to display to the right of the connected children */
653
right?: React.ReactNode;
654
}
655
```
656
657
### Collapsible
658
659
Expandable content container that shows/hides content with smooth animations, commonly used for progressive disclosure.
660
661
```typescript { .api }
662
/**
663
* Expandable content container with smooth animations
664
* @param open - Whether content is expanded
665
* @param children - Content to show/hide
666
* @param onToggle - Expand/collapse handler
667
* @returns JSX element with collapsible content
668
*/
669
function Collapsible(props: CollapsibleProps): JSX.Element;
670
671
interface CollapsibleProps {
672
/** Assign a unique ID to the collapsible's content */
673
id: string;
674
/** Toggle whether the collapsible is expanded or not */
675
open: boolean;
676
/** The content to display inside the collapsible */
677
children: React.ReactNode;
678
/** Callback when the collapsible is toggled */
679
onToggle?(): void;
680
/** Transition timing function for the collapsible */
681
transition?: {
682
duration?: string;
683
timingFunction?: string;
684
};
685
}
686
```
687
688
### LegacyCard
689
690
Legacy card component for backward compatibility with older card implementations and styling.
691
692
```typescript { .api }
693
/**
694
* Legacy card component for backward compatibility
695
* @param title - Card title
696
* @param sectioned - Whether to add section styling
697
* @param children - Card content
698
* @returns JSX element with legacy card styling
699
*/
700
function LegacyCard(props: LegacyCardProps): JSX.Element;
701
702
interface LegacyCardProps {
703
/** The title content for the card */
704
title?: React.ReactNode;
705
/** Card header actions */
706
actions?: ComplexAction[];
707
/** Auto wrap content in section */
708
sectioned?: boolean;
709
/** Card content */
710
children?: React.ReactNode;
711
/** A less prominent card */
712
subdued?: boolean;
713
/** Footer content for the card */
714
footerActionAlignment?: 'right' | 'left';
715
/** Primary footer action */
716
primaryFooterAction?: ComplexAction;
717
/** Secondary footer actions */
718
secondaryFooterActions?: ComplexAction[];
719
}
720
721
interface LegacyCardSectionProps {
722
/** Section title */
723
title?: React.ReactNode;
724
/** Section content */
725
children?: React.ReactNode;
726
/** Whether the section is subdued */
727
subdued?: boolean;
728
/** Whether the section is flush with card edges */
729
flush?: boolean;
730
/** Whether the section fills available height */
731
fullHeight?: boolean;
732
}
733
734
interface LegacyCardHeaderProps {
735
/** Header actions */
736
actions?: ComplexAction[];
737
/** Header title */
738
title?: React.ReactNode;
739
}
740
741
interface LegacyCardSubsectionProps {
742
/** Subsection content */
743
children?: React.ReactNode;
744
}
745
```
746
747
### LegacyFilters
748
749
Legacy filtering component for backward compatibility with older filter implementations.
750
751
```typescript { .api }
752
/**
753
* Legacy filters component for backward compatibility
754
* @param filters - Available filter options
755
* @param appliedFilters - Currently applied filters
756
* @param onFiltersChange - Filter change handler
757
* @returns JSX element with legacy filtering interface
758
*/
759
function LegacyFilters(props: LegacyFiltersProps): JSX.Element;
760
761
interface LegacyFiltersProps {
762
/** Available filters */
763
filters?: FilterInterface[];
764
/** Applied filters */
765
appliedFilters?: AppliedFilterInterface[];
766
/** Query value */
767
queryValue?: string;
768
/** Query placeholder */
769
queryPlaceholder?: string;
770
/** Whether query field is focused */
771
focused?: boolean;
772
/** Additional search field filters */
773
searchFieldFilters?: React.ReactNode;
774
/** Disable query field */
775
disabled?: boolean;
776
/** Hide query field */
777
hideQueryField?: boolean;
778
/** Callback when query changes */
779
onQueryChange?(queryValue: string): void;
780
/** Callback when query is cleared */
781
onQueryClear?(): void;
782
/** Callback when query is focused */
783
onQueryFocus?(): void;
784
/** Callback when query is blurred */
785
onQueryBlur?(): void;
786
/** Callback when filters change */
787
onFiltersChange?(appliedFilters: AppliedFilterInterface[]): void;
788
/** Callback when all filters are cleared */
789
onClearAll?(): void;
790
}
791
```
792
793
### AlphaPicker (Picker)
794
795
Alpha/experimental picker component for selecting from a list of options with advanced features.
796
797
```typescript { .api }
798
/**
799
* Alpha picker component for advanced option selection
800
* @param items - Available picker items
801
* @param selected - Currently selected items
802
* @param onSelect - Selection change handler
803
* @returns JSX element with picker interface
804
*/
805
function Picker(props: PickerProps): JSX.Element;
806
807
interface PickerProps {
808
/** Items to choose from */
809
items: PickerItem[];
810
/** Currently selected items */
811
selected: string[];
812
/** Allow multiple selection */
813
allowMultiple?: boolean;
814
/** Callback when selection changes */
815
onSelect(selected: string[]): void;
816
/** Whether picker is disabled */
817
disabled?: boolean;
818
/** Loading state */
819
loading?: boolean;
820
/** Error message */
821
error?: string;
822
/** Help text */
823
helpText?: string;
824
}
825
826
interface PickerItem {
827
/** Unique identifier */
828
value: string;
829
/** Display label */
830
label: string;
831
/** Whether item is disabled */
832
disabled?: boolean;
833
/** Item description */
834
description?: string;
835
}
836
```
837
838
### UnstableBulkActions (BulkActions)
839
840
Experimental bulk actions component for managing operations on multiple selected items.
841
842
```typescript { .api }
843
/**
844
* Experimental bulk actions for multiple item operations
845
* @param actions - Available bulk actions
846
* @param selected - Number of selected items
847
* @param onAction - Action handler
848
* @returns JSX element with bulk action interface
849
*/
850
function BulkActions(props: BulkActionsProps): JSX.Element;
851
852
interface BulkActionsProps {
853
/** Label for the bulk actions */
854
label?: string;
855
/** Actions available for bulk operations */
856
actions?: ActionListItemDescriptor[];
857
/** Promotional bulk actions */
858
promotedActions?: ActionListItemDescriptor[];
859
/** Callback when all items are selected */
860
onToggleAll?(): void;
861
/** Whether all items are selected */
862
selectMode?: boolean;
863
/** Whether to show the select mode toggle */
864
onSelectModeToggle?(): void;
865
/** Accessibility label for selected items */
866
accessibilityLabel?: string;
867
}
868
```