@12-apps/ui 6.6.0 → 6.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-3KWD5Y5O.js → chunk-RXE5CUUE.js} +8 -4
- package/dist/chunk-RXE5CUUE.js.map +1 -0
- package/dist/data-display/Alert.js +1 -1
- package/dist/data-display/AsyncStateContainer.js +2 -1
- package/dist/data-display/AsyncStateContainer.js.map +1 -1
- package/dist/data-display/Banner.js +4 -2
- package/dist/data-display/Banner.js.map +1 -1
- package/dist/data-display/CardKit.js +3 -1
- package/dist/data-display/CardKit.js.map +1 -1
- package/dist/data-display/Carousel.js +5 -2
- package/dist/data-display/Carousel.js.map +1 -1
- package/dist/data-display/DataViews.js +2 -1
- package/dist/data-display/DataViews.js.map +1 -1
- package/dist/data-display/Lightbox.js +147 -117
- package/dist/data-display/Lightbox.js.map +1 -1
- package/dist/data-display/MapPreview.js +14 -10
- package/dist/data-display/MapPreview.js.map +1 -1
- package/dist/pt-BR.js +37 -1
- package/dist/pt-BR.js.map +1 -1
- package/dist/types/components/data-display/Alert/Alert.d.ts +9 -2
- package/dist/types/components/data-display/Alert/Alert.d.ts.map +1 -1
- package/dist/types/components/data-display/Alert/Alert.types.d.ts +25 -9
- package/dist/types/components/data-display/Alert/Alert.types.d.ts.map +1 -1
- package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.d.ts.map +1 -1
- package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.types.d.ts +6 -0
- package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Banner/Banner.d.ts.map +1 -1
- package/dist/types/components/data-display/Banner/Banner.types.d.ts +2 -0
- package/dist/types/components/data-display/Banner/Banner.types.d.ts.map +1 -1
- package/dist/types/components/data-display/CardKit/card-actions-context.d.ts +3 -1
- package/dist/types/components/data-display/CardKit/card-actions-context.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.chrome.d.ts +3 -0
- package/dist/types/components/data-display/Carousel/Carousel.chrome.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.parts.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.types.d.ts +7 -0
- package/dist/types/components/data-display/Carousel/Carousel.types.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +2 -0
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-table-parts.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.types.d.ts +9 -0
- package/dist/types/components/data-display/Lightbox/Lightbox.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/LightboxControls.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/lightbox-copy-context.d.ts +17 -0
- package/dist/types/components/data-display/Lightbox/lightbox-copy-context.d.ts.map +1 -0
- package/dist/types/components/data-display/MapPreview/MapControlBar.d.ts +7 -0
- package/dist/types/components/data-display/MapPreview/MapControlBar.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapLayers.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapPreview.types.d.ts +9 -0
- package/dist/types/components/data-display/MapPreview/MapPreview.types.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapSearchBar.d.ts +2 -0
- package/dist/types/components/data-display/MapPreview/MapSearchBar.d.ts.map +1 -1
- package/dist/types/copy.d.ts +53 -0
- package/dist/types/copy.d.ts.map +1 -1
- package/dist/types/pt-BR.d.ts +5 -1
- package/dist/types/pt-BR.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/data-display/Alert/Alert.tsx +22 -5
- package/src/components/data-display/Alert/Alert.types.ts +20 -10
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.tsx +2 -1
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.types.ts +6 -0
- package/src/components/data-display/Banner/Banner.tsx +5 -2
- package/src/components/data-display/Banner/Banner.types.ts +2 -0
- package/src/components/data-display/CardKit/card-actions-context.tsx +4 -0
- package/src/components/data-display/Carousel/Carousel.chrome.tsx +5 -0
- package/src/components/data-display/Carousel/Carousel.parts.tsx +4 -3
- package/src/components/data-display/Carousel/Carousel.types.ts +7 -0
- package/src/components/data-display/DataViews/data-views-copy.ts +2 -0
- package/src/components/data-display/DataViews/data-views-table-parts.tsx +1 -0
- package/src/components/data-display/Lightbox/Lightbox.tsx +3 -0
- package/src/components/data-display/Lightbox/Lightbox.types.ts +9 -0
- package/src/components/data-display/Lightbox/LightboxControls.tsx +28 -15
- package/src/components/data-display/Lightbox/lightbox-copy-context.tsx +42 -0
- package/src/components/data-display/MapPreview/MapControlBar.tsx +17 -9
- package/src/components/data-display/MapPreview/MapLayers.tsx +2 -0
- package/src/components/data-display/MapPreview/MapPreview.types.ts +10 -0
- package/src/components/data-display/MapPreview/MapSearchBar.tsx +4 -1
- package/src/copy.ts +57 -0
- package/src/pt-BR.ts +41 -1
- package/dist/chunk-3KWD5Y5O.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/data-display/MapPreview/MapPreview.tsx","../../src/components/data-display/MapPreview/MapPreview.helpers.ts","../../src/components/data-display/MapPreview/MapPreview.constants.ts","../../src/components/data-display/MapPreview/MapLayers.tsx","../../src/components/data-display/MapPreview/MapControlBar.tsx","../../src/components/data-display/MapPreview/MapOverlays.tsx","../../src/components/data-display/MapPreview/MapSearchBar.tsx","../../src/components/data-display/MapPreview/MapMarkers.tsx","../../src/components/data-display/MapPreview/mapSurface.ts","../../src/components/data-display/MapPreview/StaticMapView.tsx","../../src/components/data-display/MapPreview/mapProjection.ts","../../src/components/data-display/MapPreview/MapDecorations.tsx","../../src/components/data-display/MapPreview/MapTiles.tsx","../../src/components/data-display/MapPreview/useMapPreview.ts","../../src/components/data-display/MapPreview/MapPreview.hooks.ts"],"sourcesContent":["import { alpha, Box, Paper, styled, useTheme } from '@mui/material';\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","import type { Theme } from '@mui/material';\nimport { alpha } from '@mui/material';\n\nimport { DEFAULT_ZOOM } from './MapPreview.constants';\nimport type { MapPreviewProps } from './MapPreview.types';\n\ntype MapDefaultedKeys =\n | 'markers'\n | 'marker'\n | 'height'\n | 'interactive'\n | 'zoom'\n | 'mapType'\n | 'variant'\n | 'showControls'\n | 'showSearch'\n | 'searchPlaceholder'\n | 'showRoute'\n | 'heatmapData'\n | 'showHeatmap'\n | 'animated';\n\nexport type ResolvedMapPreviewProps = MapPreviewProps &\n Required<Pick<MapPreviewProps, MapDefaultedKeys>>;\n\nconst MAP_PREVIEW_DEFAULTS: Pick<MapPreviewProps, MapDefaultedKeys> = {\n markers: [],\n marker: true,\n height: '400px',\n interactive: false,\n zoom: DEFAULT_ZOOM,\n mapType: 'roadmap',\n variant: 'default',\n showControls: true,\n showSearch: false,\n searchPlaceholder: 'Search location...',\n showRoute: false,\n heatmapData: [],\n showHeatmap: false,\n animated: true,\n};\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default exactly as a destructuring default would.\nconst definedProps = (props: MapPreviewProps): Partial<MapPreviewProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<MapPreviewProps>;\n\n// Applied as a merge rather than destructuring defaults, which would otherwise\n// put fourteen branches into the component's own complexity budget.\nexport const resolveMapPreviewProps = (props: MapPreviewProps): ResolvedMapPreviewProps =>\n ({ ...MAP_PREVIEW_DEFAULTS, ...definedProps(props) }) as ResolvedMapPreviewProps;\n\nexport const glassStyles = (variant: MapPreviewProps['variant'], theme: Theme) =>\n variant === 'glass'\n ? {\n background: alpha(theme.palette.background.paper, 0.7),\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n }\n : {};\n","import type { MapType } from './MapPreview.types';\n\nexport const MIN_ZOOM = 1;\nexport const MAX_ZOOM = 20;\nexport const DEFAULT_ZOOM = 15;\nexport const CITY_ZOOM = 12;\n\n// The order the map-type button cycles through.\nexport const MAP_TYPES: MapType[] = ['roadmap', 'satellite', 'hybrid', 'terrain'];\n\n// Degrees of movement per pixel dragged — small enough that a drag reads as a\n// nudge rather than a jump.\nexport const DRAG_DEGREES_PER_PIXEL = 0.0001;\n\n// Spread of the simulated coordinate change a map click produces.\nexport const CLICK_JITTER_DEGREES = 0.001;\n\nexport const MARKER_PIXELS_PER_DEGREE = 100;\nexport const HEATMAP_VIEWBOX = { width: 800, height: 400 };\n","import { useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { HEATMAP_VIEWBOX } from './MapPreview.constants';\nimport type { ResolvedMapPreviewProps } from './MapPreview.helpers';\nimport type { MapType } from './MapPreview.types';\nimport { MapControlBar } from './MapControlBar';\nimport { HeatmapOverlay, RouteOverlay } from './MapOverlays';\nimport { MapSearchBar } from './MapSearchBar';\n\nexport interface MapLayersProps {\n settings: ResolvedMapPreviewProps;\n zoom: number;\n mapType: MapType;\n search: {\n searchValue: string;\n isSearching: boolean;\n setSearchValue: (value: string) => void;\n handleSearch: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n };\n controls: {\n handleZoomIn: () => void;\n handleZoomOut: () => void;\n handleCenter: () => void;\n handleToggleMapType: () => void;\n handleToggleFullscreen: () => void;\n };\n}\n\n// Everything drawn over the map surface that is switched on by a prop.\nexport const MapLayers: FC<MapLayersProps> = ({ settings, zoom, mapType, search, controls }) => {\n const theme = useTheme();\n\n return (\n <>\n {settings.showHeatmap && settings.heatmapData.length > 0 && (\n <HeatmapOverlay\n points={settings.heatmapData}\n width={HEATMAP_VIEWBOX.width}\n height={HEATMAP_VIEWBOX.height}\n />\n )}\n\n {settings.showRoute && <RouteOverlay color={settings.routeColor || theme.palette.primary.main} />}\n\n {settings.showSearch && (\n <MapSearchBar\n value={search.searchValue}\n placeholder={settings.searchPlaceholder}\n isSearching={search.isSearching}\n onChange={search.setSearchValue}\n onSubmit={search.handleSearch}\n />\n )}\n\n {settings.showControls && (\n <MapControlBar\n zoom={zoom}\n mapType={mapType}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onCenter={controls.handleCenter}\n onToggleMapType={controls.handleToggleMapType}\n onToggleFullscreen={controls.handleToggleFullscreen}\n />\n )}\n </>\n );\n};\n","import FullscreenIcon from '@mui/icons-material/Fullscreen';\nimport LayersIcon from '@mui/icons-material/Layers';\nimport CenterIcon from '@mui/icons-material/MyLocation';\nimport ZoomInIcon from '@mui/icons-material/ZoomIn';\nimport ZoomOutIcon from '@mui/icons-material/ZoomOut';\nimport { alpha, Box, IconButton, styled, Tooltip } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { MAX_ZOOM, MIN_ZOOM } from './MapPreview.constants';\nimport type { MapType } from './MapPreview.types';\n\n// Kept module-local: the inferred type of a styled() component cannot be named\n// across a module boundary here (TS2742).\nconst MapControls = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: theme.spacing(2),\n right: theme.spacing(2),\n zIndex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n}));\n\nconst ControlButton = styled(IconButton)(({ theme }) => ({\n background: alpha(theme.palette.background.paper, 0.95),\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.shadows[2],\n // Kept clickable while disabled so hover tooltips still work at the limits.\n pointerEvents: 'auto',\n '&:hover': {\n background: theme.palette.background.paper,\n transform: 'scale(1.05)',\n },\n '&:disabled': {\n opacity: 0.5,\n pointerEvents: 'auto',\n },\n}));\n\nexport interface MapControlBarProps {\n zoom: number;\n mapType: MapType;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onCenter: () => void;\n onToggleMapType: () => void;\n onToggleFullscreen: () => void;\n}\n\nexport const MapControlBar: FC<MapControlBarProps> = ({\n zoom,\n mapType,\n onZoomIn,\n onZoomOut,\n onCenter,\n onToggleMapType,\n onToggleFullscreen,\n}) => (\n <MapControls data-testid=\"map-controls\">\n <Tooltip title=\"Zoom in\" placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onZoomIn}\n aria-label=\"Zoom in\"\n data-testid=\"zoom-in-button\"\n disabled={zoom >= MAX_ZOOM}\n >\n <ZoomInIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title=\"Zoom out\" placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onZoomOut}\n aria-label=\"Zoom out\"\n data-testid=\"zoom-out-button\"\n disabled={zoom <= MIN_ZOOM}\n >\n <ZoomOutIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title=\"Center map\" placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onCenter}\n aria-label=\"Center map\"\n data-testid=\"center-button\"\n >\n <CenterIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title={`Map type: ${mapType}`} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onToggleMapType}\n aria-label=\"Change map type\"\n data-testid=\"map-type-button\"\n >\n <LayersIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title=\"Toggle fullscreen\" placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onToggleFullscreen}\n aria-label=\"Toggle fullscreen\"\n data-testid=\"fullscreen-button\"\n >\n <FullscreenIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n </MapControls>\n);\n","import { useTheme } from '@mui/material';\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","import SearchIcon from '@mui/icons-material/Search';\nimport { alpha, Box, InputAdornment, styled, TextField } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\n// Kept module-local: styled() components cannot be exported across a module\n// boundary here without tripping TS2742.\nconst SearchBar = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: theme.spacing(2),\n left: '50%',\n transform: 'translateX(-50%)',\n zIndex: 2,\n width: '90%',\n maxWidth: 400,\n}));\n\nconst SearchField = styled(TextField)(({ theme }) => ({\n '& .MuiOutlinedInput-root': {\n background: alpha(theme.palette.background.paper, 0.95),\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n borderRadius: theme.shape.borderRadius * 2,\n '& fieldset': {\n borderColor: alpha(theme.palette.divider, 0.2),\n },\n },\n}));\n\nexport interface MapSearchBarProps {\n value: string;\n placeholder: string;\n isSearching: boolean;\n onChange: (value: string) => void;\n onSubmit: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n}\n\nexport const MapSearchBar: FC<MapSearchBarProps> = ({\n value,\n placeholder,\n isSearching,\n onChange,\n onSubmit,\n}) => (\n <SearchBar>\n <SearchField\n fullWidth\n size=\"small\"\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n onKeyPress={onSubmit}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" sx={{ opacity: isSearching ? 0.5 : 1 }} />\n </InputAdornment>\n ),\n }}\n disabled={isSearching}\n aria-label=\"Search location\"\n />\n </SearchBar>\n);\n","import LocationIcon from '@mui/icons-material/LocationOn';\nimport { alpha, Box, styled, Tooltip, Typography, useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { MARKER_PIXELS_PER_DEGREE } from './MapPreview.constants';\nimport type { LatLng, MapMarker } from './MapPreview.types';\nimport { BOUNCE_KEYFRAMES } from './mapSurface';\n\n// Kept module-local: styled() components cannot be exported across a module\n// boundary here without tripping TS2742.\nconst CoordinatesDisplay = styled(Box)(({ theme }) => ({\n position: 'absolute',\n bottom: theme.spacing(2),\n left: theme.spacing(2),\n padding: theme.spacing(1, 1.5),\n background: alpha(theme.palette.background.paper, 0.95),\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n borderRadius: theme.shape.borderRadius,\n zIndex: 1,\n}));\n\nexport interface MapMarkersProps {\n markers: MapMarker[];\n centre: LatLng;\n animated: boolean;\n}\n\n// Markers are placed relative to the current centre, so panning moves them with\n// the surface.\nexport const MapMarkers: FC<MapMarkersProps> = ({ markers, centre, animated }) => {\n const theme = useTheme();\n\n return (\n <>\n {markers.map((markerItem, index) => (\n <Box\n key={`${markerItem.position.lat}-${markerItem.position.lng}-${index}`}\n data-testid={`map-marker-${index}`}\n sx={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: `translate(\n ${(markerItem.position.lng - centre.lng) * MARKER_PIXELS_PER_DEGREE}px,\n ${-(markerItem.position.lat - centre.lat) * MARKER_PIXELS_PER_DEGREE}px\n )`,\n zIndex: 3,\n cursor: markerItem.onClick ? 'pointer' : 'default',\n }}\n onClick={markerItem.onClick}\n title={markerItem.title}\n >\n <Tooltip title={markerItem.description || markerItem.title || ''}>\n <LocationIcon\n sx={{\n fontSize: 32,\n color: theme.palette.error.main,\n filter: 'drop-shadow(0 2px 4px rgba(0,0,0,0.3))',\n animation: animated ? 'bounce 2s infinite' : 'none',\n '@keyframes bounce': BOUNCE_KEYFRAMES,\n }}\n />\n </Tooltip>\n </Box>\n ))}\n </>\n );\n};\n\nexport const MapCoordinates: FC<{ position: LatLng; zoom: number }> = ({ position, zoom }) => (\n <CoordinatesDisplay data-testid=\"coordinates-display\">\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace' }}>\n Lat: {position.lat.toFixed(6)}, Lng: {position.lng.toFixed(6)}\n </Typography>\n {zoom > 0 && (\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace', display: 'block' }}>\n Zoom: {zoom}\n </Typography>\n )}\n </CoordinatesDisplay>\n);\n","import type { Theme } from '@mui/material';\nimport { alpha } from '@mui/material';\n\nimport type { MapType } from './MapPreview.types';\n\ntype GreyShade = keyof Theme['palette']['grey'];\n\nconst greyGradient = (theme: Theme, from: GreyShade, to: GreyShade, opacity = 1): string => {\n const shade = (key: GreyShade) => alpha(theme.palette.grey[key], opacity);\n return `linear-gradient(135deg, ${shade(from)} 0%, ${shade(to)} 100%)`;\n};\n\n// The backdrop behind the tiles: dark for satellite, green for terrain, and\n// grey for road maps, following the theme's own light/dark choice.\nexport const surfaceBackground = (mapType: MapType, theme: Theme): string => {\n if (mapType === 'satellite') return greyGradient(theme, 900, 800);\n if (mapType === 'terrain') {\n return `linear-gradient(135deg, ${alpha('#8BC34A', 0.2)} 0%, ${alpha('#4CAF50', 0.3)} 100%)`;\n }\n if (theme.palette.mode === 'dark') return greyGradient(theme, 900, 800);\n return greyGradient(theme, 100, 200);\n};\n\nexport const tileBackground = (mapType: MapType, theme: Theme): string => {\n if (mapType === 'satellite') {\n return `linear-gradient(135deg, ${alpha('#1a1a1a', 0.9)} 0%, ${alpha('#2a2a2a', 0.9)} 100%)`;\n }\n if (mapType === 'terrain') {\n return `linear-gradient(135deg, ${alpha('#7cb342', 0.1)} 0%, ${alpha('#558b2f', 0.1)} 100%)`;\n }\n return greyGradient(theme, 100, 200, 0.5);\n};\n\nexport const BOUNCE_KEYFRAMES = {\n '0%, 100%': { transform: 'translateY(0)' },\n '50%': { transform: 'translateY(-10px)' },\n} as const;\n","import { Box, useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React, { useMemo } from 'react';\n\nimport { getTileCoordinates } from './mapProjection';\nimport { surfaceBackground } from './mapSurface';\nimport type { LatLng, MapType } from './MapPreview.types';\nimport {\n MapCentreMarker,\n MapCompass,\n MapDecorativePins,\n MapRoads,\n MapScaleBar,\n} from './MapDecorations';\nimport { MapTiles } from './MapTiles';\n\nexport interface StaticMapViewProps {\n height: string;\n zoom: number;\n mapType: MapType;\n marker?: boolean;\n markerPosition?: LatLng;\n panOffset?: { x: number; y: number };\n}\n\n// A stand-in map surface: a tile grid at the right coordinates for the current\n// position and zoom, with the usual furniture drawn over it.\nexport const StaticMapView: FC<StaticMapViewProps> = ({\n height,\n zoom,\n mapType,\n marker,\n markerPosition,\n panOffset = { x: 0, y: 0 },\n}) => {\n const theme = useTheme();\n\n const tileOrigin = useMemo(\n () =>\n markerPosition ? getTileCoordinates(markerPosition.lat, markerPosition.lng, zoom) : null,\n [markerPosition, zoom],\n );\n\n return (\n <Box\n data-testid=\"static-map-view\"\n sx={{\n width: '100%',\n height,\n position: 'relative',\n background: surfaceBackground(mapType, theme),\n overflow: 'hidden',\n }}\n >\n <MapTiles origin={tileOrigin} zoom={zoom} mapType={mapType} panOffset={panOffset} />\n <MapRoads />\n {marker && <MapCentreMarker />}\n <MapDecorativePins />\n <MapScaleBar zoom={zoom} />\n <MapCompass />\n </Box>\n );\n};\n","export const TILE_SIZE = 256;\n\n// Metres covered by one pixel at zoom 0 on the equator; each zoom level halves it.\nconst EQUATOR_METRES_PER_PIXEL = 156543.03392;\nconst SCALE_BAR_PIXELS = 100;\nconst GEOCODE_DELAY_MS = 300;\n\n// Web Mercator. Longitude maps linearly; latitude goes through the log of the\n// tangent, clamped just short of the poles where that diverges.\nconst project = (lat: number, lng: number) => {\n const siny = Math.sin((lat * Math.PI) / 180);\n const boundedSiny = Math.max(-0.9999, Math.min(0.9999, siny));\n\n return {\n x: TILE_SIZE * (0.5 + lng / 360),\n y: TILE_SIZE * (0.5 - Math.log((1 + boundedSiny) / (1 - boundedSiny)) / (4 * Math.PI)),\n };\n};\n\nexport const getTileCoordinates = (lat: number, lng: number, zoom: number) => {\n const scale = 1 << zoom;\n const world = project(lat, lng);\n\n return {\n x: Math.floor(Math.floor(world.x * scale) / TILE_SIZE),\n y: Math.floor(Math.floor(world.y * scale) / TILE_SIZE),\n };\n};\n\nexport const getScaleDistance = (zoom: number): string => {\n const distance = (EQUATOR_METRES_PER_PIXEL / Math.pow(2, zoom)) * SCALE_BAR_PIXELS;\n\n if (distance >= 1000) return `${Math.round(distance / 1000)} km`;\n // Round to the nearest 100m so the bar reads as a round number.\n if (distance >= 100) return `${Math.round(distance / 100) * 100} m`;\n return `${Math.round(distance)} m`;\n};\n\nconst MOCK_GEOCODE_RESULTS: Record<string, { lat: number; lng: number }> = {\n 'san francisco': { lat: 37.7749, lng: -122.4194 },\n 'new york': { lat: 40.7128, lng: -74.006 },\n london: { lat: 51.5074, lng: -0.1278 },\n tokyo: { lat: 35.6762, lng: 139.6503 },\n paris: { lat: 48.8566, lng: 2.3522 },\n};\n\n// Stands in for a Places lookup, delay included so the disabled search field is\n// actually observable.\nexport const geocode = async (address: string): Promise<{ lat: number; lng: number } | null> => {\n await new Promise((resolve) => window.setTimeout(resolve, GEOCODE_DELAY_MS));\n return MOCK_GEOCODE_RESULTS[address.toLowerCase().trim()] || null;\n};\n","import LocationIcon from '@mui/icons-material/LocationOn';\nimport NavigationIcon from '@mui/icons-material/Navigation';\nimport PlaceIcon from '@mui/icons-material/Place';\nimport { alpha, Box, Typography, useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { getScaleDistance } from './mapProjection';\nimport { BOUNCE_KEYFRAMES } from './mapSurface';\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: 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 rgba(0,0,0,0.3))',\n }}\n >\n <LocationIcon\n sx={{\n fontSize: 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: '0.75rem',\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: 24, color: theme.palette.primary.main, transform: 'rotate(-45deg)' }}\n />\n </Box>\n );\n};\n","import { alpha, useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { TILE_SIZE } from './mapProjection';\nimport { tileBackground } from './mapSurface';\nimport type { MapType } from './MapPreview.types';\n\n// Two extra rows and columns so panning does not expose an edge.\nconst VISIBLE_TILES = Math.ceil(800 / TILE_SIZE) + 2;\n// Tile coordinates are only legible once the grid is reasonably fine.\nconst LABEL_MIN_ZOOM = 10;\n\nexport interface MapTilesProps {\n origin: { x: number; y: number } | null;\n zoom: number;\n mapType: MapType;\n panOffset: { x: number; y: number };\n}\n\nexport const MapTiles: FC<MapTilesProps> = ({ origin, zoom, mapType, panOffset }) => {\n const theme = useTheme();\n const borderOpacity = theme.palette.mode === 'dark' ? 0.15 : 0.1;\n const background = tileBackground(mapType, theme);\n const half = Math.floor(VISIBLE_TILES / 2);\n\n return (\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: `translate(calc(-50% + ${panOffset.x}px), calc(-50% + ${panOffset.y}px))`,\n width: TILE_SIZE * VISIBLE_TILES,\n height: TILE_SIZE * VISIBLE_TILES,\n display: 'grid',\n gridTemplateColumns: `repeat(${VISIBLE_TILES}, ${TILE_SIZE}px)`,\n gridTemplateRows: `repeat(${VISIBLE_TILES}, ${TILE_SIZE}px)`,\n transition: 'transform 0.1s ease-out',\n }}\n >\n {Array.from({ length: VISIBLE_TILES * VISIBLE_TILES }).map((_, index) => {\n // The grid is centred on the origin tile, so indices run from -half.\n const tileX = (origin?.x || 0) + (index % VISIBLE_TILES) - half;\n const tileY = (origin?.y || 0) + Math.floor(index / VISIBLE_TILES) - half;\n\n return (\n <div\n key={`tile-${tileX}-${tileY}`}\n style={{\n width: TILE_SIZE,\n height: TILE_SIZE,\n border: `1px solid ${alpha(theme.palette.divider, borderOpacity)}`,\n background,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '10px',\n color: alpha(theme.palette.text.secondary, 0.3),\n fontFamily: 'monospace',\n userSelect: 'none',\n }}\n >\n {zoom > LABEL_MIN_ZOOM && `${tileX},${tileY}`}\n </div>\n );\n })}\n </div>\n );\n};\n","import { useMemo, useRef } from 'react';\n\nimport {\n useMapClick,\n useMapControls,\n useMapPointer,\n useMapSearch,\n useMapView,\n} from './MapPreview.hooks';\nimport type { ResolvedMapPreviewProps } from './MapPreview.helpers';\n\n// Wires the map's independent concerns together: the view state first, then the\n// controls, pointer handling and search that all write to it.\nexport const useMapPreview = (props: ResolvedMapPreviewProps) => {\n const { center, coordinates: legacyCoordinates, interactive, onMarkerDrag, onMapClick } = props;\n\n // `center` supersedes the older `coordinates` prop; either may be omitted.\n const coordinates = useMemo(\n () => center || legacyCoordinates || { lat: 0, lng: 0 },\n [center, legacyCoordinates],\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n const view = useMapView({\n coordinates,\n initialZoom: props.zoom,\n initialMapType: props.mapType,\n });\n\n const controls = useMapControls({\n coordinates,\n zoom: view.zoom,\n mapType: view.mapType,\n zoomTo: view.zoomTo,\n setMapType: view.setMapType,\n setMarkerPosition: view.setMarkerPosition,\n setPanOffset: view.setPanOffset,\n containerRef,\n });\n\n const pointer = useMapPointer({\n interactive,\n markerPosition: view.markerPosition,\n panOffset: view.panOffset,\n onMarkerDrag,\n setMarkerPosition: view.setMarkerPosition,\n setPanOffset: view.setPanOffset,\n });\n\n const search = useMapSearch({ zoomTo: view.zoomTo, setMarkerPosition: view.setMarkerPosition });\n\n const handleMapClick = useMapClick({\n coordinates,\n interactive,\n isPanning: pointer.isPanning,\n onMapClick,\n onMarkerDrag,\n setMarkerPosition: view.setMarkerPosition,\n });\n\n return { containerRef, view, controls, pointer, search, handleMapClick };\n};\n","import type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { geocode } from './mapProjection';\nimport {\n CITY_ZOOM,\n CLICK_JITTER_DEGREES,\n DRAG_DEGREES_PER_PIXEL,\n MAP_TYPES,\n MAX_ZOOM,\n MIN_ZOOM,\n} from './MapPreview.constants';\nimport type { LatLng, MapType } from './MapPreview.types';\n\nconst ORIGIN = { x: 0, y: 0 };\n\nexport const useMapView = ({\n coordinates,\n initialZoom,\n initialMapType,\n}: {\n coordinates: LatLng;\n initialZoom: number;\n initialMapType: MapType;\n}) => {\n const [zoom, setZoom] = useState(initialZoom);\n const [mapType, setMapType] = useState<MapType>(initialMapType);\n const [markerPosition, setMarkerPosition] = useState(coordinates);\n const [panOffset, setPanOffset] = useState(ORIGIN);\n\n useEffect(() => {\n setMarkerPosition(coordinates);\n }, [coordinates]);\n\n // Panning is relative to the tile grid, so a zoom change invalidates it.\n const zoomTo = useCallback((next: number) => {\n setZoom(next);\n setPanOffset(ORIGIN);\n }, []);\n\n return {\n zoom,\n zoomTo,\n mapType,\n setMapType,\n markerPosition,\n setMarkerPosition,\n panOffset,\n setPanOffset,\n };\n};\n\nexport const useMapControls = ({\n coordinates,\n zoom,\n mapType,\n zoomTo,\n setMapType,\n setMarkerPosition,\n setPanOffset,\n containerRef,\n}: {\n coordinates: LatLng;\n zoom: number;\n mapType: MapType;\n zoomTo: (zoom: number) => void;\n setMapType: (type: MapType) => void;\n setMarkerPosition: (position: LatLng) => void;\n setPanOffset: (offset: { x: number; y: number }) => void;\n containerRef: React.RefObject<HTMLDivElement | null>;\n}) => {\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n const handleZoomIn = useCallback(() => zoomTo(Math.min(zoom + 1, MAX_ZOOM)), [zoom, zoomTo]);\n const handleZoomOut = useCallback(() => zoomTo(Math.max(zoom - 1, MIN_ZOOM)), [zoom, zoomTo]);\n\n const handleCenter = useCallback(() => {\n setMarkerPosition({ ...coordinates });\n setPanOffset(ORIGIN);\n }, [coordinates, setMarkerPosition, setPanOffset]);\n\n const handleToggleMapType = useCallback(() => {\n const nextIndex = (MAP_TYPES.indexOf(mapType) + 1) % MAP_TYPES.length;\n setMapType(MAP_TYPES[nextIndex] as MapType);\n }, [mapType, setMapType]);\n\n const handleToggleFullscreen = useCallback(() => {\n if (!isFullscreen && containerRef.current) {\n containerRef.current.requestFullscreen?.();\n } else if (document.fullscreenElement) {\n document.exitFullscreen?.();\n }\n setIsFullscreen((prev) => !prev);\n }, [isFullscreen, containerRef]);\n\n return {\n isFullscreen,\n handleZoomIn,\n handleZoomOut,\n handleCenter,\n handleToggleMapType,\n handleToggleFullscreen,\n };\n};\n\ninterface DragStart {\n x: number;\n y: number;\n lat: number;\n lng: number;\n}\n\ninterface PanStart {\n x: number;\n y: number;\n offsetX: number;\n offsetY: number;\n}\n\nconst isOnMapSurface = (target: HTMLElement): boolean =>\n target.dataset.testid === 'static-map-view' ||\n Boolean(target.closest('[data-testid=\"static-map-view\"]'));\n\nconst panTo = (event: React.MouseEvent, start: PanStart) => ({\n x: start.offsetX + (event.clientX - start.x),\n y: start.offsetY + (event.clientY - start.y),\n});\n\nconst dragTo = (event: React.MouseEvent, start: DragStart): LatLng => ({\n lat: start.lat + (event.clientY - start.y) * DRAG_DEGREES_PER_PIXEL,\n lng: start.lng + (event.clientX - start.x) * DRAG_DEGREES_PER_PIXEL,\n});\n\n// Shift-drag pans the surface; a plain drag moves the marker.\nexport const useMapPointer = ({\n interactive,\n markerPosition,\n panOffset,\n onMarkerDrag,\n setMarkerPosition,\n setPanOffset,\n}: {\n interactive: boolean;\n markerPosition: LatLng;\n panOffset: { x: number; y: number };\n onMarkerDrag?: (coords: LatLng) => void;\n setMarkerPosition: (position: LatLng) => void;\n setPanOffset: (offset: { x: number; y: number }) => void;\n}) => {\n const [isDragging, setIsDragging] = useState(false);\n const [isPanning, setIsPanning] = useState(false);\n const dragStartRef = useRef<DragStart | null>(null);\n const panStartRef = useRef<PanStart | null>(null);\n\n const handleMouseDown = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!interactive) return;\n const { clientX: x, clientY: y } = event;\n\n if (isOnMapSurface(event.target as HTMLElement) && event.shiftKey) {\n setIsPanning(true);\n panStartRef.current = { x, y, offsetX: panOffset.x, offsetY: panOffset.y };\n return;\n }\n\n setIsDragging(true);\n dragStartRef.current = { x, y, lat: markerPosition.lat, lng: markerPosition.lng };\n },\n [interactive, markerPosition, panOffset],\n );\n\n const handleMouseMove = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n const panStart = panStartRef.current;\n if (isPanning && panStart) {\n setPanOffset(panTo(event, panStart));\n return;\n }\n\n const dragStart = dragStartRef.current;\n if (!isDragging || !dragStart) return;\n\n const position = dragTo(event, dragStart);\n setMarkerPosition(position);\n onMarkerDrag?.(position);\n },\n [isDragging, isPanning, onMarkerDrag, setMarkerPosition, setPanOffset],\n );\n\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n setIsPanning(false);\n dragStartRef.current = null;\n panStartRef.current = null;\n }, []);\n\n return { isDragging, isPanning, handleMouseDown, handleMouseMove, handleMouseUp };\n};\n\nexport const useMapSearch = ({\n zoomTo,\n setMarkerPosition,\n}: {\n zoomTo: (zoom: number) => void;\n setMarkerPosition: (position: LatLng) => void;\n}) => {\n const [searchValue, setSearchValue] = useState('');\n const [isSearching, setIsSearching] = useState(false);\n\n const handleSearch = useCallback(\n async (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Enter' || !searchValue) return;\n\n setIsSearching(true);\n try {\n const result = await geocode(searchValue);\n // An unknown place leaves the map where it is; a production build would\n // surface an error here.\n if (!result) return;\n\n setMarkerPosition({ ...result });\n zoomTo(CITY_ZOOM);\n } finally {\n setIsSearching(false);\n }\n },\n [searchValue, zoomTo, setMarkerPosition],\n );\n\n return { searchValue, setSearchValue, isSearching, handleSearch };\n};\n\nexport const useMapClick = ({\n coordinates,\n interactive,\n isPanning,\n onMapClick,\n onMarkerDrag,\n setMarkerPosition,\n}: {\n coordinates: LatLng;\n interactive: boolean;\n isPanning: boolean;\n onMapClick?: (lat: number, lng: number) => void;\n onMarkerDrag?: (coords: LatLng) => void;\n setMarkerPosition: (position: LatLng) => void;\n}) =>\n useCallback(() => {\n // A pan ends with a click event; that should not also drop a marker.\n if (isPanning) return;\n\n // Without a real projection there is nothing to convert a click position\n // into, so the mock jitters around the centre instead.\n const coords = {\n lat: coordinates.lat + (Math.random() - 0.5) * CLICK_JITTER_DEGREES,\n lng: coordinates.lng + (Math.random() - 0.5) * CLICK_JITTER_DEGREES,\n };\n\n onMapClick?.(coords.lat, coords.lng);\n\n if (interactive && onMarkerDrag) {\n setMarkerPosition(coords);\n onMarkerDrag(coords);\n }\n }, [coordinates, interactive, isPanning, onMapClick, onMarkerDrag, setMarkerPosition]);\n"],"mappings":"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","names":["alpha","Box","styled","useTheme","useTheme","alpha","alpha","jsx","alpha","Box","styled","jsx","jsx","jsxs","useTheme","alpha","Box","styled","Tooltip","useTheme","alpha","Fragment","jsx","jsxs","styled","Box","alpha","useTheme","Tooltip","Box","useTheme","LocationIcon","alpha","Box","Typography","useTheme","Fragment","jsx","jsxs","useTheme","Box","LocationIcon","alpha","Typography","alpha","useTheme","jsx","useTheme","alpha","jsx","jsxs","useTheme","Box","useMemo","useRef","useMemo","useRef","jsx","jsxs","styled","alpha","Box","useTheme"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/data-display/MapPreview/MapPreview.tsx","../../src/components/data-display/MapPreview/MapPreview.helpers.ts","../../src/components/data-display/MapPreview/MapPreview.constants.ts","../../src/components/data-display/MapPreview/MapLayers.tsx","../../src/components/data-display/MapPreview/MapControlBar.tsx","../../src/components/data-display/MapPreview/MapOverlays.tsx","../../src/components/data-display/MapPreview/MapSearchBar.tsx","../../src/components/data-display/MapPreview/MapMarkers.tsx","../../src/components/data-display/MapPreview/mapSurface.ts","../../src/components/data-display/MapPreview/StaticMapView.tsx","../../src/components/data-display/MapPreview/mapProjection.ts","../../src/components/data-display/MapPreview/MapDecorations.tsx","../../src/components/data-display/MapPreview/MapTiles.tsx","../../src/components/data-display/MapPreview/useMapPreview.ts","../../src/components/data-display/MapPreview/MapPreview.hooks.ts"],"sourcesContent":["import { alpha, Box, Paper, styled, useTheme } from '@mui/material';\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","import type { Theme } from '@mui/material';\nimport { alpha } from '@mui/material';\n\nimport { DEFAULT_ZOOM } from './MapPreview.constants';\nimport type { MapPreviewProps } from './MapPreview.types';\n\ntype MapDefaultedKeys =\n | 'markers'\n | 'marker'\n | 'height'\n | 'interactive'\n | 'zoom'\n | 'mapType'\n | 'variant'\n | 'showControls'\n | 'showSearch'\n | 'searchPlaceholder'\n | 'showRoute'\n | 'heatmapData'\n | 'showHeatmap'\n | 'animated';\n\nexport type ResolvedMapPreviewProps = MapPreviewProps &\n Required<Pick<MapPreviewProps, MapDefaultedKeys>>;\n\nconst MAP_PREVIEW_DEFAULTS: Pick<MapPreviewProps, MapDefaultedKeys> = {\n markers: [],\n marker: true,\n height: '400px',\n interactive: false,\n zoom: DEFAULT_ZOOM,\n mapType: 'roadmap',\n variant: 'default',\n showControls: true,\n showSearch: false,\n searchPlaceholder: 'Search location...',\n showRoute: false,\n heatmapData: [],\n showHeatmap: false,\n animated: true,\n};\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default exactly as a destructuring default would.\nconst definedProps = (props: MapPreviewProps): Partial<MapPreviewProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<MapPreviewProps>;\n\n// Applied as a merge rather than destructuring defaults, which would otherwise\n// put fourteen branches into the component's own complexity budget.\nexport const resolveMapPreviewProps = (props: MapPreviewProps): ResolvedMapPreviewProps =>\n ({ ...MAP_PREVIEW_DEFAULTS, ...definedProps(props) }) as ResolvedMapPreviewProps;\n\nexport const glassStyles = (variant: MapPreviewProps['variant'], theme: Theme) =>\n variant === 'glass'\n ? {\n background: alpha(theme.palette.background.paper, 0.7),\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n }\n : {};\n","import type { MapType } from './MapPreview.types';\n\nexport const MIN_ZOOM = 1;\nexport const MAX_ZOOM = 20;\nexport const DEFAULT_ZOOM = 15;\nexport const CITY_ZOOM = 12;\n\n// The order the map-type button cycles through.\nexport const MAP_TYPES: MapType[] = ['roadmap', 'satellite', 'hybrid', 'terrain'];\n\n// Degrees of movement per pixel dragged — small enough that a drag reads as a\n// nudge rather than a jump.\nexport const DRAG_DEGREES_PER_PIXEL = 0.0001;\n\n// Spread of the simulated coordinate change a map click produces.\nexport const CLICK_JITTER_DEGREES = 0.001;\n\nexport const MARKER_PIXELS_PER_DEGREE = 100;\nexport const HEATMAP_VIEWBOX = { width: 800, height: 400 };\n","import { useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { HEATMAP_VIEWBOX } from './MapPreview.constants';\nimport type { ResolvedMapPreviewProps } from './MapPreview.helpers';\nimport type { MapType } from './MapPreview.types';\nimport { MapControlBar } from './MapControlBar';\nimport { HeatmapOverlay, RouteOverlay } from './MapOverlays';\nimport { MapSearchBar } from './MapSearchBar';\n\nexport interface MapLayersProps {\n settings: ResolvedMapPreviewProps;\n zoom: number;\n mapType: MapType;\n search: {\n searchValue: string;\n isSearching: boolean;\n setSearchValue: (value: string) => void;\n handleSearch: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n };\n controls: {\n handleZoomIn: () => void;\n handleZoomOut: () => void;\n handleCenter: () => void;\n handleToggleMapType: () => void;\n handleToggleFullscreen: () => void;\n };\n}\n\n// Everything drawn over the map surface that is switched on by a prop.\nexport const MapLayers: FC<MapLayersProps> = ({ settings, zoom, mapType, search, controls }) => {\n const theme = useTheme();\n\n return (\n <>\n {settings.showHeatmap && settings.heatmapData.length > 0 && (\n <HeatmapOverlay\n points={settings.heatmapData}\n width={HEATMAP_VIEWBOX.width}\n height={HEATMAP_VIEWBOX.height}\n />\n )}\n\n {settings.showRoute && <RouteOverlay color={settings.routeColor || theme.palette.primary.main} />}\n\n {settings.showSearch && (\n <MapSearchBar\n label={settings.copy.search}\n value={search.searchValue}\n placeholder={settings.searchPlaceholder}\n isSearching={search.isSearching}\n onChange={search.setSearchValue}\n onSubmit={search.handleSearch}\n />\n )}\n\n {settings.showControls && (\n <MapControlBar\n copy={settings.copy}\n zoom={zoom}\n mapType={mapType}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onCenter={controls.handleCenter}\n onToggleMapType={controls.handleToggleMapType}\n onToggleFullscreen={controls.handleToggleFullscreen}\n />\n )}\n </>\n );\n};\n","import FullscreenIcon from '@mui/icons-material/Fullscreen';\nimport LayersIcon from '@mui/icons-material/Layers';\nimport CenterIcon from '@mui/icons-material/MyLocation';\nimport ZoomInIcon from '@mui/icons-material/ZoomIn';\nimport ZoomOutIcon from '@mui/icons-material/ZoomOut';\nimport { alpha, Box, IconButton, styled, Tooltip } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { MAX_ZOOM, MIN_ZOOM } from './MapPreview.constants';\nimport type { MapType } from './MapPreview.types';\nimport type { MapPreviewCopy } from '../../../copy';\n\n// Kept module-local: the inferred type of a styled() component cannot be named\n// across a module boundary here (TS2742).\nconst MapControls = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: theme.spacing(2),\n right: theme.spacing(2),\n zIndex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n}));\n\nconst ControlButton = styled(IconButton)(({ theme }) => ({\n background: alpha(theme.palette.background.paper, 0.95),\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.shadows[2],\n // Kept clickable while disabled so hover tooltips still work at the limits.\n pointerEvents: 'auto',\n '&:hover': {\n background: theme.palette.background.paper,\n transform: 'scale(1.05)',\n },\n '&:disabled': {\n opacity: 0.5,\n pointerEvents: 'auto',\n },\n}));\n\nexport interface MapControlBarProps {\n /**\n * The six controls' names. Every one is a glyph with a `title` AND an\n * `aria-label`, so this object is both the tooltip and what a screen reader\n * reads — REQUIRED, because a default is one language for every adopter.\n */\n copy: MapPreviewCopy;\n zoom: number;\n mapType: MapType;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onCenter: () => void;\n onToggleMapType: () => void;\n onToggleFullscreen: () => void;\n}\n\nexport const MapControlBar: FC<MapControlBarProps> = ({\n copy,\n zoom,\n mapType,\n onZoomIn,\n onZoomOut,\n onCenter,\n onToggleMapType,\n onToggleFullscreen,\n}) => (\n <MapControls data-testid=\"map-controls\">\n <Tooltip title={copy.zoomIn} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onZoomIn}\n aria-label={copy.zoomIn}\n data-testid=\"zoom-in-button\"\n disabled={zoom >= MAX_ZOOM}\n >\n <ZoomInIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title={copy.zoomOut} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onZoomOut}\n aria-label={copy.zoomOut}\n data-testid=\"zoom-out-button\"\n disabled={zoom <= MIN_ZOOM}\n >\n <ZoomOutIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title={copy.center} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onCenter}\n aria-label={copy.center}\n data-testid=\"center-button\"\n >\n <CenterIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title={`Map type: ${mapType}`} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onToggleMapType}\n aria-label={copy.mapType}\n data-testid=\"map-type-button\"\n >\n <LayersIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title={copy.fullscreen} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onToggleFullscreen}\n aria-label={copy.fullscreen}\n data-testid=\"fullscreen-button\"\n >\n <FullscreenIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n </MapControls>\n);\n","import { useTheme } from '@mui/material';\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","import SearchIcon from '@mui/icons-material/Search';\nimport { alpha, Box, InputAdornment, styled, TextField } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\n// Kept module-local: styled() components cannot be exported across a module\n// boundary here without tripping TS2742.\nconst SearchBar = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: theme.spacing(2),\n left: '50%',\n transform: 'translateX(-50%)',\n zIndex: 2,\n width: '90%',\n maxWidth: 400,\n}));\n\nconst SearchField = styled(TextField)(({ theme }) => ({\n '& .MuiOutlinedInput-root': {\n background: alpha(theme.palette.background.paper, 0.95),\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n borderRadius: theme.shape.borderRadius * 2,\n '& fieldset': {\n borderColor: alpha(theme.palette.divider, 0.2),\n },\n },\n}));\n\nexport interface MapSearchBarProps {\n /** The field's accessible name — it renders no visible label. REQUIRED. */\n label: string;\n value: string;\n placeholder: string;\n isSearching: boolean;\n onChange: (value: string) => void;\n onSubmit: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n}\n\nexport const MapSearchBar: FC<MapSearchBarProps> = ({\n label,\n value,\n placeholder,\n isSearching,\n onChange,\n onSubmit,\n}) => (\n <SearchBar>\n <SearchField\n fullWidth\n size=\"small\"\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n onKeyPress={onSubmit}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" sx={{ opacity: isSearching ? 0.5 : 1 }} />\n </InputAdornment>\n ),\n }}\n disabled={isSearching}\n aria-label={label}\n />\n </SearchBar>\n);\n","import LocationIcon from '@mui/icons-material/LocationOn';\nimport { alpha, Box, styled, Tooltip, Typography, useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { MARKER_PIXELS_PER_DEGREE } from './MapPreview.constants';\nimport type { LatLng, MapMarker } from './MapPreview.types';\nimport { BOUNCE_KEYFRAMES } from './mapSurface';\n\n// Kept module-local: styled() components cannot be exported across a module\n// boundary here without tripping TS2742.\nconst CoordinatesDisplay = styled(Box)(({ theme }) => ({\n position: 'absolute',\n bottom: theme.spacing(2),\n left: theme.spacing(2),\n padding: theme.spacing(1, 1.5),\n background: alpha(theme.palette.background.paper, 0.95),\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n borderRadius: theme.shape.borderRadius,\n zIndex: 1,\n}));\n\nexport interface MapMarkersProps {\n markers: MapMarker[];\n centre: LatLng;\n animated: boolean;\n}\n\n// Markers are placed relative to the current centre, so panning moves them with\n// the surface.\nexport const MapMarkers: FC<MapMarkersProps> = ({ markers, centre, animated }) => {\n const theme = useTheme();\n\n return (\n <>\n {markers.map((markerItem, index) => (\n <Box\n key={`${markerItem.position.lat}-${markerItem.position.lng}-${index}`}\n data-testid={`map-marker-${index}`}\n sx={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: `translate(\n ${(markerItem.position.lng - centre.lng) * MARKER_PIXELS_PER_DEGREE}px,\n ${-(markerItem.position.lat - centre.lat) * MARKER_PIXELS_PER_DEGREE}px\n )`,\n zIndex: 3,\n cursor: markerItem.onClick ? 'pointer' : 'default',\n }}\n onClick={markerItem.onClick}\n title={markerItem.title}\n >\n <Tooltip title={markerItem.description || markerItem.title || ''}>\n <LocationIcon\n sx={{\n fontSize: 32,\n color: theme.palette.error.main,\n filter: 'drop-shadow(0 2px 4px rgba(0,0,0,0.3))',\n animation: animated ? 'bounce 2s infinite' : 'none',\n '@keyframes bounce': BOUNCE_KEYFRAMES,\n }}\n />\n </Tooltip>\n </Box>\n ))}\n </>\n );\n};\n\nexport const MapCoordinates: FC<{ position: LatLng; zoom: number }> = ({ position, zoom }) => (\n <CoordinatesDisplay data-testid=\"coordinates-display\">\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace' }}>\n Lat: {position.lat.toFixed(6)}, Lng: {position.lng.toFixed(6)}\n </Typography>\n {zoom > 0 && (\n <Typography variant=\"caption\" sx={{ fontFamily: 'monospace', display: 'block' }}>\n Zoom: {zoom}\n </Typography>\n )}\n </CoordinatesDisplay>\n);\n","import type { Theme } from '@mui/material';\nimport { alpha } from '@mui/material';\n\nimport type { MapType } from './MapPreview.types';\n\ntype GreyShade = keyof Theme['palette']['grey'];\n\nconst greyGradient = (theme: Theme, from: GreyShade, to: GreyShade, opacity = 1): string => {\n const shade = (key: GreyShade) => alpha(theme.palette.grey[key], opacity);\n return `linear-gradient(135deg, ${shade(from)} 0%, ${shade(to)} 100%)`;\n};\n\n// The backdrop behind the tiles: dark for satellite, green for terrain, and\n// grey for road maps, following the theme's own light/dark choice.\nexport const surfaceBackground = (mapType: MapType, theme: Theme): string => {\n if (mapType === 'satellite') return greyGradient(theme, 900, 800);\n if (mapType === 'terrain') {\n return `linear-gradient(135deg, ${alpha('#8BC34A', 0.2)} 0%, ${alpha('#4CAF50', 0.3)} 100%)`;\n }\n if (theme.palette.mode === 'dark') return greyGradient(theme, 900, 800);\n return greyGradient(theme, 100, 200);\n};\n\nexport const tileBackground = (mapType: MapType, theme: Theme): string => {\n if (mapType === 'satellite') {\n return `linear-gradient(135deg, ${alpha('#1a1a1a', 0.9)} 0%, ${alpha('#2a2a2a', 0.9)} 100%)`;\n }\n if (mapType === 'terrain') {\n return `linear-gradient(135deg, ${alpha('#7cb342', 0.1)} 0%, ${alpha('#558b2f', 0.1)} 100%)`;\n }\n return greyGradient(theme, 100, 200, 0.5);\n};\n\nexport const BOUNCE_KEYFRAMES = {\n '0%, 100%': { transform: 'translateY(0)' },\n '50%': { transform: 'translateY(-10px)' },\n} as const;\n","import { Box, useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React, { useMemo } from 'react';\n\nimport { getTileCoordinates } from './mapProjection';\nimport { surfaceBackground } from './mapSurface';\nimport type { LatLng, MapType } from './MapPreview.types';\nimport {\n MapCentreMarker,\n MapCompass,\n MapDecorativePins,\n MapRoads,\n MapScaleBar,\n} from './MapDecorations';\nimport { MapTiles } from './MapTiles';\n\nexport interface StaticMapViewProps {\n height: string;\n zoom: number;\n mapType: MapType;\n marker?: boolean;\n markerPosition?: LatLng;\n panOffset?: { x: number; y: number };\n}\n\n// A stand-in map surface: a tile grid at the right coordinates for the current\n// position and zoom, with the usual furniture drawn over it.\nexport const StaticMapView: FC<StaticMapViewProps> = ({\n height,\n zoom,\n mapType,\n marker,\n markerPosition,\n panOffset = { x: 0, y: 0 },\n}) => {\n const theme = useTheme();\n\n const tileOrigin = useMemo(\n () =>\n markerPosition ? getTileCoordinates(markerPosition.lat, markerPosition.lng, zoom) : null,\n [markerPosition, zoom],\n );\n\n return (\n <Box\n data-testid=\"static-map-view\"\n sx={{\n width: '100%',\n height,\n position: 'relative',\n background: surfaceBackground(mapType, theme),\n overflow: 'hidden',\n }}\n >\n <MapTiles origin={tileOrigin} zoom={zoom} mapType={mapType} panOffset={panOffset} />\n <MapRoads />\n {marker && <MapCentreMarker />}\n <MapDecorativePins />\n <MapScaleBar zoom={zoom} />\n <MapCompass />\n </Box>\n );\n};\n","export const TILE_SIZE = 256;\n\n// Metres covered by one pixel at zoom 0 on the equator; each zoom level halves it.\nconst EQUATOR_METRES_PER_PIXEL = 156543.03392;\nconst SCALE_BAR_PIXELS = 100;\nconst GEOCODE_DELAY_MS = 300;\n\n// Web Mercator. Longitude maps linearly; latitude goes through the log of the\n// tangent, clamped just short of the poles where that diverges.\nconst project = (lat: number, lng: number) => {\n const siny = Math.sin((lat * Math.PI) / 180);\n const boundedSiny = Math.max(-0.9999, Math.min(0.9999, siny));\n\n return {\n x: TILE_SIZE * (0.5 + lng / 360),\n y: TILE_SIZE * (0.5 - Math.log((1 + boundedSiny) / (1 - boundedSiny)) / (4 * Math.PI)),\n };\n};\n\nexport const getTileCoordinates = (lat: number, lng: number, zoom: number) => {\n const scale = 1 << zoom;\n const world = project(lat, lng);\n\n return {\n x: Math.floor(Math.floor(world.x * scale) / TILE_SIZE),\n y: Math.floor(Math.floor(world.y * scale) / TILE_SIZE),\n };\n};\n\nexport const getScaleDistance = (zoom: number): string => {\n const distance = (EQUATOR_METRES_PER_PIXEL / Math.pow(2, zoom)) * SCALE_BAR_PIXELS;\n\n if (distance >= 1000) return `${Math.round(distance / 1000)} km`;\n // Round to the nearest 100m so the bar reads as a round number.\n if (distance >= 100) return `${Math.round(distance / 100) * 100} m`;\n return `${Math.round(distance)} m`;\n};\n\nconst MOCK_GEOCODE_RESULTS: Record<string, { lat: number; lng: number }> = {\n 'san francisco': { lat: 37.7749, lng: -122.4194 },\n 'new york': { lat: 40.7128, lng: -74.006 },\n london: { lat: 51.5074, lng: -0.1278 },\n tokyo: { lat: 35.6762, lng: 139.6503 },\n paris: { lat: 48.8566, lng: 2.3522 },\n};\n\n// Stands in for a Places lookup, delay included so the disabled search field is\n// actually observable.\nexport const geocode = async (address: string): Promise<{ lat: number; lng: number } | null> => {\n await new Promise((resolve) => window.setTimeout(resolve, GEOCODE_DELAY_MS));\n return MOCK_GEOCODE_RESULTS[address.toLowerCase().trim()] || null;\n};\n","import LocationIcon from '@mui/icons-material/LocationOn';\nimport NavigationIcon from '@mui/icons-material/Navigation';\nimport PlaceIcon from '@mui/icons-material/Place';\nimport { alpha, Box, Typography, useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { getScaleDistance } from './mapProjection';\nimport { BOUNCE_KEYFRAMES } from './mapSurface';\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: 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 rgba(0,0,0,0.3))',\n }}\n >\n <LocationIcon\n sx={{\n fontSize: 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: '0.75rem',\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: 24, color: theme.palette.primary.main, transform: 'rotate(-45deg)' }}\n />\n </Box>\n );\n};\n","import { alpha, useTheme } from '@mui/material';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { TILE_SIZE } from './mapProjection';\nimport { tileBackground } from './mapSurface';\nimport type { MapType } from './MapPreview.types';\n\n// Two extra rows and columns so panning does not expose an edge.\nconst VISIBLE_TILES = Math.ceil(800 / TILE_SIZE) + 2;\n// Tile coordinates are only legible once the grid is reasonably fine.\nconst LABEL_MIN_ZOOM = 10;\n\nexport interface MapTilesProps {\n origin: { x: number; y: number } | null;\n zoom: number;\n mapType: MapType;\n panOffset: { x: number; y: number };\n}\n\nexport const MapTiles: FC<MapTilesProps> = ({ origin, zoom, mapType, panOffset }) => {\n const theme = useTheme();\n const borderOpacity = theme.palette.mode === 'dark' ? 0.15 : 0.1;\n const background = tileBackground(mapType, theme);\n const half = Math.floor(VISIBLE_TILES / 2);\n\n return (\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: `translate(calc(-50% + ${panOffset.x}px), calc(-50% + ${panOffset.y}px))`,\n width: TILE_SIZE * VISIBLE_TILES,\n height: TILE_SIZE * VISIBLE_TILES,\n display: 'grid',\n gridTemplateColumns: `repeat(${VISIBLE_TILES}, ${TILE_SIZE}px)`,\n gridTemplateRows: `repeat(${VISIBLE_TILES}, ${TILE_SIZE}px)`,\n transition: 'transform 0.1s ease-out',\n }}\n >\n {Array.from({ length: VISIBLE_TILES * VISIBLE_TILES }).map((_, index) => {\n // The grid is centred on the origin tile, so indices run from -half.\n const tileX = (origin?.x || 0) + (index % VISIBLE_TILES) - half;\n const tileY = (origin?.y || 0) + Math.floor(index / VISIBLE_TILES) - half;\n\n return (\n <div\n key={`tile-${tileX}-${tileY}`}\n style={{\n width: TILE_SIZE,\n height: TILE_SIZE,\n border: `1px solid ${alpha(theme.palette.divider, borderOpacity)}`,\n background,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '10px',\n color: alpha(theme.palette.text.secondary, 0.3),\n fontFamily: 'monospace',\n userSelect: 'none',\n }}\n >\n {zoom > LABEL_MIN_ZOOM && `${tileX},${tileY}`}\n </div>\n );\n })}\n </div>\n );\n};\n","import { useMemo, useRef } from 'react';\n\nimport {\n useMapClick,\n useMapControls,\n useMapPointer,\n useMapSearch,\n useMapView,\n} from './MapPreview.hooks';\nimport type { ResolvedMapPreviewProps } from './MapPreview.helpers';\n\n// Wires the map's independent concerns together: the view state first, then the\n// controls, pointer handling and search that all write to it.\nexport const useMapPreview = (props: ResolvedMapPreviewProps) => {\n const { center, coordinates: legacyCoordinates, interactive, onMarkerDrag, onMapClick } = props;\n\n // `center` supersedes the older `coordinates` prop; either may be omitted.\n const coordinates = useMemo(\n () => center || legacyCoordinates || { lat: 0, lng: 0 },\n [center, legacyCoordinates],\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n const view = useMapView({\n coordinates,\n initialZoom: props.zoom,\n initialMapType: props.mapType,\n });\n\n const controls = useMapControls({\n coordinates,\n zoom: view.zoom,\n mapType: view.mapType,\n zoomTo: view.zoomTo,\n setMapType: view.setMapType,\n setMarkerPosition: view.setMarkerPosition,\n setPanOffset: view.setPanOffset,\n containerRef,\n });\n\n const pointer = useMapPointer({\n interactive,\n markerPosition: view.markerPosition,\n panOffset: view.panOffset,\n onMarkerDrag,\n setMarkerPosition: view.setMarkerPosition,\n setPanOffset: view.setPanOffset,\n });\n\n const search = useMapSearch({ zoomTo: view.zoomTo, setMarkerPosition: view.setMarkerPosition });\n\n const handleMapClick = useMapClick({\n coordinates,\n interactive,\n isPanning: pointer.isPanning,\n onMapClick,\n onMarkerDrag,\n setMarkerPosition: view.setMarkerPosition,\n });\n\n return { containerRef, view, controls, pointer, search, handleMapClick };\n};\n","import type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { geocode } from './mapProjection';\nimport {\n CITY_ZOOM,\n CLICK_JITTER_DEGREES,\n DRAG_DEGREES_PER_PIXEL,\n MAP_TYPES,\n MAX_ZOOM,\n MIN_ZOOM,\n} from './MapPreview.constants';\nimport type { LatLng, MapType } from './MapPreview.types';\n\nconst ORIGIN = { x: 0, y: 0 };\n\nexport const useMapView = ({\n coordinates,\n initialZoom,\n initialMapType,\n}: {\n coordinates: LatLng;\n initialZoom: number;\n initialMapType: MapType;\n}) => {\n const [zoom, setZoom] = useState(initialZoom);\n const [mapType, setMapType] = useState<MapType>(initialMapType);\n const [markerPosition, setMarkerPosition] = useState(coordinates);\n const [panOffset, setPanOffset] = useState(ORIGIN);\n\n useEffect(() => {\n setMarkerPosition(coordinates);\n }, [coordinates]);\n\n // Panning is relative to the tile grid, so a zoom change invalidates it.\n const zoomTo = useCallback((next: number) => {\n setZoom(next);\n setPanOffset(ORIGIN);\n }, []);\n\n return {\n zoom,\n zoomTo,\n mapType,\n setMapType,\n markerPosition,\n setMarkerPosition,\n panOffset,\n setPanOffset,\n };\n};\n\nexport const useMapControls = ({\n coordinates,\n zoom,\n mapType,\n zoomTo,\n setMapType,\n setMarkerPosition,\n setPanOffset,\n containerRef,\n}: {\n coordinates: LatLng;\n zoom: number;\n mapType: MapType;\n zoomTo: (zoom: number) => void;\n setMapType: (type: MapType) => void;\n setMarkerPosition: (position: LatLng) => void;\n setPanOffset: (offset: { x: number; y: number }) => void;\n containerRef: React.RefObject<HTMLDivElement | null>;\n}) => {\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n const handleZoomIn = useCallback(() => zoomTo(Math.min(zoom + 1, MAX_ZOOM)), [zoom, zoomTo]);\n const handleZoomOut = useCallback(() => zoomTo(Math.max(zoom - 1, MIN_ZOOM)), [zoom, zoomTo]);\n\n const handleCenter = useCallback(() => {\n setMarkerPosition({ ...coordinates });\n setPanOffset(ORIGIN);\n }, [coordinates, setMarkerPosition, setPanOffset]);\n\n const handleToggleMapType = useCallback(() => {\n const nextIndex = (MAP_TYPES.indexOf(mapType) + 1) % MAP_TYPES.length;\n setMapType(MAP_TYPES[nextIndex] as MapType);\n }, [mapType, setMapType]);\n\n const handleToggleFullscreen = useCallback(() => {\n if (!isFullscreen && containerRef.current) {\n containerRef.current.requestFullscreen?.();\n } else if (document.fullscreenElement) {\n document.exitFullscreen?.();\n }\n setIsFullscreen((prev) => !prev);\n }, [isFullscreen, containerRef]);\n\n return {\n isFullscreen,\n handleZoomIn,\n handleZoomOut,\n handleCenter,\n handleToggleMapType,\n handleToggleFullscreen,\n };\n};\n\ninterface DragStart {\n x: number;\n y: number;\n lat: number;\n lng: number;\n}\n\ninterface PanStart {\n x: number;\n y: number;\n offsetX: number;\n offsetY: number;\n}\n\nconst isOnMapSurface = (target: HTMLElement): boolean =>\n target.dataset.testid === 'static-map-view' ||\n Boolean(target.closest('[data-testid=\"static-map-view\"]'));\n\nconst panTo = (event: React.MouseEvent, start: PanStart) => ({\n x: start.offsetX + (event.clientX - start.x),\n y: start.offsetY + (event.clientY - start.y),\n});\n\nconst dragTo = (event: React.MouseEvent, start: DragStart): LatLng => ({\n lat: start.lat + (event.clientY - start.y) * DRAG_DEGREES_PER_PIXEL,\n lng: start.lng + (event.clientX - start.x) * DRAG_DEGREES_PER_PIXEL,\n});\n\n// Shift-drag pans the surface; a plain drag moves the marker.\nexport const useMapPointer = ({\n interactive,\n markerPosition,\n panOffset,\n onMarkerDrag,\n setMarkerPosition,\n setPanOffset,\n}: {\n interactive: boolean;\n markerPosition: LatLng;\n panOffset: { x: number; y: number };\n onMarkerDrag?: (coords: LatLng) => void;\n setMarkerPosition: (position: LatLng) => void;\n setPanOffset: (offset: { x: number; y: number }) => void;\n}) => {\n const [isDragging, setIsDragging] = useState(false);\n const [isPanning, setIsPanning] = useState(false);\n const dragStartRef = useRef<DragStart | null>(null);\n const panStartRef = useRef<PanStart | null>(null);\n\n const handleMouseDown = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!interactive) return;\n const { clientX: x, clientY: y } = event;\n\n if (isOnMapSurface(event.target as HTMLElement) && event.shiftKey) {\n setIsPanning(true);\n panStartRef.current = { x, y, offsetX: panOffset.x, offsetY: panOffset.y };\n return;\n }\n\n setIsDragging(true);\n dragStartRef.current = { x, y, lat: markerPosition.lat, lng: markerPosition.lng };\n },\n [interactive, markerPosition, panOffset],\n );\n\n const handleMouseMove = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n const panStart = panStartRef.current;\n if (isPanning && panStart) {\n setPanOffset(panTo(event, panStart));\n return;\n }\n\n const dragStart = dragStartRef.current;\n if (!isDragging || !dragStart) return;\n\n const position = dragTo(event, dragStart);\n setMarkerPosition(position);\n onMarkerDrag?.(position);\n },\n [isDragging, isPanning, onMarkerDrag, setMarkerPosition, setPanOffset],\n );\n\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n setIsPanning(false);\n dragStartRef.current = null;\n panStartRef.current = null;\n }, []);\n\n return { isDragging, isPanning, handleMouseDown, handleMouseMove, handleMouseUp };\n};\n\nexport const useMapSearch = ({\n zoomTo,\n setMarkerPosition,\n}: {\n zoomTo: (zoom: number) => void;\n setMarkerPosition: (position: LatLng) => void;\n}) => {\n const [searchValue, setSearchValue] = useState('');\n const [isSearching, setIsSearching] = useState(false);\n\n const handleSearch = useCallback(\n async (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Enter' || !searchValue) return;\n\n setIsSearching(true);\n try {\n const result = await geocode(searchValue);\n // An unknown place leaves the map where it is; a production build would\n // surface an error here.\n if (!result) return;\n\n setMarkerPosition({ ...result });\n zoomTo(CITY_ZOOM);\n } finally {\n setIsSearching(false);\n }\n },\n [searchValue, zoomTo, setMarkerPosition],\n );\n\n return { searchValue, setSearchValue, isSearching, handleSearch };\n};\n\nexport const useMapClick = ({\n coordinates,\n interactive,\n isPanning,\n onMapClick,\n onMarkerDrag,\n setMarkerPosition,\n}: {\n coordinates: LatLng;\n interactive: boolean;\n isPanning: boolean;\n onMapClick?: (lat: number, lng: number) => void;\n onMarkerDrag?: (coords: LatLng) => void;\n setMarkerPosition: (position: LatLng) => void;\n}) =>\n useCallback(() => {\n // A pan ends with a click event; that should not also drop a marker.\n if (isPanning) return;\n\n // Without a real projection there is nothing to convert a click position\n // into, so the mock jitters around the centre instead.\n const coords = {\n lat: coordinates.lat + (Math.random() - 0.5) * CLICK_JITTER_DEGREES,\n lng: coordinates.lng + (Math.random() - 0.5) * CLICK_JITTER_DEGREES,\n };\n\n onMapClick?.(coords.lat, coords.lng);\n\n if (interactive && onMarkerDrag) {\n setMarkerPosition(coords);\n onMarkerDrag(coords);\n }\n }, [coordinates, interactive, isPanning, onMapClick, onMarkerDrag, setMarkerPosition]);\n"],"mappings":"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","names":["alpha","Box","styled","useTheme","useTheme","alpha","alpha","jsx","alpha","Box","styled","jsx","jsx","jsxs","useTheme","alpha","Box","styled","Tooltip","useTheme","alpha","Fragment","jsx","jsxs","styled","Box","alpha","useTheme","Tooltip","Box","useTheme","LocationIcon","alpha","Box","Typography","useTheme","Fragment","jsx","jsxs","useTheme","Box","LocationIcon","alpha","Typography","alpha","useTheme","jsx","useTheme","alpha","jsx","jsxs","useTheme","Box","useMemo","useRef","useMemo","useRef","jsx","jsxs","styled","alpha","Box","useTheme"]}
|
package/dist/pt-BR.js
CHANGED
|
@@ -71,7 +71,38 @@ var PT_BR_SAVED_VIEWS_LABELS = {
|
|
|
71
71
|
defaultTag: "Padr\xE3o"
|
|
72
72
|
};
|
|
73
73
|
var PT_BR_TABLE_FILTER_COPY = {
|
|
74
|
-
invalidRange: "O m\xE1ximo deve ser maior ou igual ao m\xEDnimo."
|
|
74
|
+
invalidRange: "O m\xE1ximo deve ser maior ou igual ao m\xEDnimo.",
|
|
75
|
+
rangeMin: "M\xEDnimo",
|
|
76
|
+
rangeMax: "M\xE1ximo"
|
|
77
|
+
};
|
|
78
|
+
var PT_BR_LIGHTBOX_COPY = {
|
|
79
|
+
close: "Fechar",
|
|
80
|
+
previous: "Anterior",
|
|
81
|
+
next: "Pr\xF3ximo",
|
|
82
|
+
zoomIn: "Aproximar",
|
|
83
|
+
zoomOut: "Afastar",
|
|
84
|
+
resetZoom: "Restaurar o zoom",
|
|
85
|
+
play: "Iniciar a apresenta\xE7\xE3o",
|
|
86
|
+
pause: "Pausar a apresenta\xE7\xE3o"
|
|
87
|
+
};
|
|
88
|
+
var PT_BR_MAP_PREVIEW_COPY = {
|
|
89
|
+
zoomIn: "Aproximar",
|
|
90
|
+
zoomOut: "Afastar",
|
|
91
|
+
center: "Centralizar o mapa",
|
|
92
|
+
mapType: "Trocar o tipo de mapa",
|
|
93
|
+
fullscreen: "Tela cheia",
|
|
94
|
+
search: "Buscar endere\xE7o"
|
|
95
|
+
};
|
|
96
|
+
var PT_BR_CAROUSEL_COPY = {
|
|
97
|
+
previous: "Anterior",
|
|
98
|
+
next: "Pr\xF3ximo"
|
|
99
|
+
};
|
|
100
|
+
var PT_BR_DATA_STATE_COPY = {
|
|
101
|
+
empty: "Nenhum dado por aqui",
|
|
102
|
+
loading: "Carregando\u2026",
|
|
103
|
+
endOfList: "N\xE3o h\xE1 mais itens para carregar",
|
|
104
|
+
dismissAlert: "Fechar o aviso",
|
|
105
|
+
dismissBanner: "Fechar a faixa"
|
|
75
106
|
};
|
|
76
107
|
var PT_BR_DATA_VIEWS_COPY = {
|
|
77
108
|
savedViewsMenu: PT_BR_SAVED_VIEWS_LABELS,
|
|
@@ -226,6 +257,7 @@ var PT_BR_DATA_VIEWS_COPY = {
|
|
|
226
257
|
saveAs: "Salvar como nova",
|
|
227
258
|
reset: "Redefinir",
|
|
228
259
|
updateFailed: "N\xE3o foi poss\xEDvel atualizar a vis\xE3o",
|
|
260
|
+
dismissError: "Fechar o aviso",
|
|
229
261
|
saveFailed: "N\xE3o foi poss\xEDvel salvar a altera\xE7\xE3o da vis\xE3o.",
|
|
230
262
|
editView: "Renomear e editar",
|
|
231
263
|
pinToSidebar: "Fixar na barra lateral",
|
|
@@ -241,10 +273,14 @@ var PT_BR_DATA_VIEWS_COPY = {
|
|
|
241
273
|
}
|
|
242
274
|
};
|
|
243
275
|
export {
|
|
276
|
+
PT_BR_CAROUSEL_COPY,
|
|
244
277
|
PT_BR_CATEGORY_SELECT_COPY,
|
|
245
278
|
PT_BR_CEP_FIELD_COPY,
|
|
246
279
|
PT_BR_CONFIRM_ACTION_COPY,
|
|
280
|
+
PT_BR_DATA_STATE_COPY,
|
|
247
281
|
PT_BR_DATA_VIEWS_COPY,
|
|
282
|
+
PT_BR_LIGHTBOX_COPY,
|
|
283
|
+
PT_BR_MAP_PREVIEW_COPY,
|
|
248
284
|
PT_BR_SAVED_VIEWS_LABELS,
|
|
249
285
|
PT_BR_SECTION_ONBOARDING_COPY,
|
|
250
286
|
PT_BR_TABLE_FILTER_COPY
|
package/dist/pt-BR.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pt-BR.ts"],"sourcesContent":["import type { DataViewsCopy } from \"./components/data-display/DataViews/data-views-copy\";\nimport type { SavedViewsLabels } from \"./components/layout/ContentToolbar/ContentToolbar.types\";\nimport type {\n CategorySelectCopy,\n CepFieldCopy,\n ConfirmActionCopy,\n SectionOnboardingCopy,\n TableFilterCopy,\n} from \"./copy\";\n\n/**\n * The pt-BR packs — NAMED constants a host passes by hand, never defaults.\n *\n * The filename is what exempts this file from the copy-portability gate:\n * Portuguese may ship, it may not be silent. Every sentence is VERBATIM what\n * the components used to render, so a host adopting these sees no change on\n * screen — what changes is that the words are chosen in a diff.\n */\nexport const PT_BR_SECTION_ONBOARDING_COPY: SectionOnboardingCopy = {\n edit: \"Editar\",\n collapse: \"Ocultar\",\n start: \"Começar\",\n};\n\nexport const PT_BR_CONFIRM_ACTION_COPY: ConfirmActionCopy = {\n cancel: \"Cancelar\",\n defaultError: \"Não foi possível concluir a ação. Tente novamente.\",\n irreversible: \"Esta ação não pode ser desfeita.\",\n typeToConfirm: (expected) => `Digite \"${expected}\" para confirmar.`,\n};\n\nexport const PT_BR_CATEGORY_SELECT_COPY: CategorySelectCopy = {\n purpose: \"Categorias organizam o cardápio e os filtros da loja.\",\n clearSelection: \"Limpar seleção\",\n selectAll: \"Marcar tudo\",\n deselectAll: \"Desmarcar tudo\",\n expandAll: \"Expandir tudo\",\n collapseAll: \"Recolher tudo\",\n expandCategory: (name) => `Expandir ${name}`,\n collapseCategory: (name) => `Recolher ${name}`,\n placeholderSingle: \"Mover para…\",\n placeholderMulti: \"Categoria\",\n emptyTitle: \"Nenhuma categoria ainda\",\n createCategory: \"Criar categoria\",\n noResults: {\n title: (query) => `Nada encontrado para “${query}”`,\n hint: \"Tente outro termo ou verifique a grafia.\",\n clearSearch: \"Limpar busca\",\n create: (query) => `Criar “${query}”`,\n },\n search: {\n placeholderSingle: \"Buscar categoria…\",\n placeholderMulti: \"Buscar categoria ou subcategoria\",\n clear: \"Limpar busca\",\n removeChip: (label) => `Remover ${label}`,\n pinnedLabel: (count) => `Selecionadas · ${count}`,\n },\n footer: {\n selectedCount: (count) => `${count} selecionada${count === 1 ? \"\" : \"s\"}`,\n clear: \"Limpar\",\n apply: \"Aplicar\",\n close: \"Fechar\",\n singleHint: \"Escolha uma categoria\",\n cancel: \"Cancelar\",\n },\n};\n\nexport const PT_BR_CEP_FIELD_COPY: CepFieldCopy = {\n loading: \"Buscando endereço…\",\n found: \"Endereço preenchido pelo CEP.\",\n notfound: \"CEP não encontrado — preencha o endereço manualmente.\",\n};\n\n/**\n * The saved-views dropdown's labels.\n *\n * Typed as the package's OWN `SavedViewsLabels` rather than a parallel shape:\n * that interface already named every string, including the seven with no\n * diacritics the copy gate could not see (`Aplicar`, `Fixar na barra lateral`,\n * `Editar`…). The prop was `Partial<SavedViewsLabels>` with a pt-BR default —\n * configurable in the type, inherited in practice.\n */\nexport const PT_BR_SAVED_VIEWS_LABELS: SavedViewsLabels = {\n trigger: \"Visões\",\n mainView: \"Visão principal\",\n pinned: \"Fixadas\",\n recent: \"Recentes\",\n empty: \"Nenhuma visão salva ainda.\",\n saveCurrent: \"+ Salvar visão atual\",\n manageAll: \"Gerenciar visões\",\n apply: \"Aplicar\",\n setDefault: \"Definir como padrão\",\n pin: \"Fixar na barra lateral\",\n unpin: \"Desafixar\",\n share: \"Compartilhar com a equipe\",\n unshare: \"Tornar privada\",\n edit: \"Editar\",\n remove: \"Excluir\",\n defaultTag: \"Padrão\",\n};\n\nexport const PT_BR_TABLE_FILTER_COPY: TableFilterCopy = {\n invalidRange: \"O máximo deve ser maior ou igual ao mínimo.\",\n};\n\nexport const PT_BR_DATA_VIEWS_COPY: DataViewsCopy = {\n savedViewsMenu: PT_BR_SAVED_VIEWS_LABELS,\n confirmAction: PT_BR_CONFIRM_ACTION_COPY,\n categorySelect: PT_BR_CATEGORY_SELECT_COPY,\n board: {\n countOnPage: (label, count) => `${label}: ${count} nesta página`,\n onThisPage: (count) => `${count} nesta página`,\n pageSum: (sum) => `Soma desta página: ${sum}`,\n emptyColumn: \"Nada nesta etapa\",\n pageScopeNote:\n \"As contagens e somas abaixo referem-se apenas aos itens desta página.\",\n },\n deleteView: {\n title: \"Excluir visão\",\n target: (viewName) => `Excluir \"${viewName}\"?`,\n sharedWarning: \"Esta visão está compartilhada — a equipe perderá o acesso a ela.\",\n rowsUnaffected: (entityLabel) =>\n `${entityLabel} não são afetados; apenas o recorte salvo é removido.`,\n confirm: \"Excluir visão\",\n cancel: \"Cancelar\",\n },\n manageViews: {\n title: \"Gerenciar visões\",\n empty: \"Nenhuma visão salva.\",\n edit: \"Editar\",\n defaultTag: \"Padrão\",\n otherUserTag: \"De outro usuário\",\n deleteTitle: \"Excluir a visão salva?\",\n deleteBody: \"Os filtros e colunas guardados nela são perdidos. Não é possível restaurar.\",\n deleteConfirm: \"Excluir\",\n },\n saveView: {\n sharedDescription: \"Qualquer pessoa da loja poderá abrir e usar esta visão.\",\n setDefaultTitle: \"Definir como padrão\",\n setDefaultDescription: \"Esta tela abre nesta visão em vez da Visão principal.\",\n previewHeading: \"O que esta visão guarda\",\n previewUnchanged: \"Nada foi alterado — esta visão ficará igual à Visão principal.\",\n sortRowLabel: \"Ordenação\",\n saveFailed: \"Não foi possível salvar a visão.\",\n titleEditing: \"Editar visão\",\n titleCreating: \"Salvar visão\",\n descriptionLabel: \"Descrição — opcional\",\n descriptionPlaceholder: \"Para que serve esta visão\",\n submitEditing: \"Salvar alterações\",\n submitCreating: \"Salvar visão\",\n nameLabel: \"Nome\",\n cancel: \"Cancelar\",\n pinnedTitle: \"Fixar na barra lateral\",\n pinnedDescription: \"Aparece como atalho no menu, abaixo desta tela.\",\n sharedTitle: \"Compartilhar com a equipe\",\n namePlaceholder: \"Ex.: Recusados no PIX desta semana\",\n previewFilters: \"Filtros\",\n previewHiddenColumns: \"Colunas ocultas\",\n },\n columns: {\n visibleCount: (visible, total) => `${visible} de ${total} visíveis`,\n reset: \"Padrão\",\n showAll: \"Mostrar todas\",\n dragHint: \"Arraste para reordenar as colunas.\",\n moveUp: (columnLabel) => `Mover ${columnLabel} para cima`,\n moveDown: (columnLabel) => `Mover ${columnLabel} para baixo`,\n },\n display: {\n sortTab: \"Ordenar\",\n columnsTab: \"Colunas\",\n panelTab: \"Exibição\",\n direction: \"Direção\",\n layoutHints: {\n table: \"Colunas comparáveis, boa para varrer números.\",\n list: \"Uma linha por item, com os dados principais.\",\n cards: \"Blocos maiores, bom para poucos itens.\",\n board: \"Colunas por etapa, para acompanhar o que está onde.\",\n },\n densityHeadings: {\n table: \"Altura das linhas\",\n list: \"Altura das linhas\",\n cards: \"Cards por linha\",\n board: \"Largura das colunas\",\n },\n densityLabels: {\n table: { compact: \"Baixa\", cozy: \"Média\", comfortable: \"Alta\" },\n list: { compact: \"Baixa\", cozy: \"Média\", comfortable: \"Alta\" },\n cards: { compact: \"Muitos\", cozy: \"Médio\", comfortable: \"Poucos\" },\n board: { compact: \"Estreita\", cozy: \"Média\", comfortable: \"Larga\" },\n },\n boardUnavailable: \"Esta tela não declara etapas, então não oferece quadro.\",\n densityUnavailableNarrow:\n \"Um card por linha nesta largura — a densidade volta em telas maiores.\",\n trigger: \"Exibir\",\n fieldHeading: \"Campo\",\n formatHeading: \"Formato\",\n cardZoom: \"Tamanho dos cards\",\n },\n export: {\n formats: {\n json: { label: \"JSON (.json)\", hint: \"Para integrações\" },\n },\n visibleColumns: (columnCount) => `${columnCount} colunas visíveis, na ordem atual`,\n trigger: \"Exportar\",\n triggerLabel: \"Exportar\",\n },\n grid: {\n rowActions: \"Ações\",\n bulkActions: (selectedCount) => `Ações (${selectedCount}) ▾`,\n emptyFilteredTitle: \"Nenhum resultado para esses filtros\",\n emptyFilteredHint: \"Ajuste ou remova os filtros.\",\n emptyFilteredAction: \"Limpar filtros\",\n },\n filters: {\n moreFilters: (count) => `Mais filtros: ${count} sem espaço na barra`,\n moreFiltersApplied: (count, appliedCount) =>\n `Mais filtros: ${count} sem espaço na barra, ${appliedCount} aplicado(s)`,\n moreTriggerLabel: \"Mais\",\n moreHeading: \"Mais filtros\",\n overflowNote: \"sem espaço na barra\",\n rangeEnd: \"Até\",\n rangeInvalid: \"O início precisa ser menor que o fim.\",\n rangeInclusiveNote: \"Ambas as datas entram no resultado.\",\n rangePresets: {\n hoje: \"Hoje\",\n ontem: \"Ontem\",\n semana: \"Esta semana\",\n mes: \"Este mês\",\n ano: \"Este ano\",\n },\n scopesLabel: \"Situação\",\n panelTitle: \"Filtros\",\n clear: \"Limpar\",\n clearAll: \"Limpar filtros\",\n clearRange: (label) => `Limpar ${label}`,\n allOption: \"Todas\",\n optionSearchPlaceholder: \"Buscar…\",\n optionsEmpty: \"Nenhum resultado\",\n },\n selection: {\n selectAllOnPage: \"Selecionar todos nesta página\",\n clearSelection: \"Limpar seleção\",\n selectAll: \"Selecionar tudo\",\n onThisPage: (count) => `${count} nesta página`,\n selectRow: \"Selecionar\",\n expandRow: \"Expandir detalhes\",\n collapseRow: \"Recolher detalhes\",\n },\n nav: {\n mainView: \"Visão principal\",\n defaultTag: \"Padrão\",\n viewOptions: (viewName) => `Opções de ${viewName}`,\n emptyHint: \"Nenhuma visão salva. Ajuste filtros, colunas ou ordenação e salve abaixo.\",\n setDefault: \"Definir como padrão\",\n deleteView: \"Excluir visão\",\n unsavedChanges: \"Alterações não salvas\",\n label: \"Visão\",\n update: \"Atualizar visão\",\n save: \"Salvar visão\",\n saveAs: \"Salvar como nova\",\n reset: \"Redefinir\",\n updateFailed: \"Não foi possível atualizar a visão\",\n saveFailed: \"Não foi possível salvar a alteração da visão.\",\n editView: \"Renomear e editar\",\n pinToSidebar: \"Fixar na barra lateral\",\n shareWithTeam: \"Compartilhar com a equipe\",\n },\n search: {\n placeholder: \"Buscar…\",\n allColumnsLabel: \"Buscar em todas as colunas\",\n keywordPlaceholder: \"Pressione Enter para filtrar\",\n open: \"Buscar\",\n close: \"Fechar busca\",\n clear: \"Limpar busca\",\n },\n};\n\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/pt-BR.ts"],"sourcesContent":["import type { DataViewsCopy } from \"./components/data-display/DataViews/data-views-copy\";\nimport type { SavedViewsLabels } from \"./components/layout/ContentToolbar/ContentToolbar.types\";\nimport type {\n CarouselCopy,\n CategorySelectCopy,\n CepFieldCopy,\n ConfirmActionCopy,\n DataStateCopy,\n LightboxCopy,\n MapPreviewCopy,\n SectionOnboardingCopy,\n TableFilterCopy,\n} from './copy';\n\n/**\n * The pt-BR packs — NAMED constants a host passes by hand, never defaults.\n *\n * The filename is what exempts this file from the copy-portability gate:\n * Portuguese may ship, it may not be silent. Every sentence is VERBATIM what\n * the components used to render, so a host adopting these sees no change on\n * screen — what changes is that the words are chosen in a diff.\n */\nexport const PT_BR_SECTION_ONBOARDING_COPY: SectionOnboardingCopy = {\n edit: \"Editar\",\n collapse: \"Ocultar\",\n start: \"Começar\",\n};\n\nexport const PT_BR_CONFIRM_ACTION_COPY: ConfirmActionCopy = {\n cancel: \"Cancelar\",\n defaultError: \"Não foi possível concluir a ação. Tente novamente.\",\n irreversible: \"Esta ação não pode ser desfeita.\",\n typeToConfirm: (expected) => `Digite \"${expected}\" para confirmar.`,\n};\n\nexport const PT_BR_CATEGORY_SELECT_COPY: CategorySelectCopy = {\n purpose: \"Categorias organizam o cardápio e os filtros da loja.\",\n clearSelection: \"Limpar seleção\",\n selectAll: \"Marcar tudo\",\n deselectAll: \"Desmarcar tudo\",\n expandAll: \"Expandir tudo\",\n collapseAll: \"Recolher tudo\",\n expandCategory: (name) => `Expandir ${name}`,\n collapseCategory: (name) => `Recolher ${name}`,\n placeholderSingle: \"Mover para…\",\n placeholderMulti: \"Categoria\",\n emptyTitle: \"Nenhuma categoria ainda\",\n createCategory: \"Criar categoria\",\n noResults: {\n title: (query) => `Nada encontrado para “${query}”`,\n hint: \"Tente outro termo ou verifique a grafia.\",\n clearSearch: \"Limpar busca\",\n create: (query) => `Criar “${query}”`,\n },\n search: {\n placeholderSingle: \"Buscar categoria…\",\n placeholderMulti: \"Buscar categoria ou subcategoria\",\n clear: \"Limpar busca\",\n removeChip: (label) => `Remover ${label}`,\n pinnedLabel: (count) => `Selecionadas · ${count}`,\n },\n footer: {\n selectedCount: (count) => `${count} selecionada${count === 1 ? \"\" : \"s\"}`,\n clear: \"Limpar\",\n apply: \"Aplicar\",\n close: \"Fechar\",\n singleHint: \"Escolha uma categoria\",\n cancel: \"Cancelar\",\n },\n};\n\nexport const PT_BR_CEP_FIELD_COPY: CepFieldCopy = {\n loading: \"Buscando endereço…\",\n found: \"Endereço preenchido pelo CEP.\",\n notfound: \"CEP não encontrado — preencha o endereço manualmente.\",\n};\n\n/**\n * The saved-views dropdown's labels.\n *\n * Typed as the package's OWN `SavedViewsLabels` rather than a parallel shape:\n * that interface already named every string, including the seven with no\n * diacritics the copy gate could not see (`Aplicar`, `Fixar na barra lateral`,\n * `Editar`…). The prop was `Partial<SavedViewsLabels>` with a pt-BR default —\n * configurable in the type, inherited in practice.\n */\nexport const PT_BR_SAVED_VIEWS_LABELS: SavedViewsLabels = {\n trigger: \"Visões\",\n mainView: \"Visão principal\",\n pinned: \"Fixadas\",\n recent: \"Recentes\",\n empty: \"Nenhuma visão salva ainda.\",\n saveCurrent: \"+ Salvar visão atual\",\n manageAll: \"Gerenciar visões\",\n apply: \"Aplicar\",\n setDefault: \"Definir como padrão\",\n pin: \"Fixar na barra lateral\",\n unpin: \"Desafixar\",\n share: \"Compartilhar com a equipe\",\n unshare: \"Tornar privada\",\n edit: \"Editar\",\n remove: \"Excluir\",\n defaultTag: \"Padrão\",\n};\n\nexport const PT_BR_TABLE_FILTER_COPY: TableFilterCopy = {\n invalidRange: \"O máximo deve ser maior ou igual ao mínimo.\",\n rangeMin: \"Mínimo\",\n rangeMax: \"Máximo\",\n};\n\nexport const PT_BR_LIGHTBOX_COPY: LightboxCopy = {\n close: \"Fechar\",\n previous: \"Anterior\",\n next: \"Próximo\",\n zoomIn: \"Aproximar\",\n zoomOut: \"Afastar\",\n resetZoom: \"Restaurar o zoom\",\n play: \"Iniciar a apresentação\",\n pause: \"Pausar a apresentação\",\n};\n\nexport const PT_BR_MAP_PREVIEW_COPY: MapPreviewCopy = {\n zoomIn: \"Aproximar\",\n zoomOut: \"Afastar\",\n center: \"Centralizar o mapa\",\n mapType: \"Trocar o tipo de mapa\",\n fullscreen: \"Tela cheia\",\n search: \"Buscar endereço\",\n};\n\nexport const PT_BR_CAROUSEL_COPY: CarouselCopy = {\n previous: \"Anterior\",\n next: \"Próximo\",\n};\n\nexport const PT_BR_DATA_STATE_COPY: DataStateCopy = {\n empty: \"Nenhum dado por aqui\",\n loading: \"Carregando…\",\n endOfList: \"Não há mais itens para carregar\",\n dismissAlert: \"Fechar o aviso\",\n dismissBanner: \"Fechar a faixa\",\n};\n\nexport const PT_BR_DATA_VIEWS_COPY: DataViewsCopy = {\n savedViewsMenu: PT_BR_SAVED_VIEWS_LABELS,\n confirmAction: PT_BR_CONFIRM_ACTION_COPY,\n categorySelect: PT_BR_CATEGORY_SELECT_COPY,\n board: {\n countOnPage: (label, count) => `${label}: ${count} nesta página`,\n onThisPage: (count) => `${count} nesta página`,\n pageSum: (sum) => `Soma desta página: ${sum}`,\n emptyColumn: \"Nada nesta etapa\",\n pageScopeNote:\n \"As contagens e somas abaixo referem-se apenas aos itens desta página.\",\n },\n deleteView: {\n title: \"Excluir visão\",\n target: (viewName) => `Excluir \"${viewName}\"?`,\n sharedWarning: \"Esta visão está compartilhada — a equipe perderá o acesso a ela.\",\n rowsUnaffected: (entityLabel) =>\n `${entityLabel} não são afetados; apenas o recorte salvo é removido.`,\n confirm: \"Excluir visão\",\n cancel: \"Cancelar\",\n },\n manageViews: {\n title: \"Gerenciar visões\",\n empty: \"Nenhuma visão salva.\",\n edit: \"Editar\",\n defaultTag: \"Padrão\",\n otherUserTag: \"De outro usuário\",\n deleteTitle: \"Excluir a visão salva?\",\n deleteBody: \"Os filtros e colunas guardados nela são perdidos. Não é possível restaurar.\",\n deleteConfirm: \"Excluir\",\n },\n saveView: {\n sharedDescription: \"Qualquer pessoa da loja poderá abrir e usar esta visão.\",\n setDefaultTitle: \"Definir como padrão\",\n setDefaultDescription: \"Esta tela abre nesta visão em vez da Visão principal.\",\n previewHeading: \"O que esta visão guarda\",\n previewUnchanged: \"Nada foi alterado — esta visão ficará igual à Visão principal.\",\n sortRowLabel: \"Ordenação\",\n saveFailed: \"Não foi possível salvar a visão.\",\n titleEditing: \"Editar visão\",\n titleCreating: \"Salvar visão\",\n descriptionLabel: \"Descrição — opcional\",\n descriptionPlaceholder: \"Para que serve esta visão\",\n submitEditing: \"Salvar alterações\",\n submitCreating: \"Salvar visão\",\n nameLabel: \"Nome\",\n cancel: \"Cancelar\",\n pinnedTitle: \"Fixar na barra lateral\",\n pinnedDescription: \"Aparece como atalho no menu, abaixo desta tela.\",\n sharedTitle: \"Compartilhar com a equipe\",\n namePlaceholder: \"Ex.: Recusados no PIX desta semana\",\n previewFilters: \"Filtros\",\n previewHiddenColumns: \"Colunas ocultas\",\n },\n columns: {\n visibleCount: (visible, total) => `${visible} de ${total} visíveis`,\n reset: \"Padrão\",\n showAll: \"Mostrar todas\",\n dragHint: \"Arraste para reordenar as colunas.\",\n moveUp: (columnLabel) => `Mover ${columnLabel} para cima`,\n moveDown: (columnLabel) => `Mover ${columnLabel} para baixo`,\n },\n display: {\n sortTab: \"Ordenar\",\n columnsTab: \"Colunas\",\n panelTab: \"Exibição\",\n direction: \"Direção\",\n layoutHints: {\n table: \"Colunas comparáveis, boa para varrer números.\",\n list: \"Uma linha por item, com os dados principais.\",\n cards: \"Blocos maiores, bom para poucos itens.\",\n board: \"Colunas por etapa, para acompanhar o que está onde.\",\n },\n densityHeadings: {\n table: \"Altura das linhas\",\n list: \"Altura das linhas\",\n cards: \"Cards por linha\",\n board: \"Largura das colunas\",\n },\n densityLabels: {\n table: { compact: \"Baixa\", cozy: \"Média\", comfortable: \"Alta\" },\n list: { compact: \"Baixa\", cozy: \"Média\", comfortable: \"Alta\" },\n cards: { compact: \"Muitos\", cozy: \"Médio\", comfortable: \"Poucos\" },\n board: { compact: \"Estreita\", cozy: \"Média\", comfortable: \"Larga\" },\n },\n boardUnavailable: \"Esta tela não declara etapas, então não oferece quadro.\",\n densityUnavailableNarrow:\n \"Um card por linha nesta largura — a densidade volta em telas maiores.\",\n trigger: \"Exibir\",\n fieldHeading: \"Campo\",\n formatHeading: \"Formato\",\n cardZoom: \"Tamanho dos cards\",\n },\n export: {\n formats: {\n json: { label: \"JSON (.json)\", hint: \"Para integrações\" },\n },\n visibleColumns: (columnCount) => `${columnCount} colunas visíveis, na ordem atual`,\n trigger: \"Exportar\",\n triggerLabel: \"Exportar\",\n },\n grid: {\n rowActions: \"Ações\",\n bulkActions: (selectedCount) => `Ações (${selectedCount}) ▾`,\n emptyFilteredTitle: \"Nenhum resultado para esses filtros\",\n emptyFilteredHint: \"Ajuste ou remova os filtros.\",\n emptyFilteredAction: \"Limpar filtros\",\n },\n filters: {\n moreFilters: (count) => `Mais filtros: ${count} sem espaço na barra`,\n moreFiltersApplied: (count, appliedCount) =>\n `Mais filtros: ${count} sem espaço na barra, ${appliedCount} aplicado(s)`,\n moreTriggerLabel: \"Mais\",\n moreHeading: \"Mais filtros\",\n overflowNote: \"sem espaço na barra\",\n rangeEnd: \"Até\",\n rangeInvalid: \"O início precisa ser menor que o fim.\",\n rangeInclusiveNote: \"Ambas as datas entram no resultado.\",\n rangePresets: {\n hoje: \"Hoje\",\n ontem: \"Ontem\",\n semana: \"Esta semana\",\n mes: \"Este mês\",\n ano: \"Este ano\",\n },\n scopesLabel: \"Situação\",\n panelTitle: \"Filtros\",\n clear: \"Limpar\",\n clearAll: \"Limpar filtros\",\n clearRange: (label) => `Limpar ${label}`,\n allOption: \"Todas\",\n optionSearchPlaceholder: \"Buscar…\",\n optionsEmpty: \"Nenhum resultado\",\n },\n selection: {\n selectAllOnPage: \"Selecionar todos nesta página\",\n clearSelection: \"Limpar seleção\",\n selectAll: \"Selecionar tudo\",\n onThisPage: (count) => `${count} nesta página`,\n selectRow: \"Selecionar\",\n expandRow: \"Expandir detalhes\",\n collapseRow: \"Recolher detalhes\",\n },\n nav: {\n mainView: \"Visão principal\",\n defaultTag: \"Padrão\",\n viewOptions: (viewName) => `Opções de ${viewName}`,\n emptyHint: \"Nenhuma visão salva. Ajuste filtros, colunas ou ordenação e salve abaixo.\",\n setDefault: \"Definir como padrão\",\n deleteView: \"Excluir visão\",\n unsavedChanges: \"Alterações não salvas\",\n label: \"Visão\",\n update: \"Atualizar visão\",\n save: \"Salvar visão\",\n saveAs: \"Salvar como nova\",\n reset: \"Redefinir\",\n updateFailed: \"Não foi possível atualizar a visão\",\n dismissError: \"Fechar o aviso\",\n saveFailed: \"Não foi possível salvar a alteração da visão.\",\n editView: \"Renomear e editar\",\n pinToSidebar: \"Fixar na barra lateral\",\n shareWithTeam: \"Compartilhar com a equipe\",\n },\n search: {\n placeholder: \"Buscar…\",\n allColumnsLabel: \"Buscar em todas as colunas\",\n keywordPlaceholder: \"Pressione Enter para filtrar\",\n open: \"Buscar\",\n close: \"Fechar busca\",\n clear: \"Limpar busca\",\n },\n};\n\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
export declare const Alert: React.ForwardRefExoticComponent<(Omit<import("./Alert.types").AlertBase & {
|
|
3
|
+
closable?: false;
|
|
4
|
+
onClose?: () => void;
|
|
5
|
+
closeLabel?: never;
|
|
6
|
+
}, "ref"> | Omit<import("./Alert.types").AlertBase & {
|
|
7
|
+
closable: true;
|
|
8
|
+
onClose?: () => void;
|
|
9
|
+
closeLabel: string;
|
|
10
|
+
}, "ref">) & React.RefAttributes<HTMLDivElement>>;
|
|
4
11
|
//# sourceMappingURL=Alert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Alert/Alert.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Alert/Alert.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgL1B,eAAO,MAAM,KAAK;;;;;;;;iDA0EjB,CAAC"}
|
|
@@ -1,7 +1,30 @@
|
|
|
1
1
|
import type { ColorValue } from '../../../tokens/scales';
|
|
2
2
|
import type { AlertProps as MuiAlertProps } from '@mui/material';
|
|
3
3
|
import type React from 'react';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* The dismissible half, as a UNION rather than one more optional field.
|
|
6
|
+
*
|
|
7
|
+
* `closeLabel` is the dismiss button's only accessible name — it renders a
|
|
8
|
+
* glyph and nothing else — so it must be REQUIRED wherever that button exists.
|
|
9
|
+
* But most alerts are not closable, and making it required on all of them
|
|
10
|
+
* would ask a dozen call sites across five packages to name a control they
|
|
11
|
+
* never render. A word invented to satisfy a type is worse than no word: the
|
|
12
|
+
* next reader cannot tell which button it belongs to.
|
|
13
|
+
*
|
|
14
|
+
* So the type says what is actually true — the label is required exactly when
|
|
15
|
+
* the button is.
|
|
16
|
+
*/
|
|
17
|
+
type AlertDismiss = {
|
|
18
|
+
closable?: false;
|
|
19
|
+
onClose?: () => void;
|
|
20
|
+
closeLabel?: never;
|
|
21
|
+
} | {
|
|
22
|
+
closable: true;
|
|
23
|
+
onClose?: () => void;
|
|
24
|
+
closeLabel: string;
|
|
25
|
+
};
|
|
26
|
+
export type AlertProps = AlertBase & AlertDismiss;
|
|
27
|
+
export interface AlertBase extends Omit<MuiAlertProps, 'variant' | 'color' | 'role'> {
|
|
5
28
|
/**
|
|
6
29
|
* The variant of the alert
|
|
7
30
|
*/
|
|
@@ -26,14 +49,6 @@ export interface AlertProps extends Omit<MuiAlertProps, 'variant' | 'color' | 'r
|
|
|
26
49
|
* Whether to show the default severity icon
|
|
27
50
|
*/
|
|
28
51
|
showIcon?: boolean;
|
|
29
|
-
/**
|
|
30
|
-
* Whether the alert can be closed
|
|
31
|
-
*/
|
|
32
|
-
closable?: boolean;
|
|
33
|
-
/**
|
|
34
|
-
* Callback when alert is closed
|
|
35
|
-
*/
|
|
36
|
-
onClose?: () => void;
|
|
37
52
|
/**
|
|
38
53
|
* Title for the alert
|
|
39
54
|
*/
|
|
@@ -63,4 +78,5 @@ export interface AlertProps extends Omit<MuiAlertProps, 'variant' | 'color' | 'r
|
|
|
63
78
|
*/
|
|
64
79
|
'data-testid'?: string;
|
|
65
80
|
}
|
|
81
|
+
export {};
|
|
66
82
|
//# sourceMappingURL=Alert.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Alert/Alert.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"Alert.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Alert/Alert.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;GAYG;AACH,KAAK,YAAY,GACb;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GAC9D;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAElD,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAClF;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IAE3E;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;IAE7C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAEjC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncStateContainer.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/AsyncStateContainer/AsyncStateContainer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAgE5E,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"AsyncStateContainer.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/AsyncStateContainer/AsyncStateContainer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAgE5E,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAkDlE,CAAC;AAIF,eAAe,mBAAmB,CAAC"}
|
package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.types.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
export interface AsyncStateContainerProps {
|
|
3
|
+
/**
|
|
4
|
+
* What an EMPTY result reads as, when the caller supplies no
|
|
5
|
+
* `emptyComponent` of its own. REQUIRED — the fallback was the English
|
|
6
|
+
* "No data available", on the package every host renders.
|
|
7
|
+
*/
|
|
8
|
+
emptyTitle: string;
|
|
3
9
|
/**
|
|
4
10
|
* Whether the container is in a loading state
|
|
5
11
|
* @default false
|
package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncStateContainer.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/AsyncStateContainer/AsyncStateContainer.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IAE9B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEnC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAEtC;;;OAGG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEjC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAEjD;;;OAGG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEjC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"AsyncStateContainer.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/AsyncStateContainer/AsyncStateContainer.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IAE9B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEnC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAEtC;;;OAGG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEjC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAEjD;;;OAGG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEjC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Banner/Banner.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Banner/Banner.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,gBAAgB,CAAC;AAiOjE,eAAO,MAAM,MAAM,oFAqElB,CAAC"}
|
|
@@ -10,6 +10,8 @@ export interface BannerAction {
|
|
|
10
10
|
variant?: BannerActionVariant;
|
|
11
11
|
}
|
|
12
12
|
export interface BannerProps {
|
|
13
|
+
/** The dismiss button's accessible name — it carries a glyph only. REQUIRED. */
|
|
14
|
+
dismissLabel: string;
|
|
13
15
|
/** Message severity type */
|
|
14
16
|
variant?: BannerVariant;
|
|
15
17
|
/** Main message title text */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Banner/Banner.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,WAAW,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,oCAAoC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"Banner.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Banner/Banner.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,WAAW,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,oCAAoC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|