@jmruthers/pace-core 0.5.99 → 0.5.101

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 (125) hide show
  1. package/dist/{DataTable-VSJWLCVT.js → DataTable-DXELRJIX.js} +2 -2
  2. package/dist/{PublicLoadingSpinner-B84QWsvB.d.ts → PublicLoadingSpinner-C2h8zg67.d.ts} +1 -1
  3. package/dist/{chunk-2PWJ6NFH.js → chunk-A5DFMP3O.js} +2 -2
  4. package/dist/{chunk-D7CZVI3K.js → chunk-EVVRUGQ2.js} +110 -52
  5. package/dist/{chunk-D7CZVI3K.js.map → chunk-EVVRUGQ2.js.map} +1 -1
  6. package/dist/components.d.ts +1 -1
  7. package/dist/components.js +2 -2
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.js +2 -2
  10. package/dist/utils.js +1 -1
  11. package/docs/api/classes/ColumnFactory.md +1 -1
  12. package/docs/api/classes/ErrorBoundary.md +1 -1
  13. package/docs/api/classes/InvalidScopeError.md +1 -1
  14. package/docs/api/classes/MissingUserContextError.md +1 -1
  15. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  16. package/docs/api/classes/PermissionDeniedError.md +1 -1
  17. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  18. package/docs/api/classes/RBACAuditManager.md +1 -1
  19. package/docs/api/classes/RBACCache.md +1 -1
  20. package/docs/api/classes/RBACEngine.md +1 -1
  21. package/docs/api/classes/RBACError.md +1 -1
  22. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  23. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  24. package/docs/api/classes/StorageUtils.md +1 -1
  25. package/docs/api/enums/FileCategory.md +1 -1
  26. package/docs/api/interfaces/AggregateConfig.md +1 -1
  27. package/docs/api/interfaces/ButtonProps.md +1 -1
  28. package/docs/api/interfaces/CardProps.md +1 -1
  29. package/docs/api/interfaces/ColorPalette.md +1 -1
  30. package/docs/api/interfaces/ColorShade.md +1 -1
  31. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  32. package/docs/api/interfaces/DataRecord.md +1 -1
  33. package/docs/api/interfaces/DataTableAction.md +1 -1
  34. package/docs/api/interfaces/DataTableColumn.md +1 -1
  35. package/docs/api/interfaces/DataTableProps.md +1 -1
  36. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  37. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  38. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  39. package/docs/api/interfaces/EventLogoProps.md +1 -1
  40. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  41. package/docs/api/interfaces/FileMetadata.md +1 -1
  42. package/docs/api/interfaces/FileReference.md +1 -1
  43. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  44. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  45. package/docs/api/interfaces/FileUploadProps.md +1 -1
  46. package/docs/api/interfaces/FooterProps.md +1 -1
  47. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  48. package/docs/api/interfaces/InputProps.md +1 -1
  49. package/docs/api/interfaces/LabelProps.md +1 -1
  50. package/docs/api/interfaces/LoginFormProps.md +1 -1
  51. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  52. package/docs/api/interfaces/NavigationContextType.md +1 -1
  53. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  54. package/docs/api/interfaces/NavigationItem.md +1 -1
  55. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  56. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  57. package/docs/api/interfaces/Organisation.md +1 -1
  58. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  59. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  60. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  61. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  62. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  63. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  64. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  65. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  66. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  67. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  68. package/docs/api/interfaces/PaletteData.md +1 -1
  69. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  70. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  71. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  72. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  73. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  74. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  75. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  76. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  77. package/docs/api/interfaces/RBACConfig.md +1 -1
  78. package/docs/api/interfaces/RBACLogger.md +1 -1
  79. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  80. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  81. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  82. package/docs/api/interfaces/RouteConfig.md +1 -1
  83. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  84. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  85. package/docs/api/interfaces/StorageConfig.md +1 -1
  86. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  87. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  88. package/docs/api/interfaces/StorageListOptions.md +1 -1
  89. package/docs/api/interfaces/StorageListResult.md +1 -1
  90. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  91. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  92. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  93. package/docs/api/interfaces/StyleImport.md +1 -1
  94. package/docs/api/interfaces/SwitchProps.md +1 -1
  95. package/docs/api/interfaces/ToastActionElement.md +1 -1
  96. package/docs/api/interfaces/ToastProps.md +1 -1
  97. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  98. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  99. package/docs/api/interfaces/UseEventLogoOptions.md +1 -1
  100. package/docs/api/interfaces/UseEventLogoReturn.md +1 -1
  101. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  102. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  103. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  104. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  105. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  106. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  107. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  108. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  109. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  110. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  111. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  112. package/docs/api/interfaces/UserEventAccess.md +1 -1
  113. package/docs/api/interfaces/UserMenuProps.md +1 -1
  114. package/docs/api/interfaces/UserProfile.md +1 -1
  115. package/docs/api/modules.md +6 -6
  116. package/docs/implementation-guides/data-tables.md +19 -0
  117. package/package.json +1 -1
  118. package/src/components/DataTable/components/DataTableCore.tsx +56 -4
  119. package/src/components/DataTable/components/DataTableModals.tsx +28 -6
  120. package/src/components/DataTable/components/EditableRow.tsx +69 -73
  121. package/src/components/Dialog/Dialog.test.tsx +4 -3
  122. package/src/components/Dialog/Dialog.tsx +24 -18
  123. package/src/components/Dialog/examples/ScrollableDialogExample.tsx +290 -0
  124. /package/dist/{DataTable-VSJWLCVT.js.map → DataTable-DXELRJIX.js.map} +0 -0
  125. /package/dist/{chunk-2PWJ6NFH.js.map → chunk-A5DFMP3O.js.map} +0 -0
