/** * Photon Grid base styles — cells section. * * Auto-split from base-styles.ts. Concatenated back (in order) by * base-styles.ts; edit here, not there. Order is preserved because CSS * cascade depends on it. */ export declare const cellsCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Cells \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-cell {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n min-width: var(--pg-sizing-column-min-width, 40px);\n border-right: 1px solid transparent;\n padding: 0;\n overflow: hidden;\n position: relative;\n}\n.pg-cell--v-border { border-right-color: var(--pg-colors-border, #e2e8f0); }\n.pg-cell:last-child { border-right: none; }\n.pg-cell--align-right { justify-content: flex-end; }\n.pg-cell--align-center { justify-content: center; }\n.pg-cell--align-right .pg-cell__inner { text-align: right; }\n.pg-cell--align-center .pg-cell__inner { text-align: center; }\n\n/* \u2500\u2500\u2500 Cell selection (CSS-based, replaces canvas) \u2500\u2500\u2500 */\n/* Suppress the browser's native focus ring \u2014 the grid uses its own blue\n box-shadow indicator on .pg-cell--active-cell instead. */\n.pg-cell { user-select: none; outline: none; }\n\n/*\n * Range selection \u2014 edge borders drawn via ::after so CSS border corners\n * always connect cleanly (no box-shadow joining artefacts).\n * The JS engine adds sel-top/right/bottom/left only on cells that sit on\n * the outer edge of the range; interior cells carry no edge classes.\n */\n.pg-cell--in-selection {\n background-color: var(--pg-colors-selection-background, aliceblue) !important;\n position: relative;\n z-index: 1;\n}\n.pg-cell--in-selection::after {\n content: '';\n position: absolute;\n inset: 0;\n border: 0 solid var(--pg-colors-primary, #2563eb);\n pointer-events: none;\n}\n.pg-cell--sel-top::after { border-top-width: 1px; }\n.pg-cell--sel-bottom::after { border-bottom-width: 1px; }\n.pg-cell--sel-left::after { border-left-width: 1px; }\n.pg-cell--sel-right::after { border-right-width: 1px; }\n\n/* Active (focused) cell \u2014 solid 2px inset border, no background */\n.pg-cell--active-cell {\n background-color: transparent !important;\n box-shadow: inset 0 0 0 2px var(--pg-colors-primary, #2563eb) !important;\n position: relative;\n z-index: 2;\n outline: none;\n}\n/* Suppress the ::after edge overlay only when the active cell is NOT inside a selection */\n.pg-cell--active-cell:not(.pg-cell--in-selection)::after { content: none; }\n\n/* Active cell inside a range \u2014 selection wins entirely: no 2px border, full selection look */\n.pg-cell--in-selection.pg-cell--active-cell {\n background-color: var(--pg-colors-selection-background, aliceblue) !important;\n box-shadow: none !important;\n}\n\n/*\n * Dark-mode overrides \u2014 COLORS ONLY.\n *\n * The selection outline and the active-cell border reuse the exact same\n * mechanism as light mode (range edges via ::after, lone active cell via the\n * inset box-shadow above). Dark mode must never introduce a second, parallel\n * border system: an earlier attempt drew the active cell's edges with an\n * offset box-shadow while ::after still drew the range outline underneath,\n * so the active/last-selected cell rendered every shared edge twice. Keeping\n * dark identical to light \u2014 only swapping the fill/border colors \u2014 guarantees\n * a single border per edge in both modes.\n */\n[data-pg-mode=\"dark\"] .pg-cell--in-selection {\n background-color: rgba(37,99,235,0.18) !important;\n}\n/* Lone active cell (focused, no range): border only, NO selection fill\n (transparent background is inherited from the base .pg-cell--active-cell\n rule). Scoped to :not(.pg-cell--in-selection) so it never overrides the\n box-shadow:none on an active cell that sits inside a range \u2014 otherwise\n this rule (equal specificity, later source order) would win and paint a\n full box on the last-selected cell instead of only its range-edge sides. */\n[data-pg-mode=\"dark\"] .pg-cell--active-cell:not(.pg-cell--in-selection) {\n box-shadow: inset 0 0 0 2px var(--pg-colors-primary, #60a5fa) !important;\n}\n/* Active cell inside a range: box-shadow:none is inherited from the base\n rule; only the dark selection fill differs. The ::after range outline is\n the sole border source, exactly as in light mode. */\n[data-pg-mode=\"dark\"] .pg-cell--in-selection.pg-cell--active-cell {\n background-color: rgba(37,99,235,0.18) !important;\n}\n\n/*\n * Single-cell selection (a 1\u00D71 range = a plain focus click). Rendered as a\n * lone focus cell: a 2px border only, NO selection fill and NO ::after range\n * outline. The engine tags the sole selected cell with\n * .pg-cell--single-cell-selection (see CellSelectionEngine.applySelectionClasses).\n *\n * These rules carry three selection classes (specificity 0,3,0) and sit after\n * every light AND dark selection rule above, so they win the cascade over both\n * the base fill rule and the dark background override without !important games.\n */\n.pg-cell--single-cell-selection.pg-cell--in-selection.pg-cell--active-cell {\n background-color: transparent !important;\n box-shadow: inset 0 0 0 1px var(--pg-colors-primary, #2563eb) !important;\n}\n.pg-cell--single-cell-selection.pg-cell--in-selection.pg-cell--active-cell::after {\n content: none;\n}\n[data-pg-mode=\"dark\"] .pg-cell--single-cell-selection.pg-cell--in-selection.pg-cell--active-cell {\n background-color: transparent !important;\n box-shadow: inset 0 0 0 1px var(--pg-colors-primary, #60a5fa) !important;\n}\n\n/* \u2500\u2500\u2500 Group aggregate cells \u2500\u2500\u2500 */\n/*\n * Aggregate values are displayed inside .pg-cell--agg cells that sit directly\n * under their column headers, aligned with normal data-row cells via the same\n * [data-col-id] width rules managed by ColumnStyleManager.\n */\n.pg-cell--agg {\n color: var(--pg-colors-agg-text, var(--pg-colors-text-secondary, #475569));\n font-style: italic;\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n}\n[data-pg-mode=\"dark\"] .pg-cell--agg {\n color: var(--pg-colors-agg-text, var(--pg-colors-text-secondary, #94a3b8));\n}\n\n/* \u2500\u2500\u2500 Copy / Cut flash feedback \u2500\u2500\u2500 */\n/*\n * background-color: !important on pg-cell--in-selection blocks keyframe bg changes.\n * Use a ::after overlay instead \u2014 it's a separate layer, no !important conflict.\n */\n@keyframes pg-copy-flash-overlay {\n 0% { opacity: 0; }\n 15% { opacity: 1; }\n 100% { opacity: 0; }\n}\n@keyframes pg-cut-flash-overlay {\n 0% { opacity: 0; }\n 15% { opacity: 1; }\n 100% { opacity: 0; }\n}\n/*\n * Flash overlay uses ::before so it never conflicts with the ::after\n * pseudo-element that draws the selection edge borders.\n */\n.pg-cell--copy-flash::before,\n.pg-cell--cut-flash::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 5;\n}\n.pg-cell--copy-flash::before {\n background: rgba(59, 130, 246, 0.45);\n animation: pg-copy-flash-overlay 0.75s ease-out forwards;\n}\n.pg-cell--cut-flash::before {\n background: rgba(239, 68, 68, 0.45);\n animation: pg-cut-flash-overlay 0.75s ease-out forwards;\n}\n/* Dark mode uses stronger overlay */\n[data-pg-mode=\"dark\"] .pg-cell--copy-flash::before {\n background: rgba(99, 165, 253, 0.5);\n}\n[data-pg-mode=\"dark\"] .pg-cell--cut-flash::before {\n background: rgba(252, 100, 100, 0.5);\n}\n\n/* \u2500\u2500\u2500 Fill success flash \u2500\u2500\u2500 */\n/*\n * Applied to the newly filled cells after a fill-handle drag completes.\n * Uses ::before (same as copy/cut flash) so it never conflicts with the\n * selection edge border drawn on ::after.\n */\n@keyframes pg-fill-flash-overlay {\n 0% { opacity: 0; }\n 20% { opacity: 1; }\n 100% { opacity: 0; }\n}\n.pg-cell--fill-flash::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 5;\n background: rgba(34, 197, 94, 0.45);\n animation: pg-fill-flash-overlay 0.75s ease-out forwards;\n}\n[data-pg-mode=\"dark\"] .pg-cell--fill-flash::before {\n background: rgba(74, 222, 128, 0.5);\n}\n\n/* \u2500\u2500\u2500 Programmatic cell flash (GridApi.flashCells) \u2500\u2500\u2500 */\n/*\n * A neutral highlight pulse used to draw attention to cells that changed via\n * the public API (e.g. after a data refresh). Uses ::before like the other\n * flashes so it never conflicts with the selection border drawn on ::after.\n */\n.pg-cell--flash::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 5;\n background: rgba(59, 130, 246, 0.40);\n animation: pg-fill-flash-overlay 0.75s ease-out forwards;\n}\n[data-pg-mode=\"dark\"] .pg-cell--flash::before {\n background: rgba(96, 165, 250, 0.45);\n}\n\n/* \u2500\u2500\u2500 Fill handle \u2500\u2500\u2500 */\n/*\n * The fill handle is a small drag target at the bottom-right corner of the\n * primary selection range. It lives inside the corner cell as an absolutely-\n * positioned child so it scrolls with the grid naturally.\n *\n * pg-cell--has-fill-handle lets the handle extend 4 px past the cell edge\n * (standard AG Grid behaviour) by lifting overflow:hidden on that one cell.\n *\n * Dragging from the handle copies the source range into the dragged area in\n * one direction at a time; a dashed overlay (pg-cell--fill-preview) previews\n * the fill area before the mouse button is released.\n */\n.pg-cell--has-fill-handle {\n overflow: visible !important;\n}\n.pg-fill-handle {\n position: absolute;\n right: 0px;\n bottom: 0px;\n width: 6px;\n height: 6px;\n box-sizing: border-box;\n background-color: var(--pg-colors-primary, #2563eb);\n cursor: crosshair;\n z-index: 10;\n pointer-events: auto;\n user-select: none;\n}\n\n/* \u2500\u2500\u2500 Fill preview \u2014 dashed border on cells being hovered during fill drag \u2500\u2500\u2500 */\n.pg-cell--fill-preview {\n background-color: var(--pg-colors-selection-background, aliceblue) !important;\n position: relative;\n z-index: 1;\n}\n/*\n * The fill-preview ::after uses a dashed border (vs the solid selection border)\n * to clearly distinguish \"about to be filled\" from \"already selected.\"\n * These classes are orthogonal to sel-top/bottom/left/right \u2014 fill-preview\n * cells are never pg-cell--in-selection, so there is no ::after conflict.\n */\n.pg-cell--fill-preview::after {\n content: '';\n position: absolute;\n inset: 0;\n border: 0 dashed var(--pg-colors-primary, #2563eb);\n pointer-events: none;\n}\n.pg-cell--fp-top::after { border-top-width: 1px; }\n.pg-cell--fp-bottom::after { border-bottom-width: 1px; }\n.pg-cell--fp-left::after { border-left-width: 1px; }\n.pg-cell--fp-right::after { border-right-width: 1px; }\n\n[data-pg-mode=\"dark\"] .pg-cell--fill-preview {\n background-color: rgba(37, 99, 235, 0.12) !important;\n}\n\n"; //# sourceMappingURL=cells.css.d.ts.map