@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
|
@@ -86,10 +86,11 @@ var DetailedContent = ({
|
|
|
86
86
|
] });
|
|
87
87
|
var HoverCardContent = (props) => {
|
|
88
88
|
const { variant, title, description, avatar, loading, loadingComponent, children, dataTestId } = props;
|
|
89
|
+
const { loadingText } = props;
|
|
89
90
|
if (loading) {
|
|
90
91
|
return /* @__PURE__ */ jsx(LoadingContainer, { children: loadingComponent || /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
|
|
91
92
|
/* @__PURE__ */ jsx(CircularProgress, { size: 20 }),
|
|
92
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", children:
|
|
93
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: loadingText })
|
|
93
94
|
] }) });
|
|
94
95
|
}
|
|
95
96
|
if (variant === "detailed" && (avatar || title || description)) {
|
|
@@ -486,6 +487,7 @@ var HoverCard = React3.forwardRef((props, ref) => {
|
|
|
486
487
|
maxWidth,
|
|
487
488
|
loading,
|
|
488
489
|
loadingComponent,
|
|
490
|
+
loadingText,
|
|
489
491
|
touchEnabled,
|
|
490
492
|
offset,
|
|
491
493
|
disabled,
|
|
@@ -542,6 +544,7 @@ var HoverCard = React3.forwardRef((props, ref) => {
|
|
|
542
544
|
children: /* @__PURE__ */ jsx2(CardContent, { sx: { p: padding, "&:last-child": { pb: padding } }, children: /* @__PURE__ */ jsx2(
|
|
543
545
|
HoverCardContent,
|
|
544
546
|
{
|
|
547
|
+
loadingText,
|
|
545
548
|
variant,
|
|
546
549
|
title,
|
|
547
550
|
description,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/data-display/HoverCard/HoverCard.tsx","../../src/components/data-display/HoverCard/HoverCard.content.tsx","../../src/components/data-display/HoverCard/HoverCard.hooks.ts","../../src/components/data-display/HoverCard/HoverCard.styles.ts","../../src/components/data-display/HoverCard/HoverCard.animations.ts"],"sourcesContent":["import { Box, Card, CardContent, Popover } from '@mui/material';\nimport { styled } from '@mui/material';\nimport React from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport { HoverCardContent } from './HoverCard.content';\nimport { useHoverCard } from './HoverCard.hooks';\nimport { arrowSx, cardSx, getAnchorOrigin, getTransformOrigin, sideOf } from './HoverCard.styles';\nimport type { CardStyleFlags } from './HoverCard.styles';\nimport type { HoverCardAnimation, HoverCardPlacement, HoverCardProps } from './HoverCard.types';\n\nconst ArrowContainer = styled('div')<{ placement: HoverCardPlacement; offset: number }>(\n ({ theme, placement }) => ({ ...arrowSx(theme, placement) }),\n);\n\nconst StyledCard = styled(Card, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'glow', 'pulse', 'animation'].includes(prop as string),\n})<CardStyleFlags>(({ theme, ...flags }) => ({ ...cardSx(theme, flags) }));\n\nconst StyledPopover = styled(Popover, {\n shouldForwardProp: (prop) => prop !== 'customAnimation',\n})<{ customAnimation?: HoverCardAnimation }>(({ customAnimation }) => ({\n // The popover only positions; StyledCard draws the surface.\n '& .MuiPopover-paper': {\n backgroundColor: 'transparent',\n boxShadow: 'none',\n overflow: 'visible',\n ...(customAnimation === 'scale' && { transformOrigin: 'center' }),\n },\n}));\n\nconst DEFAULTS = {\n variant: 'default',\n glow: false,\n pulse: false,\n placement: 'bottom',\n showArrow: false,\n animation: 'fade',\n enterDelay: 700,\n exitDelay: 0,\n maxWidth: 400,\n loading: false,\n touchEnabled: true,\n offset: 8,\n disabled: false,\n} satisfies Partial<HoverCardProps>;\n\ntype ResolvedProps = HoverCardProps & Required<Pick<HoverCardProps, keyof typeof DEFAULTS>>;\n\n/** Padding is the variant's own: detailed roomier, minimal tighter. */\nconst CONTENT_PADDING: Record<string, number> = { detailed: 3, minimal: 1.5 };\n\n/** The card is nudged off the anchor on whichever side it sits. */\nconst offsetMargin = (placement: HoverCardPlacement, offset: number) => {\n const side = sideOf(placement);\n const key = ({ top: 'mt', bottom: 'mb', left: 'ml', right: 'mr' } as const)[side];\n return { [key]: `${offset}px` };\n};\n\nexport const HoverCard = React.forwardRef<HTMLDivElement, HoverCardProps>((props, ref) => {\n const {\n variant, glow, pulse, title, description, avatar, trigger, placement, showArrow,\n animation, enterDelay, exitDelay, maxWidth, loading, loadingComponent, touchEnabled,\n offset, disabled, onOpen, onClose, children, dataTestId,\n ...rest\n } = withDefaults(props, DEFAULTS) as ResolvedProps;\n\n const { anchorEl, isOpen, handleClose, triggerHandlers, cardHandlers } = useHoverCard({\n disabled,\n touchEnabled,\n enterDelay,\n exitDelay,\n onOpen,\n onClose,\n });\n\n const triggerProps = {\n ...triggerHandlers,\n style: { cursor: disabled ? 'default' : 'pointer' },\n 'data-testid': dataTestId ? `${dataTestId}-trigger` : 'hover-card-trigger',\n };\n\n const triggerElement = trigger ? (\n React.cloneElement(trigger, triggerProps)\n ) : (\n <span {...triggerProps} style={{ display: 'inline-block', ...triggerProps.style }}>\n {children}\n </span>\n );\n\n const padding = CONTENT_PADDING[variant] ?? 2;\n\n return (\n <>\n {triggerElement}\n <StyledPopover\n ref={ref}\n open={isOpen && !disabled}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={getAnchorOrigin(placement)}\n transformOrigin={getTransformOrigin(placement)}\n {...cardHandlers}\n disableAutoFocus\n disableEnforceFocus\n disableRestoreFocus\n customAnimation={animation}\n slotProps={{ paper: { style: { pointerEvents: 'auto' } } }}\n {...rest}\n >\n <Box sx={{ position: 'relative' }}>\n {showArrow && <ArrowContainer placement={placement} offset={offset} />}\n <StyledCard\n customVariant={variant}\n glow={glow}\n pulse={pulse}\n animation={animation}\n data-testid={dataTestId || 'hover-card-content'}\n sx={{ maxWidth, ...offsetMargin(placement, offset) }}\n >\n <CardContent sx={{ p: padding, '&:last-child': { pb: padding } }}>\n <HoverCardContent\n variant={variant}\n title={title}\n description={description}\n avatar={avatar}\n loading={loading}\n loadingComponent={loadingComponent}\n dataTestId={dataTestId}\n >\n {children}\n </HoverCardContent>\n </CardContent>\n </StyledCard>\n </Box>\n </StyledPopover>\n </>\n );\n});\n\nHoverCard.displayName = 'HoverCard';\n","import { Avatar, Box, CircularProgress, Typography } from '@mui/material';\nimport { styled } from '@mui/material';\nimport React from 'react';\n\nimport type { HoverCardProps } from './HoverCard.types';\n\nconst LoadingContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 80,\n color: theme.palette.text.secondary,\n}));\n\n/** `${dataTestId}-${suffix}`, or the shared default when the caller gave no id. */\nconst testId = (base: string | undefined, suffix: string, fallback: string) =>\n base ? `${base}-${suffix}` : fallback;\n\nexport interface HoverCardContentProps\n extends Pick<\n HoverCardProps,\n 'variant' | 'title' | 'description' | 'avatar' | 'loading' | 'loadingComponent' | 'children'\n > {\n dataTestId?: string;\n}\n\n/** A string avatar is a src; anything else is an element to re-size in place. */\nconst CardAvatar: React.FC<{ avatar: HoverCardProps['avatar'] }> = ({ avatar }) => {\n if (!avatar) return null;\n\n if (typeof avatar === 'string') {\n return <Avatar src={avatar} sx={{ width: 48, height: 48, mr: 2 }} />;\n }\n\n const element = avatar as React.ReactElement<{ sx?: object }>;\n return React.cloneElement(element, {\n sx: { width: 48, height: 48, mr: 2, ...element.props.sx },\n });\n};\n\nconst Title: React.FC<{\n title: React.ReactNode;\n variant?: string;\n sx?: object;\n dataTestId?: string;\n}> = ({ title, variant, sx, dataTestId }) => (\n <Typography\n variant={variant === 'minimal' ? 'body2' : 'subtitle1'}\n sx={{ fontWeight: 600, ...sx }}\n data-testid={testId(dataTestId, 'title', 'hover-card-title')}\n >\n {title}\n </Typography>\n);\n\nconst Description: React.FC<{\n description: React.ReactNode;\n sx?: object;\n dataTestId?: string;\n}> = ({ description, sx, dataTestId }) => (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={sx}\n data-testid={testId(dataTestId, 'description', 'hover-card-description')}\n >\n {description}\n </Typography>\n);\n\n/** The detailed variant leads with the avatar and sets the text beside it. */\nconst DetailedContent: React.FC<HoverCardContentProps> = ({\n title,\n description,\n avatar,\n children,\n dataTestId,\n}) => (\n <>\n {avatar && (\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\n <CardAvatar avatar={avatar} />\n <Box>\n {title && (\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 600, mb: 0.5 }}\n data-testid={testId(dataTestId, 'title', 'hover-card-title')}\n >\n {title}\n </Typography>\n )}\n {description && <Description description={description} dataTestId={dataTestId} />}\n </Box>\n </Box>\n )}\n {!avatar && title && (\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 600, mb: 1 }}\n data-testid={testId(dataTestId, 'title', 'hover-card-title')}\n >\n {title}\n </Typography>\n )}\n {!avatar && description && (\n <Description description={description} sx={{ mb: 1 }} dataTestId={dataTestId} />\n )}\n {children && <Box>{children}</Box>}\n </>\n);\n\nexport const HoverCardContent: React.FC<HoverCardContentProps> = (props) => {\n const { variant, title, description, avatar, loading, loadingComponent, children, dataTestId } =\n props;\n\n if (loading) {\n return (\n <LoadingContainer>\n {loadingComponent || (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <CircularProgress size={20} />\n <Typography variant=\"body2\">Loading...</Typography>\n </Box>\n )}\n </LoadingContainer>\n );\n }\n\n if (variant === 'detailed' && (avatar || title || description)) {\n return <DetailedContent {...props} />;\n }\n\n return (\n <>\n {title && (\n <Title title={title} variant={variant} sx={{ mb: 0.5 }} dataTestId={dataTestId} />\n )}\n {description && <Description description={description} dataTestId={dataTestId} />}\n {children}\n </>\n );\n};\n","import React from 'react';\n\ninterface HandlerInput {\n isTouchDevice: boolean;\n touchEnabled: boolean;\n enterDelay: number;\n openCard: (event: React.MouseEvent<HTMLElement> | React.TouchEvent<HTMLElement>) => void;\n closeCard: () => void;\n exitTimeoutRef: React.MutableRefObject<number | undefined>;\n}\n\n/**\n * The pointer and touch handlers, over the open/close pair. Touch gets a\n * long-press because there is no hover to respond to; the card's own handlers\n * keep it open while the pointer is travelling onto it.\n */\nconst useHoverHandlers = ({\n isTouchDevice,\n touchEnabled,\n enterDelay,\n openCard,\n closeCard,\n exitTimeoutRef,\n}: HandlerInput) => {\n const [touchTimeout, setTouchTimeout] = React.useState<number>();\n\n /** A touch device with touch disabled has no hover to respond to. */\n const hoverIgnored = isTouchDevice && !touchEnabled;\n\n const cancelTouch = React.useCallback(() => {\n if (touchTimeout) {\n window.clearTimeout(touchTimeout);\n setTouchTimeout(undefined);\n }\n }, [touchTimeout]);\n\n React.useEffect(\n () => () => {\n if (touchTimeout) window.clearTimeout(touchTimeout);\n },\n [touchTimeout],\n );\n\n const triggerHandlers = {\n onMouseEnter: (event: React.MouseEvent<HTMLElement>) => {\n if (hoverIgnored) return;\n openCard(event);\n },\n onMouseLeave: () => {\n if (hoverIgnored) return;\n closeCard();\n },\n onTouchStart: (event: React.TouchEvent<HTMLElement>) => {\n if (!touchEnabled) return;\n if (touchTimeout) window.clearTimeout(touchTimeout);\n setTouchTimeout(window.setTimeout(() => openCard(event), enterDelay));\n },\n // End and cancel do the same thing: the press did not become a long press.\n onTouchEnd: cancelTouch,\n onTouchCancel: cancelTouch,\n };\n\n /** Moving onto the card keeps it open; leaving it starts the exit delay. */\n const cardHandlers = {\n onMouseEnter: () => {\n if (exitTimeoutRef.current) window.clearTimeout(exitTimeoutRef.current);\n },\n onMouseLeave: closeCard,\n };\n\n return { triggerHandlers, cardHandlers };\n};\n\n/** Escape dismisses the card while it is open. */\nconst useEscapeKey = (active: boolean, onEscape: () => void) => {\n React.useEffect(() => {\n if (!active) return;\n\n const handleEscape = (event: globalThis.KeyboardEvent) => {\n if (event.key === 'Escape') onEscape();\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [active, onEscape]);\n};\n\ninterface HoverCardTimingInput {\n disabled: boolean;\n touchEnabled: boolean;\n enterDelay: number;\n exitDelay: number;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\n/**\n * When the card is open, and the delays that decide it.\n *\n * Three timers are in play: the enter delay before opening, the exit delay\n * before closing (so the pointer can travel from the trigger onto the card\n * without dismissing it), and the long-press timer on touch. Each cancels the\n * others' pending work, which is why they live together.\n */\nexport const useHoverCard = ({\n disabled,\n touchEnabled,\n enterDelay,\n exitDelay,\n onOpen,\n onClose,\n}: HoverCardTimingInput) => {\n const [anchorEl, setAnchorEl] = React.useState<HTMLElement | null>(null);\n const [isOpen, setIsOpen] = React.useState(false);\n const [isTouchDevice, setIsTouchDevice] = React.useState(false);\n const enterTimeoutRef = React.useRef<number | undefined>(undefined);\n const exitTimeoutRef = React.useRef<number | undefined>(undefined);\n\n // Probed in an effect, not during render, so SSR and hydration stay intact.\n React.useEffect(() => {\n setIsTouchDevice('ontouchstart' in window);\n }, []);\n\n const openCard = React.useCallback(\n (event: React.MouseEvent<HTMLElement> | React.TouchEvent<HTMLElement>) => {\n if (disabled) return;\n\n if (exitTimeoutRef.current) {\n window.clearTimeout(exitTimeoutRef.current);\n }\n\n const target = event.currentTarget;\n enterTimeoutRef.current = window.setTimeout(() => {\n setAnchorEl(target);\n setIsOpen(true);\n onOpen?.();\n }, enterDelay);\n },\n [disabled, enterDelay, onOpen],\n );\n\n const closeCard = React.useCallback(() => {\n if (enterTimeoutRef.current) {\n window.clearTimeout(enterTimeoutRef.current);\n }\n\n exitTimeoutRef.current = window.setTimeout(() => {\n setIsOpen(false);\n setAnchorEl(null);\n onClose?.();\n }, exitDelay);\n }, [exitDelay, onClose]);\n\n const handleClose = React.useCallback(() => {\n setIsOpen(false);\n setAnchorEl(null);\n onClose?.();\n }, [onClose]);\n\n const { triggerHandlers, cardHandlers } = useHoverHandlers({\n isTouchDevice,\n touchEnabled,\n enterDelay,\n openCard,\n closeCard,\n exitTimeoutRef,\n });\n\n useEscapeKey(isOpen, handleClose);\n\n React.useEffect(\n () => () => {\n if (enterTimeoutRef.current) window.clearTimeout(enterTimeoutRef.current);\n if (exitTimeoutRef.current) window.clearTimeout(exitTimeoutRef.current);\n },\n [],\n );\n\n return { anchorEl, isOpen, handleClose, triggerHandlers, cardHandlers };\n};\n","import { alpha } from '@mui/material';\nimport type { CSSObject, Theme } from '@mui/material';\n\nimport {\n pulseAnimation,\n scaleIn,\n slideInDown,\n slideInLeft,\n slideInRight,\n slideInUp,\n} from './HoverCard.animations';\nimport type { HoverCardAnimation, HoverCardPlacement } from './HoverCard.types';\n\n/** The edge the card sits on, ignoring the `-start`/`-end` alignment suffix. */\ntype Side = 'top' | 'bottom' | 'left' | 'right';\n\nexport const sideOf = (placement: HoverCardPlacement): Side => {\n if (placement.startsWith('top')) return 'top';\n if (placement.startsWith('left')) return 'left';\n if (placement.startsWith('right')) return 'right';\n return 'bottom';\n};\n\nconst ARROW_SIZE = 8;\n\n/**\n * The arrow is a CSS triangle: two transparent borders on the cross axis and one\n * filled border pointing back at the anchor. Every placement is that same shape,\n * so the table holds only which edge is filled and where the triangle sits.\n */\nconst ARROWS: Record<Side, (color: string) => CSSObject> = {\n top: (color) => ({\n bottom: -ARROW_SIZE,\n left: '50%',\n transform: 'translateX(-50%)',\n borderLeft: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid transparent`,\n borderTop: `${ARROW_SIZE}px solid ${color}`,\n }),\n bottom: (color) => ({\n top: -ARROW_SIZE,\n left: '50%',\n transform: 'translateX(-50%)',\n borderLeft: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid ${color}`,\n }),\n left: (color) => ({\n right: -ARROW_SIZE,\n top: '50%',\n transform: 'translateY(-50%)',\n borderTop: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid transparent`,\n borderLeft: `${ARROW_SIZE}px solid ${color}`,\n }),\n right: (color) => ({\n left: -ARROW_SIZE,\n top: '50%',\n transform: 'translateY(-50%)',\n borderTop: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid ${color}`,\n }),\n};\n\nexport const arrowSx = (theme: Theme, placement: HoverCardPlacement): CSSObject => ({\n position: 'absolute',\n width: 0,\n height: 0,\n zIndex: 1,\n ...ARROWS[sideOf(placement)](theme.palette.background.paper),\n});\n\ntype Origin = { vertical: 'top' | 'center' | 'bottom'; horizontal: 'left' | 'center' | 'right' };\n\n/** Where the popover attaches to the anchor, per side. */\nconst ANCHOR_ORIGINS: Record<Side, Origin> = {\n top: { vertical: 'top', horizontal: 'center' },\n bottom: { vertical: 'bottom', horizontal: 'center' },\n left: { vertical: 'center', horizontal: 'left' },\n right: { vertical: 'center', horizontal: 'right' },\n};\n\n/** The card's own corner meets the anchor's, so its origin is the opposite one. */\nconst flip = (origin: Origin): Origin => ({\n vertical: origin.vertical === 'top' ? 'bottom' : origin.vertical === 'bottom' ? 'top' : 'center',\n horizontal:\n origin.horizontal === 'left' ? 'right' : origin.horizontal === 'right' ? 'left' : 'center',\n});\n\nexport const getAnchorOrigin = (placement: HoverCardPlacement): Origin =>\n ANCHOR_ORIGINS[sideOf(placement)];\n\nexport const getTransformOrigin = (placement: HoverCardPlacement): Origin =>\n flip(ANCHOR_ORIGINS[sideOf(placement)]);\n\nconst ANIMATIONS: Record<string, CSSObject> = {\n // `fade` shares slideInUp deliberately: the keyframes fade in while rising.\n fade: { animation: `${slideInUp} 0.2s ease-out` },\n scale: { transformOrigin: 'center', animation: `${scaleIn} 0.2s cubic-bezier(0.4, 0, 0.2, 1)` },\n 'slide-up': { animation: `${slideInUp} 0.3s cubic-bezier(0.4, 0, 0.2, 1)` },\n 'slide-down': { animation: `${slideInDown} 0.3s cubic-bezier(0.4, 0, 0.2, 1)` },\n 'slide-left': { animation: `${slideInLeft} 0.3s cubic-bezier(0.4, 0, 0.2, 1)` },\n 'slide-right': { animation: `${slideInRight} 0.3s cubic-bezier(0.4, 0, 0.2, 1)` },\n};\n\nconst VARIANTS: Record<string, (theme: Theme) => CSSObject> = {\n default: (theme) => ({\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.shadows[8],\n }),\n glass: (theme) => ({\n backgroundColor: alpha(theme.palette.background.paper, 0.85),\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: `0 8px 32px ${alpha(theme.palette.common.black, 0.12)}`,\n }),\n detailed: (theme) => ({\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.shadows[12],\n }),\n minimal: (theme) => ({\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n boxShadow: theme.shadows[4],\n }),\n};\n\nconst glowStyles = (theme: Theme): CSSObject => ({\n boxShadow: `0 0 20px 5px ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n});\n\nconst pulseStyles = (theme: Theme): CSSObject => ({\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.1,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n});\n\nexport interface CardStyleFlags {\n customVariant?: string;\n glow?: boolean;\n pulse?: boolean;\n animation?: HoverCardAnimation;\n}\n\nexport const cardSx = (theme: Theme, flags: CardStyleFlags): CSSObject => {\n const { customVariant, glow, pulse, animation } = flags;\n\n return {\n borderRadius: theme.spacing(1.5),\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n position: 'relative',\n overflow: 'visible',\n minWidth: 200,\n maxWidth: 400,\n ...(animation ? (ANIMATIONS[animation] ?? {}) : {}),\n ...(customVariant ? (VARIANTS[customVariant]?.(theme) ?? {}) : {}),\n // The old \"both\" arm was exactly these two spread together.\n ...(glow && glowStyles(theme)),\n ...(pulse && pulseStyles(theme)),\n };\n};\n","import { keyframes } from '@mui/material';\n\nexport const pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 10px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\nexport const slideInUp = keyframes`\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nexport const slideInDown = keyframes`\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nexport const slideInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const slideInRight = keyframes`\n from {\n opacity: 0;\n transform: translateX(-8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const scaleIn = keyframes`\n from {\n opacity: 0;\n transform: scale(0.8);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\n// Arrow component\n"],"mappings":"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","names":["Box","styled","React","React","Fragment","jsx","jsxs","styled","React","Box"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/data-display/HoverCard/HoverCard.tsx","../../src/components/data-display/HoverCard/HoverCard.content.tsx","../../src/components/data-display/HoverCard/HoverCard.hooks.ts","../../src/components/data-display/HoverCard/HoverCard.styles.ts","../../src/components/data-display/HoverCard/HoverCard.animations.ts"],"sourcesContent":["import { Box, Card, CardContent, Popover } from '@mui/material';\nimport { styled } from '@mui/material';\nimport React from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport { HoverCardContent } from './HoverCard.content';\nimport { useHoverCard } from './HoverCard.hooks';\nimport { arrowSx, cardSx, getAnchorOrigin, getTransformOrigin, sideOf } from './HoverCard.styles';\nimport type { CardStyleFlags } from './HoverCard.styles';\nimport type { HoverCardAnimation, HoverCardPlacement, HoverCardProps } from './HoverCard.types';\n\nconst ArrowContainer = styled('div')<{ placement: HoverCardPlacement; offset: number }>(\n ({ theme, placement }) => ({ ...arrowSx(theme, placement) }),\n);\n\nconst StyledCard = styled(Card, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'glow', 'pulse', 'animation'].includes(prop as string),\n})<CardStyleFlags>(({ theme, ...flags }) => ({ ...cardSx(theme, flags) }));\n\nconst StyledPopover = styled(Popover, {\n shouldForwardProp: (prop) => prop !== 'customAnimation',\n})<{ customAnimation?: HoverCardAnimation }>(({ customAnimation }) => ({\n // The popover only positions; StyledCard draws the surface.\n '& .MuiPopover-paper': {\n backgroundColor: 'transparent',\n boxShadow: 'none',\n overflow: 'visible',\n ...(customAnimation === 'scale' && { transformOrigin: 'center' }),\n },\n}));\n\nconst DEFAULTS = {\n variant: 'default',\n glow: false,\n pulse: false,\n placement: 'bottom',\n showArrow: false,\n animation: 'fade',\n enterDelay: 700,\n exitDelay: 0,\n maxWidth: 400,\n loading: false,\n touchEnabled: true,\n offset: 8,\n disabled: false,\n} satisfies Partial<HoverCardProps>;\n\ntype ResolvedProps = HoverCardProps & Required<Pick<HoverCardProps, keyof typeof DEFAULTS>>;\n\n/** Padding is the variant's own: detailed roomier, minimal tighter. */\nconst CONTENT_PADDING: Record<string, number> = { detailed: 3, minimal: 1.5 };\n\n/** The card is nudged off the anchor on whichever side it sits. */\nconst offsetMargin = (placement: HoverCardPlacement, offset: number) => {\n const side = sideOf(placement);\n const key = ({ top: 'mt', bottom: 'mb', left: 'ml', right: 'mr' } as const)[side];\n return { [key]: `${offset}px` };\n};\n\nexport const HoverCard = React.forwardRef<HTMLDivElement, HoverCardProps>((props, ref) => {\n const {\n variant, glow, pulse, title, description, avatar, trigger, placement, showArrow,\n animation, enterDelay, exitDelay, maxWidth, loading, loadingComponent, loadingText, touchEnabled,\n offset, disabled, onOpen, onClose, children, dataTestId,\n ...rest\n } = withDefaults(props, DEFAULTS) as ResolvedProps;\n\n const { anchorEl, isOpen, handleClose, triggerHandlers, cardHandlers } = useHoverCard({\n disabled,\n touchEnabled,\n enterDelay,\n exitDelay,\n onOpen,\n onClose,\n });\n\n const triggerProps = {\n ...triggerHandlers,\n style: { cursor: disabled ? 'default' : 'pointer' },\n 'data-testid': dataTestId ? `${dataTestId}-trigger` : 'hover-card-trigger',\n };\n\n const triggerElement = trigger ? (\n React.cloneElement(trigger, triggerProps)\n ) : (\n <span {...triggerProps} style={{ display: 'inline-block', ...triggerProps.style }}>\n {children}\n </span>\n );\n\n const padding = CONTENT_PADDING[variant] ?? 2;\n\n return (\n <>\n {triggerElement}\n <StyledPopover\n ref={ref}\n open={isOpen && !disabled}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={getAnchorOrigin(placement)}\n transformOrigin={getTransformOrigin(placement)}\n {...cardHandlers}\n disableAutoFocus\n disableEnforceFocus\n disableRestoreFocus\n customAnimation={animation}\n slotProps={{ paper: { style: { pointerEvents: 'auto' } } }}\n {...rest}\n >\n <Box sx={{ position: 'relative' }}>\n {showArrow && <ArrowContainer placement={placement} offset={offset} />}\n <StyledCard\n customVariant={variant}\n glow={glow}\n pulse={pulse}\n animation={animation}\n data-testid={dataTestId || 'hover-card-content'}\n sx={{ maxWidth, ...offsetMargin(placement, offset) }}\n >\n <CardContent sx={{ p: padding, '&:last-child': { pb: padding } }}>\n <HoverCardContent\n loadingText={loadingText} variant={variant} title={title}\n description={description}\n avatar={avatar}\n loading={loading}\n loadingComponent={loadingComponent}\n dataTestId={dataTestId}\n >\n {children}\n </HoverCardContent>\n </CardContent>\n </StyledCard>\n </Box>\n </StyledPopover>\n </>\n );\n});\n\nHoverCard.displayName = 'HoverCard';\n","import { Avatar, Box, CircularProgress, Typography } from '@mui/material';\nimport { styled } from '@mui/material';\nimport React from 'react';\n\nimport type { HoverCardProps } from './HoverCard.types';\n\nconst LoadingContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 80,\n color: theme.palette.text.secondary,\n}));\n\n/** `${dataTestId}-${suffix}`, or the shared default when the caller gave no id. */\nconst testId = (base: string | undefined, suffix: string, fallback: string) =>\n base ? `${base}-${suffix}` : fallback;\n\nexport interface HoverCardContentProps\n extends Pick<\n HoverCardProps,\n | 'variant'\n | 'title'\n | 'description'\n | 'avatar'\n | 'loading'\n | 'loadingComponent'\n | 'loadingText'\n | 'children'\n > {\n dataTestId?: string;\n}\n\n/** A string avatar is a src; anything else is an element to re-size in place. */\nconst CardAvatar: React.FC<{ avatar: HoverCardProps['avatar'] }> = ({ avatar }) => {\n if (!avatar) return null;\n\n if (typeof avatar === 'string') {\n return <Avatar src={avatar} sx={{ width: 48, height: 48, mr: 2 }} />;\n }\n\n const element = avatar as React.ReactElement<{ sx?: object }>;\n return React.cloneElement(element, {\n sx: { width: 48, height: 48, mr: 2, ...element.props.sx },\n });\n};\n\nconst Title: React.FC<{\n title: React.ReactNode;\n variant?: string;\n sx?: object;\n dataTestId?: string;\n}> = ({ title, variant, sx, dataTestId }) => (\n <Typography\n variant={variant === 'minimal' ? 'body2' : 'subtitle1'}\n sx={{ fontWeight: 600, ...sx }}\n data-testid={testId(dataTestId, 'title', 'hover-card-title')}\n >\n {title}\n </Typography>\n);\n\nconst Description: React.FC<{\n description: React.ReactNode;\n sx?: object;\n dataTestId?: string;\n}> = ({ description, sx, dataTestId }) => (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={sx}\n data-testid={testId(dataTestId, 'description', 'hover-card-description')}\n >\n {description}\n </Typography>\n);\n\n/** The detailed variant leads with the avatar and sets the text beside it. */\nconst DetailedContent: React.FC<HoverCardContentProps> = ({\n title,\n description,\n avatar,\n children,\n dataTestId,\n}) => (\n <>\n {avatar && (\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\n <CardAvatar avatar={avatar} />\n <Box>\n {title && (\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 600, mb: 0.5 }}\n data-testid={testId(dataTestId, 'title', 'hover-card-title')}\n >\n {title}\n </Typography>\n )}\n {description && <Description description={description} dataTestId={dataTestId} />}\n </Box>\n </Box>\n )}\n {!avatar && title && (\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 600, mb: 1 }}\n data-testid={testId(dataTestId, 'title', 'hover-card-title')}\n >\n {title}\n </Typography>\n )}\n {!avatar && description && (\n <Description description={description} sx={{ mb: 1 }} dataTestId={dataTestId} />\n )}\n {children && <Box>{children}</Box>}\n </>\n);\n\nexport const HoverCardContent: React.FC<HoverCardContentProps> = (props) => {\n const { variant, title, description, avatar, loading, loadingComponent, children, dataTestId } =\n props;\n const { loadingText } = props;\n\n if (loading) {\n return (\n <LoadingContainer>\n {loadingComponent || (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <CircularProgress size={20} />\n <Typography variant=\"body2\">{loadingText}</Typography>\n </Box>\n )}\n </LoadingContainer>\n );\n }\n\n if (variant === 'detailed' && (avatar || title || description)) {\n return <DetailedContent {...props} />;\n }\n\n return (\n <>\n {title && (\n <Title title={title} variant={variant} sx={{ mb: 0.5 }} dataTestId={dataTestId} />\n )}\n {description && <Description description={description} dataTestId={dataTestId} />}\n {children}\n </>\n );\n};\n","import React from 'react';\n\ninterface HandlerInput {\n isTouchDevice: boolean;\n touchEnabled: boolean;\n enterDelay: number;\n openCard: (event: React.MouseEvent<HTMLElement> | React.TouchEvent<HTMLElement>) => void;\n closeCard: () => void;\n exitTimeoutRef: React.MutableRefObject<number | undefined>;\n}\n\n/**\n * The pointer and touch handlers, over the open/close pair. Touch gets a\n * long-press because there is no hover to respond to; the card's own handlers\n * keep it open while the pointer is travelling onto it.\n */\nconst useHoverHandlers = ({\n isTouchDevice,\n touchEnabled,\n enterDelay,\n openCard,\n closeCard,\n exitTimeoutRef,\n}: HandlerInput) => {\n const [touchTimeout, setTouchTimeout] = React.useState<number>();\n\n /** A touch device with touch disabled has no hover to respond to. */\n const hoverIgnored = isTouchDevice && !touchEnabled;\n\n const cancelTouch = React.useCallback(() => {\n if (touchTimeout) {\n window.clearTimeout(touchTimeout);\n setTouchTimeout(undefined);\n }\n }, [touchTimeout]);\n\n React.useEffect(\n () => () => {\n if (touchTimeout) window.clearTimeout(touchTimeout);\n },\n [touchTimeout],\n );\n\n const triggerHandlers = {\n onMouseEnter: (event: React.MouseEvent<HTMLElement>) => {\n if (hoverIgnored) return;\n openCard(event);\n },\n onMouseLeave: () => {\n if (hoverIgnored) return;\n closeCard();\n },\n onTouchStart: (event: React.TouchEvent<HTMLElement>) => {\n if (!touchEnabled) return;\n if (touchTimeout) window.clearTimeout(touchTimeout);\n setTouchTimeout(window.setTimeout(() => openCard(event), enterDelay));\n },\n // End and cancel do the same thing: the press did not become a long press.\n onTouchEnd: cancelTouch,\n onTouchCancel: cancelTouch,\n };\n\n /** Moving onto the card keeps it open; leaving it starts the exit delay. */\n const cardHandlers = {\n onMouseEnter: () => {\n if (exitTimeoutRef.current) window.clearTimeout(exitTimeoutRef.current);\n },\n onMouseLeave: closeCard,\n };\n\n return { triggerHandlers, cardHandlers };\n};\n\n/** Escape dismisses the card while it is open. */\nconst useEscapeKey = (active: boolean, onEscape: () => void) => {\n React.useEffect(() => {\n if (!active) return;\n\n const handleEscape = (event: globalThis.KeyboardEvent) => {\n if (event.key === 'Escape') onEscape();\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [active, onEscape]);\n};\n\ninterface HoverCardTimingInput {\n disabled: boolean;\n touchEnabled: boolean;\n enterDelay: number;\n exitDelay: number;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\n/**\n * When the card is open, and the delays that decide it.\n *\n * Three timers are in play: the enter delay before opening, the exit delay\n * before closing (so the pointer can travel from the trigger onto the card\n * without dismissing it), and the long-press timer on touch. Each cancels the\n * others' pending work, which is why they live together.\n */\nexport const useHoverCard = ({\n disabled,\n touchEnabled,\n enterDelay,\n exitDelay,\n onOpen,\n onClose,\n}: HoverCardTimingInput) => {\n const [anchorEl, setAnchorEl] = React.useState<HTMLElement | null>(null);\n const [isOpen, setIsOpen] = React.useState(false);\n const [isTouchDevice, setIsTouchDevice] = React.useState(false);\n const enterTimeoutRef = React.useRef<number | undefined>(undefined);\n const exitTimeoutRef = React.useRef<number | undefined>(undefined);\n\n // Probed in an effect, not during render, so SSR and hydration stay intact.\n React.useEffect(() => {\n setIsTouchDevice('ontouchstart' in window);\n }, []);\n\n const openCard = React.useCallback(\n (event: React.MouseEvent<HTMLElement> | React.TouchEvent<HTMLElement>) => {\n if (disabled) return;\n\n if (exitTimeoutRef.current) {\n window.clearTimeout(exitTimeoutRef.current);\n }\n\n const target = event.currentTarget;\n enterTimeoutRef.current = window.setTimeout(() => {\n setAnchorEl(target);\n setIsOpen(true);\n onOpen?.();\n }, enterDelay);\n },\n [disabled, enterDelay, onOpen],\n );\n\n const closeCard = React.useCallback(() => {\n if (enterTimeoutRef.current) {\n window.clearTimeout(enterTimeoutRef.current);\n }\n\n exitTimeoutRef.current = window.setTimeout(() => {\n setIsOpen(false);\n setAnchorEl(null);\n onClose?.();\n }, exitDelay);\n }, [exitDelay, onClose]);\n\n const handleClose = React.useCallback(() => {\n setIsOpen(false);\n setAnchorEl(null);\n onClose?.();\n }, [onClose]);\n\n const { triggerHandlers, cardHandlers } = useHoverHandlers({\n isTouchDevice,\n touchEnabled,\n enterDelay,\n openCard,\n closeCard,\n exitTimeoutRef,\n });\n\n useEscapeKey(isOpen, handleClose);\n\n React.useEffect(\n () => () => {\n if (enterTimeoutRef.current) window.clearTimeout(enterTimeoutRef.current);\n if (exitTimeoutRef.current) window.clearTimeout(exitTimeoutRef.current);\n },\n [],\n );\n\n return { anchorEl, isOpen, handleClose, triggerHandlers, cardHandlers };\n};\n","import { alpha } from '@mui/material';\nimport type { CSSObject, Theme } from '@mui/material';\n\nimport {\n pulseAnimation,\n scaleIn,\n slideInDown,\n slideInLeft,\n slideInRight,\n slideInUp,\n} from './HoverCard.animations';\nimport type { HoverCardAnimation, HoverCardPlacement } from './HoverCard.types';\n\n/** The edge the card sits on, ignoring the `-start`/`-end` alignment suffix. */\ntype Side = 'top' | 'bottom' | 'left' | 'right';\n\nexport const sideOf = (placement: HoverCardPlacement): Side => {\n if (placement.startsWith('top')) return 'top';\n if (placement.startsWith('left')) return 'left';\n if (placement.startsWith('right')) return 'right';\n return 'bottom';\n};\n\nconst ARROW_SIZE = 8;\n\n/**\n * The arrow is a CSS triangle: two transparent borders on the cross axis and one\n * filled border pointing back at the anchor. Every placement is that same shape,\n * so the table holds only which edge is filled and where the triangle sits.\n */\nconst ARROWS: Record<Side, (color: string) => CSSObject> = {\n top: (color) => ({\n bottom: -ARROW_SIZE,\n left: '50%',\n transform: 'translateX(-50%)',\n borderLeft: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid transparent`,\n borderTop: `${ARROW_SIZE}px solid ${color}`,\n }),\n bottom: (color) => ({\n top: -ARROW_SIZE,\n left: '50%',\n transform: 'translateX(-50%)',\n borderLeft: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid ${color}`,\n }),\n left: (color) => ({\n right: -ARROW_SIZE,\n top: '50%',\n transform: 'translateY(-50%)',\n borderTop: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid transparent`,\n borderLeft: `${ARROW_SIZE}px solid ${color}`,\n }),\n right: (color) => ({\n left: -ARROW_SIZE,\n top: '50%',\n transform: 'translateY(-50%)',\n borderTop: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid ${color}`,\n }),\n};\n\nexport const arrowSx = (theme: Theme, placement: HoverCardPlacement): CSSObject => ({\n position: 'absolute',\n width: 0,\n height: 0,\n zIndex: 1,\n ...ARROWS[sideOf(placement)](theme.palette.background.paper),\n});\n\ntype Origin = { vertical: 'top' | 'center' | 'bottom'; horizontal: 'left' | 'center' | 'right' };\n\n/** Where the popover attaches to the anchor, per side. */\nconst ANCHOR_ORIGINS: Record<Side, Origin> = {\n top: { vertical: 'top', horizontal: 'center' },\n bottom: { vertical: 'bottom', horizontal: 'center' },\n left: { vertical: 'center', horizontal: 'left' },\n right: { vertical: 'center', horizontal: 'right' },\n};\n\n/** The card's own corner meets the anchor's, so its origin is the opposite one. */\nconst flip = (origin: Origin): Origin => ({\n vertical: origin.vertical === 'top' ? 'bottom' : origin.vertical === 'bottom' ? 'top' : 'center',\n horizontal:\n origin.horizontal === 'left' ? 'right' : origin.horizontal === 'right' ? 'left' : 'center',\n});\n\nexport const getAnchorOrigin = (placement: HoverCardPlacement): Origin =>\n ANCHOR_ORIGINS[sideOf(placement)];\n\nexport const getTransformOrigin = (placement: HoverCardPlacement): Origin =>\n flip(ANCHOR_ORIGINS[sideOf(placement)]);\n\nconst ANIMATIONS: Record<string, CSSObject> = {\n // `fade` shares slideInUp deliberately: the keyframes fade in while rising.\n fade: { animation: `${slideInUp} 0.2s ease-out` },\n scale: { transformOrigin: 'center', animation: `${scaleIn} 0.2s cubic-bezier(0.4, 0, 0.2, 1)` },\n 'slide-up': { animation: `${slideInUp} 0.3s cubic-bezier(0.4, 0, 0.2, 1)` },\n 'slide-down': { animation: `${slideInDown} 0.3s cubic-bezier(0.4, 0, 0.2, 1)` },\n 'slide-left': { animation: `${slideInLeft} 0.3s cubic-bezier(0.4, 0, 0.2, 1)` },\n 'slide-right': { animation: `${slideInRight} 0.3s cubic-bezier(0.4, 0, 0.2, 1)` },\n};\n\nconst VARIANTS: Record<string, (theme: Theme) => CSSObject> = {\n default: (theme) => ({\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.shadows[8],\n }),\n glass: (theme) => ({\n backgroundColor: alpha(theme.palette.background.paper, 0.85),\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: `0 8px 32px ${alpha(theme.palette.common.black, 0.12)}`,\n }),\n detailed: (theme) => ({\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.shadows[12],\n }),\n minimal: (theme) => ({\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n boxShadow: theme.shadows[4],\n }),\n};\n\nconst glowStyles = (theme: Theme): CSSObject => ({\n boxShadow: `0 0 20px 5px ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n});\n\nconst pulseStyles = (theme: Theme): CSSObject => ({\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.1,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n});\n\nexport interface CardStyleFlags {\n customVariant?: string;\n glow?: boolean;\n pulse?: boolean;\n animation?: HoverCardAnimation;\n}\n\nexport const cardSx = (theme: Theme, flags: CardStyleFlags): CSSObject => {\n const { customVariant, glow, pulse, animation } = flags;\n\n return {\n borderRadius: theme.spacing(1.5),\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n position: 'relative',\n overflow: 'visible',\n minWidth: 200,\n maxWidth: 400,\n ...(animation ? (ANIMATIONS[animation] ?? {}) : {}),\n ...(customVariant ? (VARIANTS[customVariant]?.(theme) ?? {}) : {}),\n // The old \"both\" arm was exactly these two spread together.\n ...(glow && glowStyles(theme)),\n ...(pulse && pulseStyles(theme)),\n };\n};\n","import { keyframes } from '@mui/material';\n\nexport const pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 10px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\nexport const slideInUp = keyframes`\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nexport const slideInDown = keyframes`\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nexport const slideInLeft = keyframes`\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const slideInRight = keyframes`\n from {\n opacity: 0;\n transform: translateX(-8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const scaleIn = keyframes`\n from {\n opacity: 0;\n transform: scale(0.8);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\n// Arrow component\n"],"mappings":";;;;;;AAAA,SAAS,OAAAA,MAAK,MAAM,aAAa,eAAe;AAChD,SAAS,UAAAC,eAAc;AACvB,OAAOC,YAAW;;;ACFlB,SAAS,QAAQ,KAAK,kBAAkB,kBAAkB;AAC1D,SAAS,cAAc;AACvB,OAAO,WAAW;AAoCP,SA+CT,UA/CS,KAmDH,YAnDG;AAhCX,IAAM,mBAAmB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACnD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,OAAO,MAAM,QAAQ,KAAK;AAC5B,EAAE;AAGF,IAAM,SAAS,CAAC,MAA0B,QAAgB,aACxD,OAAO,GAAG,IAAI,IAAI,MAAM,KAAK;AAkB/B,IAAM,aAA6D,CAAC,EAAE,OAAO,MAAM;AACjF,MAAI,CAAC,OAAQ,QAAO;AAEpB,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,oBAAC,UAAO,KAAK,QAAQ,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,IAAI,EAAE,GAAG;AAAA,EACpE;AAEA,QAAM,UAAU;AAChB,SAAO,MAAM,aAAa,SAAS;AAAA,IACjC,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,IAAI,GAAG,GAAG,QAAQ,MAAM,GAAG;AAAA,EAC1D,CAAC;AACH;AAEA,IAAM,QAKD,CAAC,EAAE,OAAO,SAAS,IAAI,WAAW,MACrC;AAAA,EAAC;AAAA;AAAA,IACC,SAAS,YAAY,YAAY,UAAU;AAAA,IAC3C,IAAI,EAAE,YAAY,KAAK,GAAG,GAAG;AAAA,IAC7B,eAAa,OAAO,YAAY,SAAS,kBAAkB;AAAA,IAE1D;AAAA;AACH;AAGF,IAAM,cAID,CAAC,EAAE,aAAa,IAAI,WAAW,MAClC;AAAA,EAAC;AAAA;AAAA,IACC,SAAQ;AAAA,IACR,OAAM;AAAA,IACN;AAAA,IACA,eAAa,OAAO,YAAY,eAAe,wBAAwB;AAAA,IAEtE;AAAA;AACH;AAIF,IAAM,kBAAmD,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACE,iCACG;AAAA,YACC,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,IAAI,EAAE,GACtD;AAAA,wBAAC,cAAW,QAAgB;AAAA,IAC5B,qBAAC,OACE;AAAA,eACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,IAAI,EAAE,YAAY,KAAK,IAAI,IAAI;AAAA,UAC/B,eAAa,OAAO,YAAY,SAAS,kBAAkB;AAAA,UAE1D;AAAA;AAAA,MACH;AAAA,MAED,eAAe,oBAAC,eAAY,aAA0B,YAAwB;AAAA,OACjF;AAAA,KACF;AAAA,EAED,CAAC,UAAU,SACV;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,IAAI,EAAE,YAAY,KAAK,IAAI,EAAE;AAAA,MAC7B,eAAa,OAAO,YAAY,SAAS,kBAAkB;AAAA,MAE1D;AAAA;AAAA,EACH;AAAA,EAED,CAAC,UAAU,eACV,oBAAC,eAAY,aAA0B,IAAI,EAAE,IAAI,EAAE,GAAG,YAAwB;AAAA,EAE/E,YAAY,oBAAC,OAAK,UAAS;AAAA,GAC9B;AAGK,IAAM,mBAAoD,CAAC,UAAU;AAC1E,QAAM,EAAE,SAAS,OAAO,aAAa,QAAQ,SAAS,kBAAkB,UAAU,WAAW,IAC3F;AACF,QAAM,EAAE,YAAY,IAAI;AAExB,MAAI,SAAS;AACX,WACE,oBAAC,oBACE,8BACC,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACvD;AAAA,0BAAC,oBAAiB,MAAM,IAAI;AAAA,MAC5B,oBAAC,cAAW,SAAQ,SAAS,uBAAY;AAAA,OAC3C,GAEJ;AAAA,EAEJ;AAEA,MAAI,YAAY,eAAe,UAAU,SAAS,cAAc;AAC9D,WAAO,oBAAC,mBAAiB,GAAG,OAAO;AAAA,EACrC;AAEA,SACE,iCACG;AAAA,aACC,oBAAC,SAAM,OAAc,SAAkB,IAAI,EAAE,IAAI,IAAI,GAAG,YAAwB;AAAA,IAEjF,eAAe,oBAAC,eAAY,aAA0B,YAAwB;AAAA,IAC9E;AAAA,KACH;AAEJ;;;ACtJA,OAAOC,YAAW;AAgBlB,IAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAoB;AAClB,QAAM,CAAC,cAAc,eAAe,IAAIA,OAAM,SAAiB;AAG/D,QAAM,eAAe,iBAAiB,CAAC;AAEvC,QAAM,cAAcA,OAAM,YAAY,MAAM;AAC1C,QAAI,cAAc;AAChB,aAAO,aAAa,YAAY;AAChC,sBAAgB,MAAS;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,EAAAA,OAAM;AAAA,IACJ,MAAM,MAAM;AACV,UAAI,aAAc,QAAO,aAAa,YAAY;AAAA,IACpD;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AAEA,QAAM,kBAAkB;AAAA,IACtB,cAAc,CAAC,UAAyC;AACtD,UAAI,aAAc;AAClB,eAAS,KAAK;AAAA,IAChB;AAAA,IACA,cAAc,MAAM;AAClB,UAAI,aAAc;AAClB,gBAAU;AAAA,IACZ;AAAA,IACA,cAAc,CAAC,UAAyC;AACtD,UAAI,CAAC,aAAc;AACnB,UAAI,aAAc,QAAO,aAAa,YAAY;AAClD,sBAAgB,OAAO,WAAW,MAAM,SAAS,KAAK,GAAG,UAAU,CAAC;AAAA,IACtE;AAAA;AAAA,IAEA,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB;AAGA,QAAM,eAAe;AAAA,IACnB,cAAc,MAAM;AAClB,UAAI,eAAe,QAAS,QAAO,aAAa,eAAe,OAAO;AAAA,IACxE;AAAA,IACA,cAAc;AAAA,EAChB;AAEA,SAAO,EAAE,iBAAiB,aAAa;AACzC;AAGA,IAAM,eAAe,CAAC,QAAiB,aAAyB;AAC9D,EAAAA,OAAM,UAAU,MAAM;AACpB,QAAI,CAAC,OAAQ;AAEb,UAAM,eAAe,CAAC,UAAoC;AACxD,UAAI,MAAM,QAAQ,SAAU,UAAS;AAAA,IACvC;AAEA,aAAS,iBAAiB,WAAW,YAAY;AACjD,WAAO,MAAM,SAAS,oBAAoB,WAAW,YAAY;AAAA,EACnE,GAAG,CAAC,QAAQ,QAAQ,CAAC;AACvB;AAmBO,IAAM,eAAe,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA4B;AAC1B,QAAM,CAAC,UAAU,WAAW,IAAIA,OAAM,SAA6B,IAAI;AACvE,QAAM,CAAC,QAAQ,SAAS,IAAIA,OAAM,SAAS,KAAK;AAChD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,OAAM,SAAS,KAAK;AAC9D,QAAM,kBAAkBA,OAAM,OAA2B,MAAS;AAClE,QAAM,iBAAiBA,OAAM,OAA2B,MAAS;AAGjE,EAAAA,OAAM,UAAU,MAAM;AACpB,qBAAiB,kBAAkB,MAAM;AAAA,EAC3C,GAAG,CAAC,CAAC;AAEL,QAAM,WAAWA,OAAM;AAAA,IACrB,CAAC,UAAyE;AACxE,UAAI,SAAU;AAEd,UAAI,eAAe,SAAS;AAC1B,eAAO,aAAa,eAAe,OAAO;AAAA,MAC5C;AAEA,YAAM,SAAS,MAAM;AACrB,sBAAgB,UAAU,OAAO,WAAW,MAAM;AAChD,oBAAY,MAAM;AAClB,kBAAU,IAAI;AACd,iBAAS;AAAA,MACX,GAAG,UAAU;AAAA,IACf;AAAA,IACA,CAAC,UAAU,YAAY,MAAM;AAAA,EAC/B;AAEA,QAAM,YAAYA,OAAM,YAAY,MAAM;AACxC,QAAI,gBAAgB,SAAS;AAC3B,aAAO,aAAa,gBAAgB,OAAO;AAAA,IAC7C;AAEA,mBAAe,UAAU,OAAO,WAAW,MAAM;AAC/C,gBAAU,KAAK;AACf,kBAAY,IAAI;AAChB,gBAAU;AAAA,IACZ,GAAG,SAAS;AAAA,EACd,GAAG,CAAC,WAAW,OAAO,CAAC;AAEvB,QAAM,cAAcA,OAAM,YAAY,MAAM;AAC1C,cAAU,KAAK;AACf,gBAAY,IAAI;AAChB,cAAU;AAAA,EACZ,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,EAAE,iBAAiB,aAAa,IAAI,iBAAiB;AAAA,IACzD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,eAAa,QAAQ,WAAW;AAEhC,EAAAA,OAAM;AAAA,IACJ,MAAM,MAAM;AACV,UAAI,gBAAgB,QAAS,QAAO,aAAa,gBAAgB,OAAO;AACxE,UAAI,eAAe,QAAS,QAAO,aAAa,eAAe,OAAO;AAAA,IACxE;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,UAAU,QAAQ,aAAa,iBAAiB,aAAa;AACxE;;;ACnLA,SAAS,aAAa;;;ACAtB,SAAS,iBAAiB;AAEnB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAevB,IAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWlB,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWpB,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWpB,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWrB,IAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AD7ChB,IAAM,SAAS,CAAC,cAAwC;AAC7D,MAAI,UAAU,WAAW,KAAK,EAAG,QAAO;AACxC,MAAI,UAAU,WAAW,MAAM,EAAG,QAAO;AACzC,MAAI,UAAU,WAAW,OAAO,EAAG,QAAO;AAC1C,SAAO;AACT;AAEA,IAAM,aAAa;AAOnB,IAAM,SAAqD;AAAA,EACzD,KAAK,CAAC,WAAW;AAAA,IACf,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,WAAW;AAAA,IACX,YAAY,GAAG,UAAU;AAAA,IACzB,aAAa,GAAG,UAAU;AAAA,IAC1B,WAAW,GAAG,UAAU,YAAY,KAAK;AAAA,EAC3C;AAAA,EACA,QAAQ,CAAC,WAAW;AAAA,IAClB,KAAK,CAAC;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,YAAY,GAAG,UAAU;AAAA,IACzB,aAAa,GAAG,UAAU;AAAA,IAC1B,cAAc,GAAG,UAAU,YAAY,KAAK;AAAA,EAC9C;AAAA,EACA,MAAM,CAAC,WAAW;AAAA,IAChB,OAAO,CAAC;AAAA,IACR,KAAK;AAAA,IACL,WAAW;AAAA,IACX,WAAW,GAAG,UAAU;AAAA,IACxB,cAAc,GAAG,UAAU;AAAA,IAC3B,YAAY,GAAG,UAAU,YAAY,KAAK;AAAA,EAC5C;AAAA,EACA,OAAO,CAAC,WAAW;AAAA,IACjB,MAAM,CAAC;AAAA,IACP,KAAK;AAAA,IACL,WAAW;AAAA,IACX,WAAW,GAAG,UAAU;AAAA,IACxB,cAAc,GAAG,UAAU;AAAA,IAC3B,aAAa,GAAG,UAAU,YAAY,KAAK;AAAA,EAC7C;AACF;AAEO,IAAM,UAAU,CAAC,OAAc,eAA8C;AAAA,EAClF,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,GAAG,OAAO,OAAO,SAAS,CAAC,EAAE,MAAM,QAAQ,WAAW,KAAK;AAC7D;AAKA,IAAM,iBAAuC;AAAA,EAC3C,KAAK,EAAE,UAAU,OAAO,YAAY,SAAS;AAAA,EAC7C,QAAQ,EAAE,UAAU,UAAU,YAAY,SAAS;AAAA,EACnD,MAAM,EAAE,UAAU,UAAU,YAAY,OAAO;AAAA,EAC/C,OAAO,EAAE,UAAU,UAAU,YAAY,QAAQ;AACnD;AAGA,IAAM,OAAO,CAAC,YAA4B;AAAA,EACxC,UAAU,OAAO,aAAa,QAAQ,WAAW,OAAO,aAAa,WAAW,QAAQ;AAAA,EACxF,YACE,OAAO,eAAe,SAAS,UAAU,OAAO,eAAe,UAAU,SAAS;AACtF;AAEO,IAAM,kBAAkB,CAAC,cAC9B,eAAe,OAAO,SAAS,CAAC;AAE3B,IAAM,qBAAqB,CAAC,cACjC,KAAK,eAAe,OAAO,SAAS,CAAC,CAAC;AAExC,IAAM,aAAwC;AAAA;AAAA,EAE5C,MAAM,EAAE,WAAW,GAAG,SAAS,iBAAiB;AAAA,EAChD,OAAO,EAAE,iBAAiB,UAAU,WAAW,GAAG,OAAO,qCAAqC;AAAA,EAC9F,YAAY,EAAE,WAAW,GAAG,SAAS,qCAAqC;AAAA,EAC1E,cAAc,EAAE,WAAW,GAAG,WAAW,qCAAqC;AAAA,EAC9E,cAAc,EAAE,WAAW,GAAG,WAAW,qCAAqC;AAAA,EAC9E,eAAe,EAAE,WAAW,GAAG,YAAY,qCAAqC;AAClF;AAEA,IAAM,WAAwD;AAAA,EAC5D,SAAS,CAAC,WAAW;AAAA,IACnB,iBAAiB,MAAM,QAAQ,WAAW;AAAA,IAC1C,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,GAAG,CAAC;AAAA,IACtD,WAAW,MAAM,QAAQ,CAAC;AAAA,EAC5B;AAAA,EACA,OAAO,CAAC,WAAW;AAAA,IACjB,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,IAAI;AAAA,IAC3D,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,GAAG,CAAC;AAAA,IACtD,WAAW,cAAc,MAAM,MAAM,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,EAClE;AAAA,EACA,UAAU,CAAC,WAAW;AAAA,IACpB,iBAAiB,MAAM,QAAQ,WAAW;AAAA,IAC1C,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,GAAG,CAAC;AAAA,IACtD,WAAW,MAAM,QAAQ,EAAE;AAAA,EAC7B;AAAA,EACA,SAAS,CAAC,WAAW;AAAA,IACnB,iBAAiB,MAAM,QAAQ,WAAW;AAAA,IAC1C,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,GAAG,CAAC;AAAA,IACtD,WAAW,MAAM,QAAQ,CAAC;AAAA,EAC5B;AACF;AAEA,IAAM,aAAa,CAAC,WAA6B;AAAA,EAC/C,WAAW,gBAAgB,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAAA,EACjE,QAAQ;AACV;AAEA,IAAM,cAAc,CAAC,WAA6B;AAAA,EAChD,UAAU;AAAA,EACV,YAAY;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiB,MAAM,QAAQ,QAAQ;AAAA,IACvC,SAAS;AAAA,IACT,WAAW,GAAG,cAAc;AAAA,IAC5B,eAAe;AAAA,IACf,QAAQ;AAAA,EACV;AACF;AASO,IAAM,SAAS,CAAC,OAAc,UAAqC;AACxE,QAAM,EAAE,eAAe,MAAM,OAAO,UAAU,IAAI;AAElD,SAAO;AAAA,IACL,cAAc,MAAM,QAAQ,GAAG;AAAA,IAC/B,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,GAAI,YAAa,WAAW,SAAS,KAAK,CAAC,IAAK,CAAC;AAAA,IACjD,GAAI,gBAAiB,SAAS,aAAa,IAAI,KAAK,KAAK,CAAC,IAAK,CAAC;AAAA;AAAA,IAEhE,GAAI,QAAQ,WAAW,KAAK;AAAA,IAC5B,GAAI,SAAS,YAAY,KAAK;AAAA,EAChC;AACF;;;AH1FI,SAQA,YAAAC,WARA,OAAAC,MAyBI,QAAAC,aAzBJ;AA3EJ,IAAM,iBAAiBC,QAAO,KAAK;AAAA,EACjC,CAAC,EAAE,OAAO,UAAU,OAAO,EAAE,GAAG,QAAQ,OAAO,SAAS,EAAE;AAC5D;AAEA,IAAM,aAAaA,QAAO,MAAM;AAAA,EAC9B,mBAAmB,CAAC,SAClB,CAAC,CAAC,iBAAiB,QAAQ,SAAS,WAAW,EAAE,SAAS,IAAc;AAC5E,CAAC,EAAkB,CAAC,EAAE,OAAO,GAAG,MAAM,OAAO,EAAE,GAAG,OAAO,OAAO,KAAK,EAAE,EAAE;AAEzE,IAAM,gBAAgBA,QAAO,SAAS;AAAA,EACpC,mBAAmB,CAAC,SAAS,SAAS;AACxC,CAAC,EAA4C,CAAC,EAAE,gBAAgB,OAAO;AAAA;AAAA,EAErE,uBAAuB;AAAA,IACrB,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,UAAU;AAAA,IACV,GAAI,oBAAoB,WAAW,EAAE,iBAAiB,SAAS;AAAA,EACjE;AACF,EAAE;AAEF,IAAM,WAAW;AAAA,EACf,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,UAAU;AACZ;AAKA,IAAM,kBAA0C,EAAE,UAAU,GAAG,SAAS,IAAI;AAG5E,IAAM,eAAe,CAAC,WAA+B,WAAmB;AACtE,QAAM,OAAO,OAAO,SAAS;AAC7B,QAAM,MAAO,EAAE,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,OAAO,KAAK,EAAY,IAAI;AAChF,SAAO,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,KAAK;AAChC;AAEO,IAAM,YAAYC,OAAM,WAA2C,CAAC,OAAO,QAAQ;AACxF,QAAM;AAAA,IACJ;AAAA,IAAS;AAAA,IAAM;AAAA,IAAO;AAAA,IAAO;AAAA,IAAa;AAAA,IAAQ;AAAA,IAAS;AAAA,IAAW;AAAA,IACtE;AAAA,IAAW;AAAA,IAAY;AAAA,IAAW;AAAA,IAAU;AAAA,IAAS;AAAA,IAAkB;AAAA,IAAa;AAAA,IACpF;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAQ;AAAA,IAAS;AAAA,IAAU;AAAA,IAC7C,GAAG;AAAA,EACL,IAAI,aAAa,OAAO,QAAQ;AAEhC,QAAM,EAAE,UAAU,QAAQ,aAAa,iBAAiB,aAAa,IAAI,aAAa;AAAA,IACpF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,eAAe;AAAA,IACnB,GAAG;AAAA,IACH,OAAO,EAAE,QAAQ,WAAW,YAAY,UAAU;AAAA,IAClD,eAAe,aAAa,GAAG,UAAU,aAAa;AAAA,EACxD;AAEA,QAAM,iBAAiB,UACrBA,OAAM,aAAa,SAAS,YAAY,IAExC,gBAAAH,KAAC,UAAM,GAAG,cAAc,OAAO,EAAE,SAAS,gBAAgB,GAAG,aAAa,MAAM,GAC7E,UACH;AAGF,QAAM,UAAU,gBAAgB,OAAO,KAAK;AAE5C,SACE,gBAAAC,MAAAF,WAAA,EACG;AAAA;AAAA,IACD,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAM,UAAU,CAAC;AAAA,QACjB;AAAA,QACA,SAAS;AAAA,QACT,cAAc,gBAAgB,SAAS;AAAA,QACvC,iBAAiB,mBAAmB,SAAS;AAAA,QAC5C,GAAG;AAAA,QACJ,kBAAgB;AAAA,QAChB,qBAAmB;AAAA,QACnB,qBAAmB;AAAA,QACnB,iBAAiB;AAAA,QACjB,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,OAAO,EAAE,EAAE;AAAA,QACxD,GAAG;AAAA,QAEJ,0BAAAC,MAACG,MAAA,EAAI,IAAI,EAAE,UAAU,WAAW,GAC7B;AAAA,uBAAa,gBAAAJ,KAAC,kBAAe,WAAsB,QAAgB;AAAA,UACpE,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,eAAe;AAAA,cACf;AAAA,cACA;AAAA,cACA;AAAA,cACA,eAAa,cAAc;AAAA,cAC3B,IAAI,EAAE,UAAU,GAAG,aAAa,WAAW,MAAM,EAAE;AAAA,cAEnD,0BAAAA,KAAC,eAAY,IAAI,EAAE,GAAG,SAAS,gBAAgB,EAAE,IAAI,QAAQ,EAAE,GAC7D,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBAA0B;AAAA,kBAAkB;AAAA,kBAC5C;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBAEC;AAAA;AAAA,cACH,GACF;AAAA;AAAA,UACF;AAAA,WACF;AAAA;AAAA,IACF;AAAA,KACF;AAEJ,CAAC;AAED,UAAU,cAAc;","names":["Box","styled","React","React","Fragment","jsx","jsxs","styled","React","Box"]}
|
|
@@ -60,8 +60,26 @@ var definedProps = (props) => Object.fromEntries(
|
|
|
60
60
|
);
|
|
61
61
|
var resolveLightboxProps = (props) => ({ ...LIGHTBOX_DEFAULTS, ...definedProps(props) });
|
|
62
62
|
|
|
63
|
-
// src/components/data-display/Lightbox/
|
|
63
|
+
// src/components/data-display/Lightbox/lightbox-copy-context.tsx
|
|
64
|
+
import { createContext, useContext } from "react";
|
|
64
65
|
import { jsx } from "react/jsx-runtime";
|
|
66
|
+
var LightboxCopyContext = createContext(null);
|
|
67
|
+
function LightboxCopyProvider({
|
|
68
|
+
copy,
|
|
69
|
+
children
|
|
70
|
+
}) {
|
|
71
|
+
return /* @__PURE__ */ jsx(LightboxCopyContext.Provider, { value: copy, children });
|
|
72
|
+
}
|
|
73
|
+
function useLightboxCopy() {
|
|
74
|
+
const copy = useContext(LightboxCopyContext);
|
|
75
|
+
if (!copy) {
|
|
76
|
+
throw new Error("useLightboxCopy must be rendered inside a <LightboxCopyProvider>");
|
|
77
|
+
}
|
|
78
|
+
return copy;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// src/components/data-display/Lightbox/LightboxMedia.tsx
|
|
82
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
65
83
|
var cursorFor = (zoomLevel, zoomable) => {
|
|
66
84
|
if (zoomLevel > 1) return "move";
|
|
67
85
|
return zoomable ? "zoom-in" : "default";
|
|
@@ -81,7 +99,7 @@ var LightboxMedia = ({
|
|
|
81
99
|
onDoubleClick
|
|
82
100
|
}) => {
|
|
83
101
|
if (item.type === "video") {
|
|
84
|
-
return /* @__PURE__ */
|
|
102
|
+
return /* @__PURE__ */ jsx2(
|
|
85
103
|
"video",
|
|
86
104
|
{
|
|
87
105
|
src: item.src,
|
|
@@ -94,7 +112,7 @@ var LightboxMedia = ({
|
|
|
94
112
|
}
|
|
95
113
|
);
|
|
96
114
|
}
|
|
97
|
-
return /* @__PURE__ */
|
|
115
|
+
return /* @__PURE__ */ jsx2(
|
|
98
116
|
"img",
|
|
99
117
|
{
|
|
100
118
|
src: item.src,
|
|
@@ -120,7 +138,7 @@ var LightboxMedia = ({
|
|
|
120
138
|
};
|
|
121
139
|
|
|
122
140
|
// src/components/data-display/Lightbox/LightboxCurrentMedia.tsx
|
|
123
|
-
import { jsx as
|
|
141
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
124
142
|
var LightboxCurrentMedia = ({
|
|
125
143
|
item,
|
|
126
144
|
index,
|
|
@@ -132,7 +150,7 @@ var LightboxCurrentMedia = ({
|
|
|
132
150
|
onWheel
|
|
133
151
|
}) => {
|
|
134
152
|
if (!item) return null;
|
|
135
|
-
return /* @__PURE__ */
|
|
153
|
+
return /* @__PURE__ */ jsx3(
|
|
136
154
|
LightboxMedia,
|
|
137
155
|
{
|
|
138
156
|
item,
|
|
@@ -161,20 +179,23 @@ import ResetZoomIcon from "@mui/icons-material/RestartAlt";
|
|
|
161
179
|
import ZoomInIcon from "@mui/icons-material/ZoomIn";
|
|
162
180
|
import ZoomOutIcon from "@mui/icons-material/ZoomOut";
|
|
163
181
|
import { Box, IconButton } from "@mui/material";
|
|
164
|
-
import { Fragment, jsx as
|
|
182
|
+
import { Fragment, jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
165
183
|
var LightboxCloseButton = ({
|
|
166
184
|
testId,
|
|
167
185
|
onClose
|
|
168
|
-
}) =>
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
)
|
|
186
|
+
}) => {
|
|
187
|
+
const copy = useLightboxCopy();
|
|
188
|
+
return /* @__PURE__ */ jsx4(
|
|
189
|
+
IconButton,
|
|
190
|
+
{
|
|
191
|
+
onClick: onClose,
|
|
192
|
+
sx: { ...overlayButtonSx, position: "absolute", top: 16, right: 16, zIndex: OVERLAY_Z_INDEX },
|
|
193
|
+
"aria-label": copy.close,
|
|
194
|
+
"data-testid": testId("close"),
|
|
195
|
+
children: /* @__PURE__ */ jsx4(CloseIcon, {})
|
|
196
|
+
}
|
|
197
|
+
);
|
|
198
|
+
};
|
|
178
199
|
var arrowSx = (side) => ({
|
|
179
200
|
...navButtonSx,
|
|
180
201
|
position: "absolute",
|
|
@@ -189,97 +210,106 @@ var LightboxNavButtons = ({
|
|
|
189
210
|
atEnd,
|
|
190
211
|
onPrev,
|
|
191
212
|
onNext
|
|
192
|
-
}) =>
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
213
|
+
}) => {
|
|
214
|
+
const copy = useLightboxCopy();
|
|
215
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
216
|
+
/* @__PURE__ */ jsx4(
|
|
217
|
+
IconButton,
|
|
218
|
+
{
|
|
219
|
+
onClick: onPrev,
|
|
220
|
+
disabled: atStart,
|
|
221
|
+
sx: arrowSx("left"),
|
|
222
|
+
"aria-label": copy.previous,
|
|
223
|
+
"data-testid": testId("prev"),
|
|
224
|
+
children: /* @__PURE__ */ jsx4(PrevIcon, {})
|
|
225
|
+
}
|
|
226
|
+
),
|
|
227
|
+
/* @__PURE__ */ jsx4(
|
|
228
|
+
IconButton,
|
|
229
|
+
{
|
|
230
|
+
onClick: onNext,
|
|
231
|
+
disabled: atEnd,
|
|
232
|
+
sx: arrowSx("right"),
|
|
233
|
+
"aria-label": copy.next,
|
|
234
|
+
"data-testid": testId("next"),
|
|
235
|
+
children: /* @__PURE__ */ jsx4(NextIcon, {})
|
|
236
|
+
}
|
|
237
|
+
)
|
|
238
|
+
] });
|
|
239
|
+
};
|
|
216
240
|
var LightboxZoomControls = ({
|
|
217
241
|
testId,
|
|
218
242
|
onZoomIn,
|
|
219
243
|
onZoomOut,
|
|
220
244
|
onResetZoom
|
|
221
|
-
}) =>
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
IconButton,
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
245
|
+
}) => {
|
|
246
|
+
const copy = useLightboxCopy();
|
|
247
|
+
return /* @__PURE__ */ jsxs(
|
|
248
|
+
Box,
|
|
249
|
+
{
|
|
250
|
+
sx: {
|
|
251
|
+
position: "absolute",
|
|
252
|
+
top: 16,
|
|
253
|
+
left: 16,
|
|
254
|
+
display: "flex",
|
|
255
|
+
flexDirection: "column",
|
|
256
|
+
gap: 1,
|
|
257
|
+
zIndex: OVERLAY_Z_INDEX
|
|
258
|
+
},
|
|
259
|
+
"data-testid": testId("zoom-controls"),
|
|
260
|
+
children: [
|
|
261
|
+
/* @__PURE__ */ jsx4(IconButton, { onClick: onZoomIn, sx: overlayButtonSx, "aria-label": copy.zoomIn, "data-testid": testId("zoom-in"), children: /* @__PURE__ */ jsx4(ZoomInIcon, {}) }),
|
|
262
|
+
/* @__PURE__ */ jsx4(
|
|
263
|
+
IconButton,
|
|
264
|
+
{
|
|
265
|
+
onClick: onZoomOut,
|
|
266
|
+
sx: overlayButtonSx,
|
|
267
|
+
"aria-label": copy.zoomOut,
|
|
268
|
+
"data-testid": testId("zoom-out"),
|
|
269
|
+
children: /* @__PURE__ */ jsx4(ZoomOutIcon, {})
|
|
270
|
+
}
|
|
271
|
+
),
|
|
272
|
+
/* @__PURE__ */ jsx4(
|
|
273
|
+
IconButton,
|
|
274
|
+
{
|
|
275
|
+
onClick: onResetZoom,
|
|
276
|
+
sx: overlayButtonSx,
|
|
277
|
+
"aria-label": copy.resetZoom,
|
|
278
|
+
"data-testid": testId("zoom-reset"),
|
|
279
|
+
children: /* @__PURE__ */ jsx4(ResetZoomIcon, {})
|
|
280
|
+
}
|
|
281
|
+
)
|
|
282
|
+
]
|
|
283
|
+
}
|
|
284
|
+
);
|
|
285
|
+
};
|
|
259
286
|
var LightboxAutoplayButton = ({
|
|
260
287
|
testId,
|
|
261
288
|
isAutoPlaying,
|
|
262
289
|
onToggle
|
|
263
|
-
}) =>
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
)
|
|
290
|
+
}) => {
|
|
291
|
+
const copy = useLightboxCopy();
|
|
292
|
+
return /* @__PURE__ */ jsx4(
|
|
293
|
+
IconButton,
|
|
294
|
+
{
|
|
295
|
+
onClick: onToggle,
|
|
296
|
+
sx: {
|
|
297
|
+
...overlayButtonSx,
|
|
298
|
+
position: "absolute",
|
|
299
|
+
top: 16,
|
|
300
|
+
left: "50%",
|
|
301
|
+
transform: "translateX(-50%)",
|
|
302
|
+
zIndex: OVERLAY_Z_INDEX
|
|
303
|
+
},
|
|
304
|
+
"aria-label": isAutoPlaying ? copy.pause : copy.play,
|
|
305
|
+
"data-testid": testId("autoplay"),
|
|
306
|
+
children: isAutoPlaying ? /* @__PURE__ */ jsx4(PauseIcon, {}) : /* @__PURE__ */ jsx4(PlayIcon, {})
|
|
307
|
+
}
|
|
308
|
+
);
|
|
309
|
+
};
|
|
280
310
|
|
|
281
311
|
// src/components/data-display/Lightbox/LightboxOverlay.tsx
|
|
282
|
-
import { Fragment as Fragment2, jsx as
|
|
312
|
+
import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
283
313
|
var LightboxOverlay = ({
|
|
284
314
|
testId,
|
|
285
315
|
itemCount,
|
|
@@ -299,8 +329,8 @@ var LightboxOverlay = ({
|
|
|
299
329
|
}) => {
|
|
300
330
|
const hasMultiple = itemCount > 1;
|
|
301
331
|
return /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
|
302
|
-
/* @__PURE__ */
|
|
303
|
-
showControls && hasMultiple && /* @__PURE__ */
|
|
332
|
+
/* @__PURE__ */ jsx5(LightboxCloseButton, { testId, onClose }),
|
|
333
|
+
showControls && hasMultiple && /* @__PURE__ */ jsx5(
|
|
304
334
|
LightboxNavButtons,
|
|
305
335
|
{
|
|
306
336
|
testId,
|
|
@@ -310,7 +340,7 @@ var LightboxOverlay = ({
|
|
|
310
340
|
onNext
|
|
311
341
|
}
|
|
312
342
|
),
|
|
313
|
-
canZoom && /* @__PURE__ */
|
|
343
|
+
canZoom && /* @__PURE__ */ jsx5(
|
|
314
344
|
LightboxZoomControls,
|
|
315
345
|
{
|
|
316
346
|
testId,
|
|
@@ -319,7 +349,7 @@ var LightboxOverlay = ({
|
|
|
319
349
|
onResetZoom
|
|
320
350
|
}
|
|
321
351
|
),
|
|
322
|
-
autoplay && hasMultiple && /* @__PURE__ */
|
|
352
|
+
autoplay && hasMultiple && /* @__PURE__ */ jsx5(
|
|
323
353
|
LightboxAutoplayButton,
|
|
324
354
|
{
|
|
325
355
|
testId,
|
|
@@ -332,7 +362,7 @@ var LightboxOverlay = ({
|
|
|
332
362
|
|
|
333
363
|
// src/components/data-display/Lightbox/LightboxStage.tsx
|
|
334
364
|
import { Box as Box2, CircularProgress, DialogContent, Typography } from "@mui/material";
|
|
335
|
-
import { jsx as
|
|
365
|
+
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
336
366
|
var LightboxStage = ({
|
|
337
367
|
items,
|
|
338
368
|
currentItem,
|
|
@@ -357,14 +387,14 @@ var LightboxStage = ({
|
|
|
357
387
|
},
|
|
358
388
|
"data-testid": testId("content"),
|
|
359
389
|
children: [
|
|
360
|
-
isLoading && /* @__PURE__ */
|
|
390
|
+
isLoading && /* @__PURE__ */ jsx6(
|
|
361
391
|
CircularProgress,
|
|
362
392
|
{
|
|
363
393
|
sx: { position: "absolute", color: "white", zIndex: 999 },
|
|
364
394
|
"data-testid": testId("loading")
|
|
365
395
|
}
|
|
366
396
|
),
|
|
367
|
-
/* @__PURE__ */
|
|
397
|
+
/* @__PURE__ */ jsx6(
|
|
368
398
|
Box2,
|
|
369
399
|
{
|
|
370
400
|
sx: {
|
|
@@ -378,7 +408,7 @@ var LightboxStage = ({
|
|
|
378
408
|
children: media
|
|
379
409
|
}
|
|
380
410
|
),
|
|
381
|
-
showCaptions && currentItem?.caption && /* @__PURE__ */
|
|
411
|
+
showCaptions && currentItem?.caption && /* @__PURE__ */ jsx6(
|
|
382
412
|
Typography,
|
|
383
413
|
{
|
|
384
414
|
id: "lightbox-description",
|
|
@@ -417,10 +447,10 @@ var LightboxStage = ({
|
|
|
417
447
|
// src/components/data-display/Lightbox/LightboxThumbnails.tsx
|
|
418
448
|
import PlayIcon2 from "@mui/icons-material/PlayArrow";
|
|
419
449
|
import { Box as Box3 } from "@mui/material";
|
|
420
|
-
import { jsx as
|
|
450
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
421
451
|
var THUMB_WIDTH = 60;
|
|
422
452
|
var THUMB_HEIGHT = 40;
|
|
423
|
-
var VideoThumbnail = () => /* @__PURE__ */
|
|
453
|
+
var VideoThumbnail = () => /* @__PURE__ */ jsx7(
|
|
424
454
|
Box3,
|
|
425
455
|
{
|
|
426
456
|
sx: {
|
|
@@ -431,7 +461,7 @@ var VideoThumbnail = () => /* @__PURE__ */ jsx6(
|
|
|
431
461
|
alignItems: "center",
|
|
432
462
|
justifyContent: "center"
|
|
433
463
|
},
|
|
434
|
-
children: /* @__PURE__ */
|
|
464
|
+
children: /* @__PURE__ */ jsx7(PlayIcon2, { sx: { color: "white", fontSize: 16 } })
|
|
435
465
|
}
|
|
436
466
|
);
|
|
437
467
|
var LightboxThumbnails = ({
|
|
@@ -439,7 +469,7 @@ var LightboxThumbnails = ({
|
|
|
439
469
|
currentIndex,
|
|
440
470
|
testId,
|
|
441
471
|
onSelect
|
|
442
|
-
}) => /* @__PURE__ */
|
|
472
|
+
}) => /* @__PURE__ */ jsx7(
|
|
443
473
|
Box3,
|
|
444
474
|
{
|
|
445
475
|
sx: {
|
|
@@ -455,7 +485,7 @@ var LightboxThumbnails = ({
|
|
|
455
485
|
padding: 1
|
|
456
486
|
},
|
|
457
487
|
"data-testid": testId("thumbnails"),
|
|
458
|
-
children: items.map((item, index) => /* @__PURE__ */
|
|
488
|
+
children: items.map((item, index) => /* @__PURE__ */ jsx7(
|
|
459
489
|
Box3,
|
|
460
490
|
{
|
|
461
491
|
onClick: () => onSelect(index),
|
|
@@ -470,7 +500,7 @@ var LightboxThumbnails = ({
|
|
|
470
500
|
"&:hover": { border: "2px solid rgba(255, 255, 255, 0.7)" }
|
|
471
501
|
},
|
|
472
502
|
"data-testid": testId(`thumbnail-${index}`),
|
|
473
|
-
children: item.type === "video" ? /* @__PURE__ */
|
|
503
|
+
children: item.type === "video" ? /* @__PURE__ */ jsx7(VideoThumbnail, {}) : /* @__PURE__ */ jsx7(
|
|
474
504
|
"img",
|
|
475
505
|
{
|
|
476
506
|
src: item.src,
|
|
@@ -694,7 +724,7 @@ var useLightbox = ({ isOpen, onClose, items, startIndex, showControls, loop, aut
|
|
|
694
724
|
};
|
|
695
725
|
|
|
696
726
|
// src/components/data-display/Lightbox/Lightbox.tsx
|
|
697
|
-
import { jsx as
|
|
727
|
+
import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
698
728
|
var DIALOG_STATIC_PROPS = {
|
|
699
729
|
maxWidth: false,
|
|
700
730
|
fullScreen: true,
|
|
@@ -713,7 +743,7 @@ var Lightbox = React.forwardRef((componentProps, ref) => {
|
|
|
713
743
|
const testId = makeTestId(dataTestId);
|
|
714
744
|
const lightbox = useLightbox(props, ref);
|
|
715
745
|
const { currentIndex, currentItem, zoom } = lightbox;
|
|
716
|
-
return /* @__PURE__ */ jsxs4(
|
|
746
|
+
return /* @__PURE__ */ jsx8(LightboxCopyProvider, { copy: props.copy, children: /* @__PURE__ */ jsxs4(
|
|
717
747
|
Dialog,
|
|
718
748
|
{
|
|
719
749
|
open: isOpen,
|
|
@@ -729,7 +759,7 @@ var Lightbox = React.forwardRef((componentProps, ref) => {
|
|
|
729
759
|
"Lightbox - ",
|
|
730
760
|
currentItem?.alt || `Item ${currentIndex + 1} of ${items.length}`
|
|
731
761
|
] }),
|
|
732
|
-
/* @__PURE__ */
|
|
762
|
+
/* @__PURE__ */ jsx8(
|
|
733
763
|
LightboxOverlay,
|
|
734
764
|
{
|
|
735
765
|
testId,
|
|
@@ -749,7 +779,7 @@ var Lightbox = React.forwardRef((componentProps, ref) => {
|
|
|
749
779
|
onToggleAutoplay: () => lightbox.setIsAutoPlaying((playing) => !playing)
|
|
750
780
|
}
|
|
751
781
|
),
|
|
752
|
-
/* @__PURE__ */
|
|
782
|
+
/* @__PURE__ */ jsx8(
|
|
753
783
|
LightboxStage,
|
|
754
784
|
{
|
|
755
785
|
items,
|
|
@@ -759,7 +789,7 @@ var Lightbox = React.forwardRef((componentProps, ref) => {
|
|
|
759
789
|
showCaptions,
|
|
760
790
|
thumbnails,
|
|
761
791
|
testId,
|
|
762
|
-
media: /* @__PURE__ */
|
|
792
|
+
media: /* @__PURE__ */ jsx8(
|
|
763
793
|
LightboxCurrentMedia,
|
|
764
794
|
{
|
|
765
795
|
item: currentItem,
|
|
@@ -772,7 +802,7 @@ var Lightbox = React.forwardRef((componentProps, ref) => {
|
|
|
772
802
|
onWheel: lightbox.handleWheel
|
|
773
803
|
}
|
|
774
804
|
),
|
|
775
|
-
thumbnailStrip: thumbnails && items.length > 1 && /* @__PURE__ */
|
|
805
|
+
thumbnailStrip: thumbnails && items.length > 1 && /* @__PURE__ */ jsx8(
|
|
776
806
|
LightboxThumbnails,
|
|
777
807
|
{
|
|
778
808
|
items,
|
|
@@ -785,7 +815,7 @@ var Lightbox = React.forwardRef((componentProps, ref) => {
|
|
|
785
815
|
)
|
|
786
816
|
]
|
|
787
817
|
}
|
|
788
|
-
);
|
|
818
|
+
) });
|
|
789
819
|
});
|
|
790
820
|
Lightbox.displayName = "Lightbox";
|
|
791
821
|
var Lightbox_default = Lightbox;
|