@@ -493,7 +493,7 @@ describe('Dialog Component System', () => {
493
493
  const title = screen.getByRole('heading', { level: 2 }); // Radix UI uses h2
494
494
  expect(title).toBeInTheDocument();
495
495
  expect(title).toHaveTextContent('Test Dialog Title');
496
- expect(title).toHaveClass('text-lg', 'font-semibold');
496
+ // Typography classes removed - semantic h2 element styling comes from CSS, not inline classes
497
497
  });
498
498
  });
499
499
 
@@ -571,7 +571,7 @@ describe('Dialog Component System', () => {
571
571
  await waitFor(() => {
572
572
  const description = screen.getByText('This is a test description');
573
573
  expect(description).toBeInTheDocument();
574
- expect(description).toHaveClass('text-sm', 'text-muted-foreground');
574
+ // Typography classes removed - semantic h5 element styling comes from CSS, not inline classes
575
575
  });
576
576
  });
577
577
 
@@ -632,7 +632,8 @@ describe('Dialog Component System', () => {
632
632
  await waitFor(() => {
633
633
  const body = screen.getByRole('main');
634
634
  expect(body).toBeInTheDocument();
635
- expect(body).toHaveClass('flex-1', 'overflow-y-auto');
635
+ // DialogBody has overflow-y-auto for scrolling, but flex-1 is only needed when enableScrolling={true}
636
+ expect(body).toHaveClass('overflow-y-auto');
636
637
  expect(screen.getByText('Content Section')).toBeInTheDocument();
637
638
  expect(screen.getByText('This is the main content of the dialog.')).toBeInTheDocument();
638
639
  });
@@ -638,10 +638,13 @@ const DialogBody = ({
638
638
  return result.html;
639
639
  }, [htmlContent, allowHtml, strictSanitization, logWarnings]);
640
640
 
641
+ // Determine if htmlContent was provided (even if processing failed)
642
+ const hasHtmlContent = Boolean(htmlContent && allowHtml);
643
+
641
644
  return (
642
645
  <main
643
646
  className={cn(
644
- 'flex-1 overflow-y-auto px-6 py-2',
647
+ 'overflow-y-auto px-6 py-2',
645
648
  className
646
649
  )}
647
650
  style={mergedStyle}
@@ -655,12 +658,14 @@ const DialogBody = ({
655
658
  className="prose prose-sm max-w-none"
656
659
  />
657
660
  ) : (
658
- <div>
659
- <div className="text-red-500 mb-2">
660
- No HTML content processed. Showing children instead.
661
- </div>
661
+ <>
662
+ {hasHtmlContent && !processedHtmlContent && (
663
+ <div className="text-red-500 mb-2">
664
+ No HTML content processed. Showing children instead.
665
+ </div>
666
+ )}
662
667
  {children}
663
- </div>
668
+ </>
664
669
  )}
665
670
  </main>
666
671
  );
@@ -719,7 +724,6 @@ const DialogTitle = React.forwardRef<
719
724
  <DialogPrimitive.Title
720
725
  ref={ref}
721
726
  className={cn(
722
- 'text-lg font-semibold leading-none tracking-tight',
723
727
  className
724
728
  )}
725
729
  {...props}
@@ -735,7 +739,7 @@ const DialogTitle = React.forwardRef<
735
739
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
736
740
 
737
741
  const DialogDescription = React.forwardRef<
738
- React.ElementRef<typeof DialogPrimitive.Description>,
742
+ HTMLHeadingElement,
739
743
  DialogDescriptionProps
740
744
  >(({ className, htmlContent, allowHtml = true, children, ...props }, ref) => {
741
745
  const processedHtmlContent = React.useMemo(() => {
@@ -752,16 +756,18 @@ const DialogDescription = React.forwardRef<
752
756
  }, [htmlContent, allowHtml]);
753
757
 
754
758
  return (
755
- <DialogPrimitive.Description
756
- ref={ref}
757
- className={cn('text-sm text-muted-foreground', className)}
758
- {...props}
759
- >
760
- {processedHtmlContent ? (
761
- <span dangerouslySetInnerHTML={{ __html: processedHtmlContent }} />
762
- ) : (
763
- children
764
- )}
759
+ <DialogPrimitive.Description asChild>
760
+ <h5
761
+ ref={ref}
762
+ className={cn(className)}
763
+ {...props}
764
+ >
765
+ {processedHtmlContent ? (
766
+ <span dangerouslySetInnerHTML={{ __html: processedHtmlContent }} />
767
+ ) : (
768
+ children
769
+ )}
770
+ </h5>
765
771
  </DialogPrimitive.Description>
766
772
  );
767
773
  });
@@ -0,0 +1,290 @@
1
+ /**
2
+ * @file Scrollable Dialog Example with Height and Width Constraints
3
+ * @package @jmruthers/pace-core
4
+ * @module Components/Dialog/Examples
5
+ * @since 0.1.0
6
+ *
7
+ * Complete example demonstrating Dialog component with:
8
+ * - Scrolling enabled
9
+ * - Height constraints (percentage and fixed)
10
+ * - Width constraints (percentage and fixed)
11
+ * - Sticky headers and footers
12
+ */
13
+
14
+ import React from 'react';
15
+ import {
16
+ Dialog,
17
+ DialogTrigger,
18
+ DialogContent,
19
+ DialogHeader,
20
+ DialogBody,
21
+ DialogFooter,
22
+ DialogTitle,
23
+ DialogDescription,
24
+ Button,
25
+ Card,
26
+ } from '../../../index';
27
+
28
+ /**
29
+ * Example demonstrating Dialog with scrolling, height, and width constraints
30
+ */
31
+ export function ScrollableDialogExample() {
32
+ // Generate long content for scrolling demonstration
33
+ const generateLongContent = (count: number) => {
34
+ return Array.from({ length: count }, (_, i) => (
35
+ <Card key={i} className="p-4">
36
+ <h4>Content Section {i + 1}</h4>
37
+ <p>
38
+ This is content section {i + 1}. In a real application, this could be form fields,
39
+ data displays, tables, or any other content that might make the dialog tall.
40
+ The dialog will automatically show a scrollbar when content exceeds the height constraints.
41
+ </p>
42
+ <p>
43
+ You can scroll through all the content while the header and footer remain visible
44
+ at the top and bottom of the dialog.
45
+ </p>
46
+ </Card>
47
+ ));
48
+ };
49
+
50
+ return (
51
+ <div className="p-6 space-y-6">
52
+ <div>
53
+ <h2>Scrollable Dialog with Constraints</h2>
54
+ <p>Examples demonstrating dialogs with scrolling, height, and width constraints.</p>
55
+ </div>
56
+
57
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
58
+ {/* Example 1: Percentage-based constraints */}
59
+ <Dialog>
60
+ <DialogTrigger asChild>
61
+ <Button variant="outline" className="w-full">
62
+ Percentage Constraints
63
+ </Button>
64
+ </DialogTrigger>
65
+ <DialogContent
66
+ enableScrolling={true}
67
+ maxHeightPercent={80}
68
+ maxWidthPercent={90}
69
+ >
70
+ <DialogHeader sticky={true}>
71
+ <DialogTitle>Percentage-Based Constraints</DialogTitle>
72
+ <DialogDescription>
73
+ This dialog uses 90% of viewport width and 80% of viewport height.
74
+ Content will scroll when it exceeds these constraints.
75
+ </DialogDescription>
76
+ </DialogHeader>
77
+ <DialogBody>
78
+ <div className="space-y-4">
79
+ {generateLongContent(25)}
80
+ </div>
81
+ </DialogBody>
82
+ <DialogFooter sticky={true}>
83
+ <Button variant="outline">Cancel</Button>
84
+ <Button>Save Changes</Button>
85
+ </DialogFooter>
86
+ </DialogContent>
87
+ </Dialog>
88
+
89
+ {/* Example 2: Fixed pixel constraints */}
90
+ <Dialog>
91
+ <DialogTrigger asChild>
92
+ <Button variant="outline" className="w-full">
93
+ Fixed Pixel Constraints
94
+ </Button>
95
+ </DialogTrigger>
96
+ <DialogContent
97
+ enableScrolling={true}
98
+ maxHeight="600px"
99
+ maxWidth="800px"
100
+ >
101
+ <DialogHeader sticky={true}>
102
+ <DialogTitle>Fixed Pixel Constraints</DialogTitle>
103
+ <DialogDescription>
104
+ This dialog has a fixed maximum height of 600px and width of 800px.
105
+ Perfect for consistent sizing regardless of viewport size.
106
+ </DialogDescription>
107
+ </DialogHeader>
108
+ <DialogBody>
109
+ <div className="space-y-4">
110
+ {generateLongContent(20)}
111
+ </div>
112
+ </DialogBody>
113
+ <DialogFooter sticky={true}>
114
+ <Button variant="outline">Cancel</Button>
115
+ <Button>Confirm</Button>
116
+ </DialogFooter>
117
+ </DialogContent>
118
+ </Dialog>
119
+
120
+ {/* Example 3: Mixed constraints (percentage height, fixed width) */}
121
+ <Dialog>
122
+ <DialogTrigger asChild>
123
+ <Button variant="outline" className="w-full">
124
+ Mixed Constraints
125
+ </Button>
126
+ </DialogTrigger>
127
+ <DialogContent
128
+ enableScrolling={true}
129
+ maxHeightPercent={75}
130
+ maxWidth="700px"
131
+ >
132
+ <DialogHeader sticky={true}>
133
+ <DialogTitle>Mixed Constraints</DialogTitle>
134
+ <DialogDescription>
135
+ This dialog uses 75% of viewport height but has a fixed width of 700px.
136
+ You can mix percentage and fixed constraints as needed.
137
+ </DialogDescription>
138
+ </DialogHeader>
139
+ <DialogBody>
140
+ <div className="space-y-4">
141
+ {generateLongContent(30)}
142
+ </div>
143
+ </DialogBody>
144
+ <DialogFooter sticky={true}>
145
+ <Button variant="outline">Close</Button>
146
+ <Button>Apply</Button>
147
+ </DialogFooter>
148
+ </DialogContent>
149
+ </Dialog>
150
+
151
+ {/* Example 4: Minimum and maximum constraints */}
152
+ <Dialog>
153
+ <DialogTrigger asChild>
154
+ <Button variant="outline" className="w-full">
155
+ Min/Max Constraints
156
+ </Button>
157
+ </DialogTrigger>
158
+ <DialogContent
159
+ enableScrolling={true}
160
+ maxHeightPercent={85}
161
+ maxWidthPercent={80}
162
+ minHeight="400px"
163
+ minWidth="500px"
164
+ >
165
+ <DialogHeader sticky={true}>
166
+ <DialogTitle>Min/Max Constraints</DialogTitle>
167
+ <DialogDescription>
168
+ This dialog has both minimum (400px height, 500px width) and maximum
169
+ (85% height, 80% width) constraints. It will never be smaller than
170
+ the minimums or larger than the maximums.
171
+ </DialogDescription>
172
+ </DialogHeader>
173
+ <DialogBody>
174
+ <div className="space-y-4">
175
+ {generateLongContent(15)}
176
+ </div>
177
+ </DialogBody>
178
+ <DialogFooter sticky={true}>
179
+ <Button variant="outline">Cancel</Button>
180
+ <Button>Save</Button>
181
+ </DialogFooter>
182
+ </DialogContent>
183
+ </Dialog>
184
+
185
+ {/* Example 5: Narrow dialog with tall content */}
186
+ <Dialog>
187
+ <DialogTrigger asChild>
188
+ <Button variant="outline" className="w-full">
189
+ Narrow & Tall
190
+ </Button>
191
+ </DialogTrigger>
192
+ <DialogContent
193
+ enableScrolling={true}
194
+ maxHeightPercent={90}
195
+ maxWidth="500px"
196
+ >
197
+ <DialogHeader sticky={true}>
198
+ <DialogTitle>Narrow Dialog with Tall Content</DialogTitle>
199
+ <DialogDescription>
200
+ A narrow dialog (500px) that uses 90% of viewport height.
201
+ Great for side panels or detail views.
202
+ </DialogDescription>
203
+ </DialogHeader>
204
+ <DialogBody>
205
+ <div className="space-y-4">
206
+ {generateLongContent(40)}
207
+ </div>
208
+ </DialogBody>
209
+ <DialogFooter sticky={true}>
210
+ <Button variant="outline">Close</Button>
211
+ <Button>Done</Button>
212
+ </DialogFooter>
213
+ </DialogContent>
214
+ </Dialog>
215
+
216
+ {/* Example 6: Wide dialog with moderate height */}
217
+ <Dialog>
218
+ <DialogTrigger asChild>
219
+ <Button variant="outline" className="w-full">
220
+ Wide & Moderate Height
221
+ </Button>
222
+ </DialogTrigger>
223
+ <DialogContent
224
+ enableScrolling={true}
225
+ maxHeight="500px"
226
+ maxWidthPercent={95}
227
+ >
228
+ <DialogHeader sticky={true}>
229
+ <DialogTitle>Wide Dialog with Moderate Height</DialogTitle>
230
+ <DialogDescription>
231
+ A wide dialog (95% width) with a fixed height of 500px.
232
+ Perfect for data tables or wide forms.
233
+ </DialogDescription>
234
+ </DialogHeader>
235
+ <DialogBody>
236
+ <div className="space-y-4">
237
+ {generateLongContent(18)}
238
+ </div>
239
+ </DialogBody>
240
+ <DialogFooter sticky={true}>
241
+ <Button variant="outline">Cancel</Button>
242
+ <Button>Submit</Button>
243
+ </DialogFooter>
244
+ </DialogContent>
245
+ </Dialog>
246
+ </div>
247
+
248
+ <Card className="p-6">
249
+ <h3>Key Features Demonstrated:</h3>
250
+ <ul className="list-disc list-inside space-y-2">
251
+ <li>
252
+ <strong>enableScrolling={true}:</strong> Enables the flex layout and scrolling
253
+ functionality. Required for proper scroll behavior.
254
+ </li>
255
+ <li>
256
+ <strong>maxHeightPercent:</strong> Maximum height as a percentage of viewport
257
+ height (0-100). Automatically capped at 95% to ensure margins.
258
+ </li>
259
+ <li>
260
+ <strong>maxWidthPercent:</strong> Maximum width as a percentage of viewport
261
+ width (0-100). Automatically capped at 95% to ensure margins.
262
+ </li>
263
+ <li>
264
+ <strong>maxHeight:</strong> Fixed maximum height in CSS units (e.g., "600px",
265
+ "50vh", "20rem"). Overrides maxHeightPercent if both are provided.
266
+ </li>
267
+ <li>
268
+ <strong>maxWidth:</strong> Fixed maximum width in CSS units. Overrides
269
+ maxWidthPercent and size prop if provided.
270
+ </li>
271
+ <li>
272
+ <strong>minHeight:</strong> Minimum height in CSS units. Ensures dialog
273
+ never gets smaller than this value.
274
+ </li>
275
+ <li>
276
+ <strong>minWidth:</strong> Minimum width in CSS units. Ensures dialog
277
+ never gets smaller than this value.
278
+ </li>
279
+ <li>
280
+ <strong>sticky={true}:</strong> On DialogHeader and DialogFooter, keeps
281
+ these elements visible while scrolling through content.
282
+ </li>
283
+ </ul>
284
+ </Card>
285
+ </div>
286
+ );
287
+ }
288
+
289
+ export default ScrollableDialogExample;
290
+