@carto/ps-react-ui 4.12.2 → 4.14.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/{category-Dnd2_j0x.js → category-CGS_eHr4.js} +2 -2
- package/dist/{category-Dnd2_j0x.js.map → category-CGS_eHr4.js.map} +1 -1
- package/dist/{change-column-DjjwoPt1.js → change-column-CiVAjOUB.js} +2 -2
- package/dist/{change-column-DjjwoPt1.js.map → change-column-CiVAjOUB.js.map} +1 -1
- package/dist/components.js +1232 -777
- package/dist/components.js.map +1 -1
- package/dist/{data-zoom-layout-CkVnm6ej.js → data-zoom-layout-D_FYdnap.js} +2 -2
- package/dist/{data-zoom-layout-CkVnm6ej.js.map → data-zoom-layout-D_FYdnap.js.map} +1 -1
- package/dist/{download-config-oJIFZ2WC.js → download-config-OKlLLSW_.js} +2 -2
- package/dist/{download-config-oJIFZ2WC.js.map → download-config-OKlLLSW_.js.map} +1 -1
- package/dist/{lasso-tool-CDFj4zKY.js → lasso-tool-YLFRgb-S.js} +182 -154
- package/dist/lasso-tool-YLFRgb-S.js.map +1 -0
- package/dist/legend/stores.js +20 -0
- package/dist/legend/stores.js.map +1 -0
- package/dist/legend.js +1536 -0
- package/dist/legend.js.map +1 -0
- package/dist/selectors-DwHj6mE2.js +388 -0
- package/dist/selectors-DwHj6mE2.js.map +1 -0
- package/dist/{spread-DYNpzgh_.js → spread-4MYPOntd.js} +2 -2
- package/dist/{spread-DYNpzgh_.js.map → spread-4MYPOntd.js.map} +1 -1
- package/dist/{table-B3ZWWhJt.js → table-CTcLOycx.js} +2 -2
- package/dist/{table-B3ZWWhJt.js.map → table-CTcLOycx.js.map} +1 -1
- package/dist/types/components/index.d.ts +5 -2
- package/dist/types/components/lasso-tool/geometry-toolbar.d.ts +13 -0
- package/dist/types/components/lasso-tool/icons.d.ts +6 -0
- package/dist/types/components/lasso-tool/lasso-tool.d.ts +1 -1
- package/dist/types/components/lasso-tool/layer-filters.d.ts +10 -0
- package/dist/types/components/lasso-tool/styles.d.ts +1 -1
- package/dist/types/components/lasso-tool/types.d.ts +62 -1
- package/dist/types/components/responsive-drawer/responsive-drawer.d.ts +35 -3
- package/dist/types/legend/components/contexts.d.ts +20 -0
- package/dist/types/legend/components/icons.d.ts +12 -0
- package/dist/types/legend/components/index.d.ts +26 -0
- package/dist/types/legend/components/legend-actions/legend-actions.d.ts +24 -0
- package/dist/types/legend/components/legend-actions/styles.d.ts +7 -0
- package/dist/types/legend/components/legend-category/legend-category-ui.d.ts +13 -0
- package/dist/types/legend/components/legend-category/styles.d.ts +52 -0
- package/dist/types/legend/components/legend-config-select/legend-config-select.d.ts +14 -0
- package/dist/types/legend/components/legend-config-select/styles.d.ts +44 -0
- package/dist/types/legend/components/legend-group/legend-group.d.ts +21 -0
- package/dist/types/legend/components/legend-group/styles.d.ts +63 -0
- package/dist/types/legend/components/legend-icon/legend-icon-ui.d.ts +10 -0
- package/dist/types/legend/components/legend-icon/styles.d.ts +52 -0
- package/dist/types/legend/components/legend-item/legend-item-ui.d.ts +14 -0
- package/dist/types/legend/components/legend-item/legend-item.d.ts +10 -0
- package/dist/types/legend/components/legend-item/styles.d.ts +7 -0
- package/dist/types/legend/components/legend-opacity/legend-opacity.d.ts +32 -0
- package/dist/types/legend/components/legend-opacity/styles.d.ts +23 -0
- package/dist/types/legend/components/legend-proportion/legend-proportion-ui.d.ts +16 -0
- package/dist/types/legend/components/legend-proportion/styles.d.ts +37 -0
- package/dist/types/legend/components/legend-ramp/legend-ramp-ui.d.ts +20 -0
- package/dist/types/legend/components/legend-ramp/styles.d.ts +53 -0
- package/dist/types/legend/components/legend-row/legend-row.d.ts +23 -0
- package/dist/types/legend/components/legend-row/styles.d.ts +77 -0
- package/dist/types/legend/components/legend-row-menu/legend-row-menu.d.ts +18 -0
- package/dist/types/legend/components/legend-row-menu/legend-zoom-to.d.ts +15 -0
- package/dist/types/legend/components/legend-swatch/legend-swatch.d.ts +26 -0
- package/dist/types/legend/components/legend-visibility-toggle/legend-visibility-toggle.d.ts +35 -0
- package/dist/types/legend/index.d.ts +88 -0
- package/dist/types/legend/provider/index.d.ts +6 -0
- package/dist/types/legend/provider/labels.d.ts +27 -0
- package/dist/types/legend/provider/legend-config-context.d.ts +7 -0
- package/dist/types/legend/provider/legend-provider.d.ts +38 -0
- package/dist/types/legend/stores/index.d.ts +5 -0
- package/dist/types/legend/stores/legend-context.d.ts +4 -0
- package/dist/types/legend/stores/legend-store-registry.d.ts +39 -0
- package/dist/types/legend/stores/legend-store.test.d.ts +1 -0
- package/dist/types/legend/stores/selectors.d.ts +33 -0
- package/dist/types/legend/stores/types.d.ts +275 -0
- package/dist/widgets/actions.js +1 -1
- package/dist/widgets/bar.js +1 -1
- package/dist/widgets/category.js +1 -1
- package/dist/widgets/formula.js +1 -1
- package/dist/widgets/histogram.js +1 -1
- package/dist/widgets/markdown.js +1 -1
- package/dist/widgets/pie.js +1 -1
- package/dist/widgets/scatterplot.js +1 -1
- package/dist/widgets/spread.js +1 -1
- package/dist/widgets/table.js +1 -1
- package/dist/widgets/timeseries.js +1 -1
- package/dist/widgets/utils.js +1 -1
- package/dist/widgets/wrapper.js +1 -1
- package/dist/widgets-v2/actions.js +1 -1
- package/dist/widgets-v2/bar.js +2 -2
- package/dist/widgets-v2/category.js +2 -2
- package/dist/widgets-v2/formula.js +1 -1
- package/dist/widgets-v2/histogram.js +2 -2
- package/dist/widgets-v2/markdown.js +1 -1
- package/dist/widgets-v2/pie.js +1 -1
- package/dist/widgets-v2/scatterplot.js +1 -1
- package/dist/widgets-v2/spread.js +2 -2
- package/dist/widgets-v2/table.js +3 -3
- package/dist/widgets-v2/timeseries.js +2 -2
- package/dist/widgets-v2/utils.js +1 -1
- package/dist/widgets-v2.js +5 -5
- package/package.json +11 -3
- package/src/components/geolocation-controls/geolocation-controls.test.tsx +15 -0
- package/src/components/geolocation-controls/geolocation-controls.tsx +19 -3
- package/src/components/index.ts +10 -0
- package/src/components/lasso-tool/const.tsx +1 -0
- package/src/components/lasso-tool/geometry-toolbar.test.tsx +138 -0
- package/src/components/lasso-tool/geometry-toolbar.tsx +258 -0
- package/src/components/lasso-tool/icons.tsx +40 -0
- package/src/components/lasso-tool/lasso-tool.tsx +25 -1
- package/src/components/lasso-tool/layer-filters.test.tsx +90 -0
- package/src/components/lasso-tool/layer-filters.tsx +236 -0
- package/src/components/lasso-tool/styles.ts +1 -1
- package/src/components/lasso-tool/types.ts +66 -1
- package/src/components/responsive-drawer/responsive-drawer.test.tsx +129 -25
- package/src/components/responsive-drawer/responsive-drawer.tsx +149 -16
- package/src/legend/components/contexts.ts +32 -0
- package/src/legend/components/icons.tsx +22 -0
- package/src/legend/components/index.ts +39 -0
- package/src/legend/components/legend-actions/legend-actions.tsx +57 -0
- package/src/legend/components/legend-actions/styles.ts +9 -0
- package/src/legend/components/legend-category/legend-category-ui.tsx +91 -0
- package/src/legend/components/legend-category/styles.ts +61 -0
- package/src/legend/components/legend-config-select/legend-config-select.tsx +96 -0
- package/src/legend/components/legend-config-select/styles.ts +48 -0
- package/src/legend/components/legend-group/legend-group.test.tsx +115 -0
- package/src/legend/components/legend-group/legend-group.tsx +88 -0
- package/src/legend/components/legend-group/styles.ts +82 -0
- package/src/legend/components/legend-icon/legend-icon-ui.tsx +56 -0
- package/src/legend/components/legend-icon/styles.ts +56 -0
- package/src/legend/components/legend-item/legend-item-ui.test.tsx +362 -0
- package/src/legend/components/legend-item/legend-item-ui.tsx +43 -0
- package/src/legend/components/legend-item/legend-item.tsx +34 -0
- package/src/legend/components/legend-item/styles.ts +11 -0
- package/src/legend/components/legend-opacity/legend-opacity.tsx +179 -0
- package/src/legend/components/legend-opacity/styles.ts +28 -0
- package/src/legend/components/legend-proportion/legend-proportion-ui.tsx +122 -0
- package/src/legend/components/legend-proportion/styles.ts +43 -0
- package/src/legend/components/legend-ramp/legend-ramp-ui.tsx +159 -0
- package/src/legend/components/legend-ramp/styles.ts +62 -0
- package/src/legend/components/legend-row/legend-row.test.tsx +498 -0
- package/src/legend/components/legend-row/legend-row.tsx +129 -0
- package/src/legend/components/legend-row/styles.ts +111 -0
- package/src/legend/components/legend-row-menu/legend-row-menu.tsx +68 -0
- package/src/legend/components/legend-row-menu/legend-zoom-to.tsx +35 -0
- package/src/legend/components/legend-swatch/legend-swatch.test.tsx +109 -0
- package/src/legend/components/legend-swatch/legend-swatch.tsx +237 -0
- package/src/legend/components/legend-visibility-toggle/legend-visibility-toggle.tsx +127 -0
- package/src/legend/index.ts +121 -0
- package/src/legend/provider/index.ts +6 -0
- package/src/legend/provider/labels.ts +59 -0
- package/src/legend/provider/legend-config-context.ts +15 -0
- package/src/legend/provider/legend-provider.tsx +102 -0
- package/src/legend/stores/index.ts +46 -0
- package/src/legend/stores/legend-context.ts +17 -0
- package/src/legend/stores/legend-store-registry.ts +639 -0
- package/src/legend/stores/legend-store.test.ts +457 -0
- package/src/legend/stores/selectors.ts +65 -0
- package/src/legend/stores/types.ts +347 -0
- package/dist/lasso-tool-CDFj4zKY.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legend.js","sources":["../src/legend/provider/labels.ts","../src/legend/provider/legend-config-context.ts","../src/legend/provider/legend-provider.tsx","../src/legend/components/contexts.ts","../src/legend/components/legend-actions/styles.ts","../src/legend/components/legend-actions/legend-actions.tsx","../src/legend/components/legend-group/styles.ts","../src/legend/components/legend-group/legend-group.tsx","../src/legend/components/legend-row/styles.ts","../src/legend/components/legend-row/legend-row.tsx","../src/legend/components/icons.tsx","../src/legend/components/legend-visibility-toggle/legend-visibility-toggle.tsx","../src/legend/components/legend-row-menu/legend-row-menu.tsx","../src/legend/components/legend-row-menu/legend-zoom-to.tsx","../src/legend/components/legend-opacity/styles.ts","../src/legend/components/legend-opacity/legend-opacity.tsx","../src/legend/components/legend-config-select/styles.ts","../src/legend/components/legend-config-select/legend-config-select.tsx","../src/legend/components/legend-category/styles.ts","../src/legend/components/legend-swatch/legend-swatch.tsx","../src/legend/components/legend-category/legend-category-ui.tsx","../src/legend/components/legend-ramp/styles.ts","../src/legend/components/legend-ramp/legend-ramp-ui.tsx","../src/legend/components/legend-proportion/styles.ts","../src/legend/components/legend-proportion/legend-proportion-ui.tsx","../src/legend/components/legend-icon/styles.ts","../src/legend/components/legend-icon/legend-icon-ui.tsx","../src/legend/components/legend-item/legend-item-ui.tsx","../src/legend/components/legend-item/styles.ts","../src/legend/components/legend-item/legend-item.tsx","../src/legend/index.ts"],"sourcesContent":["/**\n * Every user-facing string in the legend module. Override any subset via\n * `<Legend.Provider labels={{ … }}>` — pure `*UI` components also accept a\n * `labels` prop directly for store-free composition.\n */\nexport interface LegendLabels {\n // Layer row\n expandLayer: string\n collapseLayer: string\n hideLayer: string\n showLayer: string\n\n // Row overflow menu\n layerOptions: string\n zoomTo: string\n\n // Group\n hideGroup: string\n showGroup: string\n expandGroup: string\n collapseGroup: string\n\n // Row controls\n opacity: string\n attribute: string\n\n // Item renderers\n radiusRangeBy: string\n colorBasedOn: string\n colorGradient: string\n /** Prefix for the largest proportion break, e.g. `\"MAX: \"`. */\n maxPrefix: string\n /** Prefix for the smallest proportion break, e.g. `\"MIN: \"`. */\n minPrefix: string\n}\n\nexport const DEFAULT_LEGEND_LABELS: LegendLabels = {\n expandLayer: 'Expand layer',\n collapseLayer: 'Collapse layer',\n hideLayer: 'Hide layer',\n showLayer: 'Show layer',\n\n layerOptions: 'Layer options',\n zoomTo: 'Zoom to',\n\n hideGroup: 'Hide group',\n showGroup: 'Show group',\n expandGroup: 'Expand group',\n collapseGroup: 'Collapse group',\n\n opacity: 'Opacity',\n attribute: 'Attribute',\n\n radiusRangeBy: 'Radius range by',\n colorBasedOn: 'Color based on',\n colorGradient: 'Color gradient',\n maxPrefix: 'MAX: ',\n minPrefix: 'MIN: ',\n}\n","import { createContext, useContext } from 'react'\nimport { DEFAULT_LEGEND_LABELS, type LegendLabels } from './labels'\n\n/** Per-panel configuration delivered by `Legend.Provider` to all containers. */\nexport interface LegendConfig {\n labels: LegendLabels\n}\n\nexport const LegendConfigContext = createContext<LegendConfig>({\n labels: DEFAULT_LEGEND_LABELS,\n})\n\nexport function useLegendConfig(): LegendConfig {\n return useContext(LegendConfigContext)\n}\n","import { useLayoutEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n LegendContext,\n createLegendStore,\n getLegendStore,\n hasLegendStore,\n registerLegendStore,\n setLegendStoreEntry,\n unregisterLegendStore,\n} from '../stores'\nimport type {\n LegendGroupInput,\n LegendLayerInput,\n LegendStoreApi,\n} from '../stores'\nimport { LegendConfigContext, type LegendConfig } from './legend-config-context'\nimport { DEFAULT_LEGEND_LABELS, type LegendLabels } from './labels'\n\nexport interface LegendProviderProps {\n /** Unique id for this legend panel — keys its store. */\n id: string\n /**\n * Layer definitions. Interactive fields (visible/opacity/…) are seeded.\n * Pass stable references — `layers`, `groups`, and each layer's `variables`\n * should be memoized or module constants (same contract as widgets-v2\n * `data`); the store bails out of unchanged syncs by reference.\n */\n layers: LegendLayerInput[]\n /** Optional group definitions for grouping layers. */\n groups?: LegendGroupInput[]\n /** Override any subset of the legend's user-facing strings. */\n labels?: Partial<LegendLabels>\n /**\n * When `true` (the default), the per-panel store survives unmount so\n * visibility/opacity/order are preserved across remounts — the common case\n * for a legend that toggles in and out of view. Consumers must call\n * `deleteLegendStore(id)` when the legend is permanently removed. Set to\n * `false` to tear the store down on unmount.\n */\n keepAlive?: boolean\n children: ReactNode\n}\n\n/**\n * Legend panel shell. Creates a per-panel Zustand store keyed by `id`, syncs\n * the consumer's `layers`/`groups` definitions onto it (preserving interactive\n * state), and exposes the `id` via `LegendContext` so descendants resolve their\n * store with `useLegendId()`. Labels are surfaced via `LegendConfigContext`.\n *\n * Modeled on the widgets-v2 `Widget.Provider`.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendProvider({\n id,\n layers,\n groups,\n labels,\n keepAlive = true,\n children,\n}: LegendProviderProps) {\n // Lazy init — reuse an existing keepAlive store, otherwise create one and\n // synchronously place it in the registry so descendants can call\n // useLegendStore(id, ...) on first render.\n const [store] = useState<LegendStoreApi>(() => {\n if (hasLegendStore(id)) return getLegendStore(id)\n const created = createLegendStore(id, { layers, groups })\n setLegendStoreEntry(id, created)\n return created\n })\n\n useLayoutEffect(() => {\n registerLegendStore(id, store)\n return () => {\n unregisterLegendStore(id, { keepAlive })\n }\n }, [id, store, keepAlive])\n\n // Sync definitions in. The store's `_sync` preserves interactive state of\n // known layers/groups and bails out (no state change) when the merged result\n // is reference-identical, so stable props are a no-op.\n useLayoutEffect(() => {\n store.getState()._sync(layers, groups ?? [])\n }, [store, layers, groups])\n\n const config = useMemo<LegendConfig>(\n () => ({\n labels: labels\n ? { ...DEFAULT_LEGEND_LABELS, ...labels }\n : DEFAULT_LEGEND_LABELS,\n }),\n [labels],\n )\n\n return (\n <LegendContext.Provider value={id}>\n <LegendConfigContext.Provider value={config}>\n {children}\n </LegendConfigContext.Provider>\n </LegendContext.Provider>\n )\n}\n","import { createContext, useContext } from 'react'\n\n/**\n * Per-row composition context provided by `Legend.Row`. Actions placed inside\n * the row resolve their target layer from here instead of taking a `layerId`\n * prop, and the opacity compound shares its popover state through it (the\n * popover anchors to the row's sticky header element to span its full width).\n */\nexport interface LegendRowContextValue {\n layerId: string\n /** The row's sticky header element — anchor for `Legend.Opacity.Popover`. */\n headerEl: HTMLElement | null\n opacityOpen: boolean\n setOpacityOpen: (open: boolean) => void\n}\n\nexport const LegendRowContext = createContext<LegendRowContextValue | null>(\n null,\n)\n\n/** Nearest `Legend.Row` composition context, or `null` outside a row. */\nexport function useLegendRow(): LegendRowContextValue | null {\n return useContext(LegendRowContext)\n}\n\n/** Per-group composition context provided by `Legend.Group` (the group id). */\nexport const LegendGroupContext = createContext<string | null>(null)\n\n/** Nearest `Legend.Group` id, or `null` outside a group. */\nexport function useLegendGroupId(): string | null {\n return useContext(LegendGroupContext)\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n fadeGroup: {\n display: 'flex',\n alignItems: 'center',\n gap: 0.25,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import {\n Children,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { Box } from '@mui/material'\nimport { useLegendRow } from '../contexts'\nimport { styles } from './styles'\n\nexport interface LegendActionsProps {\n children?: ReactNode\n}\n\n/**\n * Header actions slot for `Legend.Row` / `Legend.Group` (widgets-v2 `Actions`\n * parity): the wrapper partitions its children by component identity and\n * renders this slot inside the header, next to the collapse chevron, wrapped\n * in the hover-fade group (`PsLegend-rowFade` in rows, `PsLegend-groupFade`\n * in group headers — resolved from the nearest context).\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendActions({ children }: LegendActionsProps) {\n const inRow = useLegendRow() !== null\n return (\n <Box\n className={inRow ? 'PsLegend-rowFade' : 'PsLegend-groupFade'}\n sx={styles.fadeGroup}\n >\n {children}\n </Box>\n )\n}\n\n/**\n * Splits a wrapper's children by component identity: `<Legend.Actions>`\n * elements belong in the header, everything else in the collapsible body.\n * Identity comparison works because consumers import the slot from the same\n * module (same pattern as widgets-v2 `Wrapper`).\n */\nexport function partitionLegendChildren(children: ReactNode): {\n actions: ReactNode[]\n body: ReactNode[]\n} {\n const actions: ReactNode[] = []\n const body: ReactNode[] = []\n for (const child of Children.toArray(children)) {\n if (isSlot(child, LegendActions)) actions.push(child)\n else body.push(child)\n }\n return { actions, body }\n}\n\nfunction isSlot(node: ReactNode, type: unknown): node is ReactElement {\n return isValidElement(node) && node.type === type\n}\n","import type { SxProps, Theme } from '@mui/material'\n\n/**\n * Design height of the group header (Figma \"Group layers header\", 48px).\n * Grouped layer-row headers use it as their sticky `top` offset so they pin\n * just below their group's header while the panel scrolls.\n */\nexport const LEGEND_GROUP_HEADER_HEIGHT = 48\n\nexport const styles = {\n group: {\n display: 'flex',\n flexDirection: 'column',\n '& + &': {\n borderTop: '1px solid',\n borderColor: 'divider',\n },\n // Hover-fade group actions (widgets-v2 Wrapper parity). Revealed by\n // hovering anywhere in the group block (including member rows); a control\n // carrying `.active` (hidden group) stays visible. Touch devices always\n // show them. The collapse chevron sits outside the fade group. Member\n // rows use the distinct `PsLegend-rowFade` class, so group hover never\n // lights up row actions.\n '& .PsLegend-groupFade > *': {\n opacity: 1,\n transition: ({ transitions }: Theme) =>\n transitions.create('opacity', {\n duration: transitions.duration.standard,\n easing: transitions.easing.easeInOut,\n }),\n '@media (hover: hover)': {\n opacity: 0,\n },\n '&.active': {\n opacity: 1,\n },\n },\n '&:hover .PsLegend-groupFade > *, &:focus-within .PsLegend-groupFade > *': {\n opacity: 1,\n },\n },\n // Figma: 48px tall, icon at 12px from the left, 8px gap to the label,\n // actions right-aligned with ~8px edge inset (the small icon-button padding\n // brings the glyphs to the design's 16px optical inset), hairline divider\n // below. Sticky: pins to the top of the panel's scroll container.\n header: {\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n padding: ({ spacing }) => spacing(1.5, 2, 1.5, 1),\n minHeight: LEGEND_GROUP_HEADER_HEIGHT,\n borderBottom: '1px solid',\n borderColor: 'divider',\n position: 'sticky',\n top: 0,\n // Above the sticky row headers (2), which in turn sit above MUI's\n // z-index-1 form internals in row content.\n zIndex: 3,\n backgroundColor: 'background.paper',\n },\n groupIcon: {\n display: 'flex',\n color: 'text.secondary',\n },\n label: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n // Icon buttons match the row header's 24×24 (2px padding + 20px icon).\n actions: {\n display: 'flex',\n alignItems: 'center',\n gap: 0.25,\n flexShrink: 0,\n '& .MuiIconButton-root': {\n padding: '2px',\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import type { ReactNode } from 'react'\nimport { Box, Collapse, IconButton, Typography } from '@mui/material'\nimport {\n LayersOutlined as GroupIcon,\n ExpandMore as ExpandMoreIcon,\n ExpandLess as ExpandLessIcon,\n} from '@mui/icons-material'\nimport { SmartTooltip } from '../../../components/smart-tooltip/smart-tooltip'\nimport { useLegendId, useLegendShallow } from '../../stores'\nimport { useLegendConfig } from '../../provider'\nimport { LegendGroupContext } from '../contexts'\nimport { partitionLegendChildren } from '../legend-actions/legend-actions'\nimport { styles } from './styles'\n\nexport interface LegendGroupProps {\n groupId: string\n /**\n * Composition slots: `<Legend.Actions>` children render in the sticky\n * header (hover-fade); everything else is the collapsible body — the\n * consumer renders the member `<Legend.Row>`s explicitly (use\n * `selectLayersByGroup` to resolve them).\n */\n children?: ReactNode\n}\n\n/**\n * Store-connected group wrapper (widgets-v2 `Wrapper` parity). Renders the\n * sticky 48px header — group icon + label from the store, the partitioned\n * `<Legend.Actions>` slot, and the collapse chevron — over the collapsible\n * body. Provides the group composition context so `Legend.VisibilityToggle`\n * placed in the header becomes the tri-state group eye.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendGroup({ groupId, children }: LegendGroupProps) {\n const id = useLegendId()\n const group = useLegendShallow(id, (s) => s.groups[groupId])\n const setGroupCollapsed = useLegendShallow(id, (s) => s.setGroupCollapsed)\n const { labels } = useLegendConfig()\n\n if (!group) return null\n\n const { actions, body } = partitionLegendChildren(children)\n\n return (\n <LegendGroupContext.Provider value={groupId}>\n <Box sx={styles.group}>\n <Box sx={styles.header}>\n <Box sx={styles.groupIcon}>\n <GroupIcon fontSize='small' />\n </Box>\n\n <SmartTooltip title={group.label} dependencies={[group.label]}>\n {({ ref }) => (\n <Typography\n ref={ref}\n variant='button'\n color='text.primary'\n sx={styles.label}\n >\n {group.label}\n </Typography>\n )}\n </SmartTooltip>\n\n <Box sx={styles.actions}>\n {actions}\n <IconButton\n size='small'\n onClick={() => setGroupCollapsed(groupId, !group.collapsed)}\n aria-label={\n group.collapsed ? labels.expandGroup : labels.collapseGroup\n }\n >\n {group.collapsed ? (\n <ExpandMoreIcon fontSize='small' />\n ) : (\n <ExpandLessIcon fontSize='small' />\n )}\n </IconButton>\n </Box>\n </Box>\n\n <Collapse in={!group.collapsed}>{body}</Collapse>\n </Box>\n </LegendGroupContext.Provider>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n // Padding lives on header/content/footer (not the root) so the sticky\n // header is opaque and full-bleed while pinned.\n row: {\n display: 'flex',\n flexDirection: 'column',\n '& + &': {\n borderTop: '1px solid',\n borderColor: 'divider',\n },\n // Hover-fade actions (widgets-v2 Wrapper parity). Direct children of\n // `.PsLegend-rowFade` are hidden on fine-pointer devices and fade in when\n // the row is hovered or holds focus; a control carrying `.active` (dirty\n // state — hidden layer, open menu, opacity ≠ 1) stays visible. Coarse-\n // pointer (touch) devices always show them. The collapse chevron sits\n // outside the fade group and never fades.\n '& .PsLegend-rowFade > *': {\n opacity: 1,\n transition: ({ transitions }: Theme) =>\n transitions.create('opacity', {\n duration: transitions.duration.standard,\n easing: transitions.easing.easeInOut,\n }),\n '@media (hover: hover)': {\n opacity: 0,\n },\n '&.active': {\n opacity: 1,\n },\n },\n '&:hover .PsLegend-rowFade > *, &:focus-within .PsLegend-rowFade > *': {\n opacity: 1,\n },\n // Hovering anywhere in the row also reveals the category/icon values\n // (the renderers keep their own list-scoped rule for standalone usage).\n '&:hover .PsLegend-value, &:focus-within .PsLegend-value': {\n opacity: 1,\n },\n },\n // Figma `_Legend header`: 16px top/left inset (title glyphs start at\n // y≈17, x=16 in the 68px-tall header), actions share the title's vertical\n // band (subtitle flows below them) — hence `flex-start` with the title\n // optically centered against the 30px icon-button row. Sticky: pins inside\n // the panel's scroll container; `top` is applied inline per row (0, or the\n // group-header height for grouped rows).\n header: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 0.5,\n minHeight: 32,\n padding: ({ spacing }) => spacing(1.5, 2, 1.5, 2),\n position: 'sticky',\n // Above MUI's z-index-1 form internals (e.g. InputLabel) in row content,\n // below the group header (3).\n zIndex: 2,\n backgroundColor: 'background.paper',\n },\n titleBox: {\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n },\n // The title line and the actions box share the same 24px band, centered,\n // so the title and the action icons stay aligned under the header's\n // `flex-start` — no padding magic. The subtitle flows below.\n titleLine: {\n minHeight: 24,\n display: 'flex',\n alignItems: 'center',\n },\n title: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n // Same 24px band as the title line, so both sides of the header stay\n // aligned even when the composed actions are shorter (or fade out).\n // Icon buttons (actions + collapse chevron) are squeezed to 24×24:\n // 2px padding around the 20px small icon.\n actions: {\n minHeight: 24,\n display: 'flex',\n alignItems: 'center',\n gap: 0.25,\n flexShrink: 0,\n '& .MuiIconButton-root': {\n padding: '2px',\n },\n },\n // Figma rhythm: ~16px from the subtitle to the select (8px header bottom\n // padding + 4px here + line leading), 8px between body blocks, 8px bottom\n // inset before the next row's divider.\n content: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n padding: ({ spacing }) => spacing(0.5, 2, 1, 2),\n },\n // ~16px above the note (content's 8px bottom inset + 8px here), per design.\n footer: {\n padding: ({ spacing }) => spacing(1, 2, 1, 2),\n },\n dimmed: {\n opacity: 0.5,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { useMemo, useState, type ReactNode } from 'react'\nimport { Box, Collapse, IconButton, Typography } from '@mui/material'\nimport {\n ExpandMore as ExpandMoreIcon,\n ExpandLess as ExpandLessIcon,\n} from '@mui/icons-material'\nimport { SmartTooltip } from '../../../components/smart-tooltip/smart-tooltip'\nimport { useLegendId, useLegendShallow } from '../../stores'\nimport { useLegendConfig } from '../../provider'\nimport { LegendRowContext, type LegendRowContextValue } from '../contexts'\nimport { partitionLegendChildren } from '../legend-actions/legend-actions'\nimport { LEGEND_GROUP_HEADER_HEIGHT } from '../legend-group/styles'\nimport { styles } from './styles'\n\nexport interface LegendRowProps {\n layerId: string\n /**\n * Composition slots: `<Legend.Actions>` children render in the sticky\n * header next to the collapse chevron (hover-fade); everything else renders\n * in the collapsible body, followed by the layer's `helperText` footer.\n */\n children?: ReactNode\n}\n\n/**\n * Store-connected layer-row wrapper (widgets-v2 `Wrapper` parity). Renders\n * the sticky header — title + subtitle from the store with a smart-truncating\n * tooltip, the partitioned `<Legend.Actions>` slot, and the collapse chevron —\n * over the collapsible body. Provides the row composition context so actions\n * (`Legend.VisibilityToggle`, `Legend.Opacity.*`, `Legend.RowMenu`,\n * `Legend.ConfigSelect`, `Legend.Item`) resolve the layer without props.\n * When the layer is hidden the body is force-collapsed, the content dims,\n * and the chevron is disabled.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendRow({ layerId, children }: LegendRowProps) {\n const id = useLegendId()\n const layer = useLegendShallow(id, (s) => s.layers[layerId])\n const setCollapsed = useLegendShallow(id, (s) => s.setCollapsed)\n const { labels } = useLegendConfig()\n\n const [headerEl, setHeaderEl] = useState<HTMLElement | null>(null)\n const [opacityOpen, setOpacityOpen] = useState(false)\n const rowContext = useMemo<LegendRowContextValue>(\n () => ({ layerId, headerEl, opacityOpen, setOpacityOpen }),\n [layerId, headerEl, opacityOpen],\n )\n\n if (!layer) return null\n\n const { actions, body } = partitionLegendChildren(children)\n const effectivelyCollapsed = !layer.visible || layer.collapsed\n // Grouped rows pin below their group's sticky header.\n const stickyTop = layer.groupId ? LEGEND_GROUP_HEADER_HEIGHT : 0\n\n return (\n <LegendRowContext.Provider value={rowContext}>\n <Box sx={styles.row}>\n {/* Inline style: per-instance sticky offset (0 or the group-header\n height), no emotion class churn. */}\n <Box ref={setHeaderEl} sx={styles.header} style={{ top: stickyTop }}>\n <Box sx={styles.titleBox}>\n <Box sx={styles.titleLine}>\n <SmartTooltip title={layer.name} dependencies={[layer.name]}>\n {({ ref }) => (\n <Typography\n ref={ref}\n variant='button'\n color='text.primary'\n sx={styles.title}\n >\n {layer.name}\n </Typography>\n )}\n </SmartTooltip>\n </Box>\n {layer.subtitle && (\n <Typography variant='caption' color='text.secondary'>\n {layer.subtitle}\n </Typography>\n )}\n </Box>\n\n <Box sx={styles.actions}>\n {actions}\n <IconButton\n size='small'\n onClick={() => setCollapsed(layerId, !layer.collapsed)}\n disabled={!layer.visible}\n aria-label={\n effectivelyCollapsed ? labels.expandLayer : labels.collapseLayer\n }\n >\n {effectivelyCollapsed ? (\n <ExpandMoreIcon fontSize='small' />\n ) : (\n <ExpandLessIcon fontSize='small' />\n )}\n </IconButton>\n </Box>\n </Box>\n\n <Collapse in={!effectivelyCollapsed}>\n <Box\n sx={\n layer.visible\n ? styles.content\n : { ...styles.content, ...styles.dimmed }\n }\n >\n {body}\n </Box>\n {layer.helperText && (\n <Box sx={styles.footer}>\n {typeof layer.helperText === 'string' ? (\n <Typography variant='caption' color='text.secondary'>\n {layer.helperText}\n </Typography>\n ) : (\n layer.helperText\n )}\n </Box>\n )}\n </Collapse>\n </Box>\n </LegendRowContext.Provider>\n )\n}\n","import { createSvgIcon } from '@mui/material'\n\n/**\n * Indeterminate visibility — an outlined eye with an internal slash, shown on\n * a group whose member layers are partially hidden (\"mixed\" state). Path data\n * exported from the Figma source (`MUI_visibility_indeterminate`, CARTO PS Lib\n * Documentation node 5877-16982); the glyph is centered at (184, 24) in the\n * header frame and drawn on a 18px grid (75% of the 24px box), so it is\n * re-centered into the standard viewBox and scaled by 4/3 — the resulting\n * 22×15-unit eye matches the MUI `Visibility*` icons exactly.\n */\nexport const VisibilityIndeterminateIcon = createSvgIcon(\n <g transform='translate(12 12) scale(1.33333) translate(-184 -24)'>\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M184.901 29.5794L185.217 29.5415C185.803 29.4604 186.372 29.3216 186.918 29.1319L187 29.1007L187 29.1033L187.208 29.0255L187.536 28.8904C187.722 28.8088 187.906 28.721 188.086 28.6272L188.366 28.4747C188.381 28.4663 188.395 28.4578 188.41 28.4493C188.418 28.4451 188.425 28.4408 188.432 28.4365C188.455 28.4234 188.478 28.4102 188.5 28.3969C188.551 28.3668 188.601 28.3362 188.652 28.3052L188.912 28.1374C189.598 27.6788 190.217 27.1271 190.75 26.5002L190.751 26.4954C190.989 26.2164 191.21 25.9226 191.413 25.6152C191.488 25.5007 191.561 25.3843 191.631 25.2662L191.757 25.0445L191.878 24.8189L192.021 24.5306L192.15 24.2443L192.25 24C190.98 20.7776 187.885 18.4747 184.239 18.3782L184 18.375L183.716 18.3795L183.637 18.3823L183.373 18.3967L183.103 18.4198L182.838 18.4506L182.666 18.4749L182.426 18.5146C182.19 18.557 181.957 18.6087 181.728 18.6684L181.55 18.7175L181.271 18.8039L182.508 20.04L182.801 19.9854C183.194 19.9182 183.592 19.875 184 19.875C186.842 19.875 189.378 21.4725 190.615 24C190.172 24.915 189.55 25.7025 188.807 26.34L188.811 26.3446C188.71 26.4323 188.606 26.5172 188.5 26.5991C188.455 26.6337 188.41 26.6679 188.364 26.7015C188.108 26.8897 187.84 27.0611 187.562 27.2145C187.088 27.4755 186.585 27.6844 186.058 27.836L186.062 27.84L185.778 27.9125C185.707 27.9293 185.635 27.9452 185.563 27.9602C185.297 28.0173 185.025 28.06 184.75 28.0876V28.0866C184.503 28.1118 184.253 28.125 184 28.125C181.158 28.125 178.622 26.5275 177.385 24C177.91 22.9275 178.675 22.0425 179.582 21.3525L180.895 22.665L180.826 22.844C180.697 23.2065 180.625 23.595 180.625 24C180.625 25.86 182.14 27.375 184 27.375C184.258 27.375 184.509 27.3459 184.75 27.2915C185.462 27.129 186.09 26.7397 186.553 26.2048L179.79 19.4389C179.339 19.6833 178.912 19.9656 178.512 20.2817L178.517 20.2875L178.271 20.4884C177.704 20.9671 177.197 21.516 176.766 22.1227C176.404 22.6333 176.095 23.1838 175.845 23.7662L175.75 24C177.048 27.2925 180.25 29.625 184 29.625L184.285 29.6205L184.492 29.6116L184.628 29.6025L184.901 29.5794ZM182.133 23.9025L184.09 25.86L184.045 25.8703L184 25.875C182.965 25.875 182.125 25.035 182.125 24L182.133 23.9025Z'\n />\n <path d='M187.368 23.9925C187.375 22.1325 185.86 20.625 184 20.625C183.722 20.625 183.46 20.6625 183.198 20.73L184.75 22.2825L184.889 22.3507C185.252 22.5477 185.543 22.8625 185.71 23.2425L187.263 24.795L187.304 24.6011C187.342 24.4045 187.368 24.2006 187.368 23.9925Z' />\n </g>,\n 'VisibilityIndeterminate',\n)\n","import { useEffect } from 'react'\nimport { IconButton } from '@mui/material'\nimport {\n VisibilityOutlined as VisibilityIcon,\n VisibilityOffOutlined as VisibilityOffIcon,\n} from '@mui/icons-material'\nimport {\n selectGroupVisibility,\n useLegendId,\n useLegendShallow,\n useLegendStore,\n type LegendVisibility,\n} from '../../stores'\nimport { useLegendConfig } from '../../provider'\nimport type { LegendLabels } from '../../provider/labels'\nimport { VisibilityIndeterminateIcon } from '../icons'\nimport { useLegendGroupId, useLegendRow } from '../contexts'\n\nconst ICONS = {\n visible: VisibilityIcon,\n hidden: VisibilityOffIcon,\n mixed: VisibilityIndeterminateIcon,\n} as const\n\nexport type LegendVisibilityToggleProps = {\n /**\n * Override the aria labels (defaults: the layer pair in rows and controlled\n * mode, the group pair in group headers) — e.g.\n * `labels={{ hideLayer: 'Hide section', showLayer: 'Show section' }}`.\n */\n labels?: Pick<LegendLabels, 'hideLayer' | 'showLayer'>\n} & (\n | {\n /**\n * Controlled mode: current state — renders the matching eye (`mixed` →\n * the indeterminate icon). Use it for element kinds beyond layer/group.\n */\n visibility: LegendVisibility\n /**\n * Controlled mode: called with the **next** visibility (`hidden` →\n * `true`; `visible`/`mixed` → `false`) — mirrors the store setters.\n */\n onToggle: (visible: boolean) => void\n }\n | { visibility?: never; onToggle?: never }\n)\n\n/**\n * Agnostic visibility eye. Pass `visibility` + `onToggle` to control it for\n * any element kind (no context needed); without them it wires itself to the\n * nearest context — the layer eye inside a `Legend.Row`, the tri-state group\n * eye (cascading to every member) inside a `Legend.Group`. Pinned `.active`\n * in the hover-fade group while not fully visible. Renders nothing without\n * props or context (dev-only warning).\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendVisibilityToggle({\n visibility,\n onToggle,\n labels,\n}: LegendVisibilityToggleProps) {\n const id = useLegendId()\n const row = useLegendRow()\n const groupId = useLegendGroupId()\n const { labels: configLabels } = useLegendConfig()\n\n const controlled = visibility !== undefined && onToggle !== undefined\n\n const layerVisible = useLegendStore(id, (s) =>\n !controlled && row ? (s.layers[row.layerId]?.visible ?? true) : true,\n )\n const groupVisibility = useLegendShallow(id, (s) =>\n !controlled && !row && groupId\n ? selectGroupVisibility(s, groupId)\n : 'visible',\n )\n const setVisibility = useLegendStore(id, (s) => s.setVisibility)\n const setGroupVisibility = useLegendStore(id, (s) => s.setGroupVisibility)\n\n useEffect(() => {\n if (!controlled && !row && !groupId) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Legend.VisibilityToggle needs `visibility`/`onToggle` props or a Legend.Row / Legend.Group context.',\n )\n }\n }, [controlled, row, groupId])\n\n // Resolve the tri-state + handler + label pair for the three modes.\n let state: LegendVisibility\n let handleToggle: () => void\n let labelPair: Pick<LegendLabels, 'hideLayer' | 'showLayer'> | undefined =\n labels\n\n if (controlled) {\n state = visibility\n handleToggle = () => onToggle(visibility === 'hidden')\n } else if (row) {\n state = layerVisible ? 'visible' : 'hidden'\n handleToggle = () => setVisibility(row.layerId, !layerVisible)\n } else if (groupId) {\n state = groupVisibility\n handleToggle = () =>\n setGroupVisibility(groupId, groupVisibility === 'hidden')\n labelPair = labels ?? {\n hideLayer: configLabels.hideGroup,\n showLayer: configLabels.showGroup,\n }\n } else {\n return null\n }\n\n const { hideLayer, showLayer } = labelPair ?? configLabels\n const EyeIcon = ICONS[state]\n\n return (\n <IconButton\n size='small'\n className={state === 'visible' ? undefined : 'active'}\n onClick={handleToggle}\n aria-label={state === 'hidden' ? showLayer : hideLayer}\n >\n <EyeIcon fontSize='small' />\n </IconButton>\n )\n}\n","import { useState, type MouseEvent, type ReactNode } from 'react'\nimport { IconButton, Menu } from '@mui/material'\nimport { MoreVert as MoreVertIcon } from '@mui/icons-material'\nimport { useLegendId, useLegendStore } from '../../stores'\nimport { useLegendConfig } from '../../provider'\nimport { useLegendRow } from '../contexts'\n\nexport interface LegendRowMenuProps {\n /**\n * The menu items — composed by the consumer (e.g. `<Legend.ZoomTo>` or any\n * MUI `MenuItem`). A click on any item bubbles to the menu and closes it;\n * an item that must keep the menu open should `event.stopPropagation()`.\n */\n children?: ReactNode\n}\n\n/**\n * Agnostic overflow (⋮) menu shell for a layer row — the items are passed as\n * children, like `Legend.Actions`. Renders nothing without children, outside\n * a row, or while the layer is hidden (a hidden row keeps only its\n * visibility eye + collapse chevron).\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendRowMenu({ children }: LegendRowMenuProps) {\n const id = useLegendId()\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const open = Boolean(anchorEl)\n const row = useLegendRow()\n const visible = useLegendStore(id, (s) =>\n row ? (s.layers[row.layerId]?.visible ?? true) : true,\n )\n const { labels } = useLegendConfig()\n\n if (!row || !children || !visible) return null\n\n const handleOpen = (e: MouseEvent<HTMLElement>) => {\n e.stopPropagation()\n setAnchorEl(e.currentTarget)\n }\n const handleClose = () => setAnchorEl(null)\n\n return (\n <>\n <IconButton\n size='small'\n className={open ? 'active' : undefined}\n disabled={!visible}\n onClick={handleOpen}\n aria-label={labels.layerOptions}\n aria-haspopup='menu'\n aria-expanded={open}\n >\n <MoreVertIcon fontSize='small' />\n </IconButton>\n {/* Menu-level onClick: any item click (bubbling) closes the menu, so\n consumer items need no legend wiring. */}\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n onClick={handleClose}\n >\n {children}\n </Menu>\n </>\n )\n}\n","import { ListItemIcon, MenuItem } from '@mui/material'\nimport { CenterFocusStrong as ZoomIcon } from '@mui/icons-material'\nimport { useLegendConfig } from '../../provider'\nimport { useLegendRow } from '../contexts'\n\nexport interface LegendZoomToProps {\n /**\n * Fit the map viewport to the layer. The handler lives at the composition\n * site (not the Provider) — each menu can wire its own behavior.\n */\n onZoomTo: (layerId: string) => void\n}\n\n/**\n * \"Zoom to\" menu item for `Legend.RowMenu` — resolves its layer from the\n * enclosing `Legend.Row` context and calls the `onZoomTo` it was composed\n * with. The click bubbles to the menu, which closes itself.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendZoomTo({ onZoomTo }: LegendZoomToProps) {\n const row = useLegendRow()\n const { labels } = useLegendConfig()\n\n if (!row) return null\n\n return (\n <MenuItem onClick={() => onZoomTo(row.layerId)}>\n <ListItemIcon>\n <ZoomIcon fontSize='small' />\n </ListItemIcon>\n {labels.zoomTo}\n </MenuItem>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n // Tooltip wrapper around the (possibly disabled) trigger button. A plain\n // inline span would be sized by the line box (baseline + descender) and\n // end up ~1px taller than the 24px button inside.\n triggerWrap: {\n display: 'inline-flex',\n },\n popover: {\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n padding: ({ spacing }) => spacing(1, 1.5),\n width: 280,\n },\n slider: {\n flex: 1,\n },\n // Wide enough for \"100 %\" — the value must never ellipsize.\n input: {\n width: 76,\n flexShrink: 0,\n '& input': {\n textAlign: 'right',\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { useState } from 'react'\nimport {\n Box,\n IconButton,\n InputAdornment,\n OutlinedInput,\n Popover,\n Slider,\n Tooltip,\n} from '@mui/material'\nimport { Opacity as OpacityIcon } from '@carto/meridian-ds/custom-icons'\nimport { useLegendId, useLegendStore } from '../../stores'\nimport { useLegendConfig } from '../../provider'\nimport { useLegendRow } from '../contexts'\nimport { styles } from './styles'\n\nconst clampPercent = (value: number): number =>\n Math.min(100, Math.max(0, Math.round(value)))\n\n/**\n * Opacity header action for a layer row: a checkerboard icon button, pinned\n * `.active` in the hover-fade group while opacity ≠ 1 or the popover is open,\n * disabled while the layer is hidden. Opens `Legend.Opacity.Popover` through\n * the row context. Place it inside `<Legend.Actions>` of a `Legend.Row`.\n *\n * @experimental This API is new and may change in a future release.\n */\nfunction OpacityTrigger() {\n const id = useLegendId()\n const row = useLegendRow()\n const layerId = row?.layerId\n const opacity = useLegendStore(id, (s) =>\n layerId ? (s.layers[layerId]?.opacity ?? 1) : 1,\n )\n const visible = useLegendStore(id, (s) =>\n layerId ? (s.layers[layerId]?.visible ?? true) : true,\n )\n const { labels } = useLegendConfig()\n\n // A hidden layer shows only its visibility eye + collapse chevron — the\n // opacity action disappears entirely until the layer is shown again.\n if (!row || !visible) return null\n const dirty = opacity !== 1\n\n return (\n // The wrapper keeps the Tooltip working on the button; as the fade\n // group's direct child it also carries the `.active` pin.\n <Tooltip title={labels.opacity}>\n <Box\n component='span'\n className={dirty || row.opacityOpen ? 'active' : undefined}\n sx={styles.triggerWrap}\n >\n <IconButton\n size='small'\n onClick={() => row.setOpacityOpen(true)}\n aria-label={labels.opacity}\n >\n <OpacityIcon fontSize='small' />\n </IconButton>\n </Box>\n </Tooltip>\n )\n}\n\n/**\n * The opacity editing surface — a popover **anchored to the row's sticky\n * header, spanning its full width**, holding a slider (writes `setOpacity`\n * only on release, widgets-v2 parity) and a percent input (commits live as\n * soon as the draft parses, clamped 0–100; never ellipsizes \"100 %\").\n * Declare it anywhere inside the `Legend.Row` (it renders in a portal);\n * open it with `Legend.Opacity.Trigger`.\n *\n * @experimental This API is new and may change in a future release.\n */\nfunction OpacityPopover() {\n const id = useLegendId()\n const row = useLegendRow()\n const layerId = row?.layerId\n const opacity = useLegendStore(id, (s) =>\n layerId ? (s.layers[layerId]?.opacity ?? 1) : 1,\n )\n const visible = useLegendStore(id, (s) =>\n layerId ? (s.layers[layerId]?.visible ?? true) : true,\n )\n const setOpacity = useLegendStore(id, (s) => s.setOpacity)\n const { labels } = useLegendConfig()\n\n // Drag and typing drafts: the thumb and the input track each other through\n // `percent` while only commits reach the store (and the map).\n const [dragPercent, setDragPercent] = useState<number | null>(null)\n const [draft, setDraft] = useState<string | null>(null)\n\n // The trigger is gone while hidden; also gate `open` so a popover left open\n // can't survive the layer being hidden elsewhere.\n if (!row || !layerId || !visible) return null\n\n const percent = dragPercent ?? clampPercent(opacity * 100)\n\n const commitPercent = (value: number): number => {\n const clamped = clampPercent(value)\n setOpacity(layerId, clamped / 100)\n return clamped\n }\n\n const handleInputChange = (raw: string) => {\n setDraft(raw)\n if (raw.trim() === '') return\n const parsed = Number(raw)\n if (!Number.isFinite(parsed)) return\n const clamped = commitPercent(parsed)\n // Out-of-range entries snap the visible draft to the committed value.\n if (clamped !== parsed) setDraft(String(clamped))\n }\n\n const handleClose = () => {\n row.setOpacityOpen(false)\n setDraft(null)\n setDragPercent(null)\n }\n\n return (\n <Popover\n open={row.opacityOpen && Boolean(row.headerEl)}\n anchorEl={row.headerEl}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n transformOrigin={{ vertical: 'top', horizontal: 'left' }}\n // Full row width: the paper matches the sticky header it anchors to.\n slotProps={{ paper: { sx: { width: row.headerEl?.clientWidth } } }}\n >\n <Box sx={styles.popover}>\n <Slider\n size='small'\n min={0}\n max={100}\n step={1}\n value={percent}\n onChange={(_, value) => {\n setDragPercent(value as number)\n setDraft(null)\n }}\n onChangeCommitted={(_, value) => {\n commitPercent(value as number)\n setDragPercent(null)\n }}\n aria-label={labels.opacity}\n sx={styles.slider}\n />\n <OutlinedInput\n size='small'\n value={draft ?? String(percent)}\n onChange={(event) => handleInputChange(event.target.value)}\n // An abandoned draft (empty / non-numeric) snaps back to the\n // store value on blur.\n onBlur={() => setDraft(null)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') (event.target as HTMLElement).blur()\n }}\n endAdornment={<InputAdornment position='end'>%</InputAdornment>}\n inputProps={{ inputMode: 'numeric', 'aria-label': labels.opacity }}\n sx={styles.input}\n />\n </Box>\n </Popover>\n )\n}\n\n/**\n * Compound opacity control for layer rows (widgets-v2 `FullScreen` parity):\n * `Trigger` lives in the header `<Legend.Actions>`, `Popover` anywhere in the\n * row body — they share state through the row context.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport const LegendOpacity = {\n Trigger: OpacityTrigger,\n Popover: OpacityPopover,\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n // Outlined-input look-alike trigger (the design's select has no floating\n // label — just the value + chevron in a 32px bordered field).\n trigger: {\n width: '100%',\n minHeight: 32,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1,\n padding: ({ spacing }) => spacing(0, 1.5),\n border: '1px solid',\n borderColor: 'divider',\n borderRadius: 1,\n backgroundColor: 'background.paper',\n color: 'text.primary',\n '&:hover': {\n borderColor: 'text.primary',\n },\n },\n value: {\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n chevron: {\n flexShrink: 0,\n color: 'action.active',\n transition: ({ transitions }: Theme) => transitions.create('transform'),\n },\n chevronOpen: {\n transform: 'rotate(180deg)',\n },\n sectionTitle: {\n padding: ({ spacing }) => spacing(1, 2, 0.5, 2),\n lineHeight: 1.5,\n },\n // Figma: the active option reads as primary-colored text, no background.\n option: {\n '&.Mui-selected, &.Mui-selected:hover': {\n backgroundColor: 'transparent',\n color: 'primary.main',\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { useState } from 'react'\nimport { ButtonBase, Menu, MenuItem, Typography } from '@mui/material'\nimport { ArrowDropDown as ArrowDropDownIcon } from '@mui/icons-material'\nimport { useLegendId, useLegendShallow } from '../../stores'\nimport { useLegendConfig } from '../../provider'\nimport { useLegendRow } from '../contexts'\nimport { styles } from './styles'\n\n/**\n * The layer configuration select — resolves its layer from the enclosing\n * `Legend.Row` context. The closed field shows the **first section's** active\n * option; the menu lists every section under its title (omitted when the\n * layer has a single section) and each section highlights its own active\n * option. Picking an option writes `setSectionValue` and closes the menu.\n * Renders nothing when the layer declares no sections (or outside a row).\n *\n * A native single-value `Select` can't represent one active per section,\n * hence the outlined-trigger + `Menu` composition.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendConfigSelect() {\n const id = useLegendId()\n const row = useLegendRow()\n const layerId = row?.layerId\n const sections = useLegendShallow(id, (s) =>\n layerId ? s.layers[layerId]?.sections : undefined,\n )\n const setSectionValue = useLegendShallow(id, (s) => s.setSectionValue)\n const { labels } = useLegendConfig()\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const open = Boolean(anchorEl)\n\n if (!layerId || !sections || sections.length === 0) return null\n\n const display = sections[0]!.active\n const showTitles = sections.length > 1\n\n return (\n <>\n <ButtonBase\n sx={styles.trigger}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n aria-label={labels.attribute}\n aria-haspopup='listbox'\n aria-expanded={open}\n >\n <Typography variant='body2' sx={styles.value}>\n {display}\n </Typography>\n <ArrowDropDownIcon\n fontSize='small'\n sx={\n open ? { ...styles.chevron, ...styles.chevronOpen } : styles.chevron\n }\n />\n </ButtonBase>\n\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={() => setAnchorEl(null)}\n slotProps={{\n paper: { sx: { width: anchorEl?.clientWidth } },\n }}\n >\n {sections.map((section) => [\n showTitles && section.title ? (\n <Typography\n key={`${section.id}-title`}\n variant='overline'\n color='text.secondary'\n component='li'\n sx={styles.sectionTitle}\n >\n {section.title}\n </Typography>\n ) : null,\n ...section.options.map((option) => (\n <MenuItem\n key={`${section.id}-${option}`}\n selected={option === section.active}\n sx={styles.option}\n onClick={() => {\n setSectionValue(layerId, section.id, option)\n setAnchorEl(null)\n }}\n >\n {option}\n </MenuItem>\n )),\n ])}\n </Menu>\n </>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0.5,\n // Values are hidden until the legend content is hovered (or keyboard-\n // focused). On hover-incapable (touch) devices they're always visible —\n // tap-:hover is unreliable on non-interactive elements.\n '&:hover .PsLegend-value, &:focus-within .PsLegend-value': {\n opacity: 1,\n },\n '@media (hover: none)': {\n '& .PsLegend-value': { opacity: 1 },\n },\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n },\n // Fixed-width gutter so labels stay column-aligned regardless of swatch\n // shape or per-item size; the swatch is centered within it.\n gutter: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n label: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n value: {\n flexShrink: 0,\n opacity: 0,\n transition: 'opacity 120ms',\n },\n // ─── Horizontal orientation modifiers (spread over the vertical base) ───\n // Items flow left-to-right and wrap; each is a compact swatch+label pair.\n listHorizontal: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n columnGap: 2,\n rowGap: 0.5,\n },\n // No fixed gutter — the swatch sits at its natural size next to the label.\n itemHorizontal: {\n gap: 0.5,\n },\n // Each chip sizes to its content (no flex-grow / ellipsis).\n labelHorizontal: {\n flex: '0 0 auto',\n overflow: 'visible',\n textOverflow: 'clip',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { useId } from 'react'\nimport type {\n LegendFillPattern,\n LegendStrokeStyle,\n LegendSwatchShape,\n} from '../../stores'\n\nexport interface LegendSwatchProps {\n /** Shape to render. Default `'circle'`. */\n shape?: LegendSwatchShape\n /** CSS color string (hex / rgb / named). */\n color: string\n /** Paint the outline/border instead of the fill (square/circle only). */\n isStrokeColor?: boolean\n /** Fill pattern when filled. Default `'solid'`. */\n fillPattern?: LegendFillPattern\n /** Border style (stroked square/circle) or line style (`shape: 'line'`). Default `'solid'`. */\n strokeStyle?: LegendStrokeStyle\n /** Primary dimension in px (square side / circle diameter / line length). Default 12. */\n size?: number\n}\n\n/** Default swatch dimension in px — shared with the category renderer. */\nexport const DEFAULT_SWATCH_SIZE = 12\n\nconst STROKE_WIDTH = 1.5\nconst LINE_WIDTH = 2\nconst HAIRLINE = 1\n\n/** Dash array for stroked square/circle borders. */\nfunction borderDash(style: LegendStrokeStyle): {\n dash?: string\n round?: boolean\n} {\n switch (style) {\n case 'dashed':\n return { dash: '3 2' }\n case 'dotted':\n return { dash: `0.1 ${STROKE_WIDTH * 2}`, round: true }\n // `dash-dot` is line-only and `corners` is handled separately: both\n // degrade to a solid border here.\n default:\n return {}\n }\n}\n\n/** Dash array for `shape: 'line'`. */\nfunction lineDash(style: LegendStrokeStyle): {\n dash?: string\n round?: boolean\n} {\n switch (style) {\n case 'dashed':\n return { dash: '4 3' }\n case 'dotted':\n return { dash: `0.1 ${LINE_WIDTH * 2}`, round: true }\n case 'dash-dot':\n return { dash: '5 2 0.1 2', round: true }\n // `corners` is square-only → solid line.\n default:\n return {}\n }\n}\n\n/** SVG children for a fill `<pattern>` tile, drawn in `color`. */\nfunction patternTile(pattern: LegendFillPattern, color: string) {\n const line = (d: string) => (\n <path d={d} stroke={color} strokeWidth={1.2} fill='none' />\n )\n switch (pattern) {\n case 'horizontal':\n return { size: 4, content: line('M0 2 H4') }\n case 'vertical':\n return { size: 4, content: line('M2 0 V4') }\n case 'diagonal':\n // \"/\" with wrap segments for a seamless tile.\n return { size: 4, content: line('M0 4 L4 0 M-1 1 L1 -1 M3 5 L5 3') }\n case 'diagonal-alt':\n // \"\\\"\n return { size: 4, content: line('M0 0 L4 4 M-1 3 L1 5 M3 -1 L5 1') }\n case 'cross':\n return {\n size: 4,\n content: line(\n 'M0 4 L4 0 M-1 1 L1 -1 M3 5 L5 3 M0 0 L4 4 M-1 3 L1 5 M3 -1 L5 1',\n ),\n }\n case 'dots':\n return { size: 4, content: <circle cx={2} cy={2} r={0.9} fill={color} /> }\n case 'grid':\n return {\n size: 3,\n content: <circle cx={1.5} cy={1.5} r={0.7} fill={color} />,\n }\n default:\n return null\n }\n}\n\n/**\n * A single legend swatch rendered as inline SVG: a square, circle, or line,\n * painted as a solid/patterned fill or a styled outline. Pure and theme-free —\n * `color` is a raw CSS color. Decorative (`aria-hidden`); the adjacent label\n * carries the accessible text.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendSwatch({\n shape = 'circle',\n color,\n isStrokeColor = false,\n fillPattern = 'solid',\n strokeStyle = 'solid',\n size = DEFAULT_SWATCH_SIZE,\n}: LegendSwatchProps) {\n const patternId = useId()\n\n // ── Line ──────────────────────────────────────────────────────────────────\n if (shape === 'line') {\n const { dash, round } = lineDash(strokeStyle)\n return (\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n aria-hidden\n data-shape='line'\n style={{ display: 'block', overflow: 'visible' }}\n >\n <line\n x1={0}\n y1={size / 2}\n x2={size}\n y2={size / 2}\n stroke={color}\n strokeWidth={LINE_WIDTH}\n strokeDasharray={dash}\n strokeLinecap={round ? 'round' : 'butt'}\n />\n </svg>\n )\n }\n\n // ── Square / circle ────────────────────────────────────────────────────────\n const inset = isStrokeColor ? STROKE_WIDTH / 2 : 0\n const usePattern = !isStrokeColor && fillPattern !== 'solid'\n const tile = usePattern ? patternTile(fillPattern, color) : null\n\n // corner-marks only apply to a stroked square.\n const isCorners =\n isStrokeColor && strokeStyle === 'corners' && shape === 'square'\n\n const { dash, round } = isStrokeColor\n ? borderDash(strokeStyle)\n : { dash: undefined, round: false }\n\n const commonStroke = {\n stroke: color,\n strokeWidth: isStrokeColor ? STROKE_WIDTH : HAIRLINE,\n strokeDasharray: isStrokeColor ? dash : undefined,\n strokeLinecap: round ? ('round' as const) : ('butt' as const),\n }\n\n const fill = isStrokeColor\n ? 'none'\n : usePattern\n ? `url(#${patternId})`\n : color\n\n return (\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n aria-hidden\n data-shape={shape}\n style={{ display: 'block' }}\n >\n {tile && (\n <defs>\n <pattern\n id={patternId}\n patternUnits='userSpaceOnUse'\n width={tile.size}\n height={tile.size}\n >\n {tile.content}\n </pattern>\n </defs>\n )}\n\n {isCorners ? (\n <CornerMarks size={size} color={color} />\n ) : shape === 'circle' ? (\n <circle\n cx={size / 2}\n cy={size / 2}\n r={size / 2 - inset}\n fill={fill}\n {...commonStroke}\n // A solid-color filled circle needs no border.\n stroke={isStrokeColor || usePattern ? color : 'none'}\n />\n ) : (\n <rect\n x={inset}\n y={inset}\n width={size - inset * 2}\n height={size - inset * 2}\n fill={fill}\n {...commonStroke}\n stroke={isStrokeColor || usePattern ? color : 'none'}\n />\n )}\n </svg>\n )\n}\n\n/** Four L-shaped corner brackets for the `corners` border style (square). */\nfunction CornerMarks({ size, color }: { size: number; color: string }) {\n const arm = Math.max(2, size * 0.3)\n const o = STROKE_WIDTH / 2\n const max = size - o\n const props = {\n stroke: color,\n strokeWidth: STROKE_WIDTH,\n fill: 'none',\n }\n return (\n <>\n <path d={`M${o} ${o + arm} V${o} H${o + arm}`} {...props} />\n <path d={`M${max - arm} ${o} H${max} V${o + arm}`} {...props} />\n <path d={`M${max} ${max - arm} V${max} H${max - arm}`} {...props} />\n <path d={`M${o + arm} ${max} H${o} V${max - arm}`} {...props} />\n </>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from './styles'\nimport {\n LegendSwatch,\n DEFAULT_SWATCH_SIZE,\n} from '../legend-swatch/legend-swatch'\nimport type { LegendCategoryVariable } from '../../stores'\n\nexport interface LegendCategoryUIProps {\n data: LegendCategoryVariable\n}\n\nconst MIN_GUTTER = 16\n\n/**\n * Categorical legend — a list of swatches with labels (and optional trailing\n * values, compact-formatted). The variable-level shape / fill pattern /\n * stroke style / `isStrokeColor` act as defaults; each item may override any\n * of them, so one list can mix patterns (or shapes) across entries.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendCategoryUI({ data }: LegendCategoryUIProps) {\n const {\n items,\n shape = 'circle',\n isStrokeColor = false,\n fillPattern = 'solid',\n strokeStyle = 'solid',\n orientation = 'vertical',\n } = data\n const horizontal = orientation === 'horizontal'\n\n // Fixed gutter wide enough for the largest swatch so labels align — only\n // meaningful in the vertical list; horizontal chips size to content.\n const maxSize = items.reduce(\n (m, it) => Math.max(m, it.size ?? DEFAULT_SWATCH_SIZE),\n 0,\n )\n const gutter = Math.max(MIN_GUTTER, maxSize)\n\n return (\n <Box\n data-orientation={orientation}\n sx={{ ...styles.list, ...(horizontal ? styles.listHorizontal : null) }}\n >\n {items.map((item, index) => (\n <Box\n key={`${item.label}-${index}`}\n sx={{\n ...styles.item,\n ...(horizontal ? styles.itemHorizontal : null),\n }}\n >\n <Box\n sx={{ ...styles.gutter, width: horizontal ? undefined : gutter }}\n >\n <LegendSwatch\n shape={item.shape ?? shape}\n color={item.color}\n isStrokeColor={item.isStrokeColor ?? isStrokeColor}\n fillPattern={item.fillPattern ?? fillPattern}\n strokeStyle={item.strokeStyle ?? strokeStyle}\n size={item.size ?? DEFAULT_SWATCH_SIZE}\n />\n </Box>\n <Typography\n variant='caption'\n color='text.primary'\n sx={{\n ...styles.label,\n ...(horizontal ? styles.labelHorizontal : null),\n }}\n >\n {item.label}\n </Typography>\n {item.value != null && (\n <Typography\n className='PsLegend-value'\n variant='caption'\n color='text.secondary'\n sx={styles.value}\n >\n {item.value}\n </Typography>\n )}\n </Box>\n ))}\n </Box>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0.5,\n },\n attribute: {\n display: 'flex',\n flexDirection: 'column',\n },\n // Inline error shown when a discrete ramp's stop count is incoherent.\n error: {\n display: 'flex',\n alignItems: 'center',\n gap: 0.5,\n color: 'error.main',\n },\n // Positioning context for the avg marker; the inner bar keeps its rounded\n // clip while the line is free to overflow vertically.\n barWrap: {\n position: 'relative',\n },\n bar: {\n height: 8,\n borderRadius: '2px',\n overflow: 'hidden',\n display: 'flex',\n },\n avgLine: {\n position: 'absolute',\n top: -2,\n bottom: -2,\n width: 0,\n borderLeft: '1.5px dashed',\n borderColor: 'text.primary',\n transform: 'translateX(-50%)',\n },\n step: {\n flex: 1,\n height: '100%',\n },\n labels: {\n display: 'flex',\n justifyContent: 'space-between',\n gap: 1,\n },\n // Boundary mode: labels absolutely positioned so each centers on the line\n // between adjacent color steps. The outer two clamp inside the bar's width\n // (first left-aligned, last right-aligned) so nothing overflows the row.\n // `left`/`transform` are applied inline per label in the renderer.\n boundaryLabels: {\n position: 'relative',\n height: 16,\n },\n boundaryLabel: {\n position: 'absolute',\n top: 0,\n whiteSpace: 'nowrap',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Tooltip, Typography } from '@mui/material'\nimport { ErrorOutline as ErrorIcon } from '@mui/icons-material'\nimport { styles } from './styles'\nimport { DEFAULT_LEGEND_LABELS, type LegendLabels } from '../../provider/labels'\nimport type { LegendRampVariable } from '../../stores'\n\nexport interface LegendRampUIProps {\n data: LegendRampVariable\n /** Override the renderer's user-facing strings. */\n labels?: Pick<LegendLabels, 'colorBasedOn' | 'colorGradient'>\n}\n\n/**\n * Horizontal position (0–100) of `avg` on the bar — linear between the first\n * and last stop values, clamped to the edges. `null` when there's no scale\n * (fewer than 2 stops or a zero-width range).\n */\nfunction avgPercent(data: LegendRampVariable): number | null {\n const { avg, stops } = data\n if (avg == null || stops.length < 2) return null\n const v0 = stops[0]!.value\n const vn = stops[stops.length - 1]!.value\n if (v0 === vn) return null\n const pct = ((avg - v0) / (vn - v0)) * 100\n return Math.min(100, Math.max(0, pct))\n}\n\n/**\n * Color-ramp legend. `colors` and `stops` are both ordered low→high and are\n * never reversed, so step colors and their labels stay aligned.\n *\n * Continuous mode renders a gradient with the endpoint labels. Discrete mode\n * **requires `stops.length === colors.length + 1`** — stops are the boundaries\n * between color steps (including both outer edges) and each label is centered\n * on its boundary line. A discrete ramp with any other stop count is an\n * incoherent state and renders a compact inline error instead of the bar.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendRampUI({\n data,\n labels = DEFAULT_LEGEND_LABELS,\n}: LegendRampUIProps) {\n const { colors, stops, isContinuous, attribute, formatValue = String } = data\n const avgPct = avgPercent(data)\n\n const first = stops[0]\n const last = stops[stops.length - 1]\n const gradient = `linear-gradient(90deg, ${colors.join(', ')})`\n\n // Discrete ramps need one stop per color boundary (colors.length + 1).\n // `isBoundary` is therefore equivalent to \"valid discrete\".\n const isBoundary = !isContinuous && stops.length === colors.length + 1\n const invalidDiscrete = !isContinuous && !isBoundary\n\n // Boundary range for assistive tech (valid discrete only reaches here).\n const stepAriaLabel = (index: number): string =>\n `${stops[index]?.label ?? ''} – ${stops[index + 1]?.label ?? ''}`\n\n const attributeHeader = attribute && (\n <Box sx={styles.attribute}>\n <Typography variant='overline' color='text.secondary'>\n {labels.colorBasedOn}\n </Typography>\n <Typography variant='caption' color='text.primary'>\n {attribute}\n </Typography>\n </Box>\n )\n\n if (invalidDiscrete) {\n return (\n <Box sx={styles.container}>\n {attributeHeader}\n <Box sx={styles.error}>\n <ErrorIcon fontSize='small' />\n <Typography variant='caption' color='error'>\n {`Discrete ramp needs ${colors.length + 1} stops (one per color boundary) but got ${stops.length}.`}\n </Typography>\n </Box>\n </Box>\n )\n }\n\n return (\n <Box sx={styles.container}>\n {attributeHeader}\n\n <Box sx={styles.barWrap}>\n <Box sx={styles.bar}>\n {isContinuous ? (\n <Box\n role='img'\n aria-label={labels.colorGradient}\n sx={{ width: '100%', height: '100%', background: gradient }}\n />\n ) : (\n colors.map((color, index) => (\n <Box\n key={index}\n role='img'\n aria-label={stepAriaLabel(index)}\n sx={{ ...styles.step, backgroundColor: color }}\n />\n ))\n )}\n </Box>\n\n {avgPct != null && data.avg != null && (\n <Tooltip title={formatValue(data.avg)} placement='top' arrow>\n {/* Inline style: per-instance dynamic value, no emotion class churn. */}\n <Box sx={styles.avgLine} style={{ left: `${avgPct}%` }} />\n </Tooltip>\n )}\n </Box>\n\n {isBoundary ? (\n <Box sx={styles.boundaryLabels}>\n {stops.map((stop, index) => {\n // Interior labels center on their boundary line; the outer two\n // clamp inside the bar (first left-aligned, last right-aligned)\n // so the row never overflows.\n const isLast = index === stops.length - 1\n const transform =\n index === 0\n ? undefined\n : isLast\n ? 'translateX(-100%)'\n : 'translateX(-50%)'\n return (\n <Typography\n key={`${stop.label}-${index}`}\n variant='overline'\n color='text.secondary'\n sx={styles.boundaryLabel}\n style={{\n left: `${(index / colors.length) * 100}%`,\n transform,\n }}\n >\n {stop.label}\n </Typography>\n )\n })}\n </Box>\n ) : (\n // Continuous gradients show only the range endpoints.\n <Box sx={styles.labels}>\n <Typography variant='overline' color='text.secondary'>\n {first?.label}\n </Typography>\n <Typography variant='overline' color='text.secondary'>\n {last?.label}\n </Typography>\n </Box>\n )}\n </Box>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n },\n attribute: {\n display: 'flex',\n flexDirection: 'column',\n },\n body: {\n display: 'flex',\n alignItems: 'flex-end',\n gap: 2,\n paddingTop: 0.5,\n },\n circles: {\n position: 'relative',\n flexShrink: 0,\n },\n // All circles share the bottom and right edges (anchored bottom-right), so\n // they nest along the diagonal — largest fanning up-left, smallest in the\n // bottom-right. Every circle has the SAME opaque fill, so overlaps don't\n // compound (uniform colour) while the borders still read as nested rings.\n circle: {\n position: 'absolute',\n right: 0,\n bottom: 0,\n borderRadius: '50%',\n backgroundColor: 'grey.50',\n border: '1px solid',\n borderColor: 'grey.100',\n boxSizing: 'border-box',\n },\n labels: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import type { ReactNode } from 'react'\nimport { Box, Typography } from '@mui/material'\nimport { styles } from './styles'\nimport { DEFAULT_LEGEND_LABELS, type LegendLabels } from '../../provider/labels'\nimport type { LegendProportionVariable } from '../../stores'\n\nexport interface LegendProportionUIProps {\n data: LegendProportionVariable\n /** Override the renderer's user-facing strings. */\n labels?: Pick<LegendLabels, 'radiusRangeBy' | 'maxPrefix' | 'minPrefix'>\n}\n\nconst MAX_DIAMETER = 72\nconst RATIO_FLOOR = 0.3\nconst MIN_STEPS = 2\nconst MAX_STEPS = 4\n\n/**\n * Value breaks, largest→smallest. Explicit `stops` (≥2 entries) win, capped at\n * the 4 largest; otherwise breaks are derived evenly from `min`/`max` over\n * `steps` clamped to 2–4. Circles map 1:1 to the breaks.\n */\nfunction resolveBreaks(data: LegendProportionVariable): number[] {\n const explicit = (data.stops ?? []).filter((n) => Number.isFinite(n))\n if (explicit.length >= MIN_STEPS) {\n return explicit.sort((a, b) => b - a).slice(0, MAX_STEPS)\n }\n const { min, max } = data\n if (min === max) return [max]\n const steps = Math.min(\n MAX_STEPS,\n Math.max(MIN_STEPS, data.steps ?? MAX_STEPS),\n )\n return Array.from(\n { length: steps },\n (_, i) => max - ((max - min) * i) / (steps - 1),\n )\n}\n\n/** Decorative nested-circle diameter for circle `i` of `n` (i=0 outermost). */\nfunction diameterFor(i: number, n: number): number {\n if (n <= 1) return MAX_DIAMETER\n const ratio = 1 - (1 - RATIO_FLOOR) * (i / (n - 1))\n return MAX_DIAMETER * ratio\n}\n\n/**\n * Proportional-symbol legend — a stack of decorative nested circles with the\n * value breaks labelled beside them (largest = MAX, smallest = MIN). Circle\n * sizes are fixed/decorative, not value-derived, so the legend stays readable\n * across very wide ranges.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendProportionUI({\n data,\n labels = DEFAULT_LEGEND_LABELS,\n}: LegendProportionUIProps) {\n const { attribute, formatValue = String } = data\n const breaks = resolveBreaks(data)\n const n = breaks.length\n\n const labelFor = (value: number, i: number): ReactNode => {\n const formatted = formatValue(value)\n if (n <= 1) return formatted\n if (i === 0)\n return (\n <>\n {labels.maxPrefix}\n {formatted}\n </>\n )\n if (i === n - 1)\n return (\n <>\n {labels.minPrefix}\n {formatted}\n </>\n )\n return formatted\n }\n\n return (\n <Box sx={styles.root}>\n {attribute && (\n <Box sx={styles.attribute}>\n <Typography variant='overline' color='text.secondary'>\n {labels.radiusRangeBy}\n </Typography>\n <Typography variant='caption' color='text.primary'>\n {attribute}\n </Typography>\n </Box>\n )}\n\n <Box sx={styles.body}>\n <Box\n sx={{ ...styles.circles, width: MAX_DIAMETER, height: MAX_DIAMETER }}\n >\n {breaks.map((_, i) => {\n const diameter = diameterFor(i, n)\n return (\n <Box\n key={i}\n aria-hidden\n sx={{ ...styles.circle, width: diameter, height: diameter }}\n />\n )\n })}\n </Box>\n\n <Box sx={{ ...styles.labels, height: MAX_DIAMETER }}>\n {breaks.map((value, i) => (\n <Typography key={i} variant='caption' color='text.secondary'>\n {labelFor(value, i)}\n </Typography>\n ))}\n </Box>\n </Box>\n </Box>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0.5,\n // Values are hidden until the legend content is hovered (or keyboard-\n // focused). On hover-incapable (touch) devices they're always visible —\n // tap-:hover is unreliable on non-interactive elements.\n '&:hover .PsLegend-value, &:focus-within .PsLegend-value': {\n opacity: 1,\n },\n '@media (hover: none)': {\n '& .PsLegend-value': { opacity: 1 },\n },\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n },\n icon: {\n flexShrink: 0,\n width: 16,\n height: 16,\n objectFit: 'contain',\n },\n label: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n value: {\n flexShrink: 0,\n opacity: 0,\n transition: 'opacity 120ms',\n },\n // ─── Horizontal orientation modifiers (spread over the vertical base) ───\n listHorizontal: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n columnGap: 2,\n rowGap: 0.5,\n },\n itemHorizontal: {\n gap: 0.5,\n },\n labelHorizontal: {\n flex: '0 0 auto',\n overflow: 'visible',\n textOverflow: 'clip',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Typography } from '@mui/material'\nimport { styles } from './styles'\nimport type { LegendIconVariable } from '../../stores'\n\nexport interface LegendIconUIProps {\n data: LegendIconVariable\n}\n\n/**\n * Icon legend — a list of icon images with labels (and optional values).\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendIconUI({ data }: LegendIconUIProps) {\n const orientation = data.orientation ?? 'vertical'\n const horizontal = orientation === 'horizontal'\n\n return (\n <Box\n data-orientation={orientation}\n sx={{ ...styles.list, ...(horizontal ? styles.listHorizontal : null) }}\n >\n {data.items.map((item, index) => (\n <Box\n key={`${item.label}-${index}`}\n sx={{\n ...styles.item,\n ...(horizontal ? styles.itemHorizontal : null),\n }}\n >\n <Box component='img' src={item.icon} alt='' sx={styles.icon} />\n <Typography\n variant='caption'\n color='text.primary'\n sx={{\n ...styles.label,\n ...(horizontal ? styles.labelHorizontal : null),\n }}\n >\n {item.label}\n </Typography>\n {item.value != null && (\n <Typography\n className='PsLegend-value'\n variant='caption'\n color='text.secondary'\n sx={styles.value}\n >\n {item.value}\n </Typography>\n )}\n </Box>\n ))}\n </Box>\n )\n}\n","import { LegendCategoryUI } from '../legend-category/legend-category-ui'\nimport { LegendRampUI } from '../legend-ramp/legend-ramp-ui'\nimport { LegendProportionUI } from '../legend-proportion/legend-proportion-ui'\nimport { LegendIconUI } from '../legend-icon/legend-icon-ui'\nimport type { LegendLabels } from '../../provider/labels'\nimport type { LegendVariable } from '../../stores'\n\nexport interface LegendItemUIProps {\n data: LegendVariable\n /** Forwarded to the renderers that show text (ramp header, proportion labels). */\n labels?: Pick<\n LegendLabels,\n | 'colorBasedOn'\n | 'colorGradient'\n | 'radiusRangeBy'\n | 'maxPrefix'\n | 'minPrefix'\n >\n}\n\n/**\n * Dispatches to the matching pure renderer based on the discriminated\n * `variables.type`. Adding a new legend type is localized to this switch.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendItemUI({ data, labels }: LegendItemUIProps) {\n switch (data.type) {\n case 'category':\n return <LegendCategoryUI data={data} />\n case 'ramp':\n return <LegendRampUI data={data} labels={labels} />\n case 'proportion':\n return <LegendProportionUI data={data} labels={labels} />\n case 'icon':\n return <LegendIconUI data={data} />\n default: {\n // Exhaustiveness guard — a new variant must be handled above.\n const _exhaustive: never = data\n return _exhaustive\n }\n }\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n // Figma: stacked variable sections sit ~16px apart (wider than the row\n // content's 8px block gap).\n stack: {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport { useLegendId, useLegendShallow } from '../../stores'\nimport { useLegendConfig } from '../../provider'\nimport { useLegendRow } from '../contexts'\nimport { LegendItemUI } from './legend-item-ui'\nimport { styles } from './styles'\n\n/**\n * Store-connected item renderer — reads the layer's `variables` from the\n * enclosing `Legend.Row` context (plus the Provider's labels) and stacks one\n * pure renderer per variable, top-to-bottom with the design's 16px section\n * gap. Use `Legend.ItemUI` directly for store-free, single-variable\n * composition.\n *\n * @experimental This API is new and may change in a future release.\n */\nexport function LegendItem() {\n const id = useLegendId()\n const row = useLegendRow()\n const variables = useLegendShallow(id, (s) =>\n row ? s.layers[row.layerId]?.variables : undefined,\n )\n const { labels } = useLegendConfig()\n\n if (!variables || variables.length === 0) return null\n\n return (\n <Box sx={styles.stack}>\n {variables.map((variable, index) => (\n <LegendItemUI key={index} data={variable} labels={labels} />\n ))}\n </Box>\n )\n}\n","// ─── Internal imports (used to assemble the curated `Legend` const) ─────────\nimport { LegendProvider } from './provider/legend-provider'\nimport { LegendGroup } from './components/legend-group/legend-group'\nimport { LegendRow } from './components/legend-row/legend-row'\nimport { LegendActions } from './components/legend-actions/legend-actions'\nimport { LegendVisibilityToggle } from './components/legend-visibility-toggle/legend-visibility-toggle'\nimport { LegendRowMenu } from './components/legend-row-menu/legend-row-menu'\nimport { LegendZoomTo } from './components/legend-row-menu/legend-zoom-to'\nimport { LegendOpacity } from './components/legend-opacity/legend-opacity'\nimport { LegendConfigSelect } from './components/legend-config-select/legend-config-select'\nimport { LegendItem } from './components/legend-item/legend-item'\nimport { LegendItemUI } from './components/legend-item/legend-item-ui'\nimport { LegendSwatch } from './components/legend-swatch/legend-swatch'\nimport { LegendCategoryUI } from './components/legend-category/legend-category-ui'\nimport { LegendRampUI } from './components/legend-ramp/legend-ramp-ui'\nimport { LegendProportionUI } from './components/legend-proportion/legend-proportion-ui'\nimport { LegendIconUI } from './components/legend-icon/legend-icon-ui'\n\n/**\n * Curated namespace export — the entry point to the legend module.\n *\n * Composable, widgets-v2 style: the lib ships wrapper shells + standalone\n * store-connected actions, and the **app mounts the legend** in its own\n * chrome (panel/drawer/sidebar). `Legend.Row`/`Legend.Group` partition their\n * children — `<Legend.Actions>` renders in the sticky header (hover-fade),\n * everything else in the collapsible body.\n *\n * ```tsx\n * import { Legend } from '@carto/ps-react-ui/legend'\n *\n * <Legend.Provider id='map-legend' layers={layers} groups={groups}>\n * <Legend.Group groupId='demographics'>\n * <Legend.Actions>\n * <Legend.VisibilityToggle /> // tri-state group eye\n * </Legend.Actions>\n * <Legend.Row layerId='income'>\n * // Actions read L→R: options · opacity · visibility\n * <Legend.Actions>\n * <Legend.RowMenu>\n * <Legend.ZoomTo onZoomTo={zoomTo} />\n * </Legend.RowMenu>\n * <Legend.Opacity.Trigger />\n * <Legend.VisibilityToggle /> // layer eye\n * </Legend.Actions>\n * <Legend.ConfigSelect />\n * <Legend.Item />\n * <Legend.Opacity.Popover /> // anchors to the row header\n * </Legend.Row>\n * </Legend.Group>\n * </Legend.Provider>\n * ```\n *\n * @experimental This API is new and may change in a future release.\n */\nexport const Legend = {\n // Composition shell\n Provider: LegendProvider,\n Group: LegendGroup,\n Row: LegendRow,\n Actions: LegendActions,\n\n // Store-connected actions & controls (context-driven)\n VisibilityToggle: LegendVisibilityToggle,\n RowMenu: LegendRowMenu,\n ZoomTo: LegendZoomTo,\n Opacity: LegendOpacity,\n ConfigSelect: LegendConfigSelect,\n Item: LegendItem,\n\n // Pure UI\n ItemUI: LegendItemUI,\n Swatch: LegendSwatch,\n CategoryUI: LegendCategoryUI,\n RampUI: LegendRampUI,\n ProportionUI: LegendProportionUI,\n IconUI: LegendIconUI,\n} as const\n\n// ─── Labels ────────────────────────────────────────────────────────────────\n// Exported separately so consumers can build customized label sets via spread.\nexport { DEFAULT_LEGEND_LABELS } from './provider'\n\n// ─── Types ─────────────────────────────────────────────────────────────────\nexport type { LegendProviderProps, LegendLabels } from './provider'\nexport type { LegendGroupProps } from './components/legend-group/legend-group'\nexport type { LegendRowProps } from './components/legend-row/legend-row'\nexport type { LegendActionsProps } from './components/legend-actions/legend-actions'\nexport type { LegendVisibilityToggleProps } from './components/legend-visibility-toggle/legend-visibility-toggle'\nexport type { LegendRowMenuProps } from './components/legend-row-menu/legend-row-menu'\nexport type { LegendZoomToProps } from './components/legend-row-menu/legend-zoom-to'\nexport type { LegendRowContextValue } from './components/contexts'\nexport type { LegendItemUIProps } from './components/legend-item/legend-item-ui'\nexport type { LegendSwatchProps } from './components/legend-swatch/legend-swatch'\nexport type { LegendCategoryUIProps } from './components/legend-category/legend-category-ui'\nexport type { LegendRampUIProps } from './components/legend-ramp/legend-ramp-ui'\nexport type { LegendProportionUIProps } from './components/legend-proportion/legend-proportion-ui'\nexport type { LegendIconUIProps } from './components/legend-icon/legend-icon-ui'\n\n// Store entity & variable types (re-exported for convenience; full store API\n// lives at `@carto/ps-react-ui/legend/stores`).\nexport type {\n LegendPosition,\n LegendVisibility,\n LegendOrientation,\n LegendSwatchShape,\n LegendFillPattern,\n LegendStrokeStyle,\n LegendVariable,\n LegendCategoryItem,\n LegendCategoryVariable,\n LegendRampStop,\n LegendRampVariable,\n LegendProportionVariable,\n LegendIconItem,\n LegendIconVariable,\n LegendConfigSection,\n LegendLayer,\n LegendGroup as LegendGroupModel,\n LegendLayerInput,\n LegendGroupInput,\n} from './stores'\n"],"names":["DEFAULT_LEGEND_LABELS","expandLayer","collapseLayer","hideLayer","showLayer","layerOptions","zoomTo","hideGroup","showGroup","expandGroup","collapseGroup","opacity","attribute","radiusRangeBy","colorBasedOn","colorGradient","maxPrefix","minPrefix","LegendConfigContext","createContext","labels","useLegendConfig","useContext","LegendProvider","t0","$","_c","id","layers","groups","keepAlive","t1","children","undefined","t2","hasLegendStore","getLegendStore","created","createLegendStore","setLegendStoreEntry","store","useState","t3","t4","registerLegendStore","unregisterLegendStore","useLayoutEffect","t5","t6","getState","_sync","t7","t8","config","t9","t10","LegendContext","LegendRowContext","useLegendRow","LegendGroupContext","useLegendGroupId","styles","fadeGroup","display","alignItems","gap","LegendActions","Box","partitionLegendChildren","actions","body","child","Children","toArray","isSlot","push","node","type","isValidElement","LEGEND_GROUP_HEADER_HEIGHT","group","flexDirection","borderTop","borderColor","transition","transitions","create","duration","standard","easing","easeInOut","header","padding","spacing","minHeight","borderBottom","position","top","zIndex","backgroundColor","groupIcon","color","label","flex","minWidth","overflow","textOverflow","whiteSpace","flexShrink","LegendGroup","groupId","useLegendId","s","useLegendShallow","setGroupCollapsed","_temp","Symbol","for","jsx","GroupIcon","ref","Typography","SmartTooltip","collapsed","ExpandMoreIcon","ExpandLessIcon","IconButton","t11","t12","jsxs","t13","t14","Collapse","t15","t16","s_0","row","titleBox","titleLine","title","content","footer","dimmed","LegendRow","layerId","layer","setCollapsed","headerEl","setHeaderEl","opacityOpen","setOpacityOpen","rowContext","effectivelyCollapsed","visible","stickyTop","name","subtitle","t17","t18","t19","t20","helperText","t21","t22","t23","VisibilityIndeterminateIcon","createSvgIcon","ICONS","VisibilityIcon","hidden","VisibilityOffIcon","mixed","LegendVisibilityToggle","visibility","onToggle","configLabels","controlled","layerVisible","useLegendStore","selectGroupVisibility","groupVisibility","setVisibility","setGroupVisibility","_temp2","console","warn","useEffect","state","handleToggle","labelPair","EyeIcon","s_2","s_1","LegendRowMenu","anchorEl","setAnchorEl","open","Boolean","e","stopPropagation","currentTarget","handleOpen","handleClose","MoreVertIcon","Menu","LegendZoomTo","onZoomTo","ListItemIcon","ZoomIcon","MenuItem","triggerWrap","popover","width","slider","input","textAlign","clampPercent","value","Math","min","max","round","OpacityTrigger","OpacityIcon","Tooltip","OpacityPopover","setOpacity","dragPercent","setDragPercent","draft","setDraft","percent","clamped","commitPercent","raw","trim","parsed","Number","isFinite","clamped_0","String","handleInputChange","vertical","horizontal","clientWidth","paper","sx","_","value_0","__0","value_1","Slider","event","target","InputAdornment","inputMode","OutlinedInput","Popover","event_0","key","blur","LegendOpacity","Trigger","trigger","justifyContent","border","borderRadius","chevron","chevronOpen","transform","sectionTitle","lineHeight","option","LegendConfigSelect","sections","setSectionValue","length","active","showTitles","ArrowDropDownIcon","ButtonBase","section","options","map","list","item","gutter","listHorizontal","flexWrap","columnGap","rowGap","itemHorizontal","labelHorizontal","DEFAULT_SWATCH_SIZE","STROKE_WIDTH","LINE_WIDTH","HAIRLINE","borderDash","style","dash","lineDash","patternTile","pattern","line","d","size","LegendSwatch","shape","isStrokeColor","fillPattern","strokeStyle","patternId","useId","inset","usePattern","tile","isCorners","dash_0","round_0","stroke","strokeWidth","strokeDasharray","strokeLinecap","commonStroke","fill","CornerMarks","arm","o","props","Fragment","MIN_GUTTER","LegendCategoryUI","data","items","orientation","reduce","index","m","it","container","error","barWrap","bar","height","avgLine","bottom","borderLeft","step","boundaryLabels","boundaryLabel","avgPercent","avg","stops","v0","vn","pct","LegendRampUI","colors","isContinuous","formatValue","avgPct","first","last","join","gradient","isBoundary","invalidDiscrete","stepAriaLabel","attributeHeader","ErrorIcon","background","index_0","left","stop","index_1","isLast","root","paddingTop","circles","circle","right","boxSizing","MAX_DIAMETER","RATIO_FLOOR","MIN_STEPS","MAX_STEPS","resolveBreaks","explicit","filter","n","sort","a","b","slice","steps","Array","from","i","diameterFor","ratio","LegendProportionUI","T0","T1","T2","breaks","formatted","labelFor","i_0","diameter","i_1","icon","objectFit","LegendIconUI","LegendItemUI","stack","LegendItem","variables","variable","Legend","Provider","Group","Row","Actions","VisibilityToggle","RowMenu","ZoomTo","Opacity","ConfigSelect","Item","ItemUI","Swatch","CategoryUI","RampUI","ProportionUI","IconUI"],"mappings":"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"}
|