@12-apps/ui 6.35.0 → 6.36.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/_internal/components/data-display/Alert/Alert.js +3 -3
- package/dist/_internal/components/data-display/Alert/Alert.styles.js +2 -2
- package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +2 -2
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +5 -5
- package/dist/_internal/components/data-display/Avatar/Avatar.animations.js +2 -1
- package/dist/_internal/components/data-display/Avatar/Avatar.js +4 -4
- package/dist/_internal/components/data-display/Avatar/Avatar.view.js +3 -3
- package/dist/_internal/components/data-display/Badge/Badge.animations.js +2 -1
- package/dist/_internal/components/data-display/Badge/Badge.js +6 -6
- package/dist/_internal/components/data-display/Badge/Badge.styles.js +4 -4
- package/dist/_internal/components/data-display/Badge/Badge.variants.js +2 -2
- package/dist/_internal/components/data-display/Badge/BadgeContent.js +5 -5
- package/dist/_internal/components/data-display/Banner/Banner.js +3 -3
- package/dist/_internal/components/data-display/Banner/Banner.styles.js +2 -2
- package/dist/_internal/components/data-display/CardKit/CardKebab.js +1 -1
- package/dist/_internal/components/data-display/CardKit/card-actions-context.js +4 -4
- package/dist/_internal/components/data-display/CardKit/list-card-parts.js +1 -1
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +10 -10
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +7 -7
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +3 -3
- package/dist/_internal/components/data-display/Carousel/Carousel.js +6 -6
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +2 -2
- package/dist/_internal/components/data-display/Carousel/Carousel.slide.js +2 -1
- package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +6 -4
- package/dist/_internal/components/data-display/Chart/Chart.js +7 -7
- package/dist/_internal/components/data-display/Chart/ChartComposables.js +2 -1
- package/dist/_internal/components/data-display/Chart/SpecChart.js +8 -8
- package/dist/_internal/components/data-display/Chart/chart-axis.js +2 -1
- package/dist/_internal/components/data-display/Chart/chart-context.js +4 -4
- package/dist/_internal/components/data-display/Chart/chart-internals.js +4 -2
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +6 -6
- package/dist/_internal/components/data-display/Chip/Chip.js +3 -2
- package/dist/_internal/components/data-display/Chip/Chip.styles.js +2 -1
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +3 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.states.js +2 -1
- package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +2 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +28 -28
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +40 -40
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +1 -1
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +7 -7
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-card.js +5 -5
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +7 -7
- package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +9 -9
- package/dist/_internal/components/data-display/DataViews/card-surface.js +3 -2
- package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-columns.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +2 -1
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-drag.js +2 -1
- package/dist/_internal/components/data-display/DataViews/data-views-empty.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-export.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-glyphs.js +2 -1
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +25 -25
- package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +2 -1
- package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-scopes.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-search.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +9 -9
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +12 -12
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +2 -2
- package/dist/_internal/components/data-display/DataViews/list-card-rails.js +1 -1
- package/dist/_internal/components/data-display/DataViews/save-view-preview.js +2 -2
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +5 -5
- package/dist/_internal/components/data-display/DateTimeDisplay/DateTimeDisplay.js +2 -1
- package/dist/_internal/components/data-display/DateTimeDisplay/index.js +2 -1
- package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +2 -2
- package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -1
- package/dist/_internal/components/data-display/ErrorState/ErrorState.js +1 -1
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +15 -15
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +13 -13
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +17 -17
- package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +2 -1
- package/dist/_internal/components/data-display/HoverCard/HoverCard.animations.js +2 -1
- package/dist/_internal/components/data-display/HoverCard/HoverCard.content.js +2 -1
- package/dist/_internal/components/data-display/HoverCard/HoverCard.js +5 -4
- package/dist/_internal/components/data-display/HoverCard/HoverCard.styles.js +3 -2
- package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.hooks.js +1 -1
- package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +4 -4
- package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.js +4 -2
- package/dist/_internal/components/data-display/LazyImage/LazyImage.hooks.js +2 -1
- package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -2
- package/dist/_internal/components/data-display/Lightbox/Lightbox.constants.js +4 -4
- package/dist/_internal/components/data-display/Lightbox/Lightbox.hooks.js +3 -3
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +9 -9
- package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +3 -3
- package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +4 -4
- package/dist/_internal/components/data-display/Lightbox/LightboxStage.js +3 -3
- package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +3 -3
- package/dist/_internal/components/data-display/Lightbox/useLightbox.js +4 -4
- package/dist/_internal/components/data-display/LoadingState/LoadingState.js +2 -1
- package/dist/_internal/components/data-display/MapPreview/MapControlBar.js +2 -1
- package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +5 -4
- package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapOverlays.js +1 -1
- package/dist/_internal/components/data-display/MapPreview/MapPreview.helpers.js +2 -1
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +12 -12
- package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +2 -1
- package/dist/_internal/components/data-display/MapPreview/MapTiles.js +3 -2
- package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +5 -5
- package/dist/_internal/components/data-display/MapPreview/mapSurface.js +4 -3
- package/dist/_internal/components/data-display/Popover/Popover.js +2 -1
- package/dist/_internal/components/data-display/Progress/Progress.js +3 -3
- package/dist/_internal/components/data-display/Progress/Progress.styles.js +2 -2
- package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +4 -4
- package/dist/_internal/components/data-display/Sheet/Sheet.animations.js +2 -1
- package/dist/_internal/components/data-display/Sheet/Sheet.body.js +4 -4
- package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +3 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.js +7 -7
- package/dist/_internal/components/data-display/Sheet/Sheet.parts.js +3 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +3 -3
- package/dist/_internal/components/data-display/StatCard/StatCard.js +2 -2
- package/dist/_internal/components/data-display/Stepper/Stepper.js +2 -2
- package/dist/_internal/components/data-display/Table/Table.js +2 -2
- package/dist/_internal/components/data-display/Table/Table.styles.js +1 -1
- package/dist/_internal/components/data-display/Timeline/Timeline.js +3 -3
- package/dist/_internal/components/data-display/Timeline/TimelineRow.js +2 -2
- package/dist/_internal/components/data-display/TimingDiagram/TimingDiagram.js +3 -3
- package/dist/_internal/components/data-display/TimingDiagram/TimingDiagram.views.js +2 -2
- package/dist/_internal/components/data-display/Tooltip/Tooltip.js +2 -2
- package/dist/_internal/components/data-display/index.js +87 -87
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +4 -4
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +3 -3
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +5 -5
- package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +4 -4
- package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +4 -4
- package/dist/_internal/components/feedback/Sonner/Sonner.js +1 -1
- package/dist/_internal/components/feedback/Sonner/SonnerToast.js +1 -1
- package/dist/_internal/components/feedback/index.js +9 -9
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +1 -1
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +1 -1
- package/dist/_internal/components/form/Button/Button.js +1 -1
- package/dist/_internal/components/form/Button/Button.styles.js +1 -1
- package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +1 -1
- package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +1 -1
- package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +1 -1
- package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +1 -1
- package/dist/_internal/components/form/CategorySelect/CategoryRows.js +1 -1
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +1 -1
- package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +1 -1
- package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +1 -1
- package/dist/_internal/components/form/CepField/CepField.js +1 -1
- package/dist/_internal/components/form/Checkbox/Checkbox.js +1 -1
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +1 -1
- package/dist/_internal/components/form/Command/Command.js +1 -1
- package/dist/_internal/components/form/Command/Command.styles.js +1 -1
- package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +1 -1
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +4 -3
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +6 -6
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +3 -2
- package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +4 -3
- package/dist/_internal/components/form/InputOTP/InputOTP.js +1 -1
- package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +1 -1
- package/dist/_internal/components/form/Label/Label.js +1 -1
- package/dist/_internal/components/form/Label/Label.styles.js +1 -1
- package/dist/_internal/components/form/Menubar/Menubar.item.js +1 -1
- package/dist/_internal/components/form/Menubar/Menubar.js +1 -1
- package/dist/_internal/components/form/Menubar/Menubar.styles.js +1 -1
- package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +1 -1
- package/dist/_internal/components/form/PhoneInput/PhoneInput.js +1 -1
- package/dist/_internal/components/form/RadioGroup/RadioGroup.js +1 -1
- package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +1 -1
- package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +1 -1
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +1 -1
- package/dist/_internal/components/form/Slider/Slider.js +1 -1
- package/dist/_internal/components/form/Slider/Slider.styles.js +1 -1
- package/dist/_internal/components/form/Switch/Switch.js +1 -1
- package/dist/_internal/components/form/Switch/Switch.parts.js +1 -1
- package/dist/_internal/components/form/Switch/Switch.styles.js +1 -1
- package/dist/_internal/components/form/Textarea/Textarea.js +2 -2
- package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +2 -2
- package/dist/_internal/components/form/Toggle/Toggle.js +1 -1
- package/dist/_internal/components/form/Toggle/Toggle.styles.js +1 -1
- package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +1 -1
- package/dist/_internal/components/form/index.js +7 -7
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +1 -1
- package/dist/_internal/components/form/total-form/Fields/CepField.js +1 -1
- package/dist/_internal/components/form/total-form/Fields/SelectField.js +1 -1
- package/dist/_internal/components/form/total-form/Fields/TextField.js +1 -1
- package/dist/_internal/components/form/total-form/Fields/ToggleField.js +1 -1
- package/dist/_internal/components/form/total-form/Fields/index.js +1 -1
- package/dist/_internal/components/form/total-form/SubmitButton.js +1 -1
- package/dist/_internal/components/index.js +108 -108
- package/dist/_internal/components/layout/Box/Box.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +1 -1
- package/dist/_internal/components/layout/Stack/Stack.js +1 -1
- package/dist/_internal/components/layout/TableFilter/TableFilter.js +1 -1
- package/dist/_internal/components/layout/index.js +1 -1
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +8 -8
- package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +1 -1
- package/dist/_internal/components/navigation/Breadcrumbs/BreadcrumbEntry.js +3 -3
- package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +4 -4
- package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.styles.js +2 -2
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +1 -1
- package/dist/_internal/components/navigation/ContextMenu/ContextMenu.js +1 -1
- package/dist/_internal/components/navigation/DropdownMenu/DropdownMenu.js +1 -1
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +5 -5
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +7 -7
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.shell.js +3 -3
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.styles.js +2 -2
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +3 -3
- package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +5 -5
- package/dist/_internal/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/_internal/components/navigation/index.js +17 -17
- package/dist/_internal/components/typography/Blockquote/Blockquote.js +1 -1
- package/dist/_internal/components/typography/Code/Code.js +1 -1
- package/dist/_internal/components/typography/Text/Text.js +1 -1
- package/dist/_internal/components/typography/index.js +1 -1
- package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +1 -1
- package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.styles.js +1 -1
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +1 -1
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +1 -1
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +1 -1
- package/dist/_internal/components/utility/index.js +1 -1
- package/dist/_internal/icons/Icon.js +1 -1
- package/dist/_internal/provider/UiProvider.js +1 -1
- package/dist/_internal/provider/mui-bridge.js +1 -1
- package/dist/_internal/provider/use-ui-theme.js +1 -1
- package/dist/_internal/social-login-button/social-login-button.js +1 -1
- package/dist/_internal/user-avatar/user-avatar.js +5 -5
- package/dist/charts.js +8 -8
- package/dist/{chunk-BNU4RLEC.js → chunk-2FM5SUQV.js} +8 -4
- package/dist/chunk-2FM5SUQV.js.map +1 -0
- package/dist/{chunk-APT5L7V5.js → chunk-2LIRGFEK.js} +2 -2
- package/dist/{chunk-LDDN254Q.js → chunk-2UCLUDEB.js} +2 -2
- package/dist/{chunk-6SYFPRTT.js → chunk-343OLRFT.js} +2 -2
- package/dist/{chunk-VDGJV7MP.js → chunk-3AQD2EA6.js} +9 -9
- package/dist/chunk-3AQD2EA6.js.map +1 -0
- package/dist/{chunk-3GQ6PNEM.js → chunk-3GTMGPNQ.js} +20 -5
- package/dist/chunk-3GTMGPNQ.js.map +1 -0
- package/dist/{chunk-TFZI36UD.js → chunk-3KA6MYIR.js} +4 -3
- package/dist/chunk-3KA6MYIR.js.map +1 -0
- package/dist/{chunk-5VWYCVXF.js → chunk-3U3H3BZM.js} +6 -3
- package/dist/chunk-3U3H3BZM.js.map +1 -0
- package/dist/{chunk-H2YBVBPW.js → chunk-3UIDKLML.js} +15 -11
- package/dist/chunk-3UIDKLML.js.map +1 -0
- package/dist/{chunk-M5BTIIL7.js → chunk-4CHROSWR.js} +15 -14
- package/dist/chunk-4CHROSWR.js.map +1 -0
- package/dist/{chunk-VR3U4QA5.js → chunk-4CTLEUK3.js} +6 -5
- package/dist/chunk-4CTLEUK3.js.map +1 -0
- package/dist/{chunk-ACZH2NUW.js → chunk-4NQXHPQR.js} +6 -4
- package/dist/chunk-4NQXHPQR.js.map +1 -0
- package/dist/{chunk-QTWXVOPT.js → chunk-4OW4O4A2.js} +17 -11
- package/dist/chunk-4OW4O4A2.js.map +1 -0
- package/dist/{chunk-U2IRCTAR.js → chunk-4WCDMCIS.js} +2 -2
- package/dist/{chunk-2F4YEGYG.js → chunk-57FZM6GH.js} +5 -2
- package/dist/chunk-57FZM6GH.js.map +1 -0
- package/dist/{chunk-E6YBXAZN.js → chunk-5IAVC4BT.js} +6 -6
- package/dist/chunk-5IAVC4BT.js.map +1 -0
- package/dist/{chunk-OGTTJKHI.js → chunk-5QWQR7XT.js} +4 -4
- package/dist/{chunk-DRE6DSJ7.js → chunk-5TJRJSJY.js} +3 -3
- package/dist/{chunk-5ZQUJ7LT.js → chunk-5UTAEHSB.js} +5 -2
- package/dist/chunk-5UTAEHSB.js.map +1 -0
- package/dist/{chunk-XZBCPL4N.js → chunk-5W4BLTDI.js} +2 -2
- package/dist/{chunk-Z35J5B6D.js → chunk-62UAI62O.js} +9 -8
- package/dist/chunk-62UAI62O.js.map +1 -0
- package/dist/{chunk-YG2VQUZO.js → chunk-6BDYC4RA.js} +3 -3
- package/dist/{chunk-QHUTSAFG.js → chunk-6CTPDNNX.js} +4 -4
- package/dist/{chunk-CU4TF7C7.js → chunk-6GRZ77IS.js} +4 -4
- package/dist/{chunk-YLBRXDYH.js → chunk-7EIOXZWL.js} +2 -2
- package/dist/{chunk-BD2GGIGS.js → chunk-ADHMNIWS.js} +9 -5
- package/dist/chunk-ADHMNIWS.js.map +1 -0
- package/dist/{chunk-Y2E73IG2.js → chunk-AJ5SDHX5.js} +4 -4
- package/dist/chunk-AJ5SDHX5.js.map +1 -0
- package/dist/{chunk-ZHEZISMI.js → chunk-AK2HOD6B.js} +2 -2
- package/dist/{chunk-2PWVPTS3.js → chunk-AUHYR7ID.js} +11 -9
- package/dist/chunk-AUHYR7ID.js.map +1 -0
- package/dist/{chunk-QWHURFJ3.js → chunk-B2VXP2B2.js} +6 -3
- package/dist/chunk-B2VXP2B2.js.map +1 -0
- package/dist/{chunk-YSKGLU2V.js → chunk-B7BNNSM2.js} +8 -5
- package/dist/chunk-B7BNNSM2.js.map +1 -0
- package/dist/{chunk-7ZWC5CKA.js → chunk-BAFDSAWY.js} +10 -9
- package/dist/chunk-BAFDSAWY.js.map +1 -0
- package/dist/{chunk-VZAGBDZ2.js → chunk-BJZOBG24.js} +2 -2
- package/dist/{chunk-YDPUBGJ7.js → chunk-BNEWMFVB.js} +10 -6
- package/dist/chunk-BNEWMFVB.js.map +1 -0
- package/dist/{chunk-ZUQIOWLN.js → chunk-BSYPPO2I.js} +42 -38
- package/dist/chunk-BSYPPO2I.js.map +1 -0
- package/dist/{chunk-NXX3ZQKO.js → chunk-BYH5GPLT.js} +25 -20
- package/dist/chunk-BYH5GPLT.js.map +1 -0
- package/dist/{chunk-CS3RKXT5.js → chunk-CHFHILTM.js} +2 -2
- package/dist/{chunk-DMYBTD5Y.js → chunk-CPWWMGYR.js} +2 -2
- package/dist/{chunk-L4V2LRKH.js → chunk-CSN3F36H.js} +13 -8
- package/dist/chunk-CSN3F36H.js.map +1 -0
- package/dist/{chunk-XSMMFCMQ.js → chunk-CWDV64TD.js} +3 -3
- package/dist/{chunk-IUCTYNIR.js → chunk-CX66M55F.js} +18 -17
- package/dist/chunk-CX66M55F.js.map +1 -0
- package/dist/{chunk-PGNJCUDA.js → chunk-CZBND7AY.js} +38 -21
- package/dist/chunk-CZBND7AY.js.map +1 -0
- package/dist/{chunk-73HBIIRB.js → chunk-D2UDM2SU.js} +12 -8
- package/dist/chunk-D2UDM2SU.js.map +1 -0
- package/dist/{chunk-YU647YW4.js → chunk-DB2ZFZVW.js} +7 -4
- package/dist/chunk-DB2ZFZVW.js.map +1 -0
- package/dist/{chunk-GUVBR62X.js → chunk-DCJSHYE5.js} +4 -4
- package/dist/{chunk-VV7MGILP.js → chunk-DMWSXWCZ.js} +3 -3
- package/dist/{chunk-JYRQBZEV.js → chunk-DVAAUWTC.js} +2 -2
- package/dist/{chunk-C6NI3FAV.js → chunk-DVGBFT6O.js} +2 -2
- package/dist/{chunk-5RP3KXC7.js → chunk-DY4BP5WA.js} +7 -6
- package/dist/chunk-DY4BP5WA.js.map +1 -0
- package/dist/{chunk-W5ENK5CM.js → chunk-DZNMS2SH.js} +5 -5
- package/dist/{chunk-QO6QWBDI.js → chunk-E4TNDTWV.js} +7 -4
- package/dist/chunk-E4TNDTWV.js.map +1 -0
- package/dist/{chunk-IFSUKWE7.js → chunk-E7T3A4IR.js} +10 -6
- package/dist/chunk-E7T3A4IR.js.map +1 -0
- package/dist/{chunk-I6EVBLFX.js → chunk-EA2UNEL6.js} +20 -11
- package/dist/chunk-EA2UNEL6.js.map +1 -0
- package/dist/{chunk-5E3XZAED.js → chunk-EARWC6PD.js} +6 -2
- package/dist/chunk-EARWC6PD.js.map +1 -0
- package/dist/{chunk-NVNZFT5X.js → chunk-EIYTS5VZ.js} +23 -22
- package/dist/chunk-EIYTS5VZ.js.map +1 -0
- package/dist/{chunk-GN5EZPSL.js → chunk-EJYJLVPK.js} +37 -29
- package/dist/chunk-EJYJLVPK.js.map +1 -0
- package/dist/{chunk-F5KEWLZK.js → chunk-FC7NQ6XM.js} +4 -4
- package/dist/{chunk-MISZGWO7.js → chunk-FPVYD7BO.js} +13 -9
- package/dist/chunk-FPVYD7BO.js.map +1 -0
- package/dist/{chunk-NIS523UM.js → chunk-FWPFCK4D.js} +2 -2
- package/dist/{chunk-7VJH4FYU.js → chunk-FZ4YTEP2.js} +5 -5
- package/dist/chunk-FZ4YTEP2.js.map +1 -0
- package/dist/{chunk-UCTJJYVC.js → chunk-G4HBNILE.js} +2 -2
- package/dist/{chunk-2B76FIMN.js → chunk-GHTBUJ6E.js} +5 -3
- package/dist/chunk-GHTBUJ6E.js.map +1 -0
- package/dist/{chunk-5NFPO3YY.js → chunk-GJRKWDRR.js} +9 -4
- package/dist/chunk-GJRKWDRR.js.map +1 -0
- package/dist/{chunk-VDZQJBAV.js → chunk-GY4NBSCN.js} +5 -2
- package/dist/chunk-GY4NBSCN.js.map +1 -0
- package/dist/{chunk-57IB5NTM.js → chunk-HB7ISSLK.js} +2 -2
- package/dist/{chunk-WR7ELCIL.js → chunk-HCT5ELST.js} +9 -3
- package/dist/chunk-HCT5ELST.js.map +1 -0
- package/dist/{chunk-6Q5GZUQ5.js → chunk-HGMBY5LP.js} +2 -2
- package/dist/{chunk-2AKQPXSJ.js → chunk-HJPPNVCF.js} +2 -2
- package/dist/{chunk-MZMGQKT3.js → chunk-HN3PZTUK.js} +10 -6
- package/dist/chunk-HN3PZTUK.js.map +1 -0
- package/dist/{chunk-JOR6E23V.js → chunk-IGGXKT5B.js} +3 -3
- package/dist/{chunk-F52N6ACD.js → chunk-IM4DMKH4.js} +14 -9
- package/dist/chunk-IM4DMKH4.js.map +1 -0
- package/dist/{chunk-KLMP2BYC.js → chunk-IVJKILIX.js} +2 -2
- package/dist/{chunk-X7PVFAYJ.js → chunk-JGRE56GQ.js} +6 -3
- package/dist/chunk-JGRE56GQ.js.map +1 -0
- package/dist/{chunk-MRB6GROF.js → chunk-JJJM75XF.js} +12 -12
- package/dist/chunk-JJJM75XF.js.map +1 -0
- package/dist/{chunk-HJWOB62A.js → chunk-JJSZP3TW.js} +4 -4
- package/dist/{chunk-AI7NVWIG.js → chunk-JOKWTRWL.js} +2 -2
- package/dist/{chunk-AI7NVWIG.js.map → chunk-JOKWTRWL.js.map} +1 -1
- package/dist/{chunk-JCJGJX7V.js → chunk-K4EKTMTC.js} +10 -6
- package/dist/chunk-K4EKTMTC.js.map +1 -0
- package/dist/{chunk-UCA47HM7.js → chunk-KCAW6HRO.js} +2 -2
- package/dist/{chunk-7HFGVT3G.js → chunk-KJDBY2KN.js} +31 -27
- package/dist/chunk-KJDBY2KN.js.map +1 -0
- package/dist/{chunk-LOJK733T.js → chunk-KJK2Q35C.js} +9 -5
- package/dist/chunk-KJK2Q35C.js.map +1 -0
- package/dist/{chunk-VAGHW3K2.js → chunk-KREWQAEV.js} +9 -4
- package/dist/chunk-KREWQAEV.js.map +1 -0
- package/dist/{chunk-KE5MX4PI.js → chunk-L3B36HA5.js} +2 -2
- package/dist/{chunk-OLZTGVBT.js → chunk-LYVTJLCF.js} +2 -2
- package/dist/{chunk-4M34ALEP.js → chunk-M3MHYE2M.js} +7 -8
- package/dist/chunk-M3MHYE2M.js.map +1 -0
- package/dist/{chunk-2WGMMFGV.js → chunk-M5ZXL52T.js} +15 -14
- package/dist/chunk-M5ZXL52T.js.map +1 -0
- package/dist/{chunk-C6FRVGMC.js → chunk-M6PWPEAV.js} +10 -7
- package/dist/chunk-M6PWPEAV.js.map +1 -0
- package/dist/{chunk-WW4N2LRM.js → chunk-MBC55H6M.js} +4 -4
- package/dist/{chunk-AATIHNPI.js → chunk-MK4CH4VT.js} +2 -2
- package/dist/{chunk-RV4Y4O67.js → chunk-MLQYIJTO.js} +6 -5
- package/dist/chunk-MLQYIJTO.js.map +1 -0
- package/dist/{chunk-A2CTAEIS.js → chunk-MO47Y26B.js} +24 -23
- package/dist/chunk-MO47Y26B.js.map +1 -0
- package/dist/{chunk-XRMZMBE3.js → chunk-MTEQEPNY.js} +7 -3
- package/dist/chunk-MTEQEPNY.js.map +1 -0
- package/dist/{chunk-JWK4GI2I.js → chunk-N2GEKC4J.js} +32 -20
- package/dist/chunk-N2GEKC4J.js.map +1 -0
- package/dist/{chunk-AJSPLHG4.js → chunk-NNQCWXGY.js} +8 -5
- package/dist/chunk-NNQCWXGY.js.map +1 -0
- package/dist/{chunk-IDO4EV7T.js → chunk-NR5TW4AH.js} +3 -3
- package/dist/{chunk-O26MKGIC.js → chunk-NRIV2CQ2.js} +12 -6
- package/dist/chunk-NRIV2CQ2.js.map +1 -0
- package/dist/{chunk-6DC5SVHM.js → chunk-NSKQANRY.js} +2 -2
- package/dist/{chunk-24NXQG5F.js → chunk-ODFJTEIL.js} +11 -10
- package/dist/chunk-ODFJTEIL.js.map +1 -0
- package/dist/{chunk-MLBKACV6.js → chunk-OG6LYQ7C.js} +13 -11
- package/dist/chunk-OG6LYQ7C.js.map +1 -0
- package/dist/{chunk-H6YVO55T.js → chunk-OHZU4IT3.js} +17 -13
- package/dist/chunk-OHZU4IT3.js.map +1 -0
- package/dist/{chunk-EAE5Z5HL.js → chunk-OJ2XR3WH.js} +2 -2
- package/dist/{chunk-BR7RM3WR.js → chunk-OZPLAOI4.js} +2 -2
- package/dist/{chunk-DZHN5FFX.js → chunk-PBMCRDZI.js} +7 -6
- package/dist/chunk-PBMCRDZI.js.map +1 -0
- package/dist/{chunk-ZXSUWFQX.js → chunk-PGPPN63I.js} +8 -5
- package/dist/chunk-PGPPN63I.js.map +1 -0
- package/dist/{chunk-ZWSS3K4F.js → chunk-PL2AB5HJ.js} +11 -6
- package/dist/chunk-PL2AB5HJ.js.map +1 -0
- package/dist/{chunk-ZTKLKOOO.js → chunk-POV2KL2P.js} +21 -20
- package/dist/chunk-POV2KL2P.js.map +1 -0
- package/dist/{chunk-GIRRCEVH.js → chunk-PT2XADGH.js} +4 -4
- package/dist/{chunk-5ZTQTJAJ.js → chunk-PWF32ILG.js} +4 -4
- package/dist/{chunk-65YAR3OZ.js → chunk-Q2YNXJEL.js} +11 -7
- package/dist/chunk-Q2YNXJEL.js.map +1 -0
- package/dist/{chunk-DBCITC4P.js → chunk-QB3TVUPD.js} +6 -6
- package/dist/{chunk-I2CRLUS7.js → chunk-QIKPGMMO.js} +2 -2
- package/dist/{chunk-MXZ43UCQ.js → chunk-QOLIBVGS.js} +3 -3
- package/dist/{chunk-TPQVLBTY.js → chunk-R2WMSXQR.js} +3 -3
- package/dist/{chunk-ULIM42PE.js → chunk-RIF6L54B.js} +10 -8
- package/dist/chunk-RIF6L54B.js.map +1 -0
- package/dist/{chunk-M5T3COS2.js → chunk-RIRTW5EU.js} +17 -5
- package/dist/chunk-RIRTW5EU.js.map +1 -0
- package/dist/{chunk-JHEGDDZQ.js → chunk-RKI3MRKX.js} +6 -3
- package/dist/chunk-RKI3MRKX.js.map +1 -0
- package/dist/{chunk-SYNMQWT4.js → chunk-RL2UIC4E.js} +7 -4
- package/dist/chunk-RL2UIC4E.js.map +1 -0
- package/dist/{chunk-RORP6DWR.js → chunk-RZ2C5CAW.js} +13 -12
- package/dist/chunk-RZ2C5CAW.js.map +1 -0
- package/dist/{chunk-UO7ERXYX.js → chunk-S3D5VBHW.js} +16 -6
- package/dist/chunk-S3D5VBHW.js.map +1 -0
- package/dist/{chunk-SCRN2RE4.js → chunk-S5UY5U73.js} +1 -2
- package/dist/chunk-S5UY5U73.js.map +1 -0
- package/dist/{chunk-4V532JF6.js → chunk-SOHQPPYJ.js} +8 -6
- package/dist/chunk-SOHQPPYJ.js.map +1 -0
- package/dist/{chunk-XREYLKUX.js → chunk-SQYC57ZN.js} +12 -11
- package/dist/chunk-SQYC57ZN.js.map +1 -0
- package/dist/{chunk-F7HQVKIR.js → chunk-SYVNWXVW.js} +4 -4
- package/dist/{chunk-CMTR3WEA.js → chunk-TNQDSTIA.js} +30 -33
- package/dist/chunk-TNQDSTIA.js.map +1 -0
- package/dist/{chunk-MGC4QOMP.js → chunk-TQ2557I5.js} +1 -1
- package/dist/{chunk-C7TCBAVX.js → chunk-TQBRWZA4.js} +2 -2
- package/dist/{chunk-56QVP2MU.js → chunk-TQCQCW2P.js} +18 -11
- package/dist/chunk-TQCQCW2P.js.map +1 -0
- package/dist/{chunk-CZT3AV7I.js → chunk-TRHWA74K.js} +6 -3
- package/dist/chunk-TRHWA74K.js.map +1 -0
- package/dist/{chunk-EDO2WS5B.js → chunk-TXGB2WSW.js} +7 -4
- package/dist/chunk-TXGB2WSW.js.map +1 -0
- package/dist/{chunk-NNQLDFKG.js → chunk-TYBZ4XZZ.js} +15 -9
- package/dist/chunk-TYBZ4XZZ.js.map +1 -0
- package/dist/{chunk-TEUX42YW.js → chunk-TZASFX6G.js} +10 -7
- package/dist/chunk-TZASFX6G.js.map +1 -0
- package/dist/{chunk-BO2SDMNQ.js → chunk-U4QUDFPJ.js} +2 -2
- package/dist/{chunk-AQSX3YH2.js → chunk-UL7L6MFT.js} +18 -10
- package/dist/chunk-UL7L6MFT.js.map +1 -0
- package/dist/{chunk-SKX4NA6E.js → chunk-V74PXUQN.js} +8 -8
- package/dist/{chunk-A2DYU5WN.js → chunk-VIUDWOV6.js} +5 -6
- package/dist/chunk-VIUDWOV6.js.map +1 -0
- package/dist/{chunk-5ZT4ZIZB.js → chunk-VNOFFVRQ.js} +6 -3
- package/dist/chunk-VNOFFVRQ.js.map +1 -0
- package/dist/{chunk-UMP5MQ7X.js → chunk-WFAJTO2B.js} +27 -26
- package/dist/chunk-WFAJTO2B.js.map +1 -0
- package/dist/{chunk-OYP27CYE.js → chunk-WOAXKWAB.js} +2 -2
- package/dist/{chunk-W3CLJ7JE.js → chunk-WPA26LXA.js} +4 -4
- package/dist/{chunk-2X5OQDPH.js → chunk-WRCLYSTX.js} +7 -4
- package/dist/chunk-WRCLYSTX.js.map +1 -0
- package/dist/{chunk-X4PS3E3V.js → chunk-X6AIKCAV.js} +8 -5
- package/dist/chunk-X6AIKCAV.js.map +1 -0
- package/dist/{chunk-KTYZRAB7.js → chunk-XJPJ6ESI.js} +9 -6
- package/dist/chunk-XJPJ6ESI.js.map +1 -0
- package/dist/{chunk-GVLMG5WQ.js → chunk-XZW2U6KR.js} +9 -9
- package/dist/chunk-XZW2U6KR.js.map +1 -0
- package/dist/{chunk-LI6OLYUB.js → chunk-YBTC4XNO.js} +2 -2
- package/dist/chunk-YLGY3D52.js +62 -0
- package/dist/chunk-YLGY3D52.js.map +1 -0
- package/dist/{chunk-H3B5PIM3.js → chunk-YYVB7IWQ.js} +19 -11
- package/dist/chunk-YYVB7IWQ.js.map +1 -0
- package/dist/{chunk-OOSD7363.js → chunk-ZAFFKQQU.js} +6 -6
- package/dist/chunk-ZAFFKQQU.js.map +1 -0
- package/dist/{chunk-IT7ATXU7.js → chunk-ZHV7TCAC.js} +15 -11
- package/dist/chunk-ZHV7TCAC.js.map +1 -0
- package/dist/{chunk-KUVOMH5I.js → chunk-ZZ4MMUBY.js} +5 -4
- package/dist/chunk-ZZ4MMUBY.js.map +1 -0
- package/dist/data-display/Alert.js +3 -3
- package/dist/data-display/AlertDialog.js +2 -2
- package/dist/data-display/AsyncStateContainer.js +5 -5
- package/dist/data-display/Avatar.js +4 -4
- package/dist/data-display/Badge.js +6 -6
- package/dist/data-display/Banner.js +3 -3
- package/dist/data-display/CardKit.js +12 -12
- package/dist/data-display/Carousel.js +6 -6
- package/dist/data-display/Chart.js +8 -8
- package/dist/data-display/Chip.js +3 -2
- package/dist/data-display/DataGrid.js +3 -2
- package/dist/data-display/DataViews.js +49 -49
- package/dist/data-display/DescriptionItem.js +2 -2
- package/dist/data-display/EmptyState.js +2 -1
- package/dist/data-display/ErrorState.js +1 -1
- package/dist/data-display/FleetMap.js +17 -17
- package/dist/data-display/HoverCard.js +5 -4
- package/dist/data-display/InteractiveTooltip.js +4 -4
- package/dist/data-display/LazyImage.js +3 -2
- package/dist/data-display/Lightbox.js +9 -9
- package/dist/data-display/LoadingState.js +2 -1
- package/dist/data-display/MapPreview.js +12 -12
- package/dist/data-display/Popover.js +2 -1
- package/dist/data-display/Progress.js +3 -3
- package/dist/data-display/SectionOnboarding.js +4 -4
- package/dist/data-display/Sheet.js +7 -7
- package/dist/data-display/StatCard.js +2 -2
- package/dist/data-display/Stepper.js +2 -2
- package/dist/data-display/Table.js +2 -2
- package/dist/data-display/Timeline.js +3 -3
- package/dist/data-display/TimingDiagram.js +3 -3
- package/dist/data-display/Tooltip.js +2 -2
- package/dist/feedback/ConfirmAction.js +6 -6
- package/dist/feedback/NotificationStatusNotice.js +4 -4
- package/dist/feedback/Sonner.js +1 -1
- package/dist/form/AddressAutocomplete.js +1 -1
- package/dist/form/Button.js +1 -1
- package/dist/form/CategorySelect.js +1 -1
- package/dist/form/CepField.js +1 -1
- package/dist/form/Checkbox.js +1 -1
- package/dist/form/CodeEditor.js +1 -1
- package/dist/form/Command.js +1 -1
- package/dist/form/CreatableSelect.js +1 -1
- package/dist/form/DateRangePicker.js +6 -6
- package/dist/form/InputOTP.js +1 -1
- package/dist/form/Label.js +1 -1
- package/dist/form/Menubar.js +1 -1
- package/dist/form/PhoneInput.js +1 -1
- package/dist/form/RadioGroup.js +1 -1
- package/dist/form/RichTextEditor.js +1 -1
- package/dist/form/Slider.js +1 -1
- package/dist/form/Switch.js +1 -1
- package/dist/form/Textarea.js +2 -2
- package/dist/form/Toggle.js +1 -1
- package/dist/form/ToggleGroup.js +1 -1
- package/dist/form/total-form.js +1 -1
- package/dist/icons.js +1 -1
- package/dist/layout/Box.js +1 -1
- package/dist/layout/ContentToolbar.js +1 -1
- package/dist/layout/Stack.js +1 -1
- package/dist/layout/TableFilter.js +1 -1
- package/dist/navigation/AppHeader.js +8 -8
- package/dist/navigation/Breadcrumbs.js +4 -4
- package/dist/navigation/CommandPalette.js +1 -1
- package/dist/navigation/ContextMenu.js +1 -1
- package/dist/navigation/DropdownMenu.js +1 -1
- package/dist/navigation/NavigationMenu.js +7 -7
- package/dist/navigation/Pagination.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/social-login-button.js +1 -1
- package/dist/tokens.js +7 -7
- package/dist/types/components/data-display/Alert/Alert.styles.d.ts +4 -4
- package/dist/types/components/data-display/Alert/Alert.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/types/components/data-display/Avatar/Avatar.animations.d.ts +2 -1
- package/dist/types/components/data-display/Avatar/Avatar.animations.d.ts.map +1 -1
- package/dist/types/components/data-display/Avatar/Avatar.d.ts.map +1 -1
- package/dist/types/components/data-display/Avatar/Avatar.view.d.ts.map +1 -1
- package/dist/types/components/data-display/Badge/Badge.animations.d.ts +4 -3
- package/dist/types/components/data-display/Badge/Badge.animations.d.ts.map +1 -1
- package/dist/types/components/data-display/Badge/Badge.styles.d.ts +6 -5
- package/dist/types/components/data-display/Badge/Badge.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/Badge/BadgeContent.d.ts.map +1 -1
- package/dist/types/components/data-display/Banner/Banner.styles.d.ts +1 -1
- package/dist/types/components/data-display/Banner/Banner.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.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.slide.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.styles.d.ts +14 -2
- package/dist/types/components/data-display/Carousel/Carousel.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/Chart/ChartComposables.d.ts +3 -1
- package/dist/types/components/data-display/Chart/ChartComposables.d.ts.map +1 -1
- package/dist/types/components/data-display/Chart/chart-axis.d.ts +9 -3
- package/dist/types/components/data-display/Chart/chart-axis.d.ts.map +1 -1
- package/dist/types/components/data-display/Chart/chart-context.d.ts.map +1 -1
- package/dist/types/components/data-display/Chart/chart-internals.d.ts +5 -1
- package/dist/types/components/data-display/Chart/chart-internals.d.ts.map +1 -1
- package/dist/types/components/data-display/Chart/chart-renderers.d.ts.map +1 -1
- package/dist/types/components/data-display/Chip/Chip.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/DataGrid/DataGrid.states.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/DataViewsBoard.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/base-card.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/base-list-card-geometry.d.ts +21 -17
- package/dist/types/components/data-display/DataViews/base-list-card-geometry.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/base-list-card-gutters.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/base-list-card-slots.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/card-surface.d.ts +1 -1
- package/dist/types/components/data-display/DataViews/card-surface.d.ts.map +1 -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-display-panel.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-drag.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-empty.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-export.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-glyphs.d.ts +3 -2
- package/dist/types/components/data-display/DataViews/data-views-glyphs.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-grid-helpers.d.ts +2 -1
- package/dist/types/components/data-display/DataViews/data-views-grid-helpers.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-number-input.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-scopes.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-search.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/DataViews/save-view-preview.d.ts.map +1 -1
- package/dist/types/components/data-display/DateTimeDisplay/DateTimeDisplay.d.ts.map +1 -1
- package/dist/types/components/data-display/DescriptionItem/DescriptionItem.d.ts.map +1 -1
- package/dist/types/components/data-display/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/types/components/data-display/FleetMap/FleetBody.d.ts.map +1 -1
- package/dist/types/components/data-display/FleetMap/FleetMap.d.ts.map +1 -1
- package/dist/types/components/data-display/FleetMap/FleetRoster.d.ts.map +1 -1
- package/dist/types/components/data-display/HoverCard/HoverCard.animations.d.ts +6 -5
- package/dist/types/components/data-display/HoverCard/HoverCard.animations.d.ts.map +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.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.d.ts.map +1 -1
- package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.hooks.d.ts +1 -1
- package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.hooks.d.ts.map +1 -1
- package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.d.ts +6 -1
- package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/LazyImage/LazyImage.d.ts.map +1 -1
- package/dist/types/components/data-display/LazyImage/LazyImage.hooks.d.ts +1 -1
- package/dist/types/components/data-display/LazyImage/LazyImage.hooks.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.constants.d.ts +5 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.constants.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.hooks.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/LightboxStage.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/LightboxThumbnails.d.ts.map +1 -1
- package/dist/types/components/data-display/LoadingState/LoadingState.d.ts.map +1 -1
- 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/MapOverlays.d.ts +5 -2
- package/dist/types/components/data-display/MapPreview/MapOverlays.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapPreview.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapPreview.helpers.d.ts +1 -1
- package/dist/types/components/data-display/MapPreview/MapPreview.helpers.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapSearchBar.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/mapSurface.d.ts +2 -2
- package/dist/types/components/data-display/MapPreview/mapSurface.d.ts.map +1 -1
- package/dist/types/components/data-display/Popover/Popover.d.ts.map +1 -1
- package/dist/types/components/data-display/Progress/Progress.d.ts.map +1 -1
- package/dist/types/components/data-display/Progress/Progress.styles.d.ts +9 -7
- package/dist/types/components/data-display/Progress/Progress.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/Sheet/Sheet.animations.d.ts +4 -3
- package/dist/types/components/data-display/Sheet/Sheet.animations.d.ts.map +1 -1
- package/dist/types/components/data-display/Sheet/Sheet.body.d.ts.map +1 -1
- package/dist/types/components/data-display/Sheet/Sheet.parts.d.ts.map +1 -1
- package/dist/types/components/data-display/Sheet/Sheet.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/StatCard/StatCard.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.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/Timeline/Timeline.d.ts.map +1 -1
- package/dist/types/components/data-display/Timeline/TimelineRow.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.views.d.ts +2 -1
- package/dist/types/components/data-display/TimingDiagram/TimingDiagram.views.d.ts.map +1 -1
- package/dist/types/components/data-display/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/typography/Blockquote.js +1 -1
- package/dist/typography/Code.js +1 -1
- package/dist/typography/Text.js +1 -1
- package/dist/user-avatar.js +5 -5
- package/dist/utility/AnimatedIcon.js +1 -1
- package/dist/utility/WorkflowStep.js +1 -1
- package/package.json +1 -1
- package/src/components/data-display/Alert/Alert.styles.tsx +22 -21
- package/src/components/data-display/Alert/Alert.tsx +8 -8
- package/src/components/data-display/AlertDialog/AlertDialog.tsx +12 -10
- package/src/components/data-display/Avatar/Avatar.animations.ts +5 -2
- package/src/components/data-display/Avatar/Avatar.tsx +4 -3
- package/src/components/data-display/Avatar/Avatar.view.tsx +31 -37
- package/src/components/data-display/Badge/Badge.animations.ts +13 -10
- package/src/components/data-display/Badge/Badge.styles.ts +30 -40
- package/src/components/data-display/Badge/Badge.variants.ts +13 -13
- package/src/components/data-display/Badge/BadgeContent.tsx +10 -4
- package/src/components/data-display/Banner/Banner.styles.ts +8 -8
- package/src/components/data-display/Banner/Banner.tsx +4 -4
- package/src/components/data-display/CardKit/list-card-parts.tsx +1 -1
- package/src/components/data-display/Carousel/Carousel.parts.tsx +13 -11
- package/src/components/data-display/Carousel/Carousel.slide.tsx +3 -2
- package/src/components/data-display/Carousel/Carousel.styles.ts +34 -16
- package/src/components/data-display/Carousel/Carousel.tsx +2 -3
- package/src/components/data-display/Chart/Chart.tsx +4 -4
- package/src/components/data-display/Chart/ChartComposables.tsx +16 -5
- package/src/components/data-display/Chart/chart-axis.ts +13 -9
- package/src/components/data-display/Chart/chart-context.ts +17 -2
- package/src/components/data-display/Chart/chart-internals.ts +30 -13
- package/src/components/data-display/Chart/chart-renderers.tsx +2 -1
- package/src/components/data-display/Chip/Chip.styles.tsx +4 -3
- package/src/components/data-display/DataGrid/DataGrid.states.tsx +3 -1
- package/src/components/data-display/DataViews/DataViewsBoard.tsx +16 -8
- package/src/components/data-display/DataViews/base-card.tsx +12 -11
- package/src/components/data-display/DataViews/base-list-card-geometry.tsx +28 -19
- package/src/components/data-display/DataViews/base-list-card-gutters.tsx +2 -1
- package/src/components/data-display/DataViews/base-list-card-slots.tsx +13 -11
- package/src/components/data-display/DataViews/card-surface.ts +19 -18
- package/src/components/data-display/DataViews/data-views-day-input.tsx +2 -1
- package/src/components/data-display/DataViews/data-views-display-panel.tsx +5 -4
- package/src/components/data-display/DataViews/data-views-display-tabs.tsx +6 -6
- package/src/components/data-display/DataViews/data-views-drag.tsx +7 -5
- package/src/components/data-display/DataViews/data-views-empty.tsx +2 -1
- package/src/components/data-display/DataViews/data-views-export.tsx +5 -3
- package/src/components/data-display/DataViews/data-views-glyphs.tsx +17 -14
- package/src/components/data-display/DataViews/data-views-grid-helpers.tsx +8 -5
- package/src/components/data-display/DataViews/data-views-more-filters.tsx +5 -4
- package/src/components/data-display/DataViews/data-views-number-input.tsx +2 -1
- package/src/components/data-display/DataViews/data-views-range-pill.tsx +1 -1
- package/src/components/data-display/DataViews/data-views-scopes.tsx +12 -6
- package/src/components/data-display/DataViews/data-views-search.tsx +9 -8
- package/src/components/data-display/DataViews/data-views-toolbar.tsx +2 -1
- package/src/components/data-display/DataViews/data-views-view-nav.tsx +4 -4
- package/src/components/data-display/DataViews/save-view-preview.tsx +3 -2
- package/src/components/data-display/DateTimeDisplay/DateTimeDisplay.tsx +4 -3
- package/src/components/data-display/DescriptionItem/DescriptionItem.tsx +6 -3
- package/src/components/data-display/EmptyState/EmptyState.tsx +6 -5
- package/src/components/data-display/ErrorState/ErrorState.tsx +6 -6
- package/src/components/data-display/FleetMap/FleetBody.tsx +4 -1
- package/src/components/data-display/FleetMap/FleetMap.tsx +6 -4
- package/src/components/data-display/FleetMap/FleetRoster.tsx +7 -5
- package/src/components/data-display/HoverCard/HoverCard.animations.ts +13 -11
- package/src/components/data-display/HoverCard/HoverCard.content.tsx +8 -5
- package/src/components/data-display/HoverCard/HoverCard.styles.ts +40 -38
- package/src/components/data-display/HoverCard/HoverCard.tsx +19 -8
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.hooks.ts +2 -2
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.ts +25 -12
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.tsx +3 -2
- package/src/components/data-display/LazyImage/LazyImage.hooks.ts +8 -3
- package/src/components/data-display/LazyImage/LazyImage.tsx +48 -23
- package/src/components/data-display/Lightbox/Lightbox.constants.ts +7 -2
- package/src/components/data-display/Lightbox/Lightbox.hooks.ts +7 -4
- package/src/components/data-display/Lightbox/Lightbox.tsx +3 -2
- package/src/components/data-display/Lightbox/LightboxControls.tsx +6 -5
- package/src/components/data-display/Lightbox/LightboxStage.tsx +30 -18
- package/src/components/data-display/Lightbox/LightboxThumbnails.tsx +10 -8
- package/src/components/data-display/LoadingState/LoadingState.tsx +4 -3
- package/src/components/data-display/MapPreview/MapControlBar.tsx +3 -2
- package/src/components/data-display/MapPreview/MapDecorations.tsx +12 -12
- package/src/components/data-display/MapPreview/MapLayers.tsx +1 -2
- package/src/components/data-display/MapPreview/MapMarkers.tsx +8 -8
- package/src/components/data-display/MapPreview/MapOverlays.tsx +8 -5
- package/src/components/data-display/MapPreview/MapPreview.helpers.ts +3 -4
- package/src/components/data-display/MapPreview/MapPreview.tsx +3 -1
- package/src/components/data-display/MapPreview/MapSearchBar.tsx +4 -3
- package/src/components/data-display/MapPreview/mapSurface.ts +6 -4
- package/src/components/data-display/Popover/Popover.tsx +23 -11
- package/src/components/data-display/Progress/Progress.styles.ts +20 -11
- package/src/components/data-display/Progress/Progress.tsx +12 -9
- package/src/components/data-display/Sheet/Sheet.animations.ts +11 -9
- package/src/components/data-display/Sheet/Sheet.body.tsx +2 -1
- package/src/components/data-display/Sheet/Sheet.parts.tsx +8 -7
- package/src/components/data-display/Sheet/Sheet.styles.ts +35 -30
- package/src/components/data-display/StatCard/StatCard.tsx +4 -3
- package/src/components/data-display/Stepper/Stepper.tsx +17 -17
- package/src/components/data-display/Table/Table.styles.ts +21 -20
- package/src/components/data-display/Table/Table.tsx +26 -16
- package/src/components/data-display/Timeline/Timeline.tsx +4 -3
- package/src/components/data-display/Timeline/TimelineRow.tsx +23 -22
- package/src/components/data-display/TimingDiagram/TimingDiagram.tsx +8 -7
- package/src/components/data-display/TimingDiagram/TimingDiagram.views.tsx +29 -28
- package/src/components/data-display/Tooltip/Tooltip.tsx +23 -10
- package/dist/chunk-24NXQG5F.js.map +0 -1
- package/dist/chunk-2B76FIMN.js.map +0 -1
- package/dist/chunk-2F4YEGYG.js.map +0 -1
- package/dist/chunk-2PWVPTS3.js.map +0 -1
- package/dist/chunk-2WGMMFGV.js.map +0 -1
- package/dist/chunk-2X5OQDPH.js.map +0 -1
- package/dist/chunk-3GQ6PNEM.js.map +0 -1
- package/dist/chunk-4M34ALEP.js.map +0 -1
- package/dist/chunk-4V532JF6.js.map +0 -1
- package/dist/chunk-56QVP2MU.js.map +0 -1
- package/dist/chunk-5E3XZAED.js.map +0 -1
- package/dist/chunk-5NFPO3YY.js.map +0 -1
- package/dist/chunk-5RP3KXC7.js.map +0 -1
- package/dist/chunk-5VWYCVXF.js.map +0 -1
- package/dist/chunk-5ZQUJ7LT.js.map +0 -1
- package/dist/chunk-5ZT4ZIZB.js.map +0 -1
- package/dist/chunk-65YAR3OZ.js.map +0 -1
- package/dist/chunk-73HBIIRB.js.map +0 -1
- package/dist/chunk-7HFGVT3G.js.map +0 -1
- package/dist/chunk-7VJH4FYU.js.map +0 -1
- package/dist/chunk-7ZWC5CKA.js.map +0 -1
- package/dist/chunk-A2CTAEIS.js.map +0 -1
- package/dist/chunk-A2DYU5WN.js.map +0 -1
- package/dist/chunk-ACZH2NUW.js.map +0 -1
- package/dist/chunk-AJSPLHG4.js.map +0 -1
- package/dist/chunk-AQSX3YH2.js.map +0 -1
- package/dist/chunk-BD2GGIGS.js.map +0 -1
- package/dist/chunk-BNU4RLEC.js.map +0 -1
- package/dist/chunk-C6FRVGMC.js.map +0 -1
- package/dist/chunk-CMTR3WEA.js.map +0 -1
- package/dist/chunk-CZT3AV7I.js.map +0 -1
- package/dist/chunk-DZHN5FFX.js.map +0 -1
- package/dist/chunk-E6YBXAZN.js.map +0 -1
- package/dist/chunk-EDO2WS5B.js.map +0 -1
- package/dist/chunk-F52N6ACD.js.map +0 -1
- package/dist/chunk-GN5EZPSL.js.map +0 -1
- package/dist/chunk-GVLMG5WQ.js.map +0 -1
- package/dist/chunk-H2YBVBPW.js.map +0 -1
- package/dist/chunk-H3B5PIM3.js.map +0 -1
- package/dist/chunk-H6YVO55T.js.map +0 -1
- package/dist/chunk-I6EVBLFX.js.map +0 -1
- package/dist/chunk-IFSUKWE7.js.map +0 -1
- package/dist/chunk-IT7ATXU7.js.map +0 -1
- package/dist/chunk-IUCTYNIR.js.map +0 -1
- package/dist/chunk-JCJGJX7V.js.map +0 -1
- package/dist/chunk-JHEGDDZQ.js.map +0 -1
- package/dist/chunk-JWK4GI2I.js.map +0 -1
- package/dist/chunk-KTYZRAB7.js.map +0 -1
- package/dist/chunk-KUVOMH5I.js.map +0 -1
- package/dist/chunk-L4V2LRKH.js.map +0 -1
- package/dist/chunk-LOJK733T.js.map +0 -1
- package/dist/chunk-M5BTIIL7.js.map +0 -1
- package/dist/chunk-M5T3COS2.js.map +0 -1
- package/dist/chunk-MISZGWO7.js.map +0 -1
- package/dist/chunk-MLBKACV6.js.map +0 -1
- package/dist/chunk-MRB6GROF.js.map +0 -1
- package/dist/chunk-MZMGQKT3.js.map +0 -1
- package/dist/chunk-NNQLDFKG.js.map +0 -1
- package/dist/chunk-NVNZFT5X.js.map +0 -1
- package/dist/chunk-NXX3ZQKO.js.map +0 -1
- package/dist/chunk-O26MKGIC.js.map +0 -1
- package/dist/chunk-OOSD7363.js.map +0 -1
- package/dist/chunk-PGNJCUDA.js.map +0 -1
- package/dist/chunk-QO6QWBDI.js.map +0 -1
- package/dist/chunk-QTWXVOPT.js.map +0 -1
- package/dist/chunk-QWHURFJ3.js.map +0 -1
- package/dist/chunk-RORP6DWR.js.map +0 -1
- package/dist/chunk-RV4Y4O67.js.map +0 -1
- package/dist/chunk-SCRN2RE4.js.map +0 -1
- package/dist/chunk-SNR537TI.js +0 -59
- package/dist/chunk-SNR537TI.js.map +0 -1
- package/dist/chunk-SYNMQWT4.js.map +0 -1
- package/dist/chunk-TEUX42YW.js.map +0 -1
- package/dist/chunk-TFZI36UD.js.map +0 -1
- package/dist/chunk-ULIM42PE.js.map +0 -1
- package/dist/chunk-UMP5MQ7X.js.map +0 -1
- package/dist/chunk-UO7ERXYX.js.map +0 -1
- package/dist/chunk-VAGHW3K2.js.map +0 -1
- package/dist/chunk-VDGJV7MP.js.map +0 -1
- package/dist/chunk-VDZQJBAV.js.map +0 -1
- package/dist/chunk-VR3U4QA5.js.map +0 -1
- package/dist/chunk-WR7ELCIL.js.map +0 -1
- package/dist/chunk-X4PS3E3V.js.map +0 -1
- package/dist/chunk-X7PVFAYJ.js.map +0 -1
- package/dist/chunk-XREYLKUX.js.map +0 -1
- package/dist/chunk-XRMZMBE3.js.map +0 -1
- package/dist/chunk-Y2E73IG2.js.map +0 -1
- package/dist/chunk-YDPUBGJ7.js.map +0 -1
- package/dist/chunk-YSKGLU2V.js.map +0 -1
- package/dist/chunk-YU647YW4.js.map +0 -1
- package/dist/chunk-Z35J5B6D.js.map +0 -1
- package/dist/chunk-ZTKLKOOO.js.map +0 -1
- package/dist/chunk-ZUQIOWLN.js.map +0 -1
- package/dist/chunk-ZWSS3K4F.js.map +0 -1
- package/dist/chunk-ZXSUWFQX.js.map +0 -1
- /package/dist/{chunk-APT5L7V5.js.map → chunk-2LIRGFEK.js.map} +0 -0
- /package/dist/{chunk-LDDN254Q.js.map → chunk-2UCLUDEB.js.map} +0 -0
- /package/dist/{chunk-6SYFPRTT.js.map → chunk-343OLRFT.js.map} +0 -0
- /package/dist/{chunk-U2IRCTAR.js.map → chunk-4WCDMCIS.js.map} +0 -0
- /package/dist/{chunk-OGTTJKHI.js.map → chunk-5QWQR7XT.js.map} +0 -0
- /package/dist/{chunk-DRE6DSJ7.js.map → chunk-5TJRJSJY.js.map} +0 -0
- /package/dist/{chunk-XZBCPL4N.js.map → chunk-5W4BLTDI.js.map} +0 -0
- /package/dist/{chunk-YG2VQUZO.js.map → chunk-6BDYC4RA.js.map} +0 -0
- /package/dist/{chunk-QHUTSAFG.js.map → chunk-6CTPDNNX.js.map} +0 -0
- /package/dist/{chunk-CU4TF7C7.js.map → chunk-6GRZ77IS.js.map} +0 -0
- /package/dist/{chunk-YLBRXDYH.js.map → chunk-7EIOXZWL.js.map} +0 -0
- /package/dist/{chunk-ZHEZISMI.js.map → chunk-AK2HOD6B.js.map} +0 -0
- /package/dist/{chunk-VZAGBDZ2.js.map → chunk-BJZOBG24.js.map} +0 -0
- /package/dist/{chunk-CS3RKXT5.js.map → chunk-CHFHILTM.js.map} +0 -0
- /package/dist/{chunk-DMYBTD5Y.js.map → chunk-CPWWMGYR.js.map} +0 -0
- /package/dist/{chunk-XSMMFCMQ.js.map → chunk-CWDV64TD.js.map} +0 -0
- /package/dist/{chunk-GUVBR62X.js.map → chunk-DCJSHYE5.js.map} +0 -0
- /package/dist/{chunk-VV7MGILP.js.map → chunk-DMWSXWCZ.js.map} +0 -0
- /package/dist/{chunk-JYRQBZEV.js.map → chunk-DVAAUWTC.js.map} +0 -0
- /package/dist/{chunk-C6NI3FAV.js.map → chunk-DVGBFT6O.js.map} +0 -0
- /package/dist/{chunk-W5ENK5CM.js.map → chunk-DZNMS2SH.js.map} +0 -0
- /package/dist/{chunk-F5KEWLZK.js.map → chunk-FC7NQ6XM.js.map} +0 -0
- /package/dist/{chunk-NIS523UM.js.map → chunk-FWPFCK4D.js.map} +0 -0
- /package/dist/{chunk-UCTJJYVC.js.map → chunk-G4HBNILE.js.map} +0 -0
- /package/dist/{chunk-57IB5NTM.js.map → chunk-HB7ISSLK.js.map} +0 -0
- /package/dist/{chunk-6Q5GZUQ5.js.map → chunk-HGMBY5LP.js.map} +0 -0
- /package/dist/{chunk-2AKQPXSJ.js.map → chunk-HJPPNVCF.js.map} +0 -0
- /package/dist/{chunk-JOR6E23V.js.map → chunk-IGGXKT5B.js.map} +0 -0
- /package/dist/{chunk-KLMP2BYC.js.map → chunk-IVJKILIX.js.map} +0 -0
- /package/dist/{chunk-HJWOB62A.js.map → chunk-JJSZP3TW.js.map} +0 -0
- /package/dist/{chunk-UCA47HM7.js.map → chunk-KCAW6HRO.js.map} +0 -0
- /package/dist/{chunk-KE5MX4PI.js.map → chunk-L3B36HA5.js.map} +0 -0
- /package/dist/{chunk-OLZTGVBT.js.map → chunk-LYVTJLCF.js.map} +0 -0
- /package/dist/{chunk-WW4N2LRM.js.map → chunk-MBC55H6M.js.map} +0 -0
- /package/dist/{chunk-AATIHNPI.js.map → chunk-MK4CH4VT.js.map} +0 -0
- /package/dist/{chunk-IDO4EV7T.js.map → chunk-NR5TW4AH.js.map} +0 -0
- /package/dist/{chunk-6DC5SVHM.js.map → chunk-NSKQANRY.js.map} +0 -0
- /package/dist/{chunk-EAE5Z5HL.js.map → chunk-OJ2XR3WH.js.map} +0 -0
- /package/dist/{chunk-BR7RM3WR.js.map → chunk-OZPLAOI4.js.map} +0 -0
- /package/dist/{chunk-GIRRCEVH.js.map → chunk-PT2XADGH.js.map} +0 -0
- /package/dist/{chunk-5ZTQTJAJ.js.map → chunk-PWF32ILG.js.map} +0 -0
- /package/dist/{chunk-DBCITC4P.js.map → chunk-QB3TVUPD.js.map} +0 -0
- /package/dist/{chunk-I2CRLUS7.js.map → chunk-QIKPGMMO.js.map} +0 -0
- /package/dist/{chunk-MXZ43UCQ.js.map → chunk-QOLIBVGS.js.map} +0 -0
- /package/dist/{chunk-TPQVLBTY.js.map → chunk-R2WMSXQR.js.map} +0 -0
- /package/dist/{chunk-F7HQVKIR.js.map → chunk-SYVNWXVW.js.map} +0 -0
- /package/dist/{chunk-MGC4QOMP.js.map → chunk-TQ2557I5.js.map} +0 -0
- /package/dist/{chunk-C7TCBAVX.js.map → chunk-TQBRWZA4.js.map} +0 -0
- /package/dist/{chunk-BO2SDMNQ.js.map → chunk-U4QUDFPJ.js.map} +0 -0
- /package/dist/{chunk-SKX4NA6E.js.map → chunk-V74PXUQN.js.map} +0 -0
- /package/dist/{chunk-OYP27CYE.js.map → chunk-WOAXKWAB.js.map} +0 -0
- /package/dist/{chunk-W3CLJ7JE.js.map → chunk-WPA26LXA.js.map} +0 -0
- /package/dist/{chunk-LI6OLYUB.js.map → chunk-YBTC4XNO.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Lightbox/LightboxStage.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport type { FC, ReactNode } from 'react';\nimport React from 'react';\n\nimport { captionSx, counterSx } from './Lightbox.constants';\nimport type { LightboxItem } from './Lightbox.types';\nimport { onMedia } from '../../../tokens/ink';\n\ntype TestId = (suffix: string) => string;\n\nexport interface LightboxStageProps {\n items: LightboxItem[];\n currentItem?: LightboxItem;\n currentIndex: number;\n isLoading: boolean;\n showCaptions: boolean;\n thumbnails: boolean;\n testId: TestId;\n media: ReactNode;\n thumbnailStrip: ReactNode;\n}\n\n// The viewport itself: the media, whatever floats over it, and the filmstrip.\nexport const LightboxStage: FC<LightboxStageProps> = ({\n items,\n currentItem,\n currentIndex,\n isLoading,\n showCaptions,\n thumbnails,\n testId,\n media,\n thumbnailStrip,\n}) => (\n <DialogContent\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n position: 'relative',\n height: '100vh',\n overflow: 'hidden',\n }}\n data-testid={testId('content')}\n >\n {isLoading && (\n <CircularProgress\n sx={{ position: 'absolute', color: onMedia, zIndex: 999 }}\n data-testid={testId('loading')}\n />\n )}\n\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n }}\n data-testid={testId('image-container')}\n >\n {media}\n </Box>\n\n {showCaptions && currentItem?.caption && (\n <Typography\n id=\"lightbox-description\"\n sx={{\n ...captionSx,\n position: 'absolute',\n // Sit above the filmstrip when there is one.\n bottom: thumbnails ? 120 : 16,\n left: '50%',\n transform: 'translateX(-50%)',\n maxWidth: '80vw',\n padding: 2,\n }}\n data-testid={testId('caption')}\n >\n {currentItem.caption}\n </Typography>\n )}\n\n {items.length > 1 && (\n <Typography\n sx={{ ...counterSx, position: 'absolute', top: 70, right: 16, padding: '4px 8px' }}\n aria-live=\"polite\"\n data-testid={testId('counter')}\n >\n {currentIndex + 1} / {items.length}\n </Typography>\n )}\n\n {thumbnailStrip}\n </DialogContent>\n);\n"],"mappings":";;;;;;;;;AAAA,OAAO,SAAS;AAChB,OAAO,sBAAsB;AAC7B,OAAO,mBAAmB;AAC1B,OAAO,gBAAgB;AA+CjB,cAuCA,YAvCA;AAxBC,IAAM,gBAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,IAAI;AAAA,MACF,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA,eAAa,OAAO,SAAS;AAAA,IAE5B;AAAA,mBACC;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,EAAE,UAAU,YAAY,OAAO,SAAS,QAAQ,IAAI;AAAA,UACxD,eAAa,OAAO,SAAS;AAAA;AAAA,MAC/B;AAAA,MAGF;AAAA,QAAC;AAAA;AAAA,UACC,IAAI;AAAA,YACF,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,OAAO;AAAA,YACP,QAAQ;AAAA,UACV;AAAA,UACA,eAAa,OAAO,iBAAiB;AAAA,UAEpC;AAAA;AAAA,MACH;AAAA,MAEC,gBAAgB,aAAa,WAC5B;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,IAAI;AAAA,YACF,GAAG;AAAA,YACH,UAAU;AAAA;AAAA,YAEV,QAAQ,aAAa,MAAM;AAAA,YAC3B,MAAM;AAAA,YACN,WAAW;AAAA,YACX,UAAU;AAAA,YACV,SAAS;AAAA,UACX;AAAA,UACA,eAAa,OAAO,SAAS;AAAA,UAE5B,sBAAY;AAAA;AAAA,MACf;AAAA,MAGD,MAAM,SAAS,KACd;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,EAAE,GAAG,WAAW,UAAU,YAAY,KAAK,IAAI,OAAO,IAAI,SAAS,UAAU;AAAA,UACjF,aAAU;AAAA,UACV,eAAa,OAAO,SAAS;AAAA,UAE5B;AAAA,2BAAe;AAAA,YAAE;AAAA,YAAI,MAAM;AAAA;AAAA;AAAA,MAC9B;AAAA,MAGD;AAAA;AAAA;AACH;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/MapPreview/MapPreview.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { glassStyles, resolveMapPreviewProps } from './MapPreview.helpers';\nimport type { MapPreviewProps } from './MapPreview.types';\nimport { MapLayers } from './MapLayers';\nimport { MapCoordinates, MapMarkers } from './MapMarkers';\nimport { StaticMapView } from './StaticMapView';\nimport { useMapPreview } from './useMapPreview';\n\n// Kept module-local: styled() components cannot be exported across a module\n// boundary here without tripping TS2742.\nconst MapContainer = styled(Paper)(({ theme }) => ({\n position: 'relative',\n width: '100%',\n borderRadius: theme.shape.borderRadius * 2,\n overflow: 'hidden',\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.9)} 0%, ${alpha(theme.palette.background.paper, 0.8)} 100%)`,\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n}));\n\nconst MapWrapper = styled(Box)<{ height: string }>(({ height }) => ({\n width: '100%',\n height,\n position: 'relative',\n}));\n\nconst cursorFor = (grabbing: boolean, interactive: boolean): string => {\n if (grabbing) return 'grabbing';\n return interactive ? 'grab' : 'default';\n};\n\nexport const MapPreview: FC<MapPreviewProps> = (componentProps) => {\n const props = resolveMapPreviewProps(componentProps);\n const theme = useTheme();\n const { containerRef, view, controls, pointer, search, handleMapClick } = useMapPreview(props);\n\n const height = controls.isFullscreen ? '100vh' : props.height;\n const grabbing = pointer.isDragging || pointer.isPanning;\n\n return (\n <MapContainer\n ref={containerRef}\n elevation={props.variant === 'glass' ? 0 : 2}\n data-testid=\"map-preview-container\"\n role=\"img\"\n aria-label={`Map preview centered at ${view.markerPosition.lat.toFixed(4)}, ${view.markerPosition.lng.toFixed(4)} with zoom level ${view.zoom}`}\n tabIndex={0}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n sx={glassStyles(props.variant, theme)}\n >\n <MapWrapper\n height={height}\n onClick={handleMapClick}\n onMouseDown={pointer.handleMouseDown}\n onMouseMove={pointer.handleMouseMove}\n onMouseUp={pointer.handleMouseUp}\n onMouseLeave={pointer.handleMouseUp}\n style={{\n cursor: cursorFor(grabbing, props.interactive),\n transition: props.animated ? 'all 0.3s ease' : 'none',\n }}\n >\n <StaticMapView\n height={height}\n zoom={view.zoom}\n mapType={view.mapType}\n // The built-in centre marker steps aside for an explicit marker list.\n marker={props.marker && props.markers.length === 0}\n markerPosition={view.markerPosition}\n panOffset={view.panOffset}\n />\n\n <MapMarkers markers={props.markers} centre={view.markerPosition} animated={props.animated} />\n\n <MapLayers\n settings={props}\n zoom={view.zoom}\n mapType={view.mapType}\n search={search}\n controls={controls}\n />\n\n <MapCoordinates position={view.markerPosition} zoom={view.zoom} />\n </MapWrapper>\n </MapContainer>\n );\n};\n\nexport default MapPreview;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,OAAO,SAAS;AAChB,OAAO,WAAW;AAClB,SAAS,OAAO,QAAQ,gBAAgB;AAqDlC,SAYE,KAZF;AAxCN,IAAM,eAAe,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACjD,UAAU;AAAA,EACV,OAAO;AAAA,EACP,cAAc,MAAM,MAAM,eAAe;AAAA,EACzC,UAAU;AAAA,EACV,YAAY,2BAA2B,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG,CAAC,QAAQ,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,EACnI,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,IAAI,CAAC;AACzD,EAAE;AAEF,IAAM,aAAa,OAAO,GAAG,EAAsB,CAAC,EAAE,OAAO,OAAO;AAAA,EAClE,OAAO;AAAA,EACP;AAAA,EACA,UAAU;AACZ,EAAE;AAEF,IAAM,YAAY,CAAC,UAAmB,gBAAiC;AACrE,MAAI,SAAU,QAAO;AACrB,SAAO,cAAc,SAAS;AAChC;AAEO,IAAM,aAAkC,CAAC,mBAAmB;AACjE,QAAM,QAAQ,uBAAuB,cAAc;AACnD,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,cAAc,MAAM,UAAU,SAAS,QAAQ,eAAe,IAAI,cAAc,KAAK;AAE7F,QAAM,SAAS,SAAS,eAAe,UAAU,MAAM;AACvD,QAAM,WAAW,QAAQ,cAAc,QAAQ;AAE/C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,MAAM,YAAY,UAAU,IAAI;AAAA,MAC3C,eAAY;AAAA,MACZ,MAAK;AAAA,MACL,cAAY,2BAA2B,KAAK,eAAe,IAAI,QAAQ,CAAC,CAAC,KAAK,KAAK,eAAe,IAAI,QAAQ,CAAC,CAAC,oBAAoB,KAAK,IAAI;AAAA,MAC7I,UAAU;AAAA,MACV,aAAU;AAAA,MACV,eAAY;AAAA,MACZ,IAAI,YAAY,MAAM,SAAS,KAAK;AAAA,MAEpC;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,SAAS;AAAA,UACT,aAAa,QAAQ;AAAA,UACrB,aAAa,QAAQ;AAAA,UACrB,WAAW,QAAQ;AAAA,UACnB,cAAc,QAAQ;AAAA,UACtB,OAAO;AAAA,YACL,QAAQ,UAAU,UAAU,MAAM,WAAW;AAAA,YAC7C,YAAY,MAAM,WAAW,kBAAkB;AAAA,UACjD;AAAA,UAEA;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,MAAM,KAAK;AAAA,gBACX,SAAS,KAAK;AAAA,gBAEd,QAAQ,MAAM,UAAU,MAAM,QAAQ,WAAW;AAAA,gBACjD,gBAAgB,KAAK;AAAA,gBACrB,WAAW,KAAK;AAAA;AAAA,YAClB;AAAA,YAEA,oBAAC,cAAW,SAAS,MAAM,SAAS,QAAQ,KAAK,gBAAgB,UAAU,MAAM,UAAU;AAAA,YAE3F;AAAA,cAAC;AAAA;AAAA,gBACC,UAAU;AAAA,gBACV,MAAM,KAAK;AAAA,gBACX,SAAS,KAAK;AAAA,gBACd;AAAA,gBACA;AAAA;AAAA,YACF;AAAA,YAEA,oBAAC,kBAAe,UAAU,KAAK,gBAAgB,MAAM,KAAK,MAAM;AAAA;AAAA;AAAA,MAClE;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,qBAAQ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/MapPreview/MapOverlays.tsx"],"sourcesContent":["import { useTheme } from '@mui/material/styles/index.js';\nimport type { CSSProperties, FC } from 'react';\nimport React from 'react';\n\nimport type { HeatmapPoint } from './MapPreview.types';\n\nconst OVERLAY_STYLE: CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n zIndex: 1,\n};\n\nconst MAX_HEAT_RADIUS = 30;\nconst MAX_HEAT_OPACITY = 0.3;\nconst DEGREES_TO_PIXELS = 10;\n\nexport interface HeatmapOverlayProps {\n points: HeatmapPoint[];\n width: number;\n height: number;\n}\n\n// Each point's weight drives both its radius and its opacity, so denser areas\n// read hotter where circles overlap.\nexport const HeatmapOverlay: FC<HeatmapOverlayProps> = ({ points, width, height }) => {\n const theme = useTheme();\n\n if (points.length === 0) return null;\n\n return (\n <svg style={OVERLAY_STYLE} viewBox={`0 0 ${width} ${height}`}>\n {points.map((point, index) => (\n <circle\n key={`${point.lat}-${point.lng}-${index}`}\n cx={width / 2 + point.lng * DEGREES_TO_PIXELS}\n cy={height / 2 - point.lat * DEGREES_TO_PIXELS}\n r={MAX_HEAT_RADIUS * point.weight}\n fill={theme.palette.error.main}\n opacity={MAX_HEAT_OPACITY * point.weight}\n />\n ))}\n </svg>\n );\n};\n\nexport const RouteOverlay: FC<{ color: string }> = ({ color }) => {\n const theme = useTheme();\n\n return (\n <svg style={OVERLAY_STYLE} viewBox=\"0 0 100 100\">\n <path\n d=\"M 20,20 Q 40,10 50,30 T 80,80\"\n stroke={color || theme.palette.primary.main}\n strokeWidth=\"3\"\n fill=\"none\"\n strokeDasharray=\"5,5\"\n opacity=\"0.8\"\n >\n {/* Marching-ants dashes to suggest direction of travel. */}\n <animate attributeName=\"stroke-dashoffset\" values=\"0;10\" dur=\"1s\" repeatCount=\"indefinite\" />\n </path>\n </svg>\n );\n};\n"],"mappings":";AAAA,SAAS,gBAAgB;AAoCjB;AA9BR,IAAM,gBAA+B;AAAA,EACnC,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,QAAQ;AACV;AAEA,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAUnB,IAAM,iBAA0C,CAAC,EAAE,QAAQ,OAAO,OAAO,MAAM;AACpF,QAAM,QAAQ,SAAS;AAEvB,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,SACE,oBAAC,SAAI,OAAO,eAAe,SAAS,OAAO,KAAK,IAAI,MAAM,IACvD,iBAAO,IAAI,CAAC,OAAO,UAClB;AAAA,IAAC;AAAA;AAAA,MAEC,IAAI,QAAQ,IAAI,MAAM,MAAM;AAAA,MAC5B,IAAI,SAAS,IAAI,MAAM,MAAM;AAAA,MAC7B,GAAG,kBAAkB,MAAM;AAAA,MAC3B,MAAM,MAAM,QAAQ,MAAM;AAAA,MAC1B,SAAS,mBAAmB,MAAM;AAAA;AAAA,IAL7B,GAAG,MAAM,GAAG,IAAI,MAAM,GAAG,IAAI,KAAK;AAAA,EAMzC,CACD,GACH;AAEJ;AAEO,IAAM,eAAsC,CAAC,EAAE,MAAM,MAAM;AAChE,QAAM,QAAQ,SAAS;AAEvB,SACE,oBAAC,SAAI,OAAO,eAAe,SAAQ,eACjC;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAQ,SAAS,MAAM,QAAQ,QAAQ;AAAA,MACvC,aAAY;AAAA,MACZ,MAAK;AAAA,MACL,iBAAgB;AAAA,MAChB,SAAQ;AAAA,MAGR,8BAAC,aAAQ,eAAc,qBAAoB,QAAO,QAAO,KAAI,MAAK,aAAY,cAAa;AAAA;AAAA,EAC7F,GACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/HoverCard/HoverCard.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Card from '@mui/material/Card/index.js';\nimport CardContent from '@mui/material/CardContent/index.js';\nimport Popover from '@mui/material/Popover/index.js';\nimport { styled } from '@mui/material/styles/index.js';\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"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-grid-helpers.tsx"],"sourcesContent":["\"use client\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { type GridColumn } from \"../DataGrid\";\nimport { type SortFieldDefinition } from \"../../layout/ContentToolbar\";\nimport { Box } from \"../../../mui/Box\";\nimport { Button } from \"../../form/Button\";\nimport { DropdownMenu, type DropdownMenuItem } from \"../../navigation/DropdownMenu\";\n\nimport type {\n DataViewColumn,\n DataViewState,\n FilterFieldConfig,\n RangeFieldConfig,\n RowAction,\n} from \"./data-views-types\";\n\n/** Is this the non-clickable actions column? */\nexport function isActionsColumn<T extends Record<string, unknown>>(col: GridColumn<T>): boolean {\n return col.type === \"actions\" || col.id === \"actions\";\n}\n\n/**\n * Map the DataView columns to grid columns, applying visibility and — when a row\n * click handler is present — wrapping each non-actions cell so clicking opens the row.\n */\nexport function buildGridColumns<T extends Record<string, unknown>>(\n columns: DataViewColumn<T>[],\n visibleColumns: string[],\n onRowClick: ((row: T) => void) | undefined,\n): GridColumn<T>[] {\n return columns.map((col) => {\n const hidden = col.hideable !== false && !visibleColumns.includes(col.id);\n if (!onRowClick || isActionsColumn(col)) return { ...col, hidden };\n return {\n ...col,\n hidden,\n cell: (ctx) => {\n const content = col.cell ? col.cell(ctx) : ctx.value == null ? \"\" : String(ctx.value);\n return (\n <Box\n onClick={() => onRowClick(ctx.row)}\n sx={{ cursor: \"pointer\", width: \"100%\", height: \"100%\", display: \"flex\", alignItems: \"center\" }}\n >\n {content}\n </Box>\n );\n },\n };\n });\n}\n\ninterface ActionsColumnConfig<T extends Record<string, unknown>> {\n /** Actions that build the auto \"⋮\" kebab. Ignored when `renderRowMenu` is set. */\n rowActions: RowAction<T>[];\n /** Optional leading slot (e.g. a favourite star) rendered before the kebab. */\n leading?: (row: T) => React.ReactNode;\n testIdPrefix: string;\n getRowId: (row: T) => string | number;\n /**\n * Escape hatch: render a bespoke per-row menu (e.g. an entity's self-contained\n * 3-dots menu that owns its own popups) INSTEAD of the auto kebab built from\n * `rowActions`. This is how the table row and the card share ONE menu component.\n * `rowActions`/`bulkActions` still drive the multi-row bulk menu, which a\n * single-row menu intentionally does not replace.\n */\n renderRowMenu?: (row: T) => React.ReactNode;\n}\n\n/**\n * The auto \"⋮\" kebab actions column built from the reusable `rowActions` — the\n * SAME definitions that feed the bulk menu, so the two never drift. Each item\n * acts on just this row; `rowLabel` provides a per-row label when set. An\n * optional `leading` slot (e.g. a favourite star) renders before the kebab.\n * When `renderRowMenu` is supplied, the cell renders that bespoke menu instead.\n */\nexport function buildRowActionsColumn<T extends Record<string, unknown>>(\n config: ActionsColumnConfig<T>,\n): DataViewColumn<T> {\n const { rowActions, leading, testIdPrefix, getRowId, renderRowMenu } = config;\n const kebabActions = rowActions.filter((action) => action.row !== false);\n return {\n id: \"actions\",\n header: \"\",\n type: \"actions\",\n enableSort: false,\n hideable: false,\n // Narrow: the column only holds the \"⋮\" kebab (plus an optional leading icon),\n // so it needs room for just one or two icons.\n width: leading ? 72 : 44,\n cell: ({ row }) => (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 2, justifyContent: \"flex-end\" }}>\n {leading?.(row)}\n {renderRowMenu\n ? renderRowMenu(row)\n : renderAutoKebab(kebabActions, row, testIdPrefix, getRowId)}\n </span>\n ),\n };\n}\n\n/** The built-in kebab menu for one row, derived from `rowActions`. */\nfunction renderAutoKebab<T extends Record<string, unknown>>(\n kebabActions: RowAction<T>[],\n row: T,\n testIdPrefix: string,\n getRowId: (row: T) => string | number,\n): React.ReactNode {\n const copy = useDataViewsCopy();\n const items: DropdownMenuItem[] = kebabActions\n .filter((action) => action.isVisible?.(row) ?? true)\n .map((action) => ({\n id: action.id,\n label: action.rowLabel ? action.rowLabel(row) : action.label,\n color: action.color,\n onClick: () => void action.onSelect([row]),\n }));\n if (items.length === 0) return null;\n return (\n <DropdownMenu\n size=\"sm\"\n items={items}\n trigger={\n <Button variant=\"text\" size=\"sm\" dataTestId={`${testIdPrefix}-actions-${getRowId(row)}`} aria-label={copy.grid.rowActions}>\n ⋮\n </Button>\n }\n />\n );\n}\n\n/** Sort options derived from the sortable columns when a page supplies none. */\nexport function defaultSortFields<T extends Record<string, unknown>>(\n columns: DataViewColumn<T>[],\n): SortFieldDefinition[] {\n return columns\n .filter(\n (col) =>\n col.enableSort !== false &&\n col.type !== \"actions\" &&\n col.id !== \"actions\" &&\n typeof col.header === \"string\" &&\n col.header !== \"\",\n )\n .map((col) => ({\n value: col.id,\n label: col.header as string,\n orderOptions: [\n { value: \"asc\", label: \"Crescente\" },\n { value: \"desc\", label: \"Decrescente\" },\n ],\n }));\n}\n\n/** Count active filters (search + selected pills + bounded ranges) for the badge. */\nexport function computeActiveFilterCount<T extends Record<string, unknown>>(\n state: DataViewState,\n fields: FilterFieldConfig<T>[],\n rangeFields: RangeFieldConfig<T>[],\n): number {\n const ranges = state.ranges ?? {};\n const pillCount = fields.reduce((n, field) => n + ((state.pills[field.id]?.length ?? 0) > 0 ? 1 : 0), 0);\n const rangeCount = rangeFields.reduce((n, field) => {\n const range = ranges[field.id];\n return n + (range && (range.min != null || range.max != null) ? 1 : 0);\n }, 0);\n return (state.search.trim() ? 1 : 0) + pillCount + rangeCount;\n}\n\nfunction bulkMenuItems<T extends Record<string, unknown>>(\n rowActions: RowAction<T>[],\n selectedRows: T[],\n clearSelection: () => void,\n): DropdownMenuItem[] {\n return rowActions\n .filter((action) => action.bulk !== false)\n .map((action) => {\n // State-machine guards: the action runs only on the rows it applies to,\n // and disappears from the menu when none of the selection qualifies.\n const targets = action.isVisible ? selectedRows.filter(action.isVisible) : selectedRows;\n return { action, targets };\n })\n .filter(({ targets }) => targets.length > 0)\n .map(({ action, targets }) => ({\n id: action.id,\n label: action.label,\n color: action.color,\n onClick: () => {\n // Run the (possibly async) handler on the captured selection, then clear\n // it — but only once the work settles. On failure keep the selection so\n // the user can see which rows still need action and retry.\n const result = action.onSelect(targets);\n if (result instanceof Promise) {\n void result.then(\n () => clearSelection(),\n () => {\n /* keep the selection on failure so the user can retry */\n },\n );\n } else {\n clearSelection();\n }\n },\n }));\n}\n\ninterface RenderBulkArgs<T extends Record<string, unknown>> {\n rowActions: RowAction<T>[] | undefined;\n bulkActions: ((selectedRows: T[], clearSelection: () => void) => React.ReactNode) | undefined;\n selectedRows: T[];\n clearSelection: () => void;\n testIdPrefix: string;\n}\n\n/**\n * The selection bulk control shown in the toolbar. Prefers the reusable\n * `rowActions` (an \"Ações\" dropdown mirroring the row kebab); falls back to the\n * low-level `bulkActions` render prop. Renders nothing with no selection.\n */\nexport function renderBulkActions<T extends Record<string, unknown>>({\n rowActions,\n bulkActions,\n selectedRows,\n clearSelection,\n testIdPrefix,\n}: RenderBulkArgs<T>): React.ReactNode {\n const copy = useDataViewsCopy();\n if (selectedRows.length === 0) return undefined;\n if (rowActions) {\n const items = bulkMenuItems(rowActions, selectedRows, clearSelection);\n if (items.length === 0) return undefined;\n return (\n <DropdownMenu\n size=\"sm\"\n items={items}\n trigger={\n <Button variant=\"outline\" size=\"sm\" dataTestId={`${testIdPrefix}-bulk-actions`}>\n {copy.grid.bulkActions(selectedRows.length)}\n </Button>\n }\n />\n );\n }\n return bulkActions ? bulkActions(selectedRows, clearSelection) : undefined;\n}\n\n/** Toggle a single value in a pill's selected-list (returns the next list). */\nexport function togglePillValues(current: string[] | undefined, value: string, checked: boolean): string[] {\n const list = current ?? [];\n return checked ? [...list, value] : list.filter((v) => v !== value);\n}\n\n/**\n * The card grid's `grid-template-columns`, as an sx fragment.\n *\n * One rule at every width: each card asks for `targetWidth` and `auto-fill`\n * decides how many fit. Density moves the target, so it changes the count at\n * every size — which the previous column-count cap could not do, because its\n * track floor bottomed out at a constant shared by all three densities.\n *\n * Below `sm` this is a single column, and no target changes that. That is why\n * the density control hides itself there rather than offering three settings\n * that all draw the same thing.\n */\nexport function cardGridTracks(targetWidth: number) {\n return {\n gridTemplateColumns: {\n xs: \"1fr\",\n sm: `repeat(auto-fill, minmax(${targetWidth}px, 1fr))`,\n },\n };\n}\n"],"mappings":"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","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/MapPreview/MapDecorations.tsx"],"sourcesContent":["import LocationIcon from '@mui/icons-material/LocationOn';\nimport NavigationIcon from '@mui/icons-material/Navigation';\nimport PlaceIcon from '@mui/icons-material/Place';\nimport Box from '@mui/material/Box/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { getScaleDistance } from './mapProjection';\nimport { BOUNCE_KEYFRAMES } from './mapSurface';\nimport { shadowInk } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\n// Decorative only: these give the mock surface something to look like without\n// standing in for real map data.\nexport const MapRoads: FC = () => {\n const theme = useTheme();\n\n return (\n <Box sx={{ position: 'absolute', top: '20%', left: '15%', width: '70%', height: '60%', opacity: 0.2 }}>\n <svg width=\"100%\" height=\"100%\" style={{ position: 'absolute' }}>\n <path\n d=\"M 10,50 Q 30,30 50,50 T 90,50\"\n stroke={theme.palette.text.secondary}\n strokeWidth=\"2\"\n fill=\"none\"\n opacity=\"0.3\"\n />\n <path\n d=\"M 50,10 L 50,90\"\n stroke={theme.palette.text.secondary}\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.3\"\n />\n <path\n d=\"M 20,30 L 80,70\"\n stroke={theme.palette.text.secondary}\n strokeWidth=\"1\"\n fill=\"none\"\n opacity=\"0.2\"\n />\n </svg>\n </Box>\n );\n};\n\nconst DecorativePin: FC<{ top: string; left: string }> = ({ top, left }) => {\n const theme = useTheme();\n\n return (\n <Box sx={{ position: 'absolute', top, left, opacity: 0.6 }}>\n <PlaceIcon sx={{ fontSize: rem(theme, 20), color: theme.palette.primary.main }} />\n </Box>\n );\n};\n\nexport const MapDecorativePins: FC = () => (\n <>\n <DecorativePin top=\"30%\" left=\"25%\" />\n <DecorativePin top=\"65%\" left=\"70%\" />\n </>\n);\n\nexport const MapCentreMarker: FC = () => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid=\"map-marker\"\n sx={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -100%)',\n zIndex: 2,\n filter: `drop-shadow(0 2px 4px ${shadowInk(theme, 0.3)})`,\n }}\n >\n <LocationIcon\n sx={{\n fontSize: rem(theme, 36),\n color: theme.palette.error.main,\n animation: 'bounce 2s infinite',\n '@keyframes bounce': BOUNCE_KEYFRAMES,\n }}\n />\n </Box>\n );\n};\n\nexport const MapScaleBar: FC<{ zoom: number }> = ({ zoom }) => {\n const theme = useTheme();\n\n return (\n <Box\n sx={{\n position: 'absolute',\n bottom: theme.spacing(2),\n right: theme.spacing(2),\n display: 'flex',\n alignItems: 'center',\n gap: 0.5,\n padding: theme.spacing(0.5, 1),\n background: alpha(theme.palette.background.paper, 0.9),\n borderRadius: theme.shape.borderRadius,\n fontSize: rem(theme, 12),\n color: theme.palette.text.secondary,\n }}\n >\n <Box\n sx={{\n width: 40,\n height: 2,\n background: theme.palette.text.secondary,\n position: 'relative',\n // The end caps that make the bar read as a measurement.\n '&::before, &::after': {\n content: '\"\"',\n position: 'absolute',\n width: 2,\n height: 6,\n background: theme.palette.text.secondary,\n },\n '&::before': { left: 0, top: -2 },\n '&::after': { right: 0, top: -2 },\n }}\n />\n <Typography variant=\"caption\">{getScaleDistance(zoom)}</Typography>\n </Box>\n );\n};\n\nexport const MapCompass: FC = () => {\n const theme = useTheme();\n\n return (\n <Box\n sx={{\n position: 'absolute',\n top: theme.spacing(2),\n left: theme.spacing(2),\n width: 40,\n height: 40,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: alpha(theme.palette.background.paper, 0.9),\n borderRadius: '50%',\n boxShadow: theme.shadows[2],\n }}\n >\n <NavigationIcon\n sx={{ fontSize: rem(theme, 24), color: theme.palette.primary.main, transform: 'rotate(-45deg)' }}\n />\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Chart/ChartComposables.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\nimport { Legend, ResponsiveContainer, Tooltip } from 'recharts';\n\n/**\n * Raw chart composables (Squire's ChartConfig pattern, MUI-themed): a\n * responsive container plus themed tooltip/legend content renderers. The\n * prop-driven `Chart` uses these internally; consumers building bespoke\n * Recharts compositions can reuse them directly.\n */\n\n/** Recharts' Tooltip/Legend re-exported so bespoke compositions can pair them\n * with the themed content renderers below. */\nexport const ChartTooltip = Tooltip;\nexport const ChartLegend = Legend;\n\nexport interface ChartContainerProps {\n /**\n * A number of pixels, or a PERCENTAGE of the box this container is given.\n *\n * The difference is not cosmetic: Recharts sizes the chart from the number\n * when it is one and only MEASURES its own box when it is a percentage\n * (`calculateChartDimensions`). So a container stretched by its parent's\n * layout goes on drawing a 300px chart inside a 600px box — visibly, as\n * blank space under the plot — until the height is handed over as a percent.\n */\n height: number | `${number}%`;\n width?: number | string;\n responsive?: boolean;\n children: React.ReactElement;\n 'data-testid'?: string;\n}\n\n/** Responsive wrapper for a Recharts chart element. */\nexport const ChartContainer: React.FC<ChartContainerProps> = ({\n height,\n width = '100%',\n responsive = true,\n children,\n 'data-testid': dataTestId,\n}) => {\n if (!responsive) {\n return (\n <Box sx={{ width, height }} data-testid={dataTestId}>\n {children}\n </Box>\n );\n }\n return (\n <ResponsiveContainer width=\"100%\" height={height} data-testid={dataTestId}>\n {children}\n </ResponsiveContainer>\n );\n};\n\ninterface TooltipEntry {\n name?: string | number;\n value?: string | number;\n color?: string;\n}\n\nexport interface ChartTooltipContentProps {\n active?: boolean;\n label?: string | number;\n payload?: TooltipEntry[];\n /** Formats numeric values (e.g. centavos → BRL). */\n valueFormatter?: (value: number) => string;\n}\n\n/** Theme-aware tooltip content (light/dark correct, semantic colors only). */\nexport const ChartTooltipContent: React.FC<ChartTooltipContentProps> = ({\n active,\n label,\n payload,\n valueFormatter,\n}) => {\n const theme = useTheme();\n if (!active || !payload || payload.length === 0) return null;\n const formatValue = (value: TooltipEntry['value']): string | number => {\n if (typeof value === 'number' && valueFormatter) return valueFormatter(value);\n return value ?? '';\n };\n return (\n <Paper elevation={4} sx={{ px: 1.5, py: 1, border: `1px solid ${theme.palette.divider}` }}>\n {label !== undefined && label !== '' && (\n <Typography variant=\"caption\" sx={{ color: 'text.secondary', display: 'block', mb: 0.5 }}>\n {label}\n </Typography>\n )}\n {payload.map((entry, index) => (\n <Box key={index} sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Box\n component=\"span\"\n sx={{ width: 10, height: 10, borderRadius: '2px', backgroundColor: entry.color, flexShrink: 0 }}\n />\n <Typography variant=\"body2\" sx={{ color: 'text.secondary' }}>\n {entry.name}\n </Typography>\n <Typography variant=\"body2\" sx={{ ml: 'auto', fontWeight: 600 }}>\n {formatValue(entry.value)}\n </Typography>\n </Box>\n ))}\n </Paper>\n );\n};\n\nexport interface ChartLegendContentProps {\n payload?: Array<{ value?: string | number; color?: string }>;\n}\n\n/** Theme-aware legend content matching the tooltip's swatch styling. */\nexport const ChartLegendContent: React.FC<ChartLegendContentProps> = ({ payload }) => {\n if (!payload || payload.length === 0) return null;\n return (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', justifyContent: 'center', gap: 2, pt: 1 }}>\n {payload.map((entry, index) => (\n <Box key={index} sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <Box\n component=\"span\"\n sx={{ width: 10, height: 10, borderRadius: '2px', backgroundColor: entry.color, flexShrink: 0 }}\n />\n <Typography variant=\"caption\" sx={{ color: 'text.secondary' }}>\n {entry.value}\n </Typography>\n </Box>\n ))}\n </Box>\n );\n};\n"],"mappings":";AAAA,OAAO,SAAS;AAChB,OAAO,WAAW;AAClB,OAAO,gBAAgB;AACvB,SAAS,gBAAgB;AAEzB,SAAS,QAAQ,qBAAqB,eAAe;AAyC/C,cA+CE,YA/CF;AA9BC,IAAM,eAAe;AACrB,IAAM,cAAc;AAoBpB,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AAAA,EACb;AAAA,EACA,eAAe;AACjB,MAAM;AACJ,MAAI,CAAC,YAAY;AACf,WACE,oBAAC,OAAI,IAAI,EAAE,OAAO,OAAO,GAAG,eAAa,YACtC,UACH;AAAA,EAEJ;AACA,SACE,oBAAC,uBAAoB,OAAM,QAAO,QAAgB,eAAa,YAC5D,UACH;AAEJ;AAiBO,IAAM,sBAA0D,CAAC;AAAA,EACtE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,MAAI,CAAC,UAAU,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AACxD,QAAM,cAAc,CAAC,UAAkD;AACrE,QAAI,OAAO,UAAU,YAAY,eAAgB,QAAO,eAAe,KAAK;AAC5E,WAAO,SAAS;AAAA,EAClB;AACA,SACE,qBAAC,SAAM,WAAW,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,QAAQ,aAAa,MAAM,QAAQ,OAAO,GAAG,GACrF;AAAA,cAAU,UAAa,UAAU,MAChC,oBAAC,cAAW,SAAQ,WAAU,IAAI,EAAE,OAAO,kBAAkB,SAAS,SAAS,IAAI,IAAI,GACpF,iBACH;AAAA,IAED,QAAQ,IAAI,CAAC,OAAO,UACnB,qBAAC,OAAgB,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACnE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,OAAO,iBAAiB,MAAM,OAAO,YAAY,EAAE;AAAA;AAAA,MAChG;AAAA,MACA,oBAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,iBAAiB,GACvD,gBAAM,MACT;AAAA,MACA,oBAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,IAAI,QAAQ,YAAY,IAAI,GAC3D,sBAAY,MAAM,KAAK,GAC1B;AAAA,SAVQ,KAWV,CACD;AAAA,KACH;AAEJ;AAOO,IAAM,qBAAwD,CAAC,EAAE,QAAQ,MAAM;AACpF,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAC7C,SACE,oBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,UAAU,QAAQ,gBAAgB,UAAU,KAAK,GAAG,IAAI,EAAE,GACnF,kBAAQ,IAAI,CAAC,OAAO,UACnB,qBAAC,OAAgB,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,KAAK,GACtE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,OAAO,iBAAiB,MAAM,OAAO,YAAY,EAAE;AAAA;AAAA,IAChG;AAAA,IACA,oBAAC,cAAW,SAAQ,WAAU,IAAI,EAAE,OAAO,iBAAiB,GACzD,gBAAM,OACT;AAAA,OAPQ,KAQV,CACD,GACH;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Sheet/Sheet.parts.tsx"],"sourcesContent":["import CloseIcon from '@mui/icons-material/Close';\nimport Backdrop from '@mui/material/Backdrop/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport Fade from '@mui/material/Fade/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { scrim, sheen } from '../../../tokens/ink';\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport { shimmerAnimation } from './Sheet.animations';\nimport type {\n SheetContentProps,\n SheetFooterProps,\n SheetHeaderProps,\n SheetOverlayProps,\n} from './Sheet.types';\n\n/**\n * The grab handle's own styling. A draggable handle is deliberately larger and\n * tinted, so the affordance reads as draggable before the user tries it; a\n * decorative one stays a neutral bar.\n */\nconst handleSx = (theme: Theme, isDraggable: boolean) => ({\n width: isDraggable ? 48 : 32,\n height: isDraggable ? 6 : 4,\n backgroundColor: alpha(theme.palette.text.primary, 0.3),\n borderRadius: 3,\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.short,\n easing: theme.transitions.easing.easeInOut,\n }),\n position: 'relative',\n overflow: 'hidden',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: '-100%',\n width: '100%',\n height: '100%',\n background: `linear-gradient(\n 90deg,\n transparent,\n ${sheen(theme, 0.3)},\n transparent\n )`,\n animation: isDraggable ? `${shimmerAnimation} 2s infinite` : 'none',\n },\n ...(isDraggable && {\n backgroundColor: alpha(theme.palette.primary.main, 0.4),\n boxShadow: `0 2px 4px ${alpha(theme.palette.primary.main, 0.2)}`,\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n transform: 'scaleX(1.15) scaleY(1.2)',\n boxShadow: `0 3px 6px ${alpha(theme.palette.primary.main, 0.3)}`,\n },\n }),\n});\n\nconst SheetHandle: React.FC<{ isDraggable: boolean }> = ({ isDraggable }) => {\n const theme = useTheme();\n\n return (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n mb: 1,\n // The handle is decoration on a draggable header: the drag listeners sit\n // on the header itself, so letting the bar swallow the press would open\n // a dead zone in the middle of the grab target.\n pointerEvents: isDraggable ? 'none' : 'auto',\n }}\n >\n <Box sx={handleSx(theme, isDraggable)} />\n </Box>\n );\n};\n\nconst HEADER_DEFAULTS: Partial<SheetHeaderProps> = {\n isDraggable: false,\n dataTestId: 'sheet-header',\n};\n\nexport const SheetHeader: React.FC<SheetHeaderProps> = (props) => {\n const {\n title,\n description,\n showCloseButton,\n onClose,\n showHandle,\n isDraggable,\n onDragStart,\n className,\n style,\n children,\n dataTestId,\n } = withDefaults(props, HEADER_DEFAULTS);\n\n return (\n <Box\n className={className}\n data-testid={dataTestId}\n sx={{\n p: 2,\n pb: showHandle ? 1 : 2,\n cursor: isDraggable ? 'grab' : 'auto',\n '&:active': isDraggable ? { cursor: 'grabbing' } : {},\n ...style,\n }}\n onMouseDown={isDraggable ? onDragStart : undefined}\n onTouchStart={isDraggable ? onDragStart : undefined}\n >\n {showHandle && <SheetHandle isDraggable={Boolean(isDraggable)} />}\n\n <Box sx={{ display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between' }}>\n <Box sx={{ flex: 1 }}>\n {title && (\n <Typography variant=\"h6\" sx={{ fontWeight: 600 }} data-testid={`${dataTestId}-title`}>\n {title}\n </Typography>\n )}\n {description && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mt: 0.5 }}>\n {description}\n </Typography>\n )}\n {children}\n </Box>\n\n {showCloseButton && (\n <IconButton\n onClick={onClose}\n size=\"small\"\n sx={{ ml: 1, mt: -0.5 }}\n data-testid={`${dataTestId}-close-button`}\n >\n <CloseIcon data-testid={`${dataTestId}-close-icon`} />\n </IconButton>\n )}\n </Box>\n </Box>\n );\n};\n\nconst CONTENT_DEFAULTS: Partial<SheetContentProps> = {\n padded: true,\n dataTestId: 'sheet-content',\n};\n\nexport const SheetContent: React.FC<SheetContentProps> = (props) => {\n const { children, className, style, padded, dataTestId } = withDefaults(props, CONTENT_DEFAULTS);\n\n return (\n <Box\n className={className}\n data-testid={dataTestId}\n // No `minHeight: 0` here, deliberately: a flex item's automatic minimum\n // size only applies while its main-axis `overflow` is `visible`, and this\n // one is `auto`, so it already shrinks. `SheetBody` above is the item that\n // needs it stated.\n sx={{ flex: 1, overflow: 'auto', p: padded ? 2 : 0, ...style }}\n >\n {children}\n </Box>\n );\n};\n\nconst FOOTER_DEFAULTS: Partial<SheetFooterProps> = {\n sticky: false,\n divider: false,\n dataTestId: 'sheet-footer',\n};\n\nexport const SheetFooter: React.FC<SheetFooterProps> = (props) => {\n const { children, className, style, sticky, divider, dataTestId } = withDefaults(\n props,\n FOOTER_DEFAULTS,\n );\n\n return (\n <>\n {divider && <Divider />}\n <Box\n className={className}\n data-testid={dataTestId}\n sx={{\n p: 2,\n position: sticky ? 'sticky' : 'relative',\n bottom: sticky ? 0 : 'auto',\n backgroundColor: 'background.paper',\n borderTop: sticky ? '1px solid' : 'none',\n borderColor: 'divider',\n ...style,\n }}\n >\n {children}\n </Box>\n </>\n );\n};\n\nconst OVERLAY_DEFAULTS: Partial<SheetOverlayProps> = {\n open: false,\n blur: false,\n};\n\nexport const SheetOverlay: React.FC<SheetOverlayProps> = (props) => {\n const { open, onClick, className, style, blur } = withDefaults(props, OVERLAY_DEFAULTS);\n const theme = useTheme();\n\n return (\n <Fade in={open} timeout={300}>\n <Backdrop\n open={Boolean(open)}\n onClick={onClick}\n className={className}\n sx={{\n // One below the drawer: this backdrop replaces MUI's own (the drawer\n // is given a no-op BackdropComponent) and must sit under the panel.\n zIndex: theme.zIndex.drawer - 1,\n backgroundColor: scrim(theme, blur ? 0.6 : 0.5),\n backdropFilter: blur ? 'blur(8px) saturate(180%)' : 'none',\n WebkitBackdropFilter: blur ? 'blur(8px) saturate(180%)' : 'none',\n ...style,\n }}\n />\n </Fade>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA,OAAO,eAAe;AACtB,OAAO,cAAc;AACrB,OAAO,SAAS;AAChB,OAAO,aAAa;AACpB,OAAO,UAAU;AACjB,OAAO,gBAAgB;AACvB,OAAO,gBAAgB;AACvB,SAAS,OAAO,gBAAgB;AAwE1B,SA2GF,UA3GE,KA0CE,YA1CF;AApDN,IAAM,WAAW,CAAC,OAAc,iBAA0B;AAAA,EACxD,OAAO,cAAc,KAAK;AAAA,EAC1B,QAAQ,cAAc,IAAI;AAAA,EAC1B,iBAAiB,MAAM,MAAM,QAAQ,KAAK,SAAS,GAAG;AAAA,EACtD,cAAc;AAAA,EACd,YAAY,MAAM,YAAY,OAAO,CAAC,KAAK,GAAG;AAAA,IAC5C,UAAU,MAAM,YAAY,SAAS;AAAA,IACrC,QAAQ,MAAM,YAAY,OAAO;AAAA,EACnC,CAAC;AAAA,EACD,UAAU;AAAA,EACV,UAAU;AAAA,EACV,YAAY;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA;AAAA;AAAA,QAGR,MAAM,OAAO,GAAG,CAAC;AAAA;AAAA;AAAA,IAGrB,WAAW,cAAc,GAAG,gBAAgB,iBAAiB;AAAA,EAC/D;AAAA,EACA,GAAI,eAAe;AAAA,IACjB,iBAAiB,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG;AAAA,IACtD,WAAW,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAAA,IAC9D,WAAW;AAAA,MACT,iBAAiB,MAAM,QAAQ,QAAQ;AAAA,MACvC,WAAW;AAAA,MACX,WAAW,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAAA,IAChE;AAAA,EACF;AACF;AAEA,IAAM,cAAkD,CAAC,EAAE,YAAY,MAAM;AAC3E,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,IAAI;AAAA;AAAA;AAAA;AAAA,QAIJ,eAAe,cAAc,SAAS;AAAA,MACxC;AAAA,MAEA,8BAAC,OAAI,IAAI,SAAS,OAAO,WAAW,GAAG;AAAA;AAAA,EACzC;AAEJ;AAEA,IAAM,kBAA6C;AAAA,EACjD,aAAa;AAAA,EACb,YAAY;AACd;AAEO,IAAM,cAA0C,CAAC,UAAU;AAChE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa,OAAO,eAAe;AAEvC,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACb,IAAI;AAAA,QACF,GAAG;AAAA,QACH,IAAI,aAAa,IAAI;AAAA,QACrB,QAAQ,cAAc,SAAS;AAAA,QAC/B,YAAY,cAAc,EAAE,QAAQ,WAAW,IAAI,CAAC;AAAA,QACpD,GAAG;AAAA,MACL;AAAA,MACA,aAAa,cAAc,cAAc;AAAA,MACzC,cAAc,cAAc,cAAc;AAAA,MAEzC;AAAA,sBAAc,oBAAC,eAAY,aAAa,QAAQ,WAAW,GAAG;AAAA,QAE/D,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,cAAc,gBAAgB,gBAAgB,GACpF;AAAA,+BAAC,OAAI,IAAI,EAAE,MAAM,EAAE,GAChB;AAAA,qBACC,oBAAC,cAAW,SAAQ,MAAK,IAAI,EAAE,YAAY,IAAI,GAAG,eAAa,GAAG,UAAU,UACzE,iBACH;AAAA,YAED,eACC,oBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAAiB,IAAI,EAAE,IAAI,IAAI,GAC9D,uBACH;AAAA,YAED;AAAA,aACH;AAAA,UAEC,mBACC;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,MAAK;AAAA,cACL,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK;AAAA,cACtB,eAAa,GAAG,UAAU;AAAA,cAE1B,8BAAC,aAAU,eAAa,GAAG,UAAU,eAAe;AAAA;AAAA,UACtD;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAM,mBAA+C;AAAA,EACnD,QAAQ;AAAA,EACR,YAAY;AACd;AAEO,IAAM,eAA4C,CAAC,UAAU;AAClE,QAAM,EAAE,UAAU,WAAW,OAAO,QAAQ,WAAW,IAAI,aAAa,OAAO,gBAAgB;AAE/F,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MAKb,IAAI,EAAE,MAAM,GAAG,UAAU,QAAQ,GAAG,SAAS,IAAI,GAAG,GAAG,MAAM;AAAA,MAE5D;AAAA;AAAA,EACH;AAEJ;AAEA,IAAM,kBAA6C;AAAA,EACjD,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,cAA0C,CAAC,UAAU;AAChE,QAAM,EAAE,UAAU,WAAW,OAAO,QAAQ,SAAS,WAAW,IAAI;AAAA,IAClE;AAAA,IACA;AAAA,EACF;AAEA,SACE,iCACG;AAAA,eAAW,oBAAC,WAAQ;AAAA,IACrB;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,eAAa;AAAA,QACb,IAAI;AAAA,UACF,GAAG;AAAA,UACH,UAAU,SAAS,WAAW;AAAA,UAC9B,QAAQ,SAAS,IAAI;AAAA,UACrB,iBAAiB;AAAA,UACjB,WAAW,SAAS,cAAc;AAAA,UAClC,aAAa;AAAA,UACb,GAAG;AAAA,QACL;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;AAEA,IAAM,mBAA+C;AAAA,EACnD,MAAM;AAAA,EACN,MAAM;AACR;AAEO,IAAM,eAA4C,CAAC,UAAU;AAClE,QAAM,EAAE,MAAM,SAAS,WAAW,OAAO,KAAK,IAAI,aAAa,OAAO,gBAAgB;AACtF,QAAM,QAAQ,SAAS;AAEvB,SACE,oBAAC,QAAK,IAAI,MAAM,SAAS,KACvB;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,QAAQ,IAAI;AAAA,MAClB;AAAA,MACA;AAAA,MACA,IAAI;AAAA;AAAA;AAAA,QAGF,QAAQ,MAAM,OAAO,SAAS;AAAA,QAC9B,iBAAiB,MAAM,OAAO,OAAO,MAAM,GAAG;AAAA,QAC9C,gBAAgB,OAAO,6BAA6B;AAAA,QACpD,sBAAsB,OAAO,6BAA6B;AAAA,QAC1D,GAAG;AAAA,MACL;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/AlertDialog/AlertDialog.tsx"],"sourcesContent":["import Close from '@mui/icons-material/Close';\nimport Error from '@mui/icons-material/Error';\nimport Info from '@mui/icons-material/Info';\nimport type { ButtonProps } from '@mui/material/Button/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport DialogActions from '@mui/material/DialogActions/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport DialogContentText from '@mui/material/DialogContentText/index.js';\nimport DialogTitle from '@mui/material/DialogTitle/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, keyframes, styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { neutralTones } from '../../../tokens/ink';\n\nimport type { AlertDialogProps } from './AlertDialog.types';\nimport { rem } from '../../../tokens/relative';\n\n// Define pulse animation\nconst pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 15px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\nconst StyledDialog = styled(Dialog, {\n shouldForwardProp: (prop) => \n !['customVariant', 'glow', 'pulse'].includes(prop as string),\n})<{ \n customVariant?: string; \n glow?: boolean; \n pulse?: boolean; \n}>(({ theme, customVariant, glow, pulse }) => ({\n '& .MuiDialog-paper': {\n borderRadius: theme.spacing(2),\n transition: 'all 0.3s ease',\n position: 'relative',\n overflow: 'hidden',\n\n // Variant styles\n ...(customVariant === 'default' && {\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n\n // The error tint is LAYERED over the paper, not used as the background\n // itself: `alpha(error, 0.05)` alone leaves the panel 95% transparent, so\n // the page behind it showed straight through the question and its buttons.\n // A confirm nobody can read is the one dialog that must never be hard to\n // read. Same tint, opaque base.\n ...(customVariant === 'destructive' && {\n backgroundColor: theme.palette.background.paper,\n backgroundImage: `linear-gradient(${alpha(theme.palette.error.main, 0.05)}, ${alpha(\n theme.palette.error.main,\n 0.05,\n )})`,\n border: `1px solid ${alpha(theme.palette.error.main, 0.2)}`,\n }),\n\n ...(customVariant === 'glass' && {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n\n // Glow effect\n ...(glow && !pulse && {\n boxShadow: `0 0 30px 10px ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n }),\n\n // Pulse animation\n ...(pulse && !glow && {\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\n // Both glow and pulse\n ...(glow && pulse && {\n position: 'relative',\n boxShadow: `0 0 30px 10px ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\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 },\n}));\n\nconst StyledDialogTitle = styled(DialogTitle)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n paddingRight: theme.spacing(6), // Space for close button\n '& .MuiTypography-root': {\n fontWeight: 600,\n fontSize: rem(theme, 20),\n },\n}));\n\nconst StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n}));\n\nconst StyledDialogActions = styled(DialogActions)(({ theme }) => ({\n padding: theme.spacing(2, 3, 3, 3),\n gap: theme.spacing(1),\n}));\n\nconst CloseButton = styled(IconButton)(({ theme }) => ({\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: neutralTones(theme).muted,\n}));\n\n/**\n * Per-variant lookups, hoisted out of the render function. They depend on\n * nothing but their arguments, so keeping them at module scope means they are\n * not rebuilt on every render — and it keeps the component's own branch count\n * inside the repo's complexity budget.\n */\nconst variantIcon = (\n variant: AlertDialogProps['variant'],\n icon: AlertDialogProps['icon'],\n): React.ReactNode => {\n if (icon) return icon;\n return variant === 'destructive' ? <Error color=\"error\" /> : <Info color=\"primary\" />;\n};\n\n/**\n * Ids for the two elements that give the dialog its accessible name and\n * description. Derived from the test id so they are stable and unique per\n * dialog without a generated id that would change on every render.\n */\nconst titleId = (dataTestId: string): string => `${dataTestId}-title`;\nconst descriptionId = (dataTestId: string): string => `${dataTestId}-description`;\n\n/**\n * `alertdialog`, not `dialog`.\n *\n * This component interrupts what the operator was doing and will not go away\n * until they answer — which is exactly the distinction the two roles draw, and\n * it is what makes a screen reader announce the message itself on open rather\n * than just the dialog's name. MUI hardcodes `role=\"dialog\"` on the paper, so\n * it has to be overridden through the paper slot.\n */\nconst ALERT_ROLE = 'alertdialog';\n\n/**\n * The paper slot's a11y props: the role, plus the name and description wired to\n * the elements that actually carry them, so the announcement is the QUESTION\n * rather than the word \"dialog\".\n *\n * Both references are conditional — pointing `aria-labelledby` at an element\n * that was never rendered leaves a dangling id, which screen readers treat as\n * no name at all, i.e. worse than omitting it.\n */\nfunction ariaSlotProps(\n dataTestId: string,\n title: AlertDialogProps['title'],\n description: AlertDialogProps['description'],\n): { paper: Record<string, string> } {\n return {\n paper: {\n role: ALERT_ROLE,\n ...(title ? { 'aria-labelledby': titleId(dataTestId) } : {}),\n ...(description ? { 'aria-describedby': descriptionId(dataTestId) } : {}),\n },\n };\n}\n\n/** Both variants render a filled confirm; only the colour distinguishes them. */\nconst CONFIRM_BUTTON_VARIANT: ButtonProps['variant'] = 'contained';\nconst confirmButtonColor = (variant: AlertDialogProps['variant']): 'error' | 'primary' =>\n variant === 'destructive' ? 'error' : 'primary';\n\n/** Title row: the variant icon (unless explicitly suppressed with `null`) + the title. */\nfunction AlertDialogHeader({\n title,\n icon,\n variant,\n dataTestId,\n}: {\n title: AlertDialogProps['title'];\n icon: AlertDialogProps['icon'];\n variant: AlertDialogProps['variant'];\n dataTestId: string;\n}): React.ReactElement | null {\n if (!title) return null;\n return (\n <StyledDialogTitle id={titleId(dataTestId)} data-testid={`${dataTestId}-title`}>\n {icon !== null && (\n <span data-testid={`${dataTestId}-icon`}>{variantIcon(variant, icon)}</span>\n )}\n <Typography variant=\"h6\" component=\"span\">\n {title}\n </Typography>\n </StyledDialogTitle>\n );\n}\n\n/** Action row: the optional cancel button and the (variant-coloured) confirm. */\nfunction AlertDialogFooter({\n variant,\n cancelText = 'Cancel',\n confirmText = 'Confirm',\n showCancel = true,\n loading = false,\n confirmDisabled = false,\n initialFocus = 'confirm',\n onCancel,\n onConfirm,\n dataTestId,\n}: Pick<\n AlertDialogProps,\n | 'variant'\n | 'cancelText'\n | 'confirmText'\n | 'showCancel'\n | 'loading'\n | 'confirmDisabled'\n | 'initialFocus'\n> & {\n onCancel: () => void;\n onConfirm: () => void;\n dataTestId: string;\n}): React.ReactElement {\n return (\n <StyledDialogActions data-testid={`${dataTestId}-actions`}>\n {showCancel && (\n <Button\n onClick={onCancel}\n variant=\"outlined\"\n color=\"inherit\"\n disabled={loading}\n autoFocus={initialFocus === 'cancel'}\n data-testid={`${dataTestId}-cancel-button`}\n >\n {cancelText}\n </Button>\n )}\n <Button\n onClick={onConfirm}\n variant={CONFIRM_BUTTON_VARIANT}\n color={confirmButtonColor(variant)}\n disabled={confirmDisabled || loading}\n startIcon={\n loading ? (\n <CircularProgress\n size={16}\n color=\"inherit\"\n data-testid={`${dataTestId}-loading-spinner`}\n />\n ) : undefined\n }\n autoFocus={initialFocus !== 'cancel'}\n data-testid={`${dataTestId}-confirm-button`}\n >\n {confirmText}\n </Button>\n </StyledDialogActions>\n );\n}\n\nexport const AlertDialog = React.forwardRef<HTMLDivElement, AlertDialogProps>(\n ({\n variant = 'default',\n glow = false,\n pulse = false,\n title,\n description,\n icon,\n cancelText,\n confirmText,\n onCancel,\n onConfirm,\n showCancel,\n loading,\n confirmDisabled,\n initialFocus,\n children,\n onClose,\n 'data-testid': dataTestId = 'alert-dialog',\n ...props\n }, ref) => {\n const handleCancel = () => {\n onCancel?.();\n onClose?.({}, 'backdropClick');\n };\n\n return (\n <StyledDialog\n ref={ref}\n customVariant={variant}\n glow={glow}\n pulse={pulse}\n onClose={onClose}\n data-testid={dataTestId}\n slotProps={ariaSlotProps(dataTestId, title, description)}\n {...props}\n >\n <CloseButton\n aria-label=\"close\"\n onClick={handleCancel}\n size=\"small\"\n data-testid={`${dataTestId}-close-button`}\n >\n <Close />\n </CloseButton>\n\n <AlertDialogHeader\n title={title}\n icon={icon}\n variant={variant}\n dataTestId={dataTestId}\n />\n\n <StyledDialogContent data-testid={`${dataTestId}-content`}>\n {description && (\n <DialogContentText\n id={descriptionId(dataTestId)}\n data-testid={`${dataTestId}-description`}\n >\n {description}\n </DialogContentText>\n )}\n {children}\n </StyledDialogContent>\n\n <AlertDialogFooter\n variant={variant}\n cancelText={cancelText}\n confirmText={confirmText}\n showCancel={showCancel}\n loading={loading}\n confirmDisabled={confirmDisabled}\n initialFocus={initialFocus}\n onCancel={handleCancel}\n onConfirm={() => onConfirm?.()}\n dataTestId={dataTestId}\n />\n </StyledDialog>\n );\n }\n);\n\nAlertDialog.displayName = 'AlertDialog';"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Carousel/Carousel.parts.tsx"],"sourcesContent":["import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nimport FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord';\nimport Box from '@mui/material/Box/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport { neutralTones } from '../../../tokens/ink';\nimport { accentFor, muiSize, rem } from '../../../tokens/scales';\n\nimport type {\n CarouselArrowsProps,\n CarouselIndicatorsProps,\n CarouselItem,\n CarouselThumbnailsProps,\n} from './Carousel.types';\n\ntype IndicatorPosition = NonNullable<CarouselIndicatorsProps['position']>;\ntype IndicatorVariant = NonNullable<CarouselIndicatorsProps['variant']>;\ntype Color = NonNullable<CarouselIndicatorsProps['color']>;\n\n/** Fires `onSelect` for the keys a native button would treat as activation. */\nconst activateOnKey = (onSelect: () => void) => (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect();\n }\n};\n\nconst INDICATOR_POSITIONS = (theme: Theme): Record<IndicatorPosition, CSSObject> => ({\n top: { top: theme.spacing(2), left: '50%', transform: 'translateX(-50%)' },\n bottom: { bottom: theme.spacing(2), left: '50%', transform: 'translateX(-50%)' },\n left: {\n left: theme.spacing(2),\n top: '50%',\n transform: 'translateY(-50%)',\n flexDirection: 'column',\n },\n right: {\n right: theme.spacing(2),\n top: '50%',\n transform: 'translateY(-50%)',\n flexDirection: 'column',\n },\n});\n\ninterface IndicatorProps {\n index: number;\n isActive: boolean;\n color: Color;\n onSelect: () => void;\n}\n\n/** Attributes every indicator variant carries, whatever it draws. */\nconst indicatorAttrs = (index: number, isActive: boolean) => ({\n 'aria-label': `Go to slide ${index + 1}`,\n 'data-testid': `carousel-indicator-${index}`,\n 'data-active': isActive,\n});\n\nconst LineIndicator: React.FC<IndicatorProps> = ({ index, isActive, color, onSelect }) => {\n const theme = useTheme();\n\n return (\n <Box\n role=\"button\"\n tabIndex={0}\n {...indicatorAttrs(index, isActive)}\n sx={{\n width: isActive ? 30 : 20,\n height: 3,\n backgroundColor: isActive\n ? accentFor(theme, color).main\n : alpha(accentFor(theme, color).main, 0.3),\n borderRadius: 1.5,\n transition: theme.transitions.create(['width', 'background-color']),\n cursor: 'pointer',\n }}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n />\n );\n};\n\nconst NumberIndicator: React.FC<IndicatorProps> = ({ index, isActive, color, onSelect }) => {\n const theme = useTheme();\n\n return (\n <Box\n role=\"button\"\n tabIndex={0}\n {...indicatorAttrs(index, isActive)}\n sx={{\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '50%',\n backgroundColor: isActive ? accentFor(theme, color).main : 'transparent',\n color: isActive ? accentFor(theme, color).contrastText : accentFor(theme, color).main,\n border: `1px solid ${accentFor(theme, color).main}`,\n fontSize: rem(theme, 12),\n fontWeight: isActive ? 'bold' : 'normal',\n cursor: 'pointer',\n transition: theme.transitions.create(['all']),\n }}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n >\n {index + 1}\n </Box>\n );\n};\n\nconst DotIndicator: React.FC<IndicatorProps> = ({ index, isActive, color, onSelect }) => {\n const theme = useTheme();\n\n return (\n <IconButton\n size=\"small\"\n {...indicatorAttrs(index, isActive)}\n onClick={onSelect}\n sx={{\n p: 0.5,\n color: isActive ? accentFor(theme, color).main : alpha(accentFor(theme, color).main, 0.3),\n transform: isActive ? 'scale(1.2)' : 'scale(1)',\n transition: theme.transitions.create(['transform', 'color']),\n }}\n >\n <FiberManualRecordIcon fontSize=\"small\" />\n </IconButton>\n );\n};\n\nconst INDICATORS: Record<IndicatorVariant, React.FC<IndicatorProps>> = {\n lines: LineIndicator,\n numbers: NumberIndicator,\n dots: DotIndicator,\n};\n\nconst INDICATORS_DEFAULTS = {\n position: 'bottom',\n color: 'primary',\n variant: 'dots',\n} satisfies Partial<CarouselIndicatorsProps>;\n\nexport const CarouselIndicators: React.FC<CarouselIndicatorsProps> = (props) => {\n const { count, activeIndex, onSelect, position, color, variant, className, style } = withDefaults(\n props,\n INDICATORS_DEFAULTS,\n ) as CarouselIndicatorsProps & Required<Pick<CarouselIndicatorsProps, keyof typeof INDICATORS_DEFAULTS>>;\n\n const theme = useTheme();\n const Indicator = INDICATORS[variant] ?? DotIndicator;\n\n return (\n <Box\n className={className}\n data-testid=\"carousel-indicators\"\n sx={{\n position: 'absolute',\n display: 'flex',\n gap: 1,\n zIndex: 2,\n ...(INDICATOR_POSITIONS(theme)[position] ?? INDICATOR_POSITIONS(theme).bottom),\n ...style,\n }}\n >\n {Array.from({ length: count }).map((_, index) => (\n <Indicator\n key={index}\n index={index}\n isActive={index === activeIndex}\n color={color}\n onSelect={() => onSelect(index)}\n />\n ))}\n </Box>\n );\n};\n\nconst ARROWS_DEFAULTS = {\n position: 'overlay',\n disabled: false,\n disablePrev: false,\n disableNext: false,\n color: 'primary',\n size: 'md',\n} satisfies Partial<CarouselArrowsProps>;\n\n/**\n * All three positions place the arrow the same way; only `overlay` fades it back\n * until hovered, and only `outside` sits it clear of the frame.\n */\nconst arrowSx = (theme: Theme, color: Color, isOverlay: boolean): CSSObject => ({\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 3,\n backgroundColor: alpha(theme.palette.background.paper, 0.8),\n color: accentFor(theme, color).main,\n '&:disabled': { opacity: 0.3 },\n ...(isOverlay\n ? {\n opacity: 0.7,\n '&:hover': { backgroundColor: theme.palette.background.paper, opacity: 1 },\n }\n : { '&:hover': { backgroundColor: theme.palette.background.paper } }),\n});\n\nexport const CarouselArrows: React.FC<CarouselArrowsProps> = (props) => {\n const {\n copy, onPrev, onNext, position, disabled, disablePrev, disableNext, color, size, className,\n style,\n } = withDefaults(props, ARROWS_DEFAULTS) as CarouselArrowsProps &\n Required<Pick<CarouselArrowsProps, keyof typeof ARROWS_DEFAULTS>>;\n\n const theme = useTheme();\n const sx = arrowSx(theme, color, position === 'overlay');\n const offset = position === 'outside' ? -40 : 8;\n\n return (\n <Box data-testid=\"carousel-navigation\">\n <IconButton\n onClick={onPrev}\n disabled={disabled || disablePrev}\n size={muiSize(size)}\n className={className}\n aria-label={copy.previous}\n data-testid=\"carousel-prev-button\"\n sx={{ ...sx, left: offset, ...style }}\n >\n <ArrowBackIosIcon />\n </IconButton>\n\n <IconButton\n onClick={onNext}\n disabled={disabled || disableNext}\n aria-label={copy.next}\n size={muiSize(size)}\n className={className}\n data-testid=\"carousel-next-button\"\n sx={{ ...sx, right: offset, ...style }}\n >\n <ArrowForwardIosIcon />\n </IconButton>\n </Box>\n );\n};\n\nconst THUMBNAIL_SIZES = { xs: 40, sm: 60, md: 80, lg: 100, xl: 120 } as const;\nconst DEFAULT_THUMBNAIL_SIZE = 60;\n\nconst Thumbnail: React.FC<{\n item: CarouselItem;\n index: number;\n isActive: boolean;\n side: number;\n onSelect: () => void;\n}> = ({ item, index, isActive, side, onSelect }) => {\n const theme = useTheme();\n\n return (\n <Box\n onClick={onSelect}\n data-testid={`carousel-thumbnail-${index}`}\n data-active={isActive}\n sx={{\n width: side,\n height: side,\n border: `2px solid ${isActive ? theme.palette.primary.main : 'transparent'}`,\n borderRadius: 1,\n overflow: 'hidden',\n cursor: 'pointer',\n opacity: isActive ? 1 : 0.6,\n transition: theme.transitions.create(['opacity', 'border-color']),\n '&:hover': { opacity: 1 },\n }}\n >\n {item.image ? (\n <Box\n component=\"img\"\n src={item.image}\n alt={item.alt || item.title}\n sx={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n ) : (\n // No image to show, so the slide's number stands in for it.\n <Box\n sx={{\n width: '100%',\n height: '100%',\n backgroundColor: neutralTones(theme).track,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography variant=\"caption\">{index + 1}</Typography>\n </Box>\n )}\n </Box>\n );\n};\n\nexport const CarouselThumbnails: React.FC<CarouselThumbnailsProps> = ({\n items,\n activeIndex,\n onSelect,\n size = 'sm',\n className,\n style,\n}) => {\n const theme = useTheme();\n const side = THUMBNAIL_SIZES[size as keyof typeof THUMBNAIL_SIZES] ?? DEFAULT_THUMBNAIL_SIZE;\n\n return (\n <Box\n className={className}\n data-testid=\"carousel-thumbnails\"\n sx={{\n position: 'absolute',\n // Hung below the frame, clear of its own height plus a gap.\n bottom: -side - 16,\n left: '50%',\n transform: 'translateX(-50%)',\n display: 'flex',\n gap: 1,\n p: 1,\n backgroundColor: alpha(theme.palette.background.paper, 0.9),\n borderRadius: 1,\n ...style,\n }}\n >\n {items.map((item, index) => (\n <Thumbnail\n key={item.id}\n item={item}\n index={index}\n isActive={index === activeIndex}\n side={side}\n onSelect={() => onSelect(index)}\n />\n ))}\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/EmptyState/EmptyState.tsx"],"sourcesContent":["import AddIcon from '@mui/icons-material/Add';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport Link from '@mui/material/Link/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { type ActionIconName, type ActionSpec, actionsOf, makeTestId } from './EmptyState.helpers';\nimport {\n ACTION_MIN_WIDTH,\n ACTIONS_GAP_UNITS,\n ACTIONS_MARGIN_TOP_UNITS,\n CONTENT_GAP_UNITS,\n DESCRIPTION_LINE_HEIGHT,\n DESCRIPTION_MAX_WIDTH,\n EMPTY_STATE_GAP_UNITS,\n EMPTY_STATE_MIN_HEIGHT,\n EMPTY_STATE_PADDING_UNITS,\n EXTERNAL_LINK_MARK,\n HELP_LINK_MARGIN_TOP_UNITS,\n illustrationMaxWidth,\n illustrationOpacity,\n TITLE_MAX_WIDTH,\n} from './EmptyState.metrics';\nimport type { EmptyStateProps, EmptyStateVariant } from './EmptyState.types';\nimport { resolveTestId } from '../../../platform/test-id';\n\n/** The shared action list names its glyph; the web draws it with MUI's icon. */\nconst ACTION_ICONS: Record<ActionIconName, React.ReactNode> = {\n Add: <AddIcon />,\n Refresh: <RefreshIcon />,\n};\n\nconst Illustration: React.FC<{\n illustration: React.ReactNode;\n variant: EmptyStateVariant;\n testId: string;\n}> = ({ illustration, variant, testId }) => (\n <Box\n data-testid={testId}\n sx={{\n maxWidth: illustrationMaxWidth(variant),\n width: '100%',\n height: 'auto',\n opacity: illustrationOpacity(variant),\n display: variant === 'minimal' ? 'none' : 'block',\n }}\n >\n {illustration}\n </Box>\n);\n\nconst Actions: React.FC<{\n specs: ActionSpec[];\n testId: (suffix: string) => string;\n}> = ({ specs, testId }) => {\n const theme = useTheme();\n\n return (\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n spacing={ACTIONS_GAP_UNITS}\n alignItems=\"center\"\n sx={{ mt: theme.spacing(ACTIONS_MARGIN_TOP_UNITS) }}\n >\n {specs.map((spec) => (\n <Button\n key={spec.key}\n variant={spec.variant}\n onClick={spec.onClick}\n startIcon={spec.icon && ACTION_ICONS[spec.icon]}\n data-testid={testId(spec.key)}\n sx={{ minWidth: ACTION_MIN_WIDTH }}\n >\n {spec.label}\n </Button>\n ))}\n </Stack>\n );\n};\n\nconst HelpLink: React.FC<{\n helpLink: NonNullable<EmptyStateProps['helpLink']>;\n testId: string;\n}> = ({ helpLink, testId }) => {\n const theme = useTheme();\n\n return (\n <Link\n href={helpLink.href}\n target={helpLink.external ? '_blank' : undefined}\n rel={helpLink.external ? 'noopener noreferrer' : undefined}\n data-testid={testId}\n sx={{\n mt: theme.spacing(HELP_LINK_MARGIN_TOP_UNITS),\n color: theme.palette.primary.main,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n }}\n >\n {helpLink.label}\n {helpLink.external && EXTERNAL_LINK_MARK}\n </Link>\n );\n};\n\nconst Content: React.FC<{\n title: string;\n description?: string;\n titleId: string;\n testId: (suffix: string) => string;\n actions: ActionSpec[];\n showActions: boolean;\n helpLink?: EmptyStateProps['helpLink'];\n}> = ({ title, description, titleId, testId, actions, showActions, helpLink }) => {\n const theme = useTheme();\n\n return (\n <Stack spacing={CONTENT_GAP_UNITS} alignItems=\"center\">\n <Typography\n id={titleId}\n variant=\"h6\"\n component=\"h3\"\n data-testid={testId('title')}\n sx={{\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.palette.text.primary,\n maxWidth: TITLE_MAX_WIDTH,\n }}\n >\n {title}\n </Typography>\n\n {description && (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n data-testid={testId('description')}\n sx={{\n maxWidth: DESCRIPTION_MAX_WIDTH,\n lineHeight: DESCRIPTION_LINE_HEIGHT,\n }}\n >\n {description}\n </Typography>\n )}\n\n {showActions && <Actions specs={actions} testId={testId} />}\n\n {helpLink && <HelpLink helpLink={helpLink} testId={testId('help-link')} />}\n </Stack>\n );\n};\n\nexport const EmptyState: React.FC<EmptyStateProps> = React.memo((props) => {\n const {\n variant = 'default',\n title,\n description,\n illustration,\n helpLink,\n refreshLabel = 'Refresh',\n createLabel = 'Create New',\n className,\n } = props;\n const theme = useTheme();\n const titleId = React.useId();\n // `dataTestId` is the documented spelling; `testID`, the shared contract's\n // other one, resolves to the same id.\n const dataTestId = resolveTestId(props);\n const testId = makeTestId(dataTestId);\n\n const actions = actionsOf(props, refreshLabel, createLabel);\n // The `action` variant reserves the action row even when nothing fills it.\n const showActions = variant === 'action' || actions.length > 0;\n\n return (\n <Box\n role=\"region\"\n aria-labelledby={titleId}\n className={className}\n data-testid={dataTestId || 'empty-state'}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: theme.spacing(EMPTY_STATE_PADDING_UNITS),\n minHeight: EMPTY_STATE_MIN_HEIGHT,\n gap: theme.spacing(EMPTY_STATE_GAP_UNITS),\n }}\n >\n {/* Illustration */}\n {illustration && (\n <Illustration\n illustration={illustration}\n variant={variant}\n testId={testId('icon')}\n />\n )}\n\n {/* Content */}\n <Content\n title={title}\n description={description}\n titleId={titleId}\n testId={testId}\n actions={actions}\n showActions={showActions}\n helpLink={helpLink}\n />\n </Box>\n );\n});\n\nEmptyState.displayName = 'EmptyState';\n\nexport default EmptyState;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Tooltip/Tooltip.tsx"],"sourcesContent":["import MuiTooltip from '@mui/material/Tooltip/index.js';\nimport { alpha, keyframes, styled } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { TooltipProps } from './Tooltip.types';\nimport { absoluteInk, neutralTones } from '../../../tokens/ink';\nimport { sxRem } from '../../../tokens/relative';\n\n// Define pulse animation\nconst pulseAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 70% {\n transform: scale(1.05);\n opacity: 0.8;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n`;\n\nconst SIZE_MAP = {\n sm: { fontSize: sxRem(12), padding: '4px 8px' },\n md: { fontSize: sxRem(14), padding: '6px 12px' },\n lg: { fontSize: sxRem(16), padding: '8px 16px' },\n} as const;\n\nconst getSizeStyles = (size?: string): { fontSize: (theme: Theme) => string; padding: string } =>\n SIZE_MAP[size as keyof typeof SIZE_MAP] || SIZE_MAP.md;\n\nconst variantStyles = (theme: Theme, variant?: string): CSSObject => {\n switch (variant) {\n case 'default':\n return {\n backgroundColor: alpha(neutralTones(theme).inverseSurface, 0.9),\n color: absoluteInk(theme).white,\n };\n case 'dark':\n return {\n backgroundColor: neutralTones(theme).inverseSurface,\n color: absoluteInk(theme).white,\n };\n case 'light':\n return {\n backgroundColor: absoluteInk(theme).white,\n color: theme.palette.text.primary,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.shadows[4],\n };\n case 'glass':\n return {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n color: theme.palette.text.primary,\n };\n default:\n return {};\n }\n};\n\n// glow and pulse are independent flags. The three combinations used to be spelled\n// out one by one, but each is just the union of whichever flags are set.\nconst emphasisStyles = (theme: Theme, glow?: boolean, pulse?: boolean): CSSObject => ({\n ...(glow && {\n boxShadow: `0 0 15px 3px ${alpha(theme.palette.primary.main, 0.4)} !important`,\n filter: 'brightness(1.05)',\n }),\n ...(pulse && {\n animation: `${pulseAnimation} 2s infinite`,\n }),\n});\n\nconst arrowColor = (theme: Theme, variant?: string): string => {\n switch (variant) {\n case 'light':\n return absoluteInk(theme).white;\n case 'glass':\n return alpha(theme.palette.background.paper, 0.1);\n case 'dark':\n return neutralTones(theme).inverseSurface;\n default:\n return alpha(neutralTones(theme).inverseSurface, 0.9);\n }\n};\n\nconst StyledTooltip = styled(MuiTooltip, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'customSize', 'glow', 'pulse'].includes(prop as string),\n})<{\n customVariant?: string;\n customSize?: string;\n glow?: boolean;\n pulse?: boolean;\n}>(({ theme, customVariant, customSize, glow, pulse }) => {\n const sizeStyles = getSizeStyles(customSize);\n\n return {\n '& .MuiTooltip-tooltip': {\n borderRadius: theme.spacing(1),\n fontSize: sizeStyles.fontSize(theme),\n padding: sizeStyles.padding,\n fontWeight: 500,\n transition: 'all 0.3s ease',\n position: 'relative',\n overflow: 'hidden',\n ...variantStyles(theme, customVariant),\n ...emphasisStyles(theme, glow, pulse),\n },\n\n '& .MuiTooltip-arrow': {\n color: arrowColor(theme, customVariant),\n },\n };\n});\n\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n variant = 'default',\n size = 'md',\n glow = false,\n pulse = false,\n maxWidth = 300,\n dataTestId,\n children,\n ...props\n },\n ref,\n ) => {\n const childWithTestId = dataTestId\n ? React.cloneElement(children as React.ReactElement<{ 'data-testid'?: string }>, {\n 'data-testid': `${dataTestId}-trigger`,\n })\n : children;\n\n return (\n <StyledTooltip\n ref={ref}\n customVariant={variant}\n customSize={size}\n glow={glow}\n pulse={pulse}\n enterDelay={0}\n leaveDelay={0}\n disableHoverListener={false}\n disableFocusListener={false}\n disableTouchListener={false}\n slotProps={{\n tooltip: {\n sx: { maxWidth },\n role: 'tooltip',\n ...(dataTestId && { 'data-testid': `${dataTestId}-content` }),\n },\n }}\n {...props}\n >\n {childWithTestId}\n </StyledTooltip>\n );\n },\n);\n\nTooltip.displayName = 'Tooltip';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Timeline/TimelineRow.tsx"],"sourcesContent":["import DotIcon from '@mui/icons-material/Circle';\nimport ExpandIcon from '@mui/icons-material/ExpandMore';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport Card from '@mui/material/Card/index.js';\nimport CardContent from '@mui/material/CardContent/index.js';\nimport Chip from '@mui/material/Chip/index.js';\nimport Collapse from '@mui/material/Collapse/index.js';\nimport Fade from '@mui/material/Fade/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, keyframes, styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { TimelineItem, TimelineProps } from './Timeline.types';\nimport { onMedia, uiInk } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\nconst slideInAnimation = keyframes`from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); }`;\nconst pulseAnimation = keyframes`0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.1); opacity: 0.8; }`;\n\nconst TimelineItemContainer = styled(Box, {\n shouldForwardProp: (prop) => !['animated', 'alternating', 'index'].includes(prop as string),\n})<{\n animated: boolean;\n alternating: boolean;\n index: number;\n orientation: 'vertical' | 'horizontal';\n}>(({ theme, animated, alternating, index, orientation }) => ({\n display: 'flex',\n gap: theme.spacing(2),\n position: 'relative',\n ...(animated && {\n animation: `${slideInAnimation} 0.5s ease ${index * 0.1}s both`,\n }),\n ...(orientation === 'vertical' &&\n alternating && {\n flexDirection: index % 2 === 0 ? 'row' : 'row-reverse',\n textAlign: index % 2 === 0 ? 'left' : 'right',\n }),\n ...(orientation === 'horizontal' && {\n flexDirection: 'column',\n alignItems: 'center',\n minWidth: 280,\n }),\n}));\n\nconst TimelineConnector = styled(Box, {\n shouldForwardProp: (prop) => !['isLast'].includes(prop as string),\n})<{\n orientation: 'vertical' | 'horizontal';\n isLast: boolean;\n}>(({ theme, orientation, isLast }) => ({\n position: 'absolute',\n background: `linear-gradient(180deg, ${theme.palette.primary.main} 0%, ${alpha(theme.palette.primary.main, 0.3)} 100%)`,\n ...(orientation === 'vertical'\n ? {\n width: 2,\n height: isLast ? 0 : 'calc(100% + 16px)',\n left: 19,\n top: 40,\n }\n : {\n height: 2,\n width: isLast ? 0 : '240px',\n top: 19,\n left: 40,\n }),\n}));\n\nconst TimelineDot = styled(Box, {\n shouldForwardProp: (prop) => !['dotColor', 'hasIcon', 'animated'].includes(prop as string),\n})<{ dotColor?: string; hasIcon: boolean; animated: boolean }>(({ theme, dotColor, hasIcon, animated }) => ({\n width: 40,\n height: 40,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: dotColor\n ? `linear-gradient(135deg, ${dotColor} 0%, ${alpha(dotColor, 0.8)} 100%)`\n : `linear-gradient(135deg, ${theme.palette.primary.main} 0%, ${theme.palette.primary.light} 100%)`,\n boxShadow: `0 4px 12px ${alpha(dotColor || theme.palette.primary.main, 0.3)}`,\n border: `2px solid ${theme.palette.background.paper}`,\n zIndex: 1,\n flexShrink: 0,\n ...(animated && {\n animation: `${pulseAnimation} 2s ease infinite`,\n }),\n '& svg': {\n fontSize: rem(theme, hasIcon ? 19.2 : 12.8),\n color: theme.palette.background.paper,\n },\n}));\n\nconst TimelineCard = styled(Card, {\n shouldForwardProp: (prop) => !['timelineVariant', 'isClickable'].includes(prop as string),\n})<{ timelineVariant: 'default' | 'compact' | 'detailed'; isClickable: boolean }>(\n ({ theme, timelineVariant, isClickable }) => ({\n flex: 1,\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.9)} 0%, ${alpha(theme.palette.background.paper, 0.8)} 100%)`,\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n transition: theme.transitions.create(['transform', 'box-shadow']),\n ...(isClickable && {\n cursor: 'pointer',\n '&:hover': {\n transform: 'translateY(-2px)',\n boxShadow: theme.shadows[8],\n },\n }),\n ...(timelineVariant === 'compact' && {\n padding: theme.spacing(1.5),\n '& .MuiCardContent-root': {\n padding: 0,\n '&:last-child': {\n paddingBottom: 0,\n },\n },\n }),\n }),\n);\n\nconst TimelineTimestamp = styled(Typography)(({ theme }) => ({\n color: theme.palette.text.secondary,\n fontSize: rem(theme, 12),\n fontWeight: 500,\n letterSpacing: '0.5px',\n textTransform: 'uppercase',\n}));\n\nconst MetadataChip = styled(Chip)(({ theme }) => ({\n height: 24,\n fontSize: rem(theme, 12),\n background: alpha(theme.palette.primary.main, 0.08),\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n}));\n\n// Description, metadata chips and the action button, revealed on expand — or\n// always, in the detailed variant.\nconst TimelineDetails: React.FC<{\n item: TimelineItem;\n isExpanded: boolean;\n variant: NonNullable<TimelineProps['variant']>;\n}> = ({ item, isExpanded, variant }) => {\n const open = isExpanded || variant === 'detailed';\n\n return (\n <Collapse in={open}>\n <Fade in={open}>\n <Stack spacing={1.5} sx={{ mt: 1 }}>\n {item.description && (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {item.description}\n </Typography>\n )}\n\n {item.metadata && (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1 }}>\n {Object.entries(item.metadata).map(([key, value]) => (\n <MetadataChip key={key} label={`${key}: ${value}`} size=\"small\" />\n ))}\n </Box>\n )}\n\n {item.action && (\n <Box>\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={(e) => {\n e.stopPropagation();\n item.action!.onClick();\n }}\n sx={(theme) => ({\n background: `linear-gradient(135deg, ${uiInk(theme).celebration.violet[0]} 0%, ${uiInk(theme).celebration.violet[1]} 100%)`,\n color: onMedia(theme),\n })}\n >\n {item.action.label}\n </Button>\n </Box>\n )}\n </Stack>\n </Fade>\n </Collapse>\n );\n};\n\n// Timestamp, title and the expand toggle.\nconst TimelineCardHeader: React.FC<{\n item: TimelineItem;\n variant: NonNullable<TimelineProps['variant']>;\n isExpanded: boolean;\n onExpandClick: (itemId: string, event: React.MouseEvent) => void;\n}> = ({ item, variant, isExpanded, onExpandClick }) => (\n <Box\n sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}\n >\n <Box sx={{ flex: 1 }}>\n <TimelineTimestamp data-testid=\"timeline-timestamp\">\n {item.timestamp}\n </TimelineTimestamp>\n <Typography\n variant={variant === 'compact' ? 'body2' : 'h6'}\n fontWeight={variant === 'compact' ? 500 : 600}\n sx={{ mt: 0.5 }}\n >\n {item.title}\n </Typography>\n </Box>\n {item.description && variant !== 'compact' && (\n <IconButton\n size=\"small\"\n onClick={(e) => onExpandClick(item.id, e)}\n aria-label={isExpanded ? 'Collapse item details' : 'Expand item details'}\n sx={{\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.3s ease',\n }}\n >\n <ExpandIcon />\n </IconButton>\n )}\n </Box>\n);\n\n// The card beside the rail: timestamp, title, expand toggle and the collapsible\n// detail body.\nconst TimelineRowCard: React.FC<{\n item: TimelineItem;\n variant: NonNullable<TimelineProps['variant']>;\n isClickable: boolean;\n isExpanded: boolean;\n onItemClick?: (item: TimelineItem) => void;\n onExpandClick: (itemId: string, event: React.MouseEvent) => void;\n}> = ({ item, variant, isClickable, isExpanded, onItemClick, onExpandClick }) => (\n <TimelineCard\n timelineVariant={variant}\n isClickable={isClickable}\n onClick={isClickable ? () => onItemClick?.(item) : undefined}\n role=\"article\"\n aria-label={`Timeline item: ${item.title}`}\n data-testid=\"timeline-card\"\n >\n <CardContent>\n <Stack spacing={1}>\n <TimelineCardHeader\n item={item}\n variant={variant}\n isExpanded={isExpanded}\n onExpandClick={onExpandClick}\n />\n\n {variant === 'compact' && item.description && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {item.description}\n </Typography>\n )}\n\n {variant !== 'compact' && (\n <TimelineDetails item={item} isExpanded={isExpanded} variant={variant} />\n )}\n </Stack>\n </CardContent>\n </TimelineCard>\n);\n\n// One entry: the dot and connector on the rail, and the card beside it.\nexport const TimelineRow: React.FC<{\n item: TimelineItem;\n index: number;\n isLast: boolean;\n variant: NonNullable<TimelineProps['variant']>;\n orientation: 'vertical' | 'horizontal';\n showConnector: boolean;\n animated: boolean;\n alternating: boolean;\n isExpanded: boolean;\n onItemClick?: (item: TimelineItem) => void;\n onExpandClick: (itemId: string, event: React.MouseEvent) => void;\n}> = ({\n item,\n index,\n isLast,\n variant,\n orientation,\n showConnector,\n animated,\n alternating,\n isExpanded,\n onItemClick,\n onExpandClick,\n}) => {\n\n \n // Determine if item should be clickable:\n // - Has onItemClick callback, OR\n // - Has description and variant is not compact (so it can be expanded)\n const hasExpandableContent = item.description && variant !== 'compact';\n const isClickable = !!onItemClick || !!hasExpandableContent;\n\n return (\n <TimelineItemContainer\n key={item.id}\n animated={animated}\n alternating={alternating && orientation === 'vertical'}\n index={index}\n orientation={orientation}\n data-testid=\"timeline-item-container\"\n >\n <Box sx={{ position: 'relative' }}>\n <TimelineDot\n dotColor={item.color}\n hasIcon={!!item.icon}\n animated={animated}\n data-testid=\"timeline-dot\"\n >\n {item.icon ? (\n <Box data-testid=\"item-icon\">{item.icon}</Box>\n ) : (\n <DotIcon data-testid=\"item-icon-default\" />\n )}\n </TimelineDot>\n {showConnector && !isLast && (\n <TimelineConnector\n orientation={orientation}\n isLast={isLast}\n data-testid=\"timeline-connector\"\n />\n )}\n </Box>\n\n <TimelineRowCard\n item={item}\n variant={variant}\n isClickable={isClickable}\n isExpanded={isExpanded}\n onItemClick={onItemClick}\n onExpandClick={onExpandClick}\n />\n </TimelineItemContainer>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/card-surface.ts"],"sourcesContent":["import { alpha, keyframes, type CSSObject, type Theme } from \"@mui/material/styles/index.js\";\n\nimport { fadeInScaleAnimation } from \"../Badge/Badge.animations\";\nimport { shadowInk } from \"../../../tokens/ink\";\n\n/**\n * A plain style object, not MUI's `SxProps`.\n *\n * `SxProps` is a union including arrays and functions, so a value typed as one\n * cannot be spread — and these fragments exist precisely to be merged. Note also\n * that `Card` merges by SPREADING (`sx={{ ...defaults, ...sx }}`), so handing it\n * a function yields nothing at all: resolve the theme with `useTheme` first.\n */\ntype CardSx = CSSObject | Record<string, unknown>;\n\n/** The ring, as scale + opacity so it never leaves the compositor. */\nconst pulseRing = keyframes`\n 0% { transform: scale(1); opacity: 0.9; }\n 70% { transform: scale(1.04); opacity: 0; }\n 100% { transform: scale(1.04); opacity: 0; }\n`;\n\n/**\n * THE CONTRACT BOTH CARDS IMPLEMENT.\n *\n * `BaseCard` (a tile) and `BaseListCard` (a row) are one object seen from two\n * angles, so the surface — variant, colour, selectability, draggability,\n * emphasis and state — is declared once and spread into both.\n */\n\n/**\n * How much chrome the surface claims. Button's vocabulary, spelled Button's\n * way: a card and a button are both surfaces the operator presses, and having\n * one say `outline` while the other says `outlined` taxes everyone who writes\n * both. Chip's `filled | outlined` was the wrong model — a chip is a token in a\n * sentence and has only those two things to say.\n */\nexport type CardSurfaceVariant = \"outline\" | \"ghost\" | \"text\" | \"glass\";\n\n/** The theme colour a card's selection and emphasis are drawn in. */\nexport type CardSurfaceColor =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\";\n\n/**\n * Why this card is asking to be noticed.\n *\n * ONE union, not six booleans. `glow`/`pulse`/`animate`/`bounce`/`shimmer`\n * combined into 32 states of which about three meant anything —\n * `pulse + shimmer + bounce` is not a thing anyone wants, and every one of\n * those combinations was a state somebody could reach by accident.\n */\nexport type CardEmphasis =\n /** Nothing. The overwhelming default. */\n | \"none\"\n /** Look here now: an accent bar, and a ring that beats six times and settles. */\n | \"attention\"\n /** This just arrived: an accent bar and one fade-in. */\n | \"new\";\n\n/** A row and a tile carry emphasis differently — see `emphasisSx`. */\ntype CardShape = \"row\" | \"tile\";\n\n/**\n * What this record IS, as opposed to how it looks.\n *\n * `dimmed` only greyed pixels, which left a cancelled row's buttons live and\n * clickable. This carries the meaning, so the card can also stop offering\n * actions on something that cannot be acted on.\n */\nexport type CardState = \"default\" | \"cancelled\" | \"disabled\";\n\nexport interface CardSurfaceProps {\n /** How much chrome the surface claims. Defaults to `outline`. */\n variant?: CardSurfaceVariant;\n /** Theme colour for selection and emphasis. Defaults to `primary`. */\n color?: CardSurfaceColor;\n /**\n * Can this card be selected — and does it show it?\n *\n * The capability, separate from the handler. `selectable` gets the checkbox\n * AND the selected treatment; `selectable={false}` has neither, however\n * `selected` is set, so a stale flag arriving with the data cannot make a\n * read-only row render as picked. Defaults to whether `onToggleSelect` exists.\n */\n selectable?: boolean;\n /** Whether this card is currently in the selection. */\n selected?: boolean;\n /**\n * Opt OUT of dragging even inside a drag container.\n *\n * Draggability is the container's decision (see `data-views-drag`); this is\n * the card's veto — a pinned row, a summary line, a record that may not move.\n */\n draggable?: boolean;\n /**\n * Where this card leads.\n *\n * PREFER THIS TO `onClick`. A clickable `<div>` cannot be cmd-clicked,\n * middle-clicked or \"copy link address\"'d, and wrapping interactive children\n * in a click handler is the a11y violation it looks like. With `href` the\n * title is a real `<a>` stretched over the card by a pseudo-element: one\n * whole-row target, correct tab order, every browser affordance intact, and\n * the buttons inside stay ordinary buttons.\n */\n href?: string;\n /** Anchor target, when `href` is set. */\n target?: string;\n /** Card click, for a card that does not navigate. See `href` first. */\n onClick?: () => void;\n /** What this record is. `cancelled`/`disabled` also suppress the actions. */\n state?: CardState;\n /** Why this card is asking to be noticed. Defaults to `none`. */\n emphasis?: CardEmphasis;\n className?: string;\n /**\n * One id; the parts derive from it (`${testId}-checkbox`, `-drag`, `-menu`,\n * `-value`). A prop per slot would have been `checkboxTestId`,\n * `menuTestId`, `valueTestId`… one for every part anybody ever tested.\n */\n testId?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * ONE RADIUS FOR BOTH SHAPES, off the token scale on purpose.\n *\n * `Card`'s own steps are 4px and 8px and its `lg` is 16px, all chosen for a\n * surface nearly as tall as it is wide. A 56px row is not that shape — the\n * corner runs most of the way down both ends and curves away from the square\n * checkbox and square thumbnail inside it — and a tile that rounds harder than\n * the row it sits beside in the same view reads as a different component.\n *\n * 3px takes the hard point off the corner without being seen as a curve.\n * `divider` rows override it back to 0; a bottom rule has no corners to round.\n */\nexport const CARD_RADIUS = \"3px\";\n\n/** Every slot's test id, derived from the card's one. */\nexport function slotTestIds(testId: string | undefined): (slot: string) => string | undefined {\n return (slot) => (testId ? `${testId}-${slot}` : undefined);\n}\n\n/** Is this card selectable? Explicit wins; otherwise a handler implies it. */\nexport function isSelectable(\n props: Pick<CardSurfaceProps, \"selectable\"> & { onToggleSelect?: () => void },\n): boolean {\n return props.selectable ?? props.onToggleSelect != null;\n}\n\n/** Can this record be acted on at all? */\nexport function isActionable(state: CardState | undefined): boolean {\n return state !== \"disabled\" && state !== \"cancelled\";\n}\n\n/**\n * Variant styling. Everything but `outline` drops the border.\n *\n * `ghost` keeps a faint SURFACE where `text` has none — without that the two\n * were pixel-identical at rest and the union carried a distinction it did not\n * draw. Ghost is \"a surface, quietly\"; text is \"no surface at all\", which is\n * what a host wants when it is drawing the container itself.\n */\nfunction variantSx(variant: CardSurfaceVariant, theme: Theme): CardSx {\n if (variant === \"ghost\") {\n return {\n border: 0,\n backgroundColor: \"action.hover\",\n \"&:hover\": { backgroundColor: \"action.selected\" },\n };\n }\n if (variant === \"text\") {\n return { border: 0, backgroundColor: \"transparent\", boxShadow: \"none\" };\n }\n if (variant === \"glass\") {\n // THEME-AWARE, and it keeps its edges.\n //\n // This was a hardcoded `rgba(255,255,255,·)` fill with a near-white border,\n // which had two problems. On a dark palette a 55%-white pane is not frosted\n // glass, it is a pale rectangle. And on a light one BOTH the fill and the\n // border land on white and vanish, so `glass` rendered as `text` — the same\n // nothing, reached by a different name.\n //\n // The blur is what makes it glass, and a blur is only visible over\n // something. So the pane keeps a real hairline and a shallow shadow: over a\n // plain surface it still reads as a raised pane rather than as absence, and\n // over an image or a gradient the blur does the rest.\n return {\n backgroundColor: alpha(theme.palette.background.paper, 0.55),\n backdropFilter: \"blur(8px)\",\n // `divider` as-is. NOT `alpha(divider, …)`: MUI's `alpha` REPLACES the\n // channel rather than scaling it, and `divider` is already a 12% black —\n // so asking for 80% of it produced an 80% black slab of a border.\n borderColor: theme.palette.divider,\n boxShadow: `0 1px 3px ${shadowInk(theme, 0.1)}`,\n };\n }\n return {};\n}\n\n/**\n * MOTION IS OPT-IN, ALWAYS.\n *\n * Everything animated here is wrapped in this. Fifty rows breathing in unison\n * is a vestibular trigger, and honouring the OS setting is not a polish item —\n * it is the difference between a list somebody can look at and one they cannot.\n */\nconst MOTION_OK = \"@media (prefers-reduced-motion: no-preference)\";\n\n/**\n * THE ROW'S ATTENTION SIGNAL IS A BAR, NOT A HALO.\n *\n * A glow is a weak signal in a list: full-width rows stacked tight means the\n * halo bleeds 15px into the neighbours above and below and reads as a rendering\n * artifact, and stacked with a `selected` ring and the browser's focus ring it\n * becomes three concentric halos on one row. Five rows needing attention at\n * once turns the page into a smear.\n *\n * A 3px accent on the leading edge is stronger, costs no motion at all, works\n * under reduced-motion, cannot bleed into a neighbour, and stacks cleanly\n * however many rows raise their hand. It is where operational tables land.\n */\nfunction accentBar(main: string): CardSx {\n return {\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n insetInlineStart: 0,\n insetBlock: 0,\n width: 3,\n borderStartStartRadius: \"inherit\",\n borderEndStartRadius: \"inherit\",\n backgroundColor: main,\n pointerEvents: \"none\",\n },\n };\n}\n\n/**\n * The tile's lift — a card that has been RAISED, not one that is lit from within.\n *\n * This was Button's glow: a 20px bloom at 0.6 over a 40px bloom at 0.3, plus\n * `brightness(1.05)`. On a button, which is small and pressed and gone, that\n * reads as energy. On a tile it read as a neon sign — 40px of saturated colour\n * bleeding into the gaps of a grid whose whole job is to let the eye compare\n * cards, and the brightness filter washing the image and the caption with it.\n *\n * Three shadows doing three jobs instead: a hairline ring that tints the card's\n * own edge in the accent colour, a tight contact shadow, and one soft shadow\n * offset DOWNWARD. Offset is what separates elevation from emission — a glow is\n * symmetrical because its source is the object; a shadow falls because the\n * light is somewhere else. It stays legible on a dark canvas, where the old\n * bloom was the brightest thing on the screen.\n */\nfunction liftSx(main: string): CardSx {\n return {\n boxShadow: [\n `0 0 0 1px ${alpha(main, 0.45)}`,\n `0 1px 2px ${alpha(main, 0.12)}`,\n `0 8px 20px -6px ${alpha(main, 0.3)}`,\n ].join(\", \"),\n };\n}\n\n/**\n * A breath that STOPS.\n *\n * Six iterations, not `infinite`. A restaurant admin has this open for a whole\n * shift, and something pulsing in the periphery forever is fatigue rather than\n * urgency — worse, once two or three rows are doing it the signal means\n * nothing. It settles, and the accent bar carries the state from then on.\n *\n * Animating `transform`/`opacity` on a pseudo-element, never `box-shadow`: a\n * box-shadow keyframe repaints every frame, and fifty of them drop frames on\n * exactly the tablet a restaurant floor uses. This one is compositor-only.\n */\nfunction pulseSx(main: string): CardSx {\n return {\n [MOTION_OK]: {\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n inset: 0,\n borderRadius: \"inherit\",\n border: `2px solid ${main}`,\n animation: `${pulseRing} 1.6s ease-out 6`,\n pointerEvents: \"none\",\n },\n },\n };\n}\n\n/** The emphasis treatments, in the terms the shape can actually carry. */\nfunction emphasisSx(emphasis: CardEmphasis, main: string, shape: CardShape): CardSx {\n if (emphasis === \"attention\") {\n // The bar on both; the lift only where there is room for it to spread.\n return {\n ...accentBar(main),\n ...(shape === \"tile\" ? liftSx(main) : {}),\n ...pulseSx(main),\n };\n }\n if (emphasis === \"new\") {\n return {\n ...accentBar(main),\n [MOTION_OK]: { animation: `${fadeInScaleAnimation} 240ms ease-out` },\n };\n }\n return {};\n}\n\n/**\n * The shared half of a card's styling. Each component adds its own geometry —\n * a tile's aspect ratio, a row's rails.\n */\n/**\n * WHAT THE TWO NON-DEFAULT STATES LOOK LIKE — and why they cannot look alike.\n *\n * Both were `opacity: 0.6` and nothing else, so a record the business CANCELLED\n * and a row this user merely cannot touch were pixel-identical. The type has\n * always drawn the distinction (`CardState`); only the styling had not, which\n * made `cancelled` a comment rather than a state.\n *\n * `cancelled` is a VOIDED record: still there, still worth reading, no longer\n * counting. The figures get struck through, because a dimmed `R$ 1.250,00`\n * still reads as money owed and a struck one cannot.\n *\n * `disabled` is INERT: nothing to read into, nothing to do with. It goes\n * greyscale — which also drains the status chip's colour, the one thing on the\n * row still shouting for attention — and says so on hover.\n */\nfunction stateSx(state: CardState): CardSx {\n if (state === \"cancelled\") {\n return {\n opacity: 0.65,\n // The META CLUSTER is struck too. It was left out, so a voided row kept a\n // crisp `05/08/2026, 13:45` and `PIX` between a struck title and a struck\n // total — the middle of the row reading as live data on a record the two\n // ends call void. Both lines of each pair go, as both lines of the caption\n // already do: on a cancelled record the label is as void as the value.\n '& [data-slot=\"value\"], & [data-slot=\"caption\"], & [data-slot=\"meta\"]': {\n textDecoration: \"line-through\",\n },\n };\n }\n if (state === \"disabled\") {\n return { opacity: 0.45, filter: \"grayscale(1)\", cursor: \"not-allowed\" };\n }\n return { opacity: 1 };\n}\n\nexport function cardSurfaceStyles(\n props: CardSurfaceProps & { selectable: boolean; shape: CardShape },\n theme: Theme,\n): CardSx {\n const { variant = \"outline\", color = \"primary\", selected = false, selectable } = props;\n const { state = \"default\", emphasis = \"none\" } = props;\n const main = theme.palette[color].main;\n // Selection styling is gated on the CAPABILITY: a card that cannot be\n // selected must not render as selected because a stale flag came with its data.\n const showSelected = selectable && selected;\n return {\n transition: \"border-color 120ms, box-shadow 120ms, background-color 120ms\",\n ...stateSx(state),\n ...variantSx(variant, theme),\n ...(showSelected\n ? {\n borderColor: `${color}.main`,\n boxShadow: `inset 0 0 0 1px ${main}`,\n backgroundColor: \"action.selected\",\n }\n : {}),\n ...emphasisSx(emphasis, main, props.shape),\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/HoverCard/HoverCard.content.tsx"],"sourcesContent":["import Avatar from '@mui/material/Avatar/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { styled } from '@mui/material/styles/index.js';\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"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-display-tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport type { DataViewsCopy } from \"./data-views-copy\";\nimport ArrowDownwardRoundedIcon from \"@mui/icons-material/ArrowDownwardRounded\";\nimport ArrowUpwardRoundedIcon from \"@mui/icons-material/ArrowUpwardRounded\";\nimport useMediaQuery from \"@mui/material/useMediaQuery/index.js\";\nimport type { Theme } from \"@mui/material/styles/index.js\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport type { SortFieldDefinition } from \"../../layout/ContentToolbar\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\n\nimport {\n BoardGlyph,\n ColumnsGlyph,\n GridGlyph,\n ListGlyph,\n RowsGlyph,\n TableGlyph,\n} from \"./data-views-glyphs\";\nimport {\n useDataViewsLayout,\n type DataViewsDensity,\n type DataViewsLayout,\n} from \"./data-views-layout-context\";\nimport { sxRem } from \"../../../tokens/relative\";\n\n/**\n * Two of the three tabs inside the \"Exibir\" panel — Ordenar and Exibição. The\n * Colunas tab is its own file (`data-views-columns-tab.tsx`) for the size budget.\n *\n * They live together because they answer one question (\"how do I want to read\n * this list?\") and were previously three separate toolbar dropdowns that the\n * operator had to know apart. Split into this file so the panel that frames\n * them, and each tab, stays inside the size budget.\n */\n\n/* ── Shared tile ─────────────────────────────────────────────────────────── */\n\n/** A picker tile: a glyph over its label, highlighted when it is the choice. */\nfunction Tile({\n active,\n label,\n onClick,\n testId,\n children,\n}: {\n active: boolean;\n label: string;\n onClick: () => void;\n testId: string;\n children: React.ReactNode;\n}): React.JSX.Element {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onClick}\n aria-pressed={active}\n data-testid={testId}\n sx={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: 0.75,\n p: 1.25,\n border: 1,\n borderStyle: \"solid\",\n borderColor: active ? \"primary.main\" : \"divider\",\n bgcolor: active ? \"action.selected\" : \"transparent\",\n borderRadius: 1,\n cursor: \"pointer\",\n font: \"inherit\",\n fontSize: sxRem(12),\n fontWeight: active ? 600 : 400,\n color: active ? \"primary.main\" : \"text.secondary\",\n \"&:hover\": { bgcolor: \"action.hover\" },\n }}\n >\n {children}\n {label}\n </Box>\n );\n}\n\n/* ── Ordenar ─────────────────────────────────────────────────────────────── */\n\n/**\n * Direction labels read in the COLUMN'S OWN TERMS. \"Crescente\" on a currency\n * column is a puzzle the operator has to solve every time; \"Menor → maior\" is\n * not, and \"Mais recente\" is what someone actually means about a date.\n */\nconst DIRECTION_LABELS: Record<string, [string, string]> = {\n number: [\"Menor → maior\", \"Maior → menor\"],\n currency: [\"Menor → maior\", \"Maior → menor\"],\n date: [\"Mais antigo\", \"Mais recente\"],\n text: [\"A → Z\", \"Z → A\"],\n};\n\n/** The direction wording for a sort field, falling back to alphabetical. */\nfunction directionLabels(kind: string | undefined): [string, string] {\n return DIRECTION_LABELS[kind ?? \"text\"] ?? DIRECTION_LABELS.text!;\n}\n\ninterface SortTabProps {\n fields: SortFieldDefinition[];\n activeField: string;\n activeOrder: \"asc\" | \"desc\";\n onChange: (field: string, order: \"asc\" | \"desc\") => void;\n /** Per-field value kind, so the direction can be phrased in its own terms. */\n sortKinds?: Record<string, string>;\n testIdPrefix: string;\n}\n\n/** Direction first (two tiles), then the field list — the order they are decided in. */\nexport function SortTab({\n fields,\n activeField,\n activeOrder,\n onChange,\n sortKinds,\n testIdPrefix,\n}: SortTabProps): React.JSX.Element {\n const copy = useDataViewsCopy();\n const [ascLabel, descLabel] = directionLabels(sortKinds?.[activeField]);\n return (\n <Box sx={{ p: 1 }}>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, color: \"text.secondary\" }}>\n {copy.display.direction}\n </Box>\n </Text>\n <Box sx={{ display: \"flex\", gap: 0.75, mb: 1.5, mt: 0.5 }}>\n {([\"asc\", \"desc\"] as const).map((direction, index) => (\n <Tile\n key={direction}\n active={activeOrder === direction}\n label={index === 0 ? ascLabel : descLabel}\n onClick={() => onChange(activeField || fields[0]?.value || \"\", direction)}\n testId={`${testIdPrefix}-sort-dir-${direction}`}\n >\n {direction === \"asc\" ? (\n <ArrowUpwardRoundedIcon fontSize=\"small\" />\n ) : (\n <ArrowDownwardRoundedIcon fontSize=\"small\" />\n )}\n </Tile>\n ))}\n </Box>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, color: \"text.secondary\" }}>\n {copy.display.fieldHeading}\n </Box>\n </Text>\n {fields.map((field) => (\n <SortFieldRow\n key={field.value}\n label={field.label}\n active={field.value === activeField}\n onClick={() => onChange(field.value, activeOrder)}\n testId={`${testIdPrefix}-sort-field-${field.value}`}\n />\n ))}\n </Box>\n );\n}\n\n/** One sort field: a dot and its label, highlighted when it is the active sort. */\nfunction SortFieldRow({\n label,\n active,\n onClick,\n testId,\n}: {\n label: string;\n active: boolean;\n onClick: () => void;\n testId: string;\n}): React.JSX.Element {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onClick}\n data-testid={testId}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n width: \"100%\",\n px: 1,\n py: 0.75,\n border: 0,\n background: \"none\",\n borderRadius: 1,\n cursor: \"pointer\",\n font: \"inherit\",\n fontSize: sxRem(13),\n textAlign: \"left\",\n fontWeight: active ? 600 : 400,\n color: active ? \"primary.main\" : \"text.primary\",\n \"&:hover\": { bgcolor: \"action.hover\" },\n }}\n >\n <Box\n component=\"span\"\n sx={{ height: 6, width: 6, borderRadius: \"50%\", bgcolor: active ? \"primary.main\" : \"action.disabled\" }}\n />\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0 }}>\n {label}\n </Box>\n </Box>\n );\n}\n\n/* ── Exibição ────────────────────────────────────────────────────────────── */\n\n\n/**\n * What density MEANS in each layout — same three values, three different\n * questions. A table's is how tall its rows are, a card grid's is how many fit\n * on a line, and a board's is how wide its columns are. The heading and the\n * tile labels change with the layout because \"Alta\" over a board is meaningless\n * where \"Larga\" is not.\n */\n\n\n/** The density tiles, phrased for whichever layout is on screen. */\nfunction densityTiles(\n layout: DataViewsLayout,\n copy: DataViewsCopy,\n): { value: DataViewsDensity; label: string; gap: number; columns: number }[] {\n // A layout the pack does not key falls back to the table's words rather\n // than rendering three blank tiles — a host adding a layout should still see\n // a usable control while it writes the labels for it.\n const labels = copy.display.densityLabels[layout] ?? copy.display.densityLabels.table;\n return [\n { value: \"compact\", label: labels?.compact ?? \"compact\", gap: 2, columns: 4 },\n { value: \"cozy\", label: labels?.cozy ?? \"cozy\", gap: 5, columns: 3 },\n { value: \"comfortable\", label: labels?.comfortable ?? \"comfortable\", gap: 8, columns: 2 },\n ];\n}\n\n/** The preview for one density tile, in the terms that layout's density is in. */\nfunction densityGlyph(\n layout: DataViewsLayout,\n tile: { gap: number; columns: number },\n active: boolean,\n): React.JSX.Element {\n if (layout === \"cards\") return <GridGlyph n={tile.columns} active={active} />;\n // A wider column means FEWER of them across the same board, so the\n // comfortable end draws two fat columns and the compact end four thin ones.\n if (layout === \"board\") return <ColumnsGlyph n={tile.columns} active={active} />;\n return <RowsGlyph gap={tile.gap} active={active} />;\n}\n\n/** The glyph for a layout tile. */\nfunction layoutGlyph(layout: DataViewsLayout, active: boolean): React.JSX.Element {\n if (layout === \"table\") return <TableGlyph active={active} />;\n if (layout === \"list\") return <ListGlyph active={active} />;\n if (layout === \"cards\") return <GridGlyph active={active} />;\n return <BoardGlyph active={active} />;\n}\n\nconst LAYOUT_TILE_LABELS: Record<DataViewsLayout, string> = {\n table: \"Tabela\",\n list: \"Lista\",\n cards: \"Grade\",\n board: \"Quadro\",\n};\n\n/**\n * Format and density, both shown as PREVIEWS rather than words — see\n * `data-views-glyphs.tsx` for why. A layout this table cannot render is simply\n * not offered, and the panel says why rather than leaving a gap.\n */\n/**\n * The three density tiles — or, on a phone, a line saying why there are none:\n * the card grid is `1fr` there, so all three would draw one card per row. Says\n * so rather than vanishing, for the same reason as the board note below it.\n */\nfunction DensityTiles({ testIdPrefix }: { testIdPrefix: string }): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { layout, density, setDensity } = useDataViewsLayout();\n // Matches the card grid's own `xs: \"1fr\"` track, so the control and the thing\n // it controls agree on where density stops meaning anything.\n const isOneColumn = useMediaQuery((t: Theme) => t.breakpoints.down(\"sm\"));\n if (layout === \"cards\" && isOneColumn) {\n return (\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, pt: 0.5, display: \"block\", color: \"text.disabled\" }}>\n {copy.display.densityUnavailableNarrow}\n </Box>\n </Text>\n );\n }\n return (\n <Box sx={{ display: \"grid\", gridTemplateColumns: \"repeat(3, 1fr)\", gap: 0.75, mt: 0.5 }}>\n {densityTiles(layout, copy).map((tile) => (\n <Tile\n key={tile.value}\n active={density === tile.value}\n label={tile.label}\n onClick={() => setDensity(tile.value)}\n testId={`${testIdPrefix}-density-${tile.value}`}\n >\n {densityGlyph(layout, tile, density === tile.value)}\n </Tile>\n ))}\n </Box>\n );\n}\n\nexport function DisplayTab({ testIdPrefix }: { testIdPrefix: string }): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { layout, setLayout, canUseCards, canUseList, canUseBoard } = useDataViewsLayout();\n const available: DataViewsLayout[] = [\n \"table\",\n ...(canUseList ? ([\"list\"] as const) : []),\n ...(canUseCards ? ([\"cards\"] as const) : []),\n ...(canUseBoard ? ([\"board\"] as const) : []),\n ];\n return (\n <Box sx={{ p: 1 }}>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, color: \"text.secondary\" }}>\n {copy.display.formatHeading}\n </Box>\n </Text>\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: available.length > 3 ? \"repeat(2, 1fr)\" : `repeat(${available.length}, 1fr)`,\n gap: 0.75,\n mt: 0.5,\n }}\n >\n {available.map((value) => (\n <Tile\n key={value}\n active={layout === value}\n label={LAYOUT_TILE_LABELS[value]}\n onClick={() => setLayout(value)}\n testId={`${testIdPrefix}-layout-${value}`}\n >\n {layoutGlyph(value, layout === value)}\n </Tile>\n ))}\n </Box>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, py: 1, display: \"block\", color: \"text.disabled\" }}>\n {copy.display.layoutHints[layout]}\n </Box>\n </Text>\n {/* Every layout gets this, the board included. It used to be hidden on\n Quadro, which left the format tile switching to a view with no sizing\n control at all — and the section disappearing on select reads as a\n control that broke rather than one that does not apply. */}\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, color: \"text.secondary\" }}>\n {copy.display.densityHeadings[layout]}\n </Box>\n </Text>\n <DensityTiles testIdPrefix={testIdPrefix} />\n {!canUseBoard && (\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ px: 0.5, pt: 1.25, display: \"block\", color: \"text.disabled\" }}>\n {copy.display.boardUnavailable}\n </Box>\n </Text>\n )}\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,8BAA8B;AACrC,OAAO,4BAA4B;AACnC,OAAO,mBAAmB;AAkDtB,SA4EI,KA5EJ;AAdJ,SAAS,KAAK;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMsB;AACpB,SACE;AAAA,IAACA;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL;AAAA,MACA,gBAAc;AAAA,MACd,eAAa;AAAA,MACb,IAAI;AAAA,QACF,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,aAAa,SAAS,iBAAiB;AAAA,QACvC,SAAS,SAAS,oBAAoB;AAAA,QACtC,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,UAAU,MAAM,EAAE;AAAA,QAClB,YAAY,SAAS,MAAM;AAAA,QAC3B,OAAO,SAAS,iBAAiB;AAAA,QACjC,WAAW,EAAE,SAAS,eAAe;AAAA,MACvC;AAAA,MAEC;AAAA;AAAA,QACA;AAAA;AAAA;AAAA,EACH;AAEJ;AASA,IAAM,mBAAqD;AAAA,EACzD,QAAQ,CAAC,sBAAiB,oBAAe;AAAA,EACzC,UAAU,CAAC,sBAAiB,oBAAe;AAAA,EAC3C,MAAM,CAAC,eAAe,cAAc;AAAA,EACpC,MAAM,CAAC,cAAS,YAAO;AACzB;AAGA,SAAS,gBAAgB,MAA4C;AACnE,SAAO,iBAAiB,QAAQ,MAAM,KAAK,iBAAiB;AAC9D;AAaO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,QAAM,OAAO,iBAAiB;AAC9B,QAAM,CAAC,UAAU,SAAS,IAAI,gBAAgB,YAAY,WAAW,CAAC;AACtE,SACE,qBAACA,UAAA,EAAI,IAAI,EAAE,GAAG,EAAE,GACd;AAAA,wBAAC,QAAK,SAAQ,WAAU,IAAG,KACzB,8BAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,IAAI,KAAK,OAAO,iBAAiB,GAC1D,eAAK,QAAQ,WAChB,GACF;AAAA,IACA,oBAACA,UAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,MAAM,IAAI,KAAK,IAAI,IAAI,GACpD,WAAC,OAAO,MAAM,EAAY,IAAI,CAAC,WAAW,UAC1C;AAAA,MAAC;AAAA;AAAA,QAEC,QAAQ,gBAAgB;AAAA,QACxB,OAAO,UAAU,IAAI,WAAW;AAAA,QAChC,SAAS,MAAM,SAAS,eAAe,OAAO,CAAC,GAAG,SAAS,IAAI,SAAS;AAAA,QACxE,QAAQ,GAAG,YAAY,aAAa,SAAS;AAAA,QAE5C,wBAAc,QACb,oBAAC,0BAAuB,UAAS,SAAQ,IAEzC,oBAAC,4BAAyB,UAAS,SAAQ;AAAA;AAAA,MATxC;AAAA,IAWP,CACD,GACH;AAAA,IACA,oBAAC,QAAK,SAAQ,WAAU,IAAG,KACzB,8BAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,IAAI,KAAK,OAAO,iBAAiB,GAC1D,eAAK,QAAQ,cAChB,GACF;AAAA,IACC,OAAO,IAAI,CAAC,UACX;AAAA,MAAC;AAAA;AAAA,QAEC,OAAO,MAAM;AAAA,QACb,QAAQ,MAAM,UAAU;AAAA,QACxB,SAAS,MAAM,SAAS,MAAM,OAAO,WAAW;AAAA,QAChD,QAAQ,GAAG,YAAY,eAAe,MAAM,KAAK;AAAA;AAAA,MAJ5C,MAAM;AAAA,IAKb,CACD;AAAA,KACH;AAEJ;AAGA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKsB;AACpB,SACE;AAAA,IAACA;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL;AAAA,MACA,eAAa;AAAA,MACb,IAAI;AAAA,QACF,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,OAAO;AAAA,QACP,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,UAAU,MAAM,EAAE;AAAA,QAClB,WAAW;AAAA,QACX,YAAY,SAAS,MAAM;AAAA,QAC3B,OAAO,SAAS,iBAAiB;AAAA,QACjC,WAAW,EAAE,SAAS,eAAe;AAAA,MACvC;AAAA,MAEA;AAAA;AAAA,UAACA;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,cAAc,OAAO,SAAS,SAAS,iBAAiB,kBAAkB;AAAA;AAAA,QACvG;AAAA,QACA,oBAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,GAC9C,iBACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAeA,SAAS,aACP,QACA,MAC4E;AAI5E,QAAM,SAAS,KAAK,QAAQ,cAAc,MAAM,KAAK,KAAK,QAAQ,cAAc;AAChF,SAAO;AAAA,IACL,EAAE,OAAO,WAAW,OAAO,QAAQ,WAAW,WAAW,KAAK,GAAG,SAAS,EAAE;AAAA,IAC5E,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,KAAK,GAAG,SAAS,EAAE;AAAA,IACnE,EAAE,OAAO,eAAe,OAAO,QAAQ,eAAe,eAAe,KAAK,GAAG,SAAS,EAAE;AAAA,EAC1F;AACF;AAGA,SAAS,aACP,QACA,MACA,QACmB;AACnB,MAAI,WAAW,QAAS,QAAO,oBAAC,aAAU,GAAG,KAAK,SAAS,QAAgB;AAG3E,MAAI,WAAW,QAAS,QAAO,oBAAC,gBAAa,GAAG,KAAK,SAAS,QAAgB;AAC9E,SAAO,oBAAC,aAAU,KAAK,KAAK,KAAK,QAAgB;AACnD;AAGA,SAAS,YAAY,QAAyB,QAAoC;AAChF,MAAI,WAAW,QAAS,QAAO,oBAAC,cAAW,QAAgB;AAC3D,MAAI,WAAW,OAAQ,QAAO,oBAAC,aAAU,QAAgB;AACzD,MAAI,WAAW,QAAS,QAAO,oBAAC,aAAU,QAAgB;AAC1D,SAAO,oBAAC,cAAW,QAAgB;AACrC;AAEA,IAAM,qBAAsD;AAAA,EAC1D,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAYA,SAAS,aAAa,EAAE,aAAa,GAAgD;AACnF,QAAM,OAAO,iBAAiB;AAC9B,QAAM,EAAE,QAAQ,SAAS,WAAW,IAAI,mBAAmB;AAG3D,QAAM,cAAc,cAAc,CAAC,MAAa,EAAE,YAAY,KAAK,IAAI,CAAC;AACxE,MAAI,WAAW,WAAW,aAAa;AACrC,WACE,oBAAC,QAAK,SAAQ,WAAU,IAAG,KACzB,8BAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,SAAS,SAAS,OAAO,gBAAgB,GACpF,eAAK,QAAQ,0BAChB,GACF;AAAA,EAEJ;AACA,SACE,oBAACA,UAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,kBAAkB,KAAK,MAAM,IAAI,IAAI,GACnF,uBAAa,QAAQ,IAAI,EAAE,IAAI,CAAC,SAC/B;AAAA,IAAC;AAAA;AAAA,MAEC,QAAQ,YAAY,KAAK;AAAA,MACzB,OAAO,KAAK;AAAA,MACZ,SAAS,MAAM,WAAW,KAAK,KAAK;AAAA,MACpC,QAAQ,GAAG,YAAY,YAAY,KAAK,KAAK;AAAA,MAE5C,uBAAa,QAAQ,MAAM,YAAY,KAAK,KAAK;AAAA;AAAA,IAN7C,KAAK;AAAA,EAOZ,CACD,GACH;AAEJ;AAEO,SAAS,WAAW,EAAE,aAAa,GAAgD;AACxF,QAAM,OAAO,iBAAiB;AAC9B,QAAM,EAAE,QAAQ,WAAW,aAAa,YAAY,YAAY,IAAI,mBAAmB;AACvF,QAAM,YAA+B;AAAA,IACnC;AAAA,IACA,GAAI,aAAc,CAAC,MAAM,IAAc,CAAC;AAAA,IACxC,GAAI,cAAe,CAAC,OAAO,IAAc,CAAC;AAAA,IAC1C,GAAI,cAAe,CAAC,OAAO,IAAc,CAAC;AAAA,EAC5C;AACA,SACE,qBAACA,UAAA,EAAI,IAAI,EAAE,GAAG,EAAE,GACd;AAAA,wBAAC,QAAK,SAAQ,WAAU,IAAG,KACzB,8BAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,IAAI,KAAK,OAAO,iBAAiB,GAC1D,eAAK,QAAQ,eAChB,GACF;AAAA,IACA;AAAA,MAACA;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,SAAS;AAAA,UACT,qBAAqB,UAAU,SAAS,IAAI,mBAAmB,UAAU,UAAU,MAAM;AAAA,UACzF,KAAK;AAAA,UACL,IAAI;AAAA,QACN;AAAA,QAEC,oBAAU,IAAI,CAAC,UACd;AAAA,UAAC;AAAA;AAAA,YAEC,QAAQ,WAAW;AAAA,YACnB,OAAO,mBAAmB,KAAK;AAAA,YAC/B,SAAS,MAAM,UAAU,KAAK;AAAA,YAC9B,QAAQ,GAAG,YAAY,WAAW,KAAK;AAAA,YAEtC,sBAAY,OAAO,WAAW,KAAK;AAAA;AAAA,UAN/B;AAAA,QAOP,CACD;AAAA;AAAA,IACH;AAAA,IACA,oBAAC,QAAK,SAAQ,WAAU,IAAG,KACzB,8BAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,SAAS,SAAS,OAAO,gBAAgB,GAClF,eAAK,QAAQ,YAAY,MAAM,GAClC,GACF;AAAA,IAKA,oBAAC,QAAK,SAAQ,WAAU,IAAG,KACzB,8BAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,IAAI,KAAK,OAAO,iBAAiB,GAC1D,eAAK,QAAQ,gBAAgB,MAAM,GACtC,GACF;AAAA,IACA,oBAAC,gBAAa,cAA4B;AAAA,IACzC,CAAC,eACA,oBAAC,QAAK,SAAQ,WAAU,IAAG,KACzB,8BAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,IAAI,KAAK,IAAI,MAAM,SAAS,SAAS,OAAO,gBAAgB,GACrF,eAAK,QAAQ,kBAChB,GACF;AAAA,KAEJ;AAEJ;","names":["default"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/LazyImage/LazyImage.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport { styled, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\nimport { Skeleton } from '../../layout/Skeleton';\nimport type { ResolvedLazyImageProps } from './LazyImage.hooks';\nimport { imgPassThrough, resolveLazyImageProps, useLazyImage } from './LazyImage.hooks';\nimport type { LazyImageProps } from './LazyImage.types';\nimport { sheen } from '../../../tokens/ink';\n\nconst ImageContainer = styled(Box)(() => ({\n position: 'relative',\n display: 'inline-block',\n overflow: 'hidden',\n}));\n\nconst StyledImage = styled('img')<{\n fadeIn?: boolean;\n fadeInDuration?: number;\n isLoaded?: boolean;\n}>(({ fadeIn, fadeInDuration = 300, isLoaded }) => ({\n display: 'block',\n maxWidth: '100%',\n height: 'auto',\n opacity: fadeIn ? (isLoaded ? 1 : 0) : 1,\n transition: fadeIn ? `opacity ${fadeInDuration}ms ease-in-out` : 'none',\n}));\n\nconst SpinnerOverlay = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: sheen(theme, 0.8),\n borderRadius: '50%',\n padding: theme.spacing(1),\n}));\n\nconst FallbackContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.palette.action.disabledBackground,\n color: theme.palette.text.secondary,\n width: '100%',\n height: '100%',\n position: 'absolute',\n top: 0,\n left: 0,\n}));\n\n/** The box the image occupies, shared by the real image and every stand-in for it. */\ninterface BoxMetrics {\n width?: number | string;\n height?: number | string;\n objectFit: NonNullable<LazyImageProps['objectFit']>;\n objectPosition: string;\n borderRadius?: number | string;\n}\n\ninterface IndicatorProps {\n props: ResolvedLazyImageProps;\n metrics: BoxMetrics;\n}\n\nconst SkeletonIndicator: React.FC<IndicatorProps> = ({ props, metrics }) => (\n <Skeleton\n variant=\"rectangular\"\n width={metrics.width || '100%'}\n height={metrics.height || 200}\n animation={props.skeletonProps.animation || 'pulse'}\n intensity={props.skeletonProps.intensity}\n borderRadius={props.borderRadius}\n data-testid={`${props['data-testid']}-skeleton`}\n />\n);\n\nconst SpinnerIndicator: React.FC<IndicatorProps> = ({ props }) => {\n const theme = useTheme();\n const { spinnerProps } = props;\n\n return (\n <SpinnerOverlay>\n <CircularProgress\n size={spinnerProps.size || 40}\n thickness={spinnerProps.thickness || 4}\n sx={{ color: spinnerProps.color || theme.palette.primary.main }}\n data-testid={`${props['data-testid']}-spinner`}\n />\n </SpinnerOverlay>\n );\n};\n\nconst PlaceholderIndicator: React.FC<IndicatorProps & { hasSrc: boolean }> = ({\n props,\n metrics,\n hasSrc,\n}) => {\n // Once a src has been chosen the real <img> is on screen, so the placeholder\n // would only stack behind it.\n if (!props.placeholder || hasSrc) return null;\n\n return (\n <StyledImage\n src={props.placeholder}\n alt={`${props.alt} (loading)`}\n style={metrics}\n data-testid={`${props['data-testid']}-placeholder`}\n />\n );\n};\n\nconst LoadingIndicator: React.FC<\n IndicatorProps & { kind: NonNullable<LazyImageProps['loadingState']>; hasSrc: boolean }\n> = ({ kind, hasSrc, ...rest }) => {\n switch (kind) {\n case 'skeleton':\n return <SkeletonIndicator {...rest} />;\n case 'spinner':\n return <SpinnerIndicator {...rest} />;\n case 'placeholder':\n return <PlaceholderIndicator {...rest} hasSrc={hasSrc} />;\n default:\n return null;\n }\n};\n\nconst ErrorFallback: React.FC<IndicatorProps> = ({ props, metrics }) => {\n const { alt, fallback, borderRadius } = props;\n const testId = props['data-testid'];\n\n if (!fallback) return null;\n\n if (typeof fallback === 'string') {\n return (\n <StyledImage\n src={fallback}\n alt={`${alt} (fallback)`}\n style={metrics}\n fadeIn={false}\n isLoaded={true}\n data-testid={`${testId}-fallback`}\n />\n );\n }\n\n return (\n <FallbackContainer\n sx={{ width: metrics.width, height: metrics.height, borderRadius }}\n data-testid={`${testId}-fallback`}\n >\n {fallback}\n </FallbackContainer>\n );\n};\n\n/**\n * LazyImage component with enhanced features for optimized image loading\n * Supports lazy loading, placeholders, error handling, and various loading states\n */\nexport const LazyImage = React.memo<LazyImageProps>(function LazyImage(rawProps) {\n const props = resolveLazyImageProps(rawProps);\n const {\n state,\n containerRef,\n effectiveLoadingState,\n handleImageLoad,\n handleImageError,\n showImage,\n showLoading,\n } = useLazyImage(props);\n\n const { width, height, borderRadius, alt } = props;\n const testId = props['data-testid'];\n const metrics: BoxMetrics = {\n width,\n height,\n objectFit: props.objectFit,\n objectPosition: props.objectPosition,\n borderRadius,\n };\n\n return (\n <ImageContainer\n ref={containerRef}\n className={props.className}\n sx={{ width: width || 'auto', height: height || 'auto', borderRadius }}\n data-testid={testId}\n >\n {showLoading && (\n <LoadingIndicator\n kind={effectiveLoadingState}\n props={props}\n metrics={metrics}\n hasSrc={Boolean(state.currentSrc)}\n />\n )}\n\n {showImage && (\n <StyledImage\n src={state.currentSrc || undefined}\n alt={alt}\n onLoad={handleImageLoad}\n onError={handleImageError}\n fadeIn={props.fadeIn}\n fadeInDuration={props.fadeInDuration}\n isLoaded={!state.isLoading}\n decoding={props.decoding}\n loading={props.lazy ? 'lazy' : props.loading}\n style={{ ...metrics, ...props.sx }}\n aria-label={props['aria-label'] || alt}\n aria-describedby={props['aria-describedby']}\n role={props.role}\n data-testid={`${testId}-img`}\n {...imgPassThrough(props)}\n />\n )}\n\n {state.hasError && <ErrorFallback props={props} metrics={metrics} />}\n </ImageContainer>\n );\n});\n\nLazyImage.displayName = 'LazyImage';\n"],"mappings":"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","names":["LazyImage"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/LoadingState/LoadingState.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { Skeleton } from '../../layout/Skeleton/Skeleton';\n\nimport {\n makeTestIds,\n resolveLoadingStateProps,\n SIZE_MAP,\n SKELETON_ROW_HEIGHT,\n} from './LoadingState.helpers';\nimport {\n SKELETON_FULL_ROW_WIDTH,\n SKELETON_LAST_ROW_WIDTH,\n SKELETON_MESSAGE_MARGIN_TOP_UNITS,\n SKELETON_PADDING_UNITS,\n SKELETON_RADIUS,\n SKELETON_ROW_GAP_UNITS,\n SPINNER_GAP_UNITS,\n SPINNER_MIN_HEIGHT,\n SPINNER_PADDING_UNITS,\n} from './LoadingState.metrics';\nimport type { LoadingStateProps, LoadingStateSize } from './LoadingState.types';\nimport { resolveTestId } from '../../../platform/test-id';\n\ninterface ViewProps {\n message?: string;\n size: LoadingStateSize;\n skeletonRows: number;\n className?: string;\n testIds: ReturnType<typeof makeTestIds>;\n}\n\nconst LoadingMessage: React.FC<{\n message?: string;\n size: LoadingStateSize;\n testIds: ViewProps['testIds'];\n sx?: object;\n}> = ({ message, size, testIds, sx }) =>\n message ? (\n <Typography\n variant={SIZE_MAP[size].text}\n color=\"text.secondary\"\n sx={sx}\n data-testid={testIds.named('message')}\n >\n {message}\n </Typography>\n ) : null;\n\nconst SkeletonView: React.FC<ViewProps> = ({\n message,\n size,\n skeletonRows,\n className,\n testIds,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n role=\"status\"\n aria-busy=\"true\"\n aria-label={message || 'Loading content'}\n className={className}\n data-testid={testIds.base}\n sx={{\n width: '100%',\n padding: theme.spacing(SKELETON_PADDING_UNITS),\n }}\n >\n <Stack spacing={SKELETON_ROW_GAP_UNITS}>\n {Array.from({ length: skeletonRows }).map((_, index) => (\n <Skeleton\n key={`skeleton-row-${index}`}\n variant=\"rectangular\"\n animation=\"wave\"\n height={SKELETON_ROW_HEIGHT[size]}\n // The last row is short, so the block reads as a paragraph of text.\n width={index === skeletonRows - 1 ? SKELETON_LAST_ROW_WIDTH : SKELETON_FULL_ROW_WIDTH}\n borderRadius={SKELETON_RADIUS}\n data-testid={testIds.optional(`skeleton-${index}`)}\n />\n ))}\n </Stack>\n <LoadingMessage\n message={message}\n size={size}\n testIds={testIds}\n sx={{ mt: SKELETON_MESSAGE_MARGIN_TOP_UNITS, textAlign: 'center' }}\n />\n </Box>\n );\n};\n\nconst SpinnerView: React.FC<ViewProps> = ({ message, size, className, testIds }) => {\n const theme = useTheme();\n\n return (\n <Box\n role=\"status\"\n aria-busy=\"true\"\n aria-label={message || 'Loading'}\n className={className}\n data-testid={testIds.base}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(SPINNER_PADDING_UNITS),\n minHeight: SPINNER_MIN_HEIGHT,\n gap: theme.spacing(SPINNER_GAP_UNITS),\n }}\n >\n <CircularProgress\n size={SIZE_MAP[size].spinner}\n data-testid={testIds.named('spinner')}\n />\n <LoadingMessage message={message} size={size} testIds={testIds} />\n </Box>\n );\n};\n\nexport const LoadingState: React.FC<LoadingStateProps> = React.memo((rawProps) => {\n const resolved = resolveLoadingStateProps(rawProps);\n const { variant, message, size, skeletonRows, className } = resolved;\n const viewProps: ViewProps = {\n message,\n size,\n skeletonRows,\n className,\n // `dataTestId` is the documented spelling; `testID`, the shared contract's\n // other one, resolves to the same id.\n testIds: makeTestIds(resolveTestId(resolved)),\n };\n\n return variant === 'skeleton' ? (\n <SkeletonView {...viewProps} />\n ) : (\n <SpinnerView {...viewProps} />\n );\n});\n\nLoadingState.displayName = 'LoadingState';\n\nexport default LoadingState;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,SAAS;AAChB,OAAO,sBAAsB;AAC7B,OAAO,WAAW;AAClB,OAAO,gBAAgB;AACvB,SAAS,gBAAgB;AACzB,OAAO,WAAW;AAuCd,cAoBA,YApBA;AAPJ,IAAM,iBAKD,CAAC,EAAE,SAAS,MAAM,SAAS,GAAG,MACjC,UACE;AAAA,EAAC;AAAA;AAAA,IACC,SAAS,SAAS,IAAI,EAAE;AAAA,IACxB,OAAM;AAAA,IACN;AAAA,IACA,eAAa,QAAQ,MAAM,SAAS;AAAA,IAEnC;AAAA;AACH,IACE;AAEN,IAAM,eAAoC,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,cAAY,WAAW;AAAA,MACvB;AAAA,MACA,eAAa,QAAQ;AAAA,MACrB,IAAI;AAAA,QACF,OAAO;AAAA,QACP,SAAS,MAAM,QAAQ,sBAAsB;AAAA,MAC/C;AAAA,MAEA;AAAA,4BAAC,SAAM,SAAS,wBACb,gBAAM,KAAK,EAAE,QAAQ,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,UAC5C;AAAA,UAAC;AAAA;AAAA,YAEC,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,QAAQ,oBAAoB,IAAI;AAAA,YAEhC,OAAO,UAAU,eAAe,IAAI,0BAA0B;AAAA,YAC9D,cAAc;AAAA,YACd,eAAa,QAAQ,SAAS,YAAY,KAAK,EAAE;AAAA;AAAA,UAP5C,gBAAgB,KAAK;AAAA,QAQ5B,CACD,GACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI,EAAE,IAAI,mCAAmC,WAAW,SAAS;AAAA;AAAA,QACnE;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,IAAM,cAAmC,CAAC,EAAE,SAAS,MAAM,WAAW,QAAQ,MAAM;AAClF,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,cAAY,WAAW;AAAA,MACvB;AAAA,MACA,eAAa,QAAQ;AAAA,MACrB,IAAI;AAAA,QACF,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,SAAS,MAAM,QAAQ,qBAAqB;AAAA,QAC5C,WAAW;AAAA,QACX,KAAK,MAAM,QAAQ,iBAAiB;AAAA,MACtC;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,SAAS,IAAI,EAAE;AAAA,YACrB,eAAa,QAAQ,MAAM,SAAS;AAAA;AAAA,QACtC;AAAA,QACA,oBAAC,kBAAe,SAAkB,MAAY,SAAkB;AAAA;AAAA;AAAA,EAClE;AAEJ;AAEO,IAAM,eAA4C,MAAM,KAAK,CAAC,aAAa;AAChF,QAAM,WAAW,yBAAyB,QAAQ;AAClD,QAAM,EAAE,SAAS,SAAS,MAAM,cAAc,UAAU,IAAI;AAC5D,QAAM,YAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA,IAGA,SAAS,YAAY,cAAc,QAAQ,CAAC;AAAA,EAC9C;AAEA,SAAO,YAAY,aACjB,oBAAC,gBAAc,GAAG,WAAW,IAE7B,oBAAC,eAAa,GAAG,WAAW;AAEhC,CAAC;AAED,aAAa,cAAc;AAE3B,IAAO,uBAAQ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Progress/Progress.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport LinearProgress from '@mui/material/LinearProgress/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { progressLabelText, resolveProgressProps } from './Progress.helpers';\nimport {\n barEmphasisStyles,\n barVariantStyles,\n circularEmphasisStyles,\n getColorFromTheme,\n getSizeStyles,\n pulseAnimation,\n} from './Progress.styles';\nimport type { ProgressProps, ProgressSize, ProgressVariant } from './Progress.types';\n\nconst StyledLinearProgress = styled(LinearProgress, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'customSize', 'customColor', 'glow', 'pulse'].includes(prop as string),\n})<{\n customVariant?: ProgressVariant;\n customSize?: ProgressSize;\n customColor?: string;\n glow?: boolean;\n pulse?: boolean;\n}>(({ theme, customVariant, customSize, customColor = 'primary', glow, pulse }) => {\n const colorPalette = getColorFromTheme(theme, customColor);\n const sizeStyles = getSizeStyles(customSize);\n\n return {\n height: sizeStyles.height,\n borderRadius: sizeStyles.height / 2,\n backgroundColor: alpha(colorPalette.main, 0.1),\n\n '& .MuiLinearProgress-bar': {\n borderRadius: 'inherit',\n transition: 'all 0.3s ease',\n ...barVariantStyles(customVariant, colorPalette),\n ...barEmphasisStyles(colorPalette, glow, pulse),\n },\n };\n});\n\nconst StyledCircularProgress = styled(CircularProgress, {\n shouldForwardProp: (prop) => !['customColor', 'glow', 'pulse'].includes(prop as string),\n})<{\n customColor?: string;\n glow?: boolean;\n pulse?: boolean;\n}>(({ theme, customColor = 'primary', glow, pulse }) => {\n const colorPalette = getColorFromTheme(theme, customColor);\n\n return {\n color: colorPalette.main,\n ...circularEmphasisStyles(colorPalette, glow, pulse),\n };\n});\n\nconst SegmentedProgress: React.FC<{\n value?: number;\n segments: number;\n color: string;\n size: ProgressSize;\n glow: boolean;\n pulse: boolean;\n dataTestId?: string;\n}> = ({ value = 0, segments, color, size, glow, pulse, dataTestId }) => {\n const theme = useTheme();\n const colorPalette = getColorFromTheme(theme, color);\n const sizeStyles = getSizeStyles(size);\n const filledSegments = Math.floor((value / 100) * segments);\n\n return (\n <Box sx={{ display: 'flex', gap: 0.5, width: '100%' }} data-testid={`${dataTestId}-segments-container`}>\n {Array.from({ length: segments }, (_, index) => (\n <Box\n key={index}\n data-testid={`${dataTestId}-segment-${index}`}\n sx={{\n flex: 1,\n height: sizeStyles.height,\n borderRadius: sizeStyles.height / 2,\n backgroundColor:\n index < filledSegments ? colorPalette.main : alpha(colorPalette.main, 0.1),\n transition: 'all 0.3s ease',\n ...(glow &&\n index < filledSegments && {\n boxShadow: `0 0 6px 1px ${alpha(colorPalette.main, 0.4)}`,\n }),\n ...(pulse &&\n index < filledSegments && {\n animation: `${pulseAnimation} 2s infinite`,\n }),\n }}\n />\n ))}\n </Box>\n );\n};\n\ninterface ViewProps {\n size: ProgressSize;\n color: string;\n glow: boolean;\n pulse: boolean;\n showLabel: boolean;\n displayValue: number;\n displayLabel: string;\n /** Absent means indeterminate — the bar animates rather than reporting progress. */\n value?: number;\n dataTestId: string;\n}\n\nconst ProgressLabel: React.FC<{ size: ProgressSize; label: string; testId: string }> = ({\n size,\n label,\n testId,\n}) => (\n <Typography\n variant=\"caption\"\n sx={{\n display: 'block',\n textAlign: 'center',\n mt: 1,\n fontSize: getSizeStyles(size).fontSize,\n fontWeight: 600,\n }}\n data-testid={testId}\n >\n {label}\n </Typography>\n);\n\nconst CircularView = React.forwardRef<\n HTMLDivElement,\n ViewProps & { thickness: number; circularSize?: number }\n>(\n (\n {\n size,\n color,\n glow,\n pulse,\n showLabel,\n displayValue,\n displayLabel,\n value,\n dataTestId,\n thickness,\n circularSize,\n ...props\n },\n ref,\n ) => {\n const sizeStyles = getSizeStyles(size);\n\n return (\n <Box ref={ref} sx={{ position: 'relative', display: 'inline-flex' }} data-testid={dataTestId}>\n <StyledCircularProgress\n variant={value !== undefined ? 'determinate' : 'indeterminate'}\n value={displayValue}\n size={circularSize || sizeStyles.circularSize}\n thickness={thickness}\n customColor={color}\n glow={glow}\n pulse={pulse}\n data-testid={`${dataTestId}-circular`}\n {...props}\n />\n {showLabel && value !== undefined && (\n <Box\n sx={{\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography\n variant=\"caption\"\n component=\"div\"\n color=\"text.secondary\"\n sx={{ fontSize: sizeStyles.fontSize, fontWeight: 600 }}\n data-testid={`${dataTestId}-label`}\n >\n {displayLabel}\n </Typography>\n </Box>\n )}\n </Box>\n );\n },\n);\n\nCircularView.displayName = 'ProgressCircularView';\n\nconst SegmentedView = React.forwardRef<HTMLDivElement, ViewProps & { segments: number }>(\n (\n { size, color, glow, pulse, showLabel, displayValue, displayLabel, dataTestId, segments, value: _value, ...props },\n ref,\n ) => (\n <Box ref={ref} sx={{ width: '100%' }} data-testid={dataTestId} {...props}>\n <SegmentedProgress\n value={displayValue}\n segments={segments}\n color={color}\n size={size}\n glow={glow}\n pulse={pulse}\n dataTestId={dataTestId}\n />\n {showLabel && (\n <ProgressLabel size={size} label={displayLabel} testId={`${dataTestId}-label`} />\n )}\n </Box>\n ),\n);\n\nSegmentedView.displayName = 'ProgressSegmentedView';\n\nconst LinearView = React.forwardRef<HTMLDivElement, ViewProps & { variant: ProgressVariant }>(\n (\n { size, color, glow, pulse, showLabel, displayValue, displayLabel, value, dataTestId, variant, ...props },\n ref,\n ) => (\n <Box ref={ref} sx={{ width: '100%' }} data-testid={dataTestId}>\n <StyledLinearProgress\n variant={value !== undefined ? 'determinate' : 'indeterminate'}\n value={displayValue}\n customVariant={variant}\n customSize={size}\n customColor={color}\n glow={glow}\n pulse={pulse}\n data-testid={`${dataTestId}-linear`}\n {...props}\n />\n {showLabel && (\n <ProgressLabel size={size} label={displayLabel} testId={`${dataTestId}-label`} />\n )}\n </Box>\n ),\n);\n\nLinearView.displayName = 'ProgressLinearView';\n\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n (rawProps, ref) => {\n const {\n variant,\n size,\n color,\n glow,\n pulse,\n showLabel,\n label,\n segments,\n thickness,\n circularSize,\n value,\n dataTestId,\n testID,\n ...props\n } = resolveProgressProps(rawProps);\n const displayValue = value || 0;\n const shared = {\n size,\n color,\n glow,\n pulse,\n showLabel,\n displayValue,\n displayLabel: progressLabelText(label, showLabel, displayValue),\n value,\n // `testID` is React Native's spelling of the same id and names the\n // component too; `data-testid` is left in `props`, on its way to the\n // element the caller means to address, where it has always landed.\n dataTestId: testID ?? dataTestId,\n ...props,\n };\n\n if (variant === 'circular') {\n return (\n <CircularView ref={ref} {...shared} thickness={thickness} circularSize={circularSize} />\n );\n }\n\n if (variant === 'segmented') {\n return <SegmentedView ref={ref} {...shared} segments={segments} />;\n }\n\n return <LinearView ref={ref} {...shared} variant={variant} />;\n },\n);\n\nProgress.displayName = 'Progress';\n"],"mappings":"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","names":[]}
|