@12-apps/ui 6.6.0 → 6.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-QLBYAYUG.js → chunk-KR2BP7NK.js} +4 -4
- package/dist/chunk-KR2BP7NK.js.map +1 -0
- package/dist/{chunk-DFVRZ3UK.js → chunk-KXARS46L.js} +3 -3
- package/dist/chunk-KXARS46L.js.map +1 -0
- package/dist/{chunk-JP55QWVR.js → chunk-L7L6SX64.js} +5 -2
- package/dist/chunk-L7L6SX64.js.map +1 -0
- package/dist/{chunk-QZZVHY6U.js → chunk-PVLDKXKR.js} +7 -3
- package/dist/chunk-PVLDKXKR.js.map +1 -0
- package/dist/{chunk-3KWD5Y5O.js → chunk-RXE5CUUE.js} +8 -4
- package/dist/chunk-RXE5CUUE.js.map +1 -0
- package/dist/{chunk-H7UAGTVW.js → chunk-TSG5C7MP.js} +4 -3
- package/dist/chunk-TSG5C7MP.js.map +1 -0
- package/dist/{chunk-NUCLEOHF.js → chunk-UNM7KFDX.js} +44 -14
- package/dist/chunk-UNM7KFDX.js.map +1 -0
- package/dist/{chunk-CEKPLUQV.js → chunk-UY7UF7IN.js} +19 -13
- package/dist/chunk-UY7UF7IN.js.map +1 -0
- package/dist/data-display/Alert.js +1 -1
- package/dist/data-display/AsyncStateContainer.js +2 -1
- package/dist/data-display/AsyncStateContainer.js.map +1 -1
- package/dist/data-display/Banner.js +4 -2
- package/dist/data-display/Banner.js.map +1 -1
- package/dist/data-display/CardKit.js +3 -1
- package/dist/data-display/CardKit.js.map +1 -1
- package/dist/data-display/Carousel.js +5 -2
- package/dist/data-display/Carousel.js.map +1 -1
- package/dist/data-display/DataGrid.js +1 -1
- package/dist/data-display/DataViews.js +90 -66
- package/dist/data-display/DataViews.js.map +1 -1
- package/dist/data-display/HoverCard.js +4 -1
- package/dist/data-display/HoverCard.js.map +1 -1
- package/dist/data-display/Lightbox.js +147 -117
- package/dist/data-display/Lightbox.js.map +1 -1
- package/dist/data-display/MapPreview.js +14 -10
- package/dist/data-display/MapPreview.js.map +1 -1
- package/dist/data-display/Table.js +4 -2
- package/dist/data-display/Table.js.map +1 -1
- package/dist/data-display/TimingDiagram.js +3 -2
- package/dist/data-display/TimingDiagram.js.map +1 -1
- package/dist/feedback/Sonner.js +5 -4
- package/dist/feedback/Sonner.js.map +1 -1
- package/dist/feedback/StackedModal.js +1 -1
- package/dist/feedback/TutorialOverlay.js +19 -5
- package/dist/feedback/TutorialOverlay.js.map +1 -1
- package/dist/form/AddressAutocomplete.js +16 -8
- package/dist/form/AddressAutocomplete.js.map +1 -1
- package/dist/form/Autocomplete.js +9 -7
- package/dist/form/Autocomplete.js.map +1 -1
- package/dist/form/Calendar.js +1 -1
- package/dist/form/CodeEditor.js +14 -9
- package/dist/form/CodeEditor.js.map +1 -1
- package/dist/form/DateRangePicker.js +10 -3
- package/dist/form/DateRangePicker.js.map +1 -1
- package/dist/form/Menubar.js +4 -1
- package/dist/form/Menubar.js.map +1 -1
- package/dist/form/PasswordStrength.js +48 -28
- package/dist/form/PasswordStrength.js.map +1 -1
- package/dist/form/PhoneInput.js +11 -5
- package/dist/form/PhoneInput.js.map +1 -1
- package/dist/form/SearchPalette.js +4 -1
- package/dist/form/SearchPalette.js.map +1 -1
- package/dist/form/Textarea.js +21 -19
- package/dist/form/Textarea.js.map +1 -1
- package/dist/form/UploadButton.js +16 -11
- package/dist/form/UploadButton.js.map +1 -1
- package/dist/layout/ContentToolbar.js +1 -1
- package/dist/layout/Dashboard.js +2 -1
- package/dist/layout/Dashboard.js.map +1 -1
- package/dist/layout/ScrollArea.js +9 -3
- package/dist/layout/ScrollArea.js.map +1 -1
- package/dist/layout/TableFilter.js +1 -1
- package/dist/navigation/Breadcrumbs.js +9 -3
- package/dist/navigation/Breadcrumbs.js.map +1 -1
- package/dist/navigation/CommandPalette.js +20 -7
- package/dist/navigation/CommandPalette.js.map +1 -1
- package/dist/navigation/Pagination.js +1 -1
- package/dist/navigation/Tabs.js +7 -3
- package/dist/navigation/Tabs.js.map +1 -1
- package/dist/pt-BR.js +192 -5
- package/dist/pt-BR.js.map +1 -1
- package/dist/types/components/data-display/Alert/Alert.d.ts +9 -2
- package/dist/types/components/data-display/Alert/Alert.d.ts.map +1 -1
- package/dist/types/components/data-display/Alert/Alert.types.d.ts +25 -9
- package/dist/types/components/data-display/Alert/Alert.types.d.ts.map +1 -1
- package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.d.ts.map +1 -1
- package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.types.d.ts +6 -0
- package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Banner/Banner.d.ts.map +1 -1
- package/dist/types/components/data-display/Banner/Banner.types.d.ts +2 -0
- package/dist/types/components/data-display/Banner/Banner.types.d.ts.map +1 -1
- package/dist/types/components/data-display/CardKit/card-actions-context.d.ts +3 -1
- package/dist/types/components/data-display/CardKit/card-actions-context.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.chrome.d.ts +3 -0
- package/dist/types/components/data-display/Carousel/Carousel.chrome.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.parts.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.types.d.ts +7 -0
- package/dist/types/components/data-display/Carousel/Carousel.types.d.ts.map +1 -1
- package/dist/types/components/data-display/DataGrid/DataGrid.states.d.ts +1 -0
- package/dist/types/components/data-display/DataGrid/DataGrid.states.d.ts.map +1 -1
- package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts +5 -0
- package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-category-pill.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +29 -1
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts +12 -1
- package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-grid-bodies.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-grid-parts.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-pagination.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-table-parts.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-toolbar.d.ts.map +1 -1
- package/dist/types/components/data-display/HoverCard/HoverCard.content.d.ts +1 -1
- package/dist/types/components/data-display/HoverCard/HoverCard.content.d.ts.map +1 -1
- package/dist/types/components/data-display/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/types/components/data-display/HoverCard/HoverCard.types.d.ts +2 -0
- package/dist/types/components/data-display/HoverCard/HoverCard.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.types.d.ts +9 -0
- package/dist/types/components/data-display/Lightbox/Lightbox.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/LightboxControls.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/lightbox-copy-context.d.ts +17 -0
- package/dist/types/components/data-display/Lightbox/lightbox-copy-context.d.ts.map +1 -0
- package/dist/types/components/data-display/MapPreview/MapControlBar.d.ts +7 -0
- package/dist/types/components/data-display/MapPreview/MapControlBar.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapLayers.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapPreview.types.d.ts +9 -0
- package/dist/types/components/data-display/MapPreview/MapPreview.types.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapSearchBar.d.ts +2 -0
- package/dist/types/components/data-display/MapPreview/MapSearchBar.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.types.d.ts +5 -0
- package/dist/types/components/data-display/Table/Table.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/TableStates.d.ts +3 -1
- package/dist/types/components/data-display/Table/TableStates.d.ts.map +1 -1
- package/dist/types/components/data-display/TimingDiagram/TimingDiagram.d.ts.map +1 -1
- package/dist/types/components/data-display/TimingDiagram/TimingDiagram.types.d.ts +3 -0
- package/dist/types/components/data-display/TimingDiagram/TimingDiagram.types.d.ts.map +1 -1
- package/dist/types/components/feedback/Sonner/Sonner.d.ts +8 -0
- package/dist/types/components/feedback/Sonner/Sonner.d.ts.map +1 -1
- package/dist/types/components/feedback/Sonner/Sonner.types.d.ts +2 -0
- package/dist/types/components/feedback/Sonner/Sonner.types.d.ts.map +1 -1
- package/dist/types/components/feedback/Sonner/SonnerToast.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts +2 -0
- package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts +2 -0
- package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.types.d.ts +3 -0
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.types.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts +2 -0
- package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.types.d.ts +7 -0
- package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.types.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressAutocompleteField.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts +1 -0
- package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts.map +1 -1
- package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts +1 -0
- package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts.map +1 -1
- package/dist/types/components/form/Autocomplete/Autocomplete.d.ts.map +1 -1
- package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts +9 -3
- package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts.map +1 -1
- package/dist/types/components/form/Autocomplete/Autocomplete.types.d.ts +7 -0
- package/dist/types/components/form/Autocomplete/Autocomplete.types.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/Calendar.types.d.ts +6 -0
- package/dist/types/components/form/Calendar/Calendar.types.d.ts.map +1 -1
- package/dist/types/components/form/CodeEditor/CodeEditor.d.ts.map +1 -1
- package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts +7 -0
- package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts.map +1 -1
- package/dist/types/components/form/CodeEditor/CodeEditorToolbar.d.ts +2 -0
- package/dist/types/components/form/CodeEditor/CodeEditorToolbar.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.range.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts +11 -0
- package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePickerFields.d.ts.map +1 -1
- package/dist/types/components/form/Menubar/Menubar.d.ts.map +1 -1
- package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts +1 -0
- package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts.map +1 -1
- package/dist/types/components/form/Menubar/Menubar.types.d.ts +5 -0
- package/dist/types/components/form/Menubar/Menubar.types.d.ts.map +1 -1
- package/dist/types/components/form/PasswordStrength/PasswordStrength.d.ts.map +1 -1
- package/dist/types/components/form/PasswordStrength/PasswordStrength.helpers.d.ts +4 -2
- package/dist/types/components/form/PasswordStrength/PasswordStrength.helpers.d.ts.map +1 -1
- package/dist/types/components/form/PasswordStrength/PasswordStrength.types.d.ts +8 -0
- package/dist/types/components/form/PasswordStrength/PasswordStrength.types.d.ts.map +1 -1
- package/dist/types/components/form/PhoneInput/PhoneInput.d.ts.map +1 -1
- package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts +7 -0
- package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts.map +1 -1
- package/dist/types/components/form/SearchPalette/SearchPalette.d.ts.map +1 -1
- package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts +2 -0
- package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts.map +1 -1
- package/dist/types/components/form/SearchPalette/SearchPalette.types.d.ts +6 -0
- package/dist/types/components/form/SearchPalette/SearchPalette.types.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/Textarea.types.d.ts +16 -1
- package/dist/types/components/form/Textarea/Textarea.types.d.ts.map +1 -1
- package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts +7 -0
- package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts.map +1 -1
- package/dist/types/components/form/UploadButton/UploadButton.d.ts.map +1 -1
- package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts +6 -3
- package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts.map +1 -1
- package/dist/types/components/form/UploadButton/UploadButton.types.d.ts +7 -0
- package/dist/types/components/form/UploadButton/UploadButton.types.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts +12 -0
- package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts.map +1 -1
- package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts +1 -1
- package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts.map +1 -1
- package/dist/types/components/layout/Dashboard/Dashboard.d.ts +1 -1
- package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts +4 -0
- package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts.map +1 -1
- package/dist/types/components/layout/Dashboard/DashboardParts.d.ts +1 -1
- package/dist/types/components/layout/Dashboard/DashboardParts.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +21 -3
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts +2 -0
- package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts.map +1 -1
- package/dist/types/components/layout/TableFilter/TableFilter.d.ts +1 -1
- package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
- package/dist/types/components/layout/TableFilter/TableFilter.types.d.ts +7 -0
- package/dist/types/components/layout/TableFilter/TableFilter.types.d.ts.map +1 -1
- package/dist/types/components/layout/TableFilter/TableFilterContext.d.ts +9 -0
- package/dist/types/components/layout/TableFilter/TableFilterContext.d.ts.map +1 -1
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEntry.d.ts +2 -0
- package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEntry.d.ts.map +1 -1
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +3 -0
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPalette.types.d.ts +3 -0
- package/dist/types/components/navigation/CommandPalette/CommandPalette.types.d.ts.map +1 -1
- package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts +2 -0
- package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts.map +1 -1
- package/dist/types/components/navigation/Pagination/Pagination.d.ts.map +1 -1
- package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +2 -0
- package/dist/types/components/navigation/Pagination/Pagination.types.d.ts.map +1 -1
- package/dist/types/components/navigation/Pagination/PaginationParts.d.ts +2 -0
- package/dist/types/components/navigation/Pagination/PaginationParts.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +2 -0
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts +6 -2
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts +6 -0
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts.map +1 -1
- package/dist/types/components/utility/InstallPrompt/InstallPrompt.d.ts +4 -2
- package/dist/types/components/utility/InstallPrompt/InstallPrompt.d.ts.map +1 -1
- package/dist/types/components/utility/InstallPrompt/InstallPrompt.types.d.ts +8 -7
- package/dist/types/components/utility/InstallPrompt/InstallPrompt.types.d.ts.map +1 -1
- package/dist/types/copy/data-display.d.ts +56 -0
- package/dist/types/copy/data-display.d.ts.map +1 -0
- package/dist/types/copy/feedback.d.ts +38 -0
- package/dist/types/copy/feedback.d.ts.map +1 -0
- package/dist/types/copy/form.d.ts +146 -0
- package/dist/types/copy/form.d.ts.map +1 -0
- package/dist/types/copy/layout.d.ts +18 -0
- package/dist/types/copy/layout.d.ts.map +1 -0
- package/dist/types/copy/navigation.d.ts +24 -0
- package/dist/types/copy/navigation.d.ts.map +1 -0
- package/dist/types/copy/shared.d.ts +119 -0
- package/dist/types/copy/shared.d.ts.map +1 -0
- package/dist/types/copy/utility.d.ts +35 -0
- package/dist/types/copy/utility.d.ts.map +1 -0
- package/dist/types/copy.d.ts +13 -113
- package/dist/types/copy.d.ts.map +1 -1
- package/dist/types/pt-BR.d.ts +15 -18
- package/dist/types/pt-BR.d.ts.map +1 -1
- package/dist/types/pt-BR.data-display.d.ts +13 -0
- package/dist/types/pt-BR.data-display.d.ts.map +1 -0
- package/dist/types/pt-BR.feedback.d.ts +8 -0
- package/dist/types/pt-BR.feedback.d.ts.map +1 -0
- package/dist/types/pt-BR.form.d.ts +13 -0
- package/dist/types/pt-BR.form.d.ts.map +1 -0
- package/dist/types/pt-BR.layout.d.ts +7 -0
- package/dist/types/pt-BR.layout.d.ts.map +1 -0
- package/dist/types/pt-BR.navigation.d.ts +8 -0
- package/dist/types/pt-BR.navigation.d.ts.map +1 -0
- package/dist/types/pt-BR.shared.d.ts +21 -0
- package/dist/types/pt-BR.shared.d.ts.map +1 -0
- package/dist/types/pt-BR.utility.d.ts +8 -0
- package/dist/types/pt-BR.utility.d.ts.map +1 -0
- package/dist/types/user-avatar/user-avatar.d.ts +7 -1
- package/dist/types/user-avatar/user-avatar.d.ts.map +1 -1
- package/dist/user-avatar.js +2 -2
- package/dist/user-avatar.js.map +1 -1
- package/dist/utility/InfiniteScroll.js +7 -5
- package/dist/utility/InfiniteScroll.js.map +1 -1
- package/dist/utility/InstallPrompt.js +14 -13
- package/dist/utility/InstallPrompt.js.map +1 -1
- package/package.json +1 -1
- package/src/components/data-display/Alert/Alert.tsx +22 -5
- package/src/components/data-display/Alert/Alert.types.ts +20 -10
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.tsx +2 -1
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.types.ts +6 -0
- package/src/components/data-display/Banner/Banner.tsx +5 -2
- package/src/components/data-display/Banner/Banner.types.ts +2 -0
- package/src/components/data-display/CardKit/card-actions-context.tsx +4 -0
- package/src/components/data-display/Carousel/Carousel.chrome.tsx +5 -0
- package/src/components/data-display/Carousel/Carousel.parts.tsx +4 -3
- package/src/components/data-display/Carousel/Carousel.types.ts +7 -0
- package/src/components/data-display/DataGrid/DataGrid.states.tsx +3 -3
- package/src/components/data-display/DataGrid/DataGrid.tsx +1 -1
- package/src/components/data-display/DataGrid/DataGrid.types.ts +5 -0
- package/src/components/data-display/DataViews/data-views-category-pill.tsx +2 -0
- package/src/components/data-display/DataViews/data-views-copy.ts +29 -1
- package/src/components/data-display/DataViews/data-views-day-input.tsx +14 -3
- package/src/components/data-display/DataViews/data-views-filter-panel.tsx +2 -1
- package/src/components/data-display/DataViews/data-views-grid-bodies.tsx +3 -0
- package/src/components/data-display/DataViews/data-views-grid-parts.tsx +9 -10
- package/src/components/data-display/DataViews/data-views-more-fields.tsx +3 -1
- package/src/components/data-display/DataViews/data-views-pagination.tsx +3 -0
- package/src/components/data-display/DataViews/data-views-range-pill.tsx +3 -1
- package/src/components/data-display/DataViews/data-views-table-parts.tsx +1 -0
- package/src/components/data-display/DataViews/data-views-toolbar.tsx +2 -0
- package/src/components/data-display/HoverCard/HoverCard.content.tsx +10 -2
- package/src/components/data-display/HoverCard/HoverCard.tsx +2 -3
- package/src/components/data-display/HoverCard/HoverCard.types.ts +2 -0
- package/src/components/data-display/Lightbox/Lightbox.tsx +3 -0
- package/src/components/data-display/Lightbox/Lightbox.types.ts +9 -0
- package/src/components/data-display/Lightbox/LightboxControls.tsx +28 -15
- package/src/components/data-display/Lightbox/lightbox-copy-context.tsx +42 -0
- package/src/components/data-display/MapPreview/MapControlBar.tsx +17 -9
- package/src/components/data-display/MapPreview/MapLayers.tsx +2 -0
- package/src/components/data-display/MapPreview/MapPreview.types.ts +10 -0
- package/src/components/data-display/MapPreview/MapSearchBar.tsx +4 -1
- package/src/components/data-display/Table/Table.tsx +7 -2
- package/src/components/data-display/Table/Table.types.ts +5 -0
- package/src/components/data-display/Table/TableStates.tsx +2 -2
- package/src/components/data-display/TimingDiagram/TimingDiagram.tsx +3 -2
- package/src/components/data-display/TimingDiagram/TimingDiagram.types.ts +3 -0
- package/src/components/feedback/Sonner/Sonner.tsx +15 -3
- package/src/components/feedback/Sonner/Sonner.types.ts +2 -0
- package/src/components/feedback/Sonner/SonnerToast.tsx +2 -1
- package/src/components/feedback/StackedModal/StackedModal.parts.tsx +10 -3
- package/src/components/feedback/StackedModal/StackedModal.tsx +2 -1
- package/src/components/feedback/StackedModal/StackedModal.types.ts +2 -0
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +13 -1
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.types.ts +3 -0
- package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +10 -4
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.types.ts +7 -0
- package/src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx +2 -0
- package/src/components/form/AddressAutocomplete/AddressFallbackField.tsx +4 -2
- package/src/components/form/AddressAutocomplete/AddressInputField.tsx +13 -6
- package/src/components/form/Autocomplete/Autocomplete.parts.tsx +9 -6
- package/src/components/form/Autocomplete/Autocomplete.tsx +2 -1
- package/src/components/form/Autocomplete/Autocomplete.types.ts +7 -0
- package/src/components/form/Calendar/Calendar.tsx +2 -2
- package/src/components/form/Calendar/Calendar.types.ts +7 -0
- package/src/components/form/CodeEditor/CodeEditor.tsx +6 -4
- package/src/components/form/CodeEditor/CodeEditor.types.ts +7 -0
- package/src/components/form/CodeEditor/CodeEditorToolbar.tsx +12 -5
- package/src/components/form/DateRangePicker/DateRangePicker.range.ts +2 -0
- package/src/components/form/DateRangePicker/DateRangePicker.tsx +4 -0
- package/src/components/form/DateRangePicker/DateRangePicker.types.ts +11 -0
- package/src/components/form/DateRangePicker/DateRangePickerFields.tsx +2 -0
- package/src/components/form/Menubar/Menubar.toolbar.tsx +3 -1
- package/src/components/form/Menubar/Menubar.tsx +2 -1
- package/src/components/form/Menubar/Menubar.types.ts +5 -0
- package/src/components/form/PasswordStrength/PasswordStrength.helpers.tsx +33 -17
- package/src/components/form/PasswordStrength/PasswordStrength.tsx +29 -13
- package/src/components/form/PasswordStrength/PasswordStrength.types.ts +9 -0
- package/src/components/form/PhoneInput/PhoneInput.tsx +15 -5
- package/src/components/form/PhoneInput/PhoneInput.types.ts +7 -0
- package/src/components/form/SearchPalette/SearchPalette.parts.tsx +4 -1
- package/src/components/form/SearchPalette/SearchPalette.tsx +4 -1
- package/src/components/form/SearchPalette/SearchPalette.types.ts +6 -0
- package/src/components/form/Textarea/Textarea.tsx +6 -1
- package/src/components/form/Textarea/Textarea.types.ts +14 -1
- package/src/components/form/Textarea/TextareaRichEditor.tsx +28 -18
- package/src/components/form/UploadButton/UploadButton.parts.tsx +16 -7
- package/src/components/form/UploadButton/UploadButton.tsx +4 -1
- package/src/components/form/UploadButton/UploadButton.types.ts +8 -0
- package/src/components/layout/ContentToolbar/ContentToolbar.tsx +10 -2
- package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +12 -0
- package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +15 -4
- package/src/components/layout/ContentToolbar/SortByDropdown.tsx +12 -3
- package/src/components/layout/ContentToolbar/ViewSelector.tsx +2 -1
- package/src/components/layout/Dashboard/Dashboard.types.ts +4 -0
- package/src/components/layout/Dashboard/DashboardParts.tsx +2 -1
- package/src/components/layout/ScrollArea/ScrollArea.tsx +16 -3
- package/src/components/layout/ScrollArea/ScrollArea.types.ts +19 -4
- package/src/components/layout/ScrollArea/ScrollViewport.tsx +4 -1
- package/src/components/layout/TableFilter/TableFilter.tsx +19 -11
- package/src/components/layout/TableFilter/TableFilter.types.ts +8 -0
- package/src/components/layout/TableFilter/TableFilterContext.tsx +10 -0
- package/src/components/navigation/Breadcrumbs/BreadcrumbEntry.tsx +11 -4
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.tsx +2 -0
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.types.ts +3 -0
- package/src/components/navigation/CommandPalette/CommandPalette.tsx +15 -5
- package/src/components/navigation/CommandPalette/CommandPalette.types.ts +3 -0
- package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +5 -2
- package/src/components/navigation/Pagination/Pagination.tsx +2 -0
- package/src/components/navigation/Pagination/Pagination.types.ts +2 -0
- package/src/components/navigation/Pagination/PaginationParts.tsx +4 -1
- package/src/components/navigation/Tabs/Tabs.tsx +8 -3
- package/src/components/navigation/Tabs/Tabs.types.ts +2 -0
- package/src/components/utility/InfiniteScroll/InfiniteScroll.parts.tsx +4 -4
- package/src/components/utility/InfiniteScroll/InfiniteScroll.tsx +4 -2
- package/src/components/utility/InfiniteScroll/InfiniteScroll.types.ts +6 -0
- package/src/components/utility/InstallPrompt/InstallPrompt.tsx +18 -13
- package/src/components/utility/InstallPrompt/InstallPrompt.types.ts +9 -7
- package/src/copy/data-display.ts +60 -0
- package/src/copy/feedback.ts +39 -0
- package/src/copy/form.ts +154 -0
- package/src/copy/layout.ts +18 -0
- package/src/copy/navigation.ts +25 -0
- package/src/copy/shared.ts +122 -0
- package/src/copy/utility.ts +36 -0
- package/src/copy.ts +13 -117
- package/src/pt-BR.data-display.ts +236 -0
- package/src/pt-BR.feedback.ts +25 -0
- package/src/pt-BR.form.ts +96 -0
- package/src/pt-BR.layout.ts +15 -0
- package/src/pt-BR.navigation.ts +21 -0
- package/src/pt-BR.shared.ts +94 -0
- package/src/pt-BR.ts +15 -267
- package/src/pt-BR.utility.ts +21 -0
- package/src/user-avatar/user-avatar.tsx +8 -2
- package/dist/chunk-3KWD5Y5O.js.map +0 -1
- package/dist/chunk-CEKPLUQV.js.map +0 -1
- package/dist/chunk-DFVRZ3UK.js.map +0 -1
- package/dist/chunk-H7UAGTVW.js.map +0 -1
- package/dist/chunk-JP55QWVR.js.map +0 -1
- package/dist/chunk-NUCLEOHF.js.map +0 -1
- package/dist/chunk-QLBYAYUG.js.map +0 -1
- package/dist/chunk-QZZVHY6U.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/data-display/Carousel/Carousel.tsx","../../src/components/data-display/Carousel/Carousel.hooks.ts","../../src/components/data-display/Carousel/Carousel.parts.tsx","../../src/components/data-display/Carousel/Carousel.chrome.tsx","../../src/components/data-display/Carousel/Carousel.slide.tsx","../../src/components/data-display/Carousel/Carousel.styles.ts"],"sourcesContent":["import { Box, CircularProgress, Fade, Slide, useTheme, Zoom } from '@mui/material';\nimport React, { useCallback, useRef } from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport { useCarouselNavigation } from './Carousel.hooks';\nimport { CarouselChrome } from './Carousel.chrome';\nimport { CarouselTrack } from './Carousel.slide';\nimport { containerStyles } from './Carousel.styles';\nimport type { CarouselItem, CarouselProps } from './Carousel.types';\nimport { muiColor } from '../../../tokens/scales';\n\nexport { CarouselArrows, CarouselIndicators, CarouselThumbnails } from './Carousel.parts';\n\nconst DEFAULTS = {\n variant: 'default',\n size: 'md',\n color: 'primary',\n autoPlay: false,\n autoPlayInterval: 3000,\n loop: true,\n showIndicators: true,\n showArrows: true,\n showThumbnails: false,\n glow: false,\n pulse: false,\n glass: false,\n gradient: false,\n loading: false,\n disabled: false,\n height: 400,\n width: '100%',\n pauseOnHover: true,\n indicatorPosition: 'bottom',\n arrowPosition: 'overlay',\n animation: 'slide',\n} satisfies Partial<CarouselProps>;\n\ntype ResolvedCarouselProps = CarouselProps & Required<Pick<CarouselProps, keyof typeof DEFAULTS>>;\n\n/**\n * `flip` reuses Slide with a fixed direction — MUI has no flip transition, and a\n * slide from one side reads closer to a flip than a fade does.\n */\nconst TRANSITIONS = { fade: Fade, zoom: Zoom, flip: Slide, slide: Slide } as const;\n\nexport const Carousel: React.FC<CarouselProps> = (props) => {\n const resolved = withDefaults(props, DEFAULTS) as ResolvedCarouselProps;\n const {\n items, variant, size, color, autoPlay, autoPlayInterval, loop, loading, disabled,\n className, style, height, width, pauseOnHover, onClick, onChange, onFocus, onBlur,\n animation, glow, pulse, glass, gradient,\n } = resolved;\n\n const theme = useTheme();\n const containerRef = useRef<HTMLDivElement>(null);\n\n const { activeIndex, handleNext, handlePrev, handleSelect, hoverProps } = useCarouselNavigation({\n count: items.length,\n loop,\n autoPlay,\n autoPlayInterval,\n pauseOnHover,\n disabled,\n onChange,\n });\n\n const handleItemClick = useCallback(\n (item: CarouselItem, index: number) => {\n if (!disabled) {\n onClick?.(item, index);\n }\n },\n [disabled, onClick],\n );\n\n const frameSx = containerStyles({\n theme, variant, size, color, height, width, glow, pulse, glass, gradient,\n });\n\n if (loading) {\n return (\n <Box sx={{ ...frameSx, display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <CircularProgress color={muiColor(color, 'inherit')} />\n </Box>\n );\n }\n\n return (\n <Box\n ref={containerRef}\n className={className}\n data-testid=\"carousel-container\"\n sx={{ ...frameSx, ...style }}\n onFocus={onFocus}\n onBlur={onBlur}\n {...hoverProps}\n >\n <CarouselTrack\n items={items}\n activeIndex={activeIndex}\n variant={variant}\n animation={animation}\n transition={TRANSITIONS[animation] ?? Slide}\n clickable={Boolean(onClick)}\n onSelect={handleItemClick}\n />\n\n <CarouselChrome\n {...resolved}\n activeIndex={activeIndex}\n onPrev={handlePrev}\n onNext={handleNext}\n onSelect={handleSelect}\n />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\ninterface CarouselNavigationInput {\n count: number;\n loop: boolean;\n autoPlay: boolean;\n autoPlayInterval: number;\n pauseOnHover: boolean;\n disabled: boolean;\n onChange?: (index: number) => void;\n}\n\n/**\n * Steps `current` by `step`, wrapping when `loop` allows it and stopping at the\n * end when it does not. Returns the same index it was given when there is\n * nowhere to go, which is what lets the caller skip a no-op `onChange`.\n */\nconst stepIndex = (current: number, step: number, count: number, loop: boolean) => {\n const next = current + step;\n\n if (next >= count) return loop ? 0 : current;\n if (next < 0) return loop ? count - 1 : 0;\n return next;\n};\n\n/**\n * Which slide is showing and everything that changes it: the arrows, an\n * indicator click, and the autoplay timer.\n *\n * Hover is tracked here rather than in the component because its only job is to\n * pause that timer.\n */\nexport const useCarouselNavigation = ({\n count,\n loop,\n autoPlay,\n autoPlayInterval,\n pauseOnHover,\n disabled,\n onChange,\n}: CarouselNavigationInput) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const [isHovered, setIsHovered] = useState(false);\n const intervalRef = useRef<number | null>(null);\n\n const goBy = useCallback(\n (step: number) => {\n setActiveIndex((prev) => {\n const next = stepIndex(prev, step, count, loop);\n if (next !== prev) {\n onChange?.(next);\n }\n return next;\n });\n },\n [count, loop, onChange],\n );\n\n const handleNext = useCallback(() => goBy(1), [goBy]);\n const handlePrev = useCallback(() => goBy(-1), [goBy]);\n\n const handleSelect = useCallback(\n (index: number) => {\n setActiveIndex(index);\n onChange?.(index);\n },\n [onChange],\n );\n\n useEffect(() => {\n if (!autoPlay || isHovered || disabled) return;\n\n intervalRef.current = window.setInterval(handleNext, autoPlayInterval);\n\n return () => {\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current);\n }\n };\n }, [autoPlay, autoPlayInterval, isHovered, disabled, handleNext]);\n\n const hoverProps = {\n onMouseEnter: () => pauseOnHover && setIsHovered(true),\n onMouseLeave: () => pauseOnHover && setIsHovered(false),\n };\n\n return { activeIndex, handleNext, handlePrev, handleSelect, hoverProps };\n};\n","import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nimport FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord';\nimport { alpha, Box, IconButton, Typography, useTheme } from '@mui/material';\nimport type { CSSObject, Theme } from '@mui/material';\nimport React from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport { accentFor, muiSize } from '../../../tokens/scales';\n\nimport type {\n CarouselArrowsProps,\n CarouselIndicatorsProps,\n CarouselItem,\n CarouselThumbnailsProps,\n} from './Carousel.types';\n\ntype IndicatorPosition = NonNullable<CarouselIndicatorsProps['position']>;\ntype IndicatorVariant = NonNullable<CarouselIndicatorsProps['variant']>;\ntype Color = NonNullable<CarouselIndicatorsProps['color']>;\n\n/** Fires `onSelect` for the keys a native button would treat as activation. */\nconst activateOnKey = (onSelect: () => void) => (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect();\n }\n};\n\nconst INDICATOR_POSITIONS = (theme: Theme): Record<IndicatorPosition, CSSObject> => ({\n top: { top: theme.spacing(2), left: '50%', transform: 'translateX(-50%)' },\n bottom: { bottom: theme.spacing(2), left: '50%', transform: 'translateX(-50%)' },\n left: {\n left: theme.spacing(2),\n top: '50%',\n transform: 'translateY(-50%)',\n flexDirection: 'column',\n },\n right: {\n right: theme.spacing(2),\n top: '50%',\n transform: 'translateY(-50%)',\n flexDirection: 'column',\n },\n});\n\ninterface IndicatorProps {\n index: number;\n isActive: boolean;\n color: Color;\n onSelect: () => void;\n}\n\n/** Attributes every indicator variant carries, whatever it draws. */\nconst indicatorAttrs = (index: number, isActive: boolean) => ({\n 'aria-label': `Go to slide ${index + 1}`,\n 'data-testid': `carousel-indicator-${index}`,\n 'data-active': isActive,\n});\n\nconst LineIndicator: React.FC<IndicatorProps> = ({ index, isActive, color, onSelect }) => {\n const theme = useTheme();\n\n return (\n <Box\n role=\"button\"\n tabIndex={0}\n {...indicatorAttrs(index, isActive)}\n sx={{\n width: isActive ? 30 : 20,\n height: 3,\n backgroundColor: isActive\n ? accentFor(theme, color).main\n : alpha(accentFor(theme, color).main, 0.3),\n borderRadius: 1.5,\n transition: theme.transitions.create(['width', 'background-color']),\n cursor: 'pointer',\n }}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n />\n );\n};\n\nconst NumberIndicator: React.FC<IndicatorProps> = ({ index, isActive, color, onSelect }) => {\n const theme = useTheme();\n\n return (\n <Box\n role=\"button\"\n tabIndex={0}\n {...indicatorAttrs(index, isActive)}\n sx={{\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '50%',\n backgroundColor: isActive ? accentFor(theme, color).main : 'transparent',\n color: isActive ? accentFor(theme, color).contrastText : accentFor(theme, color).main,\n border: `1px solid ${accentFor(theme, color).main}`,\n fontSize: '0.75rem',\n fontWeight: isActive ? 'bold' : 'normal',\n cursor: 'pointer',\n transition: theme.transitions.create(['all']),\n }}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n >\n {index + 1}\n </Box>\n );\n};\n\nconst DotIndicator: React.FC<IndicatorProps> = ({ index, isActive, color, onSelect }) => {\n const theme = useTheme();\n\n return (\n <IconButton\n size=\"small\"\n {...indicatorAttrs(index, isActive)}\n onClick={onSelect}\n sx={{\n p: 0.5,\n color: isActive ? accentFor(theme, color).main : alpha(accentFor(theme, color).main, 0.3),\n transform: isActive ? 'scale(1.2)' : 'scale(1)',\n transition: theme.transitions.create(['transform', 'color']),\n }}\n >\n <FiberManualRecordIcon fontSize=\"small\" />\n </IconButton>\n );\n};\n\nconst INDICATORS: Record<IndicatorVariant, React.FC<IndicatorProps>> = {\n lines: LineIndicator,\n numbers: NumberIndicator,\n dots: DotIndicator,\n};\n\nconst INDICATORS_DEFAULTS = {\n position: 'bottom',\n color: 'primary',\n variant: 'dots',\n} satisfies Partial<CarouselIndicatorsProps>;\n\nexport const CarouselIndicators: React.FC<CarouselIndicatorsProps> = (props) => {\n const { count, activeIndex, onSelect, position, color, variant, className, style } = withDefaults(\n props,\n INDICATORS_DEFAULTS,\n ) as CarouselIndicatorsProps & Required<Pick<CarouselIndicatorsProps, keyof typeof INDICATORS_DEFAULTS>>;\n\n const theme = useTheme();\n const Indicator = INDICATORS[variant] ?? DotIndicator;\n\n return (\n <Box\n className={className}\n data-testid=\"carousel-indicators\"\n sx={{\n position: 'absolute',\n display: 'flex',\n gap: 1,\n zIndex: 2,\n ...(INDICATOR_POSITIONS(theme)[position] ?? INDICATOR_POSITIONS(theme).bottom),\n ...style,\n }}\n >\n {Array.from({ length: count }).map((_, index) => (\n <Indicator\n key={index}\n index={index}\n isActive={index === activeIndex}\n color={color}\n onSelect={() => onSelect(index)}\n />\n ))}\n </Box>\n );\n};\n\nconst ARROWS_DEFAULTS = {\n position: 'overlay',\n disabled: false,\n disablePrev: false,\n disableNext: false,\n color: 'primary',\n size: 'md',\n} satisfies Partial<CarouselArrowsProps>;\n\n/**\n * All three positions place the arrow the same way; only `overlay` fades it back\n * until hovered, and only `outside` sits it clear of the frame.\n */\nconst arrowSx = (theme: Theme, color: Color, isOverlay: boolean): CSSObject => ({\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 3,\n backgroundColor: alpha(theme.palette.background.paper, 0.8),\n color: accentFor(theme, color).main,\n '&:disabled': { opacity: 0.3 },\n ...(isOverlay\n ? {\n opacity: 0.7,\n '&:hover': { backgroundColor: theme.palette.background.paper, opacity: 1 },\n }\n : { '&:hover': { backgroundColor: theme.palette.background.paper } }),\n});\n\nexport const CarouselArrows: React.FC<CarouselArrowsProps> = (props) => {\n const {\n onPrev, onNext, position, disabled, disablePrev, disableNext, color, size, className, style,\n } = withDefaults(props, ARROWS_DEFAULTS) as CarouselArrowsProps &\n Required<Pick<CarouselArrowsProps, keyof typeof ARROWS_DEFAULTS>>;\n\n const theme = useTheme();\n const sx = arrowSx(theme, color, position === 'overlay');\n const offset = position === 'outside' ? -40 : 8;\n\n return (\n <Box data-testid=\"carousel-navigation\">\n <IconButton\n onClick={onPrev}\n disabled={disabled || disablePrev}\n size={muiSize(size)}\n className={className}\n aria-label=\"Previous slide\"\n data-testid=\"carousel-prev-button\"\n sx={{ ...sx, left: offset, ...style }}\n >\n <ArrowBackIosIcon />\n </IconButton>\n\n <IconButton\n onClick={onNext}\n disabled={disabled || disableNext}\n aria-label=\"Next slide\"\n size={muiSize(size)}\n className={className}\n data-testid=\"carousel-next-button\"\n sx={{ ...sx, right: offset, ...style }}\n >\n <ArrowForwardIosIcon />\n </IconButton>\n </Box>\n );\n};\n\nconst THUMBNAIL_SIZES = { xs: 40, sm: 60, md: 80, lg: 100, xl: 120 } as const;\nconst DEFAULT_THUMBNAIL_SIZE = 60;\n\nconst Thumbnail: React.FC<{\n item: CarouselItem;\n index: number;\n isActive: boolean;\n side: number;\n onSelect: () => void;\n}> = ({ item, index, isActive, side, onSelect }) => {\n const theme = useTheme();\n\n return (\n <Box\n onClick={onSelect}\n data-testid={`carousel-thumbnail-${index}`}\n data-active={isActive}\n sx={{\n width: side,\n height: side,\n border: `2px solid ${isActive ? theme.palette.primary.main : 'transparent'}`,\n borderRadius: 1,\n overflow: 'hidden',\n cursor: 'pointer',\n opacity: isActive ? 1 : 0.6,\n transition: theme.transitions.create(['opacity', 'border-color']),\n '&:hover': { opacity: 1 },\n }}\n >\n {item.image ? (\n <Box\n component=\"img\"\n src={item.image}\n alt={item.alt || item.title}\n sx={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n ) : (\n // No image to show, so the slide's number stands in for it.\n <Box\n sx={{\n width: '100%',\n height: '100%',\n backgroundColor: theme.palette.grey[300],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography variant=\"caption\">{index + 1}</Typography>\n </Box>\n )}\n </Box>\n );\n};\n\nexport const CarouselThumbnails: React.FC<CarouselThumbnailsProps> = ({\n items,\n activeIndex,\n onSelect,\n size = 'sm',\n className,\n style,\n}) => {\n const theme = useTheme();\n const side = THUMBNAIL_SIZES[size as keyof typeof THUMBNAIL_SIZES] ?? DEFAULT_THUMBNAIL_SIZE;\n\n return (\n <Box\n className={className}\n data-testid=\"carousel-thumbnails\"\n sx={{\n position: 'absolute',\n // Hung below the frame, clear of its own height plus a gap.\n bottom: -side - 16,\n left: '50%',\n transform: 'translateX(-50%)',\n display: 'flex',\n gap: 1,\n p: 1,\n backgroundColor: alpha(theme.palette.background.paper, 0.9),\n borderRadius: 1,\n ...style,\n }}\n >\n {items.map((item, index) => (\n <Thumbnail\n key={item.id}\n item={item}\n index={index}\n isActive={index === activeIndex}\n side={side}\n onSelect={() => onSelect(index)}\n />\n ))}\n </Box>\n );\n};\n","import React from 'react';\n\nimport { CarouselArrows, CarouselIndicators, CarouselThumbnails } from './Carousel.parts';\nimport type {\n CarouselArrowsProps,\n CarouselIndicatorsProps,\n CarouselItem,\n CarouselThumbnailsProps,\n} from './Carousel.types';\n\ntype IndicatorPosition = NonNullable<CarouselIndicatorsProps['position']>;\ntype Color = NonNullable<CarouselIndicatorsProps['color']>;\n\nexport interface CarouselChromeProps {\n items: CarouselItem[];\n activeIndex: number;\n loop: boolean;\n disabled: boolean;\n showArrows: boolean;\n showIndicators: boolean;\n showThumbnails: boolean;\n arrowPosition: NonNullable<CarouselArrowsProps['position']>;\n indicatorPosition: IndicatorPosition;\n color: Color;\n size: NonNullable<CarouselThumbnailsProps['size']>;\n onPrev: () => void;\n onNext: () => void;\n onSelect: (index: number) => void;\n}\n\n/**\n * Everything drawn over the slides: the arrows, the indicators and the thumbnail\n * strip. Each is independently switchable, so they travel together rather than\n * as three conditional blocks inside the carousel's own render.\n */\nexport const CarouselChrome: React.FC<CarouselChromeProps> = ({\n items,\n activeIndex,\n loop,\n disabled,\n showArrows,\n showIndicators,\n showThumbnails,\n arrowPosition,\n indicatorPosition,\n color,\n size,\n onPrev,\n onNext,\n onSelect,\n}) => (\n <>\n {showArrows && !disabled && (\n <CarouselArrows\n onPrev={onPrev}\n onNext={onNext}\n position={arrowPosition}\n color={color}\n disablePrev={!loop && activeIndex === 0}\n disableNext={!loop && activeIndex === items.length - 1}\n />\n )}\n\n {showIndicators && (\n <CarouselIndicators\n count={items.length}\n activeIndex={activeIndex}\n onSelect={onSelect}\n position={indicatorPosition}\n color={color}\n />\n )}\n\n {showThumbnails && (\n <CarouselThumbnails\n items={items}\n activeIndex={activeIndex}\n onSelect={onSelect}\n size={size}\n />\n )}\n </>\n);\n","import { Box, Paper, Typography, useTheme } from '@mui/material';\nimport React from 'react';\n\nimport type { CarouselItem, CarouselProps } from './Carousel.types';\n\nexport interface CarouselSlideProps {\n item: CarouselItem;\n index: number;\n isActive: boolean;\n variant: NonNullable<CarouselProps['variant']>;\n clickable: boolean;\n onSelect: (item: CarouselItem, index: number) => void;\n}\n\n/**\n * A slide's caption. Over an image it is white with a shadow so it stays legible\n * against whatever the photograph happens to be; on a bare surface it uses the\n * ordinary text colours.\n */\nconst SlideCaption: React.FC<Pick<CarouselItem, 'title' | 'description' | 'content' | 'image'>> = ({\n title,\n description,\n content,\n image,\n}) => (\n <Box sx={{ position: 'relative', zIndex: 1, textAlign: 'center', p: 3 }}>\n {title && (\n <Typography\n variant=\"h5\"\n sx={{\n color: image ? 'white' : 'text.primary',\n textShadow: image ? '0 2px 4px rgba(0,0,0,0.5)' : 'none',\n mb: 1,\n }}\n >\n {title}\n </Typography>\n )}\n\n {description && (\n <Typography\n variant=\"body1\"\n sx={{\n color: image ? 'white' : 'text.secondary',\n textShadow: image ? '0 1px 2px rgba(0,0,0,0.5)' : 'none',\n }}\n >\n {description}\n </Typography>\n )}\n\n {content}\n </Box>\n);\n\nexport const CarouselSlide: React.FC<CarouselSlideProps> = ({\n item,\n index,\n isActive,\n variant,\n clickable,\n onSelect,\n}) => {\n const theme = useTheme();\n\n const content = (\n <Box\n sx={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: clickable ? 'pointer' : 'default',\n position: 'relative',\n }}\n onClick={() => onSelect(item, index)}\n >\n {item.image && (\n <Box\n component=\"img\"\n src={item.image}\n alt={item.alt || item.title}\n sx={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n />\n )}\n\n <SlideCaption\n title={item.title}\n description={item.description}\n content={item.content}\n image={item.image}\n />\n </Box>\n );\n\n // The cards variant gives each slide its own raised surface, and lifts the\n // active one further so the stack reads as a deck rather than a strip.\n if (variant === 'cards') {\n return (\n <Paper\n elevation={isActive ? 8 : 2}\n sx={{\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n transform: isActive ? 'scale(1)' : 'scale(0.9)',\n transition: theme.transitions.create(['transform', 'box-shadow']),\n }}\n >\n {content}\n </Paper>\n );\n }\n\n return content;\n};\n\nexport interface CarouselTrackProps {\n items: CarouselItem[];\n activeIndex: number;\n variant: NonNullable<CarouselProps['variant']>;\n animation: NonNullable<CarouselProps['animation']>;\n transition: React.ElementType;\n clickable: boolean;\n onSelect: (item: CarouselItem, index: number) => void;\n}\n\n/**\n * The slides themselves. Every slide stays mounted and absolutely positioned so\n * the transition has both the outgoing and incoming one to work with; `display`\n * is what actually hides the rest.\n */\nexport const CarouselTrack: React.FC<CarouselTrackProps> = ({\n items,\n activeIndex,\n variant,\n animation,\n transition: Transition,\n clickable,\n onSelect,\n}) => (\n <Box\n data-testid=\"carousel-track\"\n sx={{\n width: '100%',\n height: '100%',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {items.map((item, index) => (\n <Transition\n key={item.id}\n in={index === activeIndex}\n timeout={600}\n {...(animation === 'flip' && { direction: 'left' as const })}\n >\n <Box\n data-testid={`carousel-slide-${index}`}\n data-active={index === activeIndex}\n sx={{\n position: 'absolute',\n width: '100%',\n height: '100%',\n display: index === activeIndex ? 'block' : 'none',\n }}\n >\n <CarouselSlide\n item={item}\n index={index}\n isActive={index === activeIndex}\n variant={variant}\n clickable={clickable}\n onSelect={onSelect}\n />\n </Box>\n </Transition>\n ))}\n </Box>\n);\n","import { alpha } from '@mui/material';\nimport type { CSSObject, Theme } from '@mui/material';\n\nimport type { CarouselProps } from './Carousel.types';\nimport { accentFor } from '../../../tokens/scales';\n\ntype Variant = NonNullable<CarouselProps['variant']>;\ntype Size = NonNullable<CarouselProps['size']>;\ntype Color = NonNullable<CarouselProps['color']>;\n\nconst SIZES: Record<Size, { height: number; fontSize: string }> = {\n xs: { height: 200, fontSize: '0.75rem' },\n sm: { height: 300, fontSize: '0.875rem' },\n md: { height: 400, fontSize: '1rem' },\n lg: { height: 500, fontSize: '1.125rem' },\n xl: { height: 600, fontSize: '1.25rem' },\n};\n\nconst sizeStyles = (size: Size) => SIZES[size] ?? SIZES.md;\n\ninterface ContainerStyleInput {\n theme: Theme;\n variant: Variant;\n size: Size;\n color: Color;\n height: number | string;\n width: number | string;\n glow: boolean;\n pulse: boolean;\n glass: boolean;\n gradient: boolean;\n}\n\n/**\n * Each variant's own additions to the shared frame. The old switch re-spread the\n * same base, glow and pulse objects in all six arms before adding these; only\n * these differ, so the shared prefix is applied once by `containerStyles`.\n */\nconst SURFACES: Record<Variant, (input: ContainerStyleInput) => CSSObject> = {\n glass: ({ theme, color, glass }) => ({\n backgroundColor: alpha(theme.palette.background.paper, glass ? 0.1 : 0.9),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(accentFor(theme, color).main, 0.2)}`,\n }),\n\n gradient: ({ theme, color, gradient }) => ({\n background: gradient\n ? `linear-gradient(135deg, ${alpha(accentFor(theme, color).light, 0.1)}, ${alpha(accentFor(theme, color).dark, 0.1)})`\n : 'transparent',\n }),\n\n elevated: ({ theme }) => ({ boxShadow: theme.shadows[8] }),\n\n minimal: () => ({ border: 'none', boxShadow: 'none' }),\n\n cards: ({ theme }) => ({ padding: theme.spacing(2) }),\n\n default: () => ({}),\n};\n\nexport const containerStyles = (input: ContainerStyleInput): CSSObject => {\n const { theme, variant, size, color, height, width, glow, pulse } = input;\n const accent = accentFor(theme, color).main;\n\n return {\n position: 'relative' as const,\n width,\n // A numeric height is taken literally; anything else falls back to the size\n // preset, since a percentage cannot resolve against an unsized parent here.\n height: typeof height === 'number' ? height : sizeStyles(size).height,\n overflow: 'hidden',\n borderRadius: theme.spacing(1),\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.standard,\n }),\n ...(glow && { boxShadow: `0 0 30px ${alpha(accent, 0.4)}` }),\n ...(pulse && {\n animation: 'pulse 2s infinite',\n '@keyframes pulse': {\n '0%': { boxShadow: `0 0 0 0 ${alpha(accent, 0.4)}` },\n '70%': { boxShadow: `0 0 0 20px ${alpha(accent, 0)}` },\n '100%': { boxShadow: `0 0 0 0 ${alpha(accent, 0)}` },\n },\n }),\n ...(SURFACES[variant] ?? SURFACES.default)(input),\n };\n};\n"],"mappings":"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","names":["Box","useTheme","useCallback","useRef","jsx","jsxs","Box","Typography","useTheme","jsx","jsxs","alpha","alpha","jsx","jsxs","useTheme","useRef","useCallback","Box"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/data-display/Carousel/Carousel.tsx","../../src/components/data-display/Carousel/Carousel.hooks.ts","../../src/components/data-display/Carousel/Carousel.parts.tsx","../../src/components/data-display/Carousel/Carousel.chrome.tsx","../../src/components/data-display/Carousel/Carousel.slide.tsx","../../src/components/data-display/Carousel/Carousel.styles.ts"],"sourcesContent":["import { Box, CircularProgress, Fade, Slide, useTheme, Zoom } from '@mui/material';\nimport React, { useCallback, useRef } from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport { useCarouselNavigation } from './Carousel.hooks';\nimport { CarouselChrome } from './Carousel.chrome';\nimport { CarouselTrack } from './Carousel.slide';\nimport { containerStyles } from './Carousel.styles';\nimport type { CarouselItem, CarouselProps } from './Carousel.types';\nimport { muiColor } from '../../../tokens/scales';\n\nexport { CarouselArrows, CarouselIndicators, CarouselThumbnails } from './Carousel.parts';\n\nconst DEFAULTS = {\n variant: 'default',\n size: 'md',\n color: 'primary',\n autoPlay: false,\n autoPlayInterval: 3000,\n loop: true,\n showIndicators: true,\n showArrows: true,\n showThumbnails: false,\n glow: false,\n pulse: false,\n glass: false,\n gradient: false,\n loading: false,\n disabled: false,\n height: 400,\n width: '100%',\n pauseOnHover: true,\n indicatorPosition: 'bottom',\n arrowPosition: 'overlay',\n animation: 'slide',\n} satisfies Partial<CarouselProps>;\n\ntype ResolvedCarouselProps = CarouselProps & Required<Pick<CarouselProps, keyof typeof DEFAULTS>>;\n\n/**\n * `flip` reuses Slide with a fixed direction — MUI has no flip transition, and a\n * slide from one side reads closer to a flip than a fade does.\n */\nconst TRANSITIONS = { fade: Fade, zoom: Zoom, flip: Slide, slide: Slide } as const;\n\nexport const Carousel: React.FC<CarouselProps> = (props) => {\n const resolved = withDefaults(props, DEFAULTS) as ResolvedCarouselProps;\n const {\n items, variant, size, color, autoPlay, autoPlayInterval, loop, loading, disabled,\n className, style, height, width, pauseOnHover, onClick, onChange, onFocus, onBlur,\n animation, glow, pulse, glass, gradient,\n } = resolved;\n\n const theme = useTheme();\n const containerRef = useRef<HTMLDivElement>(null);\n\n const { activeIndex, handleNext, handlePrev, handleSelect, hoverProps } = useCarouselNavigation({\n count: items.length,\n loop,\n autoPlay,\n autoPlayInterval,\n pauseOnHover,\n disabled,\n onChange,\n });\n\n const handleItemClick = useCallback(\n (item: CarouselItem, index: number) => {\n if (!disabled) {\n onClick?.(item, index);\n }\n },\n [disabled, onClick],\n );\n\n const frameSx = containerStyles({\n theme, variant, size, color, height, width, glow, pulse, glass, gradient,\n });\n\n if (loading) {\n return (\n <Box sx={{ ...frameSx, display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n <CircularProgress color={muiColor(color, 'inherit')} />\n </Box>\n );\n }\n\n return (\n <Box\n ref={containerRef}\n className={className}\n data-testid=\"carousel-container\"\n sx={{ ...frameSx, ...style }}\n onFocus={onFocus}\n onBlur={onBlur}\n {...hoverProps}\n >\n <CarouselTrack\n items={items}\n activeIndex={activeIndex}\n variant={variant}\n animation={animation}\n transition={TRANSITIONS[animation] ?? Slide}\n clickable={Boolean(onClick)}\n onSelect={handleItemClick}\n />\n\n <CarouselChrome\n {...resolved}\n activeIndex={activeIndex}\n onPrev={handlePrev}\n onNext={handleNext}\n onSelect={handleSelect}\n />\n </Box>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\ninterface CarouselNavigationInput {\n count: number;\n loop: boolean;\n autoPlay: boolean;\n autoPlayInterval: number;\n pauseOnHover: boolean;\n disabled: boolean;\n onChange?: (index: number) => void;\n}\n\n/**\n * Steps `current` by `step`, wrapping when `loop` allows it and stopping at the\n * end when it does not. Returns the same index it was given when there is\n * nowhere to go, which is what lets the caller skip a no-op `onChange`.\n */\nconst stepIndex = (current: number, step: number, count: number, loop: boolean) => {\n const next = current + step;\n\n if (next >= count) return loop ? 0 : current;\n if (next < 0) return loop ? count - 1 : 0;\n return next;\n};\n\n/**\n * Which slide is showing and everything that changes it: the arrows, an\n * indicator click, and the autoplay timer.\n *\n * Hover is tracked here rather than in the component because its only job is to\n * pause that timer.\n */\nexport const useCarouselNavigation = ({\n count,\n loop,\n autoPlay,\n autoPlayInterval,\n pauseOnHover,\n disabled,\n onChange,\n}: CarouselNavigationInput) => {\n const [activeIndex, setActiveIndex] = useState(0);\n const [isHovered, setIsHovered] = useState(false);\n const intervalRef = useRef<number | null>(null);\n\n const goBy = useCallback(\n (step: number) => {\n setActiveIndex((prev) => {\n const next = stepIndex(prev, step, count, loop);\n if (next !== prev) {\n onChange?.(next);\n }\n return next;\n });\n },\n [count, loop, onChange],\n );\n\n const handleNext = useCallback(() => goBy(1), [goBy]);\n const handlePrev = useCallback(() => goBy(-1), [goBy]);\n\n const handleSelect = useCallback(\n (index: number) => {\n setActiveIndex(index);\n onChange?.(index);\n },\n [onChange],\n );\n\n useEffect(() => {\n if (!autoPlay || isHovered || disabled) return;\n\n intervalRef.current = window.setInterval(handleNext, autoPlayInterval);\n\n return () => {\n if (intervalRef.current) {\n window.clearInterval(intervalRef.current);\n }\n };\n }, [autoPlay, autoPlayInterval, isHovered, disabled, handleNext]);\n\n const hoverProps = {\n onMouseEnter: () => pauseOnHover && setIsHovered(true),\n onMouseLeave: () => pauseOnHover && setIsHovered(false),\n };\n\n return { activeIndex, handleNext, handlePrev, handleSelect, hoverProps };\n};\n","import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nimport FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord';\nimport { alpha, Box, IconButton, Typography, useTheme } from '@mui/material';\nimport type { CSSObject, Theme } from '@mui/material';\nimport React from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport { accentFor, muiSize } from '../../../tokens/scales';\n\nimport type {\n CarouselArrowsProps,\n CarouselIndicatorsProps,\n CarouselItem,\n CarouselThumbnailsProps,\n} from './Carousel.types';\n\ntype IndicatorPosition = NonNullable<CarouselIndicatorsProps['position']>;\ntype IndicatorVariant = NonNullable<CarouselIndicatorsProps['variant']>;\ntype Color = NonNullable<CarouselIndicatorsProps['color']>;\n\n/** Fires `onSelect` for the keys a native button would treat as activation. */\nconst activateOnKey = (onSelect: () => void) => (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect();\n }\n};\n\nconst INDICATOR_POSITIONS = (theme: Theme): Record<IndicatorPosition, CSSObject> => ({\n top: { top: theme.spacing(2), left: '50%', transform: 'translateX(-50%)' },\n bottom: { bottom: theme.spacing(2), left: '50%', transform: 'translateX(-50%)' },\n left: {\n left: theme.spacing(2),\n top: '50%',\n transform: 'translateY(-50%)',\n flexDirection: 'column',\n },\n right: {\n right: theme.spacing(2),\n top: '50%',\n transform: 'translateY(-50%)',\n flexDirection: 'column',\n },\n});\n\ninterface IndicatorProps {\n index: number;\n isActive: boolean;\n color: Color;\n onSelect: () => void;\n}\n\n/** Attributes every indicator variant carries, whatever it draws. */\nconst indicatorAttrs = (index: number, isActive: boolean) => ({\n 'aria-label': `Go to slide ${index + 1}`,\n 'data-testid': `carousel-indicator-${index}`,\n 'data-active': isActive,\n});\n\nconst LineIndicator: React.FC<IndicatorProps> = ({ index, isActive, color, onSelect }) => {\n const theme = useTheme();\n\n return (\n <Box\n role=\"button\"\n tabIndex={0}\n {...indicatorAttrs(index, isActive)}\n sx={{\n width: isActive ? 30 : 20,\n height: 3,\n backgroundColor: isActive\n ? accentFor(theme, color).main\n : alpha(accentFor(theme, color).main, 0.3),\n borderRadius: 1.5,\n transition: theme.transitions.create(['width', 'background-color']),\n cursor: 'pointer',\n }}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n />\n );\n};\n\nconst NumberIndicator: React.FC<IndicatorProps> = ({ index, isActive, color, onSelect }) => {\n const theme = useTheme();\n\n return (\n <Box\n role=\"button\"\n tabIndex={0}\n {...indicatorAttrs(index, isActive)}\n sx={{\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '50%',\n backgroundColor: isActive ? accentFor(theme, color).main : 'transparent',\n color: isActive ? accentFor(theme, color).contrastText : accentFor(theme, color).main,\n border: `1px solid ${accentFor(theme, color).main}`,\n fontSize: '0.75rem',\n fontWeight: isActive ? 'bold' : 'normal',\n cursor: 'pointer',\n transition: theme.transitions.create(['all']),\n }}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n >\n {index + 1}\n </Box>\n );\n};\n\nconst DotIndicator: React.FC<IndicatorProps> = ({ index, isActive, color, onSelect }) => {\n const theme = useTheme();\n\n return (\n <IconButton\n size=\"small\"\n {...indicatorAttrs(index, isActive)}\n onClick={onSelect}\n sx={{\n p: 0.5,\n color: isActive ? accentFor(theme, color).main : alpha(accentFor(theme, color).main, 0.3),\n transform: isActive ? 'scale(1.2)' : 'scale(1)',\n transition: theme.transitions.create(['transform', 'color']),\n }}\n >\n <FiberManualRecordIcon fontSize=\"small\" />\n </IconButton>\n );\n};\n\nconst INDICATORS: Record<IndicatorVariant, React.FC<IndicatorProps>> = {\n lines: LineIndicator,\n numbers: NumberIndicator,\n dots: DotIndicator,\n};\n\nconst INDICATORS_DEFAULTS = {\n position: 'bottom',\n color: 'primary',\n variant: 'dots',\n} satisfies Partial<CarouselIndicatorsProps>;\n\nexport const CarouselIndicators: React.FC<CarouselIndicatorsProps> = (props) => {\n const { count, activeIndex, onSelect, position, color, variant, className, style } = withDefaults(\n props,\n INDICATORS_DEFAULTS,\n ) as CarouselIndicatorsProps & Required<Pick<CarouselIndicatorsProps, keyof typeof INDICATORS_DEFAULTS>>;\n\n const theme = useTheme();\n const Indicator = INDICATORS[variant] ?? DotIndicator;\n\n return (\n <Box\n className={className}\n data-testid=\"carousel-indicators\"\n sx={{\n position: 'absolute',\n display: 'flex',\n gap: 1,\n zIndex: 2,\n ...(INDICATOR_POSITIONS(theme)[position] ?? INDICATOR_POSITIONS(theme).bottom),\n ...style,\n }}\n >\n {Array.from({ length: count }).map((_, index) => (\n <Indicator\n key={index}\n index={index}\n isActive={index === activeIndex}\n color={color}\n onSelect={() => onSelect(index)}\n />\n ))}\n </Box>\n );\n};\n\nconst ARROWS_DEFAULTS = {\n position: 'overlay',\n disabled: false,\n disablePrev: false,\n disableNext: false,\n color: 'primary',\n size: 'md',\n} satisfies Partial<CarouselArrowsProps>;\n\n/**\n * All three positions place the arrow the same way; only `overlay` fades it back\n * until hovered, and only `outside` sits it clear of the frame.\n */\nconst arrowSx = (theme: Theme, color: Color, isOverlay: boolean): CSSObject => ({\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 3,\n backgroundColor: alpha(theme.palette.background.paper, 0.8),\n color: accentFor(theme, color).main,\n '&:disabled': { opacity: 0.3 },\n ...(isOverlay\n ? {\n opacity: 0.7,\n '&:hover': { backgroundColor: theme.palette.background.paper, opacity: 1 },\n }\n : { '&:hover': { backgroundColor: theme.palette.background.paper } }),\n});\n\nexport const CarouselArrows: React.FC<CarouselArrowsProps> = (props) => {\n const {\n copy, onPrev, onNext, position, disabled, disablePrev, disableNext, color, size, className,\n style,\n } = withDefaults(props, ARROWS_DEFAULTS) as CarouselArrowsProps &\n Required<Pick<CarouselArrowsProps, keyof typeof ARROWS_DEFAULTS>>;\n\n const theme = useTheme();\n const sx = arrowSx(theme, color, position === 'overlay');\n const offset = position === 'outside' ? -40 : 8;\n\n return (\n <Box data-testid=\"carousel-navigation\">\n <IconButton\n onClick={onPrev}\n disabled={disabled || disablePrev}\n size={muiSize(size)}\n className={className}\n aria-label={copy.previous}\n data-testid=\"carousel-prev-button\"\n sx={{ ...sx, left: offset, ...style }}\n >\n <ArrowBackIosIcon />\n </IconButton>\n\n <IconButton\n onClick={onNext}\n disabled={disabled || disableNext}\n aria-label={copy.next}\n size={muiSize(size)}\n className={className}\n data-testid=\"carousel-next-button\"\n sx={{ ...sx, right: offset, ...style }}\n >\n <ArrowForwardIosIcon />\n </IconButton>\n </Box>\n );\n};\n\nconst THUMBNAIL_SIZES = { xs: 40, sm: 60, md: 80, lg: 100, xl: 120 } as const;\nconst DEFAULT_THUMBNAIL_SIZE = 60;\n\nconst Thumbnail: React.FC<{\n item: CarouselItem;\n index: number;\n isActive: boolean;\n side: number;\n onSelect: () => void;\n}> = ({ item, index, isActive, side, onSelect }) => {\n const theme = useTheme();\n\n return (\n <Box\n onClick={onSelect}\n data-testid={`carousel-thumbnail-${index}`}\n data-active={isActive}\n sx={{\n width: side,\n height: side,\n border: `2px solid ${isActive ? theme.palette.primary.main : 'transparent'}`,\n borderRadius: 1,\n overflow: 'hidden',\n cursor: 'pointer',\n opacity: isActive ? 1 : 0.6,\n transition: theme.transitions.create(['opacity', 'border-color']),\n '&:hover': { opacity: 1 },\n }}\n >\n {item.image ? (\n <Box\n component=\"img\"\n src={item.image}\n alt={item.alt || item.title}\n sx={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n ) : (\n // No image to show, so the slide's number stands in for it.\n <Box\n sx={{\n width: '100%',\n height: '100%',\n backgroundColor: theme.palette.grey[300],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography variant=\"caption\">{index + 1}</Typography>\n </Box>\n )}\n </Box>\n );\n};\n\nexport const CarouselThumbnails: React.FC<CarouselThumbnailsProps> = ({\n items,\n activeIndex,\n onSelect,\n size = 'sm',\n className,\n style,\n}) => {\n const theme = useTheme();\n const side = THUMBNAIL_SIZES[size as keyof typeof THUMBNAIL_SIZES] ?? DEFAULT_THUMBNAIL_SIZE;\n\n return (\n <Box\n className={className}\n data-testid=\"carousel-thumbnails\"\n sx={{\n position: 'absolute',\n // Hung below the frame, clear of its own height plus a gap.\n bottom: -side - 16,\n left: '50%',\n transform: 'translateX(-50%)',\n display: 'flex',\n gap: 1,\n p: 1,\n backgroundColor: alpha(theme.palette.background.paper, 0.9),\n borderRadius: 1,\n ...style,\n }}\n >\n {items.map((item, index) => (\n <Thumbnail\n key={item.id}\n item={item}\n index={index}\n isActive={index === activeIndex}\n side={side}\n onSelect={() => onSelect(index)}\n />\n ))}\n </Box>\n );\n};\n","import React from 'react';\n\nimport { CarouselArrows, CarouselIndicators, CarouselThumbnails } from './Carousel.parts';\nimport type { CarouselCopy } from '../../../copy';\nimport type {\n CarouselArrowsProps,\n CarouselIndicatorsProps,\n CarouselItem,\n CarouselThumbnailsProps,\n} from './Carousel.types';\n\ntype IndicatorPosition = NonNullable<CarouselIndicatorsProps['position']>;\ntype Color = NonNullable<CarouselIndicatorsProps['color']>;\n\nexport interface CarouselChromeProps {\n /** The two arrows' accessible names, from the mount. */\n copy: CarouselCopy;\n items: CarouselItem[];\n activeIndex: number;\n loop: boolean;\n disabled: boolean;\n showArrows: boolean;\n showIndicators: boolean;\n showThumbnails: boolean;\n arrowPosition: NonNullable<CarouselArrowsProps['position']>;\n indicatorPosition: IndicatorPosition;\n color: Color;\n size: NonNullable<CarouselThumbnailsProps['size']>;\n onPrev: () => void;\n onNext: () => void;\n onSelect: (index: number) => void;\n}\n\n/**\n * Everything drawn over the slides: the arrows, the indicators and the thumbnail\n * strip. Each is independently switchable, so they travel together rather than\n * as three conditional blocks inside the carousel's own render.\n */\nexport const CarouselChrome: React.FC<CarouselChromeProps> = ({\n copy,\n items,\n activeIndex,\n loop,\n disabled,\n showArrows,\n showIndicators,\n showThumbnails,\n arrowPosition,\n indicatorPosition,\n color,\n size,\n onPrev,\n onNext,\n onSelect,\n}) => (\n <>\n {showArrows && !disabled && (\n <CarouselArrows\n copy={copy}\n onPrev={onPrev}\n onNext={onNext}\n position={arrowPosition}\n color={color}\n disablePrev={!loop && activeIndex === 0}\n disableNext={!loop && activeIndex === items.length - 1}\n />\n )}\n\n {showIndicators && (\n <CarouselIndicators\n count={items.length}\n activeIndex={activeIndex}\n onSelect={onSelect}\n position={indicatorPosition}\n color={color}\n />\n )}\n\n {showThumbnails && (\n <CarouselThumbnails\n items={items}\n activeIndex={activeIndex}\n onSelect={onSelect}\n size={size}\n />\n )}\n </>\n);\n","import { Box, Paper, Typography, useTheme } from '@mui/material';\nimport React from 'react';\n\nimport type { CarouselItem, CarouselProps } from './Carousel.types';\n\nexport interface CarouselSlideProps {\n item: CarouselItem;\n index: number;\n isActive: boolean;\n variant: NonNullable<CarouselProps['variant']>;\n clickable: boolean;\n onSelect: (item: CarouselItem, index: number) => void;\n}\n\n/**\n * A slide's caption. Over an image it is white with a shadow so it stays legible\n * against whatever the photograph happens to be; on a bare surface it uses the\n * ordinary text colours.\n */\nconst SlideCaption: React.FC<Pick<CarouselItem, 'title' | 'description' | 'content' | 'image'>> = ({\n title,\n description,\n content,\n image,\n}) => (\n <Box sx={{ position: 'relative', zIndex: 1, textAlign: 'center', p: 3 }}>\n {title && (\n <Typography\n variant=\"h5\"\n sx={{\n color: image ? 'white' : 'text.primary',\n textShadow: image ? '0 2px 4px rgba(0,0,0,0.5)' : 'none',\n mb: 1,\n }}\n >\n {title}\n </Typography>\n )}\n\n {description && (\n <Typography\n variant=\"body1\"\n sx={{\n color: image ? 'white' : 'text.secondary',\n textShadow: image ? '0 1px 2px rgba(0,0,0,0.5)' : 'none',\n }}\n >\n {description}\n </Typography>\n )}\n\n {content}\n </Box>\n);\n\nexport const CarouselSlide: React.FC<CarouselSlideProps> = ({\n item,\n index,\n isActive,\n variant,\n clickable,\n onSelect,\n}) => {\n const theme = useTheme();\n\n const content = (\n <Box\n sx={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: clickable ? 'pointer' : 'default',\n position: 'relative',\n }}\n onClick={() => onSelect(item, index)}\n >\n {item.image && (\n <Box\n component=\"img\"\n src={item.image}\n alt={item.alt || item.title}\n sx={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n />\n )}\n\n <SlideCaption\n title={item.title}\n description={item.description}\n content={item.content}\n image={item.image}\n />\n </Box>\n );\n\n // The cards variant gives each slide its own raised surface, and lifts the\n // active one further so the stack reads as a deck rather than a strip.\n if (variant === 'cards') {\n return (\n <Paper\n elevation={isActive ? 8 : 2}\n sx={{\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n transform: isActive ? 'scale(1)' : 'scale(0.9)',\n transition: theme.transitions.create(['transform', 'box-shadow']),\n }}\n >\n {content}\n </Paper>\n );\n }\n\n return content;\n};\n\nexport interface CarouselTrackProps {\n items: CarouselItem[];\n activeIndex: number;\n variant: NonNullable<CarouselProps['variant']>;\n animation: NonNullable<CarouselProps['animation']>;\n transition: React.ElementType;\n clickable: boolean;\n onSelect: (item: CarouselItem, index: number) => void;\n}\n\n/**\n * The slides themselves. Every slide stays mounted and absolutely positioned so\n * the transition has both the outgoing and incoming one to work with; `display`\n * is what actually hides the rest.\n */\nexport const CarouselTrack: React.FC<CarouselTrackProps> = ({\n items,\n activeIndex,\n variant,\n animation,\n transition: Transition,\n clickable,\n onSelect,\n}) => (\n <Box\n data-testid=\"carousel-track\"\n sx={{\n width: '100%',\n height: '100%',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {items.map((item, index) => (\n <Transition\n key={item.id}\n in={index === activeIndex}\n timeout={600}\n {...(animation === 'flip' && { direction: 'left' as const })}\n >\n <Box\n data-testid={`carousel-slide-${index}`}\n data-active={index === activeIndex}\n sx={{\n position: 'absolute',\n width: '100%',\n height: '100%',\n display: index === activeIndex ? 'block' : 'none',\n }}\n >\n <CarouselSlide\n item={item}\n index={index}\n isActive={index === activeIndex}\n variant={variant}\n clickable={clickable}\n onSelect={onSelect}\n />\n </Box>\n </Transition>\n ))}\n </Box>\n);\n","import { alpha } from '@mui/material';\nimport type { CSSObject, Theme } from '@mui/material';\n\nimport type { CarouselProps } from './Carousel.types';\nimport { accentFor } from '../../../tokens/scales';\n\ntype Variant = NonNullable<CarouselProps['variant']>;\ntype Size = NonNullable<CarouselProps['size']>;\ntype Color = NonNullable<CarouselProps['color']>;\n\nconst SIZES: Record<Size, { height: number; fontSize: string }> = {\n xs: { height: 200, fontSize: '0.75rem' },\n sm: { height: 300, fontSize: '0.875rem' },\n md: { height: 400, fontSize: '1rem' },\n lg: { height: 500, fontSize: '1.125rem' },\n xl: { height: 600, fontSize: '1.25rem' },\n};\n\nconst sizeStyles = (size: Size) => SIZES[size] ?? SIZES.md;\n\ninterface ContainerStyleInput {\n theme: Theme;\n variant: Variant;\n size: Size;\n color: Color;\n height: number | string;\n width: number | string;\n glow: boolean;\n pulse: boolean;\n glass: boolean;\n gradient: boolean;\n}\n\n/**\n * Each variant's own additions to the shared frame. The old switch re-spread the\n * same base, glow and pulse objects in all six arms before adding these; only\n * these differ, so the shared prefix is applied once by `containerStyles`.\n */\nconst SURFACES: Record<Variant, (input: ContainerStyleInput) => CSSObject> = {\n glass: ({ theme, color, glass }) => ({\n backgroundColor: alpha(theme.palette.background.paper, glass ? 0.1 : 0.9),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(accentFor(theme, color).main, 0.2)}`,\n }),\n\n gradient: ({ theme, color, gradient }) => ({\n background: gradient\n ? `linear-gradient(135deg, ${alpha(accentFor(theme, color).light, 0.1)}, ${alpha(accentFor(theme, color).dark, 0.1)})`\n : 'transparent',\n }),\n\n elevated: ({ theme }) => ({ boxShadow: theme.shadows[8] }),\n\n minimal: () => ({ border: 'none', boxShadow: 'none' }),\n\n cards: ({ theme }) => ({ padding: theme.spacing(2) }),\n\n default: () => ({}),\n};\n\nexport const containerStyles = (input: ContainerStyleInput): CSSObject => {\n const { theme, variant, size, color, height, width, glow, pulse } = input;\n const accent = accentFor(theme, color).main;\n\n return {\n position: 'relative' as const,\n width,\n // A numeric height is taken literally; anything else falls back to the size\n // preset, since a percentage cannot resolve against an unsized parent here.\n height: typeof height === 'number' ? height : sizeStyles(size).height,\n overflow: 'hidden',\n borderRadius: theme.spacing(1),\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.standard,\n }),\n ...(glow && { boxShadow: `0 0 30px ${alpha(accent, 0.4)}` }),\n ...(pulse && {\n animation: 'pulse 2s infinite',\n '@keyframes pulse': {\n '0%': { boxShadow: `0 0 0 0 ${alpha(accent, 0.4)}` },\n '70%': { boxShadow: `0 0 0 20px ${alpha(accent, 0)}` },\n '100%': { boxShadow: `0 0 0 0 ${alpha(accent, 0)}` },\n },\n }),\n ...(SURFACES[variant] ?? SURFACES.default)(input),\n };\n};\n"],"mappings":"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","names":["Box","useTheme","useCallback","useRef","jsx","jsxs","Box","Typography","useTheme","jsx","jsxs","alpha","alpha","jsx","jsxs","useTheme","useRef","useCallback","Box"]}
|
|
@@ -7,22 +7,22 @@ import {
|
|
|
7
7
|
} from "../chunk-DSO6BL77.js";
|
|
8
8
|
import {
|
|
9
9
|
Pagination
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-L7L6SX64.js";
|
|
11
11
|
import {
|
|
12
12
|
TableFilter
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-UY7UF7IN.js";
|
|
14
14
|
import {
|
|
15
15
|
ContentToolbar,
|
|
16
16
|
FilterTrigger,
|
|
17
17
|
MultiSelectDropdown
|
|
18
|
-
} from "../chunk-
|
|
18
|
+
} from "../chunk-UNM7KFDX.js";
|
|
19
19
|
import "../chunk-DI44UBHQ.js";
|
|
20
20
|
import {
|
|
21
21
|
Switch
|
|
22
22
|
} from "../chunk-S4R6CKIG.js";
|
|
23
23
|
import {
|
|
24
24
|
DayBoundInput
|
|
25
|
-
} from "../chunk-
|
|
25
|
+
} from "../chunk-TSG5C7MP.js";
|
|
26
26
|
import {
|
|
27
27
|
CategorySelect
|
|
28
28
|
} from "../chunk-AR5LUIBC.js";
|
|
@@ -41,19 +41,19 @@ import {
|
|
|
41
41
|
import {
|
|
42
42
|
StackedModal,
|
|
43
43
|
StackedModalContent
|
|
44
|
-
} from "../chunk-
|
|
44
|
+
} from "../chunk-PVLDKXKR.js";
|
|
45
45
|
import {
|
|
46
46
|
createConfirmButton
|
|
47
47
|
} from "../chunk-5TCPZ6GR.js";
|
|
48
48
|
import {
|
|
49
49
|
DataGrid
|
|
50
|
-
} from "../chunk-
|
|
50
|
+
} from "../chunk-KR2BP7NK.js";
|
|
51
51
|
import {
|
|
52
52
|
DescriptionItem
|
|
53
53
|
} from "../chunk-HR7KRGJQ.js";
|
|
54
54
|
import {
|
|
55
55
|
Alert
|
|
56
|
-
} from "../chunk-
|
|
56
|
+
} from "../chunk-RXE5CUUE.js";
|
|
57
57
|
import "../chunk-ARNQIGA4.js";
|
|
58
58
|
import {
|
|
59
59
|
fadeInScaleAnimation
|
|
@@ -1599,6 +1599,8 @@ function PillControl({
|
|
|
1599
1599
|
return /* @__PURE__ */ jsx10(
|
|
1600
1600
|
MultiSelectDropdown,
|
|
1601
1601
|
{
|
|
1602
|
+
extraOptionsHeading: copy.filters.optionsHeading,
|
|
1603
|
+
clearText: copy.filters.clear,
|
|
1602
1604
|
clearLabel: copy.filters.clearRange(pill.label),
|
|
1603
1605
|
label: pill.label,
|
|
1604
1606
|
options: pill.options,
|
|
@@ -1876,10 +1878,12 @@ function BoundField({
|
|
|
1876
1878
|
onChange,
|
|
1877
1879
|
testId
|
|
1878
1880
|
}) {
|
|
1881
|
+
const copy = useDataViewsCopy();
|
|
1879
1882
|
if (field.kind === "day") {
|
|
1880
1883
|
return /* @__PURE__ */ jsx13(
|
|
1881
1884
|
DayBoundInput,
|
|
1882
1885
|
{
|
|
1886
|
+
mask: copy.filters.dayMask,
|
|
1883
1887
|
label,
|
|
1884
1888
|
value: value == null ? void 0 : String(value),
|
|
1885
1889
|
onChange,
|
|
@@ -1913,7 +1917,7 @@ function RangeBounds({
|
|
|
1913
1917
|
BoundField,
|
|
1914
1918
|
{
|
|
1915
1919
|
field,
|
|
1916
|
-
label:
|
|
1920
|
+
label: copy.filters.rangeStart,
|
|
1917
1921
|
value: value.min,
|
|
1918
1922
|
onChange: (min) => onChange({ ...value, min }),
|
|
1919
1923
|
testId: `${testId}-min`
|
|
@@ -2217,6 +2221,7 @@ function FilterDialog({
|
|
|
2217
2221
|
open,
|
|
2218
2222
|
onClose,
|
|
2219
2223
|
navigationTitle: copy.filters.panelTitle,
|
|
2224
|
+
backLabel: copy.nav.goBack,
|
|
2220
2225
|
modalId: `${props.testIdPrefix}-filters`,
|
|
2221
2226
|
maxWidth: "xs",
|
|
2222
2227
|
dataTestId: `${props.testIdPrefix}-filter-dialog`,
|
|
@@ -2230,7 +2235,7 @@ function FilterDialog({
|
|
|
2230
2235
|
onClick: props.onClearAll,
|
|
2231
2236
|
"data-testid": `${props.testIdPrefix}-clear-filters`,
|
|
2232
2237
|
sx: { fontSize: "0.75rem", color: "text.secondary" },
|
|
2233
|
-
children:
|
|
2238
|
+
children: copy.filters.clearAllFilters
|
|
2234
2239
|
}
|
|
2235
2240
|
) }),
|
|
2236
2241
|
/* @__PURE__ */ jsx14(FilterControls, { ...props })
|
|
@@ -2644,6 +2649,7 @@ function GridBody({
|
|
|
2644
2649
|
dataTestId,
|
|
2645
2650
|
emptyState
|
|
2646
2651
|
}) {
|
|
2652
|
+
const copy = useDataViewsCopy();
|
|
2647
2653
|
return /* @__PURE__ */ jsx18(
|
|
2648
2654
|
Box,
|
|
2649
2655
|
{
|
|
@@ -2670,7 +2676,8 @@ function GridBody({
|
|
|
2670
2676
|
selection: { mode: "multi", selectedRowIds: selectedIds, onChangeSelected },
|
|
2671
2677
|
sorting: { mode: sortMode, sortBy, onChangeSortBy },
|
|
2672
2678
|
"data-testid": dataTestId,
|
|
2673
|
-
emptyState
|
|
2679
|
+
emptyState,
|
|
2680
|
+
emptyText: copy.grid.emptyFilteredTitle
|
|
2674
2681
|
}
|
|
2675
2682
|
)
|
|
2676
2683
|
}
|
|
@@ -2960,6 +2967,8 @@ function OverflowPill({
|
|
|
2960
2967
|
return /* @__PURE__ */ jsx20(
|
|
2961
2968
|
MultiSelectDropdown,
|
|
2962
2969
|
{
|
|
2970
|
+
extraOptionsHeading: copy.filters.optionsHeading,
|
|
2971
|
+
clearText: copy.filters.clear,
|
|
2963
2972
|
clearLabel: copy.filters.clearRange(field.label),
|
|
2964
2973
|
label: field.pill?.label ?? field.label,
|
|
2965
2974
|
options,
|
|
@@ -4960,6 +4969,8 @@ function GridToolbar(props) {
|
|
|
4960
4969
|
ContentToolbar,
|
|
4961
4970
|
{
|
|
4962
4971
|
selectAllLabel: copy.selection.selectAll,
|
|
4972
|
+
selectAllText: copy.selection.selectAllOnPage,
|
|
4973
|
+
clearAllText: copy.filters.clearAll,
|
|
4963
4974
|
hasSelection: selectedRows.length > 0,
|
|
4964
4975
|
selectedCount: selectedRows.length,
|
|
4965
4976
|
selectAll: props.selectAll,
|
|
@@ -5108,10 +5119,12 @@ function DataViewsPagination({
|
|
|
5108
5119
|
c,
|
|
5109
5120
|
testIdPrefix
|
|
5110
5121
|
}) {
|
|
5122
|
+
const copy = useDataViewsCopy();
|
|
5111
5123
|
if (!c.serverMode || c.serverPageCount <= 1) return null;
|
|
5112
5124
|
return /* @__PURE__ */ jsx33(Box, { sx: { mt: 2, display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx33(
|
|
5113
5125
|
Pagination,
|
|
5114
5126
|
{
|
|
5127
|
+
pageSizeLabel: copy.nav.pageSize,
|
|
5115
5128
|
page: c.serverPage,
|
|
5116
5129
|
count: c.serverPageCount,
|
|
5117
5130
|
onChange: (_event, page) => c.changePage(page),
|
|
@@ -5418,6 +5431,7 @@ function ShellStack({
|
|
|
5418
5431
|
props,
|
|
5419
5432
|
filters
|
|
5420
5433
|
}) {
|
|
5434
|
+
const copy = useDataViewsCopy();
|
|
5421
5435
|
const { c, testIdPrefix, dataTestId, scopes = [], emptyState, inlineFilters = false } = props;
|
|
5422
5436
|
const { showInline, useModal, inlineVisible, filterProps, split, onControlOpenChange } = filters;
|
|
5423
5437
|
const body = /* @__PURE__ */ jsx36(
|
|
@@ -5429,69 +5443,78 @@ function ShellStack({
|
|
|
5429
5443
|
testIdPrefix
|
|
5430
5444
|
}
|
|
5431
5445
|
);
|
|
5432
|
-
return /* @__PURE__ */ jsx36(
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5443
|
-
InlineFilterControls,
|
|
5446
|
+
return /* @__PURE__ */ jsx36(
|
|
5447
|
+
TableFilter,
|
|
5448
|
+
{
|
|
5449
|
+
copy: copy.tableFilter,
|
|
5450
|
+
open: c.filterOpen,
|
|
5451
|
+
onOpenChange: c.setFilterOpen,
|
|
5452
|
+
hasActiveFilters: c.activeFilterCount > 0,
|
|
5453
|
+
children: /* @__PURE__ */ jsxs25(Stack, { spacing: 0, "data-testid": dataTestId ? `${dataTestId}-container` : void 0, children: [
|
|
5454
|
+
/* @__PURE__ */ jsx36(GridHeaderRow, { title: props.title, headerActions: props.headerActions, testIdPrefix }),
|
|
5455
|
+
/* @__PURE__ */ jsx36(
|
|
5456
|
+
ShellToolbar,
|
|
5444
5457
|
{
|
|
5445
|
-
|
|
5446
|
-
|
|
5447
|
-
|
|
5448
|
-
|
|
5458
|
+
c,
|
|
5459
|
+
rows: props.rows,
|
|
5460
|
+
sortKinds: props.sortKinds,
|
|
5461
|
+
displayView: props.displayView,
|
|
5462
|
+
exportConfig: props.exportConfig,
|
|
5463
|
+
filterControls: inlineVisible ? /* @__PURE__ */ jsx36(
|
|
5464
|
+
InlineFilterControls,
|
|
5465
|
+
{
|
|
5466
|
+
...filterProps,
|
|
5467
|
+
split,
|
|
5468
|
+
activeFilterCount: c.activeFilterCount,
|
|
5469
|
+
onControlOpenChange
|
|
5470
|
+
}
|
|
5471
|
+
) : void 0,
|
|
5472
|
+
barRef: split.barRef,
|
|
5473
|
+
testIdPrefix,
|
|
5474
|
+
rowActions: props.rowActions,
|
|
5475
|
+
bulkActions: props.bulkActions,
|
|
5476
|
+
toolbarRightSlot: props.toolbarRightSlot,
|
|
5477
|
+
compactControls: showInline && split.compactControls,
|
|
5478
|
+
counterHidden: showInline && split.counterHidden,
|
|
5479
|
+
showInline
|
|
5449
5480
|
}
|
|
5450
|
-
)
|
|
5451
|
-
barRef: split.barRef,
|
|
5452
|
-
testIdPrefix,
|
|
5453
|
-
rowActions: props.rowActions,
|
|
5454
|
-
bulkActions: props.bulkActions,
|
|
5455
|
-
toolbarRightSlot: props.toolbarRightSlot,
|
|
5456
|
-
compactControls: showInline && split.compactControls,
|
|
5457
|
-
counterHidden: showInline && split.counterHidden,
|
|
5458
|
-
showInline
|
|
5459
|
-
}
|
|
5460
|
-
),
|
|
5461
|
-
/* @__PURE__ */ jsx36(
|
|
5462
|
-
ScopeTabsSlot,
|
|
5463
|
-
{
|
|
5464
|
-
scopes,
|
|
5465
|
-
scopeFieldId: props.scopeFieldId,
|
|
5466
|
-
board: props.board,
|
|
5467
|
-
value: c.scope,
|
|
5468
|
-
onChange: c.setScope,
|
|
5469
|
-
counts: c.scopeCounts,
|
|
5470
|
-
testIdPrefix
|
|
5471
|
-
}
|
|
5472
|
-
),
|
|
5473
|
-
/* @__PURE__ */ jsxs25(TableFilter.Layout, { children: [
|
|
5474
|
-
/* @__PURE__ */ jsxs25(TableFilter.Main, { children: [
|
|
5481
|
+
),
|
|
5475
5482
|
/* @__PURE__ */ jsx36(
|
|
5476
|
-
|
|
5483
|
+
ScopeTabsSlot,
|
|
5477
5484
|
{
|
|
5478
|
-
|
|
5479
|
-
|
|
5480
|
-
renderCard: props.renderCard,
|
|
5481
|
-
renderListRow: props.renderListRow,
|
|
5482
|
-
listGroup: props.listGroup,
|
|
5485
|
+
scopes,
|
|
5486
|
+
scopeFieldId: props.scopeFieldId,
|
|
5483
5487
|
board: props.board,
|
|
5484
|
-
|
|
5485
|
-
|
|
5486
|
-
|
|
5488
|
+
value: c.scope,
|
|
5489
|
+
onChange: c.setScope,
|
|
5490
|
+
counts: c.scopeCounts,
|
|
5491
|
+
testIdPrefix
|
|
5487
5492
|
}
|
|
5488
5493
|
),
|
|
5489
|
-
/* @__PURE__ */
|
|
5490
|
-
|
|
5491
|
-
|
|
5492
|
-
|
|
5493
|
-
|
|
5494
|
-
|
|
5494
|
+
/* @__PURE__ */ jsxs25(TableFilter.Layout, { children: [
|
|
5495
|
+
/* @__PURE__ */ jsxs25(TableFilter.Main, { children: [
|
|
5496
|
+
/* @__PURE__ */ jsx36(
|
|
5497
|
+
GridMain,
|
|
5498
|
+
{
|
|
5499
|
+
c,
|
|
5500
|
+
getRowId: props.getRowId,
|
|
5501
|
+
renderCard: props.renderCard,
|
|
5502
|
+
renderListRow: props.renderListRow,
|
|
5503
|
+
listGroup: props.listGroup,
|
|
5504
|
+
board: props.board,
|
|
5505
|
+
dataTestId,
|
|
5506
|
+
testIdPrefix,
|
|
5507
|
+
emptyState: body
|
|
5508
|
+
}
|
|
5509
|
+
),
|
|
5510
|
+
/* @__PURE__ */ jsx36(DataViewsPagination, { c, testIdPrefix })
|
|
5511
|
+
] }),
|
|
5512
|
+
inlineFilters ? null : /* @__PURE__ */ jsx36(GridFilterPanel, { ...filterProps })
|
|
5513
|
+
] }),
|
|
5514
|
+
useModal && /* @__PURE__ */ jsx36(FilterDialog, { open: c.filterOpen, onClose: () => c.setFilterOpen(false), ...filterProps })
|
|
5515
|
+
] })
|
|
5516
|
+
}
|
|
5517
|
+
);
|
|
5495
5518
|
}
|
|
5496
5519
|
function GridShell(props) {
|
|
5497
5520
|
const {
|
|
@@ -6379,6 +6402,7 @@ function ViewMutationErrorAlert({
|
|
|
6379
6402
|
title: copy.nav.updateFailed,
|
|
6380
6403
|
description: error,
|
|
6381
6404
|
closable: true,
|
|
6405
|
+
closeLabel: copy.nav.dismissError,
|
|
6382
6406
|
onClose,
|
|
6383
6407
|
"data-testid": `${testIdPrefix}-views-mutation-error`
|
|
6384
6408
|
}
|