snice 7.5.0 → 7.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/react/SniceProvider.js +1 -1
- package/adapters/react/SniceRouter.js +1 -1
- package/adapters/react/avatar.d.ts +1 -0
- package/adapters/react/avatar.d.ts.map +1 -1
- package/adapters/react/avatar.js +1 -1
- package/adapters/react/avatar.js.map +1 -1
- package/adapters/react/avatar.tsx +2 -1
- package/adapters/react/calendar.d.ts +4 -0
- package/adapters/react/calendar.d.ts.map +1 -1
- package/adapters/react/calendar.js +1 -1
- package/adapters/react/calendar.js.map +1 -1
- package/adapters/react/calendar.tsx +5 -1
- package/adapters/react/matchRoute.js +68 -2
- package/adapters/react/matchRoute.js.map +1 -1
- package/adapters/react/route-match.d.ts +7 -0
- package/adapters/react/useRequestHandler.js +1 -1
- package/bin/analyzer-contracts.js +60 -2
- package/bin/project-analyzer.js +1262 -118
- package/bin/snice.js +95 -5
- package/custom-elements.json +112 -0
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/action-bar/snice-action-bar.js +1 -1
- package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
- package/dist/cdn/alert/snice-alert.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
- package/dist/cdn/availability/snice-availability.js +1 -1
- package/dist/cdn/avatar/README.md +1 -1
- package/dist/cdn/avatar/snice-avatar.js +9 -3
- package/dist/cdn/avatar/snice-avatar.js.map +1 -1
- package/dist/cdn/avatar/snice-avatar.min.js +2 -2
- package/dist/cdn/avatar/snice-avatar.min.js.map +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
- package/dist/cdn/badge/snice-badge.js +1 -1
- package/dist/cdn/banner/snice-banner.js +1 -1
- package/dist/cdn/binpack/snice-binpack.js +1 -1
- package/dist/cdn/book/snice-book.js +1 -1
- package/dist/cdn/booking/snice-booking.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/cdn/button/snice-button.js +2 -2
- package/dist/cdn/button/snice-button.js.map +1 -1
- package/dist/cdn/button/snice-button.min.js +1 -1
- package/dist/cdn/button/snice-button.min.js.map +1 -1
- package/dist/cdn/calendar/README.md +2 -2
- package/dist/cdn/calendar/snice-calendar.js +562 -40
- package/dist/cdn/calendar/snice-calendar.js.map +1 -1
- package/dist/cdn/calendar/snice-calendar.min.js +28 -1
- package/dist/cdn/calendar/snice-calendar.min.js.map +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/chip/snice-chip.js +1 -1
- package/dist/cdn/code-block/snice-code-block.js +1 -1
- package/dist/cdn/color-display/snice-color-display.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.js +1 -1
- package/dist/cdn/comments/snice-comments.js +1 -1
- package/dist/cdn/countdown/snice-countdown.js +1 -1
- package/dist/cdn/cropper/snice-cropper.js +1 -1
- package/dist/cdn/data-card/snice-data-card.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/cdn/diff/snice-diff.js +1 -1
- package/dist/cdn/divider/snice-divider.js +1 -1
- package/dist/cdn/doc/snice-doc.js +1 -1
- package/dist/cdn/draw/snice-draw.js +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/estimate/snice-estimate.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.js +1 -1
- package/dist/cdn/flow/snice-flow.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.js +1 -1
- package/dist/cdn/funnel/snice-funnel.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/grid/snice-grid.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/input/snice-input.js +1 -1
- package/dist/cdn/invoice/snice-invoice.js +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/key-value/snice-key-value.js +1 -1
- package/dist/cdn/kpi/snice-kpi.js +1 -1
- package/dist/cdn/layout/snice-layout.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
- package/dist/cdn/link/snice-link.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.js +1 -1
- package/dist/cdn/list/snice-list.js +1 -1
- package/dist/cdn/location/snice-location.js +1 -1
- package/dist/cdn/login/README.md +1 -1
- package/dist/cdn/login/snice-login.js +2 -2
- package/dist/cdn/login/snice-login.js.map +1 -1
- package/dist/cdn/login/snice-login.min.js +1 -1
- package/dist/cdn/login/snice-login.min.js.map +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.js +1 -1
- package/dist/cdn/modal/snice-modal.js +1 -1
- package/dist/cdn/music-player/snice-music-player.js +1 -1
- package/dist/cdn/nav/snice-nav.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/paint/snice-paint.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
- package/dist/cdn/popover/snice-popover.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
- package/dist/cdn/product-card/snice-product-card.js +1 -1
- package/dist/cdn/progress/snice-progress.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
- package/dist/cdn/radio/snice-radio.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.js +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/receipt/snice-receipt.js +1 -1
- package/dist/cdn/recipe/snice-recipe.js +1 -1
- package/dist/cdn/runtime/README.md +2 -2
- package/dist/cdn/runtime/snice-runtime.esm.js +706 -267
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +706 -267
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
- package/dist/cdn/select/snice-select.js +3 -1
- package/dist/cdn/select/snice-select.js.map +1 -1
- package/dist/cdn/select/snice-select.min.js +2 -2
- package/dist/cdn/select/snice-select.min.js.map +1 -1
- package/dist/cdn/skeleton/snice-skeleton.js +1 -1
- package/dist/cdn/slider/snice-slider.js +1 -1
- package/dist/cdn/sortable/snice-sortable.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.js +1 -1
- package/dist/cdn/spinner/snice-spinner.js +1 -1
- package/dist/cdn/split-button/snice-split-button.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.js +1 -1
- package/dist/cdn/step-input/snice-step-input.js +1 -1
- package/dist/cdn/stepper/snice-stepper.js +1 -1
- package/dist/cdn/switch/README.md +1 -1
- package/dist/cdn/switch/snice-switch.js +8 -4
- package/dist/cdn/switch/snice-switch.js.map +1 -1
- package/dist/cdn/switch/snice-switch.min.js +8 -4
- package/dist/cdn/switch/snice-switch.min.js.map +1 -1
- package/dist/cdn/table/README.md +2 -2
- package/dist/cdn/table/snice-table.esm.js +77 -5
- package/dist/cdn/table/snice-table.esm.js.map +1 -1
- package/dist/cdn/table/snice-table.esm.min.js +68 -47
- package/dist/cdn/table/snice-table.esm.min.js.map +1 -1
- package/dist/cdn/table/snice-table.js +76 -4
- package/dist/cdn/table/snice-table.js.map +1 -1
- package/dist/cdn/table/snice-table.min.js +53 -32
- package/dist/cdn/table/snice-table.min.js.map +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tag/snice-tag.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.js +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
- package/dist/cdn/timeline/snice-timeline.js +1 -1
- package/dist/cdn/timer/snice-timer.js +1 -1
- package/dist/cdn/toast/snice-toast.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.js +1 -1
- package/dist/cdn/tree/snice-tree.js +1 -1
- package/dist/cdn/treemap/snice-treemap.js +1 -1
- package/dist/cdn/user-card/snice-user-card.js +1 -1
- package/dist/cdn/video-player/snice-video-player.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/work-order/snice-work-order.js +1 -1
- package/dist/components/avatar/snice-avatar.d.ts +1 -0
- package/dist/components/avatar/snice-avatar.js +8 -2
- package/dist/components/avatar/snice-avatar.js.map +1 -1
- package/dist/components/avatar/snice-avatar.types.d.ts +2 -0
- package/dist/components/button/snice-button.js +1 -1
- package/dist/components/button/snice-button.js.map +1 -1
- package/dist/components/calendar/snice-calendar.d.ts +38 -1
- package/dist/components/calendar/snice-calendar.js +390 -40
- package/dist/components/calendar/snice-calendar.js.map +1 -1
- package/dist/components/calendar/snice-calendar.types.d.ts +63 -0
- package/dist/components/select/snice-select.js +2 -0
- package/dist/components/select/snice-select.js.map +1 -1
- package/dist/components/switch/snice-switch.js +7 -3
- package/dist/components/switch/snice-switch.js.map +1 -1
- package/dist/components/table/snice-table.d.ts +9 -0
- package/dist/components/table/snice-table.js +72 -2
- package/dist/components/table/snice-table.js.map +1 -1
- package/dist/components/table/table-keyboard.js +1 -1
- package/dist/components/table/table-keyboard.js.map +1 -1
- package/dist/index.cjs +703 -264
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.esm.js +703 -264
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +703 -264
- package/dist/index.iife.js.map +1 -1
- package/dist/parts.d.ts +14 -4
- package/dist/react/SniceProvider.js +1 -1
- package/dist/react/SniceRouter.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/matchRoute.js +68 -2
- package/dist/react/matchRoute.js.map +1 -1
- package/dist/react/route-match.d.ts +7 -0
- package/dist/react/useRequestHandler.js +1 -1
- package/dist/render-errors.d.ts +9 -0
- package/dist/route-match.d.ts +7 -0
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/template-marker.d.ts +5 -0
- package/dist/testing-dom.cjs +1 -1
- package/dist/testing-dom.esm.js +1 -1
- package/dist/testing.d.ts +3 -0
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/dist/types/dispatch-options.d.ts +5 -4
- package/dist/types/event-timing.d.ts +7 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/on-options.d.ts +21 -6
- package/dist/utils.d.ts +3 -0
- package/docs/ai/DEVELOPMENT.md +1 -1
- package/docs/ai/api.md +7 -2
- package/docs/ai/cli.md +14 -0
- package/docs/ai/components/avatar.md +1 -0
- package/docs/ai/components/calendar.md +24 -1
- package/docs/ai/components/switch.md +3 -0
- package/docs/ai/components/table.md +1 -1
- package/docs/ai/decorators.md +3 -2
- package/docs/ai/events.md +45 -8
- package/docs/ai/rendering.md +7 -0
- package/docs/ai/routing.md +6 -1
- package/docs/ai/testing.md +17 -0
- package/docs/cli.md +19 -0
- package/docs/components/avatar.md +1 -0
- package/docs/components/calendar.md +112 -2
- package/docs/components/switch.md +7 -1
- package/docs/components/table.md +2 -1
- package/docs/events.md +90 -10
- package/docs/rendering.md +10 -0
- package/docs/routing.md +22 -1
- package/docs/testing.md +19 -0
- package/package.json +2 -2
- package/vscode.html-custom-data.json +28 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snice-table.js","sources":["../../../../components/table/snice-table.ts"],"sourcesContent":["import { element, property, query, request, dispatch, watch, render, styles, html, css, ready, dispose, on } from 'snice';\nimport '../input/snice-input';\nimport '../select/snice-select';\nimport '../button/snice-button';\nimport '../checkbox/snice-checkbox';\nimport '../modal/snice-modal';\nimport '../empty-state/snice-empty-state';\nimport './snice-cell.ts';\nimport './snice-cell-text.ts';\nimport './snice-cell-number.ts';\nimport './snice-cell-date.ts';\nimport './snice-cell-boolean.ts';\nimport './snice-cell-rating.ts';\nimport './snice-cell-progress.ts';\nimport './snice-cell-duration.ts';\nimport './snice-cell-filesize.ts';\nimport './snice-cell-sparkline.ts';\nimport './snice-cell-percentage.ts';\nimport './snice-cell-tag.ts';\nimport './snice-cell-status.ts';\nimport './snice-cell-actions.ts';\nimport './snice-cell-link.ts';\nimport './snice-cell-email.ts';\nimport './snice-cell-phone.ts';\nimport './snice-cell-color.ts';\nimport './snice-cell-location.ts';\nimport './snice-cell-json.ts';\nimport './snice-cell-currency.ts';\nimport './snice-cell-image.ts';\nimport './snice-column.ts';\nimport './snice-row.ts';\nimport { TableVirtualizer } from './table-virtualizer';\nimport { TableColumnManager } from './table-column-manager';\nimport { TableFilterEngine } from './table-filter-engine';\nimport { TableEditor } from './table-editor';\nimport type { EditorType } from './table-editor';\nimport { TableKeyboard } from './table-keyboard';\nimport { TableExport } from './table-export';\nimport { TableMasterDetail } from './table-master-detail';\nimport { TableToolbar } from './table-toolbar';\nimport { TableTreeData } from './table-tree-data';\nimport { TableGrouping } from './table-grouping';\nimport type { DisplayItem, GroupRow, AggregateRow } from './table-grouping';\nimport { TableColumnMenu } from './table-column-menu';\nimport { TableRowDnD, TableColumnDnD } from './table-row-dnd';\nimport type { FilterModel } from './table-filter-engine';\nimport type { DetailPanelOptions } from './table-master-detail';\nimport type { ToolbarOptions } from './table-toolbar';\nimport type { TreeDataOptions, TreeRow } from './table-tree-data';\nimport type { ColumnGroup } from './table-column-manager';\nimport type { ColumnDefinition, SniceTableElement, SelectionMode, ListViewRenderer } from './snice-table.types';\n\n/**\n * A single desired body row for the render-path reconciler (Task B). `key`\n * identifies the row across renders (the row-object itself for data rows, a\n * synthetic string for pinned / detail rows). `sig` captures everything about\n * the row's DOM that a data-object move can't fix by re-stamping — when it is\n * unchanged the existing element is reused. `alwaysRebuild` forces a fresh\n * element (edit-state and detail rows). `restampIndex`, when present, updates\n * the reused row's index-derived attributes after a reorder.\n */\ninterface RowEntry {\n key: unknown;\n sig: string;\n create: () => HTMLElement;\n alwaysRebuild?: boolean;\n restampIndex?: number;\n}\n\n@element('snice-table')\nexport class SniceTable extends HTMLElement implements SniceTableElement {\n\n @property({ type: Boolean, attribute: 'striped' })\n striped = false;\n\n @property({ type: Boolean, attribute: 'searchable' })\n searchable = false;\n\n @property({ type: Boolean, attribute: 'filterable' })\n filterable = false;\n\n @property({ type: Boolean, attribute: 'sortable' })\n sortable = false;\n\n @property({ type: Boolean, attribute: 'selectable' })\n selectable = false;\n\n @property({ type: Boolean, attribute: 'hoverable' })\n hoverable = true;\n\n @property({ type: Boolean, attribute: 'clickable' })\n clickable = false;\n\n @property({ type: Boolean, attribute: 'list' })\n list = false;\n\n @property({ type: Boolean, attribute: 'pagination' })\n pagination = false;\n\n @property({ attribute: 'pagination-mode' })\n paginationMode: 'client' | 'server' = 'client';\n\n @property({ type: Number, attribute: 'page-size' })\n pageSize = 10;\n\n @property({ type: Number, attribute: 'current-page' })\n currentPage = 1;\n\n @property({ type: Number, attribute: 'total-items' })\n totalItems = 0;\n\n @property({ type: Array, attribute: false })\n pageSizes: number[] = [10, 25, 50, 100];\n\n @property({ type: Number, attribute: 'search-debounce' })\n searchDebounce = 500;\n\n // C1: reactive, no attribute reflection. A post-mount assignment (or the\n // setData/setColumns aliases) re-renders through the microtask-coalesced\n // queue — see handleColumnsAssignment / handleDataAssignment.\n @property({ attribute: false })\n columns: any[] = [];\n\n @property({ attribute: false })\n data: any[] = [];\n\n /**\n * Data mode: 'local' = client-side, table owns the dataset (set via setData\n * or the `data` property; filter/sort run locally);\n * 'remote' = server-side, every filter/sort/search/page change\n * fires @request('table/data'); a @respond handler in\n * the parent controller returns the new page.\n *\n * Default is 'local'. Set `mode=\"remote\"` on the element OR assign the\n * property to opt into remote mode.\n */\n @property() mode: 'local' | 'remote' = 'local';\n\n // C1: setColumns is a thin alias over the reactive assignment — its @watch\n // resyncs the column model and coalesces the header+body render.\n setColumns(columns: any[]) {\n this.columns = columns;\n }\n\n // C1: setData is the IMPERATIVE bulk-load path. It resyncs the data model\n // (snapshot + row-index map) exactly like the reactive `table.data =` setter,\n // but does NOT eagerly re-render — the established API fills the body via an\n // explicit render (or the coalesced render from a paired setColumns). Keeping\n // the eager render off this path avoids re-warming the filtered snapshot the\n // caller may want left cold. The reactive PROPERTY (`table.data = rows`) is\n // the auto-rendering entry point.\n setData(data: any[]) {\n this.settingDataImperative = true;\n this.data = data;\n this.settingDataImperative = false;\n }\n\n @property({ type: Array, attribute: false })\n currentSort: Array<{ column: string, direction: 'asc' | 'desc' }> = [];\n\n // Don't use @property decorator to avoid auto-rendering on searchText change\n // This would cause the input to lose focus while typing\n searchText: string = '';\n\n @property({ type: String, attribute: 'selector' })\n selector: string = '';\n\n @property({ type: Array, attribute: false })\n selectorOptions: Array<{value: string, label: string}> = [];\n\n @property({ type: Boolean, attribute: 'loading' })\n loading: boolean = false;\n\n // Set when a remote-mode load fails; cleared on the next successful load.\n // Not a @property — renderBody() reads it directly, no attribute needed.\n private loadError: string | null = null;\n\n @property({ type: Boolean, attribute: 'virtualize' })\n virtualize = false;\n\n @property({ type: Number, attribute: 'row-height' })\n rowHeight = 48;\n\n @property({ type: Number, attribute: 'virtual-buffer' })\n virtualBuffer = 200;\n\n @property({ type: Boolean, attribute: 'column-resize' })\n columnResize = false;\n\n @property({ type: Boolean, attribute: 'editable' })\n editable = false;\n\n @property({ attribute: 'edit-mode' })\n editMode: 'cell' | 'row' = 'cell';\n\n @property({ attribute: 'density' })\n density: 'compact' | 'standard' | 'comfortable' = 'standard';\n\n @property({ type: Boolean, attribute: 'header-filters' })\n headerFilters = false;\n\n @property({ type: Boolean, attribute: 'quick-filter' })\n quickFilter = false;\n\n @property({ type: Boolean, attribute: 'row-reorder' })\n rowReorder = false;\n\n @property({ type: Boolean, attribute: 'column-reorder' })\n columnReorder = false;\n\n @property({ type: Boolean, attribute: 'column-menu' })\n columnMenu = false;\n\n @property({ type: Boolean, attribute: 'lazy-load' })\n lazyLoad = false;\n\n @property({ type: Number, attribute: 'lazy-load-threshold' })\n lazyLoadThreshold = 200; // px from bottom to trigger\n\n @property({ type: Array, attribute: false })\n selectedRows: number[] = [];\n\n // E1: selection behavior. 'multiple' (default) preserves the historical\n // additive-toggle path; 'single' collapses to one row; 'none' disables it.\n @property({ attribute: 'selection-mode' })\n selectionMode: SelectionMode = 'multiple';\n\n // E1: shift-range anchor. Holds the row OBJECT (not an index) so it tracks the\n // row across a sort that moves it — the range is computed against the current\n // filtered snapshot / rowIndexMap at click time.\n private selectionAnchor: any = null;\n\n // F: row grouping. `groupBy` is column key(s) to group by; assigning it\n // post-mount re-renders through the coalescing queue (handleGroupByChange).\n // Aggregation is per-column (ColumnDefinition.aggregate) and needs no flag —\n // the grouping model reports isEnabled() when either grouping or aggregation\n // is active, and the body routes through the flattened display list in both\n // cases. attribute:false — a string[] can't reflect to an attribute, and the\n // reactive contract is property assignment (mirrors columns/data).\n @property({ attribute: false })\n groupBy: string | string[] = '';\n\n @property({ attribute: false })\n groupDefaults: { expanded?: boolean } = {};\n\n // F: flattened group+row+aggregate display list cache. Rebuilt lazily from the\n // filtered snapshot; invalidated on the same model mutations as filteredCache\n // PLUS group expand/collapse and groupBy/column changes (invalidateGroupingCache).\n private groupingCache: DisplayItem[] | null = null;\n\n // Module instances\n private virtualizer = new TableVirtualizer();\n private columnManager = new TableColumnManager();\n private filterEngine = new TableFilterEngine();\n private editor = new TableEditor();\n private keyboard = new TableKeyboard();\n private exporter = new TableExport();\n private masterDetail = new TableMasterDetail();\n private toolbar = new TableToolbar();\n private treeData = new TableTreeData();\n private grouping = new TableGrouping();\n private columnMenuManager = new TableColumnMenu();\n private rowDnD = new TableRowDnD();\n private columnDnD = new TableColumnDnD();\n private pinnedTopRows: any[] = [];\n private pinnedBottomRows: any[] = [];\n private toolbarOptions: ToolbarOptions | null = null;\n private lazyLoadHandler: (() => void) | null = null;\n private lazyLoadContainer: HTMLElement | null = null;\n private rowHeightCallback: ((row: any, index: number) => number) | null = null;\n private virtualRowsSnapshot: Array<{ data: any; index: number; treeRow?: TreeRow; groupItem?: DisplayItem }> = [];\n\n @query('table')\n table!: HTMLTableElement;\n\n @query('thead')\n thead!: HTMLTableSectionElement;\n\n @query('tbody')\n tbody!: HTMLTableSectionElement;\n\n\n @request('table/config')\n async *getTableConfig(): any {\n const config = await (yield {});\n this.columns = config.columns || [];\n this.selectorOptions = config.selectorOptions || [];\n // Wait for next frame to ensure DOM is updated\n await new Promise(resolve => requestAnimationFrame(resolve));\n this.renderHeader();\n this.renderControls();\n return config;\n }\n\n @request('table/data')\n async *getTableData(): any {\n // A5: capture this request's sequence number. A later request bumps the\n // counter, so a slow earlier response finds seq !== this.dataRequestSeq and\n // bails without touching the model — no out-of-order clobber.\n const seq = ++this.dataRequestSeq;\n this.loading = true;\n this.selectedRows = []; // Clear selections when loading new data\n\n try {\n const params: any = {\n search: this.searchText,\n sort: this.currentSort,\n filter: this.filterEngine.getFilterModel(),\n selector: this.selector\n };\n\n if (this.pagination) {\n params.page = this.currentPage;\n params.pageSize = this.pageSize;\n }\n const response = await (yield params);\n if (seq !== this.dataRequestSeq) return; // superseded by a newer request\n this.data = response.data || [];\n this.rebuildRowIndex();\n if (response.totalItems !== undefined) {\n this.totalItems = response.totalItems;\n }\n this.loadError = null;\n this.classList.remove('table--error');\n this.loading = false;\n // Wait for next frame to ensure DOM is updated\n await new Promise(resolve => requestAnimationFrame(resolve));\n if (seq !== this.dataRequestSeq) return; // superseded while awaiting frame\n this.renderBody();\n return response;\n } catch (error) {\n if (seq !== this.dataRequestSeq) return; // stale failure — ignore silently\n console.error('Error loading table data:', error);\n this.loadError = error instanceof Error ? error.message : String(error);\n this.classList.add('table--error');\n this.dispatchLoadError(error);\n this.loading = false;\n // Wait for next frame to ensure DOM is updated\n await new Promise(resolve => requestAnimationFrame(resolve));\n this.renderBody();\n }\n }\n\n private unsortedData: any[] = [];\n private dataRequestTimeout: any = null;\n\n // A1: row-object → its index in `this.data`. Replaces the O(n) `data.indexOf`\n // that ran per row on every selection toggle (was O(n²) for select-all).\n // `rowIndexDataRef` is the array the map was built from — a plain\n // `table.data = [...]` assignment swaps the array without going through\n // setData/rebuildRowIndex, so `ensureRowIndex()` lazily rebuilds when it\n // detects the reference changed.\n private rowIndexMap = new Map<any, number>();\n private rowIndexDataRef: any[] | null = null;\n\n // A4: the filtered snapshot getFilteredData() hands out. Recomputing it per\n // rAF scroll frame re-ran the whole filter engine every frame. Invalidated on\n // every mutation of data / filters / sort (see invalidateFilteredCache).\n private filteredCache: any[] | null = null;\n\n // A5: monotonic request id. Captured at request start; a response only\n // applies if it is still the latest, so a slow earlier response can't clobber\n // a fast later one.\n private dataRequestSeq = 0;\n\n // Task B: render-path recycling. Keyed by row-object identity (data rows) or a\n // synthetic string key (pinned / detail rows). Maps a key to the <tr> element\n // currently rendered for it plus the signature it was rendered with. On the\n // next render, a key whose object and signature are unchanged reuses its <tr>\n // (moved when order changes) instead of reconstructing it and every cell.\n // Rebuilt fresh on every render pass, so switching render modes is safe.\n private renderedRows = new Map<unknown, { el: HTMLElement; sig: string }>();\n\n // C1: brackets the internal `this.data` reassignment inside sortLocalData so\n // the data @watch treats a re-sorted view of the same rows as NOT a new\n // dataset — it must not refresh the unsortedData snapshot or double-render.\n private settingSortedData = false;\n\n // C1: set while the imperative setData() runs so the data @watch resyncs the\n // model but skips the auto-render (the caller drives the body fill).\n private settingDataImperative = false;\n\n // C1/C2: microtask-coalesced render queue. Reactive assignments schedule a\n // render here instead of calling renderHeader/renderBody synchronously —\n // MANDATORY, because happy-dom crashes constructing cell elements inside a\n // property-setter stack. A burst of assignments in one tick flushes once.\n private renderQueued = false;\n private pendingHeaderRender = false;\n private pendingBodyRender = false;\n\n private scheduleRender(what: 'header' | 'body' | 'both') {\n if (what === 'header' || what === 'both') this.pendingHeaderRender = true;\n if (what === 'body' || what === 'both') this.pendingBodyRender = true;\n if (this.renderQueued) return;\n\n this.renderQueued = true;\n queueMicrotask(() => {\n // @property invokes watchers before it asks Snice to update the template.\n // A second microtask lets that differential render commit first when a\n // property changes the table's structural mode (notably slotted rows →\n // grouped native table), while still coalescing a burst into one flush.\n queueMicrotask(() => {\n this.renderQueued = false;\n const doHeader = this.pendingHeaderRender;\n const doBody = this.pendingBodyRender;\n this.pendingHeaderRender = false;\n this.pendingBodyRender = false;\n if (doHeader) this.renderHeader();\n if (doBody) this.renderBody();\n });\n });\n }\n\n\n private debouncedDataRequest() {\n // Set loading immediately for instant feedback\n if (!this.loading) {\n this.loading = true;\n }\n \n if (this.dataRequestTimeout) {\n clearTimeout(this.dataRequestTimeout);\n }\n \n this.dataRequestTimeout = setTimeout(() => {\n this.getTableData();\n this.dataRequestTimeout = null;\n }, 150);\n }\n\n @styles()\n styles() {\n return css/*css*/`\n :host([hidden]) {\n display: none;\n}\n\n:host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 200px;\n }\n\n /* Native Fullscreen API: paint the host's background as the backdrop\n so the area outside our box (during transition) matches dark/light. */\n :host(:fullscreen) {\n background: var(--snice-color-surface, rgb(255 255 255));\n }\n :host(:fullscreen)::backdrop {\n background: var(--snice-color-surface, rgb(255 255 255));\n }\n\n /* CSS fallback fullscreen — used when requestFullscreen is blocked. */\n :host(.table-fullscreen) {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--snice-color-surface, rgb(255 255 255));\n padding: var(--snice-spacing-md, 1rem);\n overflow: auto;\n display: flex;\n flex-direction: column;\n }\n\n :host(.table-fullscreen) .snice-table {\n flex: 1;\n height: auto;\n }\n\n :host(.table-fullscreen) .table-frame {\n flex: 1;\n max-height: none;\n }\n\n\n\n .snice-table {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 0;\n }\n\n /* Frame wraps super-header + table; provides the rounded border.\n flex:1 + min-height:0 lets it absorb the remaining host height\n instead of letting content size dictate height. */\n .table-frame {\n position: relative;\n flex: 1;\n min-height: 0;\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-lg, 0.5rem);\n overflow: auto;\n }\n\n table {\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n /* no border or radius — handled by .table-frame */\n }\n\n /* Super-header (slotted area above column headers) */\n .table-superheader {\n background: var(--snice-color-surface, rgb(255 255 255));\n }\n\n .table-superheader:empty {\n display: none;\n }\n\n .table-superheader ::slotted(*) {\n display: block;\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-md, 1rem);\n border-bottom: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n th, td {\n padding: var(--snice-table-cell-padding, var(--snice-spacing-xs, 0.5rem) var(--snice-spacing-sm, 0.75rem));\n border-bottom: var(--snice-table-row-border, 1px solid var(--snice-color-border, rgb(226 226 226)));\n border-right: var(--snice-table-cell-border, 1px solid var(--snice-color-border, rgb(226 226 226)));\n text-align: left;\n vertical-align: middle;\n color: var(--snice-color-text, rgb(23 23 23));\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n /* Remove right border on last cell in row */\n th:last-child,\n td:last-child {\n border-right: none;\n }\n\n /* Remove bottom border on last body row */\n tbody tr:last-child td {\n border-bottom: none;\n }\n\n th {\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-sm, 0.75rem);\n }\n\n /* Narrow utility columns: checkbox, expand toggle, drag handle.\n * vertical-align: middle is REQUIRED — td defaults to baseline and the\n * checkbox sits at the bottom when any other cell is taller (fat rows). */\n th.select-column,\n td.select-column,\n th.detail-toggle-cell,\n td.detail-toggle-cell,\n th.drag-handle-cell,\n td.drag-handle-cell {\n width: 1.75rem;\n max-width: 1.75rem;\n min-width: 1.75rem;\n text-align: center;\n vertical-align: middle;\n padding: 0 0.125rem;\n overflow: visible;\n box-sizing: content-box;\n }\n\n /* Force snice-checkbox compact + centered inside table */\n .select-column snice-checkbox {\n min-height: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n\n th {\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n color: var(--snice-color-text, rgb(23 23 23));\n font-weight: var(--snice-font-weight-semibold, 600);\n border-bottom: 1px solid var(--snice-color-border-subtle, var(--snice-color-border, rgb(226 226 226)));\n }\n\n th.sortable {\n cursor: pointer;\n user-select: none;\n }\n\n /* Hover and selected states share the same tokens as menu/list/command-palette\n * for cross-component visual consistency. */\n th.sortable:hover {\n background-color: var(--snice-color-surface-hover, rgb(243 244 246));\n }\n\n /* Sticky header (Task 4d) — thead cells stick to .table-frame's\n scroll-top edge. z-index sits above tbody cells (plain cells are\n unpositioned; pinned body td gets inline zIndex '1' in createRow) and\n at the pinned-header corner's own inline zIndex '2' (renderHeader),\n so a cell that is both pinned AND in the header still wins on\n horizontal scroll. Background matches the existing th background so\n rows never bleed through while scrolling underneath. */\n thead th {\n position: sticky;\n top: 0;\n z-index: 2;\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n /* Row styling */\n :host([striped]) tbody tr:nth-child(even) {\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n :host([hoverable]) tbody tr:hover {\n background-color: var(--snice-color-surface-hover, rgb(243 244 246));\n }\n\n :host([clickable]) tbody tr {\n cursor: pointer;\n }\n\n :host([selectable]:not([selection-mode=\"none\"])) tbody tr {\n cursor: pointer;\n }\n\n tbody tr[data-selected=\"true\"] {\n background-color: var(--snice-color-primary-subtle, rgb(239 246 255));\n box-shadow: inset 2px 0 0 0 var(--snice-color-primary, rgb(37 99 235));\n }\n\n tbody tr[data-selected=\"true\"]:hover {\n background-color: var(--snice-color-primary-subtle-hover, var(--snice-color-primary-subtle, rgb(219 234 254)));\n }\n\n /* List mode - hide vertical borders */\n :host([list]) th,\n :host([list]) td {\n border-right: none;\n }\n\n :host([list]) .table-frame {\n border-left: none;\n border-right: none;\n border-radius: 0;\n }\n\n [part=\"header\"] {\n background-color: var(--snice-color-surface, rgb(255 255 255));\n }\n\n [part=\"body\"] {\n background-color: var(--snice-table-body-bg, var(--snice-color-surface, rgb(255 255 255)));\n display: block;\n }\n\n /* Toolbar */\n .table-toolbar {\n display: flex;\n align-items: center;\n gap: var(--snice-spacing-xs, 0.5rem);\n padding: var(--snice-spacing-xs, 0.5rem) var(--snice-spacing-sm, 0.75rem);\n padding-left: 0;\n background: var(--snice-color-surface, rgb(255 255 255));\n }\n\n .toolbar-search {\n width: 16rem;\n max-width: 16rem;\n flex: 0 0 auto;\n }\n\n .toolbar-actions {\n display: flex;\n align-items: center;\n gap: 2px;\n margin-left: auto;\n }\n\n .toolbar-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n background: var(--snice-color-surface, rgb(255 255 255));\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n cursor: pointer;\n transition: all var(--snice-transition-fast, 150ms) ease;\n padding: 0;\n line-height: 1;\n font-family: inherit;\n }\n\n .toolbar-btn:hover {\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .toolbar-btn svg {\n width: 16px;\n height: 16px;\n }\n\n /* Toolbar dropdown menus */\n .toolbar-menu {\n position: absolute;\n z-index: 10001;\n min-width: 12rem;\n background: var(--snice-color-surface, rgb(255 255 255));\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n box-shadow: var(--snice-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));\n padding: var(--snice-spacing-2xs, 0.25rem);\n }\n\n .toolbar-menu-title {\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n font-size: var(--snice-font-size-xs, 0.75rem);\n font-weight: var(--snice-font-weight-semibold, 600);\n color: var(--snice-color-text-tertiary, rgb(115 115 115));\n text-transform: uppercase;\n letter-spacing: 0.05em;\n }\n\n .toolbar-menu-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n border: none;\n border-radius: 3px;\n background: transparent;\n color: var(--snice-color-text, rgb(23 23 23));\n font-size: var(--snice-font-size-sm, 0.875rem);\n font-family: inherit;\n cursor: pointer;\n text-align: left;\n }\n\n .toolbar-menu-item:hover {\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n .toolbar-menu-item--active {\n color: var(--snice-color-primary, rgb(37 99 235));\n font-weight: var(--snice-font-weight-medium, 500);\n }\n\n .toolbar-menu-item-indicator {\n font-size: 0.75rem;\n opacity: 0.7;\n }\n\n .toolbar-clear-btn {\n margin-top: var(--snice-spacing-2xs, 0.25rem);\n border-top: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: 0;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n font-size: var(--snice-font-size-xs, 0.75rem);\n }\n\n /* Filter menu */\n .toolbar-filter-menu {\n min-width: 16rem;\n padding: var(--snice-spacing-xs, 0.5rem);\n }\n\n .toolbar-filter-row {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-bottom: var(--snice-spacing-2xs, 0.25rem);\n }\n\n .toolbar-filter-label {\n font-size: var(--snice-font-size-xs, 0.75rem);\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n font-weight: var(--snice-font-weight-medium, 500);\n }\n\n .toolbar-filter-input {\n width: 100%;\n box-sizing: border-box;\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n font-size: var(--snice-font-size-sm, 0.875rem);\n font-family: inherit;\n color: var(--snice-color-text, rgb(23 23 23));\n background: var(--snice-color-surface, rgb(255 255 255));\n outline: none;\n }\n\n .toolbar-filter-input:focus {\n border-color: var(--snice-color-primary, rgb(37 99 235));\n }\n\n .toolbar-filter-input::placeholder {\n color: var(--snice-color-text-tertiary, rgb(115 115 115));\n }\n\n .table-controls {\n display: flex;\n gap: var(--snice-spacing-xs, 0.5rem);\n align-items: center;\n flex-wrap: wrap;\n padding: var(--snice-spacing-xs, 0.5rem) var(--snice-spacing-sm, 0.75rem);\n padding-left: 0;\n justify-content: flex-start;\n }\n\n :host(:not([searchable])) .search-input {\n display: none;\n }\n\n :host(.selector-options-empty) .selector-input {\n display: none;\n }\n\n /* snice-input/snice-select handle own styling — layout only */\n .search-input {\n width: 16rem;\n max-width: 16rem;\n flex: 0 0 auto;\n }\n\n .selector-input {\n min-width: 9.375rem;\n --snice-select-min-height: 2rem;\n }\n\n /* Sort indicators */\n .sort-header {\n display: flex;\n align-items: center;\n gap: var(--snice-spacing-xs, 0.5rem);\n justify-content: space-between;\n }\n\n\n .sort-indicator {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n line-height: 1;\n opacity: 0.3;\n transition: opacity var(--snice-transition-fast, 150ms);\n }\n\n .sort-indicator.active {\n opacity: 1;\n color: var(--snice-color-primary, rgb(37 99 235));\n }\n\n .sort-order {\n font-size: 0.625rem;\n font-weight: 700;\n background: var(--snice-color-primary, rgb(37 99 235));\n color: rgb(255 255 255);\n border-radius: 999px;\n padding: 0.0625rem 0.3125rem;\n min-width: 1rem;\n height: 1rem;\n line-height: 1rem;\n text-align: center;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Loading fade */\n tbody {\n transition: opacity var(--snice-transition-normal, 250ms);\n }\n\n :host([loading]) tbody {\n opacity: 0.5;\n }\n\n /* Refetch spinner while rows stay on screen (SNICE-142) */\n .table-loading-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n z-index: 2;\n }\n\n .no-data {\n text-align: center;\n padding: var(--snice-spacing-lg, 1.5rem);\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n }\n\n /* Remote-mode load error (Task 4c) — informed by the dead\n components/table/snice-table.css .table--error design. */\n :host(.table--error) .table-frame {\n border-color: var(--snice-color-danger, rgb(220 38 38));\n }\n\n .table-error-message {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--snice-spacing-2xs, 0.25rem);\n color: var(--snice-color-danger, rgb(220 38 38));\n }\n\n /* Pagination */\n .pagination {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--snice-spacing-md, 1rem);\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-md, 1rem);\n border-top: 1px solid var(--snice-color-border, rgb(226 226 226));\n background: var(--snice-color-surface, rgb(255 255 255));\n font-size: var(--snice-font-size-sm, 0.875rem);\n flex-wrap: wrap;\n }\n\n .pagination__info {\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n white-space: nowrap;\n }\n\n .pagination__controls {\n display: flex;\n align-items: center;\n gap: 2px;\n }\n\n .pagination__btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 2rem;\n height: 2rem;\n padding: 0 var(--snice-spacing-2xs, 0.25rem);\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n background: var(--snice-color-surface, rgb(255 255 255));\n color: var(--snice-color-text, rgb(23 23 23));\n font-size: var(--snice-font-size-sm, 0.875rem);\n cursor: pointer;\n transition: all var(--snice-transition-fast, 150ms) ease;\n font-family: inherit;\n line-height: 1;\n }\n\n .pagination__btn:hover:not(:disabled) {\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n .pagination__btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n .pagination__btn--active {\n background: var(--snice-color-primary, rgb(37 99 235));\n color: var(--snice-color-text-inverse, rgb(250 250 250));\n border-color: var(--snice-color-primary, rgb(37 99 235));\n }\n\n .pagination__btn--active:hover:not(:disabled) {\n background: var(--snice-color-primary-hover, rgb(29 78 216));\n }\n\n .pagination__btn:focus-visible {\n outline: 2px solid var(--snice-color-primary, rgb(37 99 235));\n outline-offset: 2px;\n z-index: 1;\n }\n\n .pagination__ellipsis {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 2rem;\n height: 2rem;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n }\n\n .pagination__size {\n display: flex;\n align-items: center;\n gap: var(--snice-spacing-xs, 0.5rem);\n white-space: nowrap;\n }\n\n .pagination__size label {\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n }\n\n .pagination__size-select {\n min-width: 4.5rem;\n --snice-select-min-height: 1.75rem;\n }\n\n /* Column resize handle */\n .resize-handle {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n cursor: col-resize;\n background: transparent;\n z-index: 1;\n }\n\n .resize-handle:hover,\n .resize-handle:active {\n background: var(--snice-color-primary, rgb(37 99 235));\n }\n\n /* Filter indicator */\n th.filtered::after {\n content: '';\n position: absolute;\n top: 4px;\n right: 8px;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--snice-color-primary, rgb(37 99 235));\n }\n\n /* Pinned column separator */\n .pinned-cell {\n background: var(--snice-color-surface, rgb(255 255 255));\n box-shadow: 2px 0 4px -1px rgb(0 0 0 / 0.1);\n }\n\n /* Density: compact */\n :host([density=\"compact\"]) th {\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n font-size: var(--snice-font-size-xs, 0.75rem);\n }\n\n :host([density=\"compact\"]) td {\n padding: var(--snice-spacing-3xs, 0.125rem) var(--snice-spacing-xs, 0.5rem);\n font-size: var(--snice-font-size-xs, 0.75rem);\n }\n\n /* Density: comfortable */\n :host([density=\"comfortable\"]) th {\n padding: var(--snice-spacing-md, 1rem);\n }\n\n :host([density=\"comfortable\"]) td {\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-md, 1rem);\n }\n\n /* Editing */\n .table-editor-input {\n width: 100%;\n box-sizing: border-box;\n padding: var(--snice-spacing-2xs, 0.25rem);\n border: 2px solid var(--snice-color-primary, rgb(37 99 235));\n border-radius: var(--snice-border-radius-sm, 0.125rem);\n font-family: inherit;\n font-size: inherit;\n color: var(--snice-color-text, rgb(23 23 23));\n background: var(--snice-color-surface, rgb(255 255 255));\n outline: none;\n }\n\n .table-editor-select {\n width: 100%;\n padding: var(--snice-spacing-2xs, 0.25rem);\n border: 2px solid var(--snice-color-primary, rgb(37 99 235));\n border-radius: var(--snice-border-radius-sm, 0.125rem);\n font-family: inherit;\n font-size: inherit;\n }\n\n .table-editor-checkbox {\n width: 1rem;\n height: 1rem;\n }\n\n td.editing {\n padding: 2px !important;\n }\n\n .cell-error {\n color: var(--snice-color-danger, rgb(220 38 38));\n font-size: var(--snice-font-size-xs, 0.75rem);\n margin-top: 2px;\n }\n\n /* Header filter row */\n .header-filter-row td {\n padding: 0;\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n border-bottom: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n .header-filter-input {\n width: 100%;\n box-sizing: border-box;\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n border: none;\n font-size: var(--snice-font-size-xs, 0.75rem);\n font-family: inherit;\n color: var(--snice-color-text, rgb(23 23 23));\n background: transparent;\n outline: none;\n }\n\n .header-filter-input::placeholder {\n color: var(--snice-color-text-tertiary, rgb(115 115 115));\n }\n\n .header-filter-input:focus {\n background: var(--snice-color-surface-container-lowest, rgb(248 247 245));\n }\n\n /* Tree data indentation */\n .tree-indent {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n }\n\n .tree-toggle {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 0.7rem;\n line-height: 1;\n width: 1.25rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform var(--snice-transition-fast, 150ms) ease;\n }\n\n .tree-toggle:hover {\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .tree-toggle:focus-visible {\n outline: var(--snice-focus-ring-width, 2px) solid var(--snice-focus-ring-color, hsl(217 91% 60% / 0.5));\n outline-offset: var(--snice-focus-ring-offset, 2px);\n }\n\n .tree-toggle-icon {\n width: 1rem;\n height: 1rem;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n transform: rotate(-90deg);\n }\n\n .tree-toggle--expanded .tree-toggle-icon {\n transform: rotate(0deg);\n }\n\n .tree-spacer {\n display: inline-block;\n width: 1.25rem;\n }\n\n /* Row grouping — group header row */\n .group-header-row {\n background: var(--snice-table-group-header-bg, var(--snice-color-surface-container-low, hsl(0 0% 98%)));\n }\n\n .group-header-cell {\n cursor: pointer;\n font-weight: var(--snice-font-weight-semibold, 600);\n color: var(--snice-table-group-header-color, var(--snice-color-text, hsl(0 0% 9%)));\n user-select: none;\n padding: var(--snice-spacing-xs, 0.5rem) var(--snice-spacing-sm, 0.75rem);\n }\n\n .group-header-cell .tree-indent {\n vertical-align: middle;\n }\n\n .group-select-wrap {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n margin-right: var(--snice-spacing-2xs, 0.25rem);\n }\n\n .group-header-label {\n vertical-align: middle;\n }\n\n .group-header-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.25rem;\n height: 1.25rem;\n margin-left: var(--snice-spacing-xs, 0.5rem);\n padding: 0 var(--snice-spacing-2xs, 0.25rem);\n border-radius: 999px;\n background: var(--snice-table-group-count-bg, var(--snice-color-surface-container-high, hsl(40 9% 97%)));\n color: var(--snice-table-group-count-color, var(--snice-color-text-secondary, hsl(0 0% 32%)));\n font-size: var(--snice-font-size-xs, 0.75rem);\n font-weight: var(--snice-font-weight-medium, 500);\n vertical-align: middle;\n }\n\n /* Row grouping — aggregate footer row */\n .group-aggregate-row {\n background: var(--snice-table-aggregate-bg, var(--snice-color-surface-container, hsl(0 0% 95%)));\n font-weight: var(--snice-font-weight-medium, 500);\n }\n\n .group-aggregate-row[data-agg-scope=\"table\"] {\n border-top: 2px solid var(--snice-table-aggregate-border-color, var(--snice-color-border, hsl(0 0% 82%)));\n font-weight: var(--snice-font-weight-semibold, 600);\n }\n\n .group-aggregate-row .aggregate-cell {\n color: var(--snice-table-aggregate-color, var(--snice-color-text, hsl(0 0% 9%)));\n }\n\n .aggregate-label {\n color: var(--snice-table-aggregate-label-color, var(--snice-color-text-secondary, hsl(0 0% 32%)));\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: var(--snice-font-size-xs, 0.75rem);\n }\n\n .aggregate-label--inline {\n display: block;\n margin-bottom: var(--snice-spacing-2xs, 0.25rem);\n }\n\n /* Row pinning */\n .pinned-row {\n font-weight: var(--snice-font-weight-medium, 500);\n border-bottom: 2px solid var(--snice-color-border, rgb(226 226 226));\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n .pinned-row--top {\n border-bottom: 2px solid var(--snice-color-primary, rgb(37 99 235));\n }\n\n .pinned-row--bottom {\n border-top: 2px solid var(--snice-color-primary, rgb(37 99 235));\n }\n\n /* Column group headers */\n .column-group-row th {\n text-align: center;\n font-size: var(--snice-font-size-xs, 0.75rem);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n background: var(--snice-color-surface-container, rgb(235 235 235));\n border-bottom: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n /* DnD */\n .drag-handle-cell {\n font-size: 0.875rem;\n }\n\n .drop-indicator {\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--snice-color-primary, rgb(37 99 235));\n z-index: 10;\n pointer-events: none;\n }\n\n tr[draggable=\"true\"]:active {\n cursor: grabbing;\n }\n\n /* Master-detail — animated like accordion */\n .detail-row {\n background: var(--snice-color-surface-container-high, rgb(252 251 249));\n }\n\n .detail-cell {\n max-width: none;\n }\n\n .detail-content {\n overflow: hidden;\n max-height: 0;\n transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n will-change: max-height;\n }\n\n .detail-content--open {\n max-height: var(--detail-max-height, 31.25rem);\n }\n\n .detail-content-inner {\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-md, 1rem);\n border-top: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n .detail-toggle {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .detail-toggle:hover {\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .detail-toggle-icon {\n width: 1rem;\n height: 1rem;\n transition: transform 0.2s ease;\n transform: rotate(-90deg);\n }\n\n .detail-toggle--expanded .detail-toggle-icon {\n transform: rotate(0deg);\n }\n\n /* Drag handle */\n .drag-handle-cell {\n cursor: grab;\n user-select: none;\n color: var(--snice-color-text-tertiary, rgb(115 115 115));\n font-size: 0.875rem;\n }\n\n /* Focus indicator for keyboard nav */\n [data-grid-focus] {\n outline: 2px solid var(--snice-color-primary, rgb(37 99 235));\n outline-offset: -2px;\n }\n\n /* Column menu */\n .table-column-menu {\n position: fixed;\n z-index: 10001;\n min-width: 10rem;\n background: var(--snice-color-surface-container-high, rgb(252 251 249));\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n box-shadow: var(--snice-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));\n padding: 4px;\n }\n\n .column-menu-separator {\n height: 1px;\n background: var(--snice-color-border, rgb(226 226 226));\n margin: 4px 0;\n }\n\n .column-menu-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.375rem 0.625rem;\n border: none;\n border-radius: 3px;\n background: transparent;\n color: var(--snice-color-text, rgb(23 23 23));\n font-size: var(--snice-font-size-sm, 0.875rem);\n font-family: inherit;\n cursor: pointer;\n text-align: left;\n white-space: nowrap;\n }\n\n .column-menu-item:hover {\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n .column-menu-item:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .column-menu-item--active {\n color: var(--snice-color-primary, rgb(37 99 235));\n font-weight: var(--snice-font-weight-medium, 500);\n }\n\n .column-menu-icon {\n width: 1rem;\n height: 1rem;\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n }\n .column-menu-icon svg {\n width: 1rem;\n height: 1rem;\n }\n\n /* Slotted table layout */\n .snice-table--slotted {\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-lg, 0.5rem);\n overflow: hidden;\n }\n\n .snice-table--slotted .table-header {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: 1fr;\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n border-bottom: 2px solid var(--snice-color-border, rgb(226 226 226));\n padding: var(--snice-spacing-sm, 0.75rem);\n font-weight: var(--snice-font-weight-semibold, 600);\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .snice-table--slotted .header-cell {\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .snice-table--slotted .table-header::slotted(snice-column) {\n padding: var(--snice-spacing-sm, 0.75rem);\n }\n\n .snice-table--slotted .table-body {\n display: flex;\n flex-direction: column;\n }\n\n .snice-table--slotted .table-body::slotted(snice-row) {\n border-bottom: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n .snice-table--slotted .table-body::slotted(snice-row:last-child) {\n border-bottom: none;\n }\n\n :host([striped]) .snice-table--slotted .table-body::slotted(snice-row:nth-child(even)) {\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n :host([hoverable]) .snice-table--slotted .table-body::slotted(snice-row:hover) {\n background-color: var(--snice-color-surface-container, rgb(235 235 235));\n }\n `;\n }\n\n @render()\n render() {\n // Check if we have slotted rows\n const hasSlottedRows = this.querySelectorAll('snice-row[slot=\"rows\"]').length > 0\n && !this.shouldModelSlottedRows();\n\n if (hasSlottedRows) {\n // Use slotted rows layout\n return html/*html*/`\n <div class=\"snice-table snice-table--slotted\" @click=${this.handleClick} @keydown=${this.handleKeydown} @change=${this.handleChange} @checkbox-change=${this.handleChange}>\n <div class=\"table-controls-container\"></div>\n<div class=\"table-header\" id=\"slotted-header\"></div>\n <div class=\"table-body\">\n <slot name=\"rows\"></slot>\n </div>\n <slot name=\"columns\" style=\"display: none;\"></slot>\n </div>\n `;\n } else {\n // Use traditional table layout\n return html/*html*/`\n <div class=\"snice-table\" @click=${this.handleClick} @keydown=${this.handleKeydown} @change=${this.handleChange} @checkbox-change=${this.handleChange}>\n <div class=\"table-controls-container\"></div>\n<div class=\"table-frame\">\n <div class=\"table-superheader\" part=\"superheader\">\n <slot name=\"header\"></slot>\n </div>\n <table>\n <thead></thead>\n <tbody></tbody>\n </table>\n </div>\n <div class=\"table-pagination-container\"></div>\n </div>\n `;\n }\n }\n\n renderControls() {\n const container = this.shadowRoot?.querySelector('.table-controls-container');\n if (!container) return;\n\n // A configured toolbar owns this container. Reattach it when a structural\n // render replaces the shadow template; legacy controls must not overwrite it.\n if (this.toolbarOptions) {\n this.setToolbar(this.toolbarOptions);\n return;\n }\n\n const showControls = this.searchable || this.filterable || this.quickFilter;\n if (!showControls) {\n container.innerHTML = '';\n return;\n }\n\n container.innerHTML = '';\n const controlsDiv = document.createElement('div');\n controlsDiv.className = 'table-controls';\n controlsDiv.setAttribute('part', 'controls');\n\n if (this.quickFilter) {\n const quickInput = document.createElement('snice-input') as any;\n quickInput.className = 'quick-filter-input';\n quickInput.type = 'search';\n quickInput.placeholder = 'Quick filter...';\n quickInput.size = 'small';\n quickInput.clearable = true;\n quickInput.style.width = '16rem';\n quickInput.style.maxWidth = '16rem';\n quickInput.value = this.filterEngine.getFilterModel().quickFilter || '';\n quickInput.addEventListener('input', this.handleQuickFilterInput);\n controlsDiv.appendChild(quickInput);\n } else if (this.searchable) {\n const searchInput = document.createElement('snice-input');\n searchInput.className = 'search-input';\n searchInput.setAttribute('type', 'search');\n searchInput.setAttribute('placeholder', 'Search...');\n searchInput.setAttribute('size', 'small');\n searchInput.style.width = '16rem';\n searchInput.style.maxWidth = '16rem';\n searchInput.style.flex = '0 0 auto';\n searchInput.addEventListener('input', this.handleSearchInput);\n controlsDiv.appendChild(searchInput);\n }\n\n if (this.filterable) {\n const select = document.createElement('snice-select');\n select.className = 'selector-input';\n select.setAttribute('multiple', '');\n select.setAttribute('searchable', '');\n select.setAttribute('clearable', '');\n select.setAttribute('placeholder', 'Filter...');\n select.setAttribute('size', 'medium');\n\n this.selectorOptions.forEach(opt => {\n const option = document.createElement('snice-option');\n option.setAttribute('value', opt.value);\n option.textContent = opt.label;\n select.appendChild(option);\n });\n\n controlsDiv.appendChild(select);\n }\n\n container.appendChild(controlsDiv);\n }\n\n @ready()\n async initialize() {\n // Listen for controller attached event\n this.addEventListener('controller-attached', this.onAttached as EventListener);\n\n // Listen for select change events from the filter dropdown\n this.addEventListener('select-change', this.handleSelectorChange as EventListener);\n this.addEventListener('row-select', this.handleSlottedRowSelect as EventListener);\n\n // Listen for detail panel toggle\n this.addEventListener('detail-toggle', () => this.renderBody());\n\n // Persist committed edits back into the local dataset so the re-render\n // shows the new value. Fires before commitEdit()'s renderBody() (the\n // editor dispatches synchronously), so data is current by render time.\n this.addEventListener('cell-edit-commit', ((e: CustomEvent) => {\n const { rowIndex, columnKey, newValue } = e.detail;\n const row = this.data[rowIndex];\n if (row) row[columnKey] = newValue;\n // A4: an in-place cell change can alter which rows match an active filter.\n // Row identity is unchanged, so the index map stays valid — only the\n // filtered snapshot must be dropped.\n this.invalidateFilteredCache();\n // Task B: the row object was mutated in place (same reference), so the\n // reconciler would reuse its stale cell DOM. Drop its cached <tr> so the\n // post-commit render rebuilds it with the new value.\n if (row) this.invalidateRenderedRow(row);\n }) as EventListener);\n\n this.addEventListener('row-edit-commit', ((e: CustomEvent) => {\n const { rowIndex, newRow } = e.detail;\n if (this.data[rowIndex]) this.data[rowIndex] = newRow;\n // A1/A4: an element was swapped in place (same array reference), so the\n // ref-check can't see it — resync the index map and filtered snapshot.\n this.rebuildRowIndex();\n }) as EventListener);\n\n // Wait for snice-column to be defined\n await customElements.whenDefined('snice-column');\n await customElements.whenDefined('snice-row');\n\n // Process slotted columns and rows\n await this.processSlottedContent();\n await (this as any).rendered;\n\n // Pre-connect property assignments do not invoke change-only watchers in\n // Snice. Configure grouping explicitly once initialization has applied\n // those values so `table.groupBy = ...` works before the element is added\n // to the document (React/story/programmatic creation path).\n this.syncGrouping();\n\n // Render controls after initial setup\n this.renderControls();\n\n // Initialize feature modules\n this.initializeModules();\n this.initColumnMenu();\n\n // Setup DnD\n if (this.rowReorder) this.rowDnD.attach(this);\n if (this.columnReorder) this.columnDnD.attach(this);\n\n // We are at the safe post-template point and all feature modules that\n // affect row/header construction are attached. Finish the initial paint\n // synchronously so the public `ready` promise includes pre-connect\n // grouping, DnD handles, keyboard ARIA, and aggregate footers.\n this.renderHeader();\n this.renderBody();\n\n // Setup virtualization if enabled\n if (this.virtualize) {\n requestAnimationFrame(() => {\n if (!this.virtualizer.isEnabled()) this.setupVirtualization();\n });\n }\n\n // Setup lazy loading\n if (this.lazyLoad) {\n requestAnimationFrame(() => this.setupLazyLoading());\n }\n\n // Listen for DnD events\n this.addEventListener('row-reorder', ((e: CustomEvent) => {\n const { fromIndex, toIndex } = e.detail;\n if (!Number.isInteger(fromIndex) || !Number.isInteger(toIndex)\n || fromIndex < 0 || toIndex < 0\n || fromIndex >= this.data.length || toIndex >= this.data.length) return;\n if (fromIndex === toIndex) return;\n\n const selectedRows = this.selectedRows\n .map((index) => this.data[index])\n .filter((row) => row !== undefined);\n const expandedRows = Array.from(this.masterDetail.getExpandedRows())\n .map((index) => this.data[index])\n .filter((row) => row !== undefined);\n const item = this.data.splice(fromIndex, 1)[0];\n\n // A drop onto another group means reparenting the row. Group rendering\n // is derived from the groupBy fields, so merely changing raw array order\n // would make a cross-group drop visually snap back to its old group.\n // Copy the target leaf's grouping values before insertion so the rendered\n // result honors the user's actual drop target (all nested levels too).\n const targetBeforeRemoval = this.data[toIndex > fromIndex ? toIndex - 1 : toIndex];\n if (item && targetBeforeRemoval && this.grouping.hasGrouping()) {\n for (const key of this.grouping.getGroupByKeys()) {\n item[key] = targetBeforeRemoval[key];\n }\n }\n\n this.data.splice(toIndex, 0, item);\n this.data = [...this.data];\n this.selectedRows = selectedRows\n .map((row) => this.indexOfRow(row))\n .filter((index) => index >= 0);\n this.masterDetail.setExpandedRows(\n expandedRows.map((row) => this.indexOfRow(row)).filter((index) => index >= 0)\n );\n }) as EventListener);\n\n this.addEventListener('column-reorder', ((e: CustomEvent) => {\n const { fromKey, toKey } = e.detail;\n const fromIdx = this.columns.findIndex(c => c.key === fromKey);\n const toIdx = this.columnManager.getVisibleColumns().findIndex(c => c.key === toKey);\n if (fromIdx >= 0 && toIdx >= 0) {\n this.columnManager.moveColumn(fromKey, toIdx);\n this.renderHeader();\n this.renderBody();\n }\n }) as EventListener);\n\n // Listen for tree toggle\n this.addEventListener('tree-toggle', () => this.renderBody());\n\n }\n\n private async processSlottedContent() {\n // Get slotted column elements\n const columnElements = Array.from(this.querySelectorAll('snice-column[slot=\"columns\"]')) as any[];\n const rowElements = Array.from(this.querySelectorAll('snice-row[slot=\"rows\"]')) as any[];\n await Promise.all(rowElements.map((row) => row.ready));\n\n if (columnElements.length > 0) {\n // Extract column definitions from snice-column elements\n this.columns = columnElements.map((col: any) => col.getColumnDefinition());\n }\n\n // Pass declarative or programmatically assigned column definitions to rows.\n rowElements.forEach((row: any, index: number) => {\n row.columns = this.columns;\n row.index = index;\n row.hoverable = this.hoverable;\n row.clickable = this.clickable;\n });\n this.syncSlottedSelectionState();\n\n // Grouping/aggregation operates on the same model regardless of whether\n // rows came from a JS array or declarative <snice-row> children.\n if (this.shouldModelSlottedRows()) this.syncSlottedRowsIntoData();\n\n // Render the header for slotted mode (after next tick to ensure DOM is updated)\n if (columnElements.length > 0 && !this.shouldModelSlottedRows()) {\n requestAnimationFrame(() => this.renderSlottedHeader());\n }\n }\n\n /** Whether declarative rows need the full grouping/aggregation table model. */\n private shouldModelSlottedRows(): boolean {\n const keys = Array.isArray(this.groupBy) ? this.groupBy : (this.groupBy ? [this.groupBy] : []);\n return keys.some(Boolean) || this.columns.some((column) => column.aggregate != null);\n }\n\n /** Copy declarative row data into the table model without parsing markup. */\n private syncSlottedRowsIntoData() {\n const rowElements = Array.from(this.querySelectorAll('snice-row[slot=\"rows\"]')) as any[];\n if (rowElements.length === 0) return;\n\n const rows = rowElements.map((row) => {\n if (row.data && Object.keys(row.data).length > 0) return row.data;\n const serialized = row.getAttribute('data');\n if (serialized) {\n try { return JSON.parse(serialized); }\n catch { /* snice-row's data-* extraction remains the fallback */ }\n }\n return row.data ?? {};\n });\n this.data = rows;\n }\n\n private renderSlottedHeader() {\n const headerContainer = this.shadowRoot?.querySelector('#slotted-header');\n if (!headerContainer || this.columns.length === 0) return;\n\n // Render column headers as DOM/text, never parsed definition markup.\n headerContainer.replaceChildren();\n for (const column of this.columns) {\n const cell = document.createElement('div');\n cell.className = 'header-cell';\n cell.textContent = column.label ?? column.key;\n headerContainer.appendChild(cell);\n }\n }\n\n /** Keep declarative column definitions reactive, including aggregate. */\n @on('column-changed')\n private handleDeclarativeColumnChange() {\n const columnElements = Array.from(this.querySelectorAll('snice-column[slot=\"columns\"]')) as any[];\n if (columnElements.length === 0) return;\n this.columns = columnElements.map((column) => column.getColumnDefinition());\n\n // Ungrouped declarative rows stay in their light-DOM rendering path, so\n // they do not consume the native table render scheduled by the columns\n // watcher. Keep their model and header synchronized explicitly. When a new\n // aggregate switches the table to native mode the watcher instead copies\n // row data into the shared model.\n const rowElements = Array.from(this.querySelectorAll('snice-row[slot=\"rows\"]')) as any[];\n rowElements.forEach((row) => { row.columns = this.columns; });\n requestAnimationFrame(() => {\n if (!this.shouldModelSlottedRows()) this.renderSlottedHeader();\n this.renderControls();\n });\n }\n\n\n @watch('selectorOptions')\n handleSelectorOptionsChange() {\n // Update CSS class to show/hide selector\n if (this.selectorOptions.length === 0) {\n this.classList.add('selector-options-empty');\n } else {\n this.classList.remove('selector-options-empty');\n }\n }\n\n @watch('sortable')\n handleSortableChange() {\n this.renderHeader(); // Re-render header to show/hide sort indicators\n }\n\n @watch('selectable')\n handleSelectableChange() {\n this.render(); // Re-render both header and body for checkbox columns\n queueMicrotask(() => this.syncSlottedSelectionState());\n }\n\n // C1: reactive columns. A new column set can change cell types/formatting\n // without changing keys (which the row signature keys on), so drop the\n // recycler map and resync the column model before the header renders. All DOM\n // construction is deferred to the coalescing queue (setter-stack landmine).\n @watch('columns', { immediate: false })\n handleColumnsAssignment() {\n this.renderedRows = new Map();\n if (this.columns.length > 0) this.columnManager.initialize(this.columns, this);\n // F: a column set change can add/remove an `aggregate` — resync the grouping\n // model's aggregator list and drop its stale flattened snapshot.\n this.grouping.setColumns(this.columns);\n this.invalidateGroupingCache();\n const hasSlottedRows = !!this.querySelector('snice-row[slot=\"rows\"]');\n const modelSlottedRows = this.shouldModelSlottedRows();\n if (hasSlottedRows\n && this.virtualizer.isEnabled()\n && !!this.shadowRoot?.querySelector('table') !== modelSlottedRows) {\n this.virtualizer.detach();\n }\n if (modelSlottedRows) this.syncSlottedRowsIntoData();\n if (hasSlottedRows) {\n requestAnimationFrame(() => {\n if (!modelSlottedRows) this.renderSlottedHeader();\n this.renderControls();\n if (this.toolbarOptions) this.setToolbar(this.toolbarOptions);\n if (this.lazyLoad) this.setupLazyLoading();\n });\n }\n this.scheduleRender('both');\n }\n\n // F: reactive groupBy. Post-mount `table.groupBy = 'department'` reconfigures\n // the grouping model and re-renders through the coalescing queue. immediate:\n // false so the initial value doesn't kick a render (the columns/data watchers\n // drive the first paint). No synchronous cell construction here — scheduleRender\n // defers to a microtask (happy-dom constructor landmine).\n @watch('groupBy', 'groupDefaults', { immediate: false })\n handleGroupByChange() {\n this.syncGrouping();\n const hasSlottedRows = !!this.querySelector('snice-row[slot=\"rows\"]');\n const modelSlottedRows = this.shouldModelSlottedRows();\n if (hasSlottedRows\n && this.virtualizer.isEnabled()\n && !!this.shadowRoot?.querySelector('table') !== modelSlottedRows) {\n this.virtualizer.detach();\n }\n if (modelSlottedRows) {\n this.syncSlottedRowsIntoData();\n }\n if (hasSlottedRows) {\n requestAnimationFrame(() => {\n // Clearing the last model feature switches the structural template\n // back to slotted mode; either direction replaces the controls.\n if (!modelSlottedRows) this.renderSlottedHeader();\n this.renderControls();\n if (this.toolbarOptions) this.setToolbar(this.toolbarOptions);\n if (this.lazyLoad) this.setupLazyLoading();\n });\n }\n this.scheduleRender(hasSlottedRows ? 'both' : 'body');\n }\n\n // F: push the current groupBy/groupDefaults into the grouping model and drop\n // the flattened cache. Called from the watch and before the first render.\n private syncGrouping() {\n const keys = Array.isArray(this.groupBy)\n ? this.groupBy.filter(Boolean)\n : (this.groupBy ? [this.groupBy] : []);\n this.grouping.configure({ groupBy: keys, defaultExpanded: this.groupDefaults?.expanded !== false });\n this.grouping.setColumns(this.columns);\n this.invalidateGroupingCache();\n }\n\n // C1: reactive data. `table.data = rows` refreshes the unsortedData snapshot\n // and the row-index map, then renders the body. The internal sort path\n // (sortLocalData) reassigns this.data with a re-sorted view of the SAME rows\n // and owns its own snapshot/render — settingSortedData tells us to skip.\n @watch('data', { immediate: false })\n handleDataAssignment() {\n if (this.settingSortedData) return;\n this.unsortedData = [...this.data];\n this.rebuildRowIndex();\n this.masterDetail.prepare(this.data);\n if (this.settingDataImperative) return; // imperative setData(): caller renders\n this.scheduleRender('body');\n }\n\n @watch('loading')\n handleDataChange() {\n this.renderBody();\n this.updateLoadingOverlay();\n }\n\n /**\n * Refetch affordance: with rows on screen `loading` only dims the tbody, so\n * add a spinner overlay (styled via `part=\"loading-overlay\"`). The no-data\n * load keeps its single spinner message row instead.\n */\n private updateLoadingOverlay() {\n const frame = this.shadowRoot?.querySelector('.table-frame');\n if (!frame) return;\n let overlay = frame.querySelector('.table-loading-overlay') as HTMLElement | null;\n const show = this.loading && this.data.length > 0;\n if (show && !overlay) {\n overlay = document.createElement('div');\n overlay.className = 'table-loading-overlay';\n overlay.setAttribute('part', 'loading-overlay');\n const spinner = document.createElement('snice-progress');\n spinner.setAttribute('variant', 'circular');\n spinner.setAttribute('indeterminate', '');\n spinner.setAttribute('size', 'small');\n overlay.appendChild(spinner);\n frame.appendChild(overlay);\n } else if (!show && overlay) {\n overlay.remove();\n }\n }\n\n @watch('selectedRows')\n handleSelectedRowsChange(oldVal?: number[], newVal?: number[]) {\n // A2: selection is a @property, so every reassignment lands here — the\n // single source of truth for reflecting selection into the DOM. Touch only\n // the rows whose membership actually changed (symmetric difference of old\n // vs new), not every rendered <tr>. A single toggle updates one row; a\n // select-all/clear-all naturally updates every changed row.\n const oldSet = new Set(oldVal ?? []);\n const newSet = new Set(newVal ?? this.selectedRows ?? []);\n const changed = new Set<number>();\n for (const i of oldSet) if (!newSet.has(i)) changed.add(i);\n for (const i of newSet) if (!oldSet.has(i)) changed.add(i);\n\n for (const i of changed) this.updateRowSelectionStateFor(i, newSet.has(i));\n this.updateSelectAllState();\n // F: a data-row toggle must refresh its group header's all/some/none state.\n this.updateGroupSelectionStates();\n }\n\n @watch('selectionMode', { immediate: false })\n handleSelectionModeChange() {\n if (this.selectionMode === 'none') {\n this.selectedRows = [];\n this.selectionAnchor = null;\n } else if (this.selectionMode === 'single' && this.selectedRows.length > 1) {\n this.selectedRows = this.selectedRows.slice(0, 1);\n this.selectionAnchor = this.data[this.selectedRows[0]] ?? null;\n }\n this.syncSlottedSelectionState();\n // The selection mode changes the tool-column structure (none has no\n // checkbox column; single has row checkboxes but no select-all control).\n this.scheduleRender('both');\n }\n\n @watch('currentSort')\n handleSortChange() {\n this.renderHeader();\n }\n\n @watch('searchable', 'filterable', 'quickFilter')\n handleControlsChange() {\n this.renderControls();\n if (this.quickFilter) this.scheduleRender('body');\n }\n\n // ── C2: controlled-state props. Assigning any of these post-mount routes to\n // the same effect its imperative setter produces, rendering through the\n // coalescing queue. immediate:false so the initial value never kicks a render\n // (the initial render is driven by the other immediate watchers).\n\n // A controlled `currentSort` must actually re-sort (local) or re-request\n // (remote) — the sibling handleSortChange only repaints the arrows.\n @watch('currentSort', { immediate: false })\n handleControlledSort() {\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n }\n\n @watch('currentPage', { immediate: false })\n handleCurrentPageChange() {\n if (this.paginationMode === 'server' && this.mode === 'remote') this.debouncedDataRequest();\n else this.scheduleRender('body');\n }\n\n @watch('pageSize', { immediate: false })\n handlePageSizeChange() {\n this.currentPage = 1;\n if (this.paginationMode === 'server' && this.mode === 'remote') this.debouncedDataRequest();\n else this.scheduleRender('body');\n }\n\n @watch('density', { immediate: false })\n handleDensityChange() {\n // The density attribute reflects automatically (drives the CSS); the body\n // rebuilds because density is part of the row signature.\n this.scheduleRender('body');\n this.dispatchDensityChange();\n }\n\n @watch('list', { immediate: false })\n handleListChange() {\n this.renderedRows = new Map();\n this.scheduleRender('body');\n }\n\n @watch('editable', { immediate: false })\n handleEditableChange() {\n if (this.editable) this.setupEditor();\n this.scheduleRender('body');\n }\n\n @watch('editMode', { immediate: false })\n handleEditModeChange() {\n if (this.editable) this.editor.setEditMode(this.editMode);\n this.scheduleRender('body');\n }\n\n @watch('virtualize', { immediate: false })\n handleVirtualizeChange() {\n // renderBody self-heals virtualization (enables the virtualizer when\n // requested); turning it off detaches so the normal path takes over.\n if (!this.virtualize) this.virtualizer.detach();\n this.scheduleRender('body');\n }\n\n @watch('rowHeight', { immediate: false })\n handleRowHeightChange() {\n this.scheduleRender('body');\n }\n\n @watch('columnResize', { immediate: false })\n handleColumnResizeChange() {\n this.scheduleRender('header');\n }\n\n @watch('headerFilters', { immediate: false })\n handleHeaderFiltersChange() {\n this.scheduleRender('header');\n }\n\n @watch('rowReorder', { immediate: false })\n handleRowReorderChange() {\n if (this.rowReorder) this.rowDnD.attach(this);\n else this.rowDnD.detach();\n this.scheduleRender('both');\n }\n\n @watch('columnReorder', { immediate: false })\n handleColumnReorderChange() {\n if (this.columnReorder) this.columnDnD.attach(this);\n else this.columnDnD.detach();\n this.scheduleRender('header');\n }\n\n @watch('lazyLoad', 'lazyLoadThreshold', { immediate: false })\n handleLazyLoadChange() {\n if (this.lazyLoad) {\n queueMicrotask(() => this.setupLazyLoading());\n } else {\n if (this.lazyLoadHandler) this.lazyLoadContainer?.removeEventListener('scroll', this.lazyLoadHandler);\n this.lazyLoadHandler = null;\n this.lazyLoadContainer = null;\n }\n }\n\n @watch('columnMenu', { immediate: false })\n handleColumnMenuChange() {\n if (this.columnMenu) this.initColumnMenu();\n this.scheduleRender('header');\n }\n\n /** Column definitions in their actual painted order. Column state owns\n * visibility/order; pinned columns are partitioned to their physical edges\n * so right-pinned cells do not overlap later unpinned columns. */\n private getVisibleColumnDefinitions(): ColumnDefinition[] {\n if (this.columnManager.getAllStates().length === 0) return this.columns;\n const states = [\n ...this.columnManager.getPinnedLeft(),\n ...this.columnManager.getUnpinned(),\n ...this.columnManager.getPinnedRight(),\n ];\n const byKey = new Map(this.columns.map((column) => [column.key, column]));\n return states\n .map((state) => byKey.get(state.key))\n .filter((column): column is ColumnDefinition => !!column);\n }\n\n renderHeader() {\n if (!this.thead) return;\n \n const headerRow = document.createElement('tr');\n headerRow.className = 'column-header-row';\n\n // Tool column headers — must match createRow order\n if (this.rowReorder && this.rowDnD.isEnabled()) {\n const th = document.createElement('th');\n th.setAttribute('scope', 'col');\n th.className = 'drag-handle-cell';\n headerRow.appendChild(th);\n }\n\n if (this.masterDetail.isEnabled()) {\n const th = document.createElement('th');\n th.setAttribute('scope', 'col');\n th.className = 'detail-toggle-cell';\n headerRow.appendChild(th);\n }\n\n if (this.hasSelectionColumn()) {\n const selectCell = document.createElement('th');\n selectCell.setAttribute('scope', 'col');\n selectCell.className = 'select-column';\n if (this.selectionMode === 'multiple') {\n const filteredIndices = this.getSelectableIndices(this.getFilteredData());\n const selectedInFiltered = filteredIndices.filter(i => this.selectedRows.includes(i));\n const allSelected = selectedInFiltered.length === filteredIndices.length && filteredIndices.length > 0;\n const someSelected = selectedInFiltered.length > 0 && selectedInFiltered.length < filteredIndices.length;\n selectCell.innerHTML = `<snice-checkbox class=\"select-all\" size=\"small\" compact ${allSelected ? 'checked' : ''}></snice-checkbox>`;\n\n // Set indeterminate after insertion.\n setTimeout(() => {\n const checkbox = selectCell.querySelector('.select-all') as HTMLInputElement;\n if (checkbox) checkbox.indeterminate = someSelected;\n }, 0);\n } else {\n selectCell.setAttribute('aria-label', 'Select one row');\n }\n headerRow.appendChild(selectCell);\n }\n\n const visibleColumns = this.getVisibleColumnDefinitions();\n\n visibleColumns.forEach(column => {\n\n const th = document.createElement('th');\n th.setAttribute('data-key', column.key);\n th.setAttribute('scope', 'col');\n // Reflect current sort direction for SR users.\n if (this.sortable && column.sortable !== false) {\n const sortState = this.currentSort.find(s => s.column === column.key);\n if (sortState?.direction === 'asc') th.setAttribute('aria-sort', 'ascending');\n else if (sortState?.direction === 'desc') th.setAttribute('aria-sort', 'descending');\n else th.setAttribute('aria-sort', 'none');\n }\n\n // Apply column width\n const state = this.columnManager.getState(column.key);\n if (state) {\n th.style.width = `${state.width}px`;\n\n // Pinned column sticky positioning\n if (state.pinned === 'left') {\n const offsets = this.columnManager.getPinnedLeftOffsets();\n th.classList.add('pinned-cell');\n th.style.position = 'sticky';\n th.style.left = `${offsets.get(column.key) ?? 0}px`;\n th.style.zIndex = '2';\n } else if (state.pinned === 'right') {\n const offsets = this.columnManager.getPinnedRightOffsets();\n th.classList.add('pinned-cell');\n th.style.position = 'sticky';\n th.style.right = `${offsets.get(column.key) ?? 0}px`;\n th.style.zIndex = '2';\n }\n }\n\n if (this.sortable && column.sortable !== false) {\n th.classList.add('sortable');\n th.setAttribute('role', 'button');\n // A role=button must be focusable and named, or the keyboard cannot\n // sort at all. Matches the declarative header in snice-header.ts.\n th.setAttribute('tabindex', '0');\n th.setAttribute('aria-label', `Sort by ${column.label}`);\n th.innerHTML = this.renderSortableHeader(column);\n } else {\n th.textContent = column.label;\n }\n\n // Filter indicator\n if (this.filterEngine.hasColumnFilter(column.key)) {\n th.classList.add('filtered');\n }\n\n // Resize handle\n if (this.columnResize && column.resizable !== false) {\n const handle = document.createElement('span');\n handle.className = 'resize-handle';\n handle.addEventListener('mousedown', (e) => {\n e.stopPropagation();\n this.columnManager.startResize(column.key, e.clientX);\n });\n handle.addEventListener('dblclick', (e) => {\n e.stopPropagation();\n if (this.tbody) {\n this.columnManager.autoSizeColumn(column.key, this.tbody);\n this.renderHeader();\n this.renderBody();\n }\n });\n th.appendChild(handle);\n // No inline position:relative here — inline styles outrank the\n // stylesheet and would stomp the sticky header (thead th) and\n // pinned-column sticky positioning. `position: sticky` is itself a\n // positioned ancestor, so the absolutely-positioned resize handle\n // anchors correctly without it.\n }\n\n // Column menu (right-click)\n if (this.columnMenu) {\n th.addEventListener('contextmenu', (e) => {\n e.preventDefault();\n const colState = this.columnManager.getState(column.key);\n this.columnMenuManager.show(column.key, e.clientX, e.clientY, {\n sortable: this.sortable && column.sortable !== false,\n filterable: column.filterable !== false,\n hideable: colState?.hideable,\n pinnable: colState?.pinnable,\n pinned: colState?.pinned,\n });\n });\n }\n\n // Column DnD\n if (this.columnReorder && this.columnDnD.isEnabled()) {\n // A pinned column has a fixed physical edge. Presenting it as draggable\n // would emit a reorder event that the column manager correctly ignores.\n this.columnDnD.makeHeaderDraggable(th, column.key, column.reorderable !== false && !state?.pinned);\n }\n\n headerRow.appendChild(th);\n });\n\n this.thead.innerHTML = '';\n\n // Column groups header row (if any)\n const groups = this.columnManager.getColumnGroups();\n if (groups.length > 0) {\n const groupRow = document.createElement('tr');\n groupRow.className = 'column-group-row';\n // Tool-column spacers must line up with the equivalent cells in the main\n // header row before the grouped data-column runs.\n const toolColumnClasses = [\n this.rowReorder && this.rowDnD.isEnabled() ? 'drag-handle-cell' : '',\n this.masterDetail.isEnabled() ? 'detail-toggle-cell' : '',\n this.hasSelectionColumn() ? 'select-column' : '',\n ].filter(Boolean);\n for (const className of toolColumnClasses) {\n const spacer = document.createElement('th');\n spacer.className = className;\n spacer.setAttribute('aria-hidden', 'true');\n groupRow.appendChild(spacer);\n }\n const groupedHeaders = document.createElement('template');\n groupedHeaders.innerHTML = this.columnManager.renderGroupHeaders(\n visibleColumns.map((column) => column.key)\n );\n groupRow.appendChild(groupedHeaders.content);\n this.thead.appendChild(groupRow);\n }\n\n this.thead.appendChild(headerRow);\n\n // Header filter row (if enabled)\n if (this.headerFilters) {\n const filterRow = document.createElement('tr');\n filterRow.className = 'header-filter-row';\n\n if (this.rowReorder && this.rowDnD.isEnabled()) {\n const spacer = document.createElement('td');\n spacer.className = 'drag-handle-cell';\n filterRow.appendChild(spacer);\n }\n if (this.masterDetail.isEnabled()) {\n const spacer = document.createElement('td');\n spacer.className = 'detail-toggle-cell';\n filterRow.appendChild(spacer);\n }\n if (this.hasSelectionColumn()) {\n const spacer = document.createElement('td');\n spacer.className = 'select-column';\n filterRow.appendChild(spacer);\n }\n\n visibleColumns.forEach(column => {\n const td = document.createElement('td');\n const input = document.createElement('snice-input') as any;\n input.size = 'small';\n input.placeholder = `Filter ${column.label}...`;\n input.setAttribute('data-column', column.key);\n input.value = this.filterEngine.getHeaderFilter(column.key);\n input.style.cssText = 'width:100%;--snice-color-border:transparent;--snice-border-radius-md:0;';\n input.addEventListener('input', () => {\n // A3: engine model updates synchronously (cheap); the expensive\n // re-filter + re-render is debounced so a keystroke burst is one apply.\n this.filterEngine.setHeaderFilter(column.key, input.value);\n this.debouncedApplyClientFilters();\n });\n td.appendChild(input);\n filterRow.appendChild(td);\n });\n\n this.thead.appendChild(filterRow);\n }\n }\n\n renderSortableHeader(column: any): string {\n const sortItem = this.currentSort.find(s => s.column === column.key);\n const sortIndex = this.currentSort.findIndex(s => s.column === column.key);\n const isActive = !!sortItem;\n\n const chevronUp = `<svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 5l4-4 4 4\"/></svg>`;\n const chevronDown = `<svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 1l4 4 4-4\"/></svg>`;\n\n let indicator = `<span style=\"display:flex;flex-direction:column;gap:0;opacity:0.3\">${chevronUp}${chevronDown}</span>`;\n let orderNumber = '';\n\n if (sortItem) {\n if (sortItem.direction === 'asc') {\n indicator = chevronUp;\n } else if (sortItem.direction === 'desc') {\n indicator = chevronDown;\n }\n\n if (this.currentSort.length > 1) {\n orderNumber = `<span class=\"sort-order\">${sortIndex + 1}</span>`;\n }\n }\n\n const indicatorClasses = ['sort-indicator', isActive ? 'active' : ''].filter(Boolean).join(' ');\n\n return `\n <div class=\"sort-header\">\n <span>${column.label}</span>\n <div class=\"${indicatorClasses}\">\n ${indicator}\n ${orderNumber}\n </div>\n </div>\n `;\n }\n\n\n renderBody() {\n if (!this.tbody) return;\n\n // Update column manager when columns change\n if (this.columns.length > 0) {\n this.columnManager.initialize(this.columns, this);\n }\n\n // F: keep the grouping model's aggregator list current before any\n // isEnabled() check below — isEnabled() reports aggregation-only tables too,\n // and setColumns is what tells it which columns aggregate.\n if (this.grouping.setColumns(this.columns)) this.invalidateGroupingCache();\n\n // In grouped client-pagination mode the public total is the flattened\n // display model (headers + visible rows + aggregate footers), including on\n // the virtual path which returns before the ordinary pagination block.\n if (this.pagination && this.paginationMode === 'client') {\n if (this.usesGroupingDisplayModel()) {\n this.totalItems = this.getGroupingItems().length;\n } else if (this.treeData.isEnabled()) {\n this.totalItems = this.getTreeDisplayRows(false).length;\n }\n }\n\n // Self-heal: virtualize requested but the virtualizer never enabled\n // (property assigned after @ready, or the one-shot rAF setup missed the\n // scroll container). Never fall through to an empty or full render.\n if (this.virtualize && !this.virtualizer.isEnabled()) {\n this.setupVirtualization();\n }\n\n // Virtualized rendering: delegate to virtualizer. Total row count comes\n // from the feature-aware model (flattened tree rows when tree data is on),\n // NOT the raw filtered data — otherwise the virtualizer windows the wrong\n // dataset and expand/collapse silently no-ops.\n if (this.virtualize && this.virtualizer.isEnabled()) {\n this.virtualRowsSnapshot = this.getVirtualRows();\n this.virtualizer.setTotalRows(this.virtualRowsSnapshot.length);\n // The virtualizer's afterRender hook re-establishes grid ARIA/focus on\n // the freshly inserted window.\n\n // Still render pagination\n if (this.pagination) this.renderPagination();\n return;\n }\n\n if (this.data.length === 0 && this.columns.length > 0) {\n // Empty / loading / error states replace the body with a single message\n // row. Reset the recycler map so a later data render starts from a clean\n // slate (no stale reuse candidates pointing at removed rows).\n this.tbody.innerHTML = '';\n this.renderedRows = new Map();\n\n const toolCols = (this.hasSelectionColumn() ? 1 : 0)\n + (this.masterDetail.isEnabled() ? 1 : 0)\n + (this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0);\n const colSpan = this.columns.length + toolCols;\n\n if (this.loading) {\n // Show loading spinner\n const tr = document.createElement('tr');\n const td = document.createElement('td');\n td.colSpan = colSpan;\n td.className = 'no-data';\n td.innerHTML = '<snice-progress variant=\"circular\" indeterminate size=\"small\"></snice-progress>';\n tr.appendChild(td);\n this.tbody.appendChild(tr);\n return;\n } else if (this.loadError) {\n // Show error state — surfaces a failed remote load instead of\n // silently falling through to the generic \"No data\" empty state.\n const tr = document.createElement('tr');\n const td = document.createElement('td');\n td.colSpan = colSpan;\n td.className = 'no-data';\n const errorDiv = document.createElement('div');\n errorDiv.className = 'table-error-message';\n errorDiv.textContent = `⚠️ ${this.loadError}`;\n td.appendChild(errorDiv);\n tr.appendChild(td);\n this.tbody.appendChild(tr);\n return;\n } else {\n // Show empty state\n const tr = document.createElement('tr');\n const td = document.createElement('td');\n td.colSpan = colSpan;\n td.className = 'no-data';\n const slotted = this.querySelector('[slot=\"empty-state\"]');\n if (slotted) {\n td.appendChild(slotted.cloneNode(true));\n } else {\n const empty = document.createElement('snice-empty-state');\n empty.setAttribute('size', 'small');\n empty.setAttribute('icon', '📭');\n empty.setAttribute('title', 'No data');\n empty.setAttribute('description', 'No records to display.');\n td.appendChild(empty);\n }\n tr.appendChild(td);\n this.tbody.appendChild(tr);\n return;\n }\n }\n\n // Apply client-side filters (cached snapshot — see getFilteredData).\n const filteredData = this.getFilteredData();\n\n // Client-side pagination: slice ordinary data. Group and tree modes page\n // their own flattened models and already set totalItems above; overwriting\n // it here with the raw filtered-row count made public state differ between\n // virtual and non-virtual rendering.\n let displayData = filteredData;\n if (this.pagination && this.paginationMode === 'client'\n && !this.usesGroupingDisplayModel() && !this.treeData.isEnabled()) {\n this.totalItems = filteredData.length;\n const startIndex = (this.currentPage - 1) * this.pageSize;\n displayData = filteredData.slice(startIndex, startIndex + this.pageSize);\n }\n\n const extraCols = (this.hasSelectionColumn() ? 1 : 0) + (this.masterDetail.isEnabled() ? 1 : 0) + (this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0);\n const managedColumns = this.columnManager.getAllStates();\n const visibleColumnCount = managedColumns.length > 0\n ? this.columnManager.getVisibleColumns().length\n : this.columns.length;\n const totalColSpan = visibleColumnCount + extraCols;\n const structuralSig = this.computeStructuralSig();\n\n // Task B: describe the desired body as an ordered list of keyed entries,\n // then reconcile the tbody to match. Rows whose object + signature are\n // unchanged are reused (moved on reorder); only new/changed rows construct\n // fresh DOM. Replaces the old wipe-and-rebuild-everything path.\n const entries: RowEntry[] = [];\n\n // Pinned top rows — few, and rebuilt each pass under a positional key.\n this.pinnedTopRows.forEach((row, i) => {\n entries.push({\n key: `__pinned_top_${i}`,\n sig: 'pinned',\n alwaysRebuild: true,\n create: () => {\n const tr = this.createRow(row, -1);\n tr.classList.add('pinned-row', 'pinned-row--top');\n return tr;\n },\n });\n });\n\n if (this.usesGroupingDisplayModel()) {\n // F: page over the FLATTENED group+row+aggregate list (built from the full\n // filtered data — grouping must see every row, not a pre-sliced page).\n const items = this.getDisplayedGroupingItems();\n\n for (const item of items) {\n if (item.type === 'group') {\n entries.push({\n key: item.key,\n // Group + aggregate rows are few; rebuild them each pass so their\n // count / expanded / selection / aggregate state is always fresh\n // (perf-critical recycling is for the many DATA rows below).\n sig: `${structuralSig}|grp:${item.key}:${item.expanded ? 1 : 0}:${item.count}`,\n alwaysRebuild: true,\n create: () => this.createGroupRow(item, totalColSpan),\n });\n } else if (item.type === 'aggregate') {\n entries.push({\n key: item.key,\n sig: `${structuralSig}|agg:${item.key}`,\n alwaysRebuild: true,\n create: () => this.createAggregateRow(item, totalColSpan),\n });\n } else {\n // Data row — index is its position in `this.data`, not the flattened\n // list (selection / editing / data-index all key off the data index).\n const index = this.indexOfRow(item.data);\n const editing = this.isRowEditing(index);\n entries.push({\n key: item.data,\n sig: this.rowSignature(item.data, index, structuralSig) + (editing ? '|edit' : ''),\n alwaysRebuild: editing,\n restampIndex: index,\n create: () => this.createRow(item.data, index),\n });\n\n // Grouping/aggregation must compose with master-detail exactly like\n // the ordinary and virtual paths. Aggregation-only mode also routes\n // through this branch, so omitting this entry made enabling a footer\n // silently remove every expanded detail panel.\n if (this.masterDetail.isEnabled() && this.masterDetail.isExpanded(index)) {\n entries.push({\n key: `__detail_${index}`,\n sig: 'detail',\n alwaysRebuild: true,\n create: () =>\n this.masterDetail.createDetailRow(item.data, index, totalColSpan) ??\n document.createElement('tr'),\n });\n }\n }\n }\n } else if (this.treeData.isEnabled()) {\n const treeRows = this.getTreeDisplayRows(true);\n treeRows.forEach(({ data: rowData, index, treeRow, groupItem }) => {\n if (groupItem?.type === 'aggregate') {\n entries.push({\n key: groupItem.key,\n sig: `${structuralSig}|agg:${groupItem.key}`,\n alwaysRebuild: true,\n create: () => this.createAggregateRow(groupItem, totalColSpan),\n });\n return;\n }\n if (!treeRow) return;\n const editing = this.isRowEditing(index);\n entries.push({\n key: rowData,\n // The edit marker makes the editing→display transition a signature\n // change, so a row leaving edit state rebuilds (drops its editor DOM).\n sig: this.rowSignature(rowData, index, structuralSig, treeRow) + (editing ? '|edit' : ''),\n alwaysRebuild: editing,\n restampIndex: index,\n create: () => this.createRow(rowData, index, treeRow),\n });\n });\n } else {\n displayData.forEach((rowData) => {\n const index = this.indexOfRow(rowData);\n const editing = this.isRowEditing(index);\n entries.push({\n key: rowData,\n sig: this.rowSignature(rowData, index, structuralSig) + (editing ? '|edit' : ''),\n alwaysRebuild: editing,\n restampIndex: index,\n create: () => this.createRow(rowData, index),\n });\n\n // Detail row (master-detail): shape depends on state, always rebuilt.\n if (this.masterDetail.isEnabled() && this.masterDetail.isExpanded(index)) {\n entries.push({\n key: `__detail_${index}`,\n sig: 'detail',\n alwaysRebuild: true,\n create: () =>\n this.masterDetail.createDetailRow(rowData, index, totalColSpan) ??\n document.createElement('tr'),\n });\n }\n });\n }\n\n // Pinned bottom rows\n this.pinnedBottomRows.forEach((row, i) => {\n entries.push({\n key: `__pinned_bottom_${i}`,\n sig: 'pinned',\n alwaysRebuild: true,\n create: () => {\n const tr = this.createRow(row, -1);\n tr.classList.add('pinned-row', 'pinned-row--bottom');\n return tr;\n },\n });\n });\n\n this.reconcileRows(entries);\n\n // Re-establish grid role + roving tabindex after the body changed.\n this.keyboard.refresh();\n\n // Render pagination after body\n if (this.pagination) {\n this.renderPagination();\n }\n }\n\n // ── Task B: render-path reconciler ──────────────────────────────────────\n //\n // Reconcile the tbody's children to `entries` (an ordered list) while reusing\n // existing <tr> elements keyed by identity. Mirrors the keyed-move algorithm\n // in src/parts.ts `_reconcileKeyed`: drop departed rows first, then walk the\n // survivors placing each desired row, moving out-of-position ones via a\n // detach-into-fragment step (avoids the happy-dom stale-querySelectorAll bug\n // that an in-place insertBefore move triggers). Stationary rows are never\n // touched, so an unchanged re-render performs zero moves and constructs zero\n // cells.\n private reconcileRows(entries: RowEntry[]) {\n const tbody = this.tbody;\n if (!tbody) return;\n\n const next = new Map<unknown, { el: HTMLElement; sig: string }>();\n const desired: HTMLElement[] = [];\n const used = new Set<HTMLElement>();\n\n for (const entry of entries) {\n const prev = this.renderedRows.get(entry.key);\n let el: HTMLElement;\n\n if (prev && !used.has(prev.el) && !entry.alwaysRebuild && prev.sig === entry.sig) {\n // Reuse the existing element. A reorder may have changed its logical\n // index without changing its signature — re-stamp index-derived DOM.\n el = prev.el;\n if (entry.restampIndex !== undefined) this.restampRowIndex(el, entry.restampIndex);\n } else {\n el = entry.create();\n }\n\n used.add(el);\n desired.push(el);\n // First occurrence wins on a duplicate key (matches rowIndexMap / _reconcileKeyed).\n if (!next.has(entry.key)) next.set(entry.key, { el, sig: entry.sig });\n }\n\n // Remove any current child that is not part of the desired set (departed\n // rows, plus a prior empty/loading/error message row).\n const desiredSet = new Set(desired);\n for (const child of Array.from(tbody.children)) {\n if (!desiredSet.has(child as HTMLElement)) child.remove();\n }\n\n // Place desired rows in order. `ref` walks the surviving children; a row\n // already sitting at `ref` is skipped, anything else is moved/inserted here.\n let ref: Node | null = tbody.firstChild;\n for (const el of desired) {\n if (el === ref) {\n ref = el.nextSibling;\n } else {\n const frag = document.createDocumentFragment();\n frag.appendChild(el); // detaches el from its old position (if any)\n tbody.insertBefore(frag, ref);\n }\n }\n\n this.renderedRows = next;\n }\n\n /**\n * A structural fingerprint of everything `createRow` reads that is NOT\n * per-row data: visible columns + their widths/pinning/offsets, tool columns,\n * density, uniform row height, tree group column. A change here (resize, pin,\n * hide/show, density) forces every row to rebuild, since a reused element\n * would carry stale layout.\n */\n // E2: stable identity for a custom renderer function, so computeStructuralSig\n // can encode \"which renderer\" without stringifying the function. A new\n // function reference gets a new id → the structural signature changes →\n // reused rows rebuild.\n private rendererIds = new WeakMap<object, number>();\n private rendererIdSeq = 0;\n private rendererIdFor(fn?: unknown): string {\n if (typeof fn !== 'function') return '';\n let id = this.rendererIds.get(fn as object);\n if (id === undefined) {\n id = ++this.rendererIdSeq;\n this.rendererIds.set(fn as object, id);\n }\n return String(id);\n }\n\n private computeStructuralSig(): string {\n const cols = this.getVisibleColumnDefinitions().map(col => {\n const state = this.columnManager.getState(col.key);\n // E2: fold each column's custom renderer identity in so swapping a\n // renderCell function invalidates every reused row (Task B recycling).\n const rc = this.rendererIdFor((col as any).renderCell);\n return `${col.key}:${state?.width ?? ''}:${state?.pinned ?? ''}:rc${rc}`;\n });\n\n return [\n cols.join(','),\n `pl=${Array.from(this.columnManager.getPinnedLeftOffsets().values()).join('/')}`,\n `pr=${Array.from(this.columnManager.getPinnedRightOffsets().values()).join('/')}`,\n `sel=${this.selectable ? this.selectionMode : 'off'}`,\n `selectable=${this.rendererIdFor(this.selectabilityCheck)}`,\n `md=${this.masterDetail.isEnabled() ? 1 : 0}`,\n `rr=${this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0}`,\n `rh=${this.rowHeight}`,\n `d=${this.density}`,\n `tree=${this.treeData.isEnabled() ? this.treeData.getGroupColumn() : ''}`,\n ].join('|');\n }\n\n /**\n * The per-row rebuild signature. Selection and the plain data-index are\n * re-stamped on reuse (not here) so they never force a rebuild; this captures\n * only what a re-stamp cannot repair: tree node state, per-row height, and —\n * when a feature embeds the index in a row-scoped closure (row DnD drag index,\n * master-detail toggle index) — the index itself.\n */\n private rowSignature(rowData: any, index: number, structuralSig: string, treeRow?: TreeRow): string {\n const parts = [structuralSig];\n if (treeRow) parts.push(`t:${treeRow.depth}:${treeRow.expanded ? 1 : 0}:${treeRow.hasChildren ? 1 : 0}`);\n if (this.rowHeightCallback) parts.push(`h:${this.rowHeightCallback(rowData, index)}`);\n if (this.masterDetail.isEnabled()) parts.push(`detail:${this.masterDetail.isExpanded(index) ? 1 : 0}`);\n // Features whose row DOM closes over the index must rebuild when it changes.\n if ((this.rowReorder && this.rowDnD.isEnabled()) || this.masterDetail.isEnabled()) {\n parts.push(`i:${index}`);\n }\n return parts.join('|');\n }\n\n /** Whether the row at `index` currently hosts an inline editor. */\n private isRowEditing(index: number): boolean {\n if (!this.editable) return false;\n if (this.editMode === 'row') {\n const rowState = this.editor.getRowEditState();\n return !!(rowState?.isEditing && rowState.rowIndex === index);\n }\n const cellState = this.editor.getCellEditState();\n return !!(cellState?.isEditing && cellState.rowIndex === index);\n }\n\n /**\n * Update a reused row's index-derived DOM after a reorder: the tr's\n * `data-index`, its selection reflection, and the select checkbox's\n * `data-row-index` (read back by the click/change handlers). Everything else\n * that depends on the index is captured by the signature and forces a rebuild.\n */\n private restampRowIndex(el: HTMLElement, index: number) {\n el.setAttribute('data-index', String(index));\n const isSelected = this.selectedRows.includes(index);\n el.setAttribute('data-selected', String(isSelected));\n const checkbox = el.querySelector('snice-checkbox.row-select') as any;\n if (checkbox) {\n checkbox.setAttribute('data-row-index', String(index));\n checkbox.checked = isSelected;\n const disabled = !!(this.selectabilityCheck && !this.selectabilityCheck(this.data[index], index));\n checkbox.disabled = disabled;\n checkbox.toggleAttribute('disabled', disabled);\n }\n }\n\n /**\n * Drop the cached <tr> for a row object so the next render rebuilds it. Used\n * when the table mutates a row in place (cell-edit commit) — the object\n * identity is unchanged, so the reconciler would otherwise reuse the stale\n * cell DOM.\n */\n private invalidateRenderedRow(rowData: any) {\n this.renderedRows.delete(rowData);\n }\n\n // F: the denominator for client-side pagination. When grouping/aggregation is\n // active the page unit is a FLATTENED display item (group/data/aggregate row),\n // not a raw data row — so pages cover the whole flattened list. Ungrouped\n // behavior is unchanged (data.length).\n private paginationTotal(): number {\n if (this.paginationMode !== 'client') return this.totalItems;\n if (this.usesGroupingDisplayModel()) return this.getGroupingItems().length;\n if (this.treeData.isEnabled()) return this.getTreeDisplayRows(false).length;\n return this.data.length;\n }\n\n private get totalPages(): number {\n const total = this.paginationTotal();\n return Math.max(1, Math.ceil(total / this.pageSize));\n }\n\n goToPage(page: number) {\n const clamped = Math.max(1, Math.min(page, this.totalPages));\n if (clamped === this.currentPage) return;\n this.currentPage = clamped;\n\n if (this.paginationMode === 'server' && this.mode === 'remote') {\n this.debouncedDataRequest();\n } else {\n this.renderBody();\n }\n\n this.dispatchPageChange();\n }\n\n setPageSize(size: number) {\n this.pageSize = size;\n this.currentPage = 1;\n\n if (this.paginationMode === 'server' && this.mode === 'remote') {\n this.debouncedDataRequest();\n } else {\n this.renderBody();\n }\n\n this.dispatchPageChange();\n }\n\n @dispatch('page-change', { bubbles: true, composed: true })\n private dispatchPageChange() {\n return {\n page: this.currentPage,\n pageSize: this.pageSize,\n totalPages: this.totalPages,\n totalItems: this.paginationTotal()\n };\n }\n\n renderPagination() {\n const container = this.shadowRoot?.querySelector('.table-pagination-container');\n if (!container) return;\n\n if (!this.pagination) {\n container.innerHTML = '';\n return;\n }\n\n const total = this.paginationTotal();\n const totalPages = this.totalPages;\n const start = Math.min((this.currentPage - 1) * this.pageSize + 1, total);\n const end = Math.min(this.currentPage * this.pageSize, total);\n\n // Build page buttons\n const pageButtons: string[] = [];\n const maxVisible = 7;\n\n if (totalPages <= maxVisible) {\n for (let i = 1; i <= totalPages; i++) {\n pageButtons.push(this.pageButton(i));\n }\n } else {\n pageButtons.push(this.pageButton(1));\n if (this.currentPage > 3) pageButtons.push('<span class=\"pagination__ellipsis\">…</span>');\n\n const rangeStart = Math.max(2, this.currentPage - 1);\n const rangeEnd = Math.min(totalPages - 1, this.currentPage + 1);\n for (let i = rangeStart; i <= rangeEnd; i++) {\n pageButtons.push(this.pageButton(i));\n }\n\n if (this.currentPage < totalPages - 2) pageButtons.push('<span class=\"pagination__ellipsis\">…</span>');\n pageButtons.push(this.pageButton(totalPages));\n }\n\n container.innerHTML = '';\n\n const pagination = document.createElement('div');\n pagination.className = 'pagination';\n pagination.setAttribute('part', 'pagination');\n\n // Info\n const info = document.createElement('div');\n info.className = 'pagination__info';\n info.textContent = `Showing ${start}\\u2013${end} of ${total}`;\n pagination.appendChild(info);\n\n // Controls\n const controls = document.createElement('div');\n controls.className = 'pagination__controls';\n controls.innerHTML = `\n <button class=\"pagination__btn pagination__first\" ${this.currentPage <= 1 ? 'disabled' : ''} data-page=\"1\" aria-label=\"First page\">\\u27E8\\u27E8</button>\n <button class=\"pagination__btn pagination__prev\" ${this.currentPage <= 1 ? 'disabled' : ''} data-page=\"${this.currentPage - 1}\" aria-label=\"Previous page\">\\u27E8</button>\n ${pageButtons.join('')}\n <button class=\"pagination__btn pagination__next\" ${this.currentPage >= totalPages ? 'disabled' : ''} data-page=\"${this.currentPage + 1}\" aria-label=\"Next page\">\\u27E9</button>\n <button class=\"pagination__btn pagination__last\" ${this.currentPage >= totalPages ? 'disabled' : ''} data-page=\"${totalPages}\" aria-label=\"Last page\">\\u27E9\\u27E9</button>\n `;\n pagination.appendChild(controls);\n\n // Page size selector — use snice-select\n const sizeContainer = document.createElement('div');\n sizeContainer.className = 'pagination__size';\n const sizeLabel = document.createElement('label');\n sizeLabel.textContent = 'Rows per page:';\n sizeContainer.appendChild(sizeLabel);\n\n const sizeSelect = document.createElement('snice-select') as any;\n sizeSelect.size = 'small';\n sizeSelect.className = 'pagination__size-select';\n // Always include the CURRENT pageSize: when it isn't in pageSizes (e.g.\n // pageSize=5 with the default list) no option matches the value and the\n // select shows its placeholder instead of the active size.\n const sizeOptions = this.pageSizes.includes(this.pageSize)\n ? this.pageSizes\n : [...this.pageSizes, this.pageSize].sort((a, b) => a - b);\n for (const s of sizeOptions) {\n const opt = document.createElement('snice-option') as any;\n opt.setAttribute('value', String(s));\n opt.textContent = String(s);\n if (s === this.pageSize) opt.setAttribute('selected', '');\n sizeSelect.appendChild(opt);\n }\n sizeSelect.value = String(this.pageSize);\n sizeContainer.appendChild(sizeSelect);\n pagination.appendChild(sizeContainer);\n\n container.appendChild(pagination);\n\n // Bind page button events\n controls.querySelectorAll('[data-page]').forEach(btn => {\n btn.addEventListener('click', () => {\n const page = parseInt((btn as HTMLElement).getAttribute('data-page')!);\n this.goToPage(page);\n });\n });\n\n // Bind size select event\n sizeSelect.addEventListener('select-change', (e: CustomEvent) => {\n this.setPageSize(parseInt(e.detail.value));\n });\n }\n\n private pageButton(page: number): string {\n const active = page === this.currentPage ? ' pagination__btn--active' : '';\n return `<button class=\"pagination__btn pagination__page${active}\" data-page=\"${page}\">${page}</button>`;\n }\n\n /** Create a cell element safely using createElement + setAttribute */\n createCellElement(column: any, value: any, row?: any): HTMLElement {\n // E2: a custom renderCell bypasses the type-based cell entirely. A string\n // result is set via textContent (never innerHTML — no HTML parsing / XSS);\n // an HTMLElement is used as-is.\n if (typeof column.renderCell === 'function') {\n const rendered = column.renderCell(value, row, column);\n if (rendered instanceof HTMLElement) return rendered;\n const span = document.createElement('span');\n span.className = 'custom-cell';\n span.textContent = rendered == null ? '' : String(rendered);\n return span;\n }\n\n const tagName = this.getCellTagName(column.type);\n const el = document.createElement(tagName) as any;\n\n // Base attributes. Only force `align` if the column definition specifies\n // one; otherwise let the cell pick its type-appropriate default (numbers\n // right, rating/boolean center, text left). Hard-coding 'left' here fought\n // the cell's own type-based text-align and made number values drift.\n el.setAttribute('type', column.type || 'text');\n if (column.align) el.setAttribute('align', column.align);\n el.setAttribute('in-table', 'true');\n\n // Set the property directly so arrays/objects reach progress, sparkline,\n // JSON, action, and tag cells without a lossy attribute conversion. Keep a\n // primitive attribute for declarative inspection and CSS selectors.\n if (column.type === 'sparkline' && value !== null && typeof value === 'object') {\n el.setAttribute('value', JSON.stringify(value));\n if (Array.isArray(value)) el.data = value;\n } else {\n el.value = value ?? '';\n }\n if (value === null || typeof value !== 'object') {\n el.setAttribute('value', String(value ?? ''));\n }\n\n // Column definition as property (for formatter access etc.)\n el.column = column;\n // Row-aware formatters, conditional formatting, and action-cell events all\n // consume the originating row through the cell's property API.\n el.rowData = row ?? null;\n\n // Type-specific attributes\n switch (column.type) {\n case 'number':\n case 'currency': {\n if (column.decimals !== undefined) el.setAttribute('decimals', String(column.decimals));\n if (column.thousandsSeparator) el.setAttribute('thousands-separator', 'true');\n if (column.prefix) el.setAttribute('prefix', column.prefix);\n if (column.suffix) el.setAttribute('suffix', column.suffix);\n if (column.type === 'currency') {\n const cf = column.currencyFormat;\n if (cf) {\n if (cf.currency) el.setAttribute('currency', cf.currency);\n if (cf.locale) el.setAttribute('locale', cf.locale);\n if (cf.display || cf.currencyDisplay) {\n el.setAttribute('currencydisplay', cf.currencyDisplay || cf.display);\n }\n if (cf.decimals !== undefined) el.setAttribute('decimals', String(cf.decimals));\n if (cf.thousandsSeparator === false) el.thousandsSeparator = false;\n }\n }\n break;\n }\n case 'date':\n if (column.dateFormat) el.setAttribute('date-format', column.dateFormat);\n break;\n case 'boolean':\n if (column.useSymbols) el.setAttribute('use-symbols', 'true');\n if (column.trueSymbol) el.setAttribute('true-symbol', column.trueSymbol);\n if (column.falseSymbol) el.setAttribute('false-symbol', column.falseSymbol);\n if (column.trueValue) el.setAttribute('true-value', column.trueValue);\n if (column.falseValue) el.setAttribute('false-value', column.falseValue);\n break;\n case 'sparkline': {\n const sf = column.sparklineFormat;\n if (sf) {\n if (sf.color) el.setAttribute('color', sf.color);\n if (sf.type) el.setAttribute('chart-type', sf.type);\n if (sf.width) el.setAttribute('width', String(sf.width));\n if (sf.height) el.setAttribute('height', String(sf.height));\n }\n break;\n }\n case 'rating': {\n const rf = column.ratingFormat;\n if (rf) {\n if (rf.max) el.setAttribute('max', String(rf.max));\n if (rf.color) el.setAttribute('color', rf.color);\n }\n break;\n }\n case 'progress': {\n const pf = column.progressFormat;\n if (pf) {\n if (pf.max) el.setAttribute('max', String(pf.max));\n if (pf.color) el.setAttribute('color', pf.color);\n if (pf.showPercentage) el.setAttribute('show-percentage', 'true');\n }\n break;\n }\n case 'percentage':\n case 'percent': {\n const pf = column.percentageFormat;\n if (pf) {\n if (pf.decimals !== undefined) el.setAttribute('decimals', String(pf.decimals));\n if (pf.colorize) el.setAttribute('colorize', 'true');\n }\n break;\n }\n case 'status': {\n const sf = column.statusFormat;\n if (sf) {\n if (sf.variant) el.setAttribute('variant', sf.variant);\n if (sf.showDot) el.setAttribute('show-dot', 'true');\n }\n break;\n }\n case 'link': {\n const lf = column.linkFormat;\n if (lf) {\n if (lf.target) el.setAttribute('target', lf.target);\n if (lf.external) el.setAttribute('external', 'true');\n }\n break;\n }\n case 'image': {\n const imf = column.imageFormat;\n if (imf) {\n if (imf.shape) el.setAttribute('shape', imf.shape);\n if (imf.size) el.setAttribute('size', imf.size);\n }\n break;\n }\n case 'color': {\n const cf = column.colorFormat;\n if (cf) {\n if (cf.showSwatch !== false) el.setAttribute('show-swatch', 'true');\n if (cf.displayFormat) el.setAttribute('display-format', cf.displayFormat);\n }\n break;\n }\n case 'email': {\n const ef = column.emailFormat;\n if (ef) {\n if (ef.showIcon) el.setAttribute('show-icon', 'true');\n }\n break;\n }\n case 'phone': {\n const pf = column.phoneFormat;\n if (pf) {\n if (pf.showIcon) el.setAttribute('show-icon', 'true');\n if (pf.format) el.setAttribute('format', 'true');\n }\n break;\n }\n }\n\n return el;\n }\n\n getCellTagName(type: string): string {\n switch (type) {\n case 'text':\n return 'snice-cell-text';\n case 'number':\n return 'snice-cell-number';\n case 'currency':\n return 'snice-cell-currency';\n case 'date':\n return 'snice-cell-date';\n case 'boolean':\n return 'snice-cell-boolean';\n case 'rating':\n return 'snice-cell-rating';\n case 'progress':\n return 'snice-cell-progress';\n case 'duration':\n return 'snice-cell-duration';\n case 'filesize':\n return 'snice-cell-filesize';\n case 'sparkline':\n return 'snice-cell-sparkline';\n case 'image':\n return 'snice-cell-image';\n case 'percentage':\n case 'percent':\n return 'snice-cell-percentage';\n case 'tag':\n return 'snice-cell-tag';\n case 'status':\n return 'snice-cell-status';\n case 'actions':\n return 'snice-cell-actions';\n case 'link':\n return 'snice-cell-link';\n case 'email':\n return 'snice-cell-email';\n case 'phone':\n return 'snice-cell-phone';\n case 'color':\n return 'snice-cell-color';\n case 'location':\n return 'snice-cell-location';\n case 'json':\n return 'snice-cell-json';\n default:\n return 'snice-cell';\n }\n }\n\n private fsExitHandler: (() => void) | null = null;\n\n toggleFullscreen = async () => {\n const isFullscreen = this.classList.contains('table-fullscreen');\n if (isFullscreen) {\n this.classList.remove('table-fullscreen');\n if (document.fullscreenElement === this) {\n try { await document.exitFullscreen(); } catch { /* already exited */ }\n }\n if (this.fsExitHandler) {\n document.removeEventListener('fullscreenchange', this.fsExitHandler);\n this.fsExitHandler = null;\n }\n } else {\n this.classList.add('table-fullscreen');\n // Use the platform Fullscreen API — escapes the page's stacking context\n // (the showcase header has backdrop-filter which fights CSS-only overlays)\n // and gives the user the browser's native Esc-to-exit affordance.\n try {\n if (typeof this.requestFullscreen === 'function') {\n await this.requestFullscreen();\n }\n } catch {\n // Browser blocked it (e.g. not from a user gesture) — fall back to CSS.\n }\n // Sync class with the browser's fullscreen state\n this.fsExitHandler = () => {\n if (document.fullscreenElement !== this) {\n this.classList.remove('table-fullscreen');\n if (this.fsExitHandler) {\n document.removeEventListener('fullscreenchange', this.fsExitHandler);\n this.fsExitHandler = null;\n }\n }\n };\n document.addEventListener('fullscreenchange', this.fsExitHandler);\n }\n }\n\n private handleKeydown = (e: KeyboardEvent) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n\n const th = (e.target as HTMLElement).closest('th.sortable') as HTMLElement | null;\n if (!th) return;\n\n const columnKey = th.getAttribute('data-key');\n if (!columnKey) return;\n\n e.preventDefault();\n this.toggleSort(columnKey, true);\n };\n\n private handleClick = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n\n // Handle sortable header click — every click adds/cycles in multi-sort.\n const th = target.closest('th.sortable') as HTMLElement;\n if (th) {\n const columnKey = th.getAttribute('data-key');\n if (columnKey) {\n this.toggleSort(columnKey, true);\n }\n return;\n }\n\n // Handle row click\n const tr = target.closest('tbody tr') as HTMLElement;\n if (tr) {\n // Group rows have no data-index. Route the whole header cell (including\n // its chevron) through the table's one Snice-bound click handler so the\n // model toggles once and @dispatch emits from the host. Checkbox clicks\n // are handled by handleChange and must not also collapse the group.\n if (tr.classList.contains('group-header-row')) {\n if (target.closest('snice-checkbox.group-select')) return;\n const key = tr.getAttribute('data-group-key');\n const group = key\n ? this.getGroupingItems().find(\n (item): item is GroupRow => item.type === 'group' && item.key === key\n )\n : undefined;\n if (group) this.toggleGroup(group);\n return;\n }\n\n // Aggregate, spacer, loading, error, and empty-state rows are structural\n // rows, not row zero. Ignoring them prevents phantom selection/click\n // events caused by parseInt(null || '0').\n if (!tr.hasAttribute('data-index')) return;\n\n // Don't trigger if clicking on checkbox or other interactive elements\n if (target.matches('input[type=\"checkbox\"], button, a, .interactive, snice-checkbox, snice-button, snice-input, snice-select')) {\n return;\n }\n\n const rowIndex = parseInt(tr.getAttribute('data-index') || '0');\n const rowData = this.data[rowIndex];\n\n // Handle row selection if selectable. selectionMode + modifier intent\n // (ctrl/meta = additive toggle, shift = range) resolved in one place.\n if (this.selectable) {\n this.applyRowSelection(rowIndex, {\n additive: e.ctrlKey || e.metaKey,\n range: e.shiftKey,\n });\n }\n\n // Handle clickable row event\n if (this.clickable) {\n this.dispatchRowClicked(rowData, rowIndex);\n }\n }\n }\n\n private handleChange = (e: Event) => {\n const target = e.target as HTMLElement;\n\n // Handle snice-checkbox events (row-select and select-all)\n if (target.matches('snice-checkbox.row-select')) {\n const checkbox = target as any;\n const rowIndex = parseInt(checkbox.getAttribute('data-row-index') || '0');\n\n if (this.selectionMode === 'none') return;\n if (this.selectabilityCheck && !this.selectabilityCheck(this.data[rowIndex], rowIndex)) {\n checkbox.checked = this.selectedRows.includes(rowIndex);\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.selectedRows = checkbox.checked ? [rowIndex] : [];\n } else if (checkbox.checked) {\n if (!this.selectedRows.includes(rowIndex)) {\n this.selectedRows = [...this.selectedRows, rowIndex];\n }\n } else {\n this.selectedRows = this.selectedRows.filter(i => i !== rowIndex);\n }\n this.selectionAnchor = this.data[rowIndex];\n\n // DOM update happens in the selectedRows @watch (delta, one row).\n this.dispatchRowSelectionChanged(rowIndex, checkbox.checked);\n this.dispatchSelectionChanged();\n return;\n }\n\n // F: a group-header checkbox selects/deselects all rows in that group.\n if (target.matches('snice-checkbox.group-select')) {\n const checkbox = target as any;\n if (this.selectionMode !== 'multiple') return;\n\n const key = checkbox.getAttribute('data-group-key');\n const group = this.getGroupingItems().find(\n (it): it is GroupRow => it.type === 'group' && it.key === key\n );\n if (!group) return;\n\n const indices = this.getSelectableGroupIndices(group);\n if (checkbox.checked) {\n this.selectedRows = Array.from(new Set([...this.selectedRows, ...indices]));\n } else {\n const remove = new Set(indices);\n this.selectedRows = this.selectedRows.filter((i) => !remove.has(i));\n }\n\n // Row DOM + group/header checkboxes update in the selectedRows @watch.\n this.dispatchSelectionChanged();\n return;\n }\n\n if (target.matches('snice-checkbox.select-all')) {\n const checkbox = target as any;\n\n // Select-all only carries meaning in multiple mode.\n if (this.selectionMode !== 'multiple') return;\n\n if (checkbox.checked) {\n // Select only filtered/displayed rows, not all data\n this.selectedRows = this.getSelectableIndices(this.getFilteredData());\n } else {\n this.selectedRows = [];\n }\n\n // Row DOM + header checkbox update in the selectedRows @watch.\n this.dispatchSelectAllChanged(checkbox.checked);\n this.dispatchSelectionChanged();\n }\n }\n\n private onAttached = () => {\n // A controller attached. Only fetch if the user explicitly declared\n // remote mode (mode=\"remote\" on the element, or set programmatically).\n // Local mode is the default and means the table owns its dataset.\n if (this.mode !== 'remote') return;\n this.getTableConfig();\n this.getTableData();\n }\n\n private searchDebounceTimeout: any = null;\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLElement;\n const input = target as HTMLInputElement;\n this.searchText = input.value;\n\n // Manual debounce implementation\n if (this.searchDebounceTimeout) {\n clearTimeout(this.searchDebounceTimeout);\n }\n this.searchDebounceTimeout = setTimeout(() => {\n if (this.mode === 'remote') this.getTableData();\n else this.setQuickFilter(this.searchText);\n }, this.searchDebounce);\n }\n\n private handleQuickFilterInput = (e: Event) => {\n const input = e.target as HTMLInputElement;\n if (this.filterInputDebounceTimeout) clearTimeout(this.filterInputDebounceTimeout);\n this.filterInputDebounceTimeout = setTimeout(() => {\n this.filterInputDebounceTimeout = null;\n this.setQuickFilter(input.value || '');\n }, SniceTable.FILTER_INPUT_DEBOUNCE_MS);\n }\n\n private selectorDebounceTimeout: any = null;\n\n private handleSelectorChange = (e: CustomEvent) => {\n this.selector = Array.isArray(e.detail.value) ? e.detail.value.join(',') : e.detail.value;\n\n // Manual debounce implementation\n if (this.selectorDebounceTimeout) {\n clearTimeout(this.selectorDebounceTimeout);\n }\n this.selectorDebounceTimeout = setTimeout(() => {\n this.debouncedDataRequest();\n }, 150);\n }\n\n\n // A2: full sweep — kept for external/programmatic callers and post-render\n // resync. NOT on the single-toggle path (that goes through the delta in\n // handleSelectedRowsChange → updateRowSelectionStateFor).\n updateRowSelectionState() {\n if (!this.tbody) return;\n\n const rows = this.tbody.querySelectorAll('tr');\n rows.forEach((row, index) => {\n const isSelected = this.selectedRows.includes(index);\n row.setAttribute('data-selected', String(isSelected));\n\n const checkbox = row.querySelector('snice-checkbox.row-select') as any;\n if (checkbox) {\n checkbox.checked = isSelected;\n }\n });\n }\n\n // A2: reflect one row's selection into the DOM (located by data-index). The\n // reconciler (Task B) re-stamps data-index on moved rows, so this stays\n // correct after reorder. No-op if the row isn't in the current window.\n private updateRowSelectionStateFor(index: number, isSelected: boolean) {\n if (!this.tbody) return;\n const row = this.tbody.querySelector(`tr[data-index=\"${index}\"]`) as HTMLElement | null;\n if (!row) return;\n row.setAttribute('data-selected', String(isSelected));\n const checkbox = row.querySelector('snice-checkbox.row-select') as any;\n if (checkbox) checkbox.checked = isSelected;\n }\n\n updateSelectAllState() {\n const selectAllCheckbox = this.thead?.querySelector('snice-checkbox.select-all') as any;\n if (!selectAllCheckbox) return;\n\n const filteredIndices = this.getSelectableIndices(this.getFilteredData());\n const selectedInFiltered = filteredIndices.filter(i => this.selectedRows.includes(i));\n const allSelected = selectedInFiltered.length === filteredIndices.length && filteredIndices.length > 0;\n const someSelected = selectedInFiltered.length > 0 && selectedInFiltered.length < filteredIndices.length;\n\n selectAllCheckbox.checked = allSelected;\n selectAllCheckbox.indeterminate = someSelected;\n }\n\n toggleSort(columnKey: string, multiSort: boolean = false) {\n if (!multiSort) {\n // Single column sort - clear all other sorts\n const existingSort = this.currentSort.find(s => s.column === columnKey);\n\n if (!existingSort) {\n this.currentSort = [{ column: columnKey, direction: 'asc' }];\n } else if (existingSort.direction === 'asc') {\n this.currentSort = [{ column: columnKey, direction: 'desc' }];\n } else {\n this.currentSort = [];\n }\n } else {\n // Multi column sort - modify existing or add new\n const existingSortIndex = this.currentSort.findIndex(s => s.column === columnKey);\n\n if (existingSortIndex === -1) {\n // Add new sort\n this.currentSort = [...this.currentSort, { column: columnKey, direction: 'asc' }];\n } else {\n const existingSort = this.currentSort[existingSortIndex];\n if (existingSort.direction === 'asc') {\n // Change to desc - create new array to trigger reactivity\n this.currentSort = this.currentSort.map((sort, index) =>\n index === existingSortIndex ? { ...sort, direction: 'desc' as const } : sort\n );\n } else {\n // Remove this sort\n this.currentSort = this.currentSort.filter(s => s.column !== columnKey);\n }\n }\n }\n\n this.renderHeader();\n this.dispatchSortChange();\n if (this.mode === 'remote') {\n this.debouncedDataRequest();\n } else {\n this.sortLocalData();\n }\n }\n\n private sortLocalData() {\n if (!this.unsortedData.length) {\n this.unsortedData = [...this.data];\n }\n // C1: bracket the reassignment so the data @watch does NOT treat this\n // re-sorted view as a new dataset (would clobber unsortedData + double-render).\n this.settingSortedData = true;\n if (this.currentSort.length === 0) {\n this.data = [...this.unsortedData];\n } else {\n this.data = [...this.unsortedData].sort((a, b) => {\n for (const { column, direction } of this.currentSort) {\n const colDef = this.columns.find(c => c.key === column);\n const customComparator = (colDef as any)?.sortComparator;\n\n if (customComparator) {\n const cmp = customComparator(a[column], b[column], direction);\n if (cmp !== 0) return cmp;\n } else {\n // Use value pipeline getter if available\n const aVal = colDef?.valueGetter ? colDef.valueGetter(a[column], a) : (a[column] ?? '');\n const bVal = colDef?.valueGetter ? colDef.valueGetter(b[column], b) : (b[column] ?? '');\n const cmp = String(aVal).localeCompare(String(bVal), undefined, { numeric: true });\n if (cmp !== 0) return direction === 'asc' ? cmp : -cmp;\n }\n }\n return 0;\n });\n }\n this.settingSortedData = false;\n // Sort replaced this.data (new order + reference) — resync the row-index\n // map and drop the stale filtered snapshot before re-rendering. Render is\n // queued (not synchronous): sortLocalData is reachable from the currentSort\n // setter stack via handleControlledSort, and cells must never construct there.\n this.rebuildRowIndex();\n this.scheduleRender('body');\n }\n\n @dispatch('table-row-selection-changed', { bubbles: true, composed: true })\n private dispatchRowSelectionChanged(rowIndex: number, selected: boolean) {\n return {\n selectedRows: this.selectedRows,\n rowIndex,\n selected\n };\n }\n\n @dispatch('row-clicked', { bubbles: true, composed: true })\n private dispatchRowClicked(rowData: any, rowIndex: number) {\n return { rowData, rowIndex };\n }\n\n @dispatch('table-load-error', { bubbles: true, composed: true })\n private dispatchLoadError(error: unknown) {\n return { error };\n }\n\n @dispatch('table-select-all-changed', { bubbles: true, composed: true })\n private dispatchSelectAllChanged(allSelected: boolean) {\n return {\n selectedRows: this.selectedRows,\n allSelected\n };\n }\n\n // E1: unified selection event, emitted alongside the two legacy events on\n // every user-driven selection change. `rows` are the current row objects.\n @dispatch('selection-changed', { bubbles: true, composed: true })\n private dispatchSelectionChanged() {\n return {\n selectedRows: this.selectedRows,\n rows: this.getSelectedData(),\n };\n }\n\n @dispatch('sort-change', { bubbles: true, composed: true })\n private dispatchSortChange() {\n return { sort: this.currentSort };\n }\n\n @dispatch('filter-change', { bubbles: true, composed: true })\n private dispatchFilterChange() {\n return { filters: this.filterEngine.getFilterModel() };\n }\n\n @dispatch('column-visibility-change', { bubbles: true, composed: true })\n private dispatchColumnVisibilityChange(key: string, visible: boolean) {\n return { key, visible, visibility: this.columnManager.getVisibilityModel() };\n }\n\n @dispatch('column-pin-change', { bubbles: true, composed: true })\n private dispatchColumnPinChange(key: string, pinned: 'left' | 'right' | false) {\n return { key, pinned };\n }\n\n @dispatch('column-order-change', { bubbles: true, composed: true })\n private dispatchColumnOrderChange(key: string, toIndex: number) {\n return { key, toIndex };\n }\n\n @dispatch('density-change', { bubbles: true, composed: true })\n private dispatchDensityChange() {\n return { density: this.density };\n }\n\n // ── Module Integration: Initialize ──\n\n private initializeModules() {\n // Column manager\n this.columnManager.initialize(this.columns, this);\n\n // Editor\n this.setupEditor();\n\n // Keyboard\n if (this.shadowRoot) {\n this.keyboard.attach({\n shadowRoot: this.shadowRoot,\n // Keyboard order follows the rows users can actually focus. In grouped\n // mode this excludes group/aggregate rows and collapsed descendants;\n // callbacks below translate that navigation position back to the raw\n // data index expected by selection/editing APIs.\n totalRows: () => this.getKeyboardRows().length,\n ariaRows: () => this.usesGroupingDisplayModel()\n ? this.getDisplayedGroupingItems().length\n : (this.treeData.isEnabled()\n ? this.getTreeDisplayRows(true).length\n : this.getKeyboardRows().length),\n ariaRowOffset: () => this.virtualize && this.virtualizer.isEnabled()\n ? Math.max(0, this.virtualizer.getVisibleRange().start)\n : 0,\n // Use the actual main-header width: tool columns add grid cells and\n // hidden data columns remove them. Raw columns.length made keyboard\n // navigation stop early or point at nonexistent cells.\n totalColumns: () => this.getKeyboardColumnCount(),\n tabMode: 'all',\n isEditing: () => this.editor.isEditing(),\n getRowElement: (rowIndex) => this.getKeyboardRowElement(rowIndex),\n ensureRowVisible: (rowIndex) => this.ensureKeyboardRowRendered(rowIndex),\n onCellActivate: (row, col) => {\n const dataIndex = this.getKeyboardDataIndex(row);\n if (this.editable && dataIndex >= 0 && col) this.startEdit(dataIndex, col);\n },\n onSelectionToggle: (row) => {\n const dataIndex = this.getKeyboardDataIndex(row);\n if (this.selectable && dataIndex >= 0) this.toggleRowSelection(dataIndex);\n },\n onSelectAll: () => {\n if (this.selectable) this.selectAllRows();\n },\n });\n }\n }\n\n @dispose()\n cleanup() {\n this.virtualizer.detach();\n this.keyboard.detach();\n if (this.lazyLoadHandler) this.lazyLoadContainer?.removeEventListener('scroll', this.lazyLoadHandler);\n this.lazyLoadHandler = null;\n this.lazyLoadContainer = null;\n this.rowDnD.detach();\n this.columnDnD.detach();\n }\n\n // ── Virtualization API ──\n\n /**\n * The element that actually scrolls. `.table-frame` owns `overflow: auto`\n * in the live styles — attaching scroll listeners to `.snice-table` works\n * in happy-dom (no layout) but never fires in a real browser.\n */\n private getScrollContainer(): HTMLElement | null {\n return (this.shadowRoot?.querySelector('.table-frame') ??\n this.shadowRoot?.querySelector('.snice-table')) as HTMLElement | null;\n }\n\n private setupVirtualization() {\n if (!this.virtualize || !this.shadowRoot || !this.tbody) return;\n\n const scrollContainer = this.getScrollContainer();\n if (!scrollContainer) return;\n\n this.virtualRowsSnapshot = this.getVirtualRows();\n this.virtualizer.attach({\n rowHeight: (displayIndex) => this.getVirtualRowHeight(displayIndex),\n bufferPx: this.virtualBuffer,\n totalRows: this.virtualRowsSnapshot.length,\n scrollContainer,\n renderRange: (start, end) => this.renderRowRange(start, end),\n // Pinned rows live outside the windowed range so they are always present,\n // exactly like the non-virtual path (renderBody).\n renderPinnedTop: () => this.renderPinnedRows(this.pinnedTopRows, 'top'),\n renderPinnedBottom: () => this.renderPinnedRows(this.pinnedBottomRows, 'bottom'),\n // Scroll-driven windows bypass renderBody; restore grid roles, logical\n // row indices, and roving focus after every inserted range.\n afterRender: () => this.keyboard.refresh(),\n });\n }\n\n private getVirtualRowHeight(displayIndex: number): number {\n const entry = this.virtualRowsSnapshot[displayIndex];\n if (!entry || (entry.groupItem && entry.groupItem.type !== 'row')) return this.rowHeight;\n const dataIndex = entry.groupItem ? this.indexOfRow(entry.data) : entry.index;\n const base = this.rowHeightCallback\n ? this.rowHeightCallback(entry.data, dataIndex)\n : this.rowHeight;\n return base + this.masterDetail.getFixedAdditionalHeight(dataIndex);\n }\n\n /**\n * The feature-aware row list the virtualizer windows over. In tree-data mode\n * this is the FLATTENED visible tree (so expand/collapse works while\n * virtualized); otherwise it is the filtered data. Each descriptor carries\n * the logical index used for `data-index`, selection, and detail lookups.\n */\n private getVirtualRows(): Array<{ data: any; index: number; treeRow?: TreeRow; groupItem?: DisplayItem }> {\n const filtered = this.getFilteredData();\n // F: the flattened group+row+aggregate list is the virtual model when\n // grouping/aggregation is on — same pattern as tree data. Group/aggregate\n // rows carry no data index; data rows key off their index in `this.data`.\n if (this.usesGroupingDisplayModel()) {\n return this.getDisplayedGroupingItems().map((groupItem, i) => ({\n data: groupItem.type === 'row' ? groupItem.data : undefined,\n index: i,\n groupItem,\n }));\n }\n if (this.treeData.isEnabled()) {\n return this.getTreeDisplayRows(true);\n }\n return filtered.map((data) => ({ data, index: this.indexOfRow(data) }));\n }\n\n private renderRowRange(startIndex: number, endIndex: number): DocumentFragment {\n const fragment = document.createDocumentFragment();\n const rows = this.virtualRowsSnapshot.length > 0\n ? this.virtualRowsSnapshot\n : this.getVirtualRows();\n\n const extraCols =\n (this.hasSelectionColumn() ? 1 : 0) +\n (this.masterDetail.isEnabled() ? 1 : 0) +\n (this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0);\n const managedColumns = this.columnManager.getAllStates();\n const visibleColumnCount = managedColumns.length > 0\n ? this.columnManager.getVisibleColumns().length\n : this.columns.length;\n const totalColSpan = visibleColumnCount + extraCols;\n const structuralSig = this.computeStructuralSig();\n\n // Task B: recycle rows that stay in the window across a scroll shift. A row\n // still visible after scrolling keeps its data-object key and signature, so\n // it is MOVED into the freshly built fragment (appendChild detaches it from\n // the live tbody) instead of reconstructed. The virtualizer wipes the tbody\n // AFTER we build this fragment — reused rows are already parked in the\n // fragment by then, so the wipe only clears departed rows and the spacers.\n // Net cost of a small scroll: a few createRow calls for the entering rows.\n const next = new Map<unknown, { el: HTMLElement; sig: string }>();\n const used = new Set<HTMLElement>();\n\n for (let i = startIndex; i < endIndex && i < rows.length; i++) {\n const { data, index, treeRow, groupItem } = rows[i];\n\n // F: group + aggregate rows are rebuilt each window (few, always fresh),\n // keyed by their synthetic key so the reconciler places them correctly.\n if (groupItem && groupItem.type !== 'row') {\n const el = groupItem.type === 'group'\n ? this.createGroupRow(groupItem, totalColSpan)\n : this.createAggregateRow(groupItem, totalColSpan);\n used.add(el);\n if (!next.has(groupItem.key)) next.set(groupItem.key, { el, sig: 'grouprow' });\n fragment.appendChild(el);\n continue;\n }\n\n // F: a grouped data row's logical index is its index in `this.data`.\n const dataIndex = groupItem ? this.indexOfRow(data) : index;\n const editing = this.isRowEditing(dataIndex);\n // Edit marker: see renderBody. Ensures leaving edit state rebuilds the row.\n const sig = this.rowSignature(data, dataIndex, structuralSig, treeRow) + (editing ? '|edit' : '');\n const prev = this.renderedRows.get(data);\n let tr: HTMLElement;\n\n if (prev && !used.has(prev.el) && !editing && prev.sig === sig) {\n tr = prev.el;\n this.restampRowIndex(tr, dataIndex);\n } else {\n tr = this.createRow(data, dataIndex, treeRow);\n }\n\n used.add(tr);\n if (!next.has(data)) next.set(data, { el: tr, sig });\n fragment.appendChild(tr);\n\n // Master-detail: render the expanded detail row in-window. The detail\n // A fixed detailHeight participates in virtual spacer math through\n // getVirtualRowHeight. Auto-height content is still rendered in-window\n // and contributes through normal table layout. Tree rows never carry\n // detail panels, so skip them.\n if (!treeRow && this.masterDetail.isEnabled() && this.masterDetail.isExpanded(dataIndex)) {\n const detailRow = this.masterDetail.createDetailRow(data, dataIndex, totalColSpan);\n if (detailRow) fragment.appendChild(detailRow);\n }\n }\n\n this.renderedRows = next;\n return fragment;\n }\n\n /** Build a fragment of pinned rows for the given position (top/bottom). */\n private renderPinnedRows(rows: any[], position: 'top' | 'bottom'): DocumentFragment {\n const fragment = document.createDocumentFragment();\n for (const row of rows) {\n const tr = this.createRow(row, -1);\n tr.classList.add('pinned-row', position === 'top' ? 'pinned-row--top' : 'pinned-row--bottom');\n fragment.appendChild(tr);\n }\n return fragment;\n }\n\n scrollToRow(index: number) {\n // Public row indices refer to `this.data`; grouped/tree virtualization\n // scrolls a flattened display model containing structural rows as well.\n // Translate through row identity so callers still land on the requested\n // data row rather than an unrelated header/subtotal.\n if (this.usesGroupingDisplayModel() || this.treeData.isEnabled()) {\n const row = this.data[index];\n const displayIndex = this.getVirtualRows().findIndex((entry) => entry.data === row);\n if (displayIndex >= 0) this.virtualizer.scrollToIndex(displayIndex);\n return;\n }\n this.virtualizer.scrollToRow(index);\n }\n\n /** Rows currently reachable by grid keyboard navigation, in display order. */\n private getKeyboardColumnCount(): number {\n const rendered = this.shadowRoot?.querySelectorAll('thead tr.column-header-row > th').length ?? 0;\n if (rendered > 0) return rendered;\n\n const states = this.columnManager.getAllStates();\n const dataColumns = states.length > 0\n ? this.columnManager.getVisibleColumns().length\n : this.columns.length;\n return dataColumns\n + (this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0)\n + (this.masterDetail.isEnabled() ? 1 : 0)\n + (this.hasSelectionColumn() ? 1 : 0);\n }\n\n private getKeyboardRows(): any[] {\n if (this.usesGroupingDisplayModel()) {\n return this.getDisplayedGroupingItems()\n .filter((item): item is Extract<DisplayItem, { type: 'row' }> => item.type === 'row')\n .map((item) => item.data);\n }\n\n if (this.treeData.isEnabled()) {\n return this.getTreeDisplayRows(true)\n .filter((item) => !!item.treeRow)\n .map((item) => item.data);\n }\n\n let rows = this.getFilteredData();\n if (this.pagination && this.paginationMode === 'client') {\n const start = (this.currentPage - 1) * this.pageSize;\n rows = rows.slice(start, start + this.pageSize);\n }\n return rows;\n }\n\n /** Translate a keyboard navigation position to the table's raw data index. */\n private getKeyboardDataIndex(rowIndex: number): number {\n const row = this.getKeyboardRows()[rowIndex];\n return row === undefined ? -1 : this.indexOfRow(row);\n }\n\n private getKeyboardRowElement(rowIndex: number): HTMLElement | null {\n const dataIndex = this.getKeyboardDataIndex(rowIndex);\n if (dataIndex < 0) return null;\n return this.tbody?.querySelector(`tr[data-index=\"${dataIndex}\"]`) as HTMLElement | null;\n }\n\n /**\n * Ensure a keyboard row is in the virtual window. The virtualizer scrolls by\n * flattened display position while keyboard navigation indexes visible data\n * rows, so resolve through the shared virtual row model instead of assuming\n * those two indices are interchangeable.\n */\n private ensureKeyboardRowRendered(rowIndex: number) {\n if (!this.virtualize || !this.virtualizer.isEnabled()) return;\n if (this.getKeyboardRowElement(rowIndex)) return;\n\n const row = this.getKeyboardRows()[rowIndex];\n if (row === undefined) return;\n const displayIndex = this.getVirtualRows().findIndex((entry) => entry.data === row);\n if (displayIndex >= 0) this.virtualizer.scrollToIndex(displayIndex);\n }\n\n getScrollPosition() {\n return this.virtualizer.getScrollPosition();\n }\n\n // ── Filtering API ──\n\n setColumnFilter(column: string, operator: any, value: any) {\n this.filterEngine.setColumnFilter(column, operator, value);\n this.applyClientFilters();\n }\n\n removeColumnFilter(column: string) {\n this.filterEngine.removeColumnFilter(column);\n this.applyClientFilters();\n }\n\n setQuickFilter(text: string) {\n this.filterEngine.setQuickFilter(text);\n this.applyClientFilters();\n }\n\n setFilterModel(model: FilterModel) {\n this.filterEngine.setFilterModel(model);\n this.applyClientFilters();\n }\n\n getFilterModel() {\n return this.filterEngine.getFilterModel();\n }\n\n clearAllFilters() {\n this.filterEngine.clearAllFilters();\n this.applyClientFilters();\n }\n\n private getFilteredData(): any[] {\n // Keep the row-index map + filtered snapshot coherent with the current\n // `this.data` reference (catches a direct `table.data = [...]` assignment).\n this.ensureRowIndex();\n if (this.filteredCache) return this.filteredCache;\n const filteredDataOp = !this.filterEngine.hasActiveFilters()\n ? this.data\n : this.filterEngine.applyFilters(this.data, this.columns);\n this.filteredCache = filteredDataOp;\n return filteredDataOp;\n }\n\n // A1: rebuild the row-object → index map from `this.data`. Call wherever the\n // data array is REPLACED (setData, remote load, sortLocalData) or an element\n // is swapped in place (row-edit commit). First occurrence wins, matching\n // `Array.prototype.indexOf` semantics. Also drops the filtered snapshot,\n // since replacing the data invalidates any previously filtered view.\n private rebuildRowIndex() {\n this.rowIndexMap.clear();\n const rows = this.data;\n for (let i = 0; i < rows.length; i++) {\n if (!this.rowIndexMap.has(rows[i])) this.rowIndexMap.set(rows[i], i);\n }\n this.rowIndexDataRef = rows;\n this.filteredCache = null;\n this.groupingCache = null; // F: derived from the filtered snapshot.\n }\n\n // Rebuild lazily if `this.data` was reassigned out from under the map (plain\n // `table.data = [...]`, used widely by app code and tests, bypasses setData).\n private ensureRowIndex() {\n if (this.rowIndexDataRef !== this.data) this.rebuildRowIndex();\n }\n\n // A1: map lookup replacing `this.data.indexOf(row)`. Same identity semantics\n // (reference equality, -1 when absent).\n private indexOfRow(row: any): number {\n this.ensureRowIndex();\n const idx = this.rowIndexMap.get(row);\n return idx === undefined ? -1 : idx;\n }\n\n // A4: the filtered snapshot must be dropped on every mutation of the model it\n // is derived from. Enumerated invalidation sites:\n // 1. data replacement — rebuildRowIndex() (setData, remote load,\n // sortLocalData) + the ensureRowIndex() ref-check\n // for a direct `table.data = [...]` assignment.\n // 2. in-place row change — cell-edit-commit / row-edit-commit handlers\n // (see @ready initialize()).\n // 3. filter model change — invalidateFilteredCache() below, called from\n // applyClientFilters(); every setQuickFilter /\n // setColumnFilter / setHeaderFilter / setFilterModel\n // / clearAllFilters / removeColumnFilter and the\n // header-filter INPUT path route through it.\n // 4. sort — sortLocalData() replaces this.data (case 1).\n private invalidateFilteredCache() {\n this.filteredCache = null;\n // F: the flattened group list is derived from the filtered snapshot, so any\n // change that drops one drops the other (data/filter/sort/edit).\n this.groupingCache = null;\n }\n\n // F: drop only the flattened group list — expand/collapse and groupBy changes\n // reshape it without touching the filtered snapshot.\n private invalidateGroupingCache() {\n this.groupingCache = null;\n }\n\n // F: the flattened { group | row | aggregate } display list for the current\n // filtered data, cached like filteredCache. setColumns keeps the aggregator\n // set in sync with the live columns before each rebuild.\n private getGroupingItems(): DisplayItem[] {\n if (this.grouping.setColumns(this.columns)) this.invalidateGroupingCache();\n if (this.groupingCache) return this.groupingCache;\n this.groupingCache = this.grouping.processData(this.getFilteredData());\n return this.groupingCache;\n }\n\n /**\n * Row grouping owns the hierarchy whenever groupBy is non-empty. With no\n * groupBy, aggregation normally uses the same flattened row+footer model,\n * except when tree data is active: tree hierarchy stays intact and the table\n * total is appended to that tree model instead.\n */\n private usesGroupingDisplayModel(): boolean {\n return this.grouping.hasGrouping()\n || (this.grouping.hasAggregation() && !this.treeData.isEnabled());\n }\n\n /**\n * Group display items on the active client-side page. This single helper is\n * shared by normal rendering, virtualization, keyboard navigation, and ARIA\n * so combining those features cannot produce four different row models.\n */\n private getDisplayedGroupingItems(): DisplayItem[] {\n const items = this.getGroupingItems();\n if (!this.pagination || this.paginationMode !== 'client') return items;\n\n const totalPages = Math.max(1, Math.ceil(items.length / this.pageSize));\n const page = Math.max(1, Math.min(this.currentPage, totalPages));\n if (page !== this.currentPage) this.currentPage = page;\n const start = (page - 1) * this.pageSize;\n return items.slice(start, start + this.pageSize);\n }\n\n /** Tree rows plus an optional table-total footer, optionally page-sliced. */\n private getTreeDisplayRows(paginate: boolean): Array<{\n data: any;\n index: number;\n treeRow?: TreeRow;\n groupItem?: AggregateRow;\n }> {\n const rows: Array<{ data: any; index: number; treeRow?: TreeRow; groupItem?: AggregateRow }> =\n this.treeData.processData(this.getFilteredData()).map((treeRow) => ({\n data: treeRow.data,\n index: this.indexOfRow(treeRow.data),\n treeRow,\n }));\n\n if (this.grouping.hasAggregation()) {\n const total = this.getGroupingItems().find(\n (item): item is AggregateRow => item.type === 'aggregate' && item.scope === 'table'\n );\n if (total) rows.push({ data: undefined, index: -1, groupItem: total });\n }\n\n if (!paginate || !this.pagination || this.paginationMode !== 'client') return rows;\n const totalPages = Math.max(1, Math.ceil(rows.length / this.pageSize));\n const page = Math.max(1, Math.min(this.currentPage, totalPages));\n if (page !== this.currentPage) this.currentPage = page;\n const start = (page - 1) * this.pageSize;\n return rows.slice(start, start + this.pageSize);\n }\n\n private applyClientFilters() {\n this.invalidateFilteredCache();\n this.dispatchFilterChange();\n if (this.mode === 'remote') {\n // Server-side: send filter params to controller\n this.debouncedDataRequest();\n } else {\n // Client-side: re-render with filtered data\n this.renderBody();\n }\n }\n\n // A3: 150 ms window (matches the remote debounce constant) so a burst of\n // keystrokes into a live filter INPUT collapses into a single re-filter +\n // re-render. Only the INPUT event paths (header-filter inputs) route through\n // here; programmatic API (setQuickFilter/setColumnFilter/...) stays\n // synchronous so callers and tests keep deterministic behavior.\n private static readonly FILTER_INPUT_DEBOUNCE_MS = 150;\n private filterInputDebounceTimeout: any = null;\n\n private debouncedApplyClientFilters() {\n if (this.filterInputDebounceTimeout) clearTimeout(this.filterInputDebounceTimeout);\n this.filterInputDebounceTimeout = setTimeout(() => {\n this.filterInputDebounceTimeout = null;\n this.applyClientFilters();\n }, SniceTable.FILTER_INPUT_DEBOUNCE_MS);\n }\n\n // ── Column API ──\n\n setColumnVisible(key: string, visible: boolean) {\n this.columnManager.setColumnVisible(key, visible);\n this.renderHeader();\n this.renderBody();\n this.dispatchColumnVisibilityChange(key, visible);\n }\n\n showAllColumns() {\n this.columnManager.showAllColumns();\n this.renderHeader();\n this.renderBody();\n }\n\n hideAllColumns() {\n this.columnManager.hideAllColumns();\n this.renderHeader();\n this.renderBody();\n }\n\n getColumnVisibility() {\n return this.columnManager.getVisibilityModel();\n }\n\n pinColumn(key: string, side: 'left' | 'right') {\n this.columnManager.pinColumn(key, side);\n this.renderHeader();\n this.renderBody();\n this.dispatchColumnPinChange(key, side);\n }\n\n unpinColumn(key: string) {\n this.columnManager.unpinColumn(key);\n this.renderHeader();\n this.renderBody();\n this.dispatchColumnPinChange(key, false);\n }\n\n autoSizeColumn(key: string) {\n if (this.tbody) {\n this.columnManager.autoSizeColumn(key, this.tbody);\n this.renderHeader();\n }\n }\n\n autoSizeAllColumns() {\n if (this.tbody) {\n this.columnManager.autoSizeAll(this.tbody);\n this.renderHeader();\n }\n }\n\n moveColumn(key: string, toIndex: number) {\n this.columnManager.moveColumn(key, toIndex);\n this.renderHeader();\n this.renderBody();\n this.dispatchColumnOrderChange(key, toIndex);\n }\n\n // ── Editing API ──\n\n /**\n * Configure the editor from the current columns. Safe to call repeatedly —\n * columns/data are plain fields that can be assigned after @ready ran with an\n * empty set, so this re-syncs editable columns + pipelines before an edit\n * starts rather than trusting the one-time @ready snapshot.\n */\n private setupEditor() {\n if (!this.editable) return;\n\n this.editor.attach(this);\n this.editor.setEditMode(this.editMode);\n const editableCols = this.columns.filter(c => c.editable !== false).map(c => c.key);\n this.editor.setEditableColumns(editableCols);\n\n // Register value pipelines\n for (const col of this.columns) {\n if (col.valueGetter || col.valueFormatter || col.valueParser || col.valueSetter) {\n this.editor.setPipeline(col.key, {\n valueGetter: col.valueGetter,\n valueFormatter: col.valueFormatter,\n valueParser: col.valueParser,\n valueSetter: col.valueSetter,\n });\n }\n }\n }\n\n startEdit(rowIndex: number, columnKey: string) {\n if (!this.editable) return;\n const row = this.data[rowIndex];\n if (!row) return;\n\n // Ensure the editor knows which columns are editable for the current\n // column set (columns may have been assigned after @ready).\n this.setupEditor();\n\n if (this.editMode === 'row') {\n this.editor.startRowEdit(rowIndex, row);\n } else {\n const column = this.columns.find(c => c.key === columnKey);\n const value = row[columnKey];\n this.editor.startCellEdit(rowIndex, columnKey, value, row, column?.editorType ?? column?.type);\n }\n // Re-render the affected row to show the editor, then focus it.\n this.renderBody();\n this.focusActiveEditor();\n }\n\n /** Focus the first rendered editor input (called after renderBody). */\n private focusActiveEditor() {\n const el = this.tbody?.querySelector(\n '.table-editor-input, .table-editor-checkbox, .table-editor-select'\n ) as HTMLElement | null;\n if (!el) return;\n\n el.focus();\n if (el instanceof HTMLInputElement && (el.type === 'text' || el.type === 'number')) {\n try { el.select(); } catch { /* happy-dom may not implement select */ }\n }\n }\n\n async commitEdit(): Promise<string | null> {\n if (this.editMode === 'row') {\n const errors = await this.editor.commitRowEdit();\n this.renderBody();\n return errors ? 'Validation errors' : null;\n } else {\n const error = await this.editor.commitCellEdit();\n this.renderBody();\n return error;\n }\n }\n\n cancelEdit() {\n if (this.editMode === 'row') {\n this.editor.cancelRowEdit();\n } else {\n this.editor.cancelCellEdit();\n }\n this.renderBody();\n }\n\n // ── Export API ──\n\n exportCSV(options?: any) {\n const data = this.getFilteredData();\n const selectedData = options?.selectedOnly\n ? this.getSelectedRowsIn(data)\n : data;\n this.exporter.exportCSV(selectedData, this.columns, options);\n }\n\n printTable(options?: any) {\n this.exporter.print(this, options);\n }\n\n async copyToClipboard(options?: any): Promise<boolean> {\n const filtered = this.getFilteredData();\n const rows = this.selectedRows.length > 0 ? this.getSelectedRowsIn(filtered) : filtered;\n return this.exporter.copyToClipboard(rows, this.columns, options);\n }\n\n /** Resolve raw selection indices against the source data first, then retain\n * only rows present in the current filtered view. Filtered positions are not\n * interchangeable with raw indices. */\n private getSelectedRowsIn(view: any[]): any[] {\n const selected = new Set(this.getSelectedData());\n return view.filter((row) => selected.has(row));\n }\n\n // ── Selection helpers ──\n\n private hasSelectionColumn(): boolean {\n return this.selectable && this.selectionMode !== 'none';\n }\n\n private getSlottedSelectionRows(): any[] {\n if (this.shouldModelSlottedRows()) return [];\n return Array.from(this.querySelectorAll('snice-row[slot=\"rows\"]')) as any[];\n }\n\n private getSelectionSourceRows(): any[] {\n const slotted = this.getSlottedSelectionRows();\n return slotted.length > 0 ? slotted.map((row) => row.data) : this.data;\n }\n\n /** Keep light-DOM rows aligned with the table's live selection mode and\n * conditional selectability, including property changes after connection. */\n private syncSlottedSelectionState() {\n const rows = this.getSlottedSelectionRows();\n if (rows.length === 0) return;\n\n const showSelectors = this.hasSelectionColumn();\n let keptSingleSelection = false;\n rows.forEach((row, index) => {\n const disabled = !!(showSelectors && this.selectabilityCheck\n && !this.selectabilityCheck(row.data, index));\n row.index = index;\n row.selectable = showSelectors;\n row.selectionDisabled = disabled;\n\n if (!showSelectors || disabled) {\n row.selected = false;\n } else if (this.selectionMode === 'single' && row.selected) {\n if (keptSingleSelection) row.selected = false;\n else keptSingleSelection = true;\n }\n });\n\n this.selectedRows = rows\n .map((row, index) => row.selected && !row.selectionDisabled ? index : -1)\n .filter((index) => index >= 0);\n }\n\n private handleSlottedRowSelect = (event: CustomEvent) => {\n const row = event.detail?.element as any;\n const rows = this.getSlottedSelectionRows();\n const index = rows.indexOf(row);\n if (index < 0) return;\n\n const blocked = !this.hasSelectionColumn()\n || !!(this.selectabilityCheck && !this.selectabilityCheck(row.data, index));\n if (blocked) {\n row.selected = false;\n this.syncSlottedSelectionState();\n return;\n }\n\n if (this.selectionMode === 'single' && row.selected) {\n rows.forEach((candidate, candidateIndex) => {\n if (candidateIndex !== index) candidate.selected = false;\n });\n }\n this.selectedRows = rows\n .map((candidate, candidateIndex) => candidate.selected ? candidateIndex : -1)\n .filter((candidateIndex) => candidateIndex >= 0);\n this.selectionAnchor = row.data;\n this.dispatchRowSelectionChanged(index, row.selected);\n this.dispatchSelectionChanged();\n };\n\n private getSelectableIndices(rows: any[]): number[] {\n const indices: number[] = [];\n for (const row of rows) {\n const index = this.indexOfRow(row);\n if (index < 0) continue;\n if (this.selectabilityCheck && !this.selectabilityCheck(row, index)) continue;\n indices.push(index);\n }\n return indices;\n }\n\n /**\n * E1: the single entry point for a pointer/keyboard interaction on one row.\n * Resolves selectionMode + modifier intent (`additive` = ctrl/meta,\n * `range` = shift), mutates `selectedRows` (delta DOM via the @watch), moves\n * the object-valued anchor for non-range interactions, and emits the legacy\n * row-selection event plus the unified `selection-changed` event.\n */\n private applyRowSelection(rowIndex: number, opts: { additive: boolean; range: boolean }) {\n if (this.selectionMode === 'none') return;\n // Conditional selectability gate (shared with the keyboard path).\n if (this.selectabilityCheck && !this.selectabilityCheck(this.data[rowIndex], rowIndex)) return;\n\n const row = this.data[rowIndex];\n\n // Single mode: always collapse to exactly the interacted row.\n if (this.selectionMode === 'single') {\n this.selectedRows = [rowIndex];\n this.selectionAnchor = row;\n this.dispatchRowSelectionChanged(rowIndex, true);\n this.dispatchSelectionChanged();\n return;\n }\n\n // Multiple mode. Shift extends the contiguous range from the anchor object.\n if (opts.range && this.selectionAnchor != null) {\n this.selectRange(this.selectionAnchor, row); // anchor stays put\n this.dispatchRowSelectionChanged(rowIndex, this.selectedRows.includes(rowIndex));\n this.dispatchSelectionChanged();\n return;\n }\n\n // Plain or additive (ctrl/meta) click → toggle this row (historical path).\n const isSelected = this.selectedRows.includes(rowIndex);\n this.selectedRows = isSelected\n ? this.selectedRows.filter(i => i !== rowIndex)\n : [...this.selectedRows, rowIndex];\n this.selectionAnchor = row;\n\n // DOM update happens in the selectedRows @watch (delta, one row).\n this.dispatchRowSelectionChanged(rowIndex, !isSelected);\n this.dispatchSelectionChanged();\n }\n\n /**\n * E1: replace the selection with the contiguous range between the anchor and\n * target ROW OBJECTS, resolved against the current filtered snapshot (display\n * order). Object-valued endpoints mean the range follows the rows across a\n * sort — `getFilteredData()` reflects the reordered `this.data`, and each\n * position maps back to a data index via `indexOfRow` (rowIndexMap).\n */\n private selectRange(anchorRow: any, targetRow: any) {\n const view = this.getFilteredData();\n let posA = view.indexOf(anchorRow);\n const posT = view.indexOf(targetRow);\n if (posT === -1) return;\n if (posA === -1) posA = posT;\n\n const lo = Math.min(posA, posT);\n const hi = Math.max(posA, posT);\n const indices: number[] = [];\n for (let p = lo; p <= hi; p++) {\n const idx = this.indexOfRow(view[p]);\n if (idx < 0) continue;\n if (this.selectabilityCheck && !this.selectabilityCheck(view[p], idx)) continue;\n indices.push(idx);\n }\n this.selectedRows = indices;\n }\n\n private toggleRowSelection(rowIndex: number) {\n // Keyboard Space/Shift+Space toggle — additive intent, no range.\n this.applyRowSelection(rowIndex, { additive: true, range: false });\n }\n\n private selectAllRows() {\n // Select-all only carries meaning in multiple mode.\n if (this.selectionMode !== 'multiple') return;\n\n const filteredIndices = this.getSelectableIndices(this.getFilteredData());\n const allFilteredSelected = filteredIndices.every(i => this.selectedRows.includes(i));\n\n if (allFilteredSelected) {\n this.selectedRows = this.selectedRows.filter(i => !filteredIndices.includes(i));\n } else {\n const combined = new Set([...this.selectedRows, ...filteredIndices]);\n this.selectedRows = Array.from(combined);\n }\n // Row DOM + header checkbox update in the selectedRows @watch.\n this.dispatchSelectAllChanged(allFilteredSelected);\n this.dispatchSelectionChanged();\n }\n\n // ── Master-Detail API ──\n\n setDetailPanel(options: DetailPanelOptions) {\n this.masterDetail.attach(this, options);\n this.masterDetail.onHeightChange = () => {\n if (!this.virtualize || !this.virtualizer.isEnabled()) return;\n this.virtualRowsSnapshot = this.getVirtualRows();\n this.virtualizer.setTotalRows(this.virtualRowsSnapshot.length);\n };\n this.masterDetail.prepare(this.data);\n this.renderHeader();\n this.renderBody();\n }\n\n expandRow(index: number) {\n this.masterDetail.expand(index);\n this.renderBody();\n }\n\n collapseRow(index: number) {\n this.masterDetail.collapse(index);\n this.renderBody();\n }\n\n toggleRowExpansion(index: number) {\n this.masterDetail.toggle(index);\n this.renderBody();\n }\n\n expandAllRows() {\n this.masterDetail.expandAll(this.data.length);\n this.renderBody();\n }\n\n collapseAllRows() {\n this.masterDetail.collapseAll();\n this.renderBody();\n }\n\n // ── Toolbar API ──\n\n setToolbar(options: ToolbarOptions) {\n this.toolbarOptions = options;\n const container = this.shadowRoot?.querySelector('.table-controls-container') as HTMLElement;\n if (!container) return;\n\n this.toolbar.attach(this, container, options);\n // Share the table's filter engine with the toolbar so reads (panel rendering)\n // and writes (apply/clear) operate on the same model.\n this.toolbar.setFilterEngine(this.filterEngine);\n this.toolbar.onSearch = (query) => this.setQuickFilter(query);\n this.toolbar.onSortColumn = (key, dir) => {\n this.currentSort = [{ column: key, direction: dir }];\n this.dispatchSortChange();\n this.renderHeader();\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n };\n this.toolbar.onSetSortModel = (sortModel) => {\n this.currentSort = sortModel;\n this.dispatchSortChange();\n this.renderHeader();\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n };\n this.toolbar.onFilterColumn = (key, operator, value) => {\n this.setColumnFilter(key, operator, value);\n };\n this.toolbar.onRemoveFilter = (key) => {\n this.removeColumnFilter(key);\n };\n this.toolbar.onSetFilterModel = (filters, logic) => {\n this.filterEngine.clearAllFilters();\n this.filterEngine.setFilterLogic(logic);\n for (const f of filters) {\n this.filterEngine.setColumnFilter(f.column, f.operator, f.value);\n }\n this.applyClientFilters();\n };\n this.toolbar.onClearFilters = () => {\n this.clearAllFilters();\n };\n this.toolbar.onExportCSV = () => this.exportCSV();\n this.toolbar.onFullscreen = () => this.toggleFullscreen();\n }\n\n // ── Tree Data API ──\n\n setTreeData(options: TreeDataOptions) {\n this.treeData.attach(options);\n this.renderBody();\n }\n\n expandTreeNode(key: string) {\n this.treeData.expand(key);\n this.renderBody();\n }\n\n collapseTreeNode(key: string) {\n this.treeData.collapse(key);\n this.renderBody();\n }\n\n toggleTreeNode(key: string) {\n this.treeData.toggle(key);\n this.renderBody();\n }\n\n expandAllTreeNodes() {\n this.treeData.expandAll(this.data);\n this.renderBody();\n }\n\n collapseAllTreeNodes() {\n this.treeData.collapseAll();\n this.renderBody();\n }\n\n // ── Column Groups API ──\n\n setColumnGroups(groups: ColumnGroup[]) {\n this.columnManager.setColumnGroups(groups);\n this.renderHeader();\n }\n\n // ── Column Menu API ──\n\n private initColumnMenu() {\n if (!this.columnMenu) return;\n this.columnMenuManager.attach(this);\n this.columnMenuManager.onSortAsc = (col) => {\n this.currentSort = [{ column: col, direction: 'asc' }];\n this.dispatchSortChange();\n this.renderHeader();\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n };\n this.columnMenuManager.onSortDesc = (col) => {\n this.currentSort = [{ column: col, direction: 'desc' }];\n this.dispatchSortChange();\n this.renderHeader();\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n };\n this.columnMenuManager.onFilter = (col) => {\n // Open filter modal pre-populated with this column\n this.toolbar.openFilterModal(col);\n };\n this.columnMenuManager.onHide = (col) => this.setColumnVisible(col, false);\n this.columnMenuManager.onPinLeft = (col) => this.pinColumn(col, 'left');\n this.columnMenuManager.onPinRight = (col) => this.pinColumn(col, 'right');\n this.columnMenuManager.onUnpin = (col) => this.unpinColumn(col);\n this.columnMenuManager.onAutoSize = (col) => this.autoSizeColumn(col);\n }\n\n // ── Row Pinning API ──\n\n pinRowTop(row: any) {\n this.pinnedTopRows.push(row);\n this.renderBody();\n }\n\n pinRowBottom(row: any) {\n this.pinnedBottomRows.push(row);\n this.renderBody();\n }\n\n unpinRow(row: any) {\n this.pinnedTopRows = this.pinnedTopRows.filter(r => r !== row);\n this.pinnedBottomRows = this.pinnedBottomRows.filter(r => r !== row);\n this.renderBody();\n }\n\n clearPinnedRows() {\n this.pinnedTopRows = [];\n this.pinnedBottomRows = [];\n this.renderBody();\n }\n\n // ── Row Height API ──\n\n setRowHeight(height: number) {\n this.rowHeight = height;\n this.renderBody();\n }\n\n setRowHeightCallback(fn: (row: any, index: number) => number) {\n this.rowHeightCallback = fn;\n this.renderBody();\n }\n\n // ── Sort Enhancements ──\n\n setSortComparator(columnKey: string, comparator: (a: any, b: any, direction: 'asc' | 'desc') => number) {\n const col = this.columns.find(c => c.key === columnKey);\n if (col) (col as any).sortComparator = comparator;\n }\n\n // ── Selection Enhancements ──\n\n private selectabilityCheck: ((row: any, index: number) => boolean) | null = null;\n\n setSelectabilityCheck(fn: (row: any, index: number) => boolean) {\n this.selectabilityCheck = fn;\n const sourceRows = this.getSelectionSourceRows();\n this.selectedRows = this.selectedRows.filter((index) => {\n const row = sourceRows[index];\n return !!row && fn(row, index);\n });\n this.syncSlottedSelectionState();\n this.scheduleRender('both');\n }\n\n // E2: register a per-cell editability predicate. Wraps the editor's check —\n // gates whether a given (row, columnKey) may enter edit mode, on top of the\n // column's `editable` flag. Stored on the editor instance, so it survives the\n // setupEditor() re-sync that startEdit() performs.\n setCellEditableCheck(fn: (row: any, column: string) => boolean) {\n this.editor.setEditabilityCheck(fn);\n }\n\n getSelectedData(): any[] {\n const rows = this.getSelectionSourceRows();\n return this.selectedRows.map(i => rows[i]).filter(Boolean);\n }\n\n // ── Lazy Loading ──\n\n private setupLazyLoading() {\n if (!this.lazyLoad) return;\n\n const scrollContainer = this.getScrollContainer();\n if (!scrollContainer) return;\n\n if (this.lazyLoadHandler) {\n this.lazyLoadContainer?.removeEventListener('scroll', this.lazyLoadHandler);\n }\n\n this.lazyLoadHandler = () => {\n const { scrollTop, scrollHeight, clientHeight } = scrollContainer;\n if (scrollHeight - scrollTop - clientHeight < this.lazyLoadThreshold) {\n this.dispatchEvent(new CustomEvent('lazy-load', {\n detail: { currentCount: this.data.length },\n bubbles: true,\n composed: true,\n }));\n }\n };\n\n scrollContainer.addEventListener('scroll', this.lazyLoadHandler, { passive: true });\n this.lazyLoadContainer = scrollContainer;\n }\n\n // ── Scrolling API ──\n\n scrollToColumn(columnKey: string) {\n const th = this.shadowRoot?.querySelector(`th[data-key=\"${columnKey}\"]`) as HTMLElement;\n th?.scrollIntoView({ inline: 'nearest', block: 'nearest' });\n }\n\n // ── List View ──\n\n /**\n * Declarative list-mode row renderer — bind via `.listRenderer=${fn}`.\n * Returning an HTMLElement appends it; anything else becomes text.\n */\n @property({ attribute: false })\n listRenderer: ListViewRenderer | null = null;\n\n @watch('listRenderer', { immediate: false })\n handleListRendererChange() {\n if (!this.list) return;\n // The row recycler cannot infer that a callback identity changed from\n // row data alone. Force fresh rows so list markup replaces table cells.\n this.renderedRows = new Map();\n this.renderBody();\n }\n\n setListViewRenderer(fn: ListViewRenderer) {\n this.listRenderer = fn;\n }\n\n // ── Row creation helper (used by both regular and virtualized rendering) ──\n\n private createRow(rowData: any, index: number, treeRow?: TreeRow): HTMLTableRowElement {\n const tr = document.createElement('tr');\n tr.setAttribute('data-index', String(index));\n tr.setAttribute('part', 'row');\n\n // Row height\n if (this.rowHeightCallback) {\n tr.style.height = `${this.rowHeightCallback(rowData, index)}px`;\n } else if (this.rowHeight !== 48) {\n tr.style.height = `${this.rowHeight}px`;\n }\n\n const isSelected = this.selectedRows.includes(index);\n tr.setAttribute('data-selected', String(isSelected));\n\n // Row DnD handle\n if (this.rowReorder && this.rowDnD.isEnabled()) {\n tr.appendChild(this.rowDnD.createDragHandle());\n this.rowDnD.makeRowDraggable(tr, index);\n }\n\n // Master-detail expand/collapse toggle\n if (this.masterDetail.isEnabled()) {\n const toggleCell = document.createElement('td');\n toggleCell.className = 'detail-toggle-cell';\n toggleCell.appendChild(this.masterDetail.createToggleButton(index));\n tr.appendChild(toggleCell);\n }\n\n if (this.hasSelectionColumn()) {\n const selectCell = document.createElement('td');\n selectCell.className = 'select-column';\n const disabled = !!(this.selectabilityCheck && !this.selectabilityCheck(rowData, index));\n selectCell.innerHTML = `<snice-checkbox class=\"row-select\" size=\"small\" compact ${isSelected ? 'checked' : ''} ${disabled ? 'disabled' : ''} data-row-index=\"${index}\"></snice-checkbox>`;\n const checkbox = selectCell.querySelector('snice-checkbox') as any;\n checkbox.disabled = disabled;\n tr.appendChild(selectCell);\n }\n\n const columnsToRender = this.getVisibleColumnDefinitions();\n\n if (this.list && this.listRenderer) {\n const td = document.createElement('td');\n td.className = 'list-view-cell';\n td.colSpan = Math.max(1, columnsToRender.length);\n const rendered = this.listRenderer(rowData, index);\n if (rendered instanceof HTMLElement) td.appendChild(rendered);\n else td.textContent = rendered == null ? '' : String(rendered);\n tr.appendChild(td);\n return tr;\n }\n\n let skipColumns = 0;\n columnsToRender.forEach((column, colIdx) => {\n // Column spanning: skip cells consumed by a previous span\n if (skipColumns > 0) {\n skipColumns--;\n return;\n }\n\n const td = document.createElement('td');\n td.setAttribute('data-key', column.key);\n td.setAttribute('part', 'cell');\n const value = rowData[column.key];\n\n this.applyCellPresentation(td, column, value, rowData);\n\n // Column span\n const colSpanDef = (column as any).colSpan;\n if (colSpanDef) {\n const span = typeof colSpanDef === 'function' ? colSpanDef(value, rowData) : colSpanDef;\n if (span > 1) {\n td.colSpan = span;\n skipColumns = span - 1;\n }\n }\n\n // Cell/row edit: when this cell is being edited, render its editor\n // element instead of the display cell.\n const editorEl = this.maybeCreateCellEditor(column, rowData, value, index);\n if (editorEl) {\n td.classList.add('editing');\n td.appendChild(editorEl);\n } else if (treeRow && column.key === this.treeData.getGroupColumn()) {\n // Tree data: add indent + toggle on the group column\n const toggle = this.treeData.createToggle(treeRow);\n td.appendChild(toggle);\n const textSpan = document.createElement('span');\n textSpan.textContent = value == null ? '' : String(value);\n // Clicking the text label also toggles expand/collapse\n if (treeRow.hasChildren) {\n textSpan.style.cursor = 'pointer';\n textSpan.addEventListener('click', (e) => {\n e.stopPropagation();\n this.treeData.toggle(treeRow.key);\n this.renderBody();\n });\n }\n td.appendChild(textSpan);\n } else {\n td.appendChild(this.createCellElement(column, value, rowData));\n }\n\n // Apply column width\n const state = this.columnManager.getState(column.key);\n if (state) {\n td.style.width = `${state.width}px`;\n\n // Pinned column sticky positioning\n if (state.pinned === 'left') {\n const offsets = this.columnManager.getPinnedLeftOffsets();\n td.classList.add('pinned-cell');\n td.style.position = 'sticky';\n td.style.left = `${offsets.get(column.key) ?? 0}px`;\n td.style.zIndex = '1';\n } else if (state.pinned === 'right') {\n const offsets = this.columnManager.getPinnedRightOffsets();\n td.classList.add('pinned-cell');\n td.style.position = 'sticky';\n td.style.right = `${offsets.get(column.key) ?? 0}px`;\n td.style.zIndex = '1';\n }\n }\n\n tr.appendChild(td);\n });\n\n return tr;\n }\n\n private applyCellPresentation(td: HTMLTableCellElement, column: ColumnDefinition, value: any, row: any) {\n const applyStyle = (style?: ColumnDefinition['style']) => {\n if (!style) return;\n if (style.backgroundColor) td.style.backgroundColor = style.backgroundColor;\n if (style.color) td.style.color = style.color;\n if (style.fontWeight) td.style.fontWeight = style.fontWeight;\n if (style.fontStyle) td.style.fontStyle = style.fontStyle;\n if (style.fontSize) td.style.fontSize = style.fontSize;\n if (style.textDecoration) td.style.textDecoration = style.textDecoration;\n };\n\n applyStyle(column.style);\n for (const rule of column.conditionalFormats || []) {\n if (!rule.condition(value, row)) continue;\n applyStyle(rule.style);\n if (rule.className) td.classList.add(rule.className);\n break;\n }\n\n if (column.tooltip) {\n td.title = typeof column.tooltip === 'function'\n ? column.tooltip(value, row)\n : (value == null ? '' : String(value));\n }\n }\n\n // ── F: group + aggregate row construction ──\n\n /**\n * A group-header row: a single full-width cell holding an optional group\n * checkbox (selectable), the expand/collapse chevron (reusing the tree-toggle\n * affordance), the group value, and a leaf-count badge. The table's delegated\n * click handler toggles the whole cell (except the checkbox) and emits one\n * host-level `group-toggle` event.\n */\n private createGroupRow(group: GroupRow, totalColSpan: number): HTMLTableRowElement {\n const tr = document.createElement('tr');\n tr.className = 'group-header-row';\n tr.setAttribute('data-group-key', group.key);\n tr.setAttribute('data-depth', String(group.depth));\n tr.setAttribute('aria-label', `${group.value == null || group.value === '' ? 'Blank' : String(group.value)} group, ${group.count} rows`);\n\n const td = document.createElement('td');\n td.colSpan = totalColSpan;\n td.className = 'group-header-cell';\n\n // Group selection checkbox (multiple mode only — select-all semantics).\n if (this.selectable && this.selectionMode === 'multiple') {\n const state = this.groupSelectionState(group);\n const wrap = document.createElement('span');\n wrap.className = 'group-select-wrap';\n const checkbox = document.createElement('snice-checkbox') as any;\n checkbox.className = 'group-select';\n checkbox.setAttribute('size', 'small');\n checkbox.setAttribute('compact', '');\n checkbox.setAttribute('data-group-key', group.key);\n checkbox.setAttribute('aria-label', `Select all rows in ${group.value == null || group.value === '' ? 'blank' : String(group.value)} group`);\n checkbox.checked = state === 'all';\n checkbox.indeterminate = state === 'some';\n checkbox.disabled = this.getSelectableGroupIndices(group).length === 0;\n wrap.appendChild(checkbox);\n td.appendChild(wrap);\n }\n\n // The chevron is passive DOM; the root template's @click handler owns the\n // interaction and host-level group-toggle dispatch.\n const toggle = this.grouping.createToggle(group);\n td.appendChild(toggle);\n\n const label = document.createElement('span');\n label.className = 'group-header-label';\n label.textContent = group.value == null ? '' : String(group.value);\n td.appendChild(label);\n\n const count = document.createElement('span');\n count.className = 'group-header-count';\n count.textContent = String(group.count);\n td.appendChild(count);\n\n tr.appendChild(td);\n return tr;\n }\n\n /**\n * An aggregate footer row: per-column cells carrying the aggregate value for\n * columns that declare one (formatted through the column's normal type /\n * formatter pipeline), empty otherwise. Tool columns get spacer cells so the\n * aggregated values line up under their columns.\n */\n private createAggregateRow(agg: AggregateRow, _totalColSpan: number): HTMLTableRowElement {\n const tr = document.createElement('tr');\n tr.className = 'group-aggregate-row';\n tr.setAttribute('data-agg-scope', agg.scope);\n tr.setAttribute('data-depth', String(agg.depth));\n if (agg.groupKey) tr.setAttribute('data-group-key', agg.groupKey);\n const groupLabel = agg.groupValue == null || agg.groupValue === '' ? 'Blank' : String(agg.groupValue);\n const scopeLabel = agg.scope === 'table'\n ? 'Total'\n : `${agg.groupColumn ? `${agg.groupColumn}: ` : ''}${groupLabel} subtotal`;\n tr.setAttribute('aria-label', scopeLabel);\n\n // Tool-column spacers (match createRow / renderHeader order).\n if (this.rowReorder && this.rowDnD.isEnabled()) {\n const spacer = document.createElement('td');\n spacer.className = 'drag-handle-cell';\n tr.appendChild(spacer);\n }\n if (this.masterDetail.isEnabled()) {\n const spacer = document.createElement('td');\n spacer.className = 'detail-toggle-cell';\n tr.appendChild(spacer);\n }\n if (this.hasSelectionColumn()) {\n const spacer = document.createElement('td');\n spacer.className = 'select-column';\n tr.appendChild(spacer);\n }\n\n const columnsToRender = this.getVisibleColumnDefinitions();\n\n const labelColumn = columnsToRender.find(\n (column) => !Object.prototype.hasOwnProperty.call(agg.aggregates, column.key)\n );\n // If every visible column aggregates, keep the scope/group label in the\n // first aggregate cell instead of silently omitting it.\n const inlineLabelKey = labelColumn ? null : columnsToRender[0]?.key;\n let labelled = false;\n columnsToRender.forEach((column) => {\n const td = document.createElement('td');\n td.setAttribute('data-key', column.key);\n td.className = 'aggregate-cell';\n\n const hasAgg = Object.prototype.hasOwnProperty.call(agg.aggregates, column.key);\n if ((!hasAgg && !labelled) || (hasAgg && column.key === inlineLabelKey)) {\n labelled = true;\n const label = document.createElement('span');\n label.className = `aggregate-label${hasAgg ? ' aggregate-label--inline' : ''}`;\n label.textContent = scopeLabel;\n if (agg.scope === 'group' && agg.depth > 0) {\n label.style.paddingLeft = `${agg.depth * 1.5}rem`;\n }\n td.appendChild(label);\n }\n\n if (hasAgg) {\n const value = agg.aggregates[column.key];\n td.setAttribute('data-agg-value', String(value));\n // Format through the type/formatter pipeline, but never a custom\n // renderCell (it's a per-row renderer; aggregates have no row).\n const aggCol = (column.renderCell || (!column.formatter && column.valueFormatter))\n ? {\n ...column,\n renderCell: undefined,\n // valueFormatter is the newer pipeline spelling; cell elements\n // consume the established `formatter` field. Adapt it only for\n // the already-computed aggregate value (valueGetter ran before\n // reduction and must not run a second time here).\n formatter: column.formatter ?? column.valueFormatter,\n }\n : column;\n td.appendChild(this.createCellElement(aggCol, value));\n }\n\n // Keep pinned columns aligned under their headers.\n const state = this.columnManager.getState(column.key);\n if (state) {\n td.style.width = `${state.width}px`;\n if (state.pinned === 'left') {\n const offsets = this.columnManager.getPinnedLeftOffsets();\n td.classList.add('pinned-cell');\n td.style.position = 'sticky';\n td.style.left = `${offsets.get(column.key) ?? 0}px`;\n td.style.zIndex = '1';\n } else if (state.pinned === 'right') {\n const offsets = this.columnManager.getPinnedRightOffsets();\n td.classList.add('pinned-cell');\n td.style.position = 'sticky';\n td.style.right = `${offsets.get(column.key) ?? 0}px`;\n td.style.zIndex = '1';\n }\n }\n\n tr.appendChild(td);\n });\n\n return tr;\n }\n\n /** F: whether all / some / none of a group's rows are selected. */\n private groupSelectionState(group: GroupRow): 'all' | 'some' | 'none' {\n const indices = this.getSelectableGroupIndices(group);\n if (indices.length === 0) return 'none';\n const selected = indices.filter((i) => this.selectedRows.includes(i)).length;\n if (selected === 0) return 'none';\n if (selected === indices.length) return 'all';\n return 'some';\n }\n\n /** Raw indices in a group that the table's conditional selectability allows. */\n private getSelectableGroupIndices(group: GroupRow): number[] {\n const indices: number[] = [];\n for (const row of group.rows) {\n const index = this.indexOfRow(row);\n if (index < 0) continue;\n if (this.selectabilityCheck && !this.selectabilityCheck(row, index)) continue;\n indices.push(index);\n }\n return indices;\n }\n\n /** F: toggle a group's expansion, dispatch `group-toggle`, and re-render. */\n private toggleGroup(group: GroupRow) {\n this.grouping.toggle(group.key);\n this.invalidateGroupingCache();\n this.dispatchGroupToggle(group.key, group.value, this.grouping.isExpanded(group.key));\n this.renderBody();\n }\n\n // F: reflect selection state onto the rendered group-header checkboxes.\n // Called from the selectedRows @watch delta path (a data-row toggle must\n // update its group header's all/some/none without a full re-render).\n private updateGroupSelectionStates() {\n if (!this.tbody || !this.grouping.hasGrouping() || !this.selectable) return;\n const groups = this.getGroupingItems().filter((it): it is GroupRow => it.type === 'group');\n if (groups.length === 0) return;\n const byKey = new Map(groups.map((g) => [g.key, g]));\n const headers = this.tbody.querySelectorAll('tr.group-header-row');\n headers.forEach((header) => {\n const key = header.getAttribute('data-group-key');\n const group = key ? byKey.get(key) : undefined;\n if (!group) return;\n const checkbox = header.querySelector('snice-checkbox.group-select') as any;\n if (!checkbox) return;\n const state = this.groupSelectionState(group);\n checkbox.checked = state === 'all';\n checkbox.indeterminate = state === 'some';\n });\n }\n\n @dispatch('group-toggle', { bubbles: true, composed: true })\n private dispatchGroupToggle(key: string, value: any, expanded: boolean) {\n return { key, value, expanded };\n }\n\n // ── Editor rendering ──\n\n /**\n * If the given cell is currently being edited (cell mode → this exact cell;\n * row mode → any editable cell in the edited row), build and wire its editor\n * element. Returns null when the cell is not in an edit state.\n */\n private maybeCreateCellEditor(column: any, rowData: any, value: any, index: number): HTMLElement | null {\n if (!this.editable) return null;\n\n let editing = false;\n let editValue = value;\n let editorType: EditorType;\n\n if (this.editMode === 'row') {\n const rowState = this.editor.getRowEditState();\n if (rowState?.isEditing && rowState.rowIndex === index\n && this.editor.isCellEditable(rowData, column.key)) {\n editing = true;\n editValue = rowState.editedRow[column.key];\n }\n editorType = this.resolveEditorType(column);\n } else {\n const cellState = this.editor.getCellEditState();\n if (cellState?.isEditing && cellState.rowIndex === index\n && cellState.columnKey === column.key) {\n editing = true;\n editValue = cellState.currentValue;\n }\n editorType = cellState?.editorType ?? this.resolveEditorType(column);\n }\n\n if (!editing) return null;\n\n // E2: a custom renderEditor bypasses the built-in editor. commit(v) writes\n // the value through the same pipeline the default editor uses, then commits;\n // cancel() aborts. No default wiring is attached — the renderer owns its UI.\n if (typeof column.renderEditor === 'function') {\n const commit = (v: any) => {\n if (this.editMode === 'row') this.editor.updateRowField(column.key, v);\n else this.editor.updateCellValue(v);\n this.commitEdit();\n };\n const cancel = () => this.cancelEdit();\n return column.renderEditor(editValue, rowData, column, commit, cancel);\n }\n\n const options = column.selectOptions ? { selectOptions: column.selectOptions } : undefined;\n const editorEl = this.editor.createEditor(editorType, editValue, options);\n this.wireEditorElement(editorEl, column);\n return editorEl;\n }\n\n /** Resolve the editor kind for a column (explicit override wins, else by type). */\n private resolveEditorType(column: any): EditorType {\n if (column.editorType) return column.editorType;\n return this.editor.getEditorType(column.type || 'text');\n }\n\n /**\n * Attach input/commit/cancel behavior to an editor element. Plain listeners\n * on a module-created element — the established pattern for imperative table\n * DOM (see createRow's checkbox/tree wiring).\n */\n private wireEditorElement(editorEl: HTMLElement, column: any) {\n const isCheckbox = editorEl instanceof HTMLInputElement && editorEl.type === 'checkbox';\n const readValue = () =>\n isCheckbox ? (editorEl as HTMLInputElement).checked : (editorEl as any).value;\n\n const syncValue = () => {\n const v = readValue();\n if (this.editMode === 'row') this.editor.updateRowField(column.key, v);\n else this.editor.updateCellValue(v);\n };\n\n editorEl.addEventListener('input', syncValue);\n editorEl.addEventListener('change', syncValue);\n\n editorEl.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n syncValue();\n this.commitEdit();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n this.cancelEdit();\n }\n });\n\n editorEl.addEventListener('blur', () => {\n // Commit on blur only in cell mode — in row mode, tabbing between the\n // row's editors would otherwise commit the whole row prematurely. Guard\n // on isEditing so re-renders that remove the editor (also firing blur)\n // don't re-trigger a commit.\n if (this.editMode !== 'row' && this.editor.isEditing()) {\n syncValue();\n this.commitEdit();\n }\n });\n }\n\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snice-table.js","sources":["../../../../components/table/snice-table.ts"],"sourcesContent":["import { element, property, query, request, dispatch, watch, render, styles, html, css, ready, dispose, on, observe } from 'snice';\nimport '../input/snice-input';\nimport '../select/snice-select';\nimport '../button/snice-button';\nimport '../checkbox/snice-checkbox';\nimport '../modal/snice-modal';\nimport '../empty-state/snice-empty-state';\nimport './snice-cell.ts';\nimport './snice-cell-text.ts';\nimport './snice-cell-number.ts';\nimport './snice-cell-date.ts';\nimport './snice-cell-boolean.ts';\nimport './snice-cell-rating.ts';\nimport './snice-cell-progress.ts';\nimport './snice-cell-duration.ts';\nimport './snice-cell-filesize.ts';\nimport './snice-cell-sparkline.ts';\nimport './snice-cell-percentage.ts';\nimport './snice-cell-tag.ts';\nimport './snice-cell-status.ts';\nimport './snice-cell-actions.ts';\nimport './snice-cell-link.ts';\nimport './snice-cell-email.ts';\nimport './snice-cell-phone.ts';\nimport './snice-cell-color.ts';\nimport './snice-cell-location.ts';\nimport './snice-cell-json.ts';\nimport './snice-cell-currency.ts';\nimport './snice-cell-image.ts';\nimport './snice-column.ts';\nimport './snice-row.ts';\nimport { TableVirtualizer } from './table-virtualizer';\nimport { TableColumnManager } from './table-column-manager';\nimport { TableFilterEngine } from './table-filter-engine';\nimport { TableEditor } from './table-editor';\nimport type { EditorType } from './table-editor';\nimport { TableKeyboard } from './table-keyboard';\nimport { TableExport } from './table-export';\nimport { TableMasterDetail } from './table-master-detail';\nimport { TableToolbar } from './table-toolbar';\nimport { TableTreeData } from './table-tree-data';\nimport { TableGrouping } from './table-grouping';\nimport type { DisplayItem, GroupRow, AggregateRow } from './table-grouping';\nimport { TableColumnMenu } from './table-column-menu';\nimport { TableRowDnD, TableColumnDnD } from './table-row-dnd';\nimport type { FilterModel } from './table-filter-engine';\nimport type { DetailPanelOptions } from './table-master-detail';\nimport type { ToolbarOptions } from './table-toolbar';\nimport type { TreeDataOptions, TreeRow } from './table-tree-data';\nimport type { ColumnGroup } from './table-column-manager';\nimport type { ColumnDefinition, SniceTableElement, SelectionMode, ListViewRenderer } from './snice-table.types';\n\n/**\n * A single desired body row for the render-path reconciler (Task B). `key`\n * identifies the row across renders (the row-object itself for data rows, a\n * synthetic string for pinned / detail rows). `sig` captures everything about\n * the row's DOM that a data-object move can't fix by re-stamping — when it is\n * unchanged the existing element is reused. `alwaysRebuild` forces a fresh\n * element (edit-state and detail rows). `restampIndex`, when present, updates\n * the reused row's index-derived attributes after a reorder.\n */\ninterface RowEntry {\n key: unknown;\n sig: string;\n create: () => HTMLElement;\n alwaysRebuild?: boolean;\n restampIndex?: number;\n}\n\n@element('snice-table')\nexport class SniceTable extends HTMLElement implements SniceTableElement {\n\n @property({ type: Boolean, attribute: 'striped' })\n striped = false;\n\n @property({ type: Boolean, attribute: 'searchable' })\n searchable = false;\n\n @property({ type: Boolean, attribute: 'filterable' })\n filterable = false;\n\n @property({ type: Boolean, attribute: 'sortable' })\n sortable = false;\n\n @property({ type: Boolean, attribute: 'selectable' })\n selectable = false;\n\n @property({ type: Boolean, attribute: 'hoverable' })\n hoverable = true;\n\n @property({ type: Boolean, attribute: 'clickable' })\n clickable = false;\n\n @property({ type: Boolean, attribute: 'list' })\n list = false;\n\n @property({ type: Boolean, attribute: 'pagination' })\n pagination = false;\n\n @property({ attribute: 'pagination-mode' })\n paginationMode: 'client' | 'server' = 'client';\n\n @property({ type: Number, attribute: 'page-size' })\n pageSize = 10;\n\n @property({ type: Number, attribute: 'current-page' })\n currentPage = 1;\n\n @property({ type: Number, attribute: 'total-items' })\n totalItems = 0;\n\n @property({ type: Array, attribute: false })\n pageSizes: number[] = [10, 25, 50, 100];\n\n @property({ type: Number, attribute: 'search-debounce' })\n searchDebounce = 500;\n\n // C1: reactive, no attribute reflection. A post-mount assignment (or the\n // setData/setColumns aliases) re-renders through the microtask-coalesced\n // queue — see handleColumnsAssignment / handleDataAssignment.\n @property({ attribute: false })\n columns: any[] = [];\n\n @property({ attribute: false })\n data: any[] = [];\n\n /**\n * Data mode: 'local' = client-side, table owns the dataset (set via setData\n * or the `data` property; filter/sort run locally);\n * 'remote' = server-side, every filter/sort/search/page change\n * fires @request('table/data'); a @respond handler in\n * the parent controller returns the new page.\n *\n * Default is 'local'. Set `mode=\"remote\"` on the element OR assign the\n * property to opt into remote mode.\n */\n @property() mode: 'local' | 'remote' = 'local';\n\n // C1: setColumns is a thin alias over the reactive assignment — its @watch\n // resyncs the column model and coalesces the header+body render.\n setColumns(columns: any[]) {\n this.columns = columns;\n }\n\n // C1: setData is the IMPERATIVE bulk-load path. It resyncs the data model\n // (snapshot + row-index map) exactly like the reactive `table.data =` setter,\n // but does NOT eagerly re-render — the established API fills the body via an\n // explicit render (or the coalesced render from a paired setColumns). Keeping\n // the eager render off this path avoids re-warming the filtered snapshot the\n // caller may want left cold. The reactive PROPERTY (`table.data = rows`) is\n // the auto-rendering entry point.\n setData(data: any[]) {\n this.settingDataImperative = true;\n this.data = data;\n this.settingDataImperative = false;\n }\n\n @property({ type: Array, attribute: false })\n currentSort: Array<{ column: string, direction: 'asc' | 'desc' }> = [];\n\n // Don't use @property decorator to avoid auto-rendering on searchText change\n // This would cause the input to lose focus while typing\n searchText: string = '';\n\n @property({ type: String, attribute: 'selector' })\n selector: string = '';\n\n @property({ type: Array, attribute: false })\n selectorOptions: Array<{value: string, label: string}> = [];\n\n @property({ type: Boolean, attribute: 'loading' })\n loading: boolean = false;\n\n // Set when a remote-mode load fails; cleared on the next successful load.\n // Not a @property — renderBody() reads it directly, no attribute needed.\n private loadError: string | null = null;\n\n @property({ type: Boolean, attribute: 'virtualize' })\n virtualize = false;\n\n @property({ type: Number, attribute: 'row-height' })\n rowHeight = 48;\n\n @property({ type: Number, attribute: 'virtual-buffer' })\n virtualBuffer = 200;\n\n @property({ type: Boolean, attribute: 'column-resize' })\n columnResize = false;\n\n @property({ type: Boolean, attribute: 'editable' })\n editable = false;\n\n @property({ attribute: 'edit-mode' })\n editMode: 'cell' | 'row' = 'cell';\n\n @property({ attribute: 'density' })\n density: 'compact' | 'standard' | 'comfortable' = 'standard';\n\n @property({ type: Boolean, attribute: 'header-filters' })\n headerFilters = false;\n\n @property({ type: Boolean, attribute: 'quick-filter' })\n quickFilter = false;\n\n @property({ type: Boolean, attribute: 'row-reorder' })\n rowReorder = false;\n\n @property({ type: Boolean, attribute: 'column-reorder' })\n columnReorder = false;\n\n @property({ type: Boolean, attribute: 'column-menu' })\n columnMenu = false;\n\n @property({ type: Boolean, attribute: 'lazy-load' })\n lazyLoad = false;\n\n @property({ type: Number, attribute: 'lazy-load-threshold' })\n lazyLoadThreshold = 200; // px from bottom to trigger\n\n @property({ type: Array, attribute: false })\n selectedRows: number[] = [];\n\n // E1: selection behavior. 'multiple' (default) preserves the historical\n // additive-toggle path; 'single' collapses to one row; 'none' disables it.\n @property({ attribute: 'selection-mode' })\n selectionMode: SelectionMode = 'multiple';\n\n // E1: shift-range anchor. Holds the row OBJECT (not an index) so it tracks the\n // row across a sort that moves it — the range is computed against the current\n // filtered snapshot / rowIndexMap at click time.\n private selectionAnchor: any = null;\n\n // F: row grouping. `groupBy` is column key(s) to group by; assigning it\n // post-mount re-renders through the coalescing queue (handleGroupByChange).\n // Aggregation is per-column (ColumnDefinition.aggregate) and needs no flag —\n // the grouping model reports isEnabled() when either grouping or aggregation\n // is active, and the body routes through the flattened display list in both\n // cases. attribute:false — a string[] can't reflect to an attribute, and the\n // reactive contract is property assignment (mirrors columns/data).\n @property({ attribute: false })\n groupBy: string | string[] = '';\n\n @property({ attribute: false })\n groupDefaults: { expanded?: boolean } = {};\n\n // F: flattened group+row+aggregate display list cache. Rebuilt lazily from the\n // filtered snapshot; invalidated on the same model mutations as filteredCache\n // PLUS group expand/collapse and groupBy/column changes (invalidateGroupingCache).\n private groupingCache: DisplayItem[] | null = null;\n\n // Module instances\n private virtualizer = new TableVirtualizer();\n private columnManager = new TableColumnManager();\n private filterEngine = new TableFilterEngine();\n private editor = new TableEditor();\n private keyboard = new TableKeyboard();\n private exporter = new TableExport();\n private masterDetail = new TableMasterDetail();\n private toolbar = new TableToolbar();\n private treeData = new TableTreeData();\n private grouping = new TableGrouping();\n private columnMenuManager = new TableColumnMenu();\n private rowDnD = new TableRowDnD();\n private columnDnD = new TableColumnDnD();\n private pinnedTopRows: any[] = [];\n private pinnedBottomRows: any[] = [];\n private toolbarOptions: ToolbarOptions | null = null;\n private lazyLoadHandler: (() => void) | null = null;\n private lazyLoadContainer: HTMLElement | null = null;\n private rowHeightCallback: ((row: any, index: number) => number) | null = null;\n private virtualRowsSnapshot: Array<{ data: any; index: number; treeRow?: TreeRow; groupItem?: DisplayItem }> = [];\n\n @query('table')\n table!: HTMLTableElement;\n\n @query('thead')\n thead!: HTMLTableSectionElement;\n\n @query('tbody')\n tbody!: HTMLTableSectionElement;\n\n\n @request('table/config')\n async *getTableConfig(): any {\n const config = await (yield {});\n this.columns = config.columns || [];\n this.selectorOptions = config.selectorOptions || [];\n // Wait for next frame to ensure DOM is updated\n await new Promise(resolve => requestAnimationFrame(resolve));\n this.renderHeader();\n this.renderControls();\n return config;\n }\n\n @request('table/data')\n async *getTableData(): any {\n // A5: capture this request's sequence number. A later request bumps the\n // counter, so a slow earlier response finds seq !== this.dataRequestSeq and\n // bails without touching the model — no out-of-order clobber.\n const seq = ++this.dataRequestSeq;\n this.loading = true;\n this.selectedRows = []; // Clear selections when loading new data\n\n try {\n const params: any = {\n search: this.searchText,\n sort: this.currentSort,\n filter: this.filterEngine.getFilterModel(),\n selector: this.selector\n };\n\n if (this.pagination) {\n params.page = this.currentPage;\n params.pageSize = this.pageSize;\n }\n const response = await (yield params);\n if (seq !== this.dataRequestSeq) return; // superseded by a newer request\n this.data = response.data || [];\n this.rebuildRowIndex();\n if (response.totalItems !== undefined) {\n this.totalItems = response.totalItems;\n }\n this.loadError = null;\n this.classList.remove('table--error');\n this.loading = false;\n // Wait for next frame to ensure DOM is updated\n await new Promise(resolve => requestAnimationFrame(resolve));\n if (seq !== this.dataRequestSeq) return; // superseded while awaiting frame\n this.renderBody();\n return response;\n } catch (error) {\n if (seq !== this.dataRequestSeq) return; // stale failure — ignore silently\n console.error('Error loading table data:', error);\n this.loadError = error instanceof Error ? error.message : String(error);\n this.classList.add('table--error');\n this.dispatchLoadError(error);\n this.loading = false;\n // Wait for next frame to ensure DOM is updated\n await new Promise(resolve => requestAnimationFrame(resolve));\n this.renderBody();\n }\n }\n\n private unsortedData: any[] = [];\n private dataRequestTimeout: any = null;\n\n // A1: row-object → its index in `this.data`. Replaces the O(n) `data.indexOf`\n // that ran per row on every selection toggle (was O(n²) for select-all).\n // `rowIndexDataRef` is the array the map was built from — a plain\n // `table.data = [...]` assignment swaps the array without going through\n // setData/rebuildRowIndex, so `ensureRowIndex()` lazily rebuilds when it\n // detects the reference changed.\n private rowIndexMap = new Map<any, number>();\n private rowIndexDataRef: any[] | null = null;\n\n // A4: the filtered snapshot getFilteredData() hands out. Recomputing it per\n // rAF scroll frame re-ran the whole filter engine every frame. Invalidated on\n // every mutation of data / filters / sort (see invalidateFilteredCache).\n private filteredCache: any[] | null = null;\n\n // A5: monotonic request id. Captured at request start; a response only\n // applies if it is still the latest, so a slow earlier response can't clobber\n // a fast later one.\n private dataRequestSeq = 0;\n\n // Task B: render-path recycling. Keyed by row-object identity (data rows) or a\n // synthetic string key (pinned / detail rows). Maps a key to the <tr> element\n // currently rendered for it plus the signature it was rendered with. On the\n // next render, a key whose object and signature are unchanged reuses its <tr>\n // (moved when order changes) instead of reconstructing it and every cell.\n // Rebuilt fresh on every render pass, so switching render modes is safe.\n private renderedRows = new Map<unknown, { el: HTMLElement; sig: string }>();\n\n // C1: brackets the internal `this.data` reassignment inside sortLocalData so\n // the data @watch treats a re-sorted view of the same rows as NOT a new\n // dataset — it must not refresh the unsortedData snapshot or double-render.\n private settingSortedData = false;\n\n // C1: set while the imperative setData() runs so the data @watch resyncs the\n // model but skips the auto-render (the caller drives the body fill).\n private settingDataImperative = false;\n\n // C1/C2: microtask-coalesced render queue. Reactive assignments schedule a\n // render here instead of calling renderHeader/renderBody synchronously —\n // MANDATORY, because happy-dom crashes constructing cell elements inside a\n // property-setter stack. A burst of assignments in one tick flushes once.\n private renderQueued = false;\n private pendingHeaderRender = false;\n private pendingBodyRender = false;\n\n private scheduleRender(what: 'header' | 'body' | 'both') {\n if (what === 'header' || what === 'both') this.pendingHeaderRender = true;\n if (what === 'body' || what === 'both') this.pendingBodyRender = true;\n if (this.renderQueued) return;\n\n this.renderQueued = true;\n queueMicrotask(() => {\n // @property invokes watchers before it asks Snice to update the template.\n // A second microtask lets that differential render commit first when a\n // property changes the table's structural mode (notably slotted rows →\n // grouped native table), while still coalescing a burst into one flush.\n queueMicrotask(() => {\n this.renderQueued = false;\n const doHeader = this.pendingHeaderRender;\n const doBody = this.pendingBodyRender;\n this.pendingHeaderRender = false;\n this.pendingBodyRender = false;\n if (doHeader) this.renderHeader();\n if (doBody) this.renderBody();\n });\n });\n }\n\n\n private debouncedDataRequest() {\n // Set loading immediately for instant feedback\n if (!this.loading) {\n this.loading = true;\n }\n \n if (this.dataRequestTimeout) {\n clearTimeout(this.dataRequestTimeout);\n }\n \n this.dataRequestTimeout = setTimeout(() => {\n this.getTableData();\n this.dataRequestTimeout = null;\n }, 150);\n }\n\n @styles()\n styles() {\n return css/*css*/`\n :host([hidden]) {\n display: none;\n}\n\n:host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 200px;\n }\n\n /* Native Fullscreen API: paint the host's background as the backdrop\n so the area outside our box (during transition) matches dark/light. */\n :host(:fullscreen) {\n background: var(--snice-color-surface, rgb(255 255 255));\n }\n :host(:fullscreen)::backdrop {\n background: var(--snice-color-surface, rgb(255 255 255));\n }\n\n /* CSS fallback fullscreen — used when requestFullscreen is blocked. */\n :host(.table-fullscreen) {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--snice-color-surface, rgb(255 255 255));\n padding: var(--snice-spacing-md, 1rem);\n overflow: auto;\n display: flex;\n flex-direction: column;\n }\n\n :host(.table-fullscreen) .snice-table {\n flex: 1;\n height: auto;\n }\n\n :host(.table-fullscreen) .table-frame {\n flex: 1;\n max-height: none;\n }\n\n\n\n .snice-table {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 0;\n }\n\n /* Frame wraps super-header + table; provides the rounded border.\n flex:1 + min-height:0 lets it absorb the remaining host height\n instead of letting content size dictate height. */\n .table-frame {\n position: relative;\n flex: 1;\n min-height: 0;\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-lg, 0.5rem);\n overflow: auto;\n }\n\n table {\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n /* no border or radius — handled by .table-frame */\n }\n\n /* Super-header (slotted area above column headers) */\n .table-superheader {\n background: var(--snice-color-surface, rgb(255 255 255));\n }\n\n .table-superheader:empty {\n display: none;\n }\n\n .table-superheader ::slotted(*) {\n display: block;\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-md, 1rem);\n border-bottom: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n th, td {\n padding: var(--snice-table-cell-padding, var(--snice-spacing-xs, 0.5rem) var(--snice-spacing-sm, 0.75rem));\n border-bottom: var(--snice-table-row-border, 1px solid var(--snice-color-border, rgb(226 226 226)));\n border-right: var(--snice-table-cell-border, 1px solid var(--snice-color-border, rgb(226 226 226)));\n text-align: left;\n vertical-align: middle;\n color: var(--snice-color-text, rgb(23 23 23));\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n /* Remove right border on last cell in row */\n th:last-child,\n td:last-child {\n border-right: none;\n }\n\n /* Remove bottom border on last body row */\n tbody tr:last-child td {\n border-bottom: none;\n }\n\n /* Height fill: when the host is taller than its rows, an inert filler\n row (cloned from the last data row, so column widths and pinning\n track the table engine) keeps the column grid running to the bottom\n edge instead of the borders cutting off where the rows end. */\n tbody tr.table-fill-row {\n pointer-events: none;\n }\n\n tbody tr.table-fill-row td {\n border-bottom: none;\n padding: 0;\n }\n\n :host([striped]) tbody tr.table-fill-row {\n background: transparent;\n }\n\n :host([hoverable]) tbody tr.table-fill-row:hover {\n background: transparent;\n }\n\n th {\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-sm, 0.75rem);\n }\n\n /* Narrow utility columns: checkbox, expand toggle, drag handle.\n * vertical-align: middle is REQUIRED — td defaults to baseline and the\n * checkbox sits at the bottom when any other cell is taller (fat rows). */\n th.select-column,\n td.select-column,\n th.detail-toggle-cell,\n td.detail-toggle-cell,\n th.drag-handle-cell,\n td.drag-handle-cell {\n width: 1.75rem;\n max-width: 1.75rem;\n min-width: 1.75rem;\n text-align: center;\n vertical-align: middle;\n padding: 0 0.125rem;\n overflow: visible;\n box-sizing: content-box;\n }\n\n /* Force snice-checkbox compact + centered inside table */\n .select-column snice-checkbox {\n min-height: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n\n th {\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n color: var(--snice-color-text, rgb(23 23 23));\n font-weight: var(--snice-font-weight-semibold, 600);\n border-bottom: 1px solid var(--snice-color-border-subtle, var(--snice-color-border, rgb(226 226 226)));\n }\n\n th.sortable {\n cursor: pointer;\n user-select: none;\n }\n\n /* Hover and selected states share the same tokens as menu/list/command-palette\n * for cross-component visual consistency. */\n th.sortable:hover {\n background-color: var(--snice-color-surface-hover, rgb(243 244 246));\n }\n\n /* Sticky header (Task 4d) — thead cells stick to .table-frame's\n scroll-top edge. z-index sits above tbody cells (plain cells are\n unpositioned; pinned body td gets inline zIndex '1' in createRow) and\n at the pinned-header corner's own inline zIndex '2' (renderHeader),\n so a cell that is both pinned AND in the header still wins on\n horizontal scroll. Background matches the existing th background so\n rows never bleed through while scrolling underneath. */\n thead th {\n position: sticky;\n top: 0;\n z-index: 2;\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n /* Row styling */\n :host([striped]) tbody tr:nth-child(even) {\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n :host([hoverable]) tbody tr:hover {\n background-color: var(--snice-color-surface-hover, rgb(243 244 246));\n }\n\n :host([clickable]) tbody tr {\n cursor: pointer;\n }\n\n :host([selectable]:not([selection-mode=\"none\"])) tbody tr {\n cursor: pointer;\n }\n\n tbody tr[data-selected=\"true\"] {\n background-color: var(--snice-color-primary-subtle, rgb(239 246 255));\n box-shadow: inset 2px 0 0 0 var(--snice-color-primary, rgb(37 99 235));\n }\n\n tbody tr[data-selected=\"true\"]:hover {\n background-color: var(--snice-color-primary-subtle-hover, var(--snice-color-primary-subtle, rgb(219 234 254)));\n }\n\n /* List mode - hide vertical borders */\n :host([list]) th,\n :host([list]) td {\n border-right: none;\n }\n\n :host([list]) .table-frame {\n border-left: none;\n border-right: none;\n border-radius: 0;\n }\n\n [part=\"header\"] {\n background-color: var(--snice-color-surface, rgb(255 255 255));\n }\n\n [part=\"body\"] {\n background-color: var(--snice-table-body-bg, var(--snice-color-surface, rgb(255 255 255)));\n display: block;\n }\n\n /* Toolbar */\n .table-toolbar {\n display: flex;\n align-items: center;\n gap: var(--snice-spacing-xs, 0.5rem);\n padding: var(--snice-spacing-xs, 0.5rem) var(--snice-spacing-sm, 0.75rem);\n padding-left: 0;\n background: var(--snice-color-surface, rgb(255 255 255));\n }\n\n .toolbar-search {\n width: 16rem;\n max-width: 16rem;\n flex: 0 0 auto;\n }\n\n .toolbar-actions {\n display: flex;\n align-items: center;\n gap: 2px;\n margin-left: auto;\n }\n\n .toolbar-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n background: var(--snice-color-surface, rgb(255 255 255));\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n cursor: pointer;\n transition: all var(--snice-transition-fast, 150ms) ease;\n padding: 0;\n line-height: 1;\n font-family: inherit;\n }\n\n .toolbar-btn:hover {\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .toolbar-btn svg {\n width: 16px;\n height: 16px;\n }\n\n /* Toolbar dropdown menus */\n .toolbar-menu {\n position: absolute;\n z-index: 10001;\n min-width: 12rem;\n background: var(--snice-color-surface, rgb(255 255 255));\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n box-shadow: var(--snice-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));\n padding: var(--snice-spacing-2xs, 0.25rem);\n }\n\n .toolbar-menu-title {\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n font-size: var(--snice-font-size-xs, 0.75rem);\n font-weight: var(--snice-font-weight-semibold, 600);\n color: var(--snice-color-text-tertiary, rgb(115 115 115));\n text-transform: uppercase;\n letter-spacing: 0.05em;\n }\n\n .toolbar-menu-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n border: none;\n border-radius: 3px;\n background: transparent;\n color: var(--snice-color-text, rgb(23 23 23));\n font-size: var(--snice-font-size-sm, 0.875rem);\n font-family: inherit;\n cursor: pointer;\n text-align: left;\n }\n\n .toolbar-menu-item:hover {\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n .toolbar-menu-item--active {\n color: var(--snice-color-primary, rgb(37 99 235));\n font-weight: var(--snice-font-weight-medium, 500);\n }\n\n .toolbar-menu-item-indicator {\n font-size: 0.75rem;\n opacity: 0.7;\n }\n\n .toolbar-clear-btn {\n margin-top: var(--snice-spacing-2xs, 0.25rem);\n border-top: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: 0;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n font-size: var(--snice-font-size-xs, 0.75rem);\n }\n\n /* Filter menu */\n .toolbar-filter-menu {\n min-width: 16rem;\n padding: var(--snice-spacing-xs, 0.5rem);\n }\n\n .toolbar-filter-row {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-bottom: var(--snice-spacing-2xs, 0.25rem);\n }\n\n .toolbar-filter-label {\n font-size: var(--snice-font-size-xs, 0.75rem);\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n font-weight: var(--snice-font-weight-medium, 500);\n }\n\n .toolbar-filter-input {\n width: 100%;\n box-sizing: border-box;\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n font-size: var(--snice-font-size-sm, 0.875rem);\n font-family: inherit;\n color: var(--snice-color-text, rgb(23 23 23));\n background: var(--snice-color-surface, rgb(255 255 255));\n outline: none;\n }\n\n .toolbar-filter-input:focus {\n border-color: var(--snice-color-primary, rgb(37 99 235));\n }\n\n .toolbar-filter-input::placeholder {\n color: var(--snice-color-text-tertiary, rgb(115 115 115));\n }\n\n .table-controls {\n display: flex;\n gap: var(--snice-spacing-xs, 0.5rem);\n align-items: center;\n flex-wrap: wrap;\n padding: var(--snice-spacing-xs, 0.5rem) var(--snice-spacing-sm, 0.75rem);\n padding-left: 0;\n justify-content: flex-start;\n }\n\n :host(:not([searchable])) .search-input {\n display: none;\n }\n\n :host(.selector-options-empty) .selector-input {\n display: none;\n }\n\n /* snice-input/snice-select handle own styling — layout only */\n .search-input {\n width: 16rem;\n max-width: 16rem;\n flex: 0 0 auto;\n }\n\n .selector-input {\n min-width: 9.375rem;\n --snice-select-min-height: 2rem;\n }\n\n /* Sort indicators */\n .sort-header {\n display: flex;\n align-items: center;\n gap: var(--snice-spacing-xs, 0.5rem);\n justify-content: space-between;\n }\n\n\n .sort-indicator {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n line-height: 1;\n opacity: 0.3;\n transition: opacity var(--snice-transition-fast, 150ms);\n }\n\n .sort-indicator.active {\n opacity: 1;\n color: var(--snice-color-primary, rgb(37 99 235));\n }\n\n .sort-order {\n font-size: 0.625rem;\n font-weight: 700;\n background: var(--snice-color-primary, rgb(37 99 235));\n color: rgb(255 255 255);\n border-radius: 999px;\n padding: 0.0625rem 0.3125rem;\n min-width: 1rem;\n height: 1rem;\n line-height: 1rem;\n text-align: center;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Loading fade */\n tbody {\n transition: opacity var(--snice-transition-normal, 250ms);\n }\n\n :host([loading]) tbody {\n opacity: 0.5;\n }\n\n /* Refetch spinner while rows stay on screen (SNICE-142) */\n .table-loading-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n z-index: 2;\n }\n\n .no-data {\n text-align: center;\n padding: var(--snice-spacing-lg, 1.5rem);\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n }\n\n /* Remote-mode load error (Task 4c) — informed by the dead\n components/table/snice-table.css .table--error design. */\n :host(.table--error) .table-frame {\n border-color: var(--snice-color-danger, rgb(220 38 38));\n }\n\n .table-error-message {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--snice-spacing-2xs, 0.25rem);\n color: var(--snice-color-danger, rgb(220 38 38));\n }\n\n /* Pagination */\n .pagination {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--snice-spacing-md, 1rem);\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-md, 1rem);\n border-top: 1px solid var(--snice-color-border, rgb(226 226 226));\n background: var(--snice-color-surface, rgb(255 255 255));\n font-size: var(--snice-font-size-sm, 0.875rem);\n flex-wrap: wrap;\n }\n\n .pagination__info {\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n white-space: nowrap;\n }\n\n .pagination__controls {\n display: flex;\n align-items: center;\n gap: 2px;\n }\n\n .pagination__btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 2rem;\n height: 2rem;\n padding: 0 var(--snice-spacing-2xs, 0.25rem);\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n background: var(--snice-color-surface, rgb(255 255 255));\n color: var(--snice-color-text, rgb(23 23 23));\n font-size: var(--snice-font-size-sm, 0.875rem);\n cursor: pointer;\n transition: all var(--snice-transition-fast, 150ms) ease;\n font-family: inherit;\n line-height: 1;\n }\n\n .pagination__btn:hover:not(:disabled) {\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n .pagination__btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n .pagination__btn--active {\n background: var(--snice-color-primary, rgb(37 99 235));\n color: var(--snice-color-text-inverse, rgb(250 250 250));\n border-color: var(--snice-color-primary, rgb(37 99 235));\n }\n\n .pagination__btn--active:hover:not(:disabled) {\n background: var(--snice-color-primary-hover, rgb(29 78 216));\n }\n\n .pagination__btn:focus-visible {\n outline: 2px solid var(--snice-color-primary, rgb(37 99 235));\n outline-offset: 2px;\n z-index: 1;\n }\n\n .pagination__ellipsis {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 2rem;\n height: 2rem;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n }\n\n .pagination__size {\n display: flex;\n align-items: center;\n gap: var(--snice-spacing-xs, 0.5rem);\n white-space: nowrap;\n }\n\n .pagination__size label {\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n }\n\n .pagination__size-select {\n min-width: 4.5rem;\n --snice-select-min-height: 1.75rem;\n }\n\n /* Column resize handle */\n .resize-handle {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n cursor: col-resize;\n background: transparent;\n z-index: 1;\n }\n\n .resize-handle:hover,\n .resize-handle:active {\n background: var(--snice-color-primary, rgb(37 99 235));\n }\n\n /* Filter indicator */\n th.filtered::after {\n content: '';\n position: absolute;\n top: 4px;\n right: 8px;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--snice-color-primary, rgb(37 99 235));\n }\n\n /* Pinned column separator */\n .pinned-cell {\n background: var(--snice-color-surface, rgb(255 255 255));\n box-shadow: 2px 0 4px -1px rgb(0 0 0 / 0.1);\n }\n\n /* Density: compact */\n :host([density=\"compact\"]) th {\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n font-size: var(--snice-font-size-xs, 0.75rem);\n }\n\n :host([density=\"compact\"]) td {\n padding: var(--snice-spacing-3xs, 0.125rem) var(--snice-spacing-xs, 0.5rem);\n font-size: var(--snice-font-size-xs, 0.75rem);\n }\n\n /* Density: comfortable */\n :host([density=\"comfortable\"]) th {\n padding: var(--snice-spacing-md, 1rem);\n }\n\n :host([density=\"comfortable\"]) td {\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-md, 1rem);\n }\n\n /* Editing */\n .table-editor-input {\n width: 100%;\n box-sizing: border-box;\n padding: var(--snice-spacing-2xs, 0.25rem);\n border: 2px solid var(--snice-color-primary, rgb(37 99 235));\n border-radius: var(--snice-border-radius-sm, 0.125rem);\n font-family: inherit;\n font-size: inherit;\n color: var(--snice-color-text, rgb(23 23 23));\n background: var(--snice-color-surface, rgb(255 255 255));\n outline: none;\n }\n\n .table-editor-select {\n width: 100%;\n padding: var(--snice-spacing-2xs, 0.25rem);\n border: 2px solid var(--snice-color-primary, rgb(37 99 235));\n border-radius: var(--snice-border-radius-sm, 0.125rem);\n font-family: inherit;\n font-size: inherit;\n }\n\n .table-editor-checkbox {\n width: 1rem;\n height: 1rem;\n }\n\n td.editing {\n padding: 2px !important;\n }\n\n .cell-error {\n color: var(--snice-color-danger, rgb(220 38 38));\n font-size: var(--snice-font-size-xs, 0.75rem);\n margin-top: 2px;\n }\n\n /* Header filter row */\n .header-filter-row td {\n padding: 0;\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n border-bottom: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n .header-filter-input {\n width: 100%;\n box-sizing: border-box;\n padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);\n border: none;\n font-size: var(--snice-font-size-xs, 0.75rem);\n font-family: inherit;\n color: var(--snice-color-text, rgb(23 23 23));\n background: transparent;\n outline: none;\n }\n\n .header-filter-input::placeholder {\n color: var(--snice-color-text-tertiary, rgb(115 115 115));\n }\n\n .header-filter-input:focus {\n background: var(--snice-color-surface-container-lowest, rgb(248 247 245));\n }\n\n /* Tree data indentation */\n .tree-indent {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n }\n\n .tree-toggle {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 0.7rem;\n line-height: 1;\n width: 1.25rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform var(--snice-transition-fast, 150ms) ease;\n }\n\n .tree-toggle:hover {\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .tree-toggle:focus-visible {\n outline: var(--snice-focus-ring-width, 2px) solid var(--snice-focus-ring-color, hsl(217 91% 60% / 0.5));\n outline-offset: var(--snice-focus-ring-offset, 2px);\n }\n\n .tree-toggle-icon {\n width: 1rem;\n height: 1rem;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n transform: rotate(-90deg);\n }\n\n .tree-toggle--expanded .tree-toggle-icon {\n transform: rotate(0deg);\n }\n\n .tree-spacer {\n display: inline-block;\n width: 1.25rem;\n }\n\n /* Row grouping — group header row */\n .group-header-row {\n background: var(--snice-table-group-header-bg, var(--snice-color-surface-container-low, hsl(0 0% 98%)));\n }\n\n .group-header-cell {\n cursor: pointer;\n font-weight: var(--snice-font-weight-semibold, 600);\n color: var(--snice-table-group-header-color, var(--snice-color-text, hsl(0 0% 9%)));\n user-select: none;\n padding: var(--snice-spacing-xs, 0.5rem) var(--snice-spacing-sm, 0.75rem);\n }\n\n .group-header-cell .tree-indent {\n vertical-align: middle;\n }\n\n .group-select-wrap {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n margin-right: var(--snice-spacing-2xs, 0.25rem);\n }\n\n .group-header-label {\n vertical-align: middle;\n }\n\n .group-header-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.25rem;\n height: 1.25rem;\n margin-left: var(--snice-spacing-xs, 0.5rem);\n padding: 0 var(--snice-spacing-2xs, 0.25rem);\n border-radius: 999px;\n background: var(--snice-table-group-count-bg, var(--snice-color-surface-container-high, hsl(40 9% 97%)));\n color: var(--snice-table-group-count-color, var(--snice-color-text-secondary, hsl(0 0% 32%)));\n font-size: var(--snice-font-size-xs, 0.75rem);\n font-weight: var(--snice-font-weight-medium, 500);\n vertical-align: middle;\n }\n\n /* Row grouping — aggregate footer row */\n .group-aggregate-row {\n background: var(--snice-table-aggregate-bg, var(--snice-color-surface-container, hsl(0 0% 95%)));\n font-weight: var(--snice-font-weight-medium, 500);\n }\n\n .group-aggregate-row[data-agg-scope=\"table\"] {\n border-top: 2px solid var(--snice-table-aggregate-border-color, var(--snice-color-border, hsl(0 0% 82%)));\n font-weight: var(--snice-font-weight-semibold, 600);\n }\n\n .group-aggregate-row .aggregate-cell {\n color: var(--snice-table-aggregate-color, var(--snice-color-text, hsl(0 0% 9%)));\n }\n\n .aggregate-label {\n color: var(--snice-table-aggregate-label-color, var(--snice-color-text-secondary, hsl(0 0% 32%)));\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: var(--snice-font-size-xs, 0.75rem);\n }\n\n .aggregate-label--inline {\n display: block;\n margin-bottom: var(--snice-spacing-2xs, 0.25rem);\n }\n\n /* Row pinning */\n .pinned-row {\n font-weight: var(--snice-font-weight-medium, 500);\n border-bottom: 2px solid var(--snice-color-border, rgb(226 226 226));\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n .pinned-row--top {\n border-bottom: 2px solid var(--snice-color-primary, rgb(37 99 235));\n }\n\n .pinned-row--bottom {\n border-top: 2px solid var(--snice-color-primary, rgb(37 99 235));\n }\n\n /* Column group headers */\n .column-group-row th {\n text-align: center;\n font-size: var(--snice-font-size-xs, 0.75rem);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n background: var(--snice-color-surface-container, rgb(235 235 235));\n border-bottom: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n /* DnD */\n .drag-handle-cell {\n font-size: 0.875rem;\n }\n\n .drop-indicator {\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--snice-color-primary, rgb(37 99 235));\n z-index: 10;\n pointer-events: none;\n }\n\n tr[draggable=\"true\"]:active {\n cursor: grabbing;\n }\n\n /* Master-detail — animated like accordion */\n .detail-row {\n background: var(--snice-color-surface-container-high, rgb(252 251 249));\n }\n\n .detail-cell {\n max-width: none;\n }\n\n .detail-content {\n overflow: hidden;\n max-height: 0;\n transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n will-change: max-height;\n }\n\n .detail-content--open {\n max-height: var(--detail-max-height, 31.25rem);\n }\n\n .detail-content-inner {\n padding: var(--snice-spacing-sm, 0.75rem) var(--snice-spacing-md, 1rem);\n border-top: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n .detail-toggle {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .detail-toggle:hover {\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .detail-toggle-icon {\n width: 1rem;\n height: 1rem;\n transition: transform 0.2s ease;\n transform: rotate(-90deg);\n }\n\n .detail-toggle--expanded .detail-toggle-icon {\n transform: rotate(0deg);\n }\n\n /* Drag handle */\n .drag-handle-cell {\n cursor: grab;\n user-select: none;\n color: var(--snice-color-text-tertiary, rgb(115 115 115));\n font-size: 0.875rem;\n }\n\n /* Focus indicator for keyboard nav */\n [data-grid-focus] {\n outline: 2px solid var(--snice-color-primary, rgb(37 99 235));\n outline-offset: -2px;\n }\n\n /* Column menu */\n .table-column-menu {\n position: fixed;\n z-index: 10001;\n min-width: 10rem;\n background: var(--snice-color-surface-container-high, rgb(252 251 249));\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-md, 0.25rem);\n box-shadow: var(--snice-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));\n padding: 4px;\n }\n\n .column-menu-separator {\n height: 1px;\n background: var(--snice-color-border, rgb(226 226 226));\n margin: 4px 0;\n }\n\n .column-menu-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.375rem 0.625rem;\n border: none;\n border-radius: 3px;\n background: transparent;\n color: var(--snice-color-text, rgb(23 23 23));\n font-size: var(--snice-font-size-sm, 0.875rem);\n font-family: inherit;\n cursor: pointer;\n text-align: left;\n white-space: nowrap;\n }\n\n .column-menu-item:hover {\n background: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n .column-menu-item:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .column-menu-item--active {\n color: var(--snice-color-primary, rgb(37 99 235));\n font-weight: var(--snice-font-weight-medium, 500);\n }\n\n .column-menu-icon {\n width: 1rem;\n height: 1rem;\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--snice-color-text-secondary, rgb(82 82 82));\n }\n .column-menu-icon svg {\n width: 1rem;\n height: 1rem;\n }\n\n /* Slotted table layout */\n .snice-table--slotted {\n border: 1px solid var(--snice-color-border, rgb(226 226 226));\n border-radius: var(--snice-border-radius-lg, 0.5rem);\n overflow: hidden;\n }\n\n .snice-table--slotted .table-header {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: 1fr;\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n border-bottom: 2px solid var(--snice-color-border, rgb(226 226 226));\n padding: var(--snice-spacing-sm, 0.75rem);\n font-weight: var(--snice-font-weight-semibold, 600);\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .snice-table--slotted .header-cell {\n color: var(--snice-color-text, rgb(23 23 23));\n }\n\n .snice-table--slotted .table-header::slotted(snice-column) {\n padding: var(--snice-spacing-sm, 0.75rem);\n }\n\n .snice-table--slotted .table-body {\n display: flex;\n flex-direction: column;\n }\n\n .snice-table--slotted .table-body::slotted(snice-row) {\n border-bottom: 1px solid var(--snice-color-border, rgb(226 226 226));\n }\n\n .snice-table--slotted .table-body::slotted(snice-row:last-child) {\n border-bottom: none;\n }\n\n :host([striped]) .snice-table--slotted .table-body::slotted(snice-row:nth-child(even)) {\n background-color: var(--snice-color-surface-container-low, rgb(245 245 245));\n }\n\n :host([hoverable]) .snice-table--slotted .table-body::slotted(snice-row:hover) {\n background-color: var(--snice-color-surface-container, rgb(235 235 235));\n }\n `;\n }\n\n @render()\n render() {\n // Check if we have slotted rows\n const hasSlottedRows = this.querySelectorAll('snice-row[slot=\"rows\"]').length > 0\n && !this.shouldModelSlottedRows();\n\n if (hasSlottedRows) {\n // Use slotted rows layout\n return html/*html*/`\n <div class=\"snice-table snice-table--slotted\" @click=${this.handleClick} @keydown=${this.handleKeydown} @change=${this.handleChange} @checkbox-change=${this.handleChange}>\n <div class=\"table-controls-container\"></div>\n<div class=\"table-header\" id=\"slotted-header\"></div>\n <div class=\"table-body\">\n <slot name=\"rows\"></slot>\n </div>\n <slot name=\"columns\" style=\"display: none;\"></slot>\n </div>\n `;\n } else {\n // Use traditional table layout\n return html/*html*/`\n <div class=\"snice-table\" @click=${this.handleClick} @keydown=${this.handleKeydown} @change=${this.handleChange} @checkbox-change=${this.handleChange}>\n <div class=\"table-controls-container\"></div>\n<div class=\"table-frame\">\n <div class=\"table-superheader\" part=\"superheader\">\n <slot name=\"header\"></slot>\n </div>\n <table>\n <thead></thead>\n <tbody></tbody>\n </table>\n </div>\n <div class=\"table-pagination-container\"></div>\n </div>\n `;\n }\n }\n\n renderControls() {\n const container = this.shadowRoot?.querySelector('.table-controls-container');\n if (!container) return;\n\n // A configured toolbar owns this container. Reattach it when a structural\n // render replaces the shadow template; legacy controls must not overwrite it.\n if (this.toolbarOptions) {\n this.setToolbar(this.toolbarOptions);\n return;\n }\n\n const showControls = this.searchable || this.filterable || this.quickFilter;\n if (!showControls) {\n container.innerHTML = '';\n return;\n }\n\n container.innerHTML = '';\n const controlsDiv = document.createElement('div');\n controlsDiv.className = 'table-controls';\n controlsDiv.setAttribute('part', 'controls');\n\n if (this.quickFilter) {\n const quickInput = document.createElement('snice-input') as any;\n quickInput.className = 'quick-filter-input';\n quickInput.type = 'search';\n quickInput.placeholder = 'Quick filter...';\n quickInput.size = 'small';\n quickInput.clearable = true;\n quickInput.style.width = '16rem';\n quickInput.style.maxWidth = '16rem';\n quickInput.value = this.filterEngine.getFilterModel().quickFilter || '';\n quickInput.addEventListener('input', this.handleQuickFilterInput);\n controlsDiv.appendChild(quickInput);\n } else if (this.searchable) {\n const searchInput = document.createElement('snice-input');\n searchInput.className = 'search-input';\n searchInput.setAttribute('type', 'search');\n searchInput.setAttribute('placeholder', 'Search...');\n searchInput.setAttribute('size', 'small');\n searchInput.style.width = '16rem';\n searchInput.style.maxWidth = '16rem';\n searchInput.style.flex = '0 0 auto';\n searchInput.addEventListener('input', this.handleSearchInput);\n controlsDiv.appendChild(searchInput);\n }\n\n if (this.filterable) {\n const select = document.createElement('snice-select');\n select.className = 'selector-input';\n select.setAttribute('multiple', '');\n select.setAttribute('searchable', '');\n select.setAttribute('clearable', '');\n select.setAttribute('placeholder', 'Filter...');\n select.setAttribute('size', 'medium');\n\n this.selectorOptions.forEach(opt => {\n const option = document.createElement('snice-option');\n option.setAttribute('value', opt.value);\n option.textContent = opt.label;\n select.appendChild(option);\n });\n\n controlsDiv.appendChild(select);\n }\n\n container.appendChild(controlsDiv);\n }\n\n // Re-derive the fill row whenever the frame's box changes (host resized,\n // fullscreen toggled) — the leftover space below the rows changes with it.\n @observe('resize', '.table-frame')\n handleFrameResize() {\n this.updateFillRow();\n }\n\n @ready()\n async initialize() {\n // Listen for controller attached event\n this.addEventListener('controller-attached', this.onAttached as EventListener);\n\n // Listen for select change events from the filter dropdown\n this.addEventListener('select-change', this.handleSelectorChange as EventListener);\n this.addEventListener('row-select', this.handleSlottedRowSelect as EventListener);\n\n // Listen for detail panel toggle\n this.addEventListener('detail-toggle', () => this.renderBody());\n\n // Persist committed edits back into the local dataset so the re-render\n // shows the new value. Fires before commitEdit()'s renderBody() (the\n // editor dispatches synchronously), so data is current by render time.\n this.addEventListener('cell-edit-commit', ((e: CustomEvent) => {\n const { rowIndex, columnKey, newValue } = e.detail;\n const row = this.data[rowIndex];\n if (row) row[columnKey] = newValue;\n // A4: an in-place cell change can alter which rows match an active filter.\n // Row identity is unchanged, so the index map stays valid — only the\n // filtered snapshot must be dropped.\n this.invalidateFilteredCache();\n // Task B: the row object was mutated in place (same reference), so the\n // reconciler would reuse its stale cell DOM. Drop its cached <tr> so the\n // post-commit render rebuilds it with the new value.\n if (row) this.invalidateRenderedRow(row);\n }) as EventListener);\n\n this.addEventListener('row-edit-commit', ((e: CustomEvent) => {\n const { rowIndex, newRow } = e.detail;\n if (this.data[rowIndex]) this.data[rowIndex] = newRow;\n // A1/A4: an element was swapped in place (same array reference), so the\n // ref-check can't see it — resync the index map and filtered snapshot.\n this.rebuildRowIndex();\n }) as EventListener);\n\n // Wait for snice-column to be defined\n await customElements.whenDefined('snice-column');\n await customElements.whenDefined('snice-row');\n\n // Process slotted columns and rows\n await this.processSlottedContent();\n await (this as any).rendered;\n\n // Pre-connect property assignments do not invoke change-only watchers in\n // Snice. Configure grouping explicitly once initialization has applied\n // those values so `table.groupBy = ...` works before the element is added\n // to the document (React/story/programmatic creation path).\n this.syncGrouping();\n\n // Render controls after initial setup\n this.renderControls();\n\n // Initialize feature modules\n this.initializeModules();\n this.initColumnMenu();\n\n // Setup DnD\n if (this.rowReorder) this.rowDnD.attach(this);\n if (this.columnReorder) this.columnDnD.attach(this);\n\n // We are at the safe post-template point and all feature modules that\n // affect row/header construction are attached. Finish the initial paint\n // synchronously so the public `ready` promise includes pre-connect\n // grouping, DnD handles, keyboard ARIA, and aggregate footers.\n this.renderHeader();\n this.renderBody();\n\n // Setup virtualization if enabled\n if (this.virtualize) {\n requestAnimationFrame(() => {\n if (!this.virtualizer.isEnabled()) this.setupVirtualization();\n });\n }\n\n // Setup lazy loading\n if (this.lazyLoad) {\n requestAnimationFrame(() => this.setupLazyLoading());\n }\n\n // Listen for DnD events\n this.addEventListener('row-reorder', ((e: CustomEvent) => {\n const { fromIndex, toIndex } = e.detail;\n if (!Number.isInteger(fromIndex) || !Number.isInteger(toIndex)\n || fromIndex < 0 || toIndex < 0\n || fromIndex >= this.data.length || toIndex >= this.data.length) return;\n if (fromIndex === toIndex) return;\n\n const selectedRows = this.selectedRows\n .map((index) => this.data[index])\n .filter((row) => row !== undefined);\n const expandedRows = Array.from(this.masterDetail.getExpandedRows())\n .map((index) => this.data[index])\n .filter((row) => row !== undefined);\n const item = this.data.splice(fromIndex, 1)[0];\n\n // A drop onto another group means reparenting the row. Group rendering\n // is derived from the groupBy fields, so merely changing raw array order\n // would make a cross-group drop visually snap back to its old group.\n // Copy the target leaf's grouping values before insertion so the rendered\n // result honors the user's actual drop target (all nested levels too).\n const targetBeforeRemoval = this.data[toIndex > fromIndex ? toIndex - 1 : toIndex];\n if (item && targetBeforeRemoval && this.grouping.hasGrouping()) {\n for (const key of this.grouping.getGroupByKeys()) {\n item[key] = targetBeforeRemoval[key];\n }\n }\n\n this.data.splice(toIndex, 0, item);\n this.data = [...this.data];\n this.selectedRows = selectedRows\n .map((row) => this.indexOfRow(row))\n .filter((index) => index >= 0);\n this.masterDetail.setExpandedRows(\n expandedRows.map((row) => this.indexOfRow(row)).filter((index) => index >= 0)\n );\n }) as EventListener);\n\n this.addEventListener('column-reorder', ((e: CustomEvent) => {\n const { fromKey, toKey } = e.detail;\n const fromIdx = this.columns.findIndex(c => c.key === fromKey);\n const toIdx = this.columnManager.getVisibleColumns().findIndex(c => c.key === toKey);\n if (fromIdx >= 0 && toIdx >= 0) {\n this.columnManager.moveColumn(fromKey, toIdx);\n this.renderHeader();\n this.renderBody();\n }\n }) as EventListener);\n\n // Listen for tree toggle\n this.addEventListener('tree-toggle', () => this.renderBody());\n\n }\n\n private async processSlottedContent() {\n // Get slotted column elements\n const columnElements = Array.from(this.querySelectorAll('snice-column[slot=\"columns\"]')) as any[];\n const rowElements = Array.from(this.querySelectorAll('snice-row[slot=\"rows\"]')) as any[];\n await Promise.all(rowElements.map((row) => row.ready));\n\n if (columnElements.length > 0) {\n // Extract column definitions from snice-column elements\n this.columns = columnElements.map((col: any) => col.getColumnDefinition());\n }\n\n // Pass declarative or programmatically assigned column definitions to rows.\n rowElements.forEach((row: any, index: number) => {\n row.columns = this.columns;\n row.index = index;\n row.hoverable = this.hoverable;\n row.clickable = this.clickable;\n });\n this.syncSlottedSelectionState();\n\n // Grouping/aggregation operates on the same model regardless of whether\n // rows came from a JS array or declarative <snice-row> children.\n if (this.shouldModelSlottedRows()) this.syncSlottedRowsIntoData();\n\n // Render the header for slotted mode (after next tick to ensure DOM is updated)\n if (columnElements.length > 0 && !this.shouldModelSlottedRows()) {\n requestAnimationFrame(() => this.renderSlottedHeader());\n }\n }\n\n /** Whether declarative rows need the full grouping/aggregation table model. */\n private shouldModelSlottedRows(): boolean {\n const keys = Array.isArray(this.groupBy) ? this.groupBy : (this.groupBy ? [this.groupBy] : []);\n return keys.some(Boolean) || this.columns.some((column) => column.aggregate != null);\n }\n\n /** Copy declarative row data into the table model without parsing markup. */\n private syncSlottedRowsIntoData() {\n const rowElements = Array.from(this.querySelectorAll('snice-row[slot=\"rows\"]')) as any[];\n if (rowElements.length === 0) return;\n\n const rows = rowElements.map((row) => {\n if (row.data && Object.keys(row.data).length > 0) return row.data;\n const serialized = row.getAttribute('data');\n if (serialized) {\n try { return JSON.parse(serialized); }\n catch { /* snice-row's data-* extraction remains the fallback */ }\n }\n return row.data ?? {};\n });\n this.data = rows;\n }\n\n private renderSlottedHeader() {\n const headerContainer = this.shadowRoot?.querySelector('#slotted-header');\n if (!headerContainer || this.columns.length === 0) return;\n\n // Render column headers as DOM/text, never parsed definition markup.\n headerContainer.replaceChildren();\n for (const column of this.columns) {\n const cell = document.createElement('div');\n cell.className = 'header-cell';\n cell.textContent = column.label ?? column.key;\n headerContainer.appendChild(cell);\n }\n }\n\n /** Keep declarative column definitions reactive, including aggregate. */\n @on('column-changed')\n private handleDeclarativeColumnChange() {\n const columnElements = Array.from(this.querySelectorAll('snice-column[slot=\"columns\"]')) as any[];\n if (columnElements.length === 0) return;\n this.columns = columnElements.map((column) => column.getColumnDefinition());\n\n // Ungrouped declarative rows stay in their light-DOM rendering path, so\n // they do not consume the native table render scheduled by the columns\n // watcher. Keep their model and header synchronized explicitly. When a new\n // aggregate switches the table to native mode the watcher instead copies\n // row data into the shared model.\n const rowElements = Array.from(this.querySelectorAll('snice-row[slot=\"rows\"]')) as any[];\n rowElements.forEach((row) => { row.columns = this.columns; });\n requestAnimationFrame(() => {\n if (!this.shouldModelSlottedRows()) this.renderSlottedHeader();\n this.renderControls();\n });\n }\n\n\n @watch('selectorOptions')\n handleSelectorOptionsChange() {\n // Update CSS class to show/hide selector\n if (this.selectorOptions.length === 0) {\n this.classList.add('selector-options-empty');\n } else {\n this.classList.remove('selector-options-empty');\n }\n }\n\n @watch('sortable')\n handleSortableChange() {\n this.renderHeader(); // Re-render header to show/hide sort indicators\n }\n\n @watch('selectable')\n handleSelectableChange() {\n this.render(); // Re-render both header and body for checkbox columns\n queueMicrotask(() => this.syncSlottedSelectionState());\n }\n\n // C1: reactive columns. A new column set can change cell types/formatting\n // without changing keys (which the row signature keys on), so drop the\n // recycler map and resync the column model before the header renders. All DOM\n // construction is deferred to the coalescing queue (setter-stack landmine).\n @watch('columns', { immediate: false })\n handleColumnsAssignment() {\n this.renderedRows = new Map();\n if (this.columns.length > 0) this.columnManager.initialize(this.columns, this);\n // F: a column set change can add/remove an `aggregate` — resync the grouping\n // model's aggregator list and drop its stale flattened snapshot.\n this.grouping.setColumns(this.columns);\n this.invalidateGroupingCache();\n const hasSlottedRows = !!this.querySelector('snice-row[slot=\"rows\"]');\n const modelSlottedRows = this.shouldModelSlottedRows();\n if (hasSlottedRows\n && this.virtualizer.isEnabled()\n && !!this.shadowRoot?.querySelector('table') !== modelSlottedRows) {\n this.virtualizer.detach();\n }\n if (modelSlottedRows) this.syncSlottedRowsIntoData();\n if (hasSlottedRows) {\n requestAnimationFrame(() => {\n if (!modelSlottedRows) this.renderSlottedHeader();\n this.renderControls();\n if (this.toolbarOptions) this.setToolbar(this.toolbarOptions);\n if (this.lazyLoad) this.setupLazyLoading();\n });\n }\n this.scheduleRender('both');\n }\n\n // F: reactive groupBy. Post-mount `table.groupBy = 'department'` reconfigures\n // the grouping model and re-renders through the coalescing queue. immediate:\n // false so the initial value doesn't kick a render (the columns/data watchers\n // drive the first paint). No synchronous cell construction here — scheduleRender\n // defers to a microtask (happy-dom constructor landmine).\n @watch('groupBy', 'groupDefaults', { immediate: false })\n handleGroupByChange() {\n this.syncGrouping();\n const hasSlottedRows = !!this.querySelector('snice-row[slot=\"rows\"]');\n const modelSlottedRows = this.shouldModelSlottedRows();\n if (hasSlottedRows\n && this.virtualizer.isEnabled()\n && !!this.shadowRoot?.querySelector('table') !== modelSlottedRows) {\n this.virtualizer.detach();\n }\n if (modelSlottedRows) {\n this.syncSlottedRowsIntoData();\n }\n if (hasSlottedRows) {\n requestAnimationFrame(() => {\n // Clearing the last model feature switches the structural template\n // back to slotted mode; either direction replaces the controls.\n if (!modelSlottedRows) this.renderSlottedHeader();\n this.renderControls();\n if (this.toolbarOptions) this.setToolbar(this.toolbarOptions);\n if (this.lazyLoad) this.setupLazyLoading();\n });\n }\n this.scheduleRender(hasSlottedRows ? 'both' : 'body');\n }\n\n // F: push the current groupBy/groupDefaults into the grouping model and drop\n // the flattened cache. Called from the watch and before the first render.\n private syncGrouping() {\n const keys = Array.isArray(this.groupBy)\n ? this.groupBy.filter(Boolean)\n : (this.groupBy ? [this.groupBy] : []);\n this.grouping.configure({ groupBy: keys, defaultExpanded: this.groupDefaults?.expanded !== false });\n this.grouping.setColumns(this.columns);\n this.invalidateGroupingCache();\n }\n\n // C1: reactive data. `table.data = rows` refreshes the unsortedData snapshot\n // and the row-index map, then renders the body. The internal sort path\n // (sortLocalData) reassigns this.data with a re-sorted view of the SAME rows\n // and owns its own snapshot/render — settingSortedData tells us to skip.\n @watch('data', { immediate: false })\n handleDataAssignment() {\n if (this.settingSortedData) return;\n this.unsortedData = [...this.data];\n this.rebuildRowIndex();\n this.masterDetail.prepare(this.data);\n if (this.settingDataImperative) return; // imperative setData(): caller renders\n this.scheduleRender('body');\n }\n\n @watch('loading')\n handleDataChange() {\n this.renderBody();\n this.updateLoadingOverlay();\n }\n\n /**\n * Refetch affordance: with rows on screen `loading` only dims the tbody, so\n * add a spinner overlay (styled via `part=\"loading-overlay\"`). The no-data\n * load keeps its single spinner message row instead.\n */\n private updateLoadingOverlay() {\n const frame = this.shadowRoot?.querySelector('.table-frame');\n if (!frame) return;\n let overlay = frame.querySelector('.table-loading-overlay') as HTMLElement | null;\n const show = this.loading && this.data.length > 0;\n if (show && !overlay) {\n overlay = document.createElement('div');\n overlay.className = 'table-loading-overlay';\n overlay.setAttribute('part', 'loading-overlay');\n const spinner = document.createElement('snice-progress');\n spinner.setAttribute('variant', 'circular');\n spinner.setAttribute('indeterminate', '');\n spinner.setAttribute('size', 'small');\n overlay.appendChild(spinner);\n frame.appendChild(overlay);\n } else if (!show && overlay) {\n overlay.remove();\n }\n }\n\n @watch('selectedRows')\n handleSelectedRowsChange(oldVal?: number[], newVal?: number[]) {\n // A2: selection is a @property, so every reassignment lands here — the\n // single source of truth for reflecting selection into the DOM. Touch only\n // the rows whose membership actually changed (symmetric difference of old\n // vs new), not every rendered <tr>. A single toggle updates one row; a\n // select-all/clear-all naturally updates every changed row.\n const oldSet = new Set(oldVal ?? []);\n const newSet = new Set(newVal ?? this.selectedRows ?? []);\n const changed = new Set<number>();\n for (const i of oldSet) if (!newSet.has(i)) changed.add(i);\n for (const i of newSet) if (!oldSet.has(i)) changed.add(i);\n\n for (const i of changed) this.updateRowSelectionStateFor(i, newSet.has(i));\n this.updateSelectAllState();\n // F: a data-row toggle must refresh its group header's all/some/none state.\n this.updateGroupSelectionStates();\n }\n\n @watch('selectionMode', { immediate: false })\n handleSelectionModeChange() {\n if (this.selectionMode === 'none') {\n this.selectedRows = [];\n this.selectionAnchor = null;\n } else if (this.selectionMode === 'single' && this.selectedRows.length > 1) {\n this.selectedRows = this.selectedRows.slice(0, 1);\n this.selectionAnchor = this.data[this.selectedRows[0]] ?? null;\n }\n this.syncSlottedSelectionState();\n // The selection mode changes the tool-column structure (none has no\n // checkbox column; single has row checkboxes but no select-all control).\n this.scheduleRender('both');\n }\n\n @watch('currentSort')\n handleSortChange() {\n this.renderHeader();\n }\n\n @watch('searchable', 'filterable', 'quickFilter')\n handleControlsChange() {\n this.renderControls();\n if (this.quickFilter) this.scheduleRender('body');\n }\n\n // ── C2: controlled-state props. Assigning any of these post-mount routes to\n // the same effect its imperative setter produces, rendering through the\n // coalescing queue. immediate:false so the initial value never kicks a render\n // (the initial render is driven by the other immediate watchers).\n\n // A controlled `currentSort` must actually re-sort (local) or re-request\n // (remote) — the sibling handleSortChange only repaints the arrows.\n @watch('currentSort', { immediate: false })\n handleControlledSort() {\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n }\n\n @watch('currentPage', { immediate: false })\n handleCurrentPageChange() {\n if (this.paginationMode === 'server' && this.mode === 'remote') this.debouncedDataRequest();\n else this.scheduleRender('body');\n }\n\n @watch('pageSize', { immediate: false })\n handlePageSizeChange() {\n this.currentPage = 1;\n if (this.paginationMode === 'server' && this.mode === 'remote') this.debouncedDataRequest();\n else this.scheduleRender('body');\n }\n\n @watch('density', { immediate: false })\n handleDensityChange() {\n // The density attribute reflects automatically (drives the CSS); the body\n // rebuilds because density is part of the row signature.\n this.scheduleRender('body');\n this.dispatchDensityChange();\n }\n\n @watch('list', { immediate: false })\n handleListChange() {\n this.renderedRows = new Map();\n this.scheduleRender('body');\n }\n\n @watch('editable', { immediate: false })\n handleEditableChange() {\n if (this.editable) this.setupEditor();\n this.scheduleRender('body');\n }\n\n @watch('editMode', { immediate: false })\n handleEditModeChange() {\n if (this.editable) this.editor.setEditMode(this.editMode);\n this.scheduleRender('body');\n }\n\n @watch('virtualize', { immediate: false })\n handleVirtualizeChange() {\n // renderBody self-heals virtualization (enables the virtualizer when\n // requested); turning it off detaches so the normal path takes over.\n if (!this.virtualize) this.virtualizer.detach();\n this.scheduleRender('body');\n }\n\n @watch('rowHeight', { immediate: false })\n handleRowHeightChange() {\n this.scheduleRender('body');\n }\n\n @watch('columnResize', { immediate: false })\n handleColumnResizeChange() {\n this.scheduleRender('header');\n }\n\n @watch('headerFilters', { immediate: false })\n handleHeaderFiltersChange() {\n this.scheduleRender('header');\n }\n\n @watch('rowReorder', { immediate: false })\n handleRowReorderChange() {\n if (this.rowReorder) this.rowDnD.attach(this);\n else this.rowDnD.detach();\n this.scheduleRender('both');\n }\n\n @watch('columnReorder', { immediate: false })\n handleColumnReorderChange() {\n if (this.columnReorder) this.columnDnD.attach(this);\n else this.columnDnD.detach();\n this.scheduleRender('header');\n }\n\n @watch('lazyLoad', 'lazyLoadThreshold', { immediate: false })\n handleLazyLoadChange() {\n if (this.lazyLoad) {\n queueMicrotask(() => this.setupLazyLoading());\n } else {\n if (this.lazyLoadHandler) this.lazyLoadContainer?.removeEventListener('scroll', this.lazyLoadHandler);\n this.lazyLoadHandler = null;\n this.lazyLoadContainer = null;\n }\n }\n\n @watch('columnMenu', { immediate: false })\n handleColumnMenuChange() {\n if (this.columnMenu) this.initColumnMenu();\n this.scheduleRender('header');\n }\n\n /** Column definitions in their actual painted order. Column state owns\n * visibility/order; pinned columns are partitioned to their physical edges\n * so right-pinned cells do not overlap later unpinned columns. */\n private getVisibleColumnDefinitions(): ColumnDefinition[] {\n if (this.columnManager.getAllStates().length === 0) return this.columns;\n const states = [\n ...this.columnManager.getPinnedLeft(),\n ...this.columnManager.getUnpinned(),\n ...this.columnManager.getPinnedRight(),\n ];\n const byKey = new Map(this.columns.map((column) => [column.key, column]));\n return states\n .map((state) => byKey.get(state.key))\n .filter((column): column is ColumnDefinition => !!column);\n }\n\n renderHeader() {\n if (!this.thead) return;\n \n const headerRow = document.createElement('tr');\n headerRow.className = 'column-header-row';\n\n // Tool column headers — must match createRow order\n if (this.rowReorder && this.rowDnD.isEnabled()) {\n const th = document.createElement('th');\n th.setAttribute('scope', 'col');\n th.className = 'drag-handle-cell';\n headerRow.appendChild(th);\n }\n\n if (this.masterDetail.isEnabled()) {\n const th = document.createElement('th');\n th.setAttribute('scope', 'col');\n th.className = 'detail-toggle-cell';\n headerRow.appendChild(th);\n }\n\n if (this.hasSelectionColumn()) {\n const selectCell = document.createElement('th');\n selectCell.setAttribute('scope', 'col');\n selectCell.className = 'select-column';\n if (this.selectionMode === 'multiple') {\n const filteredIndices = this.getSelectableIndices(this.getFilteredData());\n const selectedInFiltered = filteredIndices.filter(i => this.selectedRows.includes(i));\n const allSelected = selectedInFiltered.length === filteredIndices.length && filteredIndices.length > 0;\n const someSelected = selectedInFiltered.length > 0 && selectedInFiltered.length < filteredIndices.length;\n selectCell.innerHTML = `<snice-checkbox class=\"select-all\" size=\"small\" compact ${allSelected ? 'checked' : ''}></snice-checkbox>`;\n\n // Set indeterminate after insertion.\n setTimeout(() => {\n const checkbox = selectCell.querySelector('.select-all') as HTMLInputElement;\n if (checkbox) checkbox.indeterminate = someSelected;\n }, 0);\n } else {\n selectCell.setAttribute('aria-label', 'Select one row');\n }\n headerRow.appendChild(selectCell);\n }\n\n const visibleColumns = this.getVisibleColumnDefinitions();\n\n visibleColumns.forEach(column => {\n\n const th = document.createElement('th');\n th.setAttribute('data-key', column.key);\n th.setAttribute('scope', 'col');\n // Reflect current sort direction for SR users.\n if (this.sortable && column.sortable !== false) {\n const sortState = this.currentSort.find(s => s.column === column.key);\n if (sortState?.direction === 'asc') th.setAttribute('aria-sort', 'ascending');\n else if (sortState?.direction === 'desc') th.setAttribute('aria-sort', 'descending');\n else th.setAttribute('aria-sort', 'none');\n }\n\n // Apply column width\n const state = this.columnManager.getState(column.key);\n if (state) {\n th.style.width = `${state.width}px`;\n\n // Pinned column sticky positioning\n if (state.pinned === 'left') {\n const offsets = this.columnManager.getPinnedLeftOffsets();\n th.classList.add('pinned-cell');\n th.style.position = 'sticky';\n th.style.left = `${offsets.get(column.key) ?? 0}px`;\n th.style.zIndex = '2';\n } else if (state.pinned === 'right') {\n const offsets = this.columnManager.getPinnedRightOffsets();\n th.classList.add('pinned-cell');\n th.style.position = 'sticky';\n th.style.right = `${offsets.get(column.key) ?? 0}px`;\n th.style.zIndex = '2';\n }\n }\n\n if (this.sortable && column.sortable !== false) {\n th.classList.add('sortable');\n th.setAttribute('role', 'button');\n // A role=button must be focusable and named, or the keyboard cannot\n // sort at all. Matches the declarative header in snice-header.ts.\n th.setAttribute('tabindex', '0');\n th.setAttribute('aria-label', `Sort by ${column.label}`);\n th.innerHTML = this.renderSortableHeader(column);\n } else {\n th.textContent = column.label;\n }\n\n // Filter indicator\n if (this.filterEngine.hasColumnFilter(column.key)) {\n th.classList.add('filtered');\n }\n\n // Resize handle\n if (this.columnResize && column.resizable !== false) {\n const handle = document.createElement('span');\n handle.className = 'resize-handle';\n handle.addEventListener('mousedown', (e) => {\n e.stopPropagation();\n this.columnManager.startResize(column.key, e.clientX);\n });\n handle.addEventListener('dblclick', (e) => {\n e.stopPropagation();\n if (this.tbody) {\n this.columnManager.autoSizeColumn(column.key, this.tbody);\n this.renderHeader();\n this.renderBody();\n }\n });\n th.appendChild(handle);\n // No inline position:relative here — inline styles outrank the\n // stylesheet and would stomp the sticky header (thead th) and\n // pinned-column sticky positioning. `position: sticky` is itself a\n // positioned ancestor, so the absolutely-positioned resize handle\n // anchors correctly without it.\n }\n\n // Column menu (right-click)\n if (this.columnMenu) {\n th.addEventListener('contextmenu', (e) => {\n e.preventDefault();\n const colState = this.columnManager.getState(column.key);\n this.columnMenuManager.show(column.key, e.clientX, e.clientY, {\n sortable: this.sortable && column.sortable !== false,\n filterable: column.filterable !== false,\n hideable: colState?.hideable,\n pinnable: colState?.pinnable,\n pinned: colState?.pinned,\n });\n });\n }\n\n // Column DnD\n if (this.columnReorder && this.columnDnD.isEnabled()) {\n // A pinned column has a fixed physical edge. Presenting it as draggable\n // would emit a reorder event that the column manager correctly ignores.\n this.columnDnD.makeHeaderDraggable(th, column.key, column.reorderable !== false && !state?.pinned);\n }\n\n headerRow.appendChild(th);\n });\n\n this.thead.innerHTML = '';\n\n // Column groups header row (if any)\n const groups = this.columnManager.getColumnGroups();\n if (groups.length > 0) {\n const groupRow = document.createElement('tr');\n groupRow.className = 'column-group-row';\n // Tool-column spacers must line up with the equivalent cells in the main\n // header row before the grouped data-column runs.\n const toolColumnClasses = [\n this.rowReorder && this.rowDnD.isEnabled() ? 'drag-handle-cell' : '',\n this.masterDetail.isEnabled() ? 'detail-toggle-cell' : '',\n this.hasSelectionColumn() ? 'select-column' : '',\n ].filter(Boolean);\n for (const className of toolColumnClasses) {\n const spacer = document.createElement('th');\n spacer.className = className;\n spacer.setAttribute('aria-hidden', 'true');\n groupRow.appendChild(spacer);\n }\n const groupedHeaders = document.createElement('template');\n groupedHeaders.innerHTML = this.columnManager.renderGroupHeaders(\n visibleColumns.map((column) => column.key)\n );\n groupRow.appendChild(groupedHeaders.content);\n this.thead.appendChild(groupRow);\n }\n\n this.thead.appendChild(headerRow);\n\n // Header filter row (if enabled)\n if (this.headerFilters) {\n const filterRow = document.createElement('tr');\n filterRow.className = 'header-filter-row';\n\n if (this.rowReorder && this.rowDnD.isEnabled()) {\n const spacer = document.createElement('td');\n spacer.className = 'drag-handle-cell';\n filterRow.appendChild(spacer);\n }\n if (this.masterDetail.isEnabled()) {\n const spacer = document.createElement('td');\n spacer.className = 'detail-toggle-cell';\n filterRow.appendChild(spacer);\n }\n if (this.hasSelectionColumn()) {\n const spacer = document.createElement('td');\n spacer.className = 'select-column';\n filterRow.appendChild(spacer);\n }\n\n visibleColumns.forEach(column => {\n const td = document.createElement('td');\n const input = document.createElement('snice-input') as any;\n input.size = 'small';\n input.placeholder = `Filter ${column.label}...`;\n input.setAttribute('data-column', column.key);\n input.value = this.filterEngine.getHeaderFilter(column.key);\n input.style.cssText = 'width:100%;--snice-color-border:transparent;--snice-border-radius-md:0;';\n input.addEventListener('input', () => {\n // A3: engine model updates synchronously (cheap); the expensive\n // re-filter + re-render is debounced so a keystroke burst is one apply.\n this.filterEngine.setHeaderFilter(column.key, input.value);\n this.debouncedApplyClientFilters();\n });\n td.appendChild(input);\n filterRow.appendChild(td);\n });\n\n this.thead.appendChild(filterRow);\n }\n }\n\n renderSortableHeader(column: any): string {\n const sortItem = this.currentSort.find(s => s.column === column.key);\n const sortIndex = this.currentSort.findIndex(s => s.column === column.key);\n const isActive = !!sortItem;\n\n const chevronUp = `<svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 5l4-4 4 4\"/></svg>`;\n const chevronDown = `<svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 1l4 4 4-4\"/></svg>`;\n\n let indicator = `<span style=\"display:flex;flex-direction:column;gap:0;opacity:0.3\">${chevronUp}${chevronDown}</span>`;\n let orderNumber = '';\n\n if (sortItem) {\n if (sortItem.direction === 'asc') {\n indicator = chevronUp;\n } else if (sortItem.direction === 'desc') {\n indicator = chevronDown;\n }\n\n if (this.currentSort.length > 1) {\n orderNumber = `<span class=\"sort-order\">${sortIndex + 1}</span>`;\n }\n }\n\n const indicatorClasses = ['sort-indicator', isActive ? 'active' : ''].filter(Boolean).join(' ');\n\n return `\n <div class=\"sort-header\">\n <span>${column.label}</span>\n <div class=\"${indicatorClasses}\">\n ${indicator}\n ${orderNumber}\n </div>\n </div>\n `;\n }\n\n\n renderBody() {\n if (!this.tbody) return;\n\n // Update column manager when columns change\n if (this.columns.length > 0) {\n this.columnManager.initialize(this.columns, this);\n }\n\n // F: keep the grouping model's aggregator list current before any\n // isEnabled() check below — isEnabled() reports aggregation-only tables too,\n // and setColumns is what tells it which columns aggregate.\n if (this.grouping.setColumns(this.columns)) this.invalidateGroupingCache();\n\n // In grouped client-pagination mode the public total is the flattened\n // display model (headers + visible rows + aggregate footers), including on\n // the virtual path which returns before the ordinary pagination block.\n if (this.pagination && this.paginationMode === 'client') {\n if (this.usesGroupingDisplayModel()) {\n this.totalItems = this.getGroupingItems().length;\n } else if (this.treeData.isEnabled()) {\n this.totalItems = this.getTreeDisplayRows(false).length;\n }\n }\n\n // Self-heal: virtualize requested but the virtualizer never enabled\n // (property assigned after @ready, or the one-shot rAF setup missed the\n // scroll container). Never fall through to an empty or full render.\n if (this.virtualize && !this.virtualizer.isEnabled()) {\n this.setupVirtualization();\n }\n\n // Virtualized rendering: delegate to virtualizer. Total row count comes\n // from the feature-aware model (flattened tree rows when tree data is on),\n // NOT the raw filtered data — otherwise the virtualizer windows the wrong\n // dataset and expand/collapse silently no-ops.\n if (this.virtualize && this.virtualizer.isEnabled()) {\n this.virtualRowsSnapshot = this.getVirtualRows();\n this.virtualizer.setTotalRows(this.virtualRowsSnapshot.length);\n // The virtualizer's afterRender hook re-establishes grid ARIA/focus on\n // the freshly inserted window.\n\n // Still render pagination\n if (this.pagination) this.renderPagination();\n return;\n }\n\n if (this.data.length === 0 && this.columns.length > 0) {\n // Empty / loading / error states replace the body with a single message\n // row. Reset the recycler map so a later data render starts from a clean\n // slate (no stale reuse candidates pointing at removed rows).\n this.tbody.innerHTML = '';\n this.renderedRows = new Map();\n\n const toolCols = (this.hasSelectionColumn() ? 1 : 0)\n + (this.masterDetail.isEnabled() ? 1 : 0)\n + (this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0);\n const colSpan = this.columns.length + toolCols;\n\n if (this.loading) {\n // Show loading spinner\n const tr = document.createElement('tr');\n const td = document.createElement('td');\n td.colSpan = colSpan;\n td.className = 'no-data';\n td.innerHTML = '<snice-progress variant=\"circular\" indeterminate size=\"small\"></snice-progress>';\n tr.appendChild(td);\n this.tbody.appendChild(tr);\n return;\n } else if (this.loadError) {\n // Show error state — surfaces a failed remote load instead of\n // silently falling through to the generic \"No data\" empty state.\n const tr = document.createElement('tr');\n const td = document.createElement('td');\n td.colSpan = colSpan;\n td.className = 'no-data';\n const errorDiv = document.createElement('div');\n errorDiv.className = 'table-error-message';\n errorDiv.textContent = `⚠️ ${this.loadError}`;\n td.appendChild(errorDiv);\n tr.appendChild(td);\n this.tbody.appendChild(tr);\n return;\n } else {\n // Show empty state\n const tr = document.createElement('tr');\n const td = document.createElement('td');\n td.colSpan = colSpan;\n td.className = 'no-data';\n const slotted = this.querySelector('[slot=\"empty-state\"]');\n if (slotted) {\n td.appendChild(slotted.cloneNode(true));\n } else {\n const empty = document.createElement('snice-empty-state');\n empty.setAttribute('size', 'small');\n empty.setAttribute('icon', '📭');\n empty.setAttribute('title', 'No data');\n empty.setAttribute('description', 'No records to display.');\n td.appendChild(empty);\n }\n tr.appendChild(td);\n this.tbody.appendChild(tr);\n return;\n }\n }\n\n // Apply client-side filters (cached snapshot — see getFilteredData).\n const filteredData = this.getFilteredData();\n\n // Client-side pagination: slice ordinary data. Group and tree modes page\n // their own flattened models and already set totalItems above; overwriting\n // it here with the raw filtered-row count made public state differ between\n // virtual and non-virtual rendering.\n let displayData = filteredData;\n if (this.pagination && this.paginationMode === 'client'\n && !this.usesGroupingDisplayModel() && !this.treeData.isEnabled()) {\n this.totalItems = filteredData.length;\n const startIndex = (this.currentPage - 1) * this.pageSize;\n displayData = filteredData.slice(startIndex, startIndex + this.pageSize);\n }\n\n const extraCols = (this.hasSelectionColumn() ? 1 : 0) + (this.masterDetail.isEnabled() ? 1 : 0) + (this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0);\n const managedColumns = this.columnManager.getAllStates();\n const visibleColumnCount = managedColumns.length > 0\n ? this.columnManager.getVisibleColumns().length\n : this.columns.length;\n const totalColSpan = visibleColumnCount + extraCols;\n const structuralSig = this.computeStructuralSig();\n\n // Task B: describe the desired body as an ordered list of keyed entries,\n // then reconcile the tbody to match. Rows whose object + signature are\n // unchanged are reused (moved on reorder); only new/changed rows construct\n // fresh DOM. Replaces the old wipe-and-rebuild-everything path.\n const entries: RowEntry[] = [];\n\n // Pinned top rows — few, and rebuilt each pass under a positional key.\n this.pinnedTopRows.forEach((row, i) => {\n entries.push({\n key: `__pinned_top_${i}`,\n sig: 'pinned',\n alwaysRebuild: true,\n create: () => {\n const tr = this.createRow(row, -1);\n tr.classList.add('pinned-row', 'pinned-row--top');\n return tr;\n },\n });\n });\n\n if (this.usesGroupingDisplayModel()) {\n // F: page over the FLATTENED group+row+aggregate list (built from the full\n // filtered data — grouping must see every row, not a pre-sliced page).\n const items = this.getDisplayedGroupingItems();\n\n for (const item of items) {\n if (item.type === 'group') {\n entries.push({\n key: item.key,\n // Group + aggregate rows are few; rebuild them each pass so their\n // count / expanded / selection / aggregate state is always fresh\n // (perf-critical recycling is for the many DATA rows below).\n sig: `${structuralSig}|grp:${item.key}:${item.expanded ? 1 : 0}:${item.count}`,\n alwaysRebuild: true,\n create: () => this.createGroupRow(item, totalColSpan),\n });\n } else if (item.type === 'aggregate') {\n entries.push({\n key: item.key,\n sig: `${structuralSig}|agg:${item.key}`,\n alwaysRebuild: true,\n create: () => this.createAggregateRow(item, totalColSpan),\n });\n } else {\n // Data row — index is its position in `this.data`, not the flattened\n // list (selection / editing / data-index all key off the data index).\n const index = this.indexOfRow(item.data);\n const editing = this.isRowEditing(index);\n entries.push({\n key: item.data,\n sig: this.rowSignature(item.data, index, structuralSig) + (editing ? '|edit' : ''),\n alwaysRebuild: editing,\n restampIndex: index,\n create: () => this.createRow(item.data, index),\n });\n\n // Grouping/aggregation must compose with master-detail exactly like\n // the ordinary and virtual paths. Aggregation-only mode also routes\n // through this branch, so omitting this entry made enabling a footer\n // silently remove every expanded detail panel.\n if (this.masterDetail.isEnabled() && this.masterDetail.isExpanded(index)) {\n entries.push({\n key: `__detail_${index}`,\n sig: 'detail',\n alwaysRebuild: true,\n create: () =>\n this.masterDetail.createDetailRow(item.data, index, totalColSpan) ??\n document.createElement('tr'),\n });\n }\n }\n }\n } else if (this.treeData.isEnabled()) {\n const treeRows = this.getTreeDisplayRows(true);\n treeRows.forEach(({ data: rowData, index, treeRow, groupItem }) => {\n if (groupItem?.type === 'aggregate') {\n entries.push({\n key: groupItem.key,\n sig: `${structuralSig}|agg:${groupItem.key}`,\n alwaysRebuild: true,\n create: () => this.createAggregateRow(groupItem, totalColSpan),\n });\n return;\n }\n if (!treeRow) return;\n const editing = this.isRowEditing(index);\n entries.push({\n key: rowData,\n // The edit marker makes the editing→display transition a signature\n // change, so a row leaving edit state rebuilds (drops its editor DOM).\n sig: this.rowSignature(rowData, index, structuralSig, treeRow) + (editing ? '|edit' : ''),\n alwaysRebuild: editing,\n restampIndex: index,\n create: () => this.createRow(rowData, index, treeRow),\n });\n });\n } else {\n displayData.forEach((rowData) => {\n const index = this.indexOfRow(rowData);\n const editing = this.isRowEditing(index);\n entries.push({\n key: rowData,\n sig: this.rowSignature(rowData, index, structuralSig) + (editing ? '|edit' : ''),\n alwaysRebuild: editing,\n restampIndex: index,\n create: () => this.createRow(rowData, index),\n });\n\n // Detail row (master-detail): shape depends on state, always rebuilt.\n if (this.masterDetail.isEnabled() && this.masterDetail.isExpanded(index)) {\n entries.push({\n key: `__detail_${index}`,\n sig: 'detail',\n alwaysRebuild: true,\n create: () =>\n this.masterDetail.createDetailRow(rowData, index, totalColSpan) ??\n document.createElement('tr'),\n });\n }\n });\n }\n\n // Pinned bottom rows\n this.pinnedBottomRows.forEach((row, i) => {\n entries.push({\n key: `__pinned_bottom_${i}`,\n sig: 'pinned',\n alwaysRebuild: true,\n create: () => {\n const tr = this.createRow(row, -1);\n tr.classList.add('pinned-row', 'pinned-row--bottom');\n return tr;\n },\n });\n });\n\n this.reconcileRows(entries);\n\n // Re-establish grid role + roving tabindex after the body changed.\n this.keyboard.refresh();\n\n // Render pagination after body\n if (this.pagination) {\n this.renderPagination();\n }\n\n this.updateFillRow();\n }\n\n /**\n * When the host is taller than its rows, append an inert filler row so the\n * column grid runs to the bottom edge of the frame. Cloned from the last\n * data row, so column widths, pinning, and alignment track the table\n * engine natively. Removed entirely when content fills (or overflows) the\n * frame, restoring the plain last-row styling.\n */\n private updateFillRow() {\n const frame = this.shadowRoot?.querySelector('.table-frame') as HTMLElement | null;\n const tableEl = frame?.querySelector('table') as HTMLElement | null;\n const tbody = tableEl?.querySelector('tbody');\n if (!frame || !tableEl || !tbody) return;\n\n tbody.querySelector('tr.table-fill-row')?.remove();\n if (this.list && this.listRenderer) return;\n\n const rows = tbody.querySelectorAll('tr[data-index]');\n const lastRow = rows[rows.length - 1] as HTMLElement | undefined;\n if (!lastRow) return;\n\n const leftover = Math.floor(frame.clientHeight - tableEl.offsetHeight);\n if (leftover <= 1) return;\n\n const fill = lastRow.cloneNode(true) as HTMLElement;\n fill.className = 'table-fill-row';\n for (const attr of ['data-index', 'data-selected', 'role', 'aria-rowindex', 'aria-selected', 'tabindex', 'id']) {\n fill.removeAttribute(attr);\n }\n fill.setAttribute('aria-hidden', 'true');\n fill.querySelectorAll('td').forEach(td => {\n td.replaceChildren();\n for (const attr of ['role', 'aria-colindex', 'tabindex', 'aria-selected']) td.removeAttribute(attr);\n });\n fill.style.height = `${leftover}px`;\n tbody.appendChild(fill);\n }\n\n // ── Task B: render-path reconciler ──────────────────────────────────────\n //\n // Reconcile the tbody's children to `entries` (an ordered list) while reusing\n // existing <tr> elements keyed by identity. Mirrors the keyed-move algorithm\n // in src/parts.ts `_reconcileKeyed`: drop departed rows first, then walk the\n // survivors placing each desired row, moving out-of-position ones via a\n // detach-into-fragment step (avoids the happy-dom stale-querySelectorAll bug\n // that an in-place insertBefore move triggers). Stationary rows are never\n // touched, so an unchanged re-render performs zero moves and constructs zero\n // cells.\n private reconcileRows(entries: RowEntry[]) {\n const tbody = this.tbody;\n if (!tbody) return;\n\n const next = new Map<unknown, { el: HTMLElement; sig: string }>();\n const desired: HTMLElement[] = [];\n const used = new Set<HTMLElement>();\n\n for (const entry of entries) {\n const prev = this.renderedRows.get(entry.key);\n let el: HTMLElement;\n\n if (prev && !used.has(prev.el) && !entry.alwaysRebuild && prev.sig === entry.sig) {\n // Reuse the existing element. A reorder may have changed its logical\n // index without changing its signature — re-stamp index-derived DOM.\n el = prev.el;\n if (entry.restampIndex !== undefined) this.restampRowIndex(el, entry.restampIndex);\n } else {\n el = entry.create();\n }\n\n used.add(el);\n desired.push(el);\n // First occurrence wins on a duplicate key (matches rowIndexMap / _reconcileKeyed).\n if (!next.has(entry.key)) next.set(entry.key, { el, sig: entry.sig });\n }\n\n // Remove any current child that is not part of the desired set (departed\n // rows, plus a prior empty/loading/error message row).\n const desiredSet = new Set(desired);\n for (const child of Array.from(tbody.children)) {\n if (!desiredSet.has(child as HTMLElement)) child.remove();\n }\n\n // Place desired rows in order. `ref` walks the surviving children; a row\n // already sitting at `ref` is skipped, anything else is moved/inserted here.\n let ref: Node | null = tbody.firstChild;\n for (const el of desired) {\n if (el === ref) {\n ref = el.nextSibling;\n } else {\n const frag = document.createDocumentFragment();\n frag.appendChild(el); // detaches el from its old position (if any)\n tbody.insertBefore(frag, ref);\n }\n }\n\n this.renderedRows = next;\n }\n\n /**\n * A structural fingerprint of everything `createRow` reads that is NOT\n * per-row data: visible columns + their widths/pinning/offsets, tool columns,\n * density, uniform row height, tree group column. A change here (resize, pin,\n * hide/show, density) forces every row to rebuild, since a reused element\n * would carry stale layout.\n */\n // E2: stable identity for a custom renderer function, so computeStructuralSig\n // can encode \"which renderer\" without stringifying the function. A new\n // function reference gets a new id → the structural signature changes →\n // reused rows rebuild.\n private rendererIds = new WeakMap<object, number>();\n private rendererIdSeq = 0;\n private rendererIdFor(fn?: unknown): string {\n if (typeof fn !== 'function') return '';\n let id = this.rendererIds.get(fn as object);\n if (id === undefined) {\n id = ++this.rendererIdSeq;\n this.rendererIds.set(fn as object, id);\n }\n return String(id);\n }\n\n private computeStructuralSig(): string {\n const cols = this.getVisibleColumnDefinitions().map(col => {\n const state = this.columnManager.getState(col.key);\n // E2: fold each column's custom renderer identity in so swapping a\n // renderCell function invalidates every reused row (Task B recycling).\n const rc = this.rendererIdFor((col as any).renderCell);\n return `${col.key}:${state?.width ?? ''}:${state?.pinned ?? ''}:rc${rc}`;\n });\n\n return [\n cols.join(','),\n `pl=${Array.from(this.columnManager.getPinnedLeftOffsets().values()).join('/')}`,\n `pr=${Array.from(this.columnManager.getPinnedRightOffsets().values()).join('/')}`,\n `sel=${this.selectable ? this.selectionMode : 'off'}`,\n `selectable=${this.rendererIdFor(this.selectabilityCheck)}`,\n `md=${this.masterDetail.isEnabled() ? 1 : 0}`,\n `rr=${this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0}`,\n `rh=${this.rowHeight}`,\n `d=${this.density}`,\n `tree=${this.treeData.isEnabled() ? this.treeData.getGroupColumn() : ''}`,\n ].join('|');\n }\n\n /**\n * The per-row rebuild signature. Selection and the plain data-index are\n * re-stamped on reuse (not here) so they never force a rebuild; this captures\n * only what a re-stamp cannot repair: tree node state, per-row height, and —\n * when a feature embeds the index in a row-scoped closure (row DnD drag index,\n * master-detail toggle index) — the index itself.\n */\n private rowSignature(rowData: any, index: number, structuralSig: string, treeRow?: TreeRow): string {\n const parts = [structuralSig];\n if (treeRow) parts.push(`t:${treeRow.depth}:${treeRow.expanded ? 1 : 0}:${treeRow.hasChildren ? 1 : 0}`);\n if (this.rowHeightCallback) parts.push(`h:${this.rowHeightCallback(rowData, index)}`);\n if (this.masterDetail.isEnabled()) parts.push(`detail:${this.masterDetail.isExpanded(index) ? 1 : 0}`);\n // Features whose row DOM closes over the index must rebuild when it changes.\n if ((this.rowReorder && this.rowDnD.isEnabled()) || this.masterDetail.isEnabled()) {\n parts.push(`i:${index}`);\n }\n return parts.join('|');\n }\n\n /** Whether the row at `index` currently hosts an inline editor. */\n private isRowEditing(index: number): boolean {\n if (!this.editable) return false;\n if (this.editMode === 'row') {\n const rowState = this.editor.getRowEditState();\n return !!(rowState?.isEditing && rowState.rowIndex === index);\n }\n const cellState = this.editor.getCellEditState();\n return !!(cellState?.isEditing && cellState.rowIndex === index);\n }\n\n /**\n * Update a reused row's index-derived DOM after a reorder: the tr's\n * `data-index`, its selection reflection, and the select checkbox's\n * `data-row-index` (read back by the click/change handlers). Everything else\n * that depends on the index is captured by the signature and forces a rebuild.\n */\n private restampRowIndex(el: HTMLElement, index: number) {\n el.setAttribute('data-index', String(index));\n const isSelected = this.selectedRows.includes(index);\n el.setAttribute('data-selected', String(isSelected));\n const checkbox = el.querySelector('snice-checkbox.row-select') as any;\n if (checkbox) {\n checkbox.setAttribute('data-row-index', String(index));\n checkbox.checked = isSelected;\n const disabled = !!(this.selectabilityCheck && !this.selectabilityCheck(this.data[index], index));\n checkbox.disabled = disabled;\n checkbox.toggleAttribute('disabled', disabled);\n }\n }\n\n /**\n * Drop the cached <tr> for a row object so the next render rebuilds it. Used\n * when the table mutates a row in place (cell-edit commit) — the object\n * identity is unchanged, so the reconciler would otherwise reuse the stale\n * cell DOM.\n */\n private invalidateRenderedRow(rowData: any) {\n this.renderedRows.delete(rowData);\n }\n\n // F: the denominator for client-side pagination. When grouping/aggregation is\n // active the page unit is a FLATTENED display item (group/data/aggregate row),\n // not a raw data row — so pages cover the whole flattened list. Ungrouped\n // behavior is unchanged (data.length).\n private paginationTotal(): number {\n if (this.paginationMode !== 'client') return this.totalItems;\n if (this.usesGroupingDisplayModel()) return this.getGroupingItems().length;\n if (this.treeData.isEnabled()) return this.getTreeDisplayRows(false).length;\n return this.data.length;\n }\n\n private get totalPages(): number {\n const total = this.paginationTotal();\n return Math.max(1, Math.ceil(total / this.pageSize));\n }\n\n goToPage(page: number) {\n const clamped = Math.max(1, Math.min(page, this.totalPages));\n if (clamped === this.currentPage) return;\n this.currentPage = clamped;\n\n if (this.paginationMode === 'server' && this.mode === 'remote') {\n this.debouncedDataRequest();\n } else {\n this.renderBody();\n }\n\n this.dispatchPageChange();\n }\n\n setPageSize(size: number) {\n this.pageSize = size;\n this.currentPage = 1;\n\n if (this.paginationMode === 'server' && this.mode === 'remote') {\n this.debouncedDataRequest();\n } else {\n this.renderBody();\n }\n\n this.dispatchPageChange();\n }\n\n @dispatch('page-change', { bubbles: true, composed: true })\n private dispatchPageChange() {\n return {\n page: this.currentPage,\n pageSize: this.pageSize,\n totalPages: this.totalPages,\n totalItems: this.paginationTotal()\n };\n }\n\n renderPagination() {\n const container = this.shadowRoot?.querySelector('.table-pagination-container');\n if (!container) return;\n\n if (!this.pagination) {\n container.innerHTML = '';\n return;\n }\n\n const total = this.paginationTotal();\n const totalPages = this.totalPages;\n const start = Math.min((this.currentPage - 1) * this.pageSize + 1, total);\n const end = Math.min(this.currentPage * this.pageSize, total);\n\n // Build page buttons\n const pageButtons: string[] = [];\n const maxVisible = 7;\n\n if (totalPages <= maxVisible) {\n for (let i = 1; i <= totalPages; i++) {\n pageButtons.push(this.pageButton(i));\n }\n } else {\n pageButtons.push(this.pageButton(1));\n if (this.currentPage > 3) pageButtons.push('<span class=\"pagination__ellipsis\">…</span>');\n\n const rangeStart = Math.max(2, this.currentPage - 1);\n const rangeEnd = Math.min(totalPages - 1, this.currentPage + 1);\n for (let i = rangeStart; i <= rangeEnd; i++) {\n pageButtons.push(this.pageButton(i));\n }\n\n if (this.currentPage < totalPages - 2) pageButtons.push('<span class=\"pagination__ellipsis\">…</span>');\n pageButtons.push(this.pageButton(totalPages));\n }\n\n container.innerHTML = '';\n\n const pagination = document.createElement('div');\n pagination.className = 'pagination';\n pagination.setAttribute('part', 'pagination');\n\n // Info\n const info = document.createElement('div');\n info.className = 'pagination__info';\n info.textContent = `Showing ${start}\\u2013${end} of ${total}`;\n pagination.appendChild(info);\n\n // Controls\n const controls = document.createElement('div');\n controls.className = 'pagination__controls';\n controls.innerHTML = `\n <button class=\"pagination__btn pagination__first\" ${this.currentPage <= 1 ? 'disabled' : ''} data-page=\"1\" aria-label=\"First page\">\\u27E8\\u27E8</button>\n <button class=\"pagination__btn pagination__prev\" ${this.currentPage <= 1 ? 'disabled' : ''} data-page=\"${this.currentPage - 1}\" aria-label=\"Previous page\">\\u27E8</button>\n ${pageButtons.join('')}\n <button class=\"pagination__btn pagination__next\" ${this.currentPage >= totalPages ? 'disabled' : ''} data-page=\"${this.currentPage + 1}\" aria-label=\"Next page\">\\u27E9</button>\n <button class=\"pagination__btn pagination__last\" ${this.currentPage >= totalPages ? 'disabled' : ''} data-page=\"${totalPages}\" aria-label=\"Last page\">\\u27E9\\u27E9</button>\n `;\n pagination.appendChild(controls);\n\n // Page size selector — use snice-select\n const sizeContainer = document.createElement('div');\n sizeContainer.className = 'pagination__size';\n const sizeLabel = document.createElement('label');\n sizeLabel.textContent = 'Rows per page:';\n sizeContainer.appendChild(sizeLabel);\n\n const sizeSelect = document.createElement('snice-select') as any;\n sizeSelect.size = 'small';\n sizeSelect.className = 'pagination__size-select';\n // Always include the CURRENT pageSize: when it isn't in pageSizes (e.g.\n // pageSize=5 with the default list) no option matches the value and the\n // select shows its placeholder instead of the active size.\n const sizeOptions = this.pageSizes.includes(this.pageSize)\n ? this.pageSizes\n : [...this.pageSizes, this.pageSize].sort((a, b) => a - b);\n for (const s of sizeOptions) {\n const opt = document.createElement('snice-option') as any;\n opt.setAttribute('value', String(s));\n opt.textContent = String(s);\n if (s === this.pageSize) opt.setAttribute('selected', '');\n sizeSelect.appendChild(opt);\n }\n sizeSelect.value = String(this.pageSize);\n sizeContainer.appendChild(sizeSelect);\n pagination.appendChild(sizeContainer);\n\n container.appendChild(pagination);\n\n // Bind page button events\n controls.querySelectorAll('[data-page]').forEach(btn => {\n btn.addEventListener('click', () => {\n const page = parseInt((btn as HTMLElement).getAttribute('data-page')!);\n this.goToPage(page);\n });\n });\n\n // Bind size select event\n sizeSelect.addEventListener('select-change', (e: CustomEvent) => {\n this.setPageSize(parseInt(e.detail.value));\n });\n }\n\n private pageButton(page: number): string {\n const active = page === this.currentPage ? ' pagination__btn--active' : '';\n return `<button class=\"pagination__btn pagination__page${active}\" data-page=\"${page}\">${page}</button>`;\n }\n\n /** Create a cell element safely using createElement + setAttribute */\n createCellElement(column: any, value: any, row?: any): HTMLElement {\n // E2: a custom renderCell bypasses the type-based cell entirely. A string\n // result is set via textContent (never innerHTML — no HTML parsing / XSS);\n // an HTMLElement is used as-is.\n if (typeof column.renderCell === 'function') {\n const rendered = column.renderCell(value, row, column);\n if (rendered instanceof HTMLElement) return rendered;\n const span = document.createElement('span');\n span.className = 'custom-cell';\n span.textContent = rendered == null ? '' : String(rendered);\n return span;\n }\n\n const tagName = this.getCellTagName(column.type);\n const el = document.createElement(tagName) as any;\n\n // Base attributes. Only force `align` if the column definition specifies\n // one; otherwise let the cell pick its type-appropriate default (numbers\n // right, rating/boolean center, text left). Hard-coding 'left' here fought\n // the cell's own type-based text-align and made number values drift.\n el.setAttribute('type', column.type || 'text');\n if (column.align) el.setAttribute('align', column.align);\n el.setAttribute('in-table', 'true');\n\n // Set the property directly so arrays/objects reach progress, sparkline,\n // JSON, action, and tag cells without a lossy attribute conversion. Keep a\n // primitive attribute for declarative inspection and CSS selectors.\n if (column.type === 'sparkline' && value !== null && typeof value === 'object') {\n el.setAttribute('value', JSON.stringify(value));\n if (Array.isArray(value)) el.data = value;\n } else {\n el.value = value ?? '';\n }\n if (value === null || typeof value !== 'object') {\n el.setAttribute('value', String(value ?? ''));\n }\n\n // Column definition as property (for formatter access etc.)\n el.column = column;\n // Row-aware formatters, conditional formatting, and action-cell events all\n // consume the originating row through the cell's property API.\n el.rowData = row ?? null;\n\n // Type-specific attributes\n switch (column.type) {\n case 'number':\n case 'currency': {\n if (column.decimals !== undefined) el.setAttribute('decimals', String(column.decimals));\n if (column.thousandsSeparator) el.setAttribute('thousands-separator', 'true');\n if (column.prefix) el.setAttribute('prefix', column.prefix);\n if (column.suffix) el.setAttribute('suffix', column.suffix);\n if (column.type === 'currency') {\n const cf = column.currencyFormat;\n if (cf) {\n if (cf.currency) el.setAttribute('currency', cf.currency);\n if (cf.locale) el.setAttribute('locale', cf.locale);\n if (cf.display || cf.currencyDisplay) {\n el.setAttribute('currencydisplay', cf.currencyDisplay || cf.display);\n }\n if (cf.decimals !== undefined) el.setAttribute('decimals', String(cf.decimals));\n if (cf.thousandsSeparator === false) el.thousandsSeparator = false;\n }\n }\n break;\n }\n case 'date':\n if (column.dateFormat) el.setAttribute('date-format', column.dateFormat);\n break;\n case 'boolean':\n if (column.useSymbols) el.setAttribute('use-symbols', 'true');\n if (column.trueSymbol) el.setAttribute('true-symbol', column.trueSymbol);\n if (column.falseSymbol) el.setAttribute('false-symbol', column.falseSymbol);\n if (column.trueValue) el.setAttribute('true-value', column.trueValue);\n if (column.falseValue) el.setAttribute('false-value', column.falseValue);\n break;\n case 'sparkline': {\n const sf = column.sparklineFormat;\n if (sf) {\n if (sf.color) el.setAttribute('color', sf.color);\n if (sf.type) el.setAttribute('chart-type', sf.type);\n if (sf.width) el.setAttribute('width', String(sf.width));\n if (sf.height) el.setAttribute('height', String(sf.height));\n }\n break;\n }\n case 'rating': {\n const rf = column.ratingFormat;\n if (rf) {\n if (rf.max) el.setAttribute('max', String(rf.max));\n if (rf.color) el.setAttribute('color', rf.color);\n }\n break;\n }\n case 'progress': {\n const pf = column.progressFormat;\n if (pf) {\n if (pf.max) el.setAttribute('max', String(pf.max));\n if (pf.color) el.setAttribute('color', pf.color);\n if (pf.showPercentage) el.setAttribute('show-percentage', 'true');\n }\n break;\n }\n case 'percentage':\n case 'percent': {\n const pf = column.percentageFormat;\n if (pf) {\n if (pf.decimals !== undefined) el.setAttribute('decimals', String(pf.decimals));\n if (pf.colorize) el.setAttribute('colorize', 'true');\n }\n break;\n }\n case 'status': {\n const sf = column.statusFormat;\n if (sf) {\n if (sf.variant) el.setAttribute('variant', sf.variant);\n if (sf.showDot) el.setAttribute('show-dot', 'true');\n }\n break;\n }\n case 'link': {\n const lf = column.linkFormat;\n if (lf) {\n if (lf.target) el.setAttribute('target', lf.target);\n if (lf.external) el.setAttribute('external', 'true');\n }\n break;\n }\n case 'image': {\n const imf = column.imageFormat;\n if (imf) {\n if (imf.shape) el.setAttribute('shape', imf.shape);\n if (imf.size) el.setAttribute('size', imf.size);\n }\n break;\n }\n case 'color': {\n const cf = column.colorFormat;\n if (cf) {\n if (cf.showSwatch !== false) el.setAttribute('show-swatch', 'true');\n if (cf.displayFormat) el.setAttribute('display-format', cf.displayFormat);\n }\n break;\n }\n case 'email': {\n const ef = column.emailFormat;\n if (ef) {\n if (ef.showIcon) el.setAttribute('show-icon', 'true');\n }\n break;\n }\n case 'phone': {\n const pf = column.phoneFormat;\n if (pf) {\n if (pf.showIcon) el.setAttribute('show-icon', 'true');\n if (pf.format) el.setAttribute('format', 'true');\n }\n break;\n }\n }\n\n return el;\n }\n\n getCellTagName(type: string): string {\n switch (type) {\n case 'text':\n return 'snice-cell-text';\n case 'number':\n return 'snice-cell-number';\n case 'currency':\n return 'snice-cell-currency';\n case 'date':\n return 'snice-cell-date';\n case 'boolean':\n return 'snice-cell-boolean';\n case 'rating':\n return 'snice-cell-rating';\n case 'progress':\n return 'snice-cell-progress';\n case 'duration':\n return 'snice-cell-duration';\n case 'filesize':\n return 'snice-cell-filesize';\n case 'sparkline':\n return 'snice-cell-sparkline';\n case 'image':\n return 'snice-cell-image';\n case 'percentage':\n case 'percent':\n return 'snice-cell-percentage';\n case 'tag':\n return 'snice-cell-tag';\n case 'status':\n return 'snice-cell-status';\n case 'actions':\n return 'snice-cell-actions';\n case 'link':\n return 'snice-cell-link';\n case 'email':\n return 'snice-cell-email';\n case 'phone':\n return 'snice-cell-phone';\n case 'color':\n return 'snice-cell-color';\n case 'location':\n return 'snice-cell-location';\n case 'json':\n return 'snice-cell-json';\n default:\n return 'snice-cell';\n }\n }\n\n private fsExitHandler: (() => void) | null = null;\n\n toggleFullscreen = async () => {\n const isFullscreen = this.classList.contains('table-fullscreen');\n if (isFullscreen) {\n this.classList.remove('table-fullscreen');\n if (document.fullscreenElement === this) {\n try { await document.exitFullscreen(); } catch { /* already exited */ }\n }\n if (this.fsExitHandler) {\n document.removeEventListener('fullscreenchange', this.fsExitHandler);\n this.fsExitHandler = null;\n }\n } else {\n this.classList.add('table-fullscreen');\n // Use the platform Fullscreen API — escapes the page's stacking context\n // (the showcase header has backdrop-filter which fights CSS-only overlays)\n // and gives the user the browser's native Esc-to-exit affordance.\n try {\n if (typeof this.requestFullscreen === 'function') {\n await this.requestFullscreen();\n }\n } catch {\n // Browser blocked it (e.g. not from a user gesture) — fall back to CSS.\n }\n // Sync class with the browser's fullscreen state\n this.fsExitHandler = () => {\n if (document.fullscreenElement !== this) {\n this.classList.remove('table-fullscreen');\n if (this.fsExitHandler) {\n document.removeEventListener('fullscreenchange', this.fsExitHandler);\n this.fsExitHandler = null;\n }\n }\n };\n document.addEventListener('fullscreenchange', this.fsExitHandler);\n }\n }\n\n private handleKeydown = (e: KeyboardEvent) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n\n const th = (e.target as HTMLElement).closest('th.sortable') as HTMLElement | null;\n if (!th) return;\n\n const columnKey = th.getAttribute('data-key');\n if (!columnKey) return;\n\n e.preventDefault();\n this.toggleSort(columnKey, true);\n };\n\n private handleClick = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n\n // Handle sortable header click — every click adds/cycles in multi-sort.\n const th = target.closest('th.sortable') as HTMLElement;\n if (th) {\n const columnKey = th.getAttribute('data-key');\n if (columnKey) {\n this.toggleSort(columnKey, true);\n }\n return;\n }\n\n // Handle row click\n const tr = target.closest('tbody tr') as HTMLElement;\n if (tr) {\n // Group rows have no data-index. Route the whole header cell (including\n // its chevron) through the table's one Snice-bound click handler so the\n // model toggles once and @dispatch emits from the host. Checkbox clicks\n // are handled by handleChange and must not also collapse the group.\n if (tr.classList.contains('group-header-row')) {\n if (target.closest('snice-checkbox.group-select')) return;\n const key = tr.getAttribute('data-group-key');\n const group = key\n ? this.getGroupingItems().find(\n (item): item is GroupRow => item.type === 'group' && item.key === key\n )\n : undefined;\n if (group) this.toggleGroup(group);\n return;\n }\n\n // Aggregate, spacer, loading, error, and empty-state rows are structural\n // rows, not row zero. Ignoring them prevents phantom selection/click\n // events caused by parseInt(null || '0').\n if (!tr.hasAttribute('data-index')) return;\n\n // Don't trigger if clicking on checkbox or other interactive elements\n if (target.matches('input[type=\"checkbox\"], button, a, .interactive, snice-checkbox, snice-button, snice-input, snice-select')) {\n return;\n }\n\n const rowIndex = parseInt(tr.getAttribute('data-index') || '0');\n const rowData = this.data[rowIndex];\n\n // Handle row selection if selectable. selectionMode + modifier intent\n // (ctrl/meta = additive toggle, shift = range) resolved in one place.\n if (this.selectable) {\n this.applyRowSelection(rowIndex, {\n additive: e.ctrlKey || e.metaKey,\n range: e.shiftKey,\n });\n }\n\n // Handle clickable row event\n if (this.clickable) {\n this.dispatchRowClicked(rowData, rowIndex);\n }\n }\n }\n\n private handleChange = (e: Event) => {\n const target = e.target as HTMLElement;\n\n // Handle snice-checkbox events (row-select and select-all)\n if (target.matches('snice-checkbox.row-select')) {\n const checkbox = target as any;\n const rowIndex = parseInt(checkbox.getAttribute('data-row-index') || '0');\n\n if (this.selectionMode === 'none') return;\n if (this.selectabilityCheck && !this.selectabilityCheck(this.data[rowIndex], rowIndex)) {\n checkbox.checked = this.selectedRows.includes(rowIndex);\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.selectedRows = checkbox.checked ? [rowIndex] : [];\n } else if (checkbox.checked) {\n if (!this.selectedRows.includes(rowIndex)) {\n this.selectedRows = [...this.selectedRows, rowIndex];\n }\n } else {\n this.selectedRows = this.selectedRows.filter(i => i !== rowIndex);\n }\n this.selectionAnchor = this.data[rowIndex];\n\n // DOM update happens in the selectedRows @watch (delta, one row).\n this.dispatchRowSelectionChanged(rowIndex, checkbox.checked);\n this.dispatchSelectionChanged();\n return;\n }\n\n // F: a group-header checkbox selects/deselects all rows in that group.\n if (target.matches('snice-checkbox.group-select')) {\n const checkbox = target as any;\n if (this.selectionMode !== 'multiple') return;\n\n const key = checkbox.getAttribute('data-group-key');\n const group = this.getGroupingItems().find(\n (it): it is GroupRow => it.type === 'group' && it.key === key\n );\n if (!group) return;\n\n const indices = this.getSelectableGroupIndices(group);\n if (checkbox.checked) {\n this.selectedRows = Array.from(new Set([...this.selectedRows, ...indices]));\n } else {\n const remove = new Set(indices);\n this.selectedRows = this.selectedRows.filter((i) => !remove.has(i));\n }\n\n // Row DOM + group/header checkboxes update in the selectedRows @watch.\n this.dispatchSelectionChanged();\n return;\n }\n\n if (target.matches('snice-checkbox.select-all')) {\n const checkbox = target as any;\n\n // Select-all only carries meaning in multiple mode.\n if (this.selectionMode !== 'multiple') return;\n\n if (checkbox.checked) {\n // Select only filtered/displayed rows, not all data\n this.selectedRows = this.getSelectableIndices(this.getFilteredData());\n } else {\n this.selectedRows = [];\n }\n\n // Row DOM + header checkbox update in the selectedRows @watch.\n this.dispatchSelectAllChanged(checkbox.checked);\n this.dispatchSelectionChanged();\n }\n }\n\n private onAttached = () => {\n // A controller attached. Only fetch if the user explicitly declared\n // remote mode (mode=\"remote\" on the element, or set programmatically).\n // Local mode is the default and means the table owns its dataset.\n if (this.mode !== 'remote') return;\n this.getTableConfig();\n this.getTableData();\n }\n\n private searchDebounceTimeout: any = null;\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLElement;\n const input = target as HTMLInputElement;\n this.searchText = input.value;\n\n // Manual debounce implementation\n if (this.searchDebounceTimeout) {\n clearTimeout(this.searchDebounceTimeout);\n }\n this.searchDebounceTimeout = setTimeout(() => {\n if (this.mode === 'remote') this.getTableData();\n else this.setQuickFilter(this.searchText);\n }, this.searchDebounce);\n }\n\n private handleQuickFilterInput = (e: Event) => {\n const input = e.target as HTMLInputElement;\n if (this.filterInputDebounceTimeout) clearTimeout(this.filterInputDebounceTimeout);\n this.filterInputDebounceTimeout = setTimeout(() => {\n this.filterInputDebounceTimeout = null;\n this.setQuickFilter(input.value || '');\n }, SniceTable.FILTER_INPUT_DEBOUNCE_MS);\n }\n\n private selectorDebounceTimeout: any = null;\n\n private handleSelectorChange = (e: CustomEvent) => {\n this.selector = Array.isArray(e.detail.value) ? e.detail.value.join(',') : e.detail.value;\n\n // Manual debounce implementation\n if (this.selectorDebounceTimeout) {\n clearTimeout(this.selectorDebounceTimeout);\n }\n this.selectorDebounceTimeout = setTimeout(() => {\n this.debouncedDataRequest();\n }, 150);\n }\n\n\n // A2: full sweep — kept for external/programmatic callers and post-render\n // resync. NOT on the single-toggle path (that goes through the delta in\n // handleSelectedRowsChange → updateRowSelectionStateFor).\n updateRowSelectionState() {\n if (!this.tbody) return;\n\n const rows = this.tbody.querySelectorAll('tr');\n rows.forEach((row, index) => {\n const isSelected = this.selectedRows.includes(index);\n row.setAttribute('data-selected', String(isSelected));\n\n const checkbox = row.querySelector('snice-checkbox.row-select') as any;\n if (checkbox) {\n checkbox.checked = isSelected;\n }\n });\n }\n\n // A2: reflect one row's selection into the DOM (located by data-index). The\n // reconciler (Task B) re-stamps data-index on moved rows, so this stays\n // correct after reorder. No-op if the row isn't in the current window.\n private updateRowSelectionStateFor(index: number, isSelected: boolean) {\n if (!this.tbody) return;\n const row = this.tbody.querySelector(`tr[data-index=\"${index}\"]`) as HTMLElement | null;\n if (!row) return;\n row.setAttribute('data-selected', String(isSelected));\n const checkbox = row.querySelector('snice-checkbox.row-select') as any;\n if (checkbox) checkbox.checked = isSelected;\n }\n\n updateSelectAllState() {\n const selectAllCheckbox = this.thead?.querySelector('snice-checkbox.select-all') as any;\n if (!selectAllCheckbox) return;\n\n const filteredIndices = this.getSelectableIndices(this.getFilteredData());\n const selectedInFiltered = filteredIndices.filter(i => this.selectedRows.includes(i));\n const allSelected = selectedInFiltered.length === filteredIndices.length && filteredIndices.length > 0;\n const someSelected = selectedInFiltered.length > 0 && selectedInFiltered.length < filteredIndices.length;\n\n selectAllCheckbox.checked = allSelected;\n selectAllCheckbox.indeterminate = someSelected;\n }\n\n toggleSort(columnKey: string, multiSort: boolean = false) {\n if (!multiSort) {\n // Single column sort - clear all other sorts\n const existingSort = this.currentSort.find(s => s.column === columnKey);\n\n if (!existingSort) {\n this.currentSort = [{ column: columnKey, direction: 'asc' }];\n } else if (existingSort.direction === 'asc') {\n this.currentSort = [{ column: columnKey, direction: 'desc' }];\n } else {\n this.currentSort = [];\n }\n } else {\n // Multi column sort - modify existing or add new\n const existingSortIndex = this.currentSort.findIndex(s => s.column === columnKey);\n\n if (existingSortIndex === -1) {\n // Add new sort\n this.currentSort = [...this.currentSort, { column: columnKey, direction: 'asc' }];\n } else {\n const existingSort = this.currentSort[existingSortIndex];\n if (existingSort.direction === 'asc') {\n // Change to desc - create new array to trigger reactivity\n this.currentSort = this.currentSort.map((sort, index) =>\n index === existingSortIndex ? { ...sort, direction: 'desc' as const } : sort\n );\n } else {\n // Remove this sort\n this.currentSort = this.currentSort.filter(s => s.column !== columnKey);\n }\n }\n }\n\n this.renderHeader();\n this.dispatchSortChange();\n if (this.mode === 'remote') {\n this.debouncedDataRequest();\n } else {\n this.sortLocalData();\n }\n }\n\n private sortLocalData() {\n if (!this.unsortedData.length) {\n this.unsortedData = [...this.data];\n }\n // C1: bracket the reassignment so the data @watch does NOT treat this\n // re-sorted view as a new dataset (would clobber unsortedData + double-render).\n this.settingSortedData = true;\n if (this.currentSort.length === 0) {\n this.data = [...this.unsortedData];\n } else {\n this.data = [...this.unsortedData].sort((a, b) => {\n for (const { column, direction } of this.currentSort) {\n const colDef = this.columns.find(c => c.key === column);\n const customComparator = (colDef as any)?.sortComparator;\n\n if (customComparator) {\n const cmp = customComparator(a[column], b[column], direction);\n if (cmp !== 0) return cmp;\n } else {\n // Use value pipeline getter if available\n const aVal = colDef?.valueGetter ? colDef.valueGetter(a[column], a) : (a[column] ?? '');\n const bVal = colDef?.valueGetter ? colDef.valueGetter(b[column], b) : (b[column] ?? '');\n const cmp = String(aVal).localeCompare(String(bVal), undefined, { numeric: true });\n if (cmp !== 0) return direction === 'asc' ? cmp : -cmp;\n }\n }\n return 0;\n });\n }\n this.settingSortedData = false;\n // Sort replaced this.data (new order + reference) — resync the row-index\n // map and drop the stale filtered snapshot before re-rendering. Render is\n // queued (not synchronous): sortLocalData is reachable from the currentSort\n // setter stack via handleControlledSort, and cells must never construct there.\n this.rebuildRowIndex();\n this.scheduleRender('body');\n }\n\n @dispatch('table-row-selection-changed', { bubbles: true, composed: true })\n private dispatchRowSelectionChanged(rowIndex: number, selected: boolean) {\n return {\n selectedRows: this.selectedRows,\n rowIndex,\n selected\n };\n }\n\n @dispatch('row-clicked', { bubbles: true, composed: true })\n private dispatchRowClicked(rowData: any, rowIndex: number) {\n return { rowData, rowIndex };\n }\n\n @dispatch('table-load-error', { bubbles: true, composed: true })\n private dispatchLoadError(error: unknown) {\n return { error };\n }\n\n @dispatch('table-select-all-changed', { bubbles: true, composed: true })\n private dispatchSelectAllChanged(allSelected: boolean) {\n return {\n selectedRows: this.selectedRows,\n allSelected\n };\n }\n\n // E1: unified selection event, emitted alongside the two legacy events on\n // every user-driven selection change. `rows` are the current row objects.\n @dispatch('selection-changed', { bubbles: true, composed: true })\n private dispatchSelectionChanged() {\n return {\n selectedRows: this.selectedRows,\n rows: this.getSelectedData(),\n };\n }\n\n @dispatch('sort-change', { bubbles: true, composed: true })\n private dispatchSortChange() {\n return { sort: this.currentSort };\n }\n\n @dispatch('filter-change', { bubbles: true, composed: true })\n private dispatchFilterChange() {\n return { filters: this.filterEngine.getFilterModel() };\n }\n\n @dispatch('column-visibility-change', { bubbles: true, composed: true })\n private dispatchColumnVisibilityChange(key: string, visible: boolean) {\n return { key, visible, visibility: this.columnManager.getVisibilityModel() };\n }\n\n @dispatch('column-pin-change', { bubbles: true, composed: true })\n private dispatchColumnPinChange(key: string, pinned: 'left' | 'right' | false) {\n return { key, pinned };\n }\n\n @dispatch('column-order-change', { bubbles: true, composed: true })\n private dispatchColumnOrderChange(key: string, toIndex: number) {\n return { key, toIndex };\n }\n\n @dispatch('density-change', { bubbles: true, composed: true })\n private dispatchDensityChange() {\n return { density: this.density };\n }\n\n // ── Module Integration: Initialize ──\n\n private initializeModules() {\n // Column manager\n this.columnManager.initialize(this.columns, this);\n\n // Editor\n this.setupEditor();\n\n // Keyboard\n if (this.shadowRoot) {\n this.keyboard.attach({\n shadowRoot: this.shadowRoot,\n // Keyboard order follows the rows users can actually focus. In grouped\n // mode this excludes group/aggregate rows and collapsed descendants;\n // callbacks below translate that navigation position back to the raw\n // data index expected by selection/editing APIs.\n totalRows: () => this.getKeyboardRows().length,\n ariaRows: () => this.usesGroupingDisplayModel()\n ? this.getDisplayedGroupingItems().length\n : (this.treeData.isEnabled()\n ? this.getTreeDisplayRows(true).length\n : this.getKeyboardRows().length),\n ariaRowOffset: () => this.virtualize && this.virtualizer.isEnabled()\n ? Math.max(0, this.virtualizer.getVisibleRange().start)\n : 0,\n // Use the actual main-header width: tool columns add grid cells and\n // hidden data columns remove them. Raw columns.length made keyboard\n // navigation stop early or point at nonexistent cells.\n totalColumns: () => this.getKeyboardColumnCount(),\n tabMode: 'all',\n isEditing: () => this.editor.isEditing(),\n getRowElement: (rowIndex) => this.getKeyboardRowElement(rowIndex),\n ensureRowVisible: (rowIndex) => this.ensureKeyboardRowRendered(rowIndex),\n onCellActivate: (row, col) => {\n const dataIndex = this.getKeyboardDataIndex(row);\n if (this.editable && dataIndex >= 0 && col) this.startEdit(dataIndex, col);\n },\n onSelectionToggle: (row) => {\n const dataIndex = this.getKeyboardDataIndex(row);\n if (this.selectable && dataIndex >= 0) this.toggleRowSelection(dataIndex);\n },\n onSelectAll: () => {\n if (this.selectable) this.selectAllRows();\n },\n });\n }\n }\n\n @dispose()\n cleanup() {\n this.virtualizer.detach();\n this.keyboard.detach();\n if (this.lazyLoadHandler) this.lazyLoadContainer?.removeEventListener('scroll', this.lazyLoadHandler);\n this.lazyLoadHandler = null;\n this.lazyLoadContainer = null;\n this.rowDnD.detach();\n this.columnDnD.detach();\n }\n\n // ── Virtualization API ──\n\n /**\n * The element that actually scrolls. `.table-frame` owns `overflow: auto`\n * in the live styles — attaching scroll listeners to `.snice-table` works\n * in happy-dom (no layout) but never fires in a real browser.\n */\n private getScrollContainer(): HTMLElement | null {\n return (this.shadowRoot?.querySelector('.table-frame') ??\n this.shadowRoot?.querySelector('.snice-table')) as HTMLElement | null;\n }\n\n private setupVirtualization() {\n if (!this.virtualize || !this.shadowRoot || !this.tbody) return;\n\n const scrollContainer = this.getScrollContainer();\n if (!scrollContainer) return;\n\n this.virtualRowsSnapshot = this.getVirtualRows();\n this.virtualizer.attach({\n rowHeight: (displayIndex) => this.getVirtualRowHeight(displayIndex),\n bufferPx: this.virtualBuffer,\n totalRows: this.virtualRowsSnapshot.length,\n scrollContainer,\n renderRange: (start, end) => this.renderRowRange(start, end),\n // Pinned rows live outside the windowed range so they are always present,\n // exactly like the non-virtual path (renderBody).\n renderPinnedTop: () => this.renderPinnedRows(this.pinnedTopRows, 'top'),\n renderPinnedBottom: () => this.renderPinnedRows(this.pinnedBottomRows, 'bottom'),\n // Scroll-driven windows bypass renderBody; restore grid roles, logical\n // row indices, and roving focus after every inserted range.\n afterRender: () => this.keyboard.refresh(),\n });\n }\n\n private getVirtualRowHeight(displayIndex: number): number {\n const entry = this.virtualRowsSnapshot[displayIndex];\n if (!entry || (entry.groupItem && entry.groupItem.type !== 'row')) return this.rowHeight;\n const dataIndex = entry.groupItem ? this.indexOfRow(entry.data) : entry.index;\n const base = this.rowHeightCallback\n ? this.rowHeightCallback(entry.data, dataIndex)\n : this.rowHeight;\n return base + this.masterDetail.getFixedAdditionalHeight(dataIndex);\n }\n\n /**\n * The feature-aware row list the virtualizer windows over. In tree-data mode\n * this is the FLATTENED visible tree (so expand/collapse works while\n * virtualized); otherwise it is the filtered data. Each descriptor carries\n * the logical index used for `data-index`, selection, and detail lookups.\n */\n private getVirtualRows(): Array<{ data: any; index: number; treeRow?: TreeRow; groupItem?: DisplayItem }> {\n const filtered = this.getFilteredData();\n // F: the flattened group+row+aggregate list is the virtual model when\n // grouping/aggregation is on — same pattern as tree data. Group/aggregate\n // rows carry no data index; data rows key off their index in `this.data`.\n if (this.usesGroupingDisplayModel()) {\n return this.getDisplayedGroupingItems().map((groupItem, i) => ({\n data: groupItem.type === 'row' ? groupItem.data : undefined,\n index: i,\n groupItem,\n }));\n }\n if (this.treeData.isEnabled()) {\n return this.getTreeDisplayRows(true);\n }\n return filtered.map((data) => ({ data, index: this.indexOfRow(data) }));\n }\n\n private renderRowRange(startIndex: number, endIndex: number): DocumentFragment {\n const fragment = document.createDocumentFragment();\n const rows = this.virtualRowsSnapshot.length > 0\n ? this.virtualRowsSnapshot\n : this.getVirtualRows();\n\n const extraCols =\n (this.hasSelectionColumn() ? 1 : 0) +\n (this.masterDetail.isEnabled() ? 1 : 0) +\n (this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0);\n const managedColumns = this.columnManager.getAllStates();\n const visibleColumnCount = managedColumns.length > 0\n ? this.columnManager.getVisibleColumns().length\n : this.columns.length;\n const totalColSpan = visibleColumnCount + extraCols;\n const structuralSig = this.computeStructuralSig();\n\n // Task B: recycle rows that stay in the window across a scroll shift. A row\n // still visible after scrolling keeps its data-object key and signature, so\n // it is MOVED into the freshly built fragment (appendChild detaches it from\n // the live tbody) instead of reconstructed. The virtualizer wipes the tbody\n // AFTER we build this fragment — reused rows are already parked in the\n // fragment by then, so the wipe only clears departed rows and the spacers.\n // Net cost of a small scroll: a few createRow calls for the entering rows.\n const next = new Map<unknown, { el: HTMLElement; sig: string }>();\n const used = new Set<HTMLElement>();\n\n for (let i = startIndex; i < endIndex && i < rows.length; i++) {\n const { data, index, treeRow, groupItem } = rows[i];\n\n // F: group + aggregate rows are rebuilt each window (few, always fresh),\n // keyed by their synthetic key so the reconciler places them correctly.\n if (groupItem && groupItem.type !== 'row') {\n const el = groupItem.type === 'group'\n ? this.createGroupRow(groupItem, totalColSpan)\n : this.createAggregateRow(groupItem, totalColSpan);\n used.add(el);\n if (!next.has(groupItem.key)) next.set(groupItem.key, { el, sig: 'grouprow' });\n fragment.appendChild(el);\n continue;\n }\n\n // F: a grouped data row's logical index is its index in `this.data`.\n const dataIndex = groupItem ? this.indexOfRow(data) : index;\n const editing = this.isRowEditing(dataIndex);\n // Edit marker: see renderBody. Ensures leaving edit state rebuilds the row.\n const sig = this.rowSignature(data, dataIndex, structuralSig, treeRow) + (editing ? '|edit' : '');\n const prev = this.renderedRows.get(data);\n let tr: HTMLElement;\n\n if (prev && !used.has(prev.el) && !editing && prev.sig === sig) {\n tr = prev.el;\n this.restampRowIndex(tr, dataIndex);\n } else {\n tr = this.createRow(data, dataIndex, treeRow);\n }\n\n used.add(tr);\n if (!next.has(data)) next.set(data, { el: tr, sig });\n fragment.appendChild(tr);\n\n // Master-detail: render the expanded detail row in-window. The detail\n // A fixed detailHeight participates in virtual spacer math through\n // getVirtualRowHeight. Auto-height content is still rendered in-window\n // and contributes through normal table layout. Tree rows never carry\n // detail panels, so skip them.\n if (!treeRow && this.masterDetail.isEnabled() && this.masterDetail.isExpanded(dataIndex)) {\n const detailRow = this.masterDetail.createDetailRow(data, dataIndex, totalColSpan);\n if (detailRow) fragment.appendChild(detailRow);\n }\n }\n\n this.renderedRows = next;\n return fragment;\n }\n\n /** Build a fragment of pinned rows for the given position (top/bottom). */\n private renderPinnedRows(rows: any[], position: 'top' | 'bottom'): DocumentFragment {\n const fragment = document.createDocumentFragment();\n for (const row of rows) {\n const tr = this.createRow(row, -1);\n tr.classList.add('pinned-row', position === 'top' ? 'pinned-row--top' : 'pinned-row--bottom');\n fragment.appendChild(tr);\n }\n return fragment;\n }\n\n scrollToRow(index: number) {\n // Public row indices refer to `this.data`; grouped/tree virtualization\n // scrolls a flattened display model containing structural rows as well.\n // Translate through row identity so callers still land on the requested\n // data row rather than an unrelated header/subtotal.\n if (this.usesGroupingDisplayModel() || this.treeData.isEnabled()) {\n const row = this.data[index];\n const displayIndex = this.getVirtualRows().findIndex((entry) => entry.data === row);\n if (displayIndex >= 0) this.virtualizer.scrollToIndex(displayIndex);\n return;\n }\n this.virtualizer.scrollToRow(index);\n }\n\n /** Rows currently reachable by grid keyboard navigation, in display order. */\n private getKeyboardColumnCount(): number {\n const rendered = this.shadowRoot?.querySelectorAll('thead tr.column-header-row > th').length ?? 0;\n if (rendered > 0) return rendered;\n\n const states = this.columnManager.getAllStates();\n const dataColumns = states.length > 0\n ? this.columnManager.getVisibleColumns().length\n : this.columns.length;\n return dataColumns\n + (this.rowReorder && this.rowDnD.isEnabled() ? 1 : 0)\n + (this.masterDetail.isEnabled() ? 1 : 0)\n + (this.hasSelectionColumn() ? 1 : 0);\n }\n\n private getKeyboardRows(): any[] {\n if (this.usesGroupingDisplayModel()) {\n return this.getDisplayedGroupingItems()\n .filter((item): item is Extract<DisplayItem, { type: 'row' }> => item.type === 'row')\n .map((item) => item.data);\n }\n\n if (this.treeData.isEnabled()) {\n return this.getTreeDisplayRows(true)\n .filter((item) => !!item.treeRow)\n .map((item) => item.data);\n }\n\n let rows = this.getFilteredData();\n if (this.pagination && this.paginationMode === 'client') {\n const start = (this.currentPage - 1) * this.pageSize;\n rows = rows.slice(start, start + this.pageSize);\n }\n return rows;\n }\n\n /** Translate a keyboard navigation position to the table's raw data index. */\n private getKeyboardDataIndex(rowIndex: number): number {\n const row = this.getKeyboardRows()[rowIndex];\n return row === undefined ? -1 : this.indexOfRow(row);\n }\n\n private getKeyboardRowElement(rowIndex: number): HTMLElement | null {\n const dataIndex = this.getKeyboardDataIndex(rowIndex);\n if (dataIndex < 0) return null;\n return this.tbody?.querySelector(`tr[data-index=\"${dataIndex}\"]`) as HTMLElement | null;\n }\n\n /**\n * Ensure a keyboard row is in the virtual window. The virtualizer scrolls by\n * flattened display position while keyboard navigation indexes visible data\n * rows, so resolve through the shared virtual row model instead of assuming\n * those two indices are interchangeable.\n */\n private ensureKeyboardRowRendered(rowIndex: number) {\n if (!this.virtualize || !this.virtualizer.isEnabled()) return;\n if (this.getKeyboardRowElement(rowIndex)) return;\n\n const row = this.getKeyboardRows()[rowIndex];\n if (row === undefined) return;\n const displayIndex = this.getVirtualRows().findIndex((entry) => entry.data === row);\n if (displayIndex >= 0) this.virtualizer.scrollToIndex(displayIndex);\n }\n\n getScrollPosition() {\n return this.virtualizer.getScrollPosition();\n }\n\n // ── Filtering API ──\n\n setColumnFilter(column: string, operator: any, value: any) {\n this.filterEngine.setColumnFilter(column, operator, value);\n this.applyClientFilters();\n }\n\n removeColumnFilter(column: string) {\n this.filterEngine.removeColumnFilter(column);\n this.applyClientFilters();\n }\n\n setQuickFilter(text: string) {\n this.filterEngine.setQuickFilter(text);\n this.applyClientFilters();\n }\n\n setFilterModel(model: FilterModel) {\n this.filterEngine.setFilterModel(model);\n this.applyClientFilters();\n }\n\n getFilterModel() {\n return this.filterEngine.getFilterModel();\n }\n\n clearAllFilters() {\n this.filterEngine.clearAllFilters();\n this.applyClientFilters();\n }\n\n private getFilteredData(): any[] {\n // Keep the row-index map + filtered snapshot coherent with the current\n // `this.data` reference (catches a direct `table.data = [...]` assignment).\n this.ensureRowIndex();\n if (this.filteredCache) return this.filteredCache;\n const filteredDataOp = !this.filterEngine.hasActiveFilters()\n ? this.data\n : this.filterEngine.applyFilters(this.data, this.columns);\n this.filteredCache = filteredDataOp;\n return filteredDataOp;\n }\n\n // A1: rebuild the row-object → index map from `this.data`. Call wherever the\n // data array is REPLACED (setData, remote load, sortLocalData) or an element\n // is swapped in place (row-edit commit). First occurrence wins, matching\n // `Array.prototype.indexOf` semantics. Also drops the filtered snapshot,\n // since replacing the data invalidates any previously filtered view.\n private rebuildRowIndex() {\n this.rowIndexMap.clear();\n const rows = this.data;\n for (let i = 0; i < rows.length; i++) {\n if (!this.rowIndexMap.has(rows[i])) this.rowIndexMap.set(rows[i], i);\n }\n this.rowIndexDataRef = rows;\n this.filteredCache = null;\n this.groupingCache = null; // F: derived from the filtered snapshot.\n }\n\n // Rebuild lazily if `this.data` was reassigned out from under the map (plain\n // `table.data = [...]`, used widely by app code and tests, bypasses setData).\n private ensureRowIndex() {\n if (this.rowIndexDataRef !== this.data) this.rebuildRowIndex();\n }\n\n // A1: map lookup replacing `this.data.indexOf(row)`. Same identity semantics\n // (reference equality, -1 when absent).\n private indexOfRow(row: any): number {\n this.ensureRowIndex();\n const idx = this.rowIndexMap.get(row);\n return idx === undefined ? -1 : idx;\n }\n\n // A4: the filtered snapshot must be dropped on every mutation of the model it\n // is derived from. Enumerated invalidation sites:\n // 1. data replacement — rebuildRowIndex() (setData, remote load,\n // sortLocalData) + the ensureRowIndex() ref-check\n // for a direct `table.data = [...]` assignment.\n // 2. in-place row change — cell-edit-commit / row-edit-commit handlers\n // (see @ready initialize()).\n // 3. filter model change — invalidateFilteredCache() below, called from\n // applyClientFilters(); every setQuickFilter /\n // setColumnFilter / setHeaderFilter / setFilterModel\n // / clearAllFilters / removeColumnFilter and the\n // header-filter INPUT path route through it.\n // 4. sort — sortLocalData() replaces this.data (case 1).\n private invalidateFilteredCache() {\n this.filteredCache = null;\n // F: the flattened group list is derived from the filtered snapshot, so any\n // change that drops one drops the other (data/filter/sort/edit).\n this.groupingCache = null;\n }\n\n // F: drop only the flattened group list — expand/collapse and groupBy changes\n // reshape it without touching the filtered snapshot.\n private invalidateGroupingCache() {\n this.groupingCache = null;\n }\n\n // F: the flattened { group | row | aggregate } display list for the current\n // filtered data, cached like filteredCache. setColumns keeps the aggregator\n // set in sync with the live columns before each rebuild.\n private getGroupingItems(): DisplayItem[] {\n if (this.grouping.setColumns(this.columns)) this.invalidateGroupingCache();\n if (this.groupingCache) return this.groupingCache;\n this.groupingCache = this.grouping.processData(this.getFilteredData());\n return this.groupingCache;\n }\n\n /**\n * Row grouping owns the hierarchy whenever groupBy is non-empty. With no\n * groupBy, aggregation normally uses the same flattened row+footer model,\n * except when tree data is active: tree hierarchy stays intact and the table\n * total is appended to that tree model instead.\n */\n private usesGroupingDisplayModel(): boolean {\n return this.grouping.hasGrouping()\n || (this.grouping.hasAggregation() && !this.treeData.isEnabled());\n }\n\n /**\n * Group display items on the active client-side page. This single helper is\n * shared by normal rendering, virtualization, keyboard navigation, and ARIA\n * so combining those features cannot produce four different row models.\n */\n private getDisplayedGroupingItems(): DisplayItem[] {\n const items = this.getGroupingItems();\n if (!this.pagination || this.paginationMode !== 'client') return items;\n\n const totalPages = Math.max(1, Math.ceil(items.length / this.pageSize));\n const page = Math.max(1, Math.min(this.currentPage, totalPages));\n if (page !== this.currentPage) this.currentPage = page;\n const start = (page - 1) * this.pageSize;\n return items.slice(start, start + this.pageSize);\n }\n\n /** Tree rows plus an optional table-total footer, optionally page-sliced. */\n private getTreeDisplayRows(paginate: boolean): Array<{\n data: any;\n index: number;\n treeRow?: TreeRow;\n groupItem?: AggregateRow;\n }> {\n const rows: Array<{ data: any; index: number; treeRow?: TreeRow; groupItem?: AggregateRow }> =\n this.treeData.processData(this.getFilteredData()).map((treeRow) => ({\n data: treeRow.data,\n index: this.indexOfRow(treeRow.data),\n treeRow,\n }));\n\n if (this.grouping.hasAggregation()) {\n const total = this.getGroupingItems().find(\n (item): item is AggregateRow => item.type === 'aggregate' && item.scope === 'table'\n );\n if (total) rows.push({ data: undefined, index: -1, groupItem: total });\n }\n\n if (!paginate || !this.pagination || this.paginationMode !== 'client') return rows;\n const totalPages = Math.max(1, Math.ceil(rows.length / this.pageSize));\n const page = Math.max(1, Math.min(this.currentPage, totalPages));\n if (page !== this.currentPage) this.currentPage = page;\n const start = (page - 1) * this.pageSize;\n return rows.slice(start, start + this.pageSize);\n }\n\n private applyClientFilters() {\n this.invalidateFilteredCache();\n this.dispatchFilterChange();\n if (this.mode === 'remote') {\n // Server-side: send filter params to controller\n this.debouncedDataRequest();\n } else {\n // Client-side: re-render with filtered data\n this.renderBody();\n }\n }\n\n // A3: 150 ms window (matches the remote debounce constant) so a burst of\n // keystrokes into a live filter INPUT collapses into a single re-filter +\n // re-render. Only the INPUT event paths (header-filter inputs) route through\n // here; programmatic API (setQuickFilter/setColumnFilter/...) stays\n // synchronous so callers and tests keep deterministic behavior.\n private static readonly FILTER_INPUT_DEBOUNCE_MS = 150;\n private filterInputDebounceTimeout: any = null;\n\n private debouncedApplyClientFilters() {\n if (this.filterInputDebounceTimeout) clearTimeout(this.filterInputDebounceTimeout);\n this.filterInputDebounceTimeout = setTimeout(() => {\n this.filterInputDebounceTimeout = null;\n this.applyClientFilters();\n }, SniceTable.FILTER_INPUT_DEBOUNCE_MS);\n }\n\n // ── Column API ──\n\n setColumnVisible(key: string, visible: boolean) {\n this.columnManager.setColumnVisible(key, visible);\n this.renderHeader();\n this.renderBody();\n this.dispatchColumnVisibilityChange(key, visible);\n }\n\n showAllColumns() {\n this.columnManager.showAllColumns();\n this.renderHeader();\n this.renderBody();\n }\n\n hideAllColumns() {\n this.columnManager.hideAllColumns();\n this.renderHeader();\n this.renderBody();\n }\n\n getColumnVisibility() {\n return this.columnManager.getVisibilityModel();\n }\n\n pinColumn(key: string, side: 'left' | 'right') {\n this.columnManager.pinColumn(key, side);\n this.renderHeader();\n this.renderBody();\n this.dispatchColumnPinChange(key, side);\n }\n\n unpinColumn(key: string) {\n this.columnManager.unpinColumn(key);\n this.renderHeader();\n this.renderBody();\n this.dispatchColumnPinChange(key, false);\n }\n\n autoSizeColumn(key: string) {\n if (this.tbody) {\n this.columnManager.autoSizeColumn(key, this.tbody);\n this.renderHeader();\n }\n }\n\n autoSizeAllColumns() {\n if (this.tbody) {\n this.columnManager.autoSizeAll(this.tbody);\n this.renderHeader();\n }\n }\n\n moveColumn(key: string, toIndex: number) {\n this.columnManager.moveColumn(key, toIndex);\n this.renderHeader();\n this.renderBody();\n this.dispatchColumnOrderChange(key, toIndex);\n }\n\n // ── Editing API ──\n\n /**\n * Configure the editor from the current columns. Safe to call repeatedly —\n * columns/data are plain fields that can be assigned after @ready ran with an\n * empty set, so this re-syncs editable columns + pipelines before an edit\n * starts rather than trusting the one-time @ready snapshot.\n */\n private setupEditor() {\n if (!this.editable) return;\n\n this.editor.attach(this);\n this.editor.setEditMode(this.editMode);\n const editableCols = this.columns.filter(c => c.editable !== false).map(c => c.key);\n this.editor.setEditableColumns(editableCols);\n\n // Register value pipelines\n for (const col of this.columns) {\n if (col.valueGetter || col.valueFormatter || col.valueParser || col.valueSetter) {\n this.editor.setPipeline(col.key, {\n valueGetter: col.valueGetter,\n valueFormatter: col.valueFormatter,\n valueParser: col.valueParser,\n valueSetter: col.valueSetter,\n });\n }\n }\n }\n\n startEdit(rowIndex: number, columnKey: string) {\n if (!this.editable) return;\n const row = this.data[rowIndex];\n if (!row) return;\n\n // Ensure the editor knows which columns are editable for the current\n // column set (columns may have been assigned after @ready).\n this.setupEditor();\n\n if (this.editMode === 'row') {\n this.editor.startRowEdit(rowIndex, row);\n } else {\n const column = this.columns.find(c => c.key === columnKey);\n const value = row[columnKey];\n this.editor.startCellEdit(rowIndex, columnKey, value, row, column?.editorType ?? column?.type);\n }\n // Re-render the affected row to show the editor, then focus it.\n this.renderBody();\n this.focusActiveEditor();\n }\n\n /** Focus the first rendered editor input (called after renderBody). */\n private focusActiveEditor() {\n const el = this.tbody?.querySelector(\n '.table-editor-input, .table-editor-checkbox, .table-editor-select'\n ) as HTMLElement | null;\n if (!el) return;\n\n el.focus();\n if (el instanceof HTMLInputElement && (el.type === 'text' || el.type === 'number')) {\n try { el.select(); } catch { /* happy-dom may not implement select */ }\n }\n }\n\n async commitEdit(): Promise<string | null> {\n if (this.editMode === 'row') {\n const errors = await this.editor.commitRowEdit();\n this.renderBody();\n return errors ? 'Validation errors' : null;\n } else {\n const error = await this.editor.commitCellEdit();\n this.renderBody();\n return error;\n }\n }\n\n cancelEdit() {\n if (this.editMode === 'row') {\n this.editor.cancelRowEdit();\n } else {\n this.editor.cancelCellEdit();\n }\n this.renderBody();\n }\n\n // ── Export API ──\n\n exportCSV(options?: any) {\n const data = this.getFilteredData();\n const selectedData = options?.selectedOnly\n ? this.getSelectedRowsIn(data)\n : data;\n this.exporter.exportCSV(selectedData, this.columns, options);\n }\n\n printTable(options?: any) {\n this.exporter.print(this, options);\n }\n\n async copyToClipboard(options?: any): Promise<boolean> {\n const filtered = this.getFilteredData();\n const rows = this.selectedRows.length > 0 ? this.getSelectedRowsIn(filtered) : filtered;\n return this.exporter.copyToClipboard(rows, this.columns, options);\n }\n\n /** Resolve raw selection indices against the source data first, then retain\n * only rows present in the current filtered view. Filtered positions are not\n * interchangeable with raw indices. */\n private getSelectedRowsIn(view: any[]): any[] {\n const selected = new Set(this.getSelectedData());\n return view.filter((row) => selected.has(row));\n }\n\n // ── Selection helpers ──\n\n private hasSelectionColumn(): boolean {\n return this.selectable && this.selectionMode !== 'none';\n }\n\n private getSlottedSelectionRows(): any[] {\n if (this.shouldModelSlottedRows()) return [];\n return Array.from(this.querySelectorAll('snice-row[slot=\"rows\"]')) as any[];\n }\n\n private getSelectionSourceRows(): any[] {\n const slotted = this.getSlottedSelectionRows();\n return slotted.length > 0 ? slotted.map((row) => row.data) : this.data;\n }\n\n /** Keep light-DOM rows aligned with the table's live selection mode and\n * conditional selectability, including property changes after connection. */\n private syncSlottedSelectionState() {\n const rows = this.getSlottedSelectionRows();\n if (rows.length === 0) return;\n\n const showSelectors = this.hasSelectionColumn();\n let keptSingleSelection = false;\n rows.forEach((row, index) => {\n const disabled = !!(showSelectors && this.selectabilityCheck\n && !this.selectabilityCheck(row.data, index));\n row.index = index;\n row.selectable = showSelectors;\n row.selectionDisabled = disabled;\n\n if (!showSelectors || disabled) {\n row.selected = false;\n } else if (this.selectionMode === 'single' && row.selected) {\n if (keptSingleSelection) row.selected = false;\n else keptSingleSelection = true;\n }\n });\n\n this.selectedRows = rows\n .map((row, index) => row.selected && !row.selectionDisabled ? index : -1)\n .filter((index) => index >= 0);\n }\n\n private handleSlottedRowSelect = (event: CustomEvent) => {\n const row = event.detail?.element as any;\n const rows = this.getSlottedSelectionRows();\n const index = rows.indexOf(row);\n if (index < 0) return;\n\n const blocked = !this.hasSelectionColumn()\n || !!(this.selectabilityCheck && !this.selectabilityCheck(row.data, index));\n if (blocked) {\n row.selected = false;\n this.syncSlottedSelectionState();\n return;\n }\n\n if (this.selectionMode === 'single' && row.selected) {\n rows.forEach((candidate, candidateIndex) => {\n if (candidateIndex !== index) candidate.selected = false;\n });\n }\n this.selectedRows = rows\n .map((candidate, candidateIndex) => candidate.selected ? candidateIndex : -1)\n .filter((candidateIndex) => candidateIndex >= 0);\n this.selectionAnchor = row.data;\n this.dispatchRowSelectionChanged(index, row.selected);\n this.dispatchSelectionChanged();\n };\n\n private getSelectableIndices(rows: any[]): number[] {\n const indices: number[] = [];\n for (const row of rows) {\n const index = this.indexOfRow(row);\n if (index < 0) continue;\n if (this.selectabilityCheck && !this.selectabilityCheck(row, index)) continue;\n indices.push(index);\n }\n return indices;\n }\n\n /**\n * E1: the single entry point for a pointer/keyboard interaction on one row.\n * Resolves selectionMode + modifier intent (`additive` = ctrl/meta,\n * `range` = shift), mutates `selectedRows` (delta DOM via the @watch), moves\n * the object-valued anchor for non-range interactions, and emits the legacy\n * row-selection event plus the unified `selection-changed` event.\n */\n private applyRowSelection(rowIndex: number, opts: { additive: boolean; range: boolean }) {\n if (this.selectionMode === 'none') return;\n // Conditional selectability gate (shared with the keyboard path).\n if (this.selectabilityCheck && !this.selectabilityCheck(this.data[rowIndex], rowIndex)) return;\n\n const row = this.data[rowIndex];\n\n // Single mode: always collapse to exactly the interacted row.\n if (this.selectionMode === 'single') {\n this.selectedRows = [rowIndex];\n this.selectionAnchor = row;\n this.dispatchRowSelectionChanged(rowIndex, true);\n this.dispatchSelectionChanged();\n return;\n }\n\n // Multiple mode. Shift extends the contiguous range from the anchor object.\n if (opts.range && this.selectionAnchor != null) {\n this.selectRange(this.selectionAnchor, row); // anchor stays put\n this.dispatchRowSelectionChanged(rowIndex, this.selectedRows.includes(rowIndex));\n this.dispatchSelectionChanged();\n return;\n }\n\n // Plain or additive (ctrl/meta) click → toggle this row (historical path).\n const isSelected = this.selectedRows.includes(rowIndex);\n this.selectedRows = isSelected\n ? this.selectedRows.filter(i => i !== rowIndex)\n : [...this.selectedRows, rowIndex];\n this.selectionAnchor = row;\n\n // DOM update happens in the selectedRows @watch (delta, one row).\n this.dispatchRowSelectionChanged(rowIndex, !isSelected);\n this.dispatchSelectionChanged();\n }\n\n /**\n * E1: replace the selection with the contiguous range between the anchor and\n * target ROW OBJECTS, resolved against the current filtered snapshot (display\n * order). Object-valued endpoints mean the range follows the rows across a\n * sort — `getFilteredData()` reflects the reordered `this.data`, and each\n * position maps back to a data index via `indexOfRow` (rowIndexMap).\n */\n private selectRange(anchorRow: any, targetRow: any) {\n const view = this.getFilteredData();\n let posA = view.indexOf(anchorRow);\n const posT = view.indexOf(targetRow);\n if (posT === -1) return;\n if (posA === -1) posA = posT;\n\n const lo = Math.min(posA, posT);\n const hi = Math.max(posA, posT);\n const indices: number[] = [];\n for (let p = lo; p <= hi; p++) {\n const idx = this.indexOfRow(view[p]);\n if (idx < 0) continue;\n if (this.selectabilityCheck && !this.selectabilityCheck(view[p], idx)) continue;\n indices.push(idx);\n }\n this.selectedRows = indices;\n }\n\n private toggleRowSelection(rowIndex: number) {\n // Keyboard Space/Shift+Space toggle — additive intent, no range.\n this.applyRowSelection(rowIndex, { additive: true, range: false });\n }\n\n private selectAllRows() {\n // Select-all only carries meaning in multiple mode.\n if (this.selectionMode !== 'multiple') return;\n\n const filteredIndices = this.getSelectableIndices(this.getFilteredData());\n const allFilteredSelected = filteredIndices.every(i => this.selectedRows.includes(i));\n\n if (allFilteredSelected) {\n this.selectedRows = this.selectedRows.filter(i => !filteredIndices.includes(i));\n } else {\n const combined = new Set([...this.selectedRows, ...filteredIndices]);\n this.selectedRows = Array.from(combined);\n }\n // Row DOM + header checkbox update in the selectedRows @watch.\n this.dispatchSelectAllChanged(allFilteredSelected);\n this.dispatchSelectionChanged();\n }\n\n // ── Master-Detail API ──\n\n setDetailPanel(options: DetailPanelOptions) {\n this.masterDetail.attach(this, options);\n this.masterDetail.onHeightChange = () => {\n if (!this.virtualize || !this.virtualizer.isEnabled()) return;\n this.virtualRowsSnapshot = this.getVirtualRows();\n this.virtualizer.setTotalRows(this.virtualRowsSnapshot.length);\n };\n this.masterDetail.prepare(this.data);\n this.renderHeader();\n this.renderBody();\n }\n\n expandRow(index: number) {\n this.masterDetail.expand(index);\n this.renderBody();\n }\n\n collapseRow(index: number) {\n this.masterDetail.collapse(index);\n this.renderBody();\n }\n\n toggleRowExpansion(index: number) {\n this.masterDetail.toggle(index);\n this.renderBody();\n }\n\n expandAllRows() {\n this.masterDetail.expandAll(this.data.length);\n this.renderBody();\n }\n\n collapseAllRows() {\n this.masterDetail.collapseAll();\n this.renderBody();\n }\n\n // ── Toolbar API ──\n\n setToolbar(options: ToolbarOptions) {\n this.toolbarOptions = options;\n const container = this.shadowRoot?.querySelector('.table-controls-container') as HTMLElement;\n if (!container) return;\n\n this.toolbar.attach(this, container, options);\n // Share the table's filter engine with the toolbar so reads (panel rendering)\n // and writes (apply/clear) operate on the same model.\n this.toolbar.setFilterEngine(this.filterEngine);\n this.toolbar.onSearch = (query) => this.setQuickFilter(query);\n this.toolbar.onSortColumn = (key, dir) => {\n this.currentSort = [{ column: key, direction: dir }];\n this.dispatchSortChange();\n this.renderHeader();\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n };\n this.toolbar.onSetSortModel = (sortModel) => {\n this.currentSort = sortModel;\n this.dispatchSortChange();\n this.renderHeader();\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n };\n this.toolbar.onFilterColumn = (key, operator, value) => {\n this.setColumnFilter(key, operator, value);\n };\n this.toolbar.onRemoveFilter = (key) => {\n this.removeColumnFilter(key);\n };\n this.toolbar.onSetFilterModel = (filters, logic) => {\n this.filterEngine.clearAllFilters();\n this.filterEngine.setFilterLogic(logic);\n for (const f of filters) {\n this.filterEngine.setColumnFilter(f.column, f.operator, f.value);\n }\n this.applyClientFilters();\n };\n this.toolbar.onClearFilters = () => {\n this.clearAllFilters();\n };\n this.toolbar.onExportCSV = () => this.exportCSV();\n this.toolbar.onFullscreen = () => this.toggleFullscreen();\n }\n\n // ── Tree Data API ──\n\n setTreeData(options: TreeDataOptions) {\n this.treeData.attach(options);\n this.renderBody();\n }\n\n expandTreeNode(key: string) {\n this.treeData.expand(key);\n this.renderBody();\n }\n\n collapseTreeNode(key: string) {\n this.treeData.collapse(key);\n this.renderBody();\n }\n\n toggleTreeNode(key: string) {\n this.treeData.toggle(key);\n this.renderBody();\n }\n\n expandAllTreeNodes() {\n this.treeData.expandAll(this.data);\n this.renderBody();\n }\n\n collapseAllTreeNodes() {\n this.treeData.collapseAll();\n this.renderBody();\n }\n\n // ── Column Groups API ──\n\n setColumnGroups(groups: ColumnGroup[]) {\n this.columnManager.setColumnGroups(groups);\n this.renderHeader();\n }\n\n // ── Column Menu API ──\n\n private initColumnMenu() {\n if (!this.columnMenu) return;\n this.columnMenuManager.attach(this);\n this.columnMenuManager.onSortAsc = (col) => {\n this.currentSort = [{ column: col, direction: 'asc' }];\n this.dispatchSortChange();\n this.renderHeader();\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n };\n this.columnMenuManager.onSortDesc = (col) => {\n this.currentSort = [{ column: col, direction: 'desc' }];\n this.dispatchSortChange();\n this.renderHeader();\n if (this.mode === 'remote') this.debouncedDataRequest();\n else this.sortLocalData();\n };\n this.columnMenuManager.onFilter = (col) => {\n // Open filter modal pre-populated with this column\n this.toolbar.openFilterModal(col);\n };\n this.columnMenuManager.onHide = (col) => this.setColumnVisible(col, false);\n this.columnMenuManager.onPinLeft = (col) => this.pinColumn(col, 'left');\n this.columnMenuManager.onPinRight = (col) => this.pinColumn(col, 'right');\n this.columnMenuManager.onUnpin = (col) => this.unpinColumn(col);\n this.columnMenuManager.onAutoSize = (col) => this.autoSizeColumn(col);\n }\n\n // ── Row Pinning API ──\n\n pinRowTop(row: any) {\n this.pinnedTopRows.push(row);\n this.renderBody();\n }\n\n pinRowBottom(row: any) {\n this.pinnedBottomRows.push(row);\n this.renderBody();\n }\n\n unpinRow(row: any) {\n this.pinnedTopRows = this.pinnedTopRows.filter(r => r !== row);\n this.pinnedBottomRows = this.pinnedBottomRows.filter(r => r !== row);\n this.renderBody();\n }\n\n clearPinnedRows() {\n this.pinnedTopRows = [];\n this.pinnedBottomRows = [];\n this.renderBody();\n }\n\n // ── Row Height API ──\n\n setRowHeight(height: number) {\n this.rowHeight = height;\n this.renderBody();\n }\n\n setRowHeightCallback(fn: (row: any, index: number) => number) {\n this.rowHeightCallback = fn;\n this.renderBody();\n }\n\n // ── Sort Enhancements ──\n\n setSortComparator(columnKey: string, comparator: (a: any, b: any, direction: 'asc' | 'desc') => number) {\n const col = this.columns.find(c => c.key === columnKey);\n if (col) (col as any).sortComparator = comparator;\n }\n\n // ── Selection Enhancements ──\n\n private selectabilityCheck: ((row: any, index: number) => boolean) | null = null;\n\n setSelectabilityCheck(fn: (row: any, index: number) => boolean) {\n this.selectabilityCheck = fn;\n const sourceRows = this.getSelectionSourceRows();\n this.selectedRows = this.selectedRows.filter((index) => {\n const row = sourceRows[index];\n return !!row && fn(row, index);\n });\n this.syncSlottedSelectionState();\n this.scheduleRender('both');\n }\n\n // E2: register a per-cell editability predicate. Wraps the editor's check —\n // gates whether a given (row, columnKey) may enter edit mode, on top of the\n // column's `editable` flag. Stored on the editor instance, so it survives the\n // setupEditor() re-sync that startEdit() performs.\n setCellEditableCheck(fn: (row: any, column: string) => boolean) {\n this.editor.setEditabilityCheck(fn);\n }\n\n getSelectedData(): any[] {\n const rows = this.getSelectionSourceRows();\n return this.selectedRows.map(i => rows[i]).filter(Boolean);\n }\n\n // ── Lazy Loading ──\n\n private setupLazyLoading() {\n if (!this.lazyLoad) return;\n\n const scrollContainer = this.getScrollContainer();\n if (!scrollContainer) return;\n\n if (this.lazyLoadHandler) {\n this.lazyLoadContainer?.removeEventListener('scroll', this.lazyLoadHandler);\n }\n\n this.lazyLoadHandler = () => {\n const { scrollTop, scrollHeight, clientHeight } = scrollContainer;\n if (scrollHeight - scrollTop - clientHeight < this.lazyLoadThreshold) {\n this.dispatchEvent(new CustomEvent('lazy-load', {\n detail: { currentCount: this.data.length },\n bubbles: true,\n composed: true,\n }));\n }\n };\n\n scrollContainer.addEventListener('scroll', this.lazyLoadHandler, { passive: true });\n this.lazyLoadContainer = scrollContainer;\n }\n\n // ── Scrolling API ──\n\n scrollToColumn(columnKey: string) {\n const th = this.shadowRoot?.querySelector(`th[data-key=\"${columnKey}\"]`) as HTMLElement;\n th?.scrollIntoView({ inline: 'nearest', block: 'nearest' });\n }\n\n // ── List View ──\n\n /**\n * Declarative list-mode row renderer — bind via `.listRenderer=${fn}`.\n * Returning an HTMLElement appends it; anything else becomes text.\n */\n @property({ attribute: false })\n listRenderer: ListViewRenderer | null = null;\n\n @watch('listRenderer', { immediate: false })\n handleListRendererChange() {\n if (!this.list) return;\n // The row recycler cannot infer that a callback identity changed from\n // row data alone. Force fresh rows so list markup replaces table cells.\n this.renderedRows = new Map();\n this.renderBody();\n }\n\n setListViewRenderer(fn: ListViewRenderer) {\n this.listRenderer = fn;\n }\n\n // ── Row creation helper (used by both regular and virtualized rendering) ──\n\n private createRow(rowData: any, index: number, treeRow?: TreeRow): HTMLTableRowElement {\n const tr = document.createElement('tr');\n tr.setAttribute('data-index', String(index));\n tr.setAttribute('part', 'row');\n\n // Row height\n if (this.rowHeightCallback) {\n tr.style.height = `${this.rowHeightCallback(rowData, index)}px`;\n } else if (this.rowHeight !== 48) {\n tr.style.height = `${this.rowHeight}px`;\n }\n\n const isSelected = this.selectedRows.includes(index);\n tr.setAttribute('data-selected', String(isSelected));\n\n // Row DnD handle\n if (this.rowReorder && this.rowDnD.isEnabled()) {\n tr.appendChild(this.rowDnD.createDragHandle());\n this.rowDnD.makeRowDraggable(tr, index);\n }\n\n // Master-detail expand/collapse toggle\n if (this.masterDetail.isEnabled()) {\n const toggleCell = document.createElement('td');\n toggleCell.className = 'detail-toggle-cell';\n toggleCell.appendChild(this.masterDetail.createToggleButton(index));\n tr.appendChild(toggleCell);\n }\n\n if (this.hasSelectionColumn()) {\n const selectCell = document.createElement('td');\n selectCell.className = 'select-column';\n const disabled = !!(this.selectabilityCheck && !this.selectabilityCheck(rowData, index));\n selectCell.innerHTML = `<snice-checkbox class=\"row-select\" size=\"small\" compact ${isSelected ? 'checked' : ''} ${disabled ? 'disabled' : ''} data-row-index=\"${index}\"></snice-checkbox>`;\n const checkbox = selectCell.querySelector('snice-checkbox') as any;\n checkbox.disabled = disabled;\n tr.appendChild(selectCell);\n }\n\n const columnsToRender = this.getVisibleColumnDefinitions();\n\n if (this.list && this.listRenderer) {\n const td = document.createElement('td');\n td.className = 'list-view-cell';\n td.colSpan = Math.max(1, columnsToRender.length);\n const rendered = this.listRenderer(rowData, index);\n if (rendered instanceof HTMLElement) td.appendChild(rendered);\n else td.textContent = rendered == null ? '' : String(rendered);\n tr.appendChild(td);\n return tr;\n }\n\n let skipColumns = 0;\n columnsToRender.forEach((column, colIdx) => {\n // Column spanning: skip cells consumed by a previous span\n if (skipColumns > 0) {\n skipColumns--;\n return;\n }\n\n const td = document.createElement('td');\n td.setAttribute('data-key', column.key);\n td.setAttribute('part', 'cell');\n const rawValue = rowData[column.key];\n // Display path must run the same valueGetter the sort/grouping/editor\n // paths already apply.\n const value = column.valueGetter ? column.valueGetter(rawValue, rowData) : rawValue;\n\n this.applyCellPresentation(td, column, value, rowData);\n\n // Column span\n const colSpanDef = (column as any).colSpan;\n if (colSpanDef) {\n const span = typeof colSpanDef === 'function' ? colSpanDef(value, rowData) : colSpanDef;\n if (span > 1) {\n td.colSpan = span;\n skipColumns = span - 1;\n }\n }\n\n // Cell/row edit: when this cell is being edited, render its editor\n // element instead of the display cell.\n const editorEl = this.maybeCreateCellEditor(column, rowData, value, index);\n if (editorEl) {\n td.classList.add('editing');\n td.appendChild(editorEl);\n } else if (treeRow && column.key === this.treeData.getGroupColumn()) {\n // Tree data: add indent + toggle on the group column\n const toggle = this.treeData.createToggle(treeRow);\n td.appendChild(toggle);\n const textSpan = document.createElement('span');\n textSpan.textContent = value == null ? '' : String(value);\n // Clicking the text label also toggles expand/collapse\n if (treeRow.hasChildren) {\n textSpan.style.cursor = 'pointer';\n textSpan.addEventListener('click', (e) => {\n e.stopPropagation();\n this.treeData.toggle(treeRow.key);\n this.renderBody();\n });\n }\n td.appendChild(textSpan);\n } else {\n td.appendChild(this.createCellElement(column, value, rowData));\n }\n\n // Apply column width\n const state = this.columnManager.getState(column.key);\n if (state) {\n td.style.width = `${state.width}px`;\n\n // Pinned column sticky positioning\n if (state.pinned === 'left') {\n const offsets = this.columnManager.getPinnedLeftOffsets();\n td.classList.add('pinned-cell');\n td.style.position = 'sticky';\n td.style.left = `${offsets.get(column.key) ?? 0}px`;\n td.style.zIndex = '1';\n } else if (state.pinned === 'right') {\n const offsets = this.columnManager.getPinnedRightOffsets();\n td.classList.add('pinned-cell');\n td.style.position = 'sticky';\n td.style.right = `${offsets.get(column.key) ?? 0}px`;\n td.style.zIndex = '1';\n }\n }\n\n tr.appendChild(td);\n });\n\n return tr;\n }\n\n private applyCellPresentation(td: HTMLTableCellElement, column: ColumnDefinition, value: any, row: any) {\n const applyStyle = (style?: ColumnDefinition['style']) => {\n if (!style) return;\n if (style.backgroundColor) td.style.backgroundColor = style.backgroundColor;\n if (style.color) td.style.color = style.color;\n if (style.fontWeight) td.style.fontWeight = style.fontWeight;\n if (style.fontStyle) td.style.fontStyle = style.fontStyle;\n if (style.fontSize) td.style.fontSize = style.fontSize;\n if (style.textDecoration) td.style.textDecoration = style.textDecoration;\n };\n\n applyStyle(column.style);\n for (const rule of column.conditionalFormats || []) {\n if (!rule.condition(value, row)) continue;\n applyStyle(rule.style);\n if (rule.className) td.classList.add(rule.className);\n break;\n }\n\n if (column.tooltip) {\n td.title = typeof column.tooltip === 'function'\n ? column.tooltip(value, row)\n : (value == null ? '' : String(value));\n }\n }\n\n // ── F: group + aggregate row construction ──\n\n /**\n * A group-header row: a single full-width cell holding an optional group\n * checkbox (selectable), the expand/collapse chevron (reusing the tree-toggle\n * affordance), the group value, and a leaf-count badge. The table's delegated\n * click handler toggles the whole cell (except the checkbox) and emits one\n * host-level `group-toggle` event.\n */\n private createGroupRow(group: GroupRow, totalColSpan: number): HTMLTableRowElement {\n const tr = document.createElement('tr');\n tr.className = 'group-header-row';\n tr.setAttribute('data-group-key', group.key);\n tr.setAttribute('data-depth', String(group.depth));\n tr.setAttribute('aria-label', `${group.value == null || group.value === '' ? 'Blank' : String(group.value)} group, ${group.count} rows`);\n\n const td = document.createElement('td');\n td.colSpan = totalColSpan;\n td.className = 'group-header-cell';\n\n // Group selection checkbox (multiple mode only — select-all semantics).\n if (this.selectable && this.selectionMode === 'multiple') {\n const state = this.groupSelectionState(group);\n const wrap = document.createElement('span');\n wrap.className = 'group-select-wrap';\n const checkbox = document.createElement('snice-checkbox') as any;\n checkbox.className = 'group-select';\n checkbox.setAttribute('size', 'small');\n checkbox.setAttribute('compact', '');\n checkbox.setAttribute('data-group-key', group.key);\n checkbox.setAttribute('aria-label', `Select all rows in ${group.value == null || group.value === '' ? 'blank' : String(group.value)} group`);\n checkbox.checked = state === 'all';\n checkbox.indeterminate = state === 'some';\n checkbox.disabled = this.getSelectableGroupIndices(group).length === 0;\n wrap.appendChild(checkbox);\n td.appendChild(wrap);\n }\n\n // The chevron is passive DOM; the root template's @click handler owns the\n // interaction and host-level group-toggle dispatch.\n const toggle = this.grouping.createToggle(group);\n td.appendChild(toggle);\n\n const label = document.createElement('span');\n label.className = 'group-header-label';\n label.textContent = group.value == null ? '' : String(group.value);\n td.appendChild(label);\n\n const count = document.createElement('span');\n count.className = 'group-header-count';\n count.textContent = String(group.count);\n td.appendChild(count);\n\n tr.appendChild(td);\n return tr;\n }\n\n /**\n * An aggregate footer row: per-column cells carrying the aggregate value for\n * columns that declare one (formatted through the column's normal type /\n * formatter pipeline), empty otherwise. Tool columns get spacer cells so the\n * aggregated values line up under their columns.\n */\n private createAggregateRow(agg: AggregateRow, _totalColSpan: number): HTMLTableRowElement {\n const tr = document.createElement('tr');\n tr.className = 'group-aggregate-row';\n tr.setAttribute('data-agg-scope', agg.scope);\n tr.setAttribute('data-depth', String(agg.depth));\n if (agg.groupKey) tr.setAttribute('data-group-key', agg.groupKey);\n const groupLabel = agg.groupValue == null || agg.groupValue === '' ? 'Blank' : String(agg.groupValue);\n const scopeLabel = agg.scope === 'table'\n ? 'Total'\n : `${agg.groupColumn ? `${agg.groupColumn}: ` : ''}${groupLabel} subtotal`;\n tr.setAttribute('aria-label', scopeLabel);\n\n // Tool-column spacers (match createRow / renderHeader order).\n if (this.rowReorder && this.rowDnD.isEnabled()) {\n const spacer = document.createElement('td');\n spacer.className = 'drag-handle-cell';\n tr.appendChild(spacer);\n }\n if (this.masterDetail.isEnabled()) {\n const spacer = document.createElement('td');\n spacer.className = 'detail-toggle-cell';\n tr.appendChild(spacer);\n }\n if (this.hasSelectionColumn()) {\n const spacer = document.createElement('td');\n spacer.className = 'select-column';\n tr.appendChild(spacer);\n }\n\n const columnsToRender = this.getVisibleColumnDefinitions();\n\n const labelColumn = columnsToRender.find(\n (column) => !Object.prototype.hasOwnProperty.call(agg.aggregates, column.key)\n );\n // If every visible column aggregates, keep the scope/group label in the\n // first aggregate cell instead of silently omitting it.\n const inlineLabelKey = labelColumn ? null : columnsToRender[0]?.key;\n let labelled = false;\n columnsToRender.forEach((column) => {\n const td = document.createElement('td');\n td.setAttribute('data-key', column.key);\n td.className = 'aggregate-cell';\n\n const hasAgg = Object.prototype.hasOwnProperty.call(agg.aggregates, column.key);\n if ((!hasAgg && !labelled) || (hasAgg && column.key === inlineLabelKey)) {\n labelled = true;\n const label = document.createElement('span');\n label.className = `aggregate-label${hasAgg ? ' aggregate-label--inline' : ''}`;\n label.textContent = scopeLabel;\n if (agg.scope === 'group' && agg.depth > 0) {\n label.style.paddingLeft = `${agg.depth * 1.5}rem`;\n }\n td.appendChild(label);\n }\n\n if (hasAgg) {\n const value = agg.aggregates[column.key];\n td.setAttribute('data-agg-value', String(value));\n // Format through the type/formatter pipeline, but never a custom\n // renderCell (it's a per-row renderer; aggregates have no row).\n const aggCol = (column.renderCell || (!column.formatter && column.valueFormatter))\n ? {\n ...column,\n renderCell: undefined,\n // valueFormatter is the newer pipeline spelling; cell elements\n // consume the established `formatter` field. Adapt it only for\n // the already-computed aggregate value (valueGetter ran before\n // reduction and must not run a second time here).\n formatter: column.formatter ?? column.valueFormatter,\n }\n : column;\n td.appendChild(this.createCellElement(aggCol, value));\n }\n\n // Keep pinned columns aligned under their headers.\n const state = this.columnManager.getState(column.key);\n if (state) {\n td.style.width = `${state.width}px`;\n if (state.pinned === 'left') {\n const offsets = this.columnManager.getPinnedLeftOffsets();\n td.classList.add('pinned-cell');\n td.style.position = 'sticky';\n td.style.left = `${offsets.get(column.key) ?? 0}px`;\n td.style.zIndex = '1';\n } else if (state.pinned === 'right') {\n const offsets = this.columnManager.getPinnedRightOffsets();\n td.classList.add('pinned-cell');\n td.style.position = 'sticky';\n td.style.right = `${offsets.get(column.key) ?? 0}px`;\n td.style.zIndex = '1';\n }\n }\n\n tr.appendChild(td);\n });\n\n return tr;\n }\n\n /** F: whether all / some / none of a group's rows are selected. */\n private groupSelectionState(group: GroupRow): 'all' | 'some' | 'none' {\n const indices = this.getSelectableGroupIndices(group);\n if (indices.length === 0) return 'none';\n const selected = indices.filter((i) => this.selectedRows.includes(i)).length;\n if (selected === 0) return 'none';\n if (selected === indices.length) return 'all';\n return 'some';\n }\n\n /** Raw indices in a group that the table's conditional selectability allows. */\n private getSelectableGroupIndices(group: GroupRow): number[] {\n const indices: number[] = [];\n for (const row of group.rows) {\n const index = this.indexOfRow(row);\n if (index < 0) continue;\n if (this.selectabilityCheck && !this.selectabilityCheck(row, index)) continue;\n indices.push(index);\n }\n return indices;\n }\n\n /** F: toggle a group's expansion, dispatch `group-toggle`, and re-render. */\n private toggleGroup(group: GroupRow) {\n this.grouping.toggle(group.key);\n this.invalidateGroupingCache();\n this.dispatchGroupToggle(group.key, group.value, this.grouping.isExpanded(group.key));\n this.renderBody();\n }\n\n // F: reflect selection state onto the rendered group-header checkboxes.\n // Called from the selectedRows @watch delta path (a data-row toggle must\n // update its group header's all/some/none without a full re-render).\n private updateGroupSelectionStates() {\n if (!this.tbody || !this.grouping.hasGrouping() || !this.selectable) return;\n const groups = this.getGroupingItems().filter((it): it is GroupRow => it.type === 'group');\n if (groups.length === 0) return;\n const byKey = new Map(groups.map((g) => [g.key, g]));\n const headers = this.tbody.querySelectorAll('tr.group-header-row');\n headers.forEach((header) => {\n const key = header.getAttribute('data-group-key');\n const group = key ? byKey.get(key) : undefined;\n if (!group) return;\n const checkbox = header.querySelector('snice-checkbox.group-select') as any;\n if (!checkbox) return;\n const state = this.groupSelectionState(group);\n checkbox.checked = state === 'all';\n checkbox.indeterminate = state === 'some';\n });\n }\n\n @dispatch('group-toggle', { bubbles: true, composed: true })\n private dispatchGroupToggle(key: string, value: any, expanded: boolean) {\n return { key, value, expanded };\n }\n\n // ── Editor rendering ──\n\n /**\n * If the given cell is currently being edited (cell mode → this exact cell;\n * row mode → any editable cell in the edited row), build and wire its editor\n * element. Returns null when the cell is not in an edit state.\n */\n private maybeCreateCellEditor(column: any, rowData: any, value: any, index: number): HTMLElement | null {\n if (!this.editable) return null;\n\n let editing = false;\n let editValue = value;\n let editorType: EditorType;\n\n if (this.editMode === 'row') {\n const rowState = this.editor.getRowEditState();\n if (rowState?.isEditing && rowState.rowIndex === index\n && this.editor.isCellEditable(rowData, column.key)) {\n editing = true;\n editValue = rowState.editedRow[column.key];\n }\n editorType = this.resolveEditorType(column);\n } else {\n const cellState = this.editor.getCellEditState();\n if (cellState?.isEditing && cellState.rowIndex === index\n && cellState.columnKey === column.key) {\n editing = true;\n editValue = cellState.currentValue;\n }\n editorType = cellState?.editorType ?? this.resolveEditorType(column);\n }\n\n if (!editing) return null;\n\n // E2: a custom renderEditor bypasses the built-in editor. commit(v) writes\n // the value through the same pipeline the default editor uses, then commits;\n // cancel() aborts. No default wiring is attached — the renderer owns its UI.\n if (typeof column.renderEditor === 'function') {\n const commit = (v: any) => {\n if (this.editMode === 'row') this.editor.updateRowField(column.key, v);\n else this.editor.updateCellValue(v);\n this.commitEdit();\n };\n const cancel = () => this.cancelEdit();\n return column.renderEditor(editValue, rowData, column, commit, cancel);\n }\n\n const options = column.selectOptions ? { selectOptions: column.selectOptions } : undefined;\n const editorEl = this.editor.createEditor(editorType, editValue, options);\n this.wireEditorElement(editorEl, column);\n return editorEl;\n }\n\n /** Resolve the editor kind for a column (explicit override wins, else by type). */\n private resolveEditorType(column: any): EditorType {\n if (column.editorType) return column.editorType;\n return this.editor.getEditorType(column.type || 'text');\n }\n\n /**\n * Attach input/commit/cancel behavior to an editor element. Plain listeners\n * on a module-created element — the established pattern for imperative table\n * DOM (see createRow's checkbox/tree wiring).\n */\n private wireEditorElement(editorEl: HTMLElement, column: any) {\n const isCheckbox = editorEl instanceof HTMLInputElement && editorEl.type === 'checkbox';\n const readValue = () =>\n isCheckbox ? (editorEl as HTMLInputElement).checked : (editorEl as any).value;\n\n const syncValue = () => {\n const v = readValue();\n if (this.editMode === 'row') this.editor.updateRowField(column.key, v);\n else this.editor.updateCellValue(v);\n };\n\n editorEl.addEventListener('input', syncValue);\n editorEl.addEventListener('change', syncValue);\n\n editorEl.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n syncValue();\n this.commitEdit();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n this.cancelEdit();\n }\n });\n\n editorEl.addEventListener('blur', () => {\n // Commit on blur only in cell mode — in row mode, tabbing between the\n // row's editors would otherwise commit the whole row prematurely. Guard\n // on isEditing so re-renders that remove the editor (also firing blur)\n // don't re-trigger a commit.\n if (this.editMode !== 'row' && this.editor.isEditing()) {\n syncValue();\n this.commitEdit();\n }\n });\n }\n\n}\n"],"names":[],"mappings":"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"}
|