@etus/ui 0.1.1 → 0.1.2
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/dist/chunk-UP2VWCW5.js +38 -0
- package/dist/chunk-UP2VWCW5.js.map +1 -0
- package/dist/index.d.ts +1177 -228
- package/dist/index.js +9506 -4305
- package/dist/index.js.map +1 -1
- package/dist/jspdf.node.min-CTWP225M.js +39344 -0
- package/dist/jspdf.node.min-CTWP225M.js.map +1 -0
- package/dist/jspdf.plugin.autotable-AAE7PZKA.js +1908 -0
- package/dist/jspdf.plugin.autotable-AAE7PZKA.js.map +1 -0
- package/dist/lib/utils.js +1 -0
- package/dist/xlsx-PWHBQ6NK.js +31945 -0
- package/dist/xlsx-PWHBQ6NK.js.map +1 -0
- package/package.json +12 -6
- package/styles.css +1 -0
- package/src/components/CLAUDE.md +0 -66
- package/src/components/advanced/AssetManager/AssetManager.test.tsx +0 -624
- package/src/components/advanced/AssetManager/AssetManager.tsx +0 -928
- package/src/components/advanced/AssetManager/AssetManager.types.ts +0 -248
- package/src/components/advanced/AssetManager/AssetManager.variants.ts +0 -284
- package/src/components/advanced/AssetManager/README.md +0 -246
- package/src/components/advanced/AssetManager/index.ts +0 -4
- package/src/components/advanced/CLAUDE.md +0 -77
- package/src/components/advanced/Calendar/Calendar.test.tsx +0 -718
- package/src/components/advanced/Calendar/Calendar.tsx +0 -264
- package/src/components/advanced/Calendar/Calendar.types.ts +0 -62
- package/src/components/advanced/Calendar/Calendar.variants.ts +0 -154
- package/src/components/advanced/Calendar/README.md +0 -389
- package/src/components/advanced/Calendar/index.ts +0 -3
- package/src/components/advanced/Command/Command.test.tsx +0 -1014
- package/src/components/advanced/Command/Command.tsx +0 -330
- package/src/components/advanced/Command/Command.types.ts +0 -238
- package/src/components/advanced/Command/Command.variants.ts +0 -300
- package/src/components/advanced/Command/README.md +0 -1259
- package/src/components/advanced/Command/index.ts +0 -45
- package/src/components/advanced/DragAndDrop/DragAndDrop.test.tsx +0 -573
- package/src/components/advanced/DragAndDrop/DragAndDrop.tsx +0 -495
- package/src/components/advanced/DragAndDrop/DragAndDrop.types.ts +0 -237
- package/src/components/advanced/DragAndDrop/DragAndDrop.variants.ts +0 -156
- package/src/components/advanced/DragAndDrop/README.md +0 -284
- package/src/components/advanced/DragAndDrop/index.ts +0 -4
- package/src/components/advanced/ErrorBoundary/ErrorBoundary.test.tsx +0 -372
- package/src/components/advanced/ErrorBoundary/ErrorBoundary.tsx +0 -184
- package/src/components/advanced/ErrorBoundary/ErrorBoundary.types.ts +0 -73
- package/src/components/advanced/ErrorBoundary/ErrorBoundary.variants.ts +0 -153
- package/src/components/advanced/ErrorBoundary/README.md +0 -296
- package/src/components/advanced/ErrorBoundary/index.ts +0 -18
- package/src/components/advanced/EventCalendar/EventCalendar.test.tsx +0 -535
- package/src/components/advanced/EventCalendar/EventCalendar.tsx +0 -1066
- package/src/components/advanced/EventCalendar/EventCalendar.types.ts +0 -232
- package/src/components/advanced/EventCalendar/EventCalendar.variants.ts +0 -222
- package/src/components/advanced/EventCalendar/README.md +0 -330
- package/src/components/advanced/EventCalendar/index.ts +0 -35
- package/src/components/advanced/FileDropzone/FileDropzone.test.tsx +0 -344
- package/src/components/advanced/FileDropzone/FileDropzone.tsx +0 -188
- package/src/components/advanced/FileDropzone/FileDropzone.types.ts +0 -47
- package/src/components/advanced/FileDropzone/FileDropzone.variants.ts +0 -46
- package/src/components/advanced/FileDropzone/README.md +0 -359
- package/src/components/advanced/FileDropzone/index.ts +0 -7
- package/src/components/advanced/FilePreview/FilePreview.test.tsx +0 -503
- package/src/components/advanced/FilePreview/FilePreview.tsx +0 -385
- package/src/components/advanced/FilePreview/FilePreview.types.ts +0 -90
- package/src/components/advanced/FilePreview/FilePreview.variants.ts +0 -234
- package/src/components/advanced/FilePreview/README.md +0 -318
- package/src/components/advanced/FilePreview/index.ts +0 -25
- package/src/components/advanced/FileUpload/FileUpload.test.tsx +0 -676
- package/src/components/advanced/FileUpload/FileUpload.tsx +0 -845
- package/src/components/advanced/FileUpload/FileUpload.types.ts +0 -270
- package/src/components/advanced/FileUpload/FileUpload.variants.ts +0 -216
- package/src/components/advanced/FileUpload/README.md +0 -380
- package/src/components/advanced/FileUpload/index.ts +0 -39
- package/src/components/advanced/FilterBuilder/FilterBuilder.test.tsx +0 -644
- package/src/components/advanced/FilterBuilder/FilterBuilder.tsx +0 -881
- package/src/components/advanced/FilterBuilder/FilterBuilder.types.ts +0 -249
- package/src/components/advanced/FilterBuilder/FilterBuilder.variants.ts +0 -307
- package/src/components/advanced/FilterBuilder/README.md +0 -383
- package/src/components/advanced/FilterBuilder/index.ts +0 -48
- package/src/components/advanced/MarkdownEditor/MarkdownEditor.test.tsx +0 -468
- package/src/components/advanced/MarkdownEditor/MarkdownEditor.tsx +0 -556
- package/src/components/advanced/MarkdownEditor/MarkdownEditor.types.ts +0 -108
- package/src/components/advanced/MarkdownEditor/MarkdownEditor.variants.ts +0 -62
- package/src/components/advanced/MarkdownEditor/README.md +0 -352
- package/src/components/advanced/MarkdownEditor/index.ts +0 -15
- package/src/components/advanced/Portal/Portal.test.tsx +0 -406
- package/src/components/advanced/Portal/Portal.tsx +0 -77
- package/src/components/advanced/Portal/Portal.types.ts +0 -28
- package/src/components/advanced/Portal/Portal.variants.ts +0 -95
- package/src/components/advanced/Portal/README.md +0 -326
- package/src/components/advanced/Portal/index.ts +0 -9
- package/src/components/advanced/RichTextEditor/README.md +0 -383
- package/src/components/advanced/RichTextEditor/RichTextEditor.test.tsx +0 -394
- package/src/components/advanced/RichTextEditor/RichTextEditor.tsx +0 -651
- package/src/components/advanced/RichTextEditor/RichTextEditor.types.ts +0 -77
- package/src/components/advanced/RichTextEditor/RichTextEditor.variants.ts +0 -151
- package/src/components/advanced/RichTextEditor/index.ts +0 -24
- package/src/components/advanced/Search/README.md +0 -391
- package/src/components/advanced/Search/Search.test.tsx +0 -567
- package/src/components/advanced/Search/Search.tsx +0 -829
- package/src/components/advanced/Search/Search.types.ts +0 -243
- package/src/components/advanced/Search/Search.variants.ts +0 -358
- package/src/components/advanced/Search/index.ts +0 -52
- package/src/components/advanced/SortableList/README.md +0 -448
- package/src/components/advanced/SortableList/SortableList.test.tsx +0 -317
- package/src/components/advanced/SortableList/SortableList.tsx +0 -392
- package/src/components/advanced/SortableList/SortableList.types.ts +0 -122
- package/src/components/advanced/SortableList/SortableList.variants.ts +0 -141
- package/src/components/advanced/SortableList/index.ts +0 -33
- package/src/components/advanced/VersionControl/README.md +0 -440
- package/src/components/advanced/VersionControl/VersionControl.test.tsx +0 -517
- package/src/components/advanced/VersionControl/VersionControl.tsx +0 -758
- package/src/components/advanced/VersionControl/VersionControl.types.ts +0 -176
- package/src/components/advanced/VersionControl/VersionControl.variants.ts +0 -203
- package/src/components/advanced/VersionControl/index.ts +0 -33
- package/src/components/advanced/index.ts +0 -17
- package/src/components/data-display/Accordion/Accordion.test.tsx +0 -519
- package/src/components/data-display/Accordion/Accordion.tsx +0 -164
- package/src/components/data-display/Accordion/Accordion.types.ts +0 -37
- package/src/components/data-display/Accordion/Accordion.variants.ts +0 -112
- package/src/components/data-display/Accordion/README.md +0 -976
- package/src/components/data-display/Accordion/index.ts +0 -31
- package/src/components/data-display/AreaChart/AreaChart.test.tsx +0 -529
- package/src/components/data-display/AreaChart/AreaChart.tsx +0 -318
- package/src/components/data-display/AreaChart/AreaChart.types.ts +0 -169
- package/src/components/data-display/AreaChart/AreaChart.variants.ts +0 -45
- package/src/components/data-display/AreaChart/README.md +0 -229
- package/src/components/data-display/AreaChart/index.ts +0 -2
- package/src/components/data-display/Banner/Banner.test.tsx +0 -648
- package/src/components/data-display/Banner/Banner.tsx +0 -111
- package/src/components/data-display/Banner/Banner.types.ts +0 -51
- package/src/components/data-display/Banner/Banner.variants.ts +0 -37
- package/src/components/data-display/Banner/README.md +0 -351
- package/src/components/data-display/Banner/index.ts +0 -2
- package/src/components/data-display/BarChart/BarChart.test.tsx +0 -536
- package/src/components/data-display/BarChart/BarChart.tsx +0 -305
- package/src/components/data-display/BarChart/BarChart.types.ts +0 -145
- package/src/components/data-display/BarChart/BarChart.variants.ts +0 -61
- package/src/components/data-display/BarChart/README.md +0 -205
- package/src/components/data-display/BarChart/index.ts +0 -2
- package/src/components/data-display/BarList/BarList.tsx +0 -172
- package/src/components/data-display/BarList/BarList.types.ts +0 -69
- package/src/components/data-display/BarList/BarList.variants.ts +0 -63
- package/src/components/data-display/BarList/index.ts +0 -2
- package/src/components/data-display/CLAUDE.md +0 -90
- package/src/components/data-display/Callout/Callout.test.tsx +0 -516
- package/src/components/data-display/Callout/Callout.tsx +0 -112
- package/src/components/data-display/Callout/Callout.types.ts +0 -37
- package/src/components/data-display/Callout/Callout.variants.ts +0 -48
- package/src/components/data-display/Callout/README.md +0 -341
- package/src/components/data-display/Callout/index.ts +0 -2
- package/src/components/data-display/Carousel/Carousel.test.tsx +0 -386
- package/src/components/data-display/Carousel/Carousel.tsx +0 -241
- package/src/components/data-display/Carousel/Carousel.types.ts +0 -20
- package/src/components/data-display/Carousel/Carousel.variants.ts +0 -125
- package/src/components/data-display/Carousel/README.md +0 -711
- package/src/components/data-display/Carousel/index.ts +0 -1
- package/src/components/data-display/CategoryBar/CategoryBar.tsx +0 -220
- package/src/components/data-display/CategoryBar/CategoryBar.types.ts +0 -80
- package/src/components/data-display/CategoryBar/CategoryBar.variants.ts +0 -85
- package/src/components/data-display/CategoryBar/index.ts +0 -2
- package/src/components/data-display/Chart/Chart.test.tsx +0 -432
- package/src/components/data-display/Chart/Chart.tsx +0 -476
- package/src/components/data-display/Chart/Chart.types.ts +0 -24
- package/src/components/data-display/Chart/Chart.variants.ts +0 -106
- package/src/components/data-display/Chart/README.md +0 -674
- package/src/components/data-display/Chart/index.ts +0 -1
- package/src/components/data-display/ChartCard/ChartCard.test.tsx +0 -327
- package/src/components/data-display/ChartCard/ChartCard.tsx +0 -201
- package/src/components/data-display/ChartCard/ChartCard.types.ts +0 -68
- package/src/components/data-display/ChartCard/ChartCard.variants.ts +0 -63
- package/src/components/data-display/ChartCard/index.ts +0 -17
- package/src/components/data-display/ChartLegend/ChartLegend.test.tsx +0 -165
- package/src/components/data-display/ChartLegend/ChartLegend.types.ts +0 -88
- package/src/components/data-display/ChartLegend/README.md +0 -317
- package/src/components/data-display/ChartLegend/index.ts +0 -22
- package/src/components/data-display/ComboChart/ComboChart.tsx +0 -380
- package/src/components/data-display/ComboChart/ComboChart.types.ts +0 -224
- package/src/components/data-display/ComboChart/index.ts +0 -2
- package/src/components/data-display/DashboardCard/DashboardCard.test.tsx +0 -289
- package/src/components/data-display/DashboardCard/DashboardCard.tsx +0 -285
- package/src/components/data-display/DashboardCard/DashboardCard.types.ts +0 -74
- package/src/components/data-display/DashboardCard/DashboardCard.variants.ts +0 -67
- package/src/components/data-display/DashboardCard/index.ts +0 -25
- package/src/components/data-display/DashboardFilterbar/DashboardFilterbar.tsx +0 -151
- package/src/components/data-display/DashboardFilterbar/DashboardFilterbar.types.ts +0 -39
- package/src/components/data-display/DashboardFilterbar/DashboardFilterbar.variants.ts +0 -30
- package/src/components/data-display/DashboardFilterbar/index.ts +0 -10
- package/src/components/data-display/DataTable/DataTable.test.tsx +0 -654
- package/src/components/data-display/DataTable/DataTable.tsx +0 -529
- package/src/components/data-display/DataTable/DataTable.types.ts +0 -190
- package/src/components/data-display/DataTable/DataTable.variants.ts +0 -79
- package/src/components/data-display/DataTable/README.md +0 -447
- package/src/components/data-display/DataTable/index.ts +0 -2
- package/src/components/data-display/DeltaBar/DeltaBar.tsx +0 -100
- package/src/components/data-display/DeltaBar/DeltaBar.types.ts +0 -57
- package/src/components/data-display/DeltaBar/DeltaBar.variants.ts +0 -40
- package/src/components/data-display/DeltaBar/index.ts +0 -2
- package/src/components/data-display/EmptyState/EmptyState.test.tsx +0 -368
- package/src/components/data-display/EmptyState/EmptyState.tsx +0 -91
- package/src/components/data-display/EmptyState/EmptyState.types.ts +0 -9
- package/src/components/data-display/EmptyState/EmptyState.variants.ts +0 -28
- package/src/components/data-display/EmptyState/README.md +0 -746
- package/src/components/data-display/EmptyState/index.ts +0 -1
- package/src/components/data-display/Feed/Feed.test.tsx +0 -668
- package/src/components/data-display/Feed/Feed.tsx +0 -290
- package/src/components/data-display/Feed/Feed.types.ts +0 -104
- package/src/components/data-display/Feed/Feed.variants.ts +0 -64
- package/src/components/data-display/Feed/README.md +0 -326
- package/src/components/data-display/Feed/index.ts +0 -17
- package/src/components/data-display/FunnelChart/FunnelChart.tsx +0 -177
- package/src/components/data-display/FunnelChart/FunnelChart.types.ts +0 -145
- package/src/components/data-display/FunnelChart/index.ts +0 -2
- package/src/components/data-display/GaugeChart/GaugeChart.test.tsx +0 -129
- package/src/components/data-display/GaugeChart/GaugeChart.tsx +0 -332
- package/src/components/data-display/GaugeChart/GaugeChart.types.ts +0 -53
- package/src/components/data-display/GaugeChart/GaugeChart.variants.ts +0 -56
- package/src/components/data-display/GaugeChart/README.md +0 -305
- package/src/components/data-display/GaugeChart/index.ts +0 -3
- package/src/components/data-display/Heatmap/Heatmap.test.tsx +0 -630
- package/src/components/data-display/Heatmap/Heatmap.tsx +0 -569
- package/src/components/data-display/Heatmap/Heatmap.types.ts +0 -120
- package/src/components/data-display/Heatmap/Heatmap.variants.ts +0 -72
- package/src/components/data-display/Heatmap/README.md +0 -321
- package/src/components/data-display/Heatmap/index.ts +0 -2
- package/src/components/data-display/HoverCard/HoverCard.test.tsx +0 -314
- package/src/components/data-display/HoverCard/HoverCard.tsx +0 -40
- package/src/components/data-display/HoverCard/HoverCard.types.ts +0 -21
- package/src/components/data-display/HoverCard/HoverCard.variants.ts +0 -29
- package/src/components/data-display/HoverCard/README.md +0 -624
- package/src/components/data-display/HoverCard/index.ts +0 -1
- package/src/components/data-display/ImageGallery/ImageGallery.test.tsx +0 -519
- package/src/components/data-display/ImageGallery/ImageGallery.tsx +0 -733
- package/src/components/data-display/ImageGallery/ImageGallery.types.ts +0 -109
- package/src/components/data-display/ImageGallery/ImageGallery.variants.ts +0 -58
- package/src/components/data-display/ImageGallery/README.md +0 -352
- package/src/components/data-display/ImageGallery/index.ts +0 -9
- package/src/components/data-display/Item/Item.test.tsx +0 -476
- package/src/components/data-display/Item/Item.tsx +0 -195
- package/src/components/data-display/Item/Item.types.ts +0 -23
- package/src/components/data-display/Item/Item.variants.ts +0 -51
- package/src/components/data-display/Item/README.md +0 -759
- package/src/components/data-display/Item/index.ts +0 -1
- package/src/components/data-display/KPICard/KPICard.test.tsx +0 -445
- package/src/components/data-display/KPICard/KPICard.tsx +0 -203
- package/src/components/data-display/KPICard/KPICard.types.ts +0 -32
- package/src/components/data-display/KPICard/KPICard.variants.ts +0 -64
- package/src/components/data-display/KPICard/README.md +0 -380
- package/src/components/data-display/KPICard/index.ts +0 -7
- package/src/components/data-display/Lightbox/Lightbox.test.tsx +0 -574
- package/src/components/data-display/Lightbox/Lightbox.tsx +0 -466
- package/src/components/data-display/Lightbox/Lightbox.types.ts +0 -53
- package/src/components/data-display/Lightbox/Lightbox.variants.ts +0 -99
- package/src/components/data-display/Lightbox/README.md +0 -397
- package/src/components/data-display/Lightbox/index.ts +0 -2
- package/src/components/data-display/LineChart/LineChart.test.tsx +0 -654
- package/src/components/data-display/LineChart/LineChart.tsx +0 -295
- package/src/components/data-display/LineChart/LineChart.types.ts +0 -168
- package/src/components/data-display/LineChart/LineChart.variants.ts +0 -52
- package/src/components/data-display/LineChart/README.md +0 -242
- package/src/components/data-display/LineChart/index.ts +0 -8
- package/src/components/data-display/List/List.test.tsx +0 -756
- package/src/components/data-display/List/List.tsx +0 -455
- package/src/components/data-display/List/List.types.ts +0 -67
- package/src/components/data-display/List/List.variants.ts +0 -69
- package/src/components/data-display/List/README.md +0 -374
- package/src/components/data-display/List/index.ts +0 -9
- package/src/components/data-display/MarkerBar/MarkerBar.tsx +0 -130
- package/src/components/data-display/MarkerBar/MarkerBar.types.ts +0 -67
- package/src/components/data-display/MarkerBar/MarkerBar.variants.ts +0 -75
- package/src/components/data-display/MarkerBar/index.ts +0 -3
- package/src/components/data-display/PieChart/PieChart.test.tsx +0 -655
- package/src/components/data-display/PieChart/PieChart.tsx +0 -327
- package/src/components/data-display/PieChart/PieChart.types.ts +0 -134
- package/src/components/data-display/PieChart/PieChart.variants.ts +0 -49
- package/src/components/data-display/PieChart/README.md +0 -261
- package/src/components/data-display/PieChart/index.ts +0 -2
- package/src/components/data-display/ScatterChart/ScatterChart.tsx +0 -310
- package/src/components/data-display/ScatterChart/ScatterChart.types.ts +0 -272
- package/src/components/data-display/ScatterChart/index.ts +0 -2
- package/src/components/data-display/SingleStat/README.md +0 -363
- package/src/components/data-display/SingleStat/SingleStat.test.tsx +0 -223
- package/src/components/data-display/SingleStat/SingleStat.tsx +0 -251
- package/src/components/data-display/SingleStat/SingleStat.types.ts +0 -71
- package/src/components/data-display/SingleStat/SingleStat.variants.ts +0 -51
- package/src/components/data-display/SingleStat/index.ts +0 -6
- package/src/components/data-display/Sparkline/README.md +0 -321
- package/src/components/data-display/Sparkline/Sparkline.test.tsx +0 -276
- package/src/components/data-display/Sparkline/Sparkline.tsx +0 -971
- package/src/components/data-display/Sparkline/Sparkline.types.ts +0 -147
- package/src/components/data-display/Sparkline/Sparkline.variants.ts +0 -52
- package/src/components/data-display/Sparkline/index.ts +0 -9
- package/src/components/data-display/Table/README.md +0 -821
- package/src/components/data-display/Table/Table.test.tsx +0 -732
- package/src/components/data-display/Table/Table.tsx +0 -123
- package/src/components/data-display/Table/Table.types.ts +0 -20
- package/src/components/data-display/Table/Table.variants.ts +0 -123
- package/src/components/data-display/Table/index.ts +0 -1
- package/src/components/data-display/Timeline/README.md +0 -366
- package/src/components/data-display/Timeline/Timeline.test.tsx +0 -701
- package/src/components/data-display/Timeline/Timeline.tsx +0 -328
- package/src/components/data-display/Timeline/Timeline.types.ts +0 -59
- package/src/components/data-display/Timeline/Timeline.variants.ts +0 -152
- package/src/components/data-display/Timeline/index.ts +0 -15
- package/src/components/data-display/Tracker/Tracker.tsx +0 -105
- package/src/components/data-display/Tracker/Tracker.types.ts +0 -45
- package/src/components/data-display/Tracker/Tracker.variants.ts +0 -24
- package/src/components/data-display/Tracker/index.ts +0 -2
- package/src/components/data-display/VirtualTable/README.md +0 -383
- package/src/components/data-display/VirtualTable/VirtualTable.test.tsx +0 -295
- package/src/components/data-display/VirtualTable/VirtualTable.tsx +0 -354
- package/src/components/data-display/VirtualTable/VirtualTable.types.ts +0 -62
- package/src/components/data-display/VirtualTable/VirtualTable.variants.ts +0 -61
- package/src/components/data-display/VirtualTable/index.ts +0 -2
- package/src/components/data-display/index.ts +0 -35
- package/src/components/feedback/Alert/Alert.test.tsx +0 -614
- package/src/components/feedback/Alert/Alert.tsx +0 -48
- package/src/components/feedback/Alert/Alert.types.ts +0 -42
- package/src/components/feedback/Alert/Alert.variants.ts +0 -20
- package/src/components/feedback/Alert/README.md +0 -522
- package/src/components/feedback/Alert/index.ts +0 -3
- package/src/components/feedback/AlertDialog/AlertDialog.test.tsx +0 -1237
- package/src/components/feedback/AlertDialog/AlertDialog.tsx +0 -160
- package/src/components/feedback/AlertDialog/AlertDialog.types.ts +0 -139
- package/src/components/feedback/AlertDialog/README.md +0 -723
- package/src/components/feedback/AlertDialog/index.ts +0 -2
- package/src/components/feedback/CLAUDE.md +0 -87
- package/src/components/feedback/ConfirmModal/ConfirmModal.test.tsx +0 -404
- package/src/components/feedback/ConfirmModal/ConfirmModal.tsx +0 -139
- package/src/components/feedback/ConfirmModal/ConfirmModal.types.ts +0 -117
- package/src/components/feedback/ConfirmModal/README.md +0 -546
- package/src/components/feedback/ConfirmModal/index.ts +0 -2
- package/src/components/feedback/Dialog/Dialog.test.tsx +0 -1070
- package/src/components/feedback/Dialog/Dialog.tsx +0 -137
- package/src/components/feedback/Dialog/Dialog.types.ts +0 -119
- package/src/components/feedback/Dialog/README.md +0 -770
- package/src/components/feedback/Dialog/index.ts +0 -2
- package/src/components/feedback/ErrorPage/ErrorPage.test.tsx +0 -338
- package/src/components/feedback/ErrorPage/ErrorPage.tsx +0 -232
- package/src/components/feedback/ErrorPage/ErrorPage.types.ts +0 -95
- package/src/components/feedback/ErrorPage/README.md +0 -573
- package/src/components/feedback/ErrorPage/index.ts +0 -6
- package/src/components/feedback/FocusTrap/FocusTrap.test.tsx +0 -378
- package/src/components/feedback/FocusTrap/FocusTrap.tsx +0 -115
- package/src/components/feedback/FocusTrap/FocusTrap.types.ts +0 -119
- package/src/components/feedback/FocusTrap/README.md +0 -571
- package/src/components/feedback/FocusTrap/index.ts +0 -2
- package/src/components/feedback/Message/Message.test.tsx +0 -143
- package/src/components/feedback/Message/Message.tsx +0 -66
- package/src/components/feedback/Message/Message.types.ts +0 -44
- package/src/components/feedback/Message/Message.variants.ts +0 -24
- package/src/components/feedback/Message/README.md +0 -522
- package/src/components/feedback/Message/index.ts +0 -2
- package/src/components/feedback/Modal/Modal.test.tsx +0 -475
- package/src/components/feedback/Modal/Modal.tsx +0 -168
- package/src/components/feedback/Modal/Modal.types.ts +0 -91
- package/src/components/feedback/Modal/README.md +0 -517
- package/src/components/feedback/Modal/index.ts +0 -2
- package/src/components/feedback/Notification/Notification.test.tsx +0 -908
- package/src/components/feedback/Notification/Notification.tsx +0 -222
- package/src/components/feedback/Notification/Notification.types.ts +0 -90
- package/src/components/feedback/Notification/Notification.variants.ts +0 -54
- package/src/components/feedback/Notification/README.md +0 -602
- package/src/components/feedback/Notification/index.ts +0 -11
- package/src/components/feedback/Popover/Popover.test.tsx +0 -901
- package/src/components/feedback/Popover/Popover.tsx +0 -60
- package/src/components/feedback/Popover/Popover.types.ts +0 -158
- package/src/components/feedback/Popover/Popover.variants.ts +0 -27
- package/src/components/feedback/Popover/README.md +0 -700
- package/src/components/feedback/Popover/index.ts +0 -2
- package/src/components/feedback/Toast/README.md +0 -613
- package/src/components/feedback/Toast/Toast.test.tsx +0 -1116
- package/src/components/feedback/Toast/Toast.tsx +0 -44
- package/src/components/feedback/Toast/Toast.types.ts +0 -156
- package/src/components/feedback/Toast/index.ts +0 -1
- package/src/components/feedback/Tooltip/README.md +0 -671
- package/src/components/feedback/Tooltip/Tooltip.test.tsx +0 -413
- package/src/components/feedback/Tooltip/Tooltip.tsx +0 -110
- package/src/components/feedback/Tooltip/Tooltip.types.ts +0 -138
- package/src/components/feedback/Tooltip/Tooltip.variants.ts +0 -54
- package/src/components/feedback/Tooltip/index.ts +0 -3
- package/src/components/feedback/index.ts +0 -13
- package/src/components/forms/Autocomplete/Autocomplete.test.tsx +0 -2351
- package/src/components/forms/Autocomplete/Autocomplete.tsx +0 -696
- package/src/components/forms/Autocomplete/Autocomplete.types.ts +0 -211
- package/src/components/forms/Autocomplete/Autocomplete.variants.ts +0 -154
- package/src/components/forms/Autocomplete/README.md +0 -919
- package/src/components/forms/Autocomplete/index.ts +0 -7
- package/src/components/forms/CLAUDE.md +0 -124
- package/src/components/forms/Checkbox/Checkbox.test.tsx +0 -475
- package/src/components/forms/Checkbox/Checkbox.tsx +0 -35
- package/src/components/forms/Checkbox/Checkbox.types.ts +0 -24
- package/src/components/forms/Checkbox/Checkbox.variants.ts +0 -46
- package/src/components/forms/Checkbox/README.md +0 -861
- package/src/components/forms/Checkbox/index.ts +0 -3
- package/src/components/forms/CheckboxGroup/CheckboxGroup.test.tsx +0 -338
- package/src/components/forms/CheckboxGroup/CheckboxGroup.tsx +0 -212
- package/src/components/forms/CheckboxGroup/CheckboxGroup.types.ts +0 -150
- package/src/components/forms/CheckboxGroup/CheckboxGroup.variants.ts +0 -85
- package/src/components/forms/CheckboxGroup/README.md +0 -124
- package/src/components/forms/CheckboxGroup/index.ts +0 -21
- package/src/components/forms/ColorPicker/ColorPicker.test.tsx +0 -916
- package/src/components/forms/ColorPicker/ColorPicker.tsx +0 -282
- package/src/components/forms/ColorPicker/ColorPicker.types.ts +0 -99
- package/src/components/forms/ColorPicker/ColorPicker.variants.ts +0 -84
- package/src/components/forms/ColorPicker/README.md +0 -809
- package/src/components/forms/ColorPicker/index.ts +0 -14
- package/src/components/forms/Combobox/Combobox.test.tsx +0 -975
- package/src/components/forms/Combobox/Combobox.tsx +0 -194
- package/src/components/forms/Combobox/Combobox.types.ts +0 -113
- package/src/components/forms/Combobox/Combobox.variants.ts +0 -108
- package/src/components/forms/Combobox/README.md +0 -923
- package/src/components/forms/Combobox/index.ts +0 -7
- package/src/components/forms/DatePicker/DatePicker.test.tsx +0 -1181
- package/src/components/forms/DatePicker/DatePicker.tsx +0 -503
- package/src/components/forms/DatePicker/DatePicker.types.ts +0 -196
- package/src/components/forms/DatePicker/DatePicker.variants.ts +0 -38
- package/src/components/forms/DatePicker/README.md +0 -821
- package/src/components/forms/DatePicker/index.ts +0 -8
- package/src/components/forms/DateRangePicker/DateRangeInput.tsx +0 -139
- package/src/components/forms/DateRangePicker/DateRangePicker.test.tsx +0 -1684
- package/src/components/forms/DateRangePicker/DateRangePicker.tsx +0 -375
- package/src/components/forms/DateRangePicker/DateRangePicker.types.ts +0 -145
- package/src/components/forms/DateRangePicker/DateRangePicker.variants.ts +0 -133
- package/src/components/forms/DateRangePicker/DateRangePresets.tsx +0 -44
- package/src/components/forms/DateRangePicker/index.ts +0 -25
- package/src/components/forms/DateRangePicker/presets.ts +0 -104
- package/src/components/forms/EmailInput/EmailInput.test.tsx +0 -562
- package/src/components/forms/EmailInput/EmailInput.tsx +0 -59
- package/src/components/forms/EmailInput/EmailInput.types.ts +0 -46
- package/src/components/forms/EmailInput/EmailInput.variants.ts +0 -30
- package/src/components/forms/EmailInput/README.md +0 -708
- package/src/components/forms/EmailInput/index.ts +0 -6
- package/src/components/forms/ErrorMessage/ErrorMessage.test.tsx +0 -457
- package/src/components/forms/ErrorMessage/ErrorMessage.tsx +0 -128
- package/src/components/forms/ErrorMessage/ErrorMessage.types.ts +0 -54
- package/src/components/forms/ErrorMessage/ErrorMessage.variants.ts +0 -78
- package/src/components/forms/ErrorMessage/README.md +0 -855
- package/src/components/forms/ErrorMessage/index.ts +0 -4
- package/src/components/forms/Field/Field.test.tsx +0 -811
- package/src/components/forms/Field/Field.tsx +0 -195
- package/src/components/forms/Field/Field.types.ts +0 -94
- package/src/components/forms/Field/Field.variants.ts +0 -114
- package/src/components/forms/Field/README.md +0 -931
- package/src/components/forms/Field/index.ts +0 -3
- package/src/components/forms/FloatLabel/FloatLabel.test.tsx +0 -248
- package/src/components/forms/FloatLabel/FloatLabel.tsx +0 -110
- package/src/components/forms/FloatLabel/FloatLabel.types.ts +0 -37
- package/src/components/forms/FloatLabel/index.ts +0 -2
- package/src/components/forms/Form/Form.test.tsx +0 -1167
- package/src/components/forms/Form/Form.tsx +0 -170
- package/src/components/forms/Form/Form.types.ts +0 -126
- package/src/components/forms/Form/Form.variants.ts +0 -81
- package/src/components/forms/Form/README.md +0 -787
- package/src/components/forms/Form/index.ts +0 -3
- package/src/components/forms/FormValidation/FormValidation.test.tsx +0 -376
- package/src/components/forms/FormValidation/FormValidation.tsx +0 -99
- package/src/components/forms/FormValidation/FormValidation.types.ts +0 -37
- package/src/components/forms/FormValidation/FormValidation.variants.ts +0 -24
- package/src/components/forms/FormValidation/README.md +0 -592
- package/src/components/forms/FormValidation/index.ts +0 -4
- package/src/components/forms/HelpText/HelpText.test.tsx +0 -558
- package/src/components/forms/HelpText/HelpText.tsx +0 -111
- package/src/components/forms/HelpText/HelpText.types.ts +0 -51
- package/src/components/forms/HelpText/HelpText.variants.ts +0 -54
- package/src/components/forms/HelpText/README.md +0 -739
- package/src/components/forms/HelpText/index.ts +0 -4
- package/src/components/forms/IftaLabel/IftaLabel.test.tsx +0 -193
- package/src/components/forms/IftaLabel/IftaLabel.tsx +0 -72
- package/src/components/forms/IftaLabel/IftaLabel.types.ts +0 -18
- package/src/components/forms/IftaLabel/index.ts +0 -2
- package/src/components/forms/InputGroup/InputGroup.test.tsx +0 -782
- package/src/components/forms/InputGroup/InputGroup.tsx +0 -128
- package/src/components/forms/InputGroup/InputGroup.types.ts +0 -66
- package/src/components/forms/InputGroup/InputGroup.variants.ts +0 -102
- package/src/components/forms/InputGroup/README.md +0 -845
- package/src/components/forms/InputGroup/index.ts +0 -24
- package/src/components/forms/InputOTP/InputOTP.test.tsx +0 -793
- package/src/components/forms/InputOTP/InputOTP.tsx +0 -90
- package/src/components/forms/InputOTP/InputOTP.types.ts +0 -74
- package/src/components/forms/InputOTP/InputOTP.variants.ts +0 -64
- package/src/components/forms/InputOTP/README.md +0 -1149
- package/src/components/forms/InputOTP/index.ts +0 -18
- package/src/components/forms/InputOTPField/InputOTPField.test.tsx +0 -220
- package/src/components/forms/InputOTPField/InputOTPField.tsx +0 -148
- package/src/components/forms/InputOTPField/InputOTPField.types.ts +0 -91
- package/src/components/forms/InputOTPField/InputOTPField.variants.ts +0 -83
- package/src/components/forms/InputOTPField/README.md +0 -195
- package/src/components/forms/InputOTPField/index.ts +0 -12
- package/src/components/forms/MultiSelect/MultiSelect.test.tsx +0 -1036
- package/src/components/forms/MultiSelect/MultiSelect.tsx +0 -291
- package/src/components/forms/MultiSelect/MultiSelect.types.ts +0 -147
- package/src/components/forms/MultiSelect/MultiSelect.variants.ts +0 -132
- package/src/components/forms/MultiSelect/README.md +0 -897
- package/src/components/forms/MultiSelect/index.ts +0 -7
- package/src/components/forms/NativeSelect/NativeSelect.test.tsx +0 -856
- package/src/components/forms/NativeSelect/NativeSelect.tsx +0 -75
- package/src/components/forms/NativeSelect/NativeSelect.types.ts +0 -17
- package/src/components/forms/NativeSelect/NativeSelect.variants.ts +0 -106
- package/src/components/forms/NativeSelect/README.md +0 -1033
- package/src/components/forms/NativeSelect/index.ts +0 -3
- package/src/components/forms/NumberInput/NumberInput.test.tsx +0 -636
- package/src/components/forms/NumberInput/NumberInput.tsx +0 -131
- package/src/components/forms/NumberInput/NumberInput.types.ts +0 -45
- package/src/components/forms/NumberInput/NumberInput.variants.ts +0 -85
- package/src/components/forms/NumberInput/README.md +0 -766
- package/src/components/forms/NumberInput/index.ts +0 -9
- package/src/components/forms/PasswordInput/PasswordInput.test.tsx +0 -525
- package/src/components/forms/PasswordInput/PasswordInput.tsx +0 -67
- package/src/components/forms/PasswordInput/PasswordInput.types.ts +0 -35
- package/src/components/forms/PasswordInput/PasswordInput.variants.ts +0 -34
- package/src/components/forms/PasswordInput/README.md +0 -698
- package/src/components/forms/PasswordInput/index.ts +0 -6
- package/src/components/forms/PaymentInput/PaymentInput.test.tsx +0 -252
- package/src/components/forms/PaymentInput/PaymentInput.tsx +0 -178
- package/src/components/forms/PaymentInput/PaymentInput.types.ts +0 -69
- package/src/components/forms/PaymentInput/PaymentInput.variants.ts +0 -81
- package/src/components/forms/PaymentInput/README.md +0 -263
- package/src/components/forms/PaymentInput/card-utils.ts +0 -219
- package/src/components/forms/PaymentInput/index.ts +0 -23
- package/src/components/forms/PhoneInput/PhoneInput.test.tsx +0 -270
- package/src/components/forms/PhoneInput/PhoneInput.tsx +0 -215
- package/src/components/forms/PhoneInput/PhoneInput.types.ts +0 -74
- package/src/components/forms/PhoneInput/PhoneInput.variants.ts +0 -103
- package/src/components/forms/PhoneInput/README.md +0 -258
- package/src/components/forms/PhoneInput/countries.ts +0 -134
- package/src/components/forms/PhoneInput/index.ts +0 -22
- package/src/components/forms/RadioButton/README.md +0 -832
- package/src/components/forms/RadioButton/RadioButton.test.tsx +0 -583
- package/src/components/forms/RadioButton/RadioButton.tsx +0 -82
- package/src/components/forms/RadioButton/RadioButton.types.ts +0 -23
- package/src/components/forms/RadioButton/RadioButton.variants.ts +0 -80
- package/src/components/forms/RadioButton/index.ts +0 -15
- package/src/components/forms/RadioCardGroup/RadioCardGroup.tsx +0 -130
- package/src/components/forms/RadioCardGroup/RadioCardGroup.types.ts +0 -66
- package/src/components/forms/RadioCardGroup/RadioCardGroup.variants.ts +0 -131
- package/src/components/forms/RadioCardGroup/index.ts +0 -3
- package/src/components/forms/RadioGroup/README.md +0 -908
- package/src/components/forms/RadioGroup/RadioGroup.test.tsx +0 -764
- package/src/components/forms/RadioGroup/RadioGroup.tsx +0 -75
- package/src/components/forms/RadioGroup/RadioGroup.types.ts +0 -36
- package/src/components/forms/RadioGroup/RadioGroup.variants.ts +0 -58
- package/src/components/forms/RadioGroup/index.ts +0 -15
- package/src/components/forms/Rating/README.md +0 -729
- package/src/components/forms/Rating/Rating.test.tsx +0 -729
- package/src/components/forms/Rating/Rating.tsx +0 -258
- package/src/components/forms/Rating/Rating.types.ts +0 -89
- package/src/components/forms/Rating/Rating.variants.ts +0 -56
- package/src/components/forms/Rating/index.ts +0 -8
- package/src/components/forms/SearchInput/README.md +0 -729
- package/src/components/forms/SearchInput/SearchInput.test.tsx +0 -579
- package/src/components/forms/SearchInput/SearchInput.tsx +0 -103
- package/src/components/forms/SearchInput/SearchInput.types.ts +0 -40
- package/src/components/forms/SearchInput/SearchInput.variants.ts +0 -51
- package/src/components/forms/SearchInput/index.ts +0 -8
- package/src/components/forms/Select/README.md +0 -1286
- package/src/components/forms/Select/Select.test.tsx +0 -1136
- package/src/components/forms/Select/Select.tsx +0 -170
- package/src/components/forms/Select/Select.types.ts +0 -75
- package/src/components/forms/Select/Select.variants.ts +0 -133
- package/src/components/forms/Select/index.ts +0 -3
- package/src/components/forms/Slider/README.md +0 -1246
- package/src/components/forms/Slider/Slider.test.tsx +0 -731
- package/src/components/forms/Slider/Slider.tsx +0 -235
- package/src/components/forms/Slider/Slider.types.ts +0 -90
- package/src/components/forms/Slider/Slider.variants.ts +0 -239
- package/src/components/forms/Slider/index.ts +0 -34
- package/src/components/forms/SuccessMessage/README.md +0 -534
- package/src/components/forms/SuccessMessage/SuccessMessage.test.tsx +0 -257
- package/src/components/forms/SuccessMessage/SuccessMessage.tsx +0 -43
- package/src/components/forms/SuccessMessage/SuccessMessage.types.ts +0 -11
- package/src/components/forms/SuccessMessage/SuccessMessage.variants.ts +0 -15
- package/src/components/forms/SuccessMessage/index.ts +0 -4
- package/src/components/forms/Switch/README.md +0 -785
- package/src/components/forms/Switch/Switch.test.tsx +0 -636
- package/src/components/forms/Switch/Switch.tsx +0 -28
- package/src/components/forms/Switch/Switch.types.ts +0 -24
- package/src/components/forms/Switch/Switch.variants.ts +0 -49
- package/src/components/forms/Switch/index.ts +0 -3
- package/src/components/forms/TagsInput/README.md +0 -216
- package/src/components/forms/TagsInput/TagsInput.test.tsx +0 -308
- package/src/components/forms/TagsInput/TagsInput.tsx +0 -189
- package/src/components/forms/TagsInput/TagsInput.types.ts +0 -85
- package/src/components/forms/TagsInput/TagsInput.variants.ts +0 -58
- package/src/components/forms/TagsInput/index.ts +0 -12
- package/src/components/forms/TextInput/README.md +0 -871
- package/src/components/forms/TextInput/TextInput.test.tsx +0 -484
- package/src/components/forms/TextInput/TextInput.tsx +0 -76
- package/src/components/forms/TextInput/TextInput.types.ts +0 -61
- package/src/components/forms/TextInput/TextInput.variants.ts +0 -117
- package/src/components/forms/TextInput/index.ts +0 -14
- package/src/components/forms/Textarea/README.md +0 -905
- package/src/components/forms/Textarea/Textarea.test.tsx +0 -482
- package/src/components/forms/Textarea/Textarea.tsx +0 -24
- package/src/components/forms/Textarea/Textarea.types.ts +0 -39
- package/src/components/forms/Textarea/Textarea.variants.ts +0 -48
- package/src/components/forms/Textarea/index.ts +0 -3
- package/src/components/forms/TextareaField/README.md +0 -172
- package/src/components/forms/TextareaField/TextareaField.test.tsx +0 -260
- package/src/components/forms/TextareaField/TextareaField.tsx +0 -73
- package/src/components/forms/TextareaField/TextareaField.types.ts +0 -37
- package/src/components/forms/TextareaField/TextareaField.variants.ts +0 -83
- package/src/components/forms/TextareaField/index.ts +0 -12
- package/src/components/forms/TimePicker/README.md +0 -750
- package/src/components/forms/TimePicker/TimePicker.test.tsx +0 -780
- package/src/components/forms/TimePicker/TimePicker.tsx +0 -383
- package/src/components/forms/TimePicker/TimePicker.types.ts +0 -94
- package/src/components/forms/TimePicker/TimePicker.variants.ts +0 -83
- package/src/components/forms/TimePicker/index.ts +0 -14
- package/src/components/forms/ToggleGroup/README.md +0 -870
- package/src/components/forms/ToggleGroup/ToggleGroup.test.tsx +0 -941
- package/src/components/forms/ToggleGroup/ToggleGroup.tsx +0 -5
- package/src/components/forms/ToggleGroup/ToggleGroup.types.ts +0 -17
- package/src/components/forms/ToggleGroup/ToggleGroup.variants.ts +0 -42
- package/src/components/forms/ToggleGroup/index.ts +0 -9
- package/src/components/forms/URLInput/README.md +0 -701
- package/src/components/forms/URLInput/URLInput.test.tsx +0 -602
- package/src/components/forms/URLInput/URLInput.tsx +0 -71
- package/src/components/forms/URLInput/URLInput.types.ts +0 -51
- package/src/components/forms/URLInput/URLInput.variants.ts +0 -52
- package/src/components/forms/URLInput/index.ts +0 -8
- package/src/components/forms/index.ts +0 -44
- package/src/components/index.ts +0 -26
- package/src/components/layout/AppContent/AppContent.test.tsx +0 -34
- package/src/components/layout/AppContent/AppContent.tsx +0 -23
- package/src/components/layout/AppContent/AppContent.variants.ts +0 -23
- package/src/components/layout/AppContent/index.ts +0 -2
- package/src/components/layout/AppHeader/AppHeader.test.tsx +0 -26
- package/src/components/layout/AppHeader/AppHeader.tsx +0 -17
- package/src/components/layout/AppHeader/AppHeader.variants.ts +0 -21
- package/src/components/layout/AppHeader/AppHeaderActions.tsx +0 -13
- package/src/components/layout/AppHeader/AppHeaderNav.tsx +0 -13
- package/src/components/layout/AppHeader/AppHeaderTitle.tsx +0 -13
- package/src/components/layout/AppHeader/index.ts +0 -5
- package/src/components/layout/AppRail/AppRail.test.tsx +0 -50
- package/src/components/layout/AppRail/AppRail.tsx +0 -24
- package/src/components/layout/AppRail/AppRail.variants.ts +0 -31
- package/src/components/layout/AppRail/AppRailFooter.tsx +0 -13
- package/src/components/layout/AppRail/AppRailGroup.tsx +0 -13
- package/src/components/layout/AppRail/AppRailHeader.tsx +0 -13
- package/src/components/layout/AppRail/AppRailItem.tsx +0 -57
- package/src/components/layout/AppRail/index.ts +0 -5
- package/src/components/layout/AppShell/AppShell.context.tsx +0 -34
- package/src/components/layout/AppShell/AppShell.test.tsx +0 -61
- package/src/components/layout/AppShell/AppShell.tsx +0 -91
- package/src/components/layout/AppShell/AppShell.variants.ts +0 -21
- package/src/components/layout/AppShell/index.ts +0 -2
- package/src/components/layout/AppSidebar/AppSidebar.test.tsx +0 -69
- package/src/components/layout/AppSidebar/AppSidebar.tsx +0 -58
- package/src/components/layout/AppSidebar/AppSidebar.variants.ts +0 -41
- package/src/components/layout/AppSidebar/AppSidebarContent.tsx +0 -18
- package/src/components/layout/AppSidebar/AppSidebarFooter.tsx +0 -13
- package/src/components/layout/AppSidebar/AppSidebarGroup.tsx +0 -22
- package/src/components/layout/AppSidebar/AppSidebarHeader.tsx +0 -13
- package/src/components/layout/AppSidebar/AppSidebarItem.tsx +0 -54
- package/src/components/layout/AppSidebar/AppSidebarTrigger.tsx +0 -25
- package/src/components/layout/AppSidebar/index.ts +0 -7
- package/src/components/layout/CLAUDE.md +0 -112
- package/src/components/layout/Card/Card.test.tsx +0 -339
- package/src/components/layout/Card/Card.tsx +0 -102
- package/src/components/layout/Card/Card.types.ts +0 -52
- package/src/components/layout/Card/Card.variants.ts +0 -85
- package/src/components/layout/Card/README.md +0 -994
- package/src/components/layout/Card/index.ts +0 -3
- package/src/components/layout/Collapsible/Collapsible.test.tsx +0 -491
- package/src/components/layout/Collapsible/Collapsible.tsx +0 -50
- package/src/components/layout/Collapsible/Collapsible.types.ts +0 -26
- package/src/components/layout/Collapsible/Collapsible.variants.ts +0 -52
- package/src/components/layout/Collapsible/README.md +0 -885
- package/src/components/layout/Collapsible/index.ts +0 -3
- package/src/components/layout/Container/Container.test.tsx +0 -283
- package/src/components/layout/Container/Container.tsx +0 -25
- package/src/components/layout/Container/Container.types.ts +0 -36
- package/src/components/layout/Container/Container.variants.ts +0 -59
- package/src/components/layout/Container/README.md +0 -700
- package/src/components/layout/Container/index.ts +0 -3
- package/src/components/layout/Flex/Flex.test.tsx +0 -545
- package/src/components/layout/Flex/Flex.tsx +0 -52
- package/src/components/layout/Flex/Flex.types.ts +0 -61
- package/src/components/layout/Flex/Flex.variants.ts +0 -98
- package/src/components/layout/Flex/README.md +0 -812
- package/src/components/layout/Flex/index.ts +0 -3
- package/src/components/layout/Grid/Grid.test.tsx +0 -601
- package/src/components/layout/Grid/Grid.tsx +0 -61
- package/src/components/layout/Grid/Grid.types.ts +0 -47
- package/src/components/layout/Grid/Grid.variants.ts +0 -100
- package/src/components/layout/Grid/README.md +0 -762
- package/src/components/layout/Grid/index.ts +0 -3
- package/src/components/layout/PageContent/PageContent.tsx +0 -13
- package/src/components/layout/PageContent/index.ts +0 -1
- package/src/components/layout/PageHeader/PageHeader.tsx +0 -43
- package/src/components/layout/PageHeader/index.ts +0 -1
- package/src/components/layout/PageSection/PageSection.tsx +0 -28
- package/src/components/layout/PageSection/index.ts +0 -1
- package/src/components/layout/Panel/Panel.test.tsx +0 -427
- package/src/components/layout/Panel/Panel.tsx +0 -75
- package/src/components/layout/Panel/Panel.types.ts +0 -59
- package/src/components/layout/Panel/Panel.variants.ts +0 -94
- package/src/components/layout/Panel/README.md +0 -861
- package/src/components/layout/Panel/index.ts +0 -3
- package/src/components/layout/ResizablePanels/README.md +0 -369
- package/src/components/layout/ResizablePanels/ResizablePanels.test.tsx +0 -506
- package/src/components/layout/ResizablePanels/ResizablePanels.tsx +0 -64
- package/src/components/layout/ResizablePanels/ResizablePanels.types.ts +0 -41
- package/src/components/layout/ResizablePanels/ResizablePanels.variants.ts +0 -67
- package/src/components/layout/ResizablePanels/index.ts +0 -3
- package/src/components/layout/ResponsiveContainer/README.md +0 -267
- package/src/components/layout/ResponsiveContainer/ResponsiveContainer.test.tsx +0 -386
- package/src/components/layout/ResponsiveContainer/ResponsiveContainer.tsx +0 -54
- package/src/components/layout/ResponsiveContainer/ResponsiveContainer.types.ts +0 -43
- package/src/components/layout/ResponsiveContainer/ResponsiveContainer.variants.ts +0 -106
- package/src/components/layout/ResponsiveContainer/index.ts +0 -3
- package/src/components/layout/ScrollArea/README.md +0 -278
- package/src/components/layout/ScrollArea/ScrollArea.test.tsx +0 -352
- package/src/components/layout/ScrollArea/ScrollArea.tsx +0 -61
- package/src/components/layout/ScrollArea/ScrollArea.types.ts +0 -36
- package/src/components/layout/ScrollArea/ScrollArea.variants.ts +0 -85
- package/src/components/layout/ScrollArea/index.ts +0 -3
- package/src/components/layout/Section/README.md +0 -315
- package/src/components/layout/Section/Section.test.tsx +0 -293
- package/src/components/layout/Section/Section.tsx +0 -60
- package/src/components/layout/Section/Section.types.ts +0 -38
- package/src/components/layout/Section/Section.variants.ts +0 -45
- package/src/components/layout/Section/index.ts +0 -3
- package/src/components/layout/Sheet/README.md +0 -533
- package/src/components/layout/Sheet/Sheet.test.tsx +0 -702
- package/src/components/layout/Sheet/Sheet.tsx +0 -142
- package/src/components/layout/Sheet/Sheet.types.ts +0 -92
- package/src/components/layout/Sheet/Sheet.variants.ts +0 -98
- package/src/components/layout/Sheet/index.ts +0 -3
- package/src/components/layout/Stack/README.md +0 -346
- package/src/components/layout/Stack/Stack.test.tsx +0 -492
- package/src/components/layout/Stack/Stack.tsx +0 -58
- package/src/components/layout/Stack/Stack.types.ts +0 -58
- package/src/components/layout/Stack/Stack.variants.ts +0 -77
- package/src/components/layout/Stack/index.ts +0 -3
- package/src/components/layout/index.ts +0 -21
- package/src/components/navigation/Breadcrumb/Breadcrumb.test.tsx +0 -875
- package/src/components/navigation/Breadcrumb/Breadcrumb.tsx +0 -183
- package/src/components/navigation/Breadcrumb/Breadcrumb.types.ts +0 -49
- package/src/components/navigation/Breadcrumb/Breadcrumb.variants.ts +0 -63
- package/src/components/navigation/Breadcrumb/README.md +0 -608
- package/src/components/navigation/Breadcrumb/index.ts +0 -24
- package/src/components/navigation/CLAUDE.md +0 -118
- package/src/components/navigation/ContextMenu/ContextMenu.test.tsx +0 -881
- package/src/components/navigation/ContextMenu/ContextMenu.tsx +0 -304
- package/src/components/navigation/ContextMenu/ContextMenu.types.ts +0 -119
- package/src/components/navigation/ContextMenu/ContextMenu.variants.ts +0 -167
- package/src/components/navigation/ContextMenu/README.md +0 -660
- package/src/components/navigation/ContextMenu/index.ts +0 -34
- package/src/components/navigation/Drawer/Drawer.test.tsx +0 -721
- package/src/components/navigation/Drawer/Drawer.tsx +0 -178
- package/src/components/navigation/Drawer/Drawer.types.ts +0 -66
- package/src/components/navigation/Drawer/Drawer.variants.ts +0 -121
- package/src/components/navigation/Drawer/README.md +0 -723
- package/src/components/navigation/Drawer/index.ts +0 -24
- package/src/components/navigation/DropdownMenu/DropdownMenu.test.tsx +0 -881
- package/src/components/navigation/DropdownMenu/DropdownMenu.tsx +0 -305
- package/src/components/navigation/DropdownMenu/DropdownMenu.types.ts +0 -98
- package/src/components/navigation/DropdownMenu/DropdownMenu.variants.ts +0 -168
- package/src/components/navigation/DropdownMenu/README.md +0 -676
- package/src/components/navigation/DropdownMenu/index.ts +0 -33
- package/src/components/navigation/Header/Header.test.tsx +0 -418
- package/src/components/navigation/Header/Header.tsx +0 -133
- package/src/components/navigation/Header/Header.types.ts +0 -41
- package/src/components/navigation/Header/Header.variants.ts +0 -91
- package/src/components/navigation/Header/README.md +0 -567
- package/src/components/navigation/Header/index.ts +0 -14
- package/src/components/navigation/Menu/Menu.test.tsx +0 -658
- package/src/components/navigation/Menu/Menu.tsx +0 -247
- package/src/components/navigation/Menu/Menu.types.ts +0 -51
- package/src/components/navigation/Menu/Menu.variants.ts +0 -105
- package/src/components/navigation/Menu/README.md +0 -599
- package/src/components/navigation/Menu/index.ts +0 -17
- package/src/components/navigation/Menubar/Menubar.test.tsx +0 -1028
- package/src/components/navigation/Menubar/Menubar.tsx +0 -308
- package/src/components/navigation/Menubar/Menubar.types.ts +0 -104
- package/src/components/navigation/Menubar/Menubar.variants.ts +0 -182
- package/src/components/navigation/Menubar/README.md +0 -641
- package/src/components/navigation/Menubar/index.ts +0 -36
- package/src/components/navigation/MobileSidebar/MobileSidebar.test.tsx +0 -255
- package/src/components/navigation/MobileSidebar/MobileSidebar.tsx +0 -187
- package/src/components/navigation/MobileSidebar/MobileSidebar.types.ts +0 -62
- package/src/components/navigation/MobileSidebar/MobileSidebar.variants.ts +0 -79
- package/src/components/navigation/MobileSidebar/index.ts +0 -17
- package/src/components/navigation/Navbar/Navbar.test.tsx +0 -621
- package/src/components/navigation/Navbar/Navbar.tsx +0 -238
- package/src/components/navigation/Navbar/Navbar.types.ts +0 -69
- package/src/components/navigation/Navbar/Navbar.variants.ts +0 -176
- package/src/components/navigation/Navbar/README.md +0 -670
- package/src/components/navigation/Navbar/index.ts +0 -20
- package/src/components/navigation/NavigationMenu/NavigationMenu.test.tsx +0 -701
- package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +0 -211
- package/src/components/navigation/NavigationMenu/NavigationMenu.types.ts +0 -52
- package/src/components/navigation/NavigationMenu/NavigationMenu.variants.ts +0 -122
- package/src/components/navigation/NavigationMenu/README.md +0 -697
- package/src/components/navigation/NavigationMenu/index.ts +0 -23
- package/src/components/navigation/Pagination/Pagination.test.tsx +0 -619
- package/src/components/navigation/Pagination/Pagination.tsx +0 -185
- package/src/components/navigation/Pagination/Pagination.types.ts +0 -42
- package/src/components/navigation/Pagination/Pagination.variants.ts +0 -36
- package/src/components/navigation/Pagination/README.md +0 -635
- package/src/components/navigation/Pagination/index.ts +0 -17
- package/src/components/navigation/Sidebar/README.md +0 -628
- package/src/components/navigation/Sidebar/Sidebar.test.tsx +0 -1169
- package/src/components/navigation/Sidebar/Sidebar.tsx +0 -761
- package/src/components/navigation/Sidebar/Sidebar.types.ts +0 -168
- package/src/components/navigation/Sidebar/Sidebar.variants.ts +0 -302
- package/src/components/navigation/Sidebar/index.ts +0 -59
- package/src/components/navigation/SkipLinks/README.md +0 -512
- package/src/components/navigation/SkipLinks/SkipLinks.test.tsx +0 -445
- package/src/components/navigation/SkipLinks/SkipLinks.tsx +0 -103
- package/src/components/navigation/SkipLinks/SkipLinks.types.ts +0 -39
- package/src/components/navigation/SkipLinks/SkipLinks.variants.ts +0 -102
- package/src/components/navigation/SkipLinks/index.ts +0 -12
- package/src/components/navigation/TabNavigation/TabNavigation.tsx +0 -196
- package/src/components/navigation/TabNavigation/TabNavigation.types.ts +0 -85
- package/src/components/navigation/TabNavigation/TabNavigation.variants.ts +0 -95
- package/src/components/navigation/TabNavigation/index.ts +0 -10
- package/src/components/navigation/TabPanel/README.md +0 -437
- package/src/components/navigation/TabPanel/TabPanel.test.tsx +0 -566
- package/src/components/navigation/TabPanel/TabPanel.tsx +0 -95
- package/src/components/navigation/TabPanel/TabPanel.types.ts +0 -29
- package/src/components/navigation/TabPanel/TabPanel.variants.ts +0 -61
- package/src/components/navigation/TabPanel/index.ts +0 -13
- package/src/components/navigation/Tabs/README.md +0 -669
- package/src/components/navigation/Tabs/Tabs.test.tsx +0 -500
- package/src/components/navigation/Tabs/Tabs.tsx +0 -112
- package/src/components/navigation/Tabs/Tabs.types.ts +0 -38
- package/src/components/navigation/Tabs/Tabs.variants.ts +0 -80
- package/src/components/navigation/Tabs/index.ts +0 -14
- package/src/components/navigation/Toolbar/README.md +0 -650
- package/src/components/navigation/Toolbar/Toolbar.test.tsx +0 -620
- package/src/components/navigation/Toolbar/Toolbar.tsx +0 -133
- package/src/components/navigation/Toolbar/Toolbar.types.ts +0 -42
- package/src/components/navigation/Toolbar/Toolbar.variants.ts +0 -95
- package/src/components/navigation/Toolbar/index.ts +0 -17
- package/src/components/navigation/UserProfileDropdown/UserProfileDropdown.test.tsx +0 -257
- package/src/components/navigation/UserProfileDropdown/UserProfileDropdown.tsx +0 -267
- package/src/components/navigation/UserProfileDropdown/UserProfileDropdown.types.ts +0 -84
- package/src/components/navigation/UserProfileDropdown/UserProfileDropdown.variants.ts +0 -77
- package/src/components/navigation/UserProfileDropdown/index.ts +0 -17
- package/src/components/navigation/WorkspaceDropdown/WorkspaceDropdown.tsx +0 -190
- package/src/components/navigation/WorkspaceDropdown/WorkspaceDropdown.types.ts +0 -56
- package/src/components/navigation/WorkspaceDropdown/WorkspaceDropdown.variants.ts +0 -82
- package/src/components/navigation/WorkspaceDropdown/index.ts +0 -20
- package/src/components/navigation/index.ts +0 -17
- package/src/components/primitives/ArrowAnimated/ArrowAnimated.test.tsx +0 -240
- package/src/components/primitives/ArrowAnimated/ArrowAnimated.tsx +0 -96
- package/src/components/primitives/ArrowAnimated/ArrowAnimated.types.ts +0 -16
- package/src/components/primitives/ArrowAnimated/ArrowAnimated.variants.ts +0 -43
- package/src/components/primitives/ArrowAnimated/index.ts +0 -9
- package/src/components/primitives/AspectRatio/AspectRatio.test.tsx +0 -306
- package/src/components/primitives/AspectRatio/AspectRatio.tsx +0 -11
- package/src/components/primitives/AspectRatio/AspectRatio.types.ts +0 -57
- package/src/components/primitives/AspectRatio/AspectRatio.variants.ts +0 -110
- package/src/components/primitives/AspectRatio/README.md +0 -914
- package/src/components/primitives/AspectRatio/index.ts +0 -7
- package/src/components/primitives/Avatar/Avatar.test.tsx +0 -1311
- package/src/components/primitives/Avatar/Avatar.tsx +0 -159
- package/src/components/primitives/Avatar/Avatar.types.ts +0 -70
- package/src/components/primitives/Avatar/AvatarAddButton.tsx +0 -59
- package/src/components/primitives/Avatar/AvatarBadge.tsx +0 -84
- package/src/components/primitives/Avatar/AvatarGroup.test.tsx +0 -1377
- package/src/components/primitives/Avatar/AvatarGroup.tsx +0 -101
- package/src/components/primitives/Avatar/AvatarLabelGroup.tsx +0 -154
- package/src/components/primitives/Avatar/AvatarSkeleton.tsx +0 -76
- package/src/components/primitives/Avatar/AvatarStatus.tsx +0 -71
- package/src/components/primitives/Avatar/README.md +0 -1174
- package/src/components/primitives/Avatar/index.ts +0 -8
- package/src/components/primitives/Badge/Badge.test.tsx +0 -1146
- package/src/components/primitives/Badge/Badge.tsx +0 -389
- package/src/components/primitives/Badge/Badge.types.ts +0 -102
- package/src/components/primitives/Badge/README.md +0 -814
- package/src/components/primitives/Badge/index.ts +0 -2
- package/src/components/primitives/Button/Button.test.tsx +0 -626
- package/src/components/primitives/Button/Button.tsx +0 -299
- package/src/components/primitives/Button/Button.types.ts +0 -137
- package/src/components/primitives/Button/README.md +0 -1112
- package/src/components/primitives/Button/index.ts +0 -8
- package/src/components/primitives/ButtonGroup/ButtonGroup.test.tsx +0 -945
- package/src/components/primitives/ButtonGroup/ButtonGroup.tsx +0 -224
- package/src/components/primitives/ButtonGroup/ButtonGroup.types.ts +0 -133
- package/src/components/primitives/ButtonGroup/README.md +0 -945
- package/src/components/primitives/ButtonGroup/index.ts +0 -12
- package/src/components/primitives/CLAUDE.md +0 -108
- package/src/components/primitives/ConfirmButton/ConfirmButton.test.tsx +0 -929
- package/src/components/primitives/ConfirmButton/ConfirmButton.tsx +0 -298
- package/src/components/primitives/ConfirmButton/ConfirmButton.types.ts +0 -116
- package/src/components/primitives/ConfirmButton/README.md +0 -1059
- package/src/components/primitives/ConfirmButton/index.ts +0 -6
- package/src/components/primitives/Divider/Divider.test.tsx +0 -304
- package/src/components/primitives/Divider/Divider.tsx +0 -209
- package/src/components/primitives/Divider/Divider.types.ts +0 -74
- package/src/components/primitives/Divider/README.md +0 -839
- package/src/components/primitives/Divider/index.ts +0 -8
- package/src/components/primitives/Heading/Heading.test.tsx +0 -611
- package/src/components/primitives/Heading/Heading.tsx +0 -120
- package/src/components/primitives/Heading/Heading.types.ts +0 -61
- package/src/components/primitives/Heading/README.md +0 -820
- package/src/components/primitives/Heading/index.ts +0 -2
- package/src/components/primitives/Icon/Icon.test.tsx +0 -466
- package/src/components/primitives/Icon/Icon.tsx +0 -74
- package/src/components/primitives/Icon/Icon.types.ts +0 -61
- package/src/components/primitives/Icon/README.md +0 -759
- package/src/components/primitives/Icon/index.ts +0 -8
- package/src/components/primitives/Image/Image.test.tsx +0 -734
- package/src/components/primitives/Image/Image.tsx +0 -239
- package/src/components/primitives/Image/Image.types.ts +0 -75
- package/src/components/primitives/Image/README.md +0 -863
- package/src/components/primitives/Image/index.ts +0 -8
- package/src/components/primitives/Kbd/Kbd.test.tsx +0 -432
- package/src/components/primitives/Kbd/Kbd.tsx +0 -53
- package/src/components/primitives/Kbd/Kbd.types.ts +0 -55
- package/src/components/primitives/Kbd/Kbd.variants.ts +0 -33
- package/src/components/primitives/Kbd/README.md +0 -659
- package/src/components/primitives/Kbd/index.ts +0 -3
- package/src/components/primitives/Label/Label.test.tsx +0 -311
- package/src/components/primitives/Label/Label.tsx +0 -46
- package/src/components/primitives/Label/Label.types.ts +0 -28
- package/src/components/primitives/Label/README.md +0 -816
- package/src/components/primitives/Label/index.ts +0 -2
- package/src/components/primitives/Link/Link.test.tsx +0 -764
- package/src/components/primitives/Link/Link.tsx +0 -143
- package/src/components/primitives/Link/Link.types.ts +0 -85
- package/src/components/primitives/Link/README.md +0 -954
- package/src/components/primitives/Link/index.ts +0 -8
- package/src/components/primitives/Paragraph/Paragraph.test.tsx +0 -463
- package/src/components/primitives/Paragraph/Paragraph.tsx +0 -119
- package/src/components/primitives/Paragraph/Paragraph.types.ts +0 -81
- package/src/components/primitives/Paragraph/README.md +0 -812
- package/src/components/primitives/Paragraph/index.ts +0 -2
- package/src/components/primitives/ProgressBar/ProgressBar.test.tsx +0 -598
- package/src/components/primitives/ProgressBar/ProgressBar.tsx +0 -268
- package/src/components/primitives/ProgressBar/ProgressBar.types.ts +0 -127
- package/src/components/primitives/ProgressBar/ProgressBar.variants.ts +0 -111
- package/src/components/primitives/ProgressBar/README.md +0 -772
- package/src/components/primitives/ProgressBar/index.ts +0 -3
- package/src/components/primitives/ProgressCircle/ProgressCircle.test.tsx +0 -219
- package/src/components/primitives/ProgressCircle/ProgressCircle.tsx +0 -264
- package/src/components/primitives/ProgressCircle/ProgressCircle.types.ts +0 -152
- package/src/components/primitives/ProgressCircle/ProgressCircle.variants.ts +0 -140
- package/src/components/primitives/ProgressCircle/README.md +0 -763
- package/src/components/primitives/ProgressCircle/index.ts +0 -3
- package/src/components/primitives/SkeletonLoader/README.md +0 -792
- package/src/components/primitives/SkeletonLoader/SkeletonLoader.test.tsx +0 -382
- package/src/components/primitives/SkeletonLoader/SkeletonLoader.tsx +0 -45
- package/src/components/primitives/SkeletonLoader/SkeletonLoader.types.ts +0 -56
- package/src/components/primitives/SkeletonLoader/SkeletonLoader.variants.ts +0 -87
- package/src/components/primitives/SkeletonLoader/index.ts +0 -3
- package/src/components/primitives/Spacer/README.md +0 -804
- package/src/components/primitives/Spacer/Spacer.test.tsx +0 -363
- package/src/components/primitives/Spacer/Spacer.tsx +0 -147
- package/src/components/primitives/Spacer/Spacer.types.ts +0 -72
- package/src/components/primitives/Spacer/index.ts +0 -9
- package/src/components/primitives/Spinner/README.md +0 -767
- package/src/components/primitives/Spinner/Spinner.test.tsx +0 -289
- package/src/components/primitives/Spinner/Spinner.tsx +0 -101
- package/src/components/primitives/Spinner/Spinner.types.ts +0 -62
- package/src/components/primitives/Spinner/Spinner.variants.ts +0 -50
- package/src/components/primitives/Spinner/index.ts +0 -3
- package/src/components/primitives/SplitButton/README.md +0 -1142
- package/src/components/primitives/SplitButton/SplitButton.test.tsx +0 -1020
- package/src/components/primitives/SplitButton/SplitButton.tsx +0 -215
- package/src/components/primitives/SplitButton/SplitButton.types.ts +0 -114
- package/src/components/primitives/SplitButton/index.ts +0 -8
- package/src/components/primitives/StatusIndicator/README.md +0 -730
- package/src/components/primitives/StatusIndicator/StatusIndicator.test.tsx +0 -446
- package/src/components/primitives/StatusIndicator/StatusIndicator.tsx +0 -100
- package/src/components/primitives/StatusIndicator/StatusIndicator.types.ts +0 -39
- package/src/components/primitives/StatusIndicator/index.ts +0 -2
- package/src/components/primitives/Tag/README.md +0 -793
- package/src/components/primitives/Tag/Tag.test.tsx +0 -410
- package/src/components/primitives/Tag/Tag.tsx +0 -302
- package/src/components/primitives/Tag/Tag.types.ts +0 -112
- package/src/components/primitives/Tag/Tag.variants.ts +0 -144
- package/src/components/primitives/Tag/TagGroup.tsx +0 -89
- package/src/components/primitives/Tag/index.ts +0 -15
- package/src/components/primitives/Text/README.md +0 -849
- package/src/components/primitives/Text/Text.test.tsx +0 -371
- package/src/components/primitives/Text/Text.tsx +0 -89
- package/src/components/primitives/Text/Text.types.ts +0 -21
- package/src/components/primitives/Text/index.ts +0 -2
- package/src/components/primitives/Thumbnail/README.md +0 -800
- package/src/components/primitives/Thumbnail/Thumbnail.test.tsx +0 -657
- package/src/components/primitives/Thumbnail/Thumbnail.tsx +0 -141
- package/src/components/primitives/Thumbnail/Thumbnail.types.ts +0 -102
- package/src/components/primitives/Thumbnail/index.ts +0 -9
- package/src/components/primitives/Toggle/README.md +0 -232
- package/src/components/primitives/Toggle/Toggle.test.tsx +0 -630
- package/src/components/primitives/Toggle/Toggle.tsx +0 -174
- package/src/components/primitives/Toggle/Toggle.types.ts +0 -161
- package/src/components/primitives/Toggle/index.ts +0 -2
- package/src/components/primitives/index.ts +0 -26
- package/src/components/workflow/ApprovalFlow/ApprovalFlow.test.tsx +0 -607
- package/src/components/workflow/ApprovalFlow/ApprovalFlow.tsx +0 -522
- package/src/components/workflow/ApprovalFlow/ApprovalFlow.types.ts +0 -233
- package/src/components/workflow/ApprovalFlow/ApprovalFlow.variants.ts +0 -207
- package/src/components/workflow/ApprovalFlow/README.md +0 -450
- package/src/components/workflow/ApprovalFlow/index.ts +0 -38
- package/src/components/workflow/ApprovalStatus/ApprovalStatus.test.tsx +0 -316
- package/src/components/workflow/ApprovalStatus/ApprovalStatus.tsx +0 -342
- package/src/components/workflow/ApprovalStatus/ApprovalStatus.types.ts +0 -68
- package/src/components/workflow/ApprovalStatus/ApprovalStatus.variants.ts +0 -60
- package/src/components/workflow/ApprovalStatus/README.md +0 -359
- package/src/components/workflow/ApprovalStatus/index.ts +0 -7
- package/src/components/workflow/CLAUDE.md +0 -118
- package/src/components/workflow/CommentSystem/CommentSystem.test.tsx +0 -901
- package/src/components/workflow/CommentSystem/CommentSystem.tsx +0 -1014
- package/src/components/workflow/CommentSystem/CommentSystem.types.ts +0 -290
- package/src/components/workflow/CommentSystem/CommentSystem.variants.ts +0 -307
- package/src/components/workflow/CommentSystem/README.md +0 -478
- package/src/components/workflow/CommentSystem/index.ts +0 -37
- package/src/components/workflow/Dashboard/Dashboard.test.tsx +0 -586
- package/src/components/workflow/Dashboard/Dashboard.tsx +0 -447
- package/src/components/workflow/Dashboard/Dashboard.types.ts +0 -232
- package/src/components/workflow/Dashboard/Dashboard.variants.ts +0 -241
- package/src/components/workflow/Dashboard/README.md +0 -445
- package/src/components/workflow/Dashboard/index.ts +0 -39
- package/src/components/workflow/DashboardBuilder/DashboardBuilder.test.tsx +0 -460
- package/src/components/workflow/DashboardBuilder/DashboardBuilder.tsx +0 -944
- package/src/components/workflow/DashboardBuilder/DashboardBuilder.types.ts +0 -389
- package/src/components/workflow/DashboardBuilder/DashboardBuilder.variants.ts +0 -264
- package/src/components/workflow/DashboardBuilder/README.md +0 -489
- package/src/components/workflow/DashboardBuilder/index.ts +0 -61
- package/src/components/workflow/KanbanBoard/KanbanBoard.test.tsx +0 -445
- package/src/components/workflow/KanbanBoard/KanbanBoard.tsx +0 -806
- package/src/components/workflow/KanbanBoard/KanbanBoard.types.ts +0 -183
- package/src/components/workflow/KanbanBoard/KanbanBoard.variants.ts +0 -311
- package/src/components/workflow/KanbanBoard/README.md +0 -495
- package/src/components/workflow/KanbanBoard/index.ts +0 -40
- package/src/components/workflow/ProgressSteps/ProgressSteps.test.tsx +0 -318
- package/src/components/workflow/ProgressSteps/ProgressSteps.tsx +0 -350
- package/src/components/workflow/ProgressSteps/ProgressSteps.types.ts +0 -84
- package/src/components/workflow/ProgressSteps/ProgressSteps.variants.ts +0 -315
- package/src/components/workflow/ProgressSteps/README.md +0 -412
- package/src/components/workflow/ProgressSteps/index.ts +0 -20
- package/src/components/workflow/ReportGenerator/README.md +0 -530
- package/src/components/workflow/ReportGenerator/ReportGenerator.test.tsx +0 -723
- package/src/components/workflow/ReportGenerator/ReportGenerator.tsx +0 -889
- package/src/components/workflow/ReportGenerator/ReportGenerator.types.ts +0 -321
- package/src/components/workflow/ReportGenerator/ReportGenerator.variants.ts +0 -378
- package/src/components/workflow/ReportGenerator/index.ts +0 -44
- package/src/components/workflow/Stepper/README.md +0 -390
- package/src/components/workflow/Stepper/Stepper.test.tsx +0 -376
- package/src/components/workflow/Stepper/Stepper.tsx +0 -301
- package/src/components/workflow/Stepper/Stepper.types.ts +0 -73
- package/src/components/workflow/Stepper/Stepper.variants.ts +0 -194
- package/src/components/workflow/Stepper/index.ts +0 -16
- package/src/components/workflow/TaskCard/README.md +0 -343
- package/src/components/workflow/TaskCard/TaskCard.test.tsx +0 -375
- package/src/components/workflow/TaskCard/TaskCard.tsx +0 -312
- package/src/components/workflow/TaskCard/TaskCard.types.ts +0 -55
- package/src/components/workflow/TaskCard/TaskCard.variants.ts +0 -64
- package/src/components/workflow/TaskCard/index.ts +0 -14
- package/src/components/workflow/TaskList/README.md +0 -317
- package/src/components/workflow/TaskList/TaskList.test.tsx +0 -318
- package/src/components/workflow/TaskList/TaskList.tsx +0 -556
- package/src/components/workflow/TaskList/TaskList.types.ts +0 -78
- package/src/components/workflow/TaskList/TaskList.variants.ts +0 -143
- package/src/components/workflow/TaskList/index.ts +0 -19
- package/src/components/workflow/TaskStatus/README.md +0 -358
- package/src/components/workflow/TaskStatus/TaskStatus.test.tsx +0 -299
- package/src/components/workflow/TaskStatus/TaskStatus.tsx +0 -246
- package/src/components/workflow/TaskStatus/TaskStatus.types.ts +0 -65
- package/src/components/workflow/TaskStatus/TaskStatus.variants.ts +0 -145
- package/src/components/workflow/TaskStatus/index.ts +0 -24
- package/src/components/workflow/Wizard/README.md +0 -440
- package/src/components/workflow/Wizard/Wizard.test.tsx +0 -432
- package/src/components/workflow/Wizard/Wizard.tsx +0 -279
- package/src/components/workflow/Wizard/Wizard.types.ts +0 -61
- package/src/components/workflow/Wizard/Wizard.variants.ts +0 -105
- package/src/components/workflow/Wizard/index.ts +0 -9
- package/src/components/workflow/index.ts +0 -14
- package/src/hooks/index.ts +0 -4
- package/src/hooks/use-media-query.ts +0 -24
- package/src/hooks/use-mobile.ts +0 -30
- package/src/hooks/use-on-window-resize.ts +0 -27
- package/src/index.ts +0 -22
- package/src/lib/chart-colors.ts +0 -195
- package/src/lib/utils.ts +0 -6
- package/src/test/setup.ts +0 -125
- package/src/test/vitest.d.ts +0 -13
|
@@ -1,1684 +0,0 @@
|
|
|
1
|
-
import type { DateRange } from "../../advanced/Calendar"
|
|
2
|
-
import type { DateRangePreset } from "./DateRangePicker.types"
|
|
3
|
-
|
|
4
|
-
import { render, screen, waitFor, within } from "@testing-library/react"
|
|
5
|
-
import userEvent from "@testing-library/user-event"
|
|
6
|
-
import { axe, toHaveNoViolations } from "jest-axe"
|
|
7
|
-
// DateRangePicker/DateRangePicker.test.tsx
|
|
8
|
-
import * as React from "react"
|
|
9
|
-
import { beforeAll, describe, expect, it, vi } from "vitest"
|
|
10
|
-
|
|
11
|
-
import { DateRangePicker } from "./DateRangePicker"
|
|
12
|
-
import { DateRangePresets } from "./DateRangePresets"
|
|
13
|
-
import { defaultPresets } from "./presets"
|
|
14
|
-
|
|
15
|
-
expect.extend(toHaveNoViolations)
|
|
16
|
-
|
|
17
|
-
// Mock pointer capture methods for JSDOM (Radix Popover uses them)
|
|
18
|
-
beforeAll(() => {
|
|
19
|
-
Element.prototype.hasPointerCapture = vi.fn(() => false)
|
|
20
|
-
Element.prototype.setPointerCapture = vi.fn()
|
|
21
|
-
Element.prototype.releasePointerCapture = vi.fn()
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
// Helper to open the date range picker using click
|
|
25
|
-
async function openDateRangePicker(user: ReturnType<typeof userEvent.setup>) {
|
|
26
|
-
const trigger = screen.getByRole("combobox")
|
|
27
|
-
await user.click(trigger)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Helper to find a day button in the calendar
|
|
31
|
-
function findDayButton(container: HTMLElement, day: number): HTMLElement | null {
|
|
32
|
-
const buttons = container.querySelectorAll('button[data-day]')
|
|
33
|
-
for (const button of buttons) {
|
|
34
|
-
const dateStr = button.getAttribute('data-day')
|
|
35
|
-
if (dateStr && new Date(dateStr).getDate() === day) {
|
|
36
|
-
return button as HTMLElement
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return null
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Test dates
|
|
43
|
-
const testRange: DateRange = {
|
|
44
|
-
from: new Date(2024, 0, 10), // January 10, 2024
|
|
45
|
-
to: new Date(2024, 0, 20), // January 20, 2024
|
|
46
|
-
}
|
|
47
|
-
const minDate = new Date(2024, 0, 5) // January 5, 2024
|
|
48
|
-
const maxDate = new Date(2024, 0, 25) // January 25, 2024
|
|
49
|
-
|
|
50
|
-
// ============================================
|
|
51
|
-
// RENDERING TESTS
|
|
52
|
-
// ============================================
|
|
53
|
-
describe("DateRangePicker", () => {
|
|
54
|
-
describe("Rendering", () => {
|
|
55
|
-
it("renders correctly", () => {
|
|
56
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
57
|
-
expect(screen.getByRole("combobox")).toBeInTheDocument()
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
it("renders with custom className", () => {
|
|
61
|
-
render(<DateRangePicker aria-label="Select date range" className="custom-class" />)
|
|
62
|
-
const wrapper = screen.getByRole("combobox").closest('[data-slot="date-range-picker"]')
|
|
63
|
-
expect(wrapper).toHaveClass("custom-class")
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
it("renders with placeholder", () => {
|
|
67
|
-
render(<DateRangePicker aria-label="Select date range" placeholder="Pick a range" />)
|
|
68
|
-
expect(screen.getByText("Pick a range")).toBeInTheDocument()
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
it("renders with default value", () => {
|
|
72
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} />)
|
|
73
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 10, 2024")
|
|
74
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 20, 2024")
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
it("renders with controlled value", () => {
|
|
78
|
-
render(<DateRangePicker aria-label="Select date range" value={testRange} onChange={() => {}} />)
|
|
79
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 10, 2024")
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
it("has data-slot attribute on wrapper", () => {
|
|
83
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
84
|
-
const wrapper = screen.getByRole("combobox").closest('[data-slot="date-range-picker"]')
|
|
85
|
-
expect(wrapper).toHaveAttribute("data-slot", "date-range-picker")
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
it("has data-slot attribute on trigger", () => {
|
|
89
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
90
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("data-slot", "date-range-picker-trigger")
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
it("renders calendar icon", () => {
|
|
94
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
95
|
-
const trigger = screen.getByRole("combobox")
|
|
96
|
-
expect(trigger.querySelector("svg")).toBeInTheDocument()
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
it("renders with single calendar when numberOfMonths=1", async () => {
|
|
100
|
-
const user = userEvent.setup()
|
|
101
|
-
render(<DateRangePicker aria-label="Select date range" numberOfMonths={1} />)
|
|
102
|
-
|
|
103
|
-
await openDateRangePicker(user)
|
|
104
|
-
|
|
105
|
-
await waitFor(() => {
|
|
106
|
-
const calendar = document.querySelector('[data-slot="calendar"]')
|
|
107
|
-
expect(calendar).not.toHaveAttribute("data-multiple-months", "true")
|
|
108
|
-
})
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
it("renders with dual calendar by default", async () => {
|
|
112
|
-
const user = userEvent.setup()
|
|
113
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
114
|
-
|
|
115
|
-
await openDateRangePicker(user)
|
|
116
|
-
|
|
117
|
-
await waitFor(() => {
|
|
118
|
-
const calendar = document.querySelector('[data-slot="calendar"]')
|
|
119
|
-
expect(calendar).toHaveAttribute("data-multiple-months", "true")
|
|
120
|
-
})
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
it("renders with custom format", () => {
|
|
124
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} format="MM/dd/yyyy" />)
|
|
125
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("01/10/2024")
|
|
126
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("01/20/2024")
|
|
127
|
-
})
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
// ============================================
|
|
131
|
-
// STATE TESTS
|
|
132
|
-
// ============================================
|
|
133
|
-
describe("States", () => {
|
|
134
|
-
it("handles disabled state", () => {
|
|
135
|
-
render(<DateRangePicker disabled aria-label="Select date range" />)
|
|
136
|
-
expect(screen.getByRole("combobox")).toBeDisabled()
|
|
137
|
-
})
|
|
138
|
-
|
|
139
|
-
it("applies disabled styling", () => {
|
|
140
|
-
render(<DateRangePicker disabled aria-label="Select date range" />)
|
|
141
|
-
expect(screen.getByRole("combobox")).toHaveClass("disabled:opacity-50")
|
|
142
|
-
})
|
|
143
|
-
|
|
144
|
-
it("handles aria-invalid state", () => {
|
|
145
|
-
render(<DateRangePicker invalid aria-label="Select date range" />)
|
|
146
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("aria-invalid", "true")
|
|
147
|
-
})
|
|
148
|
-
|
|
149
|
-
it("handles required state", () => {
|
|
150
|
-
render(<DateRangePicker required aria-label="Select date range" />)
|
|
151
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("aria-required", "true")
|
|
152
|
-
})
|
|
153
|
-
|
|
154
|
-
it("shows placeholder when no value selected", () => {
|
|
155
|
-
render(<DateRangePicker aria-label="Select date range" placeholder="Choose range" />)
|
|
156
|
-
expect(screen.getByText("Choose range")).toBeInTheDocument()
|
|
157
|
-
})
|
|
158
|
-
|
|
159
|
-
it("shows selected range instead of placeholder", () => {
|
|
160
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} placeholder="Choose range" />)
|
|
161
|
-
expect(screen.queryByText("Choose range")).not.toBeInTheDocument()
|
|
162
|
-
})
|
|
163
|
-
|
|
164
|
-
it("applies muted color when no range selected", () => {
|
|
165
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
166
|
-
expect(screen.getByRole("combobox")).toHaveClass("text-muted-foreground")
|
|
167
|
-
})
|
|
168
|
-
|
|
169
|
-
it("removes muted color when range is selected", () => {
|
|
170
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} />)
|
|
171
|
-
expect(screen.getByRole("combobox")).not.toHaveClass("text-muted-foreground")
|
|
172
|
-
})
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
// ============================================
|
|
176
|
-
// RANGE SELECTION TESTS
|
|
177
|
-
// ============================================
|
|
178
|
-
describe("Range Selection", () => {
|
|
179
|
-
it("opens calendar when trigger is clicked", async () => {
|
|
180
|
-
const user = userEvent.setup()
|
|
181
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
182
|
-
|
|
183
|
-
await openDateRangePicker(user)
|
|
184
|
-
|
|
185
|
-
await waitFor(() => {
|
|
186
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
187
|
-
})
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
it("shows calendar when opened", async () => {
|
|
191
|
-
const user = userEvent.setup()
|
|
192
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} />)
|
|
193
|
-
|
|
194
|
-
await openDateRangePicker(user)
|
|
195
|
-
|
|
196
|
-
await waitFor(() => {
|
|
197
|
-
const dialog = screen.getByRole("dialog")
|
|
198
|
-
expect(dialog.querySelector('[data-slot="calendar"]')).toBeInTheDocument()
|
|
199
|
-
})
|
|
200
|
-
})
|
|
201
|
-
|
|
202
|
-
it("selects start date on first click", async () => {
|
|
203
|
-
const user = userEvent.setup()
|
|
204
|
-
const handleChange = vi.fn()
|
|
205
|
-
render(<DateRangePicker aria-label="Select date range" onChange={handleChange} />)
|
|
206
|
-
|
|
207
|
-
await openDateRangePicker(user)
|
|
208
|
-
|
|
209
|
-
await waitFor(() => {
|
|
210
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
211
|
-
})
|
|
212
|
-
|
|
213
|
-
const dialog = screen.getByRole("dialog")
|
|
214
|
-
const day15Button = findDayButton(dialog, 15)
|
|
215
|
-
await user.click(day15Button as Element)
|
|
216
|
-
|
|
217
|
-
expect(handleChange).toHaveBeenCalled()
|
|
218
|
-
const range = handleChange.mock.calls[0]?.[0] as DateRange
|
|
219
|
-
expect(range.from).toBeInstanceOf(Date)
|
|
220
|
-
})
|
|
221
|
-
|
|
222
|
-
it("selects end date on second click", async () => {
|
|
223
|
-
const user = userEvent.setup()
|
|
224
|
-
const handleChange = vi.fn()
|
|
225
|
-
render(<DateRangePicker aria-label="Select date range" onChange={handleChange} />)
|
|
226
|
-
|
|
227
|
-
await openDateRangePicker(user)
|
|
228
|
-
|
|
229
|
-
await waitFor(() => {
|
|
230
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
231
|
-
})
|
|
232
|
-
|
|
233
|
-
const dialog = screen.getByRole("dialog")
|
|
234
|
-
const day10Button = findDayButton(dialog, 10)
|
|
235
|
-
await user.click(day10Button as Element)
|
|
236
|
-
|
|
237
|
-
const day20Button = findDayButton(dialog, 20)
|
|
238
|
-
await user.click(day20Button as Element)
|
|
239
|
-
|
|
240
|
-
expect(handleChange).toHaveBeenCalledTimes(2)
|
|
241
|
-
const range = handleChange.mock.calls[1]?.[0] as DateRange
|
|
242
|
-
expect(range.from).toBeInstanceOf(Date)
|
|
243
|
-
expect(range.to).toBeInstanceOf(Date)
|
|
244
|
-
})
|
|
245
|
-
|
|
246
|
-
it("handles selecting same day for start and end", async () => {
|
|
247
|
-
const user = userEvent.setup()
|
|
248
|
-
const handleChange = vi.fn()
|
|
249
|
-
render(<DateRangePicker aria-label="Select date range" onChange={handleChange} />)
|
|
250
|
-
|
|
251
|
-
await openDateRangePicker(user)
|
|
252
|
-
|
|
253
|
-
await waitFor(() => {
|
|
254
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
255
|
-
})
|
|
256
|
-
|
|
257
|
-
const dialog = screen.getByRole("dialog")
|
|
258
|
-
const day15Button = findDayButton(dialog, 15)
|
|
259
|
-
await user.click(day15Button as Element)
|
|
260
|
-
await user.click(day15Button as Element)
|
|
261
|
-
|
|
262
|
-
expect(handleChange).toHaveBeenCalled()
|
|
263
|
-
})
|
|
264
|
-
|
|
265
|
-
it("allows reverse selection (end before start)", async () => {
|
|
266
|
-
const user = userEvent.setup()
|
|
267
|
-
const handleChange = vi.fn()
|
|
268
|
-
render(<DateRangePicker aria-label="Select date range" onChange={handleChange} />)
|
|
269
|
-
|
|
270
|
-
await openDateRangePicker(user)
|
|
271
|
-
|
|
272
|
-
await waitFor(() => {
|
|
273
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
274
|
-
})
|
|
275
|
-
|
|
276
|
-
const dialog = screen.getByRole("dialog")
|
|
277
|
-
// Select day 20 first
|
|
278
|
-
const day20Button = findDayButton(dialog, 20)
|
|
279
|
-
await user.click(day20Button as Element)
|
|
280
|
-
|
|
281
|
-
// Then select day 10
|
|
282
|
-
const day10Button = findDayButton(dialog, 10)
|
|
283
|
-
await user.click(day10Button as Element)
|
|
284
|
-
|
|
285
|
-
expect(handleChange).toHaveBeenCalled()
|
|
286
|
-
})
|
|
287
|
-
|
|
288
|
-
it("displays partial range (only start date)", () => {
|
|
289
|
-
const partialRange: DateRange = { from: new Date(2024, 0, 15) }
|
|
290
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={partialRange} />)
|
|
291
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 15, 2024")
|
|
292
|
-
})
|
|
293
|
-
|
|
294
|
-
it("clears selection when new start date is picked after complete range", async () => {
|
|
295
|
-
const user = userEvent.setup()
|
|
296
|
-
const handleChange = vi.fn()
|
|
297
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} onChange={handleChange} />)
|
|
298
|
-
|
|
299
|
-
await openDateRangePicker(user)
|
|
300
|
-
|
|
301
|
-
await waitFor(() => {
|
|
302
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
303
|
-
})
|
|
304
|
-
|
|
305
|
-
// Click a new day to start a new selection
|
|
306
|
-
const dialog = screen.getByRole("dialog")
|
|
307
|
-
const day5Button = findDayButton(dialog, 5)
|
|
308
|
-
await user.click(day5Button as Element)
|
|
309
|
-
|
|
310
|
-
expect(handleChange).toHaveBeenCalled()
|
|
311
|
-
})
|
|
312
|
-
})
|
|
313
|
-
|
|
314
|
-
// ============================================
|
|
315
|
-
// PRESETS TESTS
|
|
316
|
-
// ============================================
|
|
317
|
-
describe("Presets", () => {
|
|
318
|
-
it("shows presets sidebar by default", async () => {
|
|
319
|
-
const user = userEvent.setup()
|
|
320
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
321
|
-
|
|
322
|
-
await openDateRangePicker(user)
|
|
323
|
-
|
|
324
|
-
await waitFor(() => {
|
|
325
|
-
const presets = document.querySelector('[data-slot="date-range-presets"]')
|
|
326
|
-
expect(presets).toBeInTheDocument()
|
|
327
|
-
})
|
|
328
|
-
})
|
|
329
|
-
|
|
330
|
-
it("hides presets when showPresets is false", async () => {
|
|
331
|
-
const user = userEvent.setup()
|
|
332
|
-
render(<DateRangePicker aria-label="Select date range" showPresets={false} />)
|
|
333
|
-
|
|
334
|
-
await openDateRangePicker(user)
|
|
335
|
-
|
|
336
|
-
await waitFor(() => {
|
|
337
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
338
|
-
})
|
|
339
|
-
|
|
340
|
-
const presets = document.querySelector('[data-slot="date-range-presets"]')
|
|
341
|
-
expect(presets).not.toBeInTheDocument()
|
|
342
|
-
})
|
|
343
|
-
|
|
344
|
-
it("displays all default presets", async () => {
|
|
345
|
-
const user = userEvent.setup()
|
|
346
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
347
|
-
|
|
348
|
-
await openDateRangePicker(user)
|
|
349
|
-
|
|
350
|
-
await waitFor(() => {
|
|
351
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
352
|
-
})
|
|
353
|
-
|
|
354
|
-
// Check some default presets exist (role="option" because they're in a listbox)
|
|
355
|
-
expect(screen.getByRole("option", { name: "Today" })).toBeInTheDocument()
|
|
356
|
-
expect(screen.getByRole("option", { name: "Yesterday" })).toBeInTheDocument()
|
|
357
|
-
expect(screen.getByRole("option", { name: "Last 7 days" })).toBeInTheDocument()
|
|
358
|
-
})
|
|
359
|
-
|
|
360
|
-
it("accepts custom presets", async () => {
|
|
361
|
-
const user = userEvent.setup()
|
|
362
|
-
const customPresets: DateRangePreset[] = [
|
|
363
|
-
{ label: "Custom Range", getValue: () => testRange },
|
|
364
|
-
]
|
|
365
|
-
render(<DateRangePicker aria-label="Select date range" presets={customPresets} />)
|
|
366
|
-
|
|
367
|
-
await openDateRangePicker(user)
|
|
368
|
-
|
|
369
|
-
await waitFor(() => {
|
|
370
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
371
|
-
})
|
|
372
|
-
|
|
373
|
-
expect(screen.getByRole("option", { name: "Custom Range" })).toBeInTheDocument()
|
|
374
|
-
expect(screen.queryByRole("option", { name: "Today" })).not.toBeInTheDocument()
|
|
375
|
-
})
|
|
376
|
-
|
|
377
|
-
it("applies preset when clicked", async () => {
|
|
378
|
-
const user = userEvent.setup()
|
|
379
|
-
const handleChange = vi.fn()
|
|
380
|
-
render(<DateRangePicker aria-label="Select date range" onChange={handleChange} />)
|
|
381
|
-
|
|
382
|
-
await openDateRangePicker(user)
|
|
383
|
-
|
|
384
|
-
await waitFor(() => {
|
|
385
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
386
|
-
})
|
|
387
|
-
|
|
388
|
-
await user.click(screen.getByRole("option", { name: "Today" }))
|
|
389
|
-
|
|
390
|
-
expect(handleChange).toHaveBeenCalled()
|
|
391
|
-
const range = handleChange.mock.calls[0]?.[0] as DateRange
|
|
392
|
-
expect(range.from).toBeInstanceOf(Date)
|
|
393
|
-
expect(range.to).toBeInstanceOf(Date)
|
|
394
|
-
})
|
|
395
|
-
|
|
396
|
-
it("closes calendar after preset selection (no confirmation mode)", async () => {
|
|
397
|
-
const user = userEvent.setup()
|
|
398
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
399
|
-
|
|
400
|
-
await openDateRangePicker(user)
|
|
401
|
-
|
|
402
|
-
await waitFor(() => {
|
|
403
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
404
|
-
})
|
|
405
|
-
|
|
406
|
-
await user.click(screen.getByRole("option", { name: "Today" }))
|
|
407
|
-
|
|
408
|
-
await waitFor(() => {
|
|
409
|
-
expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
|
|
410
|
-
})
|
|
411
|
-
})
|
|
412
|
-
|
|
413
|
-
it("highlights selected preset", async () => {
|
|
414
|
-
const user = userEvent.setup()
|
|
415
|
-
render(<DateRangePicker requireConfirmation aria-label="Select date range" />)
|
|
416
|
-
|
|
417
|
-
await openDateRangePicker(user)
|
|
418
|
-
|
|
419
|
-
await waitFor(() => {
|
|
420
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
421
|
-
})
|
|
422
|
-
|
|
423
|
-
const todayPreset = screen.getByRole("option", { name: "Today" })
|
|
424
|
-
await user.click(todayPreset)
|
|
425
|
-
|
|
426
|
-
// Check that preset has data-selected attribute
|
|
427
|
-
expect(todayPreset).toHaveAttribute("data-selected")
|
|
428
|
-
})
|
|
429
|
-
|
|
430
|
-
it("hides presets when empty array provided", async () => {
|
|
431
|
-
const user = userEvent.setup()
|
|
432
|
-
render(<DateRangePicker aria-label="Select date range" presets={[]} />)
|
|
433
|
-
|
|
434
|
-
await openDateRangePicker(user)
|
|
435
|
-
|
|
436
|
-
await waitFor(() => {
|
|
437
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
438
|
-
})
|
|
439
|
-
|
|
440
|
-
const presets = document.querySelector('[data-slot="date-range-presets"]')
|
|
441
|
-
expect(presets).not.toBeInTheDocument()
|
|
442
|
-
})
|
|
443
|
-
})
|
|
444
|
-
|
|
445
|
-
// ============================================
|
|
446
|
-
// CONFIRMATION MODE TESTS
|
|
447
|
-
// ============================================
|
|
448
|
-
describe("Confirmation Mode", () => {
|
|
449
|
-
it("shows Apply and Cancel buttons when requireConfirmation is true", async () => {
|
|
450
|
-
const user = userEvent.setup()
|
|
451
|
-
render(<DateRangePicker requireConfirmation aria-label="Select date range" />)
|
|
452
|
-
|
|
453
|
-
await openDateRangePicker(user)
|
|
454
|
-
|
|
455
|
-
await waitFor(() => {
|
|
456
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
457
|
-
})
|
|
458
|
-
|
|
459
|
-
expect(screen.getByRole("button", { name: "Apply" })).toBeInTheDocument()
|
|
460
|
-
expect(screen.getByRole("button", { name: "Cancel" })).toBeInTheDocument()
|
|
461
|
-
})
|
|
462
|
-
|
|
463
|
-
it("does not show Apply/Cancel buttons by default", async () => {
|
|
464
|
-
const user = userEvent.setup()
|
|
465
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
466
|
-
|
|
467
|
-
await openDateRangePicker(user)
|
|
468
|
-
|
|
469
|
-
await waitFor(() => {
|
|
470
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
471
|
-
})
|
|
472
|
-
|
|
473
|
-
expect(screen.queryByRole("button", { name: "Apply" })).not.toBeInTheDocument()
|
|
474
|
-
expect(screen.queryByRole("button", { name: "Cancel" })).not.toBeInTheDocument()
|
|
475
|
-
})
|
|
476
|
-
|
|
477
|
-
it("does not call onChange until Apply is clicked", async () => {
|
|
478
|
-
const user = userEvent.setup()
|
|
479
|
-
const handleChange = vi.fn()
|
|
480
|
-
render(<DateRangePicker requireConfirmation aria-label="Select date range" onChange={handleChange} />)
|
|
481
|
-
|
|
482
|
-
await openDateRangePicker(user)
|
|
483
|
-
|
|
484
|
-
await waitFor(() => {
|
|
485
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
486
|
-
})
|
|
487
|
-
|
|
488
|
-
// Select a preset
|
|
489
|
-
await user.click(screen.getByRole("option", { name: "Today" }))
|
|
490
|
-
|
|
491
|
-
// onChange should not have been called yet
|
|
492
|
-
expect(handleChange).not.toHaveBeenCalled()
|
|
493
|
-
})
|
|
494
|
-
|
|
495
|
-
it("calls onChange when Apply is clicked", async () => {
|
|
496
|
-
const user = userEvent.setup()
|
|
497
|
-
const handleChange = vi.fn()
|
|
498
|
-
render(<DateRangePicker requireConfirmation aria-label="Select date range" onChange={handleChange} />)
|
|
499
|
-
|
|
500
|
-
await openDateRangePicker(user)
|
|
501
|
-
|
|
502
|
-
await waitFor(() => {
|
|
503
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
504
|
-
})
|
|
505
|
-
|
|
506
|
-
await user.click(screen.getByRole("option", { name: "Today" }))
|
|
507
|
-
await user.click(screen.getByRole("button", { name: "Apply" }))
|
|
508
|
-
|
|
509
|
-
expect(handleChange).toHaveBeenCalled()
|
|
510
|
-
})
|
|
511
|
-
|
|
512
|
-
it("reverts changes when Cancel is clicked", async () => {
|
|
513
|
-
const user = userEvent.setup()
|
|
514
|
-
const handleChange = vi.fn()
|
|
515
|
-
render(<DateRangePicker requireConfirmation aria-label="Select date range" defaultValue={testRange} onChange={handleChange} />)
|
|
516
|
-
|
|
517
|
-
await openDateRangePicker(user)
|
|
518
|
-
|
|
519
|
-
await waitFor(() => {
|
|
520
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
521
|
-
})
|
|
522
|
-
|
|
523
|
-
await user.click(screen.getByRole("option", { name: "Today" }))
|
|
524
|
-
await user.click(screen.getByRole("button", { name: "Cancel" }))
|
|
525
|
-
|
|
526
|
-
// onChange should not have been called
|
|
527
|
-
expect(handleChange).not.toHaveBeenCalled()
|
|
528
|
-
|
|
529
|
-
// Dialog should be closed
|
|
530
|
-
await waitFor(() => {
|
|
531
|
-
expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
|
|
532
|
-
})
|
|
533
|
-
|
|
534
|
-
// Original value should be preserved
|
|
535
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 10, 2024")
|
|
536
|
-
})
|
|
537
|
-
|
|
538
|
-
it("closes calendar after Apply", async () => {
|
|
539
|
-
const user = userEvent.setup()
|
|
540
|
-
render(<DateRangePicker requireConfirmation aria-label="Select date range" />)
|
|
541
|
-
|
|
542
|
-
await openDateRangePicker(user)
|
|
543
|
-
|
|
544
|
-
await waitFor(() => {
|
|
545
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
546
|
-
})
|
|
547
|
-
|
|
548
|
-
await user.click(screen.getByRole("option", { name: "Today" }))
|
|
549
|
-
await user.click(screen.getByRole("button", { name: "Apply" }))
|
|
550
|
-
|
|
551
|
-
await waitFor(() => {
|
|
552
|
-
expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
|
|
553
|
-
})
|
|
554
|
-
})
|
|
555
|
-
|
|
556
|
-
it("disables Apply button when no selection", async () => {
|
|
557
|
-
const user = userEvent.setup()
|
|
558
|
-
render(<DateRangePicker requireConfirmation aria-label="Select date range" />)
|
|
559
|
-
|
|
560
|
-
await openDateRangePicker(user)
|
|
561
|
-
|
|
562
|
-
await waitFor(() => {
|
|
563
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
564
|
-
})
|
|
565
|
-
|
|
566
|
-
expect(screen.getByRole("button", { name: "Apply" })).toBeDisabled()
|
|
567
|
-
})
|
|
568
|
-
|
|
569
|
-
it("reverts changes when closing without Apply", async () => {
|
|
570
|
-
const user = userEvent.setup()
|
|
571
|
-
const handleChange = vi.fn()
|
|
572
|
-
render(<DateRangePicker requireConfirmation aria-label="Select date range" defaultValue={testRange} onChange={handleChange} />)
|
|
573
|
-
|
|
574
|
-
await openDateRangePicker(user)
|
|
575
|
-
|
|
576
|
-
await waitFor(() => {
|
|
577
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
578
|
-
})
|
|
579
|
-
|
|
580
|
-
await user.click(screen.getByRole("option", { name: "Today" }))
|
|
581
|
-
await user.keyboard("{Escape}")
|
|
582
|
-
|
|
583
|
-
expect(handleChange).not.toHaveBeenCalled()
|
|
584
|
-
})
|
|
585
|
-
|
|
586
|
-
it("has data-slot on footer", async () => {
|
|
587
|
-
const user = userEvent.setup()
|
|
588
|
-
render(<DateRangePicker requireConfirmation aria-label="Select date range" />)
|
|
589
|
-
|
|
590
|
-
await openDateRangePicker(user)
|
|
591
|
-
|
|
592
|
-
await waitFor(() => {
|
|
593
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
594
|
-
})
|
|
595
|
-
|
|
596
|
-
const footer = document.querySelector('[data-slot="date-range-picker-footer"]')
|
|
597
|
-
expect(footer).toBeInTheDocument()
|
|
598
|
-
})
|
|
599
|
-
})
|
|
600
|
-
|
|
601
|
-
// ============================================
|
|
602
|
-
// CONSTRAINTS TESTS
|
|
603
|
-
// ============================================
|
|
604
|
-
describe("Constraints", () => {
|
|
605
|
-
it("disables dates before minDate", async () => {
|
|
606
|
-
const user = userEvent.setup()
|
|
607
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} minDate={minDate} />)
|
|
608
|
-
|
|
609
|
-
await openDateRangePicker(user)
|
|
610
|
-
|
|
611
|
-
await waitFor(() => {
|
|
612
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
613
|
-
})
|
|
614
|
-
|
|
615
|
-
const dialog = screen.getByRole("dialog")
|
|
616
|
-
const day3Button = findDayButton(dialog, 3)
|
|
617
|
-
expect(day3Button).toBeDisabled()
|
|
618
|
-
})
|
|
619
|
-
|
|
620
|
-
it("disables dates after maxDate", async () => {
|
|
621
|
-
const user = userEvent.setup()
|
|
622
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} maxDate={maxDate} />)
|
|
623
|
-
|
|
624
|
-
await openDateRangePicker(user)
|
|
625
|
-
|
|
626
|
-
await waitFor(() => {
|
|
627
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
628
|
-
})
|
|
629
|
-
|
|
630
|
-
const dialog = screen.getByRole("dialog")
|
|
631
|
-
const day30Button = findDayButton(dialog, 30)
|
|
632
|
-
expect(day30Button).toBeDisabled()
|
|
633
|
-
})
|
|
634
|
-
|
|
635
|
-
it("allows dates within range", async () => {
|
|
636
|
-
const user = userEvent.setup()
|
|
637
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} maxDate={maxDate} minDate={minDate} />)
|
|
638
|
-
|
|
639
|
-
await openDateRangePicker(user)
|
|
640
|
-
|
|
641
|
-
await waitFor(() => {
|
|
642
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
643
|
-
})
|
|
644
|
-
|
|
645
|
-
const dialog = screen.getByRole("dialog")
|
|
646
|
-
const day15Button = findDayButton(dialog, 15)
|
|
647
|
-
expect(day15Button).not.toBeDisabled()
|
|
648
|
-
})
|
|
649
|
-
|
|
650
|
-
it("respects disabledDates function", async () => {
|
|
651
|
-
const user = userEvent.setup()
|
|
652
|
-
render(
|
|
653
|
-
<DateRangePicker
|
|
654
|
-
aria-label="Select date range"
|
|
655
|
-
defaultValue={testRange}
|
|
656
|
-
disabledDates={(date) => date.getDay() === 0 || date.getDay() === 6}
|
|
657
|
-
/>
|
|
658
|
-
)
|
|
659
|
-
|
|
660
|
-
await openDateRangePicker(user)
|
|
661
|
-
|
|
662
|
-
await waitFor(() => {
|
|
663
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
664
|
-
})
|
|
665
|
-
|
|
666
|
-
const dialog = screen.getByRole("dialog")
|
|
667
|
-
// January 13, 2024 is a Saturday
|
|
668
|
-
const saturdayButton = findDayButton(dialog, 13)
|
|
669
|
-
expect(saturdayButton).toBeDisabled()
|
|
670
|
-
})
|
|
671
|
-
|
|
672
|
-
it("combines minDate, maxDate, and disabledDates", async () => {
|
|
673
|
-
const user = userEvent.setup()
|
|
674
|
-
render(
|
|
675
|
-
<DateRangePicker
|
|
676
|
-
aria-label="Select date range"
|
|
677
|
-
defaultValue={testRange}
|
|
678
|
-
disabledDates={(date) => date.getDate() === 16}
|
|
679
|
-
maxDate={maxDate}
|
|
680
|
-
minDate={minDate}
|
|
681
|
-
/>
|
|
682
|
-
)
|
|
683
|
-
|
|
684
|
-
await openDateRangePicker(user)
|
|
685
|
-
|
|
686
|
-
await waitFor(() => {
|
|
687
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
688
|
-
})
|
|
689
|
-
|
|
690
|
-
const dialog = screen.getByRole("dialog")
|
|
691
|
-
|
|
692
|
-
// Day 3 disabled by minDate
|
|
693
|
-
const day3Button = findDayButton(dialog, 3)
|
|
694
|
-
expect(day3Button).toBeDisabled()
|
|
695
|
-
|
|
696
|
-
// Day 16 disabled by function
|
|
697
|
-
const day16Button = findDayButton(dialog, 16)
|
|
698
|
-
expect(day16Button).toBeDisabled()
|
|
699
|
-
|
|
700
|
-
// Day 15 should be enabled
|
|
701
|
-
const day15Button = findDayButton(dialog, 15)
|
|
702
|
-
expect(day15Button).not.toBeDisabled()
|
|
703
|
-
})
|
|
704
|
-
})
|
|
705
|
-
|
|
706
|
-
// ============================================
|
|
707
|
-
// ACCESSIBILITY TESTS
|
|
708
|
-
// ============================================
|
|
709
|
-
describe("Accessibility", () => {
|
|
710
|
-
it("has no accessibility violations", async () => {
|
|
711
|
-
const { container } = render(
|
|
712
|
-
<label>
|
|
713
|
-
Date range
|
|
714
|
-
<DateRangePicker id="daterange" />
|
|
715
|
-
</label>
|
|
716
|
-
)
|
|
717
|
-
const results = await axe(container)
|
|
718
|
-
expect(results).toHaveNoViolations()
|
|
719
|
-
})
|
|
720
|
-
|
|
721
|
-
it("trigger has combobox role", () => {
|
|
722
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
723
|
-
expect(screen.getByRole("combobox")).toBeInTheDocument()
|
|
724
|
-
})
|
|
725
|
-
|
|
726
|
-
it("trigger has aria-haspopup", () => {
|
|
727
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
728
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("aria-haspopup", "dialog")
|
|
729
|
-
})
|
|
730
|
-
|
|
731
|
-
it("trigger has aria-expanded=false when closed", () => {
|
|
732
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
733
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("aria-expanded", "false")
|
|
734
|
-
})
|
|
735
|
-
|
|
736
|
-
it("trigger has aria-expanded=true when open", async () => {
|
|
737
|
-
const user = userEvent.setup()
|
|
738
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
739
|
-
|
|
740
|
-
await openDateRangePicker(user)
|
|
741
|
-
|
|
742
|
-
await waitFor(() => {
|
|
743
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("aria-expanded", "true")
|
|
744
|
-
})
|
|
745
|
-
})
|
|
746
|
-
|
|
747
|
-
it("supports aria-label prop", () => {
|
|
748
|
-
render(<DateRangePicker aria-label="Select your dates" />)
|
|
749
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("aria-label", "Select your dates")
|
|
750
|
-
})
|
|
751
|
-
|
|
752
|
-
it("supports aria-labelledby", () => {
|
|
753
|
-
render(
|
|
754
|
-
<>
|
|
755
|
-
<span id="my-label">Pick dates</span>
|
|
756
|
-
<DateRangePicker aria-labelledby="my-label" />
|
|
757
|
-
</>
|
|
758
|
-
)
|
|
759
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("aria-labelledby", "my-label")
|
|
760
|
-
})
|
|
761
|
-
|
|
762
|
-
it("supports aria-describedby", () => {
|
|
763
|
-
render(
|
|
764
|
-
<>
|
|
765
|
-
<DateRangePicker aria-describedby="help" aria-label="Select date range" />
|
|
766
|
-
<span id="help">Select a start and end date</span>
|
|
767
|
-
</>
|
|
768
|
-
)
|
|
769
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("aria-describedby", "help")
|
|
770
|
-
})
|
|
771
|
-
|
|
772
|
-
it("clear button has accessible label", () => {
|
|
773
|
-
render(<DateRangePicker clearable aria-label="Select date range" defaultValue={testRange} />)
|
|
774
|
-
expect(screen.getByLabelText("Clear date range")).toBeInTheDocument()
|
|
775
|
-
})
|
|
776
|
-
|
|
777
|
-
it("presets are keyboard accessible", async () => {
|
|
778
|
-
const user = userEvent.setup()
|
|
779
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
780
|
-
|
|
781
|
-
await openDateRangePicker(user)
|
|
782
|
-
|
|
783
|
-
await waitFor(() => {
|
|
784
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
785
|
-
})
|
|
786
|
-
|
|
787
|
-
// Tab to presets
|
|
788
|
-
await user.tab()
|
|
789
|
-
|
|
790
|
-
const focusedPreset = document.activeElement
|
|
791
|
-
expect(focusedPreset).toHaveRole("option")
|
|
792
|
-
})
|
|
793
|
-
})
|
|
794
|
-
|
|
795
|
-
// ============================================
|
|
796
|
-
// KEYBOARD NAVIGATION TESTS
|
|
797
|
-
// ============================================
|
|
798
|
-
describe("Keyboard Navigation", () => {
|
|
799
|
-
it("opens calendar with Enter key", async () => {
|
|
800
|
-
const user = userEvent.setup()
|
|
801
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
802
|
-
|
|
803
|
-
screen.getByRole("combobox").focus()
|
|
804
|
-
await user.keyboard("{Enter}")
|
|
805
|
-
|
|
806
|
-
await waitFor(() => {
|
|
807
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
808
|
-
})
|
|
809
|
-
})
|
|
810
|
-
|
|
811
|
-
it("opens calendar with Space key", async () => {
|
|
812
|
-
const user = userEvent.setup()
|
|
813
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
814
|
-
|
|
815
|
-
screen.getByRole("combobox").focus()
|
|
816
|
-
await user.keyboard(" ")
|
|
817
|
-
|
|
818
|
-
await waitFor(() => {
|
|
819
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
820
|
-
})
|
|
821
|
-
})
|
|
822
|
-
|
|
823
|
-
it("closes calendar with Escape key", async () => {
|
|
824
|
-
const user = userEvent.setup()
|
|
825
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
826
|
-
|
|
827
|
-
await openDateRangePicker(user)
|
|
828
|
-
|
|
829
|
-
await waitFor(() => {
|
|
830
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
831
|
-
})
|
|
832
|
-
|
|
833
|
-
await user.keyboard("{Escape}")
|
|
834
|
-
|
|
835
|
-
await waitFor(() => {
|
|
836
|
-
expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
|
|
837
|
-
})
|
|
838
|
-
})
|
|
839
|
-
})
|
|
840
|
-
|
|
841
|
-
// ============================================
|
|
842
|
-
// CONTROLLED/UNCONTROLLED TESTS
|
|
843
|
-
// ============================================
|
|
844
|
-
describe("Controlled State", () => {
|
|
845
|
-
it("respects controlled value", () => {
|
|
846
|
-
const { rerender } = render(
|
|
847
|
-
<DateRangePicker aria-label="Select date range" value={testRange} onChange={() => {}} />
|
|
848
|
-
)
|
|
849
|
-
|
|
850
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 10, 2024")
|
|
851
|
-
|
|
852
|
-
const newRange: DateRange = {
|
|
853
|
-
from: new Date(2024, 1, 1),
|
|
854
|
-
to: new Date(2024, 1, 14),
|
|
855
|
-
}
|
|
856
|
-
rerender(<DateRangePicker aria-label="Select date range" value={newRange} onChange={() => {}} />)
|
|
857
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Feb 1, 2024")
|
|
858
|
-
})
|
|
859
|
-
|
|
860
|
-
it("reports new value via onChange", async () => {
|
|
861
|
-
const user = userEvent.setup()
|
|
862
|
-
const handleChange = vi.fn()
|
|
863
|
-
render(<DateRangePicker aria-label="Select date range" value={testRange} onChange={handleChange} />)
|
|
864
|
-
|
|
865
|
-
await openDateRangePicker(user)
|
|
866
|
-
|
|
867
|
-
await waitFor(() => {
|
|
868
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
869
|
-
})
|
|
870
|
-
|
|
871
|
-
const dialog = screen.getByRole("dialog")
|
|
872
|
-
const day25Button = findDayButton(dialog, 25)
|
|
873
|
-
await user.click(day25Button as Element)
|
|
874
|
-
|
|
875
|
-
expect(handleChange).toHaveBeenCalled()
|
|
876
|
-
})
|
|
877
|
-
|
|
878
|
-
it("works in uncontrolled mode with defaultValue", () => {
|
|
879
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} />)
|
|
880
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 10, 2024")
|
|
881
|
-
})
|
|
882
|
-
|
|
883
|
-
it("works in uncontrolled mode without defaultValue", () => {
|
|
884
|
-
render(<DateRangePicker aria-label="Select date range" placeholder="Select range" />)
|
|
885
|
-
expect(screen.getByText("Select range")).toBeInTheDocument()
|
|
886
|
-
})
|
|
887
|
-
})
|
|
888
|
-
|
|
889
|
-
// ============================================
|
|
890
|
-
// EVENTS TESTS
|
|
891
|
-
// ============================================
|
|
892
|
-
describe("Events", () => {
|
|
893
|
-
it("calls onChange when range changes", async () => {
|
|
894
|
-
const user = userEvent.setup()
|
|
895
|
-
const handleChange = vi.fn()
|
|
896
|
-
render(<DateRangePicker aria-label="Select date range" onChange={handleChange} />)
|
|
897
|
-
|
|
898
|
-
await openDateRangePicker(user)
|
|
899
|
-
|
|
900
|
-
await waitFor(() => {
|
|
901
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
902
|
-
})
|
|
903
|
-
|
|
904
|
-
await user.click(screen.getByRole("option", { name: "Today" }))
|
|
905
|
-
|
|
906
|
-
expect(handleChange).toHaveBeenCalled()
|
|
907
|
-
})
|
|
908
|
-
|
|
909
|
-
it("calls onOpenChange when calendar opens", async () => {
|
|
910
|
-
const user = userEvent.setup()
|
|
911
|
-
const handleOpenChange = vi.fn()
|
|
912
|
-
render(<DateRangePicker aria-label="Select date range" onOpenChange={handleOpenChange} />)
|
|
913
|
-
|
|
914
|
-
await openDateRangePicker(user)
|
|
915
|
-
|
|
916
|
-
await waitFor(() => {
|
|
917
|
-
expect(handleOpenChange).toHaveBeenCalledWith(true)
|
|
918
|
-
})
|
|
919
|
-
})
|
|
920
|
-
|
|
921
|
-
it("calls onOpenChange when calendar closes", async () => {
|
|
922
|
-
const user = userEvent.setup()
|
|
923
|
-
const handleOpenChange = vi.fn()
|
|
924
|
-
render(<DateRangePicker aria-label="Select date range" onOpenChange={handleOpenChange} />)
|
|
925
|
-
|
|
926
|
-
await openDateRangePicker(user)
|
|
927
|
-
|
|
928
|
-
await waitFor(() => {
|
|
929
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
930
|
-
})
|
|
931
|
-
|
|
932
|
-
await user.keyboard("{Escape}")
|
|
933
|
-
|
|
934
|
-
await waitFor(() => {
|
|
935
|
-
expect(handleOpenChange).toHaveBeenCalledWith(false)
|
|
936
|
-
})
|
|
937
|
-
})
|
|
938
|
-
|
|
939
|
-
it("calls onClear when cleared", async () => {
|
|
940
|
-
const user = userEvent.setup()
|
|
941
|
-
const handleClear = vi.fn()
|
|
942
|
-
render(<DateRangePicker clearable aria-label="Select date range" defaultValue={testRange} onClear={handleClear} />)
|
|
943
|
-
|
|
944
|
-
await user.click(screen.getByLabelText("Clear date range"))
|
|
945
|
-
|
|
946
|
-
expect(handleClear).toHaveBeenCalled()
|
|
947
|
-
})
|
|
948
|
-
|
|
949
|
-
it("does not open when disabled", async () => {
|
|
950
|
-
const user = userEvent.setup()
|
|
951
|
-
render(<DateRangePicker disabled aria-label="Select date range" />)
|
|
952
|
-
|
|
953
|
-
const trigger = screen.getByRole("combobox")
|
|
954
|
-
await user.click(trigger)
|
|
955
|
-
|
|
956
|
-
expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
|
|
957
|
-
})
|
|
958
|
-
})
|
|
959
|
-
|
|
960
|
-
// ============================================
|
|
961
|
-
// SIZE VARIANTS
|
|
962
|
-
// ============================================
|
|
963
|
-
describe("Size Variants", () => {
|
|
964
|
-
it("applies default size (md)", () => {
|
|
965
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
966
|
-
expect(screen.getByRole("combobox")).toHaveClass("h-[var(--date-picker-trigger-height-md)]")
|
|
967
|
-
})
|
|
968
|
-
|
|
969
|
-
it("applies sm size", () => {
|
|
970
|
-
render(<DateRangePicker aria-label="Select date range" size="sm" />)
|
|
971
|
-
expect(screen.getByRole("combobox")).toHaveClass("h-[var(--date-picker-trigger-height-sm)]")
|
|
972
|
-
})
|
|
973
|
-
|
|
974
|
-
it("applies lg size", () => {
|
|
975
|
-
render(<DateRangePicker aria-label="Select date range" size="lg" />)
|
|
976
|
-
expect(screen.getByRole("combobox")).toHaveClass("h-[var(--date-picker-trigger-height-lg)]")
|
|
977
|
-
})
|
|
978
|
-
|
|
979
|
-
it("has data-size attribute", () => {
|
|
980
|
-
render(<DateRangePicker aria-label="Select date range" size="sm" />)
|
|
981
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("data-size", "sm")
|
|
982
|
-
})
|
|
983
|
-
})
|
|
984
|
-
|
|
985
|
-
// ============================================
|
|
986
|
-
// VISUAL VARIANT TESTS
|
|
987
|
-
// ============================================
|
|
988
|
-
describe("Visual Variants", () => {
|
|
989
|
-
it("applies default variant", () => {
|
|
990
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
991
|
-
expect(screen.getByRole("combobox")).toHaveClass("border-input")
|
|
992
|
-
})
|
|
993
|
-
|
|
994
|
-
it("applies outline variant", () => {
|
|
995
|
-
render(<DateRangePicker aria-label="Select date range" variant="outline" />)
|
|
996
|
-
expect(screen.getByRole("combobox")).toHaveClass("border-input")
|
|
997
|
-
})
|
|
998
|
-
|
|
999
|
-
it("applies ghost variant", () => {
|
|
1000
|
-
render(<DateRangePicker aria-label="Select date range" variant="ghost" />)
|
|
1001
|
-
expect(screen.getByRole("combobox")).toHaveClass("border-transparent")
|
|
1002
|
-
})
|
|
1003
|
-
|
|
1004
|
-
it("has data-variant attribute", () => {
|
|
1005
|
-
render(<DateRangePicker aria-label="Select date range" variant="ghost" />)
|
|
1006
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("data-variant", "ghost")
|
|
1007
|
-
})
|
|
1008
|
-
})
|
|
1009
|
-
|
|
1010
|
-
// ============================================
|
|
1011
|
-
// CLEARABLE TESTS
|
|
1012
|
-
// ============================================
|
|
1013
|
-
describe("Clearable", () => {
|
|
1014
|
-
it("does not show clear button by default", () => {
|
|
1015
|
-
render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} />)
|
|
1016
|
-
expect(screen.queryByLabelText("Clear date range")).not.toBeInTheDocument()
|
|
1017
|
-
})
|
|
1018
|
-
|
|
1019
|
-
it("shows clear button when clearable and has value", () => {
|
|
1020
|
-
render(<DateRangePicker clearable aria-label="Select date range" defaultValue={testRange} />)
|
|
1021
|
-
expect(screen.getByLabelText("Clear date range")).toBeInTheDocument()
|
|
1022
|
-
})
|
|
1023
|
-
|
|
1024
|
-
it("does not show clear button when clearable but no value", () => {
|
|
1025
|
-
render(<DateRangePicker clearable aria-label="Select date range" />)
|
|
1026
|
-
expect(screen.queryByLabelText("Clear date range")).not.toBeInTheDocument()
|
|
1027
|
-
})
|
|
1028
|
-
|
|
1029
|
-
it("does not show clear button when disabled", () => {
|
|
1030
|
-
render(<DateRangePicker clearable disabled aria-label="Select date range" defaultValue={testRange} />)
|
|
1031
|
-
expect(screen.queryByLabelText("Clear date range")).not.toBeInTheDocument()
|
|
1032
|
-
})
|
|
1033
|
-
|
|
1034
|
-
it("does not show clear button when readOnly", () => {
|
|
1035
|
-
render(<DateRangePicker clearable readOnly aria-label="Select date range" defaultValue={testRange} />)
|
|
1036
|
-
expect(screen.queryByLabelText("Clear date range")).not.toBeInTheDocument()
|
|
1037
|
-
})
|
|
1038
|
-
|
|
1039
|
-
it("clears range when clear button is clicked", async () => {
|
|
1040
|
-
const user = userEvent.setup()
|
|
1041
|
-
const handleChange = vi.fn()
|
|
1042
|
-
render(<DateRangePicker clearable aria-label="Select date range" defaultValue={testRange} onChange={handleChange} />)
|
|
1043
|
-
|
|
1044
|
-
await user.click(screen.getByLabelText("Clear date range"))
|
|
1045
|
-
|
|
1046
|
-
expect(handleChange).toHaveBeenCalledTimes(1)
|
|
1047
|
-
expect(handleChange.mock.calls[0]).toHaveLength(0)
|
|
1048
|
-
})
|
|
1049
|
-
|
|
1050
|
-
it("clears range with keyboard (Enter)", async () => {
|
|
1051
|
-
const user = userEvent.setup()
|
|
1052
|
-
const handleChange = vi.fn()
|
|
1053
|
-
render(<DateRangePicker clearable aria-label="Select date range" defaultValue={testRange} onChange={handleChange} />)
|
|
1054
|
-
|
|
1055
|
-
const clearButton = screen.getByLabelText("Clear date range")
|
|
1056
|
-
clearButton.focus()
|
|
1057
|
-
await user.keyboard("{Enter}")
|
|
1058
|
-
|
|
1059
|
-
expect(handleChange).toHaveBeenCalledTimes(1)
|
|
1060
|
-
expect(handleChange.mock.calls[0]).toHaveLength(0)
|
|
1061
|
-
})
|
|
1062
|
-
|
|
1063
|
-
it("has data-slot on clear button", () => {
|
|
1064
|
-
render(<DateRangePicker clearable aria-label="Select date range" defaultValue={testRange} />)
|
|
1065
|
-
expect(screen.getByLabelText("Clear date range")).toHaveAttribute("data-slot", "date-range-picker-clear")
|
|
1066
|
-
})
|
|
1067
|
-
})
|
|
1068
|
-
|
|
1069
|
-
// ============================================
|
|
1070
|
-
// READ-ONLY TESTS
|
|
1071
|
-
// ============================================
|
|
1072
|
-
describe("ReadOnly", () => {
|
|
1073
|
-
it("applies aria-readonly when readOnly", () => {
|
|
1074
|
-
render(<DateRangePicker readOnly aria-label="Select date range" />)
|
|
1075
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("aria-readonly", "true")
|
|
1076
|
-
})
|
|
1077
|
-
|
|
1078
|
-
it("applies data-readonly when readOnly", () => {
|
|
1079
|
-
render(<DateRangePicker readOnly aria-label="Select date range" />)
|
|
1080
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("data-readonly")
|
|
1081
|
-
})
|
|
1082
|
-
|
|
1083
|
-
it("does not open calendar when readOnly", async () => {
|
|
1084
|
-
const user = userEvent.setup()
|
|
1085
|
-
render(<DateRangePicker readOnly aria-label="Select date range" />)
|
|
1086
|
-
|
|
1087
|
-
await user.click(screen.getByRole("combobox"))
|
|
1088
|
-
|
|
1089
|
-
expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
|
|
1090
|
-
})
|
|
1091
|
-
|
|
1092
|
-
it("is still focusable when readOnly", () => {
|
|
1093
|
-
render(<DateRangePicker readOnly aria-label="Select date range" />)
|
|
1094
|
-
const trigger = screen.getByRole("combobox")
|
|
1095
|
-
trigger.focus()
|
|
1096
|
-
expect(trigger).toHaveFocus()
|
|
1097
|
-
})
|
|
1098
|
-
|
|
1099
|
-
it("displays value when readOnly", () => {
|
|
1100
|
-
render(<DateRangePicker readOnly aria-label="Select date range" defaultValue={testRange} />)
|
|
1101
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 10, 2024")
|
|
1102
|
-
})
|
|
1103
|
-
})
|
|
1104
|
-
|
|
1105
|
-
// ============================================
|
|
1106
|
-
// FORM INTEGRATION TESTS
|
|
1107
|
-
// ============================================
|
|
1108
|
-
describe("Form Integration", () => {
|
|
1109
|
-
it("renders hidden inputs with name", () => {
|
|
1110
|
-
const { container } = render(<DateRangePicker aria-label="Select date range" name="daterange" />)
|
|
1111
|
-
const fromInput = container.querySelector('input[type="hidden"][name="daterange-from"]')
|
|
1112
|
-
const toInput = container.querySelector('input[type="hidden"][name="daterange-to"]')
|
|
1113
|
-
expect(fromInput).toBeInTheDocument()
|
|
1114
|
-
expect(toInput).toBeInTheDocument()
|
|
1115
|
-
})
|
|
1116
|
-
|
|
1117
|
-
it("hidden inputs have ISO date values", () => {
|
|
1118
|
-
const { container } = render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} name="daterange" />)
|
|
1119
|
-
const fromInput = container.querySelector<HTMLInputElement>('input[name="daterange-from"]')
|
|
1120
|
-
const toInput = container.querySelector<HTMLInputElement>('input[name="daterange-to"]')
|
|
1121
|
-
expect(fromInput).toBeInTheDocument()
|
|
1122
|
-
expect(toInput).toBeInTheDocument()
|
|
1123
|
-
expect(fromInput?.value).toBe(testRange.from?.toISOString())
|
|
1124
|
-
expect(toInput?.value).toBe(testRange.to?.toISOString())
|
|
1125
|
-
})
|
|
1126
|
-
|
|
1127
|
-
it("hidden inputs are empty when no range selected", () => {
|
|
1128
|
-
const { container } = render(<DateRangePicker aria-label="Select date range" name="daterange" />)
|
|
1129
|
-
const fromInput = container.querySelector<HTMLInputElement>('input[name="daterange-from"]')
|
|
1130
|
-
const toInput = container.querySelector<HTMLInputElement>('input[name="daterange-to"]')
|
|
1131
|
-
expect(fromInput).toBeInTheDocument()
|
|
1132
|
-
expect(toInput).toBeInTheDocument()
|
|
1133
|
-
expect(fromInput?.value).toBe("")
|
|
1134
|
-
expect(toInput?.value).toBe("")
|
|
1135
|
-
})
|
|
1136
|
-
|
|
1137
|
-
it("supports id for label association", () => {
|
|
1138
|
-
render(<DateRangePicker aria-label="Select date range" id="daterange-input" />)
|
|
1139
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("id", "daterange-input")
|
|
1140
|
-
})
|
|
1141
|
-
})
|
|
1142
|
-
|
|
1143
|
-
// ============================================
|
|
1144
|
-
// REF FORWARDING TESTS
|
|
1145
|
-
// ============================================
|
|
1146
|
-
describe("Ref Forwarding", () => {
|
|
1147
|
-
it("forwards ref to trigger button", () => {
|
|
1148
|
-
const ref = React.createRef<HTMLButtonElement>()
|
|
1149
|
-
render(<DateRangePicker ref={ref} aria-label="Select date range" />)
|
|
1150
|
-
|
|
1151
|
-
expect(ref.current).toBeInstanceOf(HTMLButtonElement)
|
|
1152
|
-
expect(ref.current).toBe(screen.getByRole("combobox"))
|
|
1153
|
-
})
|
|
1154
|
-
|
|
1155
|
-
it("allows programmatic focus via ref", () => {
|
|
1156
|
-
const ref = React.createRef<HTMLButtonElement>()
|
|
1157
|
-
render(<DateRangePicker ref={ref} aria-label="Select date range" />)
|
|
1158
|
-
|
|
1159
|
-
ref.current?.focus()
|
|
1160
|
-
expect(screen.getByRole("combobox")).toHaveFocus()
|
|
1161
|
-
})
|
|
1162
|
-
})
|
|
1163
|
-
|
|
1164
|
-
// ============================================
|
|
1165
|
-
// DATA ATTRIBUTE TESTS
|
|
1166
|
-
// ============================================
|
|
1167
|
-
describe("Data Attributes", () => {
|
|
1168
|
-
it("has data-slot on wrapper", () => {
|
|
1169
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
1170
|
-
const wrapper = screen.getByRole("combobox").closest('[data-slot="date-range-picker"]')
|
|
1171
|
-
expect(wrapper).toBeInTheDocument()
|
|
1172
|
-
})
|
|
1173
|
-
|
|
1174
|
-
it("has data-slot on trigger", () => {
|
|
1175
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
1176
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("data-slot", "date-range-picker-trigger")
|
|
1177
|
-
})
|
|
1178
|
-
|
|
1179
|
-
it("has data-state on trigger", () => {
|
|
1180
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
1181
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("data-state", "closed")
|
|
1182
|
-
})
|
|
1183
|
-
|
|
1184
|
-
it("has data-state=open when opened", async () => {
|
|
1185
|
-
const user = userEvent.setup()
|
|
1186
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
1187
|
-
|
|
1188
|
-
await openDateRangePicker(user)
|
|
1189
|
-
|
|
1190
|
-
await waitFor(() => {
|
|
1191
|
-
expect(screen.getByRole("combobox")).toHaveAttribute("data-state", "open")
|
|
1192
|
-
})
|
|
1193
|
-
})
|
|
1194
|
-
|
|
1195
|
-
it("has data-slot on content when opened", async () => {
|
|
1196
|
-
const user = userEvent.setup()
|
|
1197
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
1198
|
-
|
|
1199
|
-
await openDateRangePicker(user)
|
|
1200
|
-
|
|
1201
|
-
await waitFor(() => {
|
|
1202
|
-
const content = document.querySelector('[data-slot="date-range-picker-content"]')
|
|
1203
|
-
expect(content).toBeInTheDocument()
|
|
1204
|
-
})
|
|
1205
|
-
})
|
|
1206
|
-
})
|
|
1207
|
-
|
|
1208
|
-
// ============================================
|
|
1209
|
-
// EDGE CASES TESTS
|
|
1210
|
-
// ============================================
|
|
1211
|
-
describe("Edge Cases", () => {
|
|
1212
|
-
it("handles empty className", () => {
|
|
1213
|
-
render(<DateRangePicker aria-label="Select date range" className="" />)
|
|
1214
|
-
expect(screen.getByRole("combobox")).toBeInTheDocument()
|
|
1215
|
-
})
|
|
1216
|
-
|
|
1217
|
-
it("handles rapid open/close correctly", async () => {
|
|
1218
|
-
const user = userEvent.setup()
|
|
1219
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
1220
|
-
|
|
1221
|
-
const trigger = screen.getByRole("combobox")
|
|
1222
|
-
await user.click(trigger)
|
|
1223
|
-
await user.keyboard("{Escape}")
|
|
1224
|
-
await user.click(trigger)
|
|
1225
|
-
await user.keyboard("{Escape}")
|
|
1226
|
-
await user.click(trigger)
|
|
1227
|
-
|
|
1228
|
-
await waitFor(() => {
|
|
1229
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1230
|
-
})
|
|
1231
|
-
})
|
|
1232
|
-
|
|
1233
|
-
it("maintains state through re-renders", () => {
|
|
1234
|
-
const { rerender } = render(<DateRangePicker aria-label="Select date range" defaultValue={testRange} />)
|
|
1235
|
-
|
|
1236
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 10, 2024")
|
|
1237
|
-
|
|
1238
|
-
rerender(<DateRangePicker aria-label="Select date range" defaultValue={testRange} />)
|
|
1239
|
-
expect(screen.getByRole("combobox")).toHaveTextContent("Jan 10, 2024")
|
|
1240
|
-
})
|
|
1241
|
-
|
|
1242
|
-
it("handles undefined range gracefully", () => {
|
|
1243
|
-
render(<DateRangePicker aria-label="Select date range" value={undefined} onChange={() => {}} />)
|
|
1244
|
-
expect(screen.getByRole("combobox")).toBeInTheDocument()
|
|
1245
|
-
})
|
|
1246
|
-
})
|
|
1247
|
-
|
|
1248
|
-
// ============================================
|
|
1249
|
-
// TYPE SAFETY TESTS
|
|
1250
|
-
// ============================================
|
|
1251
|
-
describe("Type Safety", () => {
|
|
1252
|
-
it("accepts valid size prop values", () => {
|
|
1253
|
-
const sizes = ["sm", "md", "lg"] as const
|
|
1254
|
-
sizes.forEach((size) => {
|
|
1255
|
-
const { unmount } = render(<DateRangePicker aria-label="Select date range" size={size} />)
|
|
1256
|
-
expect(screen.getByRole("combobox")).toBeInTheDocument()
|
|
1257
|
-
unmount()
|
|
1258
|
-
})
|
|
1259
|
-
})
|
|
1260
|
-
|
|
1261
|
-
it("accepts valid variant prop values", () => {
|
|
1262
|
-
const variants = ["default", "outline", "ghost"] as const
|
|
1263
|
-
variants.forEach((variant) => {
|
|
1264
|
-
const { unmount } = render(<DateRangePicker aria-label="Select date range" variant={variant} />)
|
|
1265
|
-
expect(screen.getByRole("combobox")).toBeInTheDocument()
|
|
1266
|
-
unmount()
|
|
1267
|
-
})
|
|
1268
|
-
})
|
|
1269
|
-
})
|
|
1270
|
-
})
|
|
1271
|
-
|
|
1272
|
-
// ============================================
|
|
1273
|
-
// DATERANGEPRESETS TESTS
|
|
1274
|
-
// ============================================
|
|
1275
|
-
describe("DateRangePresets", () => {
|
|
1276
|
-
const mockPresets: DateRangePreset[] = [
|
|
1277
|
-
{ label: "Today", getValue: () => ({ from: new Date(), to: new Date() }) },
|
|
1278
|
-
{ label: "Yesterday", getValue: () => ({ from: new Date(), to: new Date() }) },
|
|
1279
|
-
]
|
|
1280
|
-
|
|
1281
|
-
it("renders all presets", () => {
|
|
1282
|
-
const handleSelect = vi.fn()
|
|
1283
|
-
render(<DateRangePresets presets={mockPresets} onSelect={handleSelect} />)
|
|
1284
|
-
|
|
1285
|
-
expect(screen.getByRole("option", { name: "Today" })).toBeInTheDocument()
|
|
1286
|
-
expect(screen.getByRole("option", { name: "Yesterday" })).toBeInTheDocument()
|
|
1287
|
-
})
|
|
1288
|
-
|
|
1289
|
-
it("calls onSelect with range and label when preset clicked", async () => {
|
|
1290
|
-
const user = userEvent.setup()
|
|
1291
|
-
const handleSelect = vi.fn()
|
|
1292
|
-
render(<DateRangePresets presets={mockPresets} onSelect={handleSelect} />)
|
|
1293
|
-
|
|
1294
|
-
await user.click(screen.getByRole("option", { name: "Today" }))
|
|
1295
|
-
|
|
1296
|
-
expect(handleSelect).toHaveBeenCalled()
|
|
1297
|
-
expect(handleSelect.mock.calls[0]?.[1]).toBe("Today")
|
|
1298
|
-
})
|
|
1299
|
-
|
|
1300
|
-
it("highlights selected preset", () => {
|
|
1301
|
-
const handleSelect = vi.fn()
|
|
1302
|
-
render(<DateRangePresets presets={mockPresets} selectedPreset="Today" onSelect={handleSelect} />)
|
|
1303
|
-
|
|
1304
|
-
expect(screen.getByRole("option", { name: "Today" })).toHaveAttribute("data-selected")
|
|
1305
|
-
expect(screen.getByRole("option", { name: "Yesterday" })).not.toHaveAttribute("data-selected")
|
|
1306
|
-
})
|
|
1307
|
-
|
|
1308
|
-
it("has data-slot attribute", () => {
|
|
1309
|
-
const handleSelect = vi.fn()
|
|
1310
|
-
const { container } = render(<DateRangePresets presets={mockPresets} onSelect={handleSelect} />)
|
|
1311
|
-
|
|
1312
|
-
expect(container.querySelector('[data-slot="date-range-presets"]')).toBeInTheDocument()
|
|
1313
|
-
})
|
|
1314
|
-
})
|
|
1315
|
-
|
|
1316
|
-
// ============================================
|
|
1317
|
-
// DEFAULT PRESETS TESTS
|
|
1318
|
-
// ============================================
|
|
1319
|
-
describe("Default Presets", () => {
|
|
1320
|
-
it("has correct number of presets", () => {
|
|
1321
|
-
expect(defaultPresets.length).toBeGreaterThan(0)
|
|
1322
|
-
})
|
|
1323
|
-
|
|
1324
|
-
it("each preset has label and getValue", () => {
|
|
1325
|
-
defaultPresets.forEach((preset) => {
|
|
1326
|
-
expect(preset.label).toBeTruthy()
|
|
1327
|
-
expect(typeof preset.getValue).toBe("function")
|
|
1328
|
-
})
|
|
1329
|
-
})
|
|
1330
|
-
|
|
1331
|
-
it("each preset returns valid DateRange (except All time)", () => {
|
|
1332
|
-
defaultPresets
|
|
1333
|
-
.filter((preset) => preset.label !== "All time")
|
|
1334
|
-
.forEach((preset) => {
|
|
1335
|
-
const range = preset.getValue()
|
|
1336
|
-
expect(range.from).toBeInstanceOf(Date)
|
|
1337
|
-
expect(range.to).toBeInstanceOf(Date)
|
|
1338
|
-
})
|
|
1339
|
-
})
|
|
1340
|
-
|
|
1341
|
-
it("Today preset returns today's date", () => {
|
|
1342
|
-
const todayPreset = defaultPresets.find((p) => p.label === "Today")
|
|
1343
|
-
if (!todayPreset) throw new Error("Today preset not found")
|
|
1344
|
-
|
|
1345
|
-
const range = todayPreset.getValue()
|
|
1346
|
-
const today = new Date()
|
|
1347
|
-
expect(range.from?.getDate()).toBe(today.getDate())
|
|
1348
|
-
})
|
|
1349
|
-
|
|
1350
|
-
it("Yesterday preset returns yesterday's date", () => {
|
|
1351
|
-
const yesterdayPreset = defaultPresets.find((p) => p.label === "Yesterday")
|
|
1352
|
-
if (!yesterdayPreset) throw new Error("Yesterday preset not found")
|
|
1353
|
-
|
|
1354
|
-
const range = yesterdayPreset.getValue()
|
|
1355
|
-
const yesterday = new Date()
|
|
1356
|
-
yesterday.setDate(yesterday.getDate() - 1)
|
|
1357
|
-
expect(range.from?.getDate()).toBe(yesterday.getDate())
|
|
1358
|
-
})
|
|
1359
|
-
|
|
1360
|
-
it("This year preset returns current year range", () => {
|
|
1361
|
-
const thisYearPreset = defaultPresets.find((p) => p.label === "This year")
|
|
1362
|
-
if (!thisYearPreset) throw new Error("This year preset not found")
|
|
1363
|
-
|
|
1364
|
-
const range = thisYearPreset.getValue()
|
|
1365
|
-
const currentYear = new Date().getFullYear()
|
|
1366
|
-
expect(range.from?.getFullYear()).toBe(currentYear)
|
|
1367
|
-
expect(range.from?.getMonth()).toBe(0) // January
|
|
1368
|
-
expect(range.from?.getDate()).toBe(1)
|
|
1369
|
-
expect(range.to?.getFullYear()).toBe(currentYear)
|
|
1370
|
-
expect(range.to?.getMonth()).toBe(11) // December
|
|
1371
|
-
expect(range.to?.getDate()).toBe(31)
|
|
1372
|
-
})
|
|
1373
|
-
|
|
1374
|
-
it("Last year preset returns previous year range", () => {
|
|
1375
|
-
const lastYearPreset = defaultPresets.find((p) => p.label === "Last year")
|
|
1376
|
-
if (!lastYearPreset) throw new Error("Last year preset not found")
|
|
1377
|
-
|
|
1378
|
-
const range = lastYearPreset.getValue()
|
|
1379
|
-
const lastYear = new Date().getFullYear() - 1
|
|
1380
|
-
expect(range.from?.getFullYear()).toBe(lastYear)
|
|
1381
|
-
expect(range.from?.getMonth()).toBe(0) // January
|
|
1382
|
-
expect(range.from?.getDate()).toBe(1)
|
|
1383
|
-
expect(range.to?.getFullYear()).toBe(lastYear)
|
|
1384
|
-
expect(range.to?.getMonth()).toBe(11) // December
|
|
1385
|
-
expect(range.to?.getDate()).toBe(31)
|
|
1386
|
-
})
|
|
1387
|
-
|
|
1388
|
-
it("All time preset returns undefined dates", () => {
|
|
1389
|
-
const allTimePreset = defaultPresets.find((p) => p.label === "All time")
|
|
1390
|
-
if (!allTimePreset) throw new Error("All time preset not found")
|
|
1391
|
-
|
|
1392
|
-
const range = allTimePreset.getValue()
|
|
1393
|
-
expect(range.from).toBeUndefined()
|
|
1394
|
-
expect(range.to).toBeUndefined()
|
|
1395
|
-
})
|
|
1396
|
-
})
|
|
1397
|
-
|
|
1398
|
-
// ============================================
|
|
1399
|
-
// TODAY BUTTON TESTS
|
|
1400
|
-
// ============================================
|
|
1401
|
-
describe("Today Button", () => {
|
|
1402
|
-
it("shows Today button by default", async () => {
|
|
1403
|
-
const user = userEvent.setup()
|
|
1404
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
1405
|
-
|
|
1406
|
-
await openDateRangePicker(user)
|
|
1407
|
-
|
|
1408
|
-
await waitFor(() => {
|
|
1409
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1410
|
-
})
|
|
1411
|
-
|
|
1412
|
-
expect(screen.getByRole("button", { name: "Today" })).toBeInTheDocument()
|
|
1413
|
-
})
|
|
1414
|
-
|
|
1415
|
-
it("hides Today button when showTodayButton is false", async () => {
|
|
1416
|
-
const user = userEvent.setup()
|
|
1417
|
-
render(<DateRangePicker aria-label="Select date range" showTodayButton={false} />)
|
|
1418
|
-
|
|
1419
|
-
await openDateRangePicker(user)
|
|
1420
|
-
|
|
1421
|
-
await waitFor(() => {
|
|
1422
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1423
|
-
})
|
|
1424
|
-
|
|
1425
|
-
// Should not have the Today button (the one in header, not the preset option)
|
|
1426
|
-
const header = document.querySelector('[data-slot="date-range-picker-header"]')
|
|
1427
|
-
expect(header).not.toBeInTheDocument()
|
|
1428
|
-
})
|
|
1429
|
-
|
|
1430
|
-
it("has header with data-slot attribute", async () => {
|
|
1431
|
-
const user = userEvent.setup()
|
|
1432
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
1433
|
-
|
|
1434
|
-
await openDateRangePicker(user)
|
|
1435
|
-
|
|
1436
|
-
await waitFor(() => {
|
|
1437
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1438
|
-
})
|
|
1439
|
-
|
|
1440
|
-
const header = document.querySelector('[data-slot="date-range-picker-header"]')
|
|
1441
|
-
expect(header).toBeInTheDocument()
|
|
1442
|
-
})
|
|
1443
|
-
|
|
1444
|
-
it("Today button navigates calendar to current month", async () => {
|
|
1445
|
-
const user = userEvent.setup()
|
|
1446
|
-
// Start with a date in a different month/year
|
|
1447
|
-
const pastDate = new Date(2020, 5, 15) // June 15, 2020
|
|
1448
|
-
render(
|
|
1449
|
-
<DateRangePicker
|
|
1450
|
-
aria-label="Select date range"
|
|
1451
|
-
defaultValue={{ from: pastDate, to: pastDate }}
|
|
1452
|
-
/>
|
|
1453
|
-
)
|
|
1454
|
-
|
|
1455
|
-
await openDateRangePicker(user)
|
|
1456
|
-
|
|
1457
|
-
await waitFor(() => {
|
|
1458
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1459
|
-
})
|
|
1460
|
-
|
|
1461
|
-
// Click the Today button (in header, not the preset)
|
|
1462
|
-
const header = document.querySelector('[data-slot="date-range-picker-header"]')
|
|
1463
|
-
const todayButton = within(header as HTMLElement).getByRole("button", { name: "Today" })
|
|
1464
|
-
await user.click(todayButton)
|
|
1465
|
-
|
|
1466
|
-
// After clicking, the calendar should show the current month
|
|
1467
|
-
const currentMonth = new Date().toLocaleString("default", { month: "long" })
|
|
1468
|
-
const currentYear = new Date().getFullYear()
|
|
1469
|
-
|
|
1470
|
-
await waitFor(() => {
|
|
1471
|
-
// The calendar should now show the current month/year
|
|
1472
|
-
const calendarText = document.querySelector('[data-slot="date-range-picker-content"]')?.textContent
|
|
1473
|
-
expect(calendarText).toContain(currentMonth)
|
|
1474
|
-
expect(calendarText).toContain(String(currentYear))
|
|
1475
|
-
})
|
|
1476
|
-
})
|
|
1477
|
-
})
|
|
1478
|
-
|
|
1479
|
-
// ============================================
|
|
1480
|
-
// MODAL VARIANT TESTS
|
|
1481
|
-
// ============================================
|
|
1482
|
-
describe("Modal Variant", () => {
|
|
1483
|
-
it("renders in popover mode by default", () => {
|
|
1484
|
-
render(<DateRangePicker aria-label="Select date range" />)
|
|
1485
|
-
const wrapper = screen.getByRole("combobox").closest('[data-slot="date-range-picker"]')
|
|
1486
|
-
expect(wrapper).toHaveAttribute("data-mode", "popover")
|
|
1487
|
-
})
|
|
1488
|
-
|
|
1489
|
-
it("renders in modal mode when displayMode is modal", () => {
|
|
1490
|
-
render(<DateRangePicker aria-label="Select date range" displayMode="modal" />)
|
|
1491
|
-
const wrapper = screen.getByRole("combobox").closest('[data-slot="date-range-picker"]')
|
|
1492
|
-
expect(wrapper).toHaveAttribute("data-mode", "modal")
|
|
1493
|
-
})
|
|
1494
|
-
|
|
1495
|
-
it("opens modal dialog when displayMode is modal", async () => {
|
|
1496
|
-
const user = userEvent.setup()
|
|
1497
|
-
render(<DateRangePicker aria-label="Select date range" displayMode="modal" />)
|
|
1498
|
-
|
|
1499
|
-
await user.click(screen.getByRole("combobox"))
|
|
1500
|
-
|
|
1501
|
-
await waitFor(() => {
|
|
1502
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1503
|
-
})
|
|
1504
|
-
})
|
|
1505
|
-
|
|
1506
|
-
it("shows modal title when displayMode is modal", async () => {
|
|
1507
|
-
const user = userEvent.setup()
|
|
1508
|
-
render(
|
|
1509
|
-
<DateRangePicker
|
|
1510
|
-
aria-label="Select date range"
|
|
1511
|
-
displayMode="modal"
|
|
1512
|
-
modalTitle="Choose your dates"
|
|
1513
|
-
/>
|
|
1514
|
-
)
|
|
1515
|
-
|
|
1516
|
-
await user.click(screen.getByRole("combobox"))
|
|
1517
|
-
|
|
1518
|
-
await waitFor(() => {
|
|
1519
|
-
expect(screen.getByText("Choose your dates")).toBeInTheDocument()
|
|
1520
|
-
})
|
|
1521
|
-
})
|
|
1522
|
-
|
|
1523
|
-
it("uses default modal title when not specified", async () => {
|
|
1524
|
-
const user = userEvent.setup()
|
|
1525
|
-
render(<DateRangePicker aria-label="Select date range" displayMode="modal" />)
|
|
1526
|
-
|
|
1527
|
-
await user.click(screen.getByRole("combobox"))
|
|
1528
|
-
|
|
1529
|
-
await waitFor(() => {
|
|
1530
|
-
expect(screen.getByText("Select Date Range")).toBeInTheDocument()
|
|
1531
|
-
})
|
|
1532
|
-
})
|
|
1533
|
-
|
|
1534
|
-
it("modal mode supports presets", async () => {
|
|
1535
|
-
const user = userEvent.setup()
|
|
1536
|
-
render(<DateRangePicker aria-label="Select date range" displayMode="modal" />)
|
|
1537
|
-
|
|
1538
|
-
await user.click(screen.getByRole("combobox"))
|
|
1539
|
-
|
|
1540
|
-
await waitFor(() => {
|
|
1541
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1542
|
-
})
|
|
1543
|
-
|
|
1544
|
-
expect(screen.getByRole("option", { name: "Today" })).toBeInTheDocument()
|
|
1545
|
-
})
|
|
1546
|
-
|
|
1547
|
-
it("modal mode supports confirmation buttons", async () => {
|
|
1548
|
-
const user = userEvent.setup()
|
|
1549
|
-
render(
|
|
1550
|
-
<DateRangePicker
|
|
1551
|
-
requireConfirmation
|
|
1552
|
-
aria-label="Select date range"
|
|
1553
|
-
displayMode="modal"
|
|
1554
|
-
/>
|
|
1555
|
-
)
|
|
1556
|
-
|
|
1557
|
-
await user.click(screen.getByRole("combobox"))
|
|
1558
|
-
|
|
1559
|
-
await waitFor(() => {
|
|
1560
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1561
|
-
})
|
|
1562
|
-
|
|
1563
|
-
expect(screen.getByRole("button", { name: "Cancel" })).toBeInTheDocument()
|
|
1564
|
-
expect(screen.getByRole("button", { name: "Apply" })).toBeInTheDocument()
|
|
1565
|
-
})
|
|
1566
|
-
|
|
1567
|
-
it("closes modal with Cancel button", async () => {
|
|
1568
|
-
const user = userEvent.setup()
|
|
1569
|
-
render(
|
|
1570
|
-
<DateRangePicker
|
|
1571
|
-
requireConfirmation
|
|
1572
|
-
aria-label="Select date range"
|
|
1573
|
-
displayMode="modal"
|
|
1574
|
-
/>
|
|
1575
|
-
)
|
|
1576
|
-
|
|
1577
|
-
await user.click(screen.getByRole("combobox"))
|
|
1578
|
-
|
|
1579
|
-
await waitFor(() => {
|
|
1580
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1581
|
-
})
|
|
1582
|
-
|
|
1583
|
-
await user.click(screen.getByRole("button", { name: "Cancel" }))
|
|
1584
|
-
|
|
1585
|
-
await waitFor(() => {
|
|
1586
|
-
expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
|
|
1587
|
-
})
|
|
1588
|
-
})
|
|
1589
|
-
})
|
|
1590
|
-
|
|
1591
|
-
// ============================================
|
|
1592
|
-
// ACTIVE DATES TESTS
|
|
1593
|
-
// ============================================
|
|
1594
|
-
describe("Active Dates", () => {
|
|
1595
|
-
const activeDatesArray = [
|
|
1596
|
-
new Date(2024, 0, 15), // January 15, 2024
|
|
1597
|
-
new Date(2024, 0, 20), // January 20, 2024
|
|
1598
|
-
]
|
|
1599
|
-
|
|
1600
|
-
it("accepts activeDates as array", async () => {
|
|
1601
|
-
const user = userEvent.setup()
|
|
1602
|
-
render(
|
|
1603
|
-
<DateRangePicker
|
|
1604
|
-
activeDates={activeDatesArray}
|
|
1605
|
-
aria-label="Select date range"
|
|
1606
|
-
defaultValue={{ from: new Date(2024, 0, 1), to: new Date(2024, 0, 10) }}
|
|
1607
|
-
/>
|
|
1608
|
-
)
|
|
1609
|
-
|
|
1610
|
-
await openDateRangePicker(user)
|
|
1611
|
-
|
|
1612
|
-
await waitFor(() => {
|
|
1613
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1614
|
-
})
|
|
1615
|
-
|
|
1616
|
-
// Component should render without errors
|
|
1617
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1618
|
-
})
|
|
1619
|
-
|
|
1620
|
-
it("accepts activeDates as function", async () => {
|
|
1621
|
-
const user = userEvent.setup()
|
|
1622
|
-
const isActive = (date: Date) => date.getDay() === 0 // Sundays
|
|
1623
|
-
|
|
1624
|
-
render(
|
|
1625
|
-
<DateRangePicker
|
|
1626
|
-
activeDates={isActive}
|
|
1627
|
-
aria-label="Select date range"
|
|
1628
|
-
defaultValue={{ from: new Date(2024, 0, 1), to: new Date(2024, 0, 10) }}
|
|
1629
|
-
/>
|
|
1630
|
-
)
|
|
1631
|
-
|
|
1632
|
-
await openDateRangePicker(user)
|
|
1633
|
-
|
|
1634
|
-
await waitFor(() => {
|
|
1635
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1636
|
-
})
|
|
1637
|
-
|
|
1638
|
-
// Component should render without errors
|
|
1639
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1640
|
-
})
|
|
1641
|
-
|
|
1642
|
-
it("renders active indicator on active dates", async () => {
|
|
1643
|
-
const user = userEvent.setup()
|
|
1644
|
-
render(
|
|
1645
|
-
<DateRangePicker
|
|
1646
|
-
activeDates={activeDatesArray}
|
|
1647
|
-
aria-label="Select date range"
|
|
1648
|
-
defaultValue={{ from: new Date(2024, 0, 1), to: new Date(2024, 0, 10) }}
|
|
1649
|
-
/>
|
|
1650
|
-
)
|
|
1651
|
-
|
|
1652
|
-
await openDateRangePicker(user)
|
|
1653
|
-
|
|
1654
|
-
await waitFor(() => {
|
|
1655
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1656
|
-
})
|
|
1657
|
-
|
|
1658
|
-
// Check for active indicators - they are rendered with data-slot="active-indicator"
|
|
1659
|
-
const dialog = screen.getByRole("dialog")
|
|
1660
|
-
const day15Button = findDayButton(dialog, 15)
|
|
1661
|
-
expect(day15Button).toHaveAttribute("data-active")
|
|
1662
|
-
})
|
|
1663
|
-
|
|
1664
|
-
it("does not show active indicator on non-active dates", async () => {
|
|
1665
|
-
const user = userEvent.setup()
|
|
1666
|
-
render(
|
|
1667
|
-
<DateRangePicker
|
|
1668
|
-
activeDates={activeDatesArray}
|
|
1669
|
-
aria-label="Select date range"
|
|
1670
|
-
defaultValue={{ from: new Date(2024, 0, 1), to: new Date(2024, 0, 10) }}
|
|
1671
|
-
/>
|
|
1672
|
-
)
|
|
1673
|
-
|
|
1674
|
-
await openDateRangePicker(user)
|
|
1675
|
-
|
|
1676
|
-
await waitFor(() => {
|
|
1677
|
-
expect(screen.getByRole("dialog")).toBeInTheDocument()
|
|
1678
|
-
})
|
|
1679
|
-
|
|
1680
|
-
const dialog = screen.getByRole("dialog")
|
|
1681
|
-
const day16Button = findDayButton(dialog, 16)
|
|
1682
|
-
expect(day16Button).toHaveAttribute("data-active", "false")
|
|
1683
|
-
})
|
|
1684
|
-
})
|