@toolbox-web/grid 1.24.2 → 1.25.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/all.d.ts +0 -1
- package/all.js +2 -2
- package/all.js.map +1 -1
- package/index.d.ts +0 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/lib/core/constants.d.ts +0 -1
- package/lib/core/grid.d.ts +145 -33
- package/lib/core/internal/aggregators.d.ts +0 -1
- package/lib/core/internal/aria.d.ts +8 -1
- package/lib/core/internal/columns.d.ts +3 -4
- package/lib/core/internal/config-manager.d.ts +2 -54
- package/lib/core/internal/dom-builder.d.ts +0 -1
- package/lib/core/internal/event-delegation.d.ts +3 -4
- package/lib/core/internal/feature-hook.d.ts +0 -1
- package/lib/core/internal/focus-manager.d.ts +49 -0
- package/lib/core/internal/header.d.ts +2 -3
- package/lib/core/internal/idle-scheduler.d.ts +0 -1
- package/lib/core/internal/inference.d.ts +0 -1
- package/lib/core/internal/keyboard.d.ts +3 -4
- package/lib/core/internal/loading.d.ts +0 -1
- package/lib/core/internal/render-scheduler.d.ts +3 -66
- package/lib/core/internal/resize.d.ts +2 -3
- package/lib/core/internal/row-animation.d.ts +0 -1
- package/lib/core/internal/row-manager.d.ts +31 -0
- package/lib/core/internal/rows.d.ts +4 -5
- package/lib/core/internal/sanitize.d.ts +0 -1
- package/lib/core/internal/shell.d.ts +7 -25
- package/lib/core/internal/sorting.d.ts +3 -4
- package/lib/core/internal/style-injector.d.ts +0 -1
- package/lib/core/internal/touch-scroll.d.ts +31 -12
- package/lib/core/internal/utils.d.ts +8 -1
- package/lib/core/internal/validate-config.d.ts +4 -5
- package/lib/core/internal/virtualization-manager.d.ts +48 -0
- package/lib/core/internal/virtualization.d.ts +0 -1
- package/lib/core/plugin/base-plugin.d.ts +2 -3
- package/lib/core/plugin/expander-column.d.ts +0 -1
- package/lib/core/plugin/index.d.ts +0 -1
- package/lib/core/plugin/plugin-manager.d.ts +2 -1
- package/lib/core/plugin/types.d.ts +7 -2
- package/lib/core/styles/index.d.ts +0 -1
- package/lib/core/types.d.ts +364 -54
- package/lib/features/clipboard.d.ts +0 -1
- package/lib/features/column-virtualization.d.ts +0 -1
- package/lib/features/context-menu.d.ts +0 -1
- package/lib/features/editing.d.ts +0 -1
- package/lib/features/export.d.ts +0 -1
- package/lib/features/filtering.d.ts +0 -1
- package/lib/features/grouping-columns.d.ts +0 -1
- package/lib/features/grouping-rows.d.ts +0 -1
- package/lib/features/master-detail.d.ts +0 -1
- package/lib/features/multi-sort.d.ts +1 -2
- package/lib/features/multi-sort.js.map +1 -1
- package/lib/features/pinned-columns.d.ts +0 -1
- package/lib/features/pinned-rows.d.ts +0 -1
- package/lib/features/pivot.d.ts +0 -1
- package/lib/features/print.d.ts +0 -1
- package/lib/features/registry.d.ts +0 -1
- package/lib/features/reorder-columns.d.ts +1 -2
- package/lib/features/reorder-columns.js.map +1 -1
- package/lib/features/reorder-rows.d.ts +1 -2
- package/lib/features/reorder-rows.js.map +1 -1
- package/lib/features/responsive.d.ts +0 -1
- package/lib/features/selection.d.ts +0 -1
- package/lib/features/server-side.d.ts +0 -1
- package/lib/features/tree.d.ts +0 -1
- package/lib/features/undo-redo.d.ts +0 -1
- package/lib/features/visibility.d.ts +0 -1
- package/lib/plugins/clipboard/ClipboardPlugin.d.ts +0 -1
- package/lib/plugins/clipboard/copy.d.ts +0 -1
- package/lib/plugins/clipboard/index.d.ts +0 -1
- package/lib/plugins/clipboard/index.js +1 -1
- package/lib/plugins/clipboard/index.js.map +1 -1
- package/lib/plugins/clipboard/paste.d.ts +0 -1
- package/lib/plugins/clipboard/types.d.ts +6 -1
- package/lib/plugins/column-virtualization/ColumnVirtualizationPlugin.d.ts +0 -1
- package/lib/plugins/column-virtualization/column-virtualization.d.ts +0 -1
- package/lib/plugins/column-virtualization/index.d.ts +0 -1
- package/lib/plugins/column-virtualization/index.js +1 -1
- package/lib/plugins/column-virtualization/index.js.map +1 -1
- package/lib/plugins/column-virtualization/types.d.ts +0 -1
- package/lib/plugins/context-menu/ContextMenuPlugin.d.ts +16 -1
- package/lib/plugins/context-menu/index.d.ts +1 -2
- package/lib/plugins/context-menu/index.js +1 -1
- package/lib/plugins/context-menu/index.js.map +1 -1
- package/lib/plugins/context-menu/menu.d.ts +14 -1
- package/lib/plugins/context-menu/types.d.ts +13 -3
- package/lib/plugins/editing/EditingPlugin.d.ts +4 -6
- package/lib/plugins/editing/editors.d.ts +0 -1
- package/lib/plugins/editing/index.d.ts +0 -1
- package/lib/plugins/editing/index.js +1 -1
- package/lib/plugins/editing/index.js.map +1 -1
- package/lib/plugins/editing/internal/cell-validation.d.ts +0 -1
- package/lib/plugins/editing/internal/dirty-tracking-manager.d.ts +0 -1
- package/lib/plugins/editing/internal/dirty-tracking.d.ts +2 -2
- package/lib/plugins/editing/internal/editor-injection.d.ts +3 -4
- package/lib/plugins/editing/internal/helpers.d.ts +0 -1
- package/lib/plugins/editing/types.d.ts +15 -14
- package/lib/plugins/export/ExportPlugin.d.ts +0 -1
- package/lib/plugins/export/csv.d.ts +0 -1
- package/lib/plugins/export/excel.d.ts +0 -1
- package/lib/plugins/export/index.d.ts +0 -1
- package/lib/plugins/export/index.js +1 -1
- package/lib/plugins/export/index.js.map +1 -1
- package/lib/plugins/export/types.d.ts +4 -1
- package/lib/plugins/filtering/FilteringPlugin.d.ts +0 -1
- package/lib/plugins/filtering/filter-model.d.ts +0 -1
- package/lib/plugins/filtering/filter-panel-date.d.ts +0 -1
- package/lib/plugins/filtering/filter-panel-default.d.ts +0 -1
- package/lib/plugins/filtering/filter-panel-number.d.ts +0 -1
- package/lib/plugins/filtering/index.d.ts +0 -1
- package/lib/plugins/filtering/index.js +1 -1
- package/lib/plugins/filtering/index.js.map +1 -1
- package/lib/plugins/filtering/types.d.ts +4 -1
- package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts +0 -1
- package/lib/plugins/grouping-columns/grouping-columns.d.ts +0 -1
- package/lib/plugins/grouping-columns/index.d.ts +0 -1
- package/lib/plugins/grouping-columns/index.js +1 -1
- package/lib/plugins/grouping-columns/index.js.map +1 -1
- package/lib/plugins/grouping-columns/types.d.ts +0 -1
- package/lib/plugins/grouping-rows/GroupingRowsPlugin.d.ts +0 -1
- package/lib/plugins/grouping-rows/grouping-rows.d.ts +0 -1
- package/lib/plugins/grouping-rows/index.d.ts +0 -1
- package/lib/plugins/grouping-rows/index.js +1 -1
- package/lib/plugins/grouping-rows/index.js.map +1 -1
- package/lib/plugins/grouping-rows/types.d.ts +4 -1
- package/lib/plugins/master-detail/MasterDetailPlugin.d.ts +0 -1
- package/lib/plugins/master-detail/index.d.ts +0 -1
- package/lib/plugins/master-detail/index.js +1 -1
- package/lib/plugins/master-detail/index.js.map +1 -1
- package/lib/plugins/master-detail/master-detail.d.ts +0 -1
- package/lib/plugins/master-detail/types.d.ts +4 -1
- package/lib/plugins/multi-sort/MultiSortPlugin.d.ts +3 -3
- package/lib/plugins/multi-sort/index.d.ts +1 -2
- package/lib/plugins/multi-sort/index.js +1 -1
- package/lib/plugins/multi-sort/index.js.map +1 -1
- package/lib/plugins/multi-sort/multi-sort.d.ts +0 -1
- package/lib/plugins/multi-sort/types.d.ts +5 -1
- package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts +0 -1
- package/lib/plugins/pinned-columns/index.d.ts +0 -1
- package/lib/plugins/pinned-columns/index.js +1 -1
- package/lib/plugins/pinned-columns/index.js.map +1 -1
- package/lib/plugins/pinned-columns/pinned-columns.d.ts +0 -1
- package/lib/plugins/pinned-columns/types.d.ts +0 -1
- package/lib/plugins/pinned-rows/PinnedRowsPlugin.d.ts +0 -1
- package/lib/plugins/pinned-rows/index.d.ts +0 -1
- package/lib/plugins/pinned-rows/index.js +1 -1
- package/lib/plugins/pinned-rows/index.js.map +1 -1
- package/lib/plugins/pinned-rows/pinned-rows.d.ts +0 -1
- package/lib/plugins/pinned-rows/types.d.ts +0 -1
- package/lib/plugins/pivot/PivotPlugin.d.ts +0 -1
- package/lib/plugins/pivot/index.d.ts +0 -1
- package/lib/plugins/pivot/index.js +1 -1
- package/lib/plugins/pivot/index.js.map +1 -1
- package/lib/plugins/pivot/pivot-engine.d.ts +0 -1
- package/lib/plugins/pivot/pivot-model.d.ts +0 -1
- package/lib/plugins/pivot/pivot-panel.d.ts +0 -1
- package/lib/plugins/pivot/pivot-rows.d.ts +0 -1
- package/lib/plugins/pivot/types.d.ts +0 -1
- package/lib/plugins/print/PrintPlugin.d.ts +0 -1
- package/lib/plugins/print/index.d.ts +0 -1
- package/lib/plugins/print/index.js +1 -1
- package/lib/plugins/print/index.js.map +1 -1
- package/lib/plugins/print/print-isolated.d.ts +0 -1
- package/lib/plugins/print/types.d.ts +6 -1
- package/lib/plugins/reorder-columns/ReorderPlugin.d.ts +5 -5
- package/lib/plugins/reorder-columns/column-drag.d.ts +3 -2
- package/lib/plugins/reorder-columns/index.d.ts +0 -1
- package/lib/plugins/reorder-columns/index.js +1 -1
- package/lib/plugins/reorder-columns/index.js.map +1 -1
- package/lib/plugins/reorder-columns/types.d.ts +4 -1
- package/lib/plugins/reorder-rows/RowReorderPlugin.d.ts +3 -3
- package/lib/plugins/reorder-rows/index.d.ts +0 -1
- package/lib/plugins/reorder-rows/index.js +1 -1
- package/lib/plugins/reorder-rows/index.js.map +1 -1
- package/lib/plugins/reorder-rows/types.d.ts +4 -1
- package/lib/plugins/responsive/ResponsivePlugin.d.ts +0 -1
- package/lib/plugins/responsive/index.d.ts +0 -1
- package/lib/plugins/responsive/index.js +1 -1
- package/lib/plugins/responsive/index.js.map +1 -1
- package/lib/plugins/responsive/types.d.ts +4 -1
- package/lib/plugins/selection/SelectionPlugin.d.ts +1 -3
- package/lib/plugins/selection/index.d.ts +0 -1
- package/lib/plugins/selection/index.js +1 -1
- package/lib/plugins/selection/index.js.map +1 -1
- package/lib/plugins/selection/range-selection.d.ts +0 -1
- package/lib/plugins/selection/row-selection.d.ts +0 -1
- package/lib/plugins/selection/types.d.ts +4 -1
- package/lib/plugins/server-side/ServerSidePlugin.d.ts +0 -1
- package/lib/plugins/server-side/cache.d.ts +0 -1
- package/lib/plugins/server-side/datasource.d.ts +0 -1
- package/lib/plugins/server-side/index.d.ts +0 -1
- package/lib/plugins/server-side/index.js +1 -1
- package/lib/plugins/server-side/index.js.map +1 -1
- package/lib/plugins/server-side/types.d.ts +0 -1
- package/lib/plugins/shared/data-collection.d.ts +0 -1
- package/lib/plugins/tree/TreePlugin.d.ts +0 -1
- package/lib/plugins/tree/index.d.ts +0 -1
- package/lib/plugins/tree/index.js +1 -1
- package/lib/plugins/tree/index.js.map +1 -1
- package/lib/plugins/tree/tree-data.d.ts +0 -1
- package/lib/plugins/tree/tree-detect.d.ts +0 -1
- package/lib/plugins/tree/types.d.ts +4 -1
- package/lib/plugins/undo-redo/UndoRedoPlugin.d.ts +1 -2
- package/lib/plugins/undo-redo/history.d.ts +0 -1
- package/lib/plugins/undo-redo/index.d.ts +0 -1
- package/lib/plugins/undo-redo/index.js +1 -1
- package/lib/plugins/undo-redo/index.js.map +1 -1
- package/lib/plugins/undo-redo/types.d.ts +6 -1
- package/lib/plugins/visibility/VisibilityPlugin.d.ts +0 -1
- package/lib/plugins/visibility/index.d.ts +0 -1
- package/lib/plugins/visibility/index.js +1 -1
- package/lib/plugins/visibility/index.js.map +1 -1
- package/lib/plugins/visibility/types.d.ts +0 -1
- package/lib/plugins/visibility/visibility.d.ts +0 -1
- package/package.json +1 -1
- package/public.d.ts +31 -12
- package/umd/grid.all.umd.js +1 -1
- package/umd/grid.all.umd.js.map +1 -1
- package/umd/grid.umd.js +1 -1
- package/umd/grid.umd.js.map +1 -1
- package/umd/plugins/clipboard.umd.js +1 -1
- package/umd/plugins/clipboard.umd.js.map +1 -1
- package/umd/plugins/column-virtualization.umd.js +1 -1
- package/umd/plugins/column-virtualization.umd.js.map +1 -1
- package/umd/plugins/context-menu.umd.js +1 -1
- package/umd/plugins/context-menu.umd.js.map +1 -1
- package/umd/plugins/editing.umd.js +1 -1
- package/umd/plugins/editing.umd.js.map +1 -1
- package/umd/plugins/filtering.umd.js +1 -1
- package/umd/plugins/filtering.umd.js.map +1 -1
- package/umd/plugins/grouping-columns.umd.js +1 -1
- package/umd/plugins/grouping-columns.umd.js.map +1 -1
- package/umd/plugins/master-detail.umd.js +1 -1
- package/umd/plugins/master-detail.umd.js.map +1 -1
- package/umd/plugins/multi-sort.umd.js +1 -1
- package/umd/plugins/multi-sort.umd.js.map +1 -1
- package/umd/plugins/pinned-columns.umd.js +1 -1
- package/umd/plugins/pinned-columns.umd.js.map +1 -1
- package/umd/plugins/pinned-rows.umd.js +1 -1
- package/umd/plugins/pinned-rows.umd.js.map +1 -1
- package/umd/plugins/print.umd.js +1 -1
- package/umd/plugins/print.umd.js.map +1 -1
- package/umd/plugins/reorder-columns.umd.js +1 -1
- package/umd/plugins/reorder-columns.umd.js.map +1 -1
- package/umd/plugins/reorder-rows.umd.js +1 -1
- package/umd/plugins/reorder-rows.umd.js.map +1 -1
- package/umd/plugins/responsive.umd.js +1 -1
- package/umd/plugins/responsive.umd.js.map +1 -1
- package/umd/plugins/selection.umd.js +1 -1
- package/umd/plugins/selection.umd.js.map +1 -1
- package/umd/plugins/server-side.umd.js.map +1 -1
- package/umd/plugins/tree.umd.js +1 -1
- package/umd/plugins/tree.umd.js.map +1 -1
- package/umd/plugins/undo-redo.umd.js.map +1 -1
- package/umd/plugins/visibility.umd.js +1 -1
- package/umd/plugins/visibility.umd.js.map +1 -1
- package/all.d.ts.map +0 -1
- package/index.d.ts.map +0 -1
- package/lib/core/constants.d.ts.map +0 -1
- package/lib/core/grid.d.ts.map +0 -1
- package/lib/core/internal/aggregators.d.ts.map +0 -1
- package/lib/core/internal/aria.d.ts.map +0 -1
- package/lib/core/internal/columns.d.ts.map +0 -1
- package/lib/core/internal/config-manager.d.ts.map +0 -1
- package/lib/core/internal/dom-builder.d.ts.map +0 -1
- package/lib/core/internal/event-delegation.d.ts.map +0 -1
- package/lib/core/internal/feature-hook.d.ts.map +0 -1
- package/lib/core/internal/header.d.ts.map +0 -1
- package/lib/core/internal/idle-scheduler.d.ts.map +0 -1
- package/lib/core/internal/inference.d.ts.map +0 -1
- package/lib/core/internal/keyboard.d.ts.map +0 -1
- package/lib/core/internal/loading.d.ts.map +0 -1
- package/lib/core/internal/render-scheduler.d.ts.map +0 -1
- package/lib/core/internal/resize.d.ts.map +0 -1
- package/lib/core/internal/row-animation.d.ts.map +0 -1
- package/lib/core/internal/rows.d.ts.map +0 -1
- package/lib/core/internal/sanitize.d.ts.map +0 -1
- package/lib/core/internal/shell.d.ts.map +0 -1
- package/lib/core/internal/sorting.d.ts.map +0 -1
- package/lib/core/internal/style-injector.d.ts.map +0 -1
- package/lib/core/internal/touch-scroll.d.ts.map +0 -1
- package/lib/core/internal/utils.d.ts.map +0 -1
- package/lib/core/internal/validate-config.d.ts.map +0 -1
- package/lib/core/internal/virtualization.d.ts.map +0 -1
- package/lib/core/plugin/base-plugin.d.ts.map +0 -1
- package/lib/core/plugin/expander-column.d.ts.map +0 -1
- package/lib/core/plugin/index.d.ts.map +0 -1
- package/lib/core/plugin/plugin-manager.d.ts.map +0 -1
- package/lib/core/plugin/types.d.ts.map +0 -1
- package/lib/core/styles/index.d.ts.map +0 -1
- package/lib/core/types.d.ts.map +0 -1
- package/lib/features/clipboard.d.ts.map +0 -1
- package/lib/features/column-virtualization.d.ts.map +0 -1
- package/lib/features/context-menu.d.ts.map +0 -1
- package/lib/features/editing.d.ts.map +0 -1
- package/lib/features/export.d.ts.map +0 -1
- package/lib/features/filtering.d.ts.map +0 -1
- package/lib/features/grouping-columns.d.ts.map +0 -1
- package/lib/features/grouping-rows.d.ts.map +0 -1
- package/lib/features/magic-string.es-CkyDP9Ir.mjs.map +0 -1
- package/lib/features/master-detail.d.ts.map +0 -1
- package/lib/features/multi-sort.d.ts.map +0 -1
- package/lib/features/pinned-columns.d.ts.map +0 -1
- package/lib/features/pinned-rows.d.ts.map +0 -1
- package/lib/features/pivot.d.ts.map +0 -1
- package/lib/features/print.d.ts.map +0 -1
- package/lib/features/registry.d.ts.map +0 -1
- package/lib/features/registry.spec.js +0 -5
- package/lib/features/registry.spec.js.map +0 -1
- package/lib/features/reorder-columns.d.ts.map +0 -1
- package/lib/features/reorder-rows.d.ts.map +0 -1
- package/lib/features/responsive.d.ts.map +0 -1
- package/lib/features/selection.d.ts.map +0 -1
- package/lib/features/server-side.d.ts.map +0 -1
- package/lib/features/tree.d.ts.map +0 -1
- package/lib/features/undo-redo.d.ts.map +0 -1
- package/lib/features/visibility.d.ts.map +0 -1
- package/lib/plugins/clipboard/ClipboardPlugin.d.ts.map +0 -1
- package/lib/plugins/clipboard/copy.d.ts.map +0 -1
- package/lib/plugins/clipboard/index.d.ts.map +0 -1
- package/lib/plugins/clipboard/paste.d.ts.map +0 -1
- package/lib/plugins/clipboard/types.d.ts.map +0 -1
- package/lib/plugins/column-virtualization/ColumnVirtualizationPlugin.d.ts.map +0 -1
- package/lib/plugins/column-virtualization/column-virtualization.d.ts.map +0 -1
- package/lib/plugins/column-virtualization/index.d.ts.map +0 -1
- package/lib/plugins/column-virtualization/types.d.ts.map +0 -1
- package/lib/plugins/context-menu/ContextMenuPlugin.d.ts.map +0 -1
- package/lib/plugins/context-menu/index.d.ts.map +0 -1
- package/lib/plugins/context-menu/menu.d.ts.map +0 -1
- package/lib/plugins/context-menu/types.d.ts.map +0 -1
- package/lib/plugins/editing/EditingPlugin.d.ts.map +0 -1
- package/lib/plugins/editing/editors.d.ts.map +0 -1
- package/lib/plugins/editing/index.d.ts.map +0 -1
- package/lib/plugins/editing/internal/cell-validation.d.ts.map +0 -1
- package/lib/plugins/editing/internal/dirty-tracking-manager.d.ts.map +0 -1
- package/lib/plugins/editing/internal/dirty-tracking.d.ts.map +0 -1
- package/lib/plugins/editing/internal/editor-injection.d.ts.map +0 -1
- package/lib/plugins/editing/internal/helpers.d.ts.map +0 -1
- package/lib/plugins/editing/types.d.ts.map +0 -1
- package/lib/plugins/export/ExportPlugin.d.ts.map +0 -1
- package/lib/plugins/export/csv.d.ts.map +0 -1
- package/lib/plugins/export/excel.d.ts.map +0 -1
- package/lib/plugins/export/index.d.ts.map +0 -1
- package/lib/plugins/export/types.d.ts.map +0 -1
- package/lib/plugins/filtering/FilteringPlugin.d.ts.map +0 -1
- package/lib/plugins/filtering/filter-model.d.ts.map +0 -1
- package/lib/plugins/filtering/filter-panel-date.d.ts.map +0 -1
- package/lib/plugins/filtering/filter-panel-default.d.ts.map +0 -1
- package/lib/plugins/filtering/filter-panel-number.d.ts.map +0 -1
- package/lib/plugins/filtering/index.d.ts.map +0 -1
- package/lib/plugins/filtering/types.d.ts.map +0 -1
- package/lib/plugins/grouping-columns/GroupingColumnsPlugin.d.ts.map +0 -1
- package/lib/plugins/grouping-columns/grouping-columns.d.ts.map +0 -1
- package/lib/plugins/grouping-columns/index.d.ts.map +0 -1
- package/lib/plugins/grouping-columns/types.d.ts.map +0 -1
- package/lib/plugins/grouping-rows/GroupingRowsPlugin.d.ts.map +0 -1
- package/lib/plugins/grouping-rows/grouping-rows.d.ts.map +0 -1
- package/lib/plugins/grouping-rows/index.d.ts.map +0 -1
- package/lib/plugins/grouping-rows/types.d.ts.map +0 -1
- package/lib/plugins/master-detail/MasterDetailPlugin.d.ts.map +0 -1
- package/lib/plugins/master-detail/index.d.ts.map +0 -1
- package/lib/plugins/master-detail/master-detail.d.ts.map +0 -1
- package/lib/plugins/master-detail/types.d.ts.map +0 -1
- package/lib/plugins/multi-sort/MultiSortPlugin.d.ts.map +0 -1
- package/lib/plugins/multi-sort/index.d.ts.map +0 -1
- package/lib/plugins/multi-sort/multi-sort.d.ts.map +0 -1
- package/lib/plugins/multi-sort/types.d.ts.map +0 -1
- package/lib/plugins/pinned-columns/PinnedColumnsPlugin.d.ts.map +0 -1
- package/lib/plugins/pinned-columns/index.d.ts.map +0 -1
- package/lib/plugins/pinned-columns/pinned-columns.d.ts.map +0 -1
- package/lib/plugins/pinned-columns/types.d.ts.map +0 -1
- package/lib/plugins/pinned-rows/PinnedRowsPlugin.d.ts.map +0 -1
- package/lib/plugins/pinned-rows/index.d.ts.map +0 -1
- package/lib/plugins/pinned-rows/pinned-rows.d.ts.map +0 -1
- package/lib/plugins/pinned-rows/types.d.ts.map +0 -1
- package/lib/plugins/pivot/PivotPlugin.d.ts.map +0 -1
- package/lib/plugins/pivot/index.d.ts.map +0 -1
- package/lib/plugins/pivot/pivot-engine.d.ts.map +0 -1
- package/lib/plugins/pivot/pivot-model.d.ts.map +0 -1
- package/lib/plugins/pivot/pivot-panel.d.ts.map +0 -1
- package/lib/plugins/pivot/pivot-rows.d.ts.map +0 -1
- package/lib/plugins/pivot/types.d.ts.map +0 -1
- package/lib/plugins/print/PrintPlugin.d.ts.map +0 -1
- package/lib/plugins/print/index.d.ts.map +0 -1
- package/lib/plugins/print/print-isolated.d.ts.map +0 -1
- package/lib/plugins/print/types.d.ts.map +0 -1
- package/lib/plugins/reorder-columns/ReorderPlugin.d.ts.map +0 -1
- package/lib/plugins/reorder-columns/column-drag.d.ts.map +0 -1
- package/lib/plugins/reorder-columns/index.d.ts.map +0 -1
- package/lib/plugins/reorder-columns/types.d.ts.map +0 -1
- package/lib/plugins/reorder-rows/RowReorderPlugin.d.ts.map +0 -1
- package/lib/plugins/reorder-rows/index.d.ts.map +0 -1
- package/lib/plugins/reorder-rows/types.d.ts.map +0 -1
- package/lib/plugins/responsive/ResponsivePlugin.d.ts.map +0 -1
- package/lib/plugins/responsive/index.d.ts.map +0 -1
- package/lib/plugins/responsive/types.d.ts.map +0 -1
- package/lib/plugins/selection/SelectionPlugin.d.ts.map +0 -1
- package/lib/plugins/selection/index.d.ts.map +0 -1
- package/lib/plugins/selection/range-selection.d.ts.map +0 -1
- package/lib/plugins/selection/row-selection.d.ts.map +0 -1
- package/lib/plugins/selection/types.d.ts.map +0 -1
- package/lib/plugins/server-side/ServerSidePlugin.d.ts.map +0 -1
- package/lib/plugins/server-side/cache.d.ts.map +0 -1
- package/lib/plugins/server-side/datasource.d.ts.map +0 -1
- package/lib/plugins/server-side/index.d.ts.map +0 -1
- package/lib/plugins/server-side/types.d.ts.map +0 -1
- package/lib/plugins/shared/data-collection.d.ts.map +0 -1
- package/lib/plugins/tree/TreePlugin.d.ts.map +0 -1
- package/lib/plugins/tree/index.d.ts.map +0 -1
- package/lib/plugins/tree/tree-data.d.ts.map +0 -1
- package/lib/plugins/tree/tree-detect.d.ts.map +0 -1
- package/lib/plugins/tree/types.d.ts.map +0 -1
- package/lib/plugins/undo-redo/UndoRedoPlugin.d.ts.map +0 -1
- package/lib/plugins/undo-redo/history.d.ts.map +0 -1
- package/lib/plugins/undo-redo/index.d.ts.map +0 -1
- package/lib/plugins/undo-redo/types.d.ts.map +0 -1
- package/lib/plugins/visibility/VisibilityPlugin.d.ts.map +0 -1
- package/lib/plugins/visibility/index.d.ts.map +0 -1
- package/lib/plugins/visibility/types.d.ts.map +0 -1
- package/lib/plugins/visibility/visibility.d.ts.map +0 -1
- package/public.d.ts.map +0 -1
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e={STRETCH:"stretch",FIXED:"fixed"},t={mode:"reduced-motion",duration:200,easing:"ease-out"},i='<svg viewBox="0 0 16 16" width="12" height="12"><path fill="currentColor" d="M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>',o={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:i,filterActive:i,print:"🖨️"};function n(e,t){if(!(e&&e.length||t&&t.length))return[];if(!e||!e.length)return t||[];if(!t||!t.length)return e;const i={};t.forEach(e=>{const t=i[e.field];if(t){e.header&&!t.header&&(t.header=e.header),e.type&&!t.type&&(t.type=e.type),e.sortable&&(t.sortable=!0),e.editable&&(t.editable=!0),e.resizable&&(t.resizable=!0),null!=e.width&&null==t.width&&(t.width=e.width),null!=e.minWidth&&null==t.minWidth&&(t.minWidth=e.minWidth),e.__viewTemplate&&(t.__viewTemplate=e.__viewTemplate),e.__editorTemplate&&(t.__editorTemplate=e.__editorTemplate),e.__headerTemplate&&(t.__headerTemplate=e.__headerTemplate);const i=e.renderer||e.viewRenderer,o=t.renderer||t.viewRenderer;i&&!o&&(t.viewRenderer=i,e.renderer&&(t.renderer=i)),e.editor&&!t.editor&&(t.editor=e.editor)}else i[e.field]={...e}});const o=e.map(e=>{const t=i[e.field];if(!t)return e;const o={...e};t.header&&!o.header&&(o.header=t.header),t.type&&!o.type&&(o.type=t.type),o.sortable=e.sortable||t.sortable,!0!==e.resizable&&!0!==t.resizable||(o.resizable=!0),o.editable=e.editable||t.editable,null!=t.width&&null==o.width&&(o.width=t.width),null!=t.minWidth&&null==o.minWidth&&(o.minWidth=t.minWidth),t.__viewTemplate&&(o.__viewTemplate=t.__viewTemplate),t.__editorTemplate&&(o.__editorTemplate=t.__editorTemplate),t.__headerTemplate&&(o.__headerTemplate=t.__headerTemplate);const n=t.renderer||t.viewRenderer,r=o.renderer||o.viewRenderer;return n&&!r&&(o.viewRenderer=n,t.renderer&&(o.renderer=n)),t.editor&&!o.editor&&(o.editor=t.editor),delete i[e.field],o});return Object.keys(i).forEach(e=>o.push(i[e])),o}function r(e,t){try{e.part?.add?.(t)}catch{}const i=e.getAttribute("part");i?i.split(/\s+/).includes(t)||e.setAttribute("part",i+" "+t):e.setAttribute("part",t)}function s(t){const i=t.effectiveConfig?.fitMode||t.fitMode||e.STRETCH;if(i!==e.STRETCH&&i!==e.FIXED)return;if(t.__didInitialAutoSize)return;if(!t.isConnected)return;const o=Array.from(t._headerRowEl?.children||[]);if(!o.length)return;let n=!1;t._visibleColumns.forEach((e,i)=>{if(e.width)return;const r=o[i];let s=r?r.scrollWidth:0;for(const o of t._rowPool){const e=o.children[i];if(e){const t=e.scrollWidth;t>s&&(s=t)}}s>0&&(e.width=s+2,e.__autoSized=!0,n=!0)}),n&&c(t),t.__didInitialAutoSize=!0}const l=/^(?:\d+(?:\.\d+)?(?:px|%|fr|em|rem|ch|vw|vh|vmin|vmax)|calc\(.+\)|min-content|max-content|minmax\(.+\)|fit-content\(.+\)|auto)$/i;function a(e,t){return"number"==typeof e?`${e}px`:(l.test(e)||console.warn(`[tbw-grid] Column '${t??"?"}' has an invalid CSS width value: '${e}'. Expected a number (px) or a valid CSS unit string (e.g. '30%', '2fr', 'calc(...)').`),e)}function c(t){const i=t.effectiveConfig?.fitMode||t.fitMode||e.STRETCH;t._gridTemplate=i===e.STRETCH?t._visibleColumns.map(e=>{if(null!=e.width)return a(e.width,e.field);const t=e.minWidth;return null!=t?`minmax(${t}px, 1fr)`:"1fr"}).join(" ").trim():t._visibleColumns.map(e=>null!=e.width?a(e.width,e.field):"max-content").join(" "),t.style.setProperty("--tbw-column-template",t._gridTemplate)}function d(e,t){const i=e[0]||{},o=Object.keys(i).map(e=>{const t=i[e],o=null==(n=t)?"string":"number"==typeof n?"number":"boolean"==typeof n?"boolean":n instanceof Date||"string"==typeof n&&/\d{4}-\d{2}-\d{2}/.test(n)&&!isNaN(Date.parse(n))?"date":"string";var n;return{field:e,header:e.charAt(0).toUpperCase()+e.slice(1),type:o}}),n={};return o.forEach(e=>{n[e.field]=e.type||"string"}),{columns:o,typeMap:n}}const h=/{{\s*([^}]+)\s*}}/g,u="__DG_EMPTY__",g=/^[\w$. '?+\-*/%:()!<>=,&|]+$/,f=/__(proto|defineGetter|defineSetter)|constructor|window|globalThis|global|process|Function|import|eval|Reflect|Proxy|Error|arguments|document|location|cookie|localStorage|sessionStorage|indexedDB|fetch|XMLHttpRequest|WebSocket|Worker|SharedWorker|ServiceWorker|opener|parent|top|frames|self|this\b/;const p=/* @__PURE__ */new Set(["script","iframe","object","embed","form","input","button","textarea","select","link","meta","base","style","template","slot","portal","frame","frameset","applet","noscript","noembed","plaintext","xmp","listing"]),w=/^on\w+$/i,b=/* @__PURE__ */new Set(["href","src","action","formaction","data","srcdoc","xlink:href","poster","srcset"]),m=/^\s*(javascript|vbscript|data|blob):/i;function v(e){if(!e||"string"!=typeof e)return"";if(-1===e.indexOf("<"))return e;const t=document.createElement("template");return t.innerHTML=e,function(e){const t=[],i=e.querySelectorAll("*");for(const o of i){const e=o.tagName.toLowerCase();if(p.has(e)){t.push(o);continue}if("svg"===e||"http://www.w3.org/2000/svg"===o.namespaceURI){if(Array.from(o.attributes).some(e=>w.test(e.name)||"href"===e.name||"xlink:href"===e.name)){t.push(o);continue}}const i=[];for(const t of o.attributes){const e=t.name.toLowerCase();w.test(e)?i.push(t.name):(b.has(e)&&m.test(t.value)||"style"===e&&/expression\s*\(|javascript:|behavior\s*:/i.test(t.value))&&i.push(t.name)}i.forEach(e=>o.removeAttribute(e))}t.forEach(e=>e.remove())}(t.content),t.innerHTML}function C(e,t){if(!e||-1===e.indexOf("{{"))return e;const i=[],o=e.replace(h,(e,o)=>{const n=function(e,t){if(e=(e||"").trim(),!e)return u;if(y.test(e))return u;if("value"===e)return null==t.value?u:String(t.value);if(e.startsWith("row.")&&!/[()?]/.test(e)&&!e.includes(":")){const i=e.slice(4),o=t.row?t.row[i]:void 0;return null==o?u:String(o)}if(e.length>80)return u;if(!g.test(e)||f.test(e))return u;const i=e.match(/\./g);if(i&&i.length>1)return u;try{const i=new Function("value","row",`return (${e});`)(t.value,t.row),o=null==i?"":String(i);return y.test(o)?u:o||u}catch{return u}}(o,t);return i.push({expr:o.trim(),result:n}),n}),n=(r=o)?r.replace(new RegExp(u,"g"),"").replace(/Reflect\.[^<>{}\s]+|\bProxy\b|ownKeys\([^)]*\)/g,""):r;var r;const s=i.length&&i.every(e=>""===e.result||e.result===u);return y.test(e)||s?"":n}const y=/Reflect|Proxy|ownKeys/;function _(e){if(y.test(e.textContent||"")){for(const t of e.childNodes)t.nodeType===Node.TEXT_NODE&&y.test(t.textContent||"")&&(t.textContent="");y.test(e.textContent||"")&&(e.textContent="")}}function S(e){const t=y.test(e),i=i=>{if(t)return"";return C(e,i)};return i.__blocked=t,i}class R{#e;#t;#i;#o;#n;#r={};#s={};#l=!0;#a=[];#c;#d;#h;#u;#g;constructor(e){this.#u=e}get original(){return this.#r}get effective(){return this.#s}get columns(){return this.#s.columns??[]}set columns(e){this.#s.columns=e}get lightDomColumnsCache(){return this.#o}set lightDomColumnsCache(e){this.#o=e}get originalColumnNodes(){return this.#n}set originalColumnNodes(e){this.#n=e}get lightDomTitle(){return this.#g}set lightDomTitle(e){this.#g=e}get initialColumnState(){return this.#h}set initialColumnState(e){this.#h=e}get sourcesChanged(){return this.#l}markSourcesChanged(){this.#l=!0}setGridConfig(e){this.#e=e,this.#l=!0,this.#o=void 0}getGridConfig(){return this.#e}setColumns(e){this.#t=e,this.#l=!0}getColumns(){return this.#t}setFitMode(e){this.#i=e,this.#l=!0}getFitMode(){return this.#i}merge(){const e=(this.#s.columns?.length??0)>0;if(!this.#l&&e)return;const t=this.#f();this.#l=!1,this.#r=t,Object.freeze(this.#r),this.#r.columns&&Object.freeze(this.#r.columns),this.#s=this.#p(this.#r),this.#w()}#p(e){const t={...e};return e.columns&&(t.columns=e.columns.map(e=>({...e}))),e.shell&&(t.shell={...e.shell,header:e.shell.header?{...e.shell.header}:void 0,toolPanel:e.shell.toolPanel?{...e.shell.toolPanel}:void 0,toolPanels:e.shell.toolPanels?.map(e=>({...e})),headerContents:e.shell.headerContents?.map(e=>({...e}))}),t}#w(){const e=this.#s;if(this.#b(),"number"==typeof e.rowHeight&&e.rowHeight>0&&this.#u.setRowHeight(e.rowHeight),"fixed"===e.fitMode){this.columns.forEach(e=>{null==e.width&&(e.width=80)})}this.#u.applyAnimationConfig(e)}#b(){const e=this.#s.typeDefaults;if(!e)return;const t=this.columns;for(const i of t){if(!i.type)continue;const t=e[i.type];t&&(i.renderer||i.viewRenderer||!t.renderer||(i.renderer=t.renderer),!i.format&&t.format&&(i.format=t.format),!i.editor&&t.editor&&(i.editor=t.editor),!i.editorParams&&t.editorParams&&(i.editorParams=t.editorParams))}}#f(){const e=this.#e?{...this.#e}:{},t=Array.isArray(e.columns)?[...e.columns]:[],i=(this.#o??[]).map(e=>({...e}));let o=n(t,i);this.#t&&this.#t.length&&(o=n(this.#t,i));const r=this.#u.getRows();if(0===o.length&&r.length){o=d(r).columns}return o.length&&(o.forEach(e=>{void 0===e.sortable&&(e.sortable=!0),void 0===e.resizable&&(e.resizable=!0),void 0===e.__originalWidth&&"number"==typeof e.width&&(e.__originalWidth=e.width)}),o.forEach(e=>{e.__viewTemplate&&!e.__compiledView&&(e.__compiledView=S(e.__viewTemplate.innerHTML)),e.__editorTemplate&&!e.__compiledEditor&&(e.__compiledEditor=S(e.__editorTemplate.innerHTML))}),e.columns=o),this.#i&&(e.fitMode=this.#i),e.fitMode||(e.fitMode="stretch"),this.#m(e),e.columnState&&!this.#h&&(this.#h=e.columnState),e}#m(e){e.shell=e.shell?{...e.shell}:{},e.shell.header=e.shell.header?{...e.shell.header}:{};const t=this.#u.getShellLightDomTitle();t&&(this.#g=t),this.#g&&!e.shell.header.title&&(e.shell.header.title=this.#g);const i=this.#u.getShellLightDomHeaderContent();i?.length>0&&(e.shell.header.lightDomContent=i),this.#u.getShellHasToolButtonsContainer()&&(e.shell.header.hasToolButtonsContainer=!0);const o=this.#u.getShellToolPanels();if(o.size>0){const t=Array.from(o.values());t.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.toolPanels=t}const n=this.#u.getShellHeaderContents();if(n.size>0){const t=Array.from(n.values());t.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.headerContents=t}const r=this.#u.getShellToolbarContents(),s=Array.from(r.values()),l=this.#e?.shell?.header?.toolbarContents??[],a=new Set(l.map(e=>e.id)),c=[...l];for(const d of s)a.has(d.id)||c.push(d);c.sort((e,t)=>(e.order??0)-(t.order??0)),e.shell.header.toolbarContents=c}collectState(e){const t=this.columns,i=this.#v();return{columns:t.map((t,o)=>{const n={field:t.field,order:o,visible:!t.hidden},r=t;void 0!==r.__renderedWidth?n.width=r.__renderedWidth:void 0!==t.width&&(n.width="string"==typeof t.width?parseFloat(t.width):t.width);const s=i.get(t.field);s&&(n.sort=s);for(const i of e)if(i.getColumnState){const e=i.getColumnState(t.field);e&&Object.assign(n,e)}return n})}}applyState(e,t){if(!e.columns||0===e.columns.length)return;const i=this.columns,o=new Map(e.columns.map(e=>[e.field,e])),n=i.map(e=>{const t=o.get(e.field);if(!t)return e;const i={...e};return void 0!==t.width&&(i.width=t.width,i.__renderedWidth=t.width),void 0!==t.visible&&(i.hidden=!t.visible),i});n.sort((e,t)=>(o.get(e.field)?.order??1/0)-(o.get(t.field)?.order??1/0)),this.columns=n;const r=e.columns.filter(e=>void 0!==e.sort).sort((e,t)=>(e.sort?.priority??0)-(t.sort?.priority??0));if(r.length>0){const e=r[0];e.sort&&this.#u.setSortState({field:e.field,direction:"asc"===e.sort.direction?1:-1})}else this.#u.setSortState(null);for(const s of t)if(s.applyColumnState)for(const t of e.columns)s.applyColumnState(t.field,t)}resetState(e){this.#h=void 0,this.#u.setSortState(null),this.#s=this.#p(this.#r),this.#w();for(const t of e)if(t.applyColumnState)for(const e of this.columns)t.applyColumnState(e.field,{field:e.field,order:0,visible:!0});this.requestStateChange(e)}#v(){const e=/* @__PURE__ */new Map,t=this.#u.getSortState();return t&&e.set(t.field,{direction:1===t.direction?"asc":"desc",priority:0}),e}requestStateChange(e){this.#d&&clearTimeout(this.#d),this.#d=setTimeout(()=>{this.#d=void 0;const t=this.collectState(e);this.#u.emit("column-state-change",t)},100)}setColumnVisible(e,t){const i=this.columns,o=i.find(t=>t.field===e);if(!o)return!1;if(!t&&o.lockVisible)return!1;if(!t){if(0===i.filter(t=>!t.hidden&&t.field!==e).length)return!1}return!!o.hidden!=!t&&(o.hidden=!t,this.#u.emit("column-visibility",{field:e,visible:t,visibleColumns:i.filter(e=>!e.hidden).map(e=>e.field)}),this.#u.clearRowPool(),this.#u.setup(),!0)}toggleColumnVisibility(e){const t=this.columns.find(t=>t.field===e);return!!t&&this.setColumnVisible(e,!!t.hidden)}isColumnVisible(e){const t=this.columns.find(t=>t.field===e);return!!t&&!t.hidden}showAllColumns(){const e=this.columns;e.some(e=>e.hidden)&&(e.forEach(e=>e.hidden=!1),this.#u.emit("column-visibility",{visibleColumns:e.map(e=>e.field)}),this.#u.clearRowPool(),this.#u.setup())}getAllColumns(){return this.columns.map(e=>({field:e.field,header:e.header||e.field,visible:!e.hidden,lockVisible:e.lockVisible,utility:!0===e.meta?.utility}))}getColumnOrder(){return this.columns.map(e=>e.field)}setColumnOrder(e){if(!e.length)return;const t=new Map(this.columns.map(e=>[e.field,e])),i=[];for(const o of e){const e=t.get(o);e&&(i.push(e),t.delete(o))}for(const o of t.values())i.push(o);this.columns=i,this.#u.renderHeader(),this.#u.updateTemplate(),this.#u.refreshVirtualWindow()}parseLightDomColumns(e){this.#o||(this.#n=Array.from(e.querySelectorAll("tbw-grid-column")),this.#o=this.#n.length?function(e){return Array.from(e.querySelectorAll("tbw-grid-column")).map(e=>{const t=e.getAttribute("field")||"";if(!t)return null;const i=e.getAttribute("type")||void 0,o={field:t,type:i&&/* @__PURE__ */new Set(["number","string","date","boolean","select"]).has(i)?i:void 0,header:e.getAttribute("header")||void 0,sortable:e.hasAttribute("sortable"),editable:e.hasAttribute("editable")},n=e.getAttribute("width");if(n){const e=parseFloat(n);!isNaN(e)&&/^\d+(\.\d+)?$/.test(n.trim())?o.width=e:o.width=n}const r=e.getAttribute("minWidth")||e.getAttribute("min-width");if(r){const e=parseFloat(r);isNaN(e)||(o.minWidth=e)}e.hasAttribute("resizable")&&(o.resizable=!0),e.hasAttribute("sizable")&&(o.resizable=!0);const s=e.getAttribute("editor"),l=e.getAttribute("renderer");s&&(o.__editorName=s),l&&(o.__rendererName=l);const a=e.getAttribute("options");a&&(o.options=a.split(",").map(e=>{const[t,i]=e.includes(":")?e.split(":"):[e.trim(),e.trim()];return{value:t.trim(),label:i?.trim()||t.trim()}}));const c=e.querySelector("tbw-grid-column-view"),d=e.querySelector("tbw-grid-column-editor"),h=e.querySelector("tbw-grid-column-header");c&&(o.__viewTemplate=c),d&&(o.__editorTemplate=d),h&&(o.__headerTemplate=h);const u=globalThis.DataGridElement,g=u?.getAdapters?.()??[],f=c??e,p=g.find(e=>e.canHandle(f));if(p){const e=p.createRenderer(f);e&&(o.viewRenderer=e)}const w=d??e,b=g.find(e=>e.canHandle(w));if(b){const e=b.createEditor(w);e&&(o.editor=e)}return o}).filter(e=>!!e)}(e):[])}clearLightDomCache(){this.#o=void 0}#C=/* @__PURE__ */new Map;registerLightDomHandler(e,t){this.#C.set(e.toLowerCase(),t)}unregisterLightDomHandler(e){this.#C.delete(e.toLowerCase())}observeLightDOM(e){this.#c&&this.#c.disconnect();const t=/* @__PURE__ */new Set;let i=null;const o=()=>{i=null;for(const e of t){const t=this.#C.get(e);t?.()}t.clear()};this.#c=new MutationObserver(e=>{for(const i of e){for(const e of i.addedNodes){if(e.nodeType!==Node.ELEMENT_NODE)continue;const i=e.tagName.toLowerCase();this.#C.has(i)&&t.add(i)}if("attributes"===i.type&&i.target.nodeType===Node.ELEMENT_NODE){const e=i.target.tagName.toLowerCase();this.#C.has(e)&&t.add(e)}}t.size>0&&!i&&(i=setTimeout(o,0))}),this.#c.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["title","field","header","width","hidden","id","icon","tooltip","order"]})}onChange(e){this.#a.push(e)}notifyChange(){for(const e of this.#a)e()}dispose(){this.#c?.disconnect(),this.#a=[],this.#d&&clearTimeout(this.#d)}}function E(){if("undefined"!=typeof window&&window.location){const e=window.location.hostname;if("localhost"===e||"127.0.0.1"===e||"::1"===e)return!0}return"undefined"!=typeof process&&"production"!==process.env?.NODE_ENV}function x(e){return`<span role="checkbox" aria-checked="${e}" aria-label="${e}">${e?"🗹":"☐"}</span>`}function A(e){if(null==e||""===e)return"";if(e instanceof Date)return isNaN(e.getTime())?"":e.toLocaleDateString();if("number"==typeof e||"string"==typeof e){const t=new Date(e);return isNaN(t.getTime())?"":t.toLocaleDateString()}return""}function T(e){if(!e)return-1;const t=e.getAttribute("data-row");if(t)return parseInt(t,10);const i=e.closest(".data-grid-row");if(!i)return-1;const o=i.parentElement;if(!o)return-1;const n=o.querySelectorAll(":scope > .data-grid-row");for(let r=0;r<n.length;r++)if(n[r]===i)return r;return-1}function H(e){e&&e.querySelectorAll(".cell-focus").forEach(e=>e.classList.remove("cell-focus"))}function M(e){try{if("rtl"===getComputedStyle(e).direction)return"rtl"}catch{}try{const t=e.closest?.("[dir]")?.getAttribute("dir");if("rtl"===t)return"rtl"}catch{}return"ltr"}function P(e){return"rtl"===M(e)}function L(e,t){return"left"===e||"right"===e?e:"rtl"===t?"start"===e?"right":"left":"start"===e?"left":"right"}function z(e,t){const i=t.renderer||t.viewRenderer;if(i)return i;if(!t.type)return;const o=e.__frameworkAdapter;if(o?.getTypeDefault){const e=o.getTypeDefault(t.type);if(e?.renderer)return e.renderer}}function k(e,t){if(t.format)return t.format;if(!t.type)return;const i=e.__frameworkAdapter;if(i?.getTypeDefault){const e=i.getTypeDefault(t.type);if(e?.format)return e.format}}const O='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])';function D(e){return(e.__editingCellCount??0)>0}function I(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing");e.querySelectorAll(".cell.editing").forEach(e=>e.classList.remove("editing"))}const N=document.createElement("template");N.innerHTML='<div class="cell" role="gridcell" part="cell"></div>';const q=document.createElement("template");function $(){return N.content.firstElementChild.cloneNode(!0)}function W(){return q.content.firstElementChild.cloneNode(!0)}function F(e){e.__cellDisplayCache=void 0,e.__cellCacheEpoch=void 0,e.__hasSpecialColumns=void 0}function U(e,t,i,o){const n=t.children,r=e._visibleColumns,s=r.length,l=n.length,a=s<l?s:l,c=e._focusRow,d=e._focusCol,h=e._hasAfterCellRenderHook?.()??!1;let u=e.__hasSpecialColumns;if(void 0===u){u=!1;const t=e.__frameworkAdapter;for(let e=0;e<s;e++){const i=r[e];if(i.__viewTemplate||i.__compiledView||i.renderer||i.viewRenderer||i.externalView||i.format||"date"===i.type||"boolean"===i.type||i.type&&t?.getTypeDefault?.(i.type)?.renderer||i.type&&t?.getTypeDefault?.(i.type)?.format){u=!0;break}}e.__hasSpecialColumns=u}const g=String(o);if(u){for(let s=0;s<a;s++){if(r[s].externalView){if(!n[s].querySelector("[data-external-view]"))return void V(e,t,i,o)}}for(let s=0;s<a;s++){const l=r[s],a=n[s];a.getAttribute("data-row")!==g&&a.setAttribute("data-row",g);const u=a.classList.contains("editing");if(!u){const e=c===o&&d===s;e!==a.classList.contains("cell-focus")&&(a.classList.toggle("cell-focus",e),a.setAttribute("aria-selected",String(e)))}const p=l.cellClass;if(p){const e=a.getAttribute("data-dynamic-classes");e&&e.split(" ").forEach(e=>e&&a.classList.remove(e));try{const e=p(i[l.field],i,l);if(e&&e.length>0){const t=e.filter(e=>e&&"string"==typeof e);t.forEach(e=>a.classList.add(e)),a.setAttribute("data-dynamic-classes",t.join(" "))}else a.removeAttribute("data-dynamic-classes")}catch(f){console.warn(`[tbw-grid] cellClass callback error for column '${l.field}':`,f),a.removeAttribute("data-dynamic-classes")}}if(u)continue;const w=z(e,l);if(w){const n=i[l.field],r=w({row:i,value:n,field:l.field,column:l,cellEl:a});"string"==typeof r?(e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=v(r)):r instanceof Node?r.parentElement!==a&&(e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML="",a.appendChild(r)):null==r&&(e.__frameworkAdapter?.releaseCell?.(a),a.textContent=null==n?"":String(n)),h&&e._afterCellRender?.({row:i,rowIndex:o,column:l,colIndex:s,value:n,cellElement:a,rowElement:t});continue}if(l.__compiledView){const n=i[l.field],r=l.__compiledView({row:i,value:n,field:l.field,column:l});l.__compiledView.__blocked?a.textContent="":(a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=v(r),_(a)),h&&e._afterCellRender?.({row:i,rowIndex:o,column:l,colIndex:s,value:n,cellElement:a,rowElement:t});continue}if(l.__viewTemplate){const n=i[l.field],r=l.__viewTemplate.innerHTML;/Reflect\.|\bProxy\b|ownKeys\(/.test(r)?a.textContent="":(a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=v(C(r,{row:i,value:n})),_(a)),h&&e._afterCellRender?.({row:i,rowIndex:o,column:l,colIndex:s,value:n,cellElement:a,rowElement:t});continue}if(l.externalView)continue;const b=i[l.field];let m;const y=k(e,l);if(y){try{const e=y(b,i);m=null==e?"":String(e)}catch(f){console.warn(`[tbw-grid] Format error in column '${l.field}':`,f),m=null==b?"":String(b)}a.textContent=m}else"date"===l.type?(m=A(b),a.textContent=m):"boolean"===l.type?a.innerHTML=x(!!b):(m=null==b?"":String(b),a.textContent=m);h&&e._afterCellRender?.({row:i,rowIndex:o,column:l,colIndex:s,value:b,cellElement:a,rowElement:t})}}else for(let p=0;p<a;p++){const s=n[p];if(s.classList.contains("editing"))continue;s.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(s);const l=r[p],a=i[l.field];s.textContent=null==a?"":String(a),s.getAttribute("data-row")!==g&&s.setAttribute("data-row",g);const u=c===o&&d===p;u!==s.classList.contains("cell-focus")&&(s.classList.toggle("cell-focus",u),s.setAttribute("aria-selected",String(u))),h&&e._afterCellRender?.({row:i,rowIndex:o,column:l,colIndex:p,value:a,cellElement:s,rowElement:t})}}function V(e,t,i,o){t.classList.remove("tbw-row-loading"),t.removeAttribute("aria-busy");const n=e.__frameworkAdapter;if(n?.releaseCell){const e=t.children;for(let t=e.length-1;t>=0;t--)n.releaseCell(e[t])}t.innerHTML="";const r=e._visibleColumns,s=r.length,l=e._focusRow,a=e._focusCol,c=e,d=e._hasAfterCellRenderHook?.()??!1,h=document.createDocumentFragment();for(let g=0;g<s;g++){const n=r[g],s=$();s.setAttribute("aria-colindex",String(g+1)),s.setAttribute("data-col",String(g)),s.setAttribute("data-row",String(o)),s.setAttribute("data-field",n.field),s.setAttribute("data-header",n.header??n.field),n.type&&s.setAttribute("data-type",n.type);let f=i[n.field];const p=k(e,n);if(p)try{f=p(f,i)}catch(u){console.warn(`[tbw-grid] Format error in column '${n.field}':`,u)}const w=n.__compiledView,b=n.__viewTemplate,m=z(e,n),y=n.externalView;let S=!1;if(m){const e=m({row:i,value:f,field:n.field,column:n,cellEl:s});"string"==typeof e?(s.innerHTML=v(e),S=!0):e instanceof Node?e.parentElement!==s&&(s.textContent="",s.appendChild(e)):null==e&&(s.textContent=null==f?"":String(f))}else if(y){const e=y,t=document.createElement("div");t.setAttribute("data-external-view",""),t.setAttribute("data-field",n.field),s.appendChild(t);const o={row:i,value:f,field:n.field,column:n};if(e.mount)try{e.mount({placeholder:t,context:o,spec:e})}catch(u){console.warn(`[tbw-grid] External view mount error for column '${n.field}':`,u)}else queueMicrotask(()=>{try{c.dispatchEvent(new CustomEvent("mount-external-view",{bubbles:!0,composed:!0,detail:{placeholder:t,spec:e,context:o}}))}catch(u){console.warn(`[tbw-grid] External view event dispatch error for column '${n.field}':`,u)}});t.setAttribute("data-mounted","")}else if(w){const e=w({row:i,value:f,field:n.field,column:n}),t=w.__blocked;s.innerHTML=t?"":v(e),S=!0,t&&(s.textContent="",s.setAttribute("data-blocked-template",""))}else if(b){const e=b.innerHTML;/Reflect\.|\bProxy\b|ownKeys\(/.test(e)?(s.textContent="",s.setAttribute("data-blocked-template","")):(s.innerHTML=v(C(e,{row:i,value:f})),S=!0)}else p?s.textContent=null==f?"":String(f):"date"===n.type?s.textContent=A(f):"boolean"===n.type?s.innerHTML=x(!!f):s.textContent=null==f?"":String(f);if(S){_(s);const e=s.textContent||"";/Proxy|Reflect\.ownKeys/.test(e)&&(s.textContent=e.replace(/Proxy|Reflect\.ownKeys/g,"").trim(),/Proxy|Reflect\.ownKeys/.test(s.textContent||"")&&(s.textContent=""))}s.hasAttribute("data-blocked-template")&&(s.textContent||"").trim().length&&(s.textContent=""),n.editable?s.tabIndex=0:"boolean"===n.type&&(s.hasAttribute("tabindex")||(s.tabIndex=0)),l===o&&a===g?(s.classList.add("cell-focus"),s.setAttribute("aria-selected","true")):s.setAttribute("aria-selected","false");const R=n.cellClass;if(R)try{const e=R(i[n.field],i,n);if(e&&e.length>0){const t=e.filter(e=>e&&"string"==typeof e);t.forEach(e=>s.classList.add(e)),s.setAttribute("data-dynamic-classes",t.join(" "))}}catch(u){console.warn(`[tbw-grid] cellClass callback error for column '${n.field}':`,u)}d&&e._afterCellRender?.({row:i,rowIndex:o,column:n,colIndex:g,value:f,cellElement:s,rowElement:t}),h.appendChild(s)}t.appendChild(h)}function B(e,t,i){if(t.target?.closest(".resize-handle"))return;const o=T(i.querySelector(".cell[data-row]"));if(o<0)return;const n=e._rows[o];if(!n)return;if(e._dispatchRowClick?.(t,o,n,i))return;const r=t.target?.closest(".cell[data-col]");if(r){const i=Number(r.getAttribute("data-col"));if(!isNaN(i)){if(e._dispatchCellClick?.(t,o,i,r))return;const n=e._focusRow!==o||e._focusCol!==i;if(e._focusRow=o,e._focusCol=i,r.classList.contains("editing")){n&&(H(e._bodyEl??e),r.classList.add("cell-focus"));const t=r.querySelector(O);try{t?.focus({preventScroll:!0})}catch{}return}G(e)}}}function G(e,t){if(e._virtualization?.enabled){const{rowHeight:t,container:i,viewportEl:o}=e._virtualization,n=i,r=o?.clientHeight??n?.clientHeight??0;if(n&&r>0){const i=e._focusRow*t;i<n.scrollTop?n.scrollTop=i:i+t>n.scrollTop+r&&(n.scrollTop=i-r+t)}}const i=void 0!==e._activeEditRows&&-1!==e._activeEditRows||!!e._isGridEditMode;i||e.refreshVirtualWindow(!1),H(e._bodyEl),Array.from(e._bodyEl.querySelectorAll('[aria-selected="true"]')).forEach(e=>{e.setAttribute("aria-selected","false")});const o=e._focusRow,n=e._virtualization.start??0,r=e._virtualization.end??e._rows.length;if(o>=n&&o<r){const r=e._bodyEl.querySelectorAll(".data-grid-row")[o-n];let s=r?.children[e._focusCol];if(s&&s.classList?.contains("cell")||(s=r?.querySelector(`.cell[data-col="${e._focusCol}"]`)??r?.querySelector(".cell[data-col]")),s){s.classList.add("cell-focus"),s.setAttribute("aria-selected","true");const o=e.querySelector(".tbw-scroll-area");if(o&&s&&(!i||t?.forceHorizontalScroll))if(t?.forceScrollLeft)o.scrollLeft=0;else if(t?.forceScrollRight)o.scrollLeft=o.scrollWidth-o.clientWidth;else{const t=e._getHorizontalScrollOffsets?.(r??void 0,s)??{left:0,right:0};if(!t.skipScroll){const e=s.getBoundingClientRect(),i=o.getBoundingClientRect(),n=e.left-i.left+o.scrollLeft,r=n+e.width,l=o.scrollLeft+t.left,a=o.scrollLeft+o.clientWidth-t.right;n<l?o.scrollLeft=n-t.left:r>a&&(o.scrollLeft=r-o.clientWidth+t.right)}}if(i&&s.classList.contains("editing")){const e=s.querySelector(O);if(e&&document.activeElement!==e)try{e.focus({preventScroll:!0})}catch{}}else if(i&&!s.contains(document.activeElement)){s.hasAttribute("tabindex")||s.setAttribute("tabindex","-1");try{s.focus({preventScroll:!0})}catch{}}else if(!i){const t=e;document.activeElement!==t&&t.focus({preventScroll:!0})}}}}q.innerHTML='<div class="data-grid-row" role="row" part="row"></div>';const X=/* @__PURE__ */new WeakMap;function Y(e,t){const i=T(t),o=function(e){if(!e)return-1;const t=e.getAttribute("data-col");return t?parseInt(t,10):-1}(t);if(i<0||o<0)return;e._focusRow=i,e._focusCol=o,H(e._bodyEl),t.classList.add("cell-focus"),t.setAttribute("aria-selected","true");const n=t.closest("tbw-grid");n&&document.activeElement!==n&&n.focus({preventScroll:!0})}function j(e,t,i,o){let n=null;const r=i.composedPath?.();if(n=r&&r.length>0?r[0]:i.target,n&&!t.contains(n)){const e=document.elementFromPoint(i.clientX,i.clientY);e&&(n=e)}const s=n?.closest?.("[data-col]"),l=n?.closest?.(".data-grid-row"),a=n?.closest?.(".header-row");let c,d,h,u,g,f;return s&&(c=parseInt(s.getAttribute("data-row")??"-1",10),d=parseInt(s.getAttribute("data-col")??"-1",10),c>=0&&d>=0&&(h=e._rows[c],f=e._visibleColumns[d],u=f?.field,g=h&&u?h[u]:void 0)),{type:o,row:h,rowIndex:void 0!==c&&c>=0?c:void 0,colIndex:void 0!==d&&d>=0?d:void 0,field:u,value:g,column:f,originalEvent:i,cellElement:s??void 0,rowElement:l??void 0,isHeader:!!a,cell:void 0!==c&&void 0!==d&&c>=0&&d>=0?{row:c,col:d}:void 0}}function K(e,t,i,o){t.addEventListener("keydown",t=>function(e,t){if(e._dispatchKeyDown?.(t))return;const i=e._rows.length-1,o=e._visibleColumns.length-1,n=void 0!==e._activeEditRows&&-1!==e._activeEditRows,r=e._visibleColumns[e._focusCol],s=r?.type,l=t.composedPath?.()??[],a=l.length?l[0]:t.target,c=e=>{if(!e)return!1;const t=e.tagName;return"INPUT"===t||"SELECT"===t||"TEXTAREA"===t||!!e.isContentEditable};if((!c(a)||"Home"!==t.key&&"End"!==t.key)&&!(c(a)&&("ArrowUp"===t.key||"ArrowDown"===t.key)&&"INPUT"===a.tagName&&"number"===a.type||c(a)&&("ArrowLeft"===t.key||"ArrowRight"===t.key)||c(a)&&("Enter"===t.key||"Escape"===t.key)||n&&"select"===s&&("ArrowDown"===t.key||"ArrowUp"===t.key))){switch(t.key){case"Tab":return t.preventDefault(),t.shiftKey?e._focusCol>0?e._focusCol-=1:e._focusRow>0&&("function"==typeof e.commitActiveRowEdit&&e._activeEditRows===e._focusRow&&e.commitActiveRowEdit(),e._focusRow-=1,e._focusCol=o):e._focusCol<o?e._focusCol+=1:("function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow<i&&(e._focusRow+=1,e._focusCol=0)),void G(e);case"ArrowDown":n&&"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow=Math.min(i,e._focusRow+1),t.preventDefault();break;case"ArrowUp":n&&"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow=Math.max(0,e._focusRow-1),t.preventDefault();break;case"ArrowRight":{const i=P(e);e._focusCol=i?Math.max(0,e._focusCol-1):Math.min(o,e._focusCol+1),t.preventDefault();break}case"ArrowLeft":{const i=P(e);e._focusCol=i?Math.min(o,e._focusCol+1):Math.max(0,e._focusCol-1),t.preventDefault();break}case"Home":return t.ctrlKey||t.metaKey?(n&&"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow=0,e._focusCol=0):e._focusCol=0,t.preventDefault(),void G(e,{forceScrollLeft:!0});case"End":return t.ctrlKey||t.metaKey?(n&&"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow=i,e._focusCol=o):e._focusCol=o,t.preventDefault(),void G(e,{forceScrollRight:!0});case"PageDown":e._focusRow=Math.min(i,e._focusRow+20),t.preventDefault();break;case"PageUp":e._focusRow=Math.max(0,e._focusRow-20),t.preventDefault();break;case"Enter":{const i=e._focusRow,o=e._focusCol,n=e._visibleColumns[o],r=e._rows[i],s=n?.field??"",l=s&&r?r[s]:void 0,a=e.querySelector(`[data-row="${i}"][data-col="${o}"]`),c=new CustomEvent("cell-activate",{cancelable:!0,detail:{rowIndex:i,colIndex:o,column:n,field:s,value:l,row:r,cellEl:a,trigger:"keyboard",originalEvent:t}});e.dispatchEvent(c);const d=new CustomEvent("activate-cell",{cancelable:!0,detail:{row:i,col:o}});if(e.dispatchEvent(d),c.defaultPrevented||d.defaultPrevented)return void t.preventDefault();break}default:return}G(e)}}(e,t),{signal:o}),i.addEventListener("mousedown",t=>function(e,t,i){const o=j(e,t,i,"mousedown");e._dispatchCellMouseDown?.(o)&&X.set(e,!0)}(e,i,t),{signal:o}),document.addEventListener("mousemove",t=>function(e,t,i){if(!X.get(e))return;const o=j(e,t,i,"mousemove");e._dispatchCellMouseMove?.(o)}(e,i,t),{signal:o}),document.addEventListener("mouseup",t=>function(e,t,i){if(!X.get(e))return;const o=j(e,t,i,"mouseup");e._dispatchCellMouseUp?.(o),X.set(e,!1)}(e,i,t),{signal:o})}let Z;function Q(e){Z=e}function J(e,t){return null==e&&null==t?0:null==e?-1:null==t||e>t?1:e<t?-1:0}function ee(e,t,i){const o=i.find(e=>e.field===t.field),n=o?.sortComparator??J,{field:r,direction:s}=t;return[...e].sort((e,t)=>n(e[r],t[r],e,t)*s)}function te(e,t,i,o){e._rows=t,e.__rowRenderEpoch++,e._rowPool.forEach(e=>e.__epoch=-1),ce(e),e.refreshVirtualWindow(!0),e.dispatchEvent(new CustomEvent("sort-change",{detail:{field:i.field,direction:o}})),e.requestStateChange?.()}function ie(e,t){if(e._sortState&&e._sortState.field===t.field)if(1===e._sortState.direction)oe(e,t,-1);else{e._sortState=null,e.__rowRenderEpoch++,e._rowPool.forEach(e=>e.__epoch=-1),e._rows=e.__originalOrder.slice(),ce(e);const i=e._headerRowEl?.querySelectorAll('[role="columnheader"].sortable');i?.forEach(t=>{t.getAttribute("aria-sort")&&("ascending"!==t.getAttribute("aria-sort")&&"descending"!==t.getAttribute("aria-sort")||e._sortState)||t.setAttribute("aria-sort","none")}),e.refreshVirtualWindow(!0),e.dispatchEvent(new CustomEvent("sort-change",{detail:{field:t.field,direction:0}})),e.requestStateChange?.()}else e._sortState||(e.__originalOrder=e._rows.slice()),oe(e,t,1)}function oe(e,t,i){e._sortState={field:t.field,direction:i};const o={field:t.field,direction:i},n=e._columns,r=(e.effectiveConfig?.sortHandler??ee)(e._rows,o,n);r&&"function"==typeof r.then?r.then(o=>{te(e,o,t,i)}):te(e,r,t,i)}function ne(e,t){return!1!==e.effectiveConfig?.sortable&&!0===t.sortable}function re(e,t){return!1!==e.effectiveConfig?.resizable&&!1!==t.resizable}function se(e,t){const i=document.createElement("span");r(i,"sort-indicator");const n=e._sortState?.field===t.field?e._sortState.direction:0,s={...o,...e.icons};return function(e,t){"string"==typeof t?e.textContent=t:t instanceof HTMLElement&&(e.innerHTML="",e.appendChild(t.cloneNode(!0)))}(i,1===n?s.sortAsc:-1===n?s.sortDesc:s.sortNone),i}function le(e,t,i){const o=document.createElement("div");return o.className="resize-handle",o.setAttribute("aria-hidden","true"),o.addEventListener("mousedown",o=>{o.stopPropagation(),o.preventDefault(),e._resizeController.start(o,t,i)}),o.addEventListener("dblclick",i=>{i.stopPropagation(),i.preventDefault(),e._resizeController.resetColumn(t)}),o}function ae(e,t,i,o){o.classList.add("sortable"),o.tabIndex=0;const n=e._sortState?.field===t.field?e._sortState.direction:0;o.setAttribute("aria-sort",0===n?"none":1===n?"ascending":"descending"),o.addEventListener("click",i=>{e._resizeController?.isResizing||e._dispatchHeaderClick?.(i,t,o)||ie(e,t)}),o.addEventListener("keydown",i=>{if("Enter"===i.key||" "===i.key){if(i.preventDefault(),e._dispatchHeaderClick?.(i,t,o))return;ie(e,t)}})}function ce(e){e._headerRowEl=e.findHeaderRow();const t=e._headerRowEl;t&&(t.innerHTML="",e._visibleColumns.forEach((i,o)=>{const n=document.createElement("div");n.className="cell",r(n,"header-cell"),n.setAttribute("role","columnheader"),n.setAttribute("aria-colindex",String(o+1)),n.setAttribute("data-field",i.field),n.setAttribute("data-col",String(o)),i.type&&n.setAttribute("data-type",i.type);const s=i.header??i.field,l=e._sortState?.field===i.field?e._sortState.direction:0,a=1===l?"asc":-1===l?"desc":null;if(i.headerRenderer){const t={column:i,value:s,sortState:a,filterActive:!1,cellEl:n,renderSortIcon:()=>ne(e,i)?se(e,i):null,renderFilterButton:()=>null},r=i.headerRenderer(t);!function(e,t){if(null!=t)if("string"==typeof t){const i=document.createElement("span");for(i.innerHTML=v(t);i.firstChild;)e.appendChild(i.firstChild)}else t instanceof Node&&e.appendChild(t)}(n,r),ne(e,i)&&ae(e,i,0,n),re(e,i)&&(n.classList.add("resizable"),n.appendChild(le(e,o,n)))}else if(i.headerLabelRenderer){const t={column:i,value:s},r=i.headerLabelRenderer(t),l=document.createElement("span");null==r?l.textContent=s:"string"==typeof r?l.innerHTML=v(r):r instanceof Node&&l.appendChild(r),n.appendChild(l),ne(e,i)&&(ae(e,i,0,n),n.appendChild(se(e,i))),re(e,i)&&(n.classList.add("resizable"),n.appendChild(le(e,o,n)))}else if(i.__headerTemplate)Array.from(i.__headerTemplate.childNodes).forEach(e=>n.appendChild(e.cloneNode(!0))),ne(e,i)&&(ae(e,i,0,n),n.appendChild(se(e,i))),re(e,i)&&(n.classList.add("resizable"),n.appendChild(le(e,o,n)));else{const t=document.createElement("span");t.textContent=s,n.appendChild(t),ne(e,i)&&(ae(e,i,0,n),n.appendChild(se(e,i))),re(e,i)&&(n.classList.add("resizable"),n.appendChild(le(e,o,n)))}t.appendChild(n)}),t.querySelectorAll(".cell.sortable").forEach(e=>{e.getAttribute("aria-sort")||e.setAttribute("aria-sort","none")}),t.children.length>0?(t.setAttribute("role","row"),t.setAttribute("aria-rowindex","1")):(t.removeAttribute("role"),t.removeAttribute("aria-rowindex")))}const de="function"==typeof requestIdleCallback;function he(e){de?cancelIdleCallback(e):clearTimeout(e)}function ue(e,t){if(t){const i=t({size:e});if("string"==typeof i){const e=document.createElement("div");return e.innerHTML=i,e}return i}return function(e){const t=document.createElement("div");return t.className=`tbw-spinner tbw-spinner--${e}`,t.setAttribute("role","progressbar"),t.setAttribute("aria-label","Loading"),t}(e)}var ge,fe=((ge=fe||{})[ge.STYLE=1]="STYLE",ge[ge.VIRTUALIZATION=2]="VIRTUALIZATION",ge[ge.HEADER=3]="HEADER",ge[ge.ROWS=4]="ROWS",ge[ge.COLUMNS=5]="COLUMNS",ge[ge.FULL=6]="FULL",ge);class pe{#u;#y=0;#_=0;#S=null;#R=null;#E=null;#x=!1;constructor(e){this.#u=e}requestPhase(e,t){e>this.#y&&(this.#y=e),0===this.#_&&(this.#A(),this.#_=requestAnimationFrame(()=>this.#T()))}whenReady(){return this.#S?this.#S:Promise.resolve()}setInitialReadyResolver(e){this.#E=e}cancel(){0!==this.#_&&(cancelAnimationFrame(this.#_),this.#_=0),this.#y=0,this.#R&&(this.#R(),this.#R=null,this.#S=null)}get isPending(){return 0!==this.#y}get pendingPhase(){return this.#y}#A(){this.#S||(this.#S=new Promise(e=>{this.#R=e}))}#T(){if(this.#_=0,!this.#u.isConnected())return this.#y=0,void(this.#R&&(this.#R(),this.#R=null,this.#S=null));const e=this.#y;this.#y=0,e>=5&&this.#u.mergeConfig(),e>=4&&this.#u.processRows(),e>=5&&(this.#u.processColumns(),this.#u.updateTemplate()),e>=3&&this.#u.renderHeader(),e>=2&&this.#u.renderVirtualWindow(),e>=1&&this.#u.afterRender(),!this.#x&&this.#E&&(this.#x=!0,this.#E()),this.#R&&(this.#R(),this.#R=null,this.#S=null)}}function we(e){let t=null,i=null,o=null,n=null;const r=o=>{if(!t)return;const n=o.clientX-t.startX,r=Math.max(40,t.startWidth+n),s=e._visibleColumns[t.colIndex];s.width=r,s.__userResized=!0,s.__renderedWidth=r,null==i&&(i=requestAnimationFrame(()=>{i=null,e.updateTemplate?.()})),e.dispatchEvent(new CustomEvent("column-resize",{detail:{field:s.field,width:r}}))};let s=!1;const l=()=>{const i=null!==t;i&&(s=!0,requestAnimationFrame(()=>{s=!1})),window.removeEventListener("mousemove",r),window.removeEventListener("mouseup",l),null!==o&&(document.documentElement.style.cursor=o,o=null),null!==n&&(document.body.style.userSelect=n,n=null),t=null,i&&e.requestStateChange&&e.requestStateChange()};return{get isResizing(){return null!==t||s},start(i,s,a){i.preventDefault();const c=e._visibleColumns[s],d="number"==typeof c?.width?c.width:void 0,h=c?.__renderedWidth??d??a.getBoundingClientRect().width;t={startX:i.clientX,colIndex:s,startWidth:h},window.addEventListener("mousemove",r),window.addEventListener("mouseup",l),null===o&&(o=document.documentElement.style.cursor),document.documentElement.style.cursor="e-resize",null===n&&(n=document.body.style.userSelect),document.body.style.userSelect="none"},resetColumn(t){const i=e._visibleColumns[t];i&&(i.__userResized=!1,i.__renderedWidth=void 0,i.width=i.__originalWidth,e.updateTemplate?.(),e.requestStateChange?.(),e.dispatchEvent(new CustomEvent("column-resize-reset",{detail:{field:i.field,width:i.width}})))},dispose(){l()}}}const be="data-animating",me={change:"--tbw-row-change-duration",insert:"--tbw-row-insert-duration",remove:"--tbw-row-remove-duration"},ve={change:500,insert:300,remove:200};function Ce(e,t){const i=me[t],o=getComputedStyle(e).getPropertyValue(i);if(o){const e=function(e){const t=e.trim().toLowerCase();return t.endsWith("ms")?parseFloat(t):t.endsWith("s")?1e3*parseFloat(t):parseFloat(t)}(o);if(!isNaN(e)&&e>0)return e}return ve[t]}function ye(e,t,i){if(t<0)return Promise.resolve(!1);const o=e.findRenderedRowElement?.(t);return o?new Promise(e=>{!function(e,t,i){e.removeAttribute(be),e.offsetWidth,e.setAttribute(be,t);const o=Ce(e,t);setTimeout(()=>{"remove"!==t&&e.removeAttribute(be),i?.()},o)}(o,i,()=>e(!0))}):Promise.resolve(!1)}function _e(e,t,i){const o=document.createElement(e);if(t)for(const n in t){const e=t[n];null!=e&&o.setAttribute(n,e)}return o}function Se(e,t){const i=document.createElement("div");if(e&&(i.className=e),t)for(const o in t){const e=t[o];null!=e&&i.setAttribute(o,e)}return i}function Re(e,t,i){const o=document.createElement("button");if(e&&(o.className=e),t)for(const n in t){const e=t[n];null!=e&&o.setAttribute(n,e)}return o}const Ee=document.createElement("template");function xe(){return Ee.content.cloneNode(!0)}function Ae(e){const t=document.createDocumentFragment(),i=Se(e.hasShell?"tbw-grid-root has-shell":"tbw-grid-root");if(e.hasShell&&e.shellHeader&&e.shellBody)i.appendChild(e.shellHeader),i.appendChild(e.shellBody);else{const e=Se("tbw-grid-content");e.appendChild(xe()),i.appendChild(e)}return t.appendChild(i),t}function Te(e){return e?"string"==typeof e?e:e.outerHTML:""}function He(e){return!!e?.header?.title||(!!e?.header?.toolbarContents?.length||(!!e?.toolPanels?.length||(!!e?.headerContents?.length||(!!e?.header?.lightDomContent?.length||!!e?.header?.hasToolButtonsContainer))))}function Me(e,t){const i=e.querySelector("tbw-grid-header");if(!i)return;if(!t.lightDomTitle){const e=i.getAttribute("title");e&&(t.lightDomTitle=e)}const o=i.querySelectorAll("tbw-grid-header-content");o.length>0&&0===t.lightDomHeaderContent.length&&(t.lightDomHeaderContent=Array.from(o)),i.style.display="none"}function Pe(e,t,i){const o=e.querySelector(":scope > tbw-grid-tool-buttons");if(!o)return;t.hasToolButtonsContainer=!0;const n="light-dom-toolbar-content";if(t.lightDomToolbarContentIds.has(n))return;const r={id:n,order:0,render:e=>{for(;o.firstChild;)e.appendChild(o.firstChild);return()=>{for(;e.firstChild;)o.appendChild(e.firstChild)}}};t.toolbarContents.set(n,r),t.lightDomToolbarContentIds.add(n),o.style.display="none"}function Le(e,t,i){e.querySelectorAll(":scope > tbw-grid-tool-panel").forEach(e=>{const o=e,n=o.getAttribute("id"),r=o.getAttribute("title");if(!n||!r)return void console.warn(`[parseLightDomToolPanels] Tool panel missing required id or title attribute: id="${n??""}", title="${r??""}"`);const s=o.getAttribute("icon")??void 0,l=o.getAttribute("tooltip")??void 0,a=parseInt(o.getAttribute("order")??"100",10);let c;const d=i?.(o);if(d)c=d;else{const e=o.innerHTML.trim();c=t=>{const i=document.createElement("div");return i.innerHTML=e,t.appendChild(i),()=>i.remove()}}const h=t.toolPanels.get(n);if(h){if(d){h.render=c,h.order=a,h.icon=s,h.tooltip=l;const e=t.panelCleanups.get(n);e&&(e(),t.panelCleanups.delete(n))}return}const u={id:n,title:r,icon:s,tooltip:l,order:a,render:c};t.toolPanels.set(n,u),t.lightDomToolPanelIds.add(n),o.style.display="none"})}function ze(e,t,i){const o=t?.header?.toolbarContents??[],n=[...i.toolbarContents.values()],r=new Set(o.map(e=>e.id)),s=[...o];for(const l of n)r.has(l.id)||s.push(l);for(const l of s){if(i.toolbarContentCleanups.has(l.id))continue;if(!l.render)continue;const t=e.querySelector(`[data-toolbar-content="${l.id}"]`);if(!t)continue;const o=l.render(t);o&&i.toolbarContentCleanups.set(l.id,o)}}function ke(e,t){const i=t.lightDomHeaderContent.length>0&&!t.lightDomContentMoved,o=t.headerContents.size>0;if(!i&&!o)return;const n=e.querySelector(".tbw-shell-content");if(!n)return;if(i){for(const e of t.lightDomHeaderContent)e.style.display="",n.appendChild(e);t.lightDomContentMoved=!0}const r=[...t.headerContents.values()].sort((e,t)=>(e.order??100)-(t.order??100));for(const s of r){const e=t.headerContentCleanups.get(s.id);e&&(e(),t.headerContentCleanups.delete(s.id));let i=n.querySelector(`[data-header-content="${s.id}"]`);i||(i=document.createElement("div"),i.setAttribute("data-header-content",s.id),n.appendChild(i));const o=s.render(i);o&&t.headerContentCleanups.set(s.id,o)}}function Oe(e,t){const i=e.querySelector("[data-panel-toggle]");i&&(i.classList.toggle("active",t.isPanelOpen),i.setAttribute("aria-pressed",String(t.isPanelOpen)))}function De(e,t){const i=e.querySelector(".tbw-tool-panel");i&&(i.classList.toggle("open",t.isPanelOpen),t.isPanelOpen||(i.style.width=""))}function Ie(e){for(const t of e.toolbarContentCleanups.values())t();e.toolbarContentCleanups.clear()}function Ne(e,t){let i=!1;const n={get isInitialized(){return i},setInitialized(e){i=e},get isPanelOpen(){return e.isPanelOpen},get activePanel(){return e.isPanelOpen&&e.expandedSections.size>0?[...e.expandedSections][0]:null},get expandedSections(){return[...e.expandedSections]},openToolPanel(){if(e.isPanelOpen)return;if(0===e.toolPanels.size)return void console.warn("[tbw-grid] No tool panels registered");if(e.isPanelOpen=!0,0===e.expandedSections.size&&e.toolPanels.size>0){const t=[...e.toolPanels.values()].sort((e,t)=>(e.order??100)-(t.order??100))[0];t&&e.expandedSections.add(t.id)}const i=t.getShadow();Oe(i,e),De(i,e),function(e,t,i){if(!t.isPanelOpen)return;const n=Te(i?.expand??o.expand),r=Te(i?.collapse??o.collapse);for(const[o,s]of t.toolPanels){const i=t.expandedSections.has(o),l=e.querySelector(`[data-section="${o}"]`),a=l?.querySelector(".tbw-accordion-content");if(!l||!a)continue;l.classList.toggle("expanded",i);const c=l.querySelector(".tbw-accordion-header");c&&c.setAttribute("aria-expanded",String(i));const d=l.querySelector(".tbw-accordion-chevron");if(d&&(d.innerHTML=i?r:n),i){if(0===a.children.length){const e=s.render(a);e&&t.panelCleanups.set(o,e)}}else{const e=t.panelCleanups.get(o);e&&(e(),t.panelCleanups.delete(o)),a.innerHTML=""}}}(i,e,t.getAccordionIcons()),t.emit("tool-panel-open",{sections:n.expandedSections})},closeToolPanel(){if(!e.isPanelOpen)return;for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.toolPanels.values())t.onClose?.();e.isPanelOpen=!1;const i=t.getShadow();Oe(i,e),De(i,e),t.emit("tool-panel-close",{})},toggleToolPanel(){e.isPanelOpen?n.closeToolPanel():n.openToolPanel()},toggleToolPanelSection(i){const o=e.toolPanels.get(i);if(!o)return void console.warn(`[tbw-grid] Tool panel section "${i}" not found`);if(1===e.toolPanels.size)return;const n=t.getShadow(),r=e.expandedSections.has(i);if(r){const t=e.panelCleanups.get(i);t&&(t(),e.panelCleanups.delete(i)),o.onClose?.(),e.expandedSections.delete(i),qe(n,i,!1)}else{for(const[t,o]of e.toolPanels)if(t!==i&&e.expandedSections.has(t)){const i=e.panelCleanups.get(t);i&&(i(),e.panelCleanups.delete(t)),o.onClose?.(),e.expandedSections.delete(t),qe(n,t,!1);const r=n.querySelector(`[data-section="${t}"] .tbw-accordion-content`);r&&(r.innerHTML="")}e.expandedSections.add(i),qe(n,i,!0),function(e,t,i){const o=t.toolPanels.get(i);if(!o?.render)return;const n=e.querySelector(`[data-section="${i}"] .tbw-accordion-content`);if(!n)return;const r=o.render(n);r&&t.panelCleanups.set(i,r)}(n,e,i)}t.emit("tool-panel-section-toggle",{id:i,expanded:!r})},getToolPanels:()=>[...e.toolPanels.values()],registerToolPanel(o){e.toolPanels.has(o.id)?console.warn(`[tbw-grid] Tool panel "${o.id}" already registered`):(e.toolPanels.set(o.id,o),i&&t.refreshShellHeader())},unregisterToolPanel(o){if(e.expandedSections.has(o)){const t=e.panelCleanups.get(o);t&&(t(),e.panelCleanups.delete(o)),e.expandedSections.delete(o)}e.toolPanels.delete(o),i&&t.refreshShellHeader()},getHeaderContents:()=>[...e.headerContents.values()],registerHeaderContent(o){e.headerContents.has(o.id)?console.warn(`[tbw-grid] Header content "${o.id}" already registered`):(e.headerContents.set(o.id,o),i&&ke(t.getShadow(),e))},unregisterHeaderContent(i){const o=e.headerContentCleanups.get(i);o&&(o(),e.headerContentCleanups.delete(i));const n=e.headerContents.get(i);n?.onDestroy?.(),e.headerContents.delete(i);const r=t.getShadow().querySelector(`[data-header-content="${i}"]`);r?.remove()},getToolbarContents:()=>[...e.toolbarContents.values()].sort((e,t)=>(e.order??0)-(t.order??0)),registerToolbarContent(o){e.toolbarContents.has(o.id)?console.warn(`[tbw-grid] Toolbar content "${o.id}" already registered`):(e.toolbarContents.set(o.id,o),i&&t.refreshShellHeader())},unregisterToolbarContent(o){const n=e.toolbarContentCleanups.get(o);n&&(n(),e.toolbarContentCleanups.delete(o));const r=e.toolbarContents.get(o);r?.onDestroy&&r.onDestroy(),e.toolbarContents.delete(o),i&&t.refreshShellHeader()}};return n}function qe(e,t,i){const o=e.querySelector(`[data-section="${t}"]`);o&&o.classList.toggle("expanded",i)}function $e(e,t,i,n){const r=He(t),s=[],l=["tbw-grid-header","tbw-grid-tool-buttons","tbw-grid-tool-panel","tbw-grid-column","tbw-grid-detail","tbw-grid-responsive-card"];for(const o of l){e.querySelectorAll(`:scope > ${o}`).forEach(e=>s.push(e))}e.replaceChildren();for(const o of s)e.appendChild(o);if(r){const r=Te(n?.toolPanel??o.toolPanel),s=Te(n?.expand??o.expand),l=Te(n?.collapse??o.collapse),a=[...t?.header?.toolbarContents??[]].sort((e,t)=>(e.order??0)-(t.order??0)),c=[...t?.toolPanels??[]].sort((e,t)=>(e.order??100)-(t.order??100)),d={title:t?.header?.title??void 0,hasPanels:c.length>0,isPanelOpen:i.isPanelOpen,toolPanelIcon:r,configButtons:a.map(e=>({id:e.id,hasElement:!1,hasRender:!!e.render})),apiButtons:[]},h={position:t?.toolPanel?.position??"right",isPanelOpen:i.isPanelOpen,expandIcon:s,collapseIcon:l,panels:c.map(e=>({id:e.id,title:e.title,icon:Te(e.icon),isExpanded:i.expandedSections.has(e.id)}))},u=Ae({hasShell:!0,shellHeader:function(e){const t=Se("tbw-shell-header",{part:"shell-header",role:"presentation"});if(e.title){const i=Se("tbw-shell-title");i.textContent=e.title,t.appendChild(i)}const i=Se("tbw-shell-content",{part:"shell-content",role:"presentation","data-light-dom-header-content":""});t.appendChild(i);const o=Se("tbw-shell-toolbar",{part:"shell-toolbar",role:"presentation"});for(const n of e.configButtons)n.hasRender&&o.appendChild(Se("tbw-toolbar-content-slot",{"data-toolbar-content":n.id}));for(const n of e.apiButtons)n.hasRender&&o.appendChild(Se("tbw-toolbar-content-slot",{"data-toolbar-content":n.id}));if((e.configButtons.some(e=>e.hasRender)||e.apiButtons.some(e=>e.hasRender))&&e.hasPanels&&o.appendChild(Se("tbw-toolbar-separator")),e.hasPanels){const t=Re(e.isPanelOpen?"tbw-toolbar-btn active":"tbw-toolbar-btn",{"data-panel-toggle":"",title:"Settings","aria-label":"Toggle settings panel","aria-pressed":String(e.isPanelOpen),"aria-controls":"tbw-tool-panel"});t.innerHTML=e.toolPanelIcon,o.appendChild(t)}return t.appendChild(o),t}(d),shellBody:function(e){const t=Se("tbw-shell-body"),i=e.panels.length>0,o=1===e.panels.length,n=Se("tbw-grid-content");n.appendChild(xe());let r=null;if(i){r=_e("aside",{class:e.isPanelOpen?"tbw-tool-panel open":"tbw-tool-panel",part:"tool-panel","data-position":e.position,role:"presentation",id:"tbw-tool-panel"});const t="left"===e.position?"right":"left";r.appendChild(Se("tbw-tool-panel-resize",{"data-resize-handle":"","data-handle-position":t,"aria-hidden":"true"}));const i=Se("tbw-tool-panel-content",{role:"presentation"}),n=Se("tbw-accordion");for(const r of e.panels){const t=Se(`tbw-accordion-section${r.isExpanded?" expanded":""}${o?" single":""}`,{"data-section":r.id}),i=Re("tbw-accordion-header",{"aria-expanded":String(r.isExpanded),"aria-controls":`tbw-section-${r.id}`});if(o&&i.setAttribute("aria-disabled","true"),r.icon){const e=_e("span",{class:"tbw-accordion-icon"});e.innerHTML=r.icon,i.appendChild(e)}const s=_e("span",{class:"tbw-accordion-title"});if(s.textContent=r.title,i.appendChild(s),!o){const t=_e("span",{class:"tbw-accordion-chevron"});t.innerHTML=r.isExpanded?e.collapseIcon:e.expandIcon,i.appendChild(t)}t.appendChild(i),t.appendChild(Se("tbw-accordion-content",{id:`tbw-section-${r.id}`,role:"presentation"})),n.appendChild(t)}i.appendChild(n),r.appendChild(i)}return"left"===e.position&&r?(t.appendChild(r),t.appendChild(n)):(t.appendChild(n),r&&t.appendChild(r)),t}(h)});e.appendChild(u)}else{const t=Ae({hasShell:!1});e.appendChild(t)}return r}Ee.innerHTML='\n <div class="tbw-scroll-area">\n <div class="rows-body-wrapper">\n <div class="rows-body" role="grid">\n <div class="header" role="rowgroup">\n <div class="header-row" role="row" part="header-row"></div>\n </div>\n <div class="rows-container" role="presentation">\n <div class="rows-viewport" role="presentation">\n <div class="rows"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="faux-vscroll">\n <div class="faux-vscroll-spacer"></div>\n </div>\n';const We="tbw-grid-styles";let Fe="";const Ue=/* @__PURE__ */new Map;function Ve(){const e=function(){let e=document.getElementById(We);return e||(e=document.createElement("style"),e.id=We,e.setAttribute("data-tbw-grid","true"),document.head.appendChild(e)),e}(),t=Array.from(Ue.values()).join("\n");e.textContent=`${Fe}\n\n/* Plugin Styles */\n${t}`}async function Be(e){if(Fe)return;if("string"==typeof e&&e.length>0)return Fe=e,void Ve();await new Promise(e=>setTimeout(e,50));const t=function(){try{for(const e of Array.from(document.styleSheets))try{const t=Array.from(e.cssRules||[]).map(e=>e.cssText).join("\n");if(t.includes(".tbw-grid-root")&&t.includes("tbw-grid"))return t}catch{continue}}catch(e){console.warn("[tbw-grid] Failed to extract grid.css from document stylesheets:",e)}return null}();t?(Fe=t,Ve()):"undefined"!=typeof process&&"test"===process.env?.NODE_ENV||console.warn("[tbw-grid] Could not find grid.css in document.styleSheets. Grid styling will not work.","Available stylesheets:",Array.from(document.styleSheets).map(e=>e.href||"(inline)"))}function Ge(e){e.momentumRaf&&(cancelAnimationFrame(e.momentumRaf),e.momentumRaf=0)}function Xe(e,t){(Math.abs(e.velocityY)>.1||Math.abs(e.velocityX)>.1)&&function(e,t){const i=.95,o=.01,n=()=>{e.velocityY*=i,e.velocityX*=i;const r=16*e.velocityY,s=16*e.velocityX;Math.abs(e.velocityY)>o&&(t.fauxScrollbar.scrollTop+=r),Math.abs(e.velocityX)>o&&t.scrollArea&&(t.scrollArea.scrollLeft+=s),Math.abs(e.velocityY)>o||Math.abs(e.velocityX)>o?e.momentumRaf=requestAnimationFrame(n):e.momentumRaf=0};e.momentumRaf=requestAnimationFrame(n)}(e,t),function(e){e.startY=null,e.startX=null,e.scrollTop=null,e.scrollLeft=null,e.lastY=null,e.lastX=null,e.lastTime=null}(e)}function Ye(e,t,i,o){e.addEventListener("touchstart",e=>function(e,t,i){if(1!==e.touches.length)return;Ge(t);const o=e.touches[0];t.startY=o.clientY,t.startX=o.clientX,t.lastY=o.clientY,t.lastX=o.clientX,t.lastTime=performance.now(),t.scrollTop=i.fauxScrollbar.scrollTop,t.scrollLeft=i.scrollArea?.scrollLeft??0,t.velocityY=0,t.velocityX=0}(e,t,i),{passive:!0,signal:o}),e.addEventListener("touchmove",e=>{const o=function(e,t,i){if(1!==e.touches.length||null===t.startY||null===t.startX||null===t.scrollTop||null===t.scrollLeft)return!1;const o=e.touches[0],n=o.clientY,r=o.clientX,s=performance.now(),l=t.startY-n,a=t.startX-r;if(null!==t.lastTime&&null!==t.lastY&&null!==t.lastX){const e=s-t.lastTime;e>0&&(t.velocityY=(t.lastY-n)/e,t.velocityX=(t.lastX-r)/e)}t.lastY=n,t.lastX=r,t.lastTime=s;const{scrollTop:c,scrollHeight:d,clientHeight:h}=i.fauxScrollbar,u=l>0&&c<d-h||l<0&&c>0;let g=!1;if(i.scrollArea){const{scrollLeft:e,scrollWidth:t,clientWidth:o}=i.scrollArea;g=a>0&&e<t-o||a<0&&e>0}return u&&(i.fauxScrollbar.scrollTop=t.scrollTop+l),g&&i.scrollArea&&(i.scrollArea.scrollLeft=t.scrollLeft+a),u||g}(e,t,i);o&&e.preventDefault()},{passive:!1,signal:o}),e.addEventListener("touchend",()=>Xe(t,i),{passive:!0,signal:o})}const je=[{property:"editable",pluginName:"editing",level:"column",description:'the "editable" column property',isUsed:e=>!0===e},{property:"editor",pluginName:"editing",level:"column",description:'the "editor" column property'},{property:"editorParams",pluginName:"editing",level:"column",description:'the "editorParams" column property'},{property:"group",pluginName:"groupingColumns",level:"column",description:'the "group" column property'},{property:"pinned",pluginName:"pinnedColumns",level:"column",description:'the "pinned" column property',isUsed:e=>"left"===e||"right"===e||"start"===e||"end"===e},{property:"sticky",pluginName:"pinnedColumns",level:"column",description:'the "sticky" column property (deprecated, use "pinned")',isUsed:e=>"left"===e||"right"===e||"start"===e||"end"===e}],Ke=[{property:"columnGroups",pluginName:"groupingColumns",level:"config",description:'the "columnGroups" config property',isUsed:e=>Array.isArray(e)&&e.length>0}];function Ze(e){return`import { ${Qe(e)}Plugin } from '@toolbox-web/grid/plugins/${t=e,t.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}';`;var t}function Qe(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Je(e,t){return e.some(e=>e.name===t)}function et(e,t){return e&&"object"==typeof e?"__rowCacheKey"in e?e.__rowCacheKey:"rowId"in e&&null!=e.rowId?`id:${e.rowId}`:t?`id:${t(e)}`:e:e}function tt(e,t,i){const o=et(t,i);return"string"==typeof o?e.byKey.get(o):o&&"object"==typeof o?e.byRef.get(o):void 0}function it(e,t,i){if(t<0||t>=e.length)return;const o=e[t],n=i-o.height;if(0!==n){o.height=i,o.measured=!0;for(let i=t+1;i<e.length;i++)e[i].offset+=n}}function ot(e,t){if(0===e.length)return-1;if(t<=0)return 0;let i=0,o=e.length-1;for(;i<=o;){const n=Math.floor((i+o)/2),r=e[n],s=r.offset+r.height;if(t<r.offset)o=n-1;else{if(!(t>=s))return n;i=n+1}}return Math.max(0,Math.min(i,e.length-1))}function nt(e,t){const{positionCache:i,heightCache:o,rows:n,start:r,end:s,getPluginHeight:l,getRowId:a}=e;let c=!1;t.forEach(e=>{const t=e.dataset.rowIndex;if(!t)return;const d=parseInt(t,10);if(d<r||d>=s||d>=n.length)return;const h=n[d],u=l?.(h,d);if(void 0!==u){const e=i[d];return void((!e.measured||Math.abs(e.height-u)>1)&&(it(i,d,u),c=!0))}const g=e.offsetHeight;if(g>0){const e=i[d];(!e.measured||Math.abs(e.height-g)>1)&&(it(i,d,g),function(e,t,i,o){const n=et(t,o);"string"==typeof n?e.byKey.set(n,i):n&&"object"==typeof n&&e.byRef.set(n,i)}(o,h,g,a),c=!0)}});const d=c?function(e){let t=0;for(const i of e)i.measured&&t++;return t}(i):0,h=c?function(e,t){let i=0,o=0;for(const n of e)n.measured&&(i+=n.height,o++);return o>0?i/o:t}(i,e.defaultHeight):0;return{hasChanges:c,measuredCount:d,averageHeight:h}}function rt(e){const{totalRows:t,viewportHeight:i,scrollTop:o,rowHeight:n,overscan:r}=e,s=Math.ceil(i/n);let l=Math.floor(o/n)-r;l<0&&(l=0);let a=l+s+2*r;return a>t&&(a=t),a===t&&l>0&&(l=Math.max(0,a-s-2*r)),{start:l,end:a,offsetY:l*n,totalHeight:t*n}}function st(e,t){return e<=t}class lt{constructor(e){this.grid=e}plugins=[];getPlugins(){return this.plugins}pluginMap=/* @__PURE__ */new Map;cellRenderers=/* @__PURE__ */new Map;headerRenderers=/* @__PURE__ */new Map;cellEditors=/* @__PURE__ */new Map;eventListeners=/* @__PURE__ */new Map;queryHandlers=/* @__PURE__ */new Map;static deprecationWarned=/* @__PURE__ */new WeakSet;attachAll(e){for(const t of e)this.attach(t)}attach(e){if(function(e,t){const i=e.name,o=e.constructor.dependencies??[];for(const n of o){const e=n.name,o=n.required??!0,r=n.reason;if(!t.some(t=>t.name===e)){const t=r??`${Qe(i)}Plugin requires ${Qe(e)}Plugin`,n=Ze(e);if(o)throw new Error(`[tbw-grid] Plugin dependency error:\n\n${t}.\n\n → Add the plugin to your gridConfig.plugins array BEFORE ${Qe(i)}Plugin:\n ${n}\n plugins: [new ${Qe(e)}Plugin(), new ${Qe(i)}Plugin()]`);console.info(`[tbw-grid] ${Qe(i)}Plugin: Optional "${e}" plugin not found. Some features may be unavailable.`)}}}(e,this.plugins),this.pluginMap.set(e.constructor,e),this.plugins.push(e),e.cellRenderers)for(const[t,i]of Object.entries(e.cellRenderers))this.cellRenderers.set(t,i);if(e.headerRenderers)for(const[t,i]of Object.entries(e.headerRenderers))this.headerRenderers.set(t,i);if(e.cellEditors)for(const[t,i]of Object.entries(e.cellEditors))this.cellEditors.set(t,i);this.registerQueryHandlers(e),this.warnDeprecatedHooks(e),e.attach(this.grid);for(const t of this.plugins)t!==e&&t.onPluginAttached&&t.onPluginAttached(e.name,e)}registerQueryHandlers(e){const t=e.constructor.manifest;if(t?.queries)for(const i of t.queries){let t=this.queryHandlers.get(i.type);t||(t=/* @__PURE__ */new Set,this.queryHandlers.set(i.type,t)),t.add(e)}}warnDeprecatedHooks(e){const t=e.constructor;if(lt.deprecationWarned.has(t))return;if(!E())return;const i="function"==typeof e.getExtraHeight||"function"==typeof e.getExtraHeightBefore,o="function"==typeof e.getRowHeight;i&&!o&&(lt.deprecationWarned.add(t),console.warn(`[tbw-grid] Deprecation warning: "${e.name}" uses getExtraHeight() / getExtraHeightBefore() which are deprecated and will be removed in v2.0.\n → Migrate to getRowHeight(row, index) for better variable row height support.\n → See: https://toolbox-web.dev/docs/grid/plugins/migration#row-height-hooks`))}unregisterQueryHandlers(e){for(const[t,i]of this.queryHandlers)i.delete(e),0===i.size&&this.queryHandlers.delete(t)}detachAll(){for(const e of this.plugins)for(const t of this.plugins)t!==e&&t.onPluginDetached&&t.onPluginDetached(e.name);for(let e=this.plugins.length-1;e>=0;e--){const t=this.plugins[e];this.unsubscribeAll(t),this.unregisterQueryHandlers(t),t.detach()}this.plugins=[],this.pluginMap.clear(),this.cellRenderers.clear(),this.headerRenderers.clear(),this.cellEditors.clear(),this.eventListeners.clear(),this.queryHandlers.clear()}getPlugin(e){return this.pluginMap.get(e)}getPluginByName(e){return this.plugins.find(t=>t.name===e||t.aliases?.includes(e))}hasPlugin(e){return this.pluginMap.has(e)}getAll(){return this.plugins}getRegisteredPluginNames(){return this.plugins.map(e=>e.name)}getCellRenderer(e){return this.cellRenderers.get(e)}getHeaderRenderer(e){return this.headerRenderers.get(e)}getCellEditor(e){return this.cellEditors.get(e)}getPluginStyles(){return this.plugins.filter(e=>e.styles).map(e=>({name:e.name,styles:e.styles}))}processRows(e){let t=[...e];for(const i of this.plugins)i.processRows&&(t=i.processRows(t));return t}processColumns(e){let t=[...e];for(const i of this.plugins)i.processColumns&&(t=i.processColumns(t));return t}beforeRender(){for(const e of this.plugins)e.beforeRender?.()}afterRender(){for(const e of this.plugins)e.afterRender?.()}afterCellRender(e){for(const t of this.plugins)t.afterCellRender?.(e)}hasAfterCellRenderHook(){return this.plugins.some(e=>"function"==typeof e.afterCellRender)}afterRowRender(e){for(const t of this.plugins)t.afterRowRender?.(e)}hasAfterRowRenderHook(){return this.plugins.some(e=>"function"==typeof e.afterRowRender)}onScrollRender(){for(const e of this.plugins)e.onScrollRender?.()}getExtraHeight(){let e=0;for(const t of this.plugins)"function"==typeof t.getExtraHeight&&(e+=t.getExtraHeight());return e}hasExtraHeight(){for(const e of this.plugins)if("function"==typeof e.getExtraHeight&&e.getExtraHeight()>0)return!0;return!1}getExtraHeightBefore(e){let t=0;for(const i of this.plugins)"function"==typeof i.getExtraHeightBefore&&(t+=i.getExtraHeightBefore(e));return t}getRowHeight(e,t){for(const i of this.plugins)if("function"==typeof i.getRowHeight){const o=i.getRowHeight(e,t);if(void 0!==o)return o}}hasRowHeightPlugin(){for(const e of this.plugins)if("function"==typeof e.getRowHeight)return!0;return!1}adjustVirtualStart(e,t,i){let o=e;for(const n of this.plugins)if("function"==typeof n.adjustVirtualStart){const r=n.adjustVirtualStart(e,t,i);r<o&&(o=r)}return o}renderRow(e,t,i){for(const o of this.plugins)if(o.renderRow?.(e,t,i))return!0;return!1}queryPlugins(e){const t=[],i=this.queryHandlers.get(e.type);if(i&&i.size>0){for(const o of i){const i=o.handleQuery?.(e)??o.onPluginQuery?.(e);void 0!==i&&t.push(i)}return t}for(const o of this.plugins){const i=o.handleQuery?.(e)??o.onPluginQuery?.(e);void 0!==i&&t.push(i)}return t}subscribe(e,t,i){let o=this.eventListeners.get(t);o||(o=/* @__PURE__ */new Map,this.eventListeners.set(t,o)),o.set(e,i)}unsubscribe(e,t){const i=this.eventListeners.get(t);i&&(i.delete(e),0===i.size&&this.eventListeners.delete(t))}unsubscribeAll(e){for(const[t,i]of this.eventListeners)i.delete(e),0===i.size&&this.eventListeners.delete(t)}emitPluginEvent(e,t){const i=this.eventListeners.get(e);if(i)for(const n of i.values())try{n(t)}catch(o){console.error(`[tbw-grid] Error in plugin event handler for "${e}":`,o)}}onKeyDown(e){for(const t of this.plugins)if(t.onKeyDown?.(e))return!0;return!1}onCellClick(e){for(const t of this.plugins)if(t.onCellClick?.(e))return!0;return!1}onRowClick(e){for(const t of this.plugins)if(t.onRowClick?.(e))return!0;return!1}onHeaderClick(e){for(const t of this.plugins)if(t.onHeaderClick?.(e))return!0;return!1}onScroll(e){for(const t of this.plugins)t.onScroll?.(e)}onCellMouseDown(e){for(const t of this.plugins)if(t.onCellMouseDown?.(e))return!0;return!1}onCellMouseMove(e){for(const t of this.plugins)if(t.onCellMouseMove?.(e))return!0;return!1}onCellMouseUp(e){for(const t of this.plugins)if(t.onCellMouseUp?.(e))return!0;return!1}getHorizontalScrollOffsets(e,t){let i=0,o=0,n=!1;for(const r of this.plugins){const s=r.getHorizontalScrollOffsets?.(e,t);s&&(i+=s.left,o+=s.right,s.skipScroll&&(n=!0))}return{left:i,right:o,skipScroll:n}}getToolPanels(){const e=[];for(const t of this.plugins){const i=t.getToolPanel?.();i&&e.push({plugin:t,panel:i})}return e.sort((e,t)=>(e.panel.order??0)-(t.panel.order??0))}getHeaderContents(){const e=[];for(const t of this.plugins){const i=t.getHeaderContent?.();i&&e.push({plugin:t,content:i})}return e.sort((e,t)=>(e.content.order??0)-(t.content.order??0))}}class at extends HTMLElement{static tagName="tbw-grid";static version="1.24.2";static#H=0;static adapters=[];static registerAdapter(e){this.adapters.push(e)}static getAdapters(){return this.adapters}static clearAdapters(){this.adapters=[]}static get observedAttributes(){return["rows","columns","grid-config","fit-mode","loading"]}get#M(){return this}#P=!1;#S;#R;#L=[];get#s(){return this.#z?.effective??{}}#k=!1;#O=!1;#D={rows:!1,columns:!1,gridConfig:!1,fitMode:!1};#I;#N=0;#q=null;#$=!1;#W=!1;#F=0;#U;#V={startY:null,startX:null,scrollTop:null,scrollLeft:null,lastY:null,lastX:null,lastTime:null,velocityY:0,velocityX:0,momentumRaf:0};#B;#G;#X;#Y;#j={scrollTop:0,scrollLeft:0,scrollHeight:0,scrollWidth:0,clientHeight:0,clientWidth:0};#K;#Z;#Q;get _pluginManager(){return this.#K}#J=!1;#ee;#te;#h;#z;#ie=function(){return{toolPanels:/* @__PURE__ */new Map,headerContents:/* @__PURE__ */new Map,toolbarContents:/* @__PURE__ */new Map,hasToolButtonsContainer:!1,lightDomHeaderContent:[],lightDomTitle:null,lightDomToolPanelIds:/* @__PURE__ */new Set,lightDomToolbarContentIds:/* @__PURE__ */new Set,apiToolPanelIds:/* @__PURE__ */new Set,isPanelOpen:!1,expandedSections:/* @__PURE__ */new Set,headerContentCleanups:/* @__PURE__ */new Map,panelCleanups:/* @__PURE__ */new Map,toolbarContentCleanups:/* @__PURE__ */new Map,lightDomContentMoved:!1}}();#oe;#ne;#re;#se=!1;#le=/* @__PURE__ */new Set;#ae=/* @__PURE__ */new Map;#ce;#de=/* @__PURE__ */new Map;_rows=[];#he=[];get _columns(){return this.#s.columns??[]}set _columns(e){this.#s.columns=e}get _visibleColumns(){return this._columns.filter(e=>!e.hidden)}_headerRowEl;_bodyEl;_rowPool=[];_resizeController;_virtualization={enabled:!0,rowHeight:28,bypassThreshold:24,start:0,end:0,container:null,viewportEl:null,totalHeightEl:null,positionCache:null,heightCache:{byKey:/* @__PURE__ */new Map,byRef:/* @__PURE__ */new WeakMap},averageHeight:28,measuredCount:0,variableHeights:!1,cachedViewportHeight:0,cachedFauxHeight:0,cachedScrollAreaHeight:0,scrollAreaEl:null};_focusRow=0;_focusCol=0;_restoreFocusAfterRender=!1;_sortState=null;_gridTemplate="";__rowRenderEpoch=0;__didInitialAutoSize=!1;get __lightDomColumnsCache(){return this.#z?.lightDomColumnsCache}set __lightDomColumnsCache(e){this.#z&&(this.#z.lightDomColumnsCache=e)}get __originalColumnNodes(){return this.#z?.originalColumnNodes}set __originalColumnNodes(e){this.#z&&(this.#z.originalColumnNodes=e)}__originalOrder=[];__frameworkAdapter;__rowsBodyEl=null;get rows(){return this._rows}set rows(e){const t=this.#L;this.#L=e,t!==e&&this.#ue("rows")}get sourceRows(){return this.#L}get columns(){return[...this._columns]}set columns(e){const t=this.#z?.getColumns();this.#z?.setColumns(e),t!==e&&this.#ue("columns")}get gridConfig(){return this.#s}set gridConfig(e){const t=this.#z?.getGridConfig();this.#z?.setGridConfig(e),t!==e&&(this.#z.clearLightDomCache(),this.#ue("gridConfig"))}get fitMode(){return this.#s.fitMode??"stretch"}set fitMode(e){const t=this.#z?.getFitMode();this.#z?.setFitMode(e),t!==e&&this.#ue("fitMode")}get loading(){return this.#se}set loading(e){const t=this.#se;this.#se=e,e?this.setAttribute("loading",""):this.removeAttribute("loading"),t!==e&&this.#ge()}setRowLoading(e,t){const i=this.#le.has(e);t?this.#le.add(e):this.#le.delete(e),i!==t&&this.#fe(e,t)}setCellLoading(e,t,i){let o=this.#ae.get(e);const n=o?.has(t)??!1;i?(o||(o=/* @__PURE__ */new Set,this.#ae.set(e,o)),o.add(t)):(o?.delete(t),0===o?.size&&this.#ae.delete(e)),n!==i&&this.#pe(e,t,i)}isRowLoading(e){return this.#le.has(e)}isCellLoading(e,t){return this.#ae.get(e)?.has(t)??!1}clearAllLoading(){this.loading=!1;for(const e of this.#le)this.#fe(e,!1);this.#le.clear();for(const[e,t]of this.#ae)for(const i of t)this.#pe(e,i,!1);this.#ae.clear()}get effectiveConfig(){return this.#s}get disconnectSignal(){return this.#B||(this.#B=new AbortController),this.#B.signal}constructor(){super(),this.#we(),this.#S=new Promise(e=>this.#R=e),this.#I=new pe({mergeConfig:()=>{this.#z.parseLightDomColumns(this),this.#z.merge(),this.#be(),function(e,t){const i=je,o=Ke,n=/* @__PURE__ */new Map;function r(e,t,i,o,r=!1){n.has(e)||n.set(e,{description:t,importHint:i,fields:[],isConfigProperty:r});const s=n.get(e);s.fields.includes(o)||s.fields.push(o)}for(const l of o){const i=e[l.property];(l.isUsed?l.isUsed(i):void 0!==i)&&!Je(t,l.pluginName)&&r(l.pluginName,l.description,Ze(l.pluginName),l.property,!0)}const s=e.columns;if(s&&s.length>0)for(const l of s)for(const e of i){const i=l[e.property];if((e.isUsed?e.isUsed(i):void 0!==i)&&!Je(t,e.pluginName)){const t=l.field||"<unknown>";r(e.pluginName,e.description,Ze(e.pluginName),t)}}if(n.size>0){const e=[];for(const[t,{description:i,importHint:o,fields:r,isConfigProperty:s}]of n)if(s)e.push(`Config uses ${i}, but the required plugin is not loaded.\n → Add the plugin to your gridConfig.plugins array:\n ${o}\n plugins: [new ${Qe(t)}Plugin(), ...]`);else{const n=r.slice(0,3).join(", ")+(r.length>3?`, ... (${r.length} total)`:"");e.push(`Column(s) [${n}] use ${i}, but the required plugin is not loaded.\n → Add the plugin to your gridConfig.plugins array:\n ${o}\n plugins: [new ${Qe(t)}Plugin(), ...]`)}throw new Error(`[tbw-grid] Configuration error:\n\n${e.join("\n\n")}\n\nThis validation helps catch misconfigurations early. The properties listed above require their respective plugins to function.`)}}(this.#s,this.#K?.getPlugins()??[]),function(e){const t=[],i=[];for(const o of e){const e=o.constructor.manifest;if(e?.configRules)for(const n of e.configRules){const e=o.config;if(n.check(e)){const e=`[tbw-grid:${Qe(o.name)}Plugin] Configuration warning: ${n.message}`;"error"===n.severity?t.push(e):i.push(e)}}}if(i.length>0&&E())for(const o of i)console.warn(o);if(t.length>0)throw new Error(`[tbw-grid] Configuration error:\n\n${t.join("\n\n")}`)}(this.#K?.getPlugins()??[]),function(e){if(!E())return;const t=new Set(e.map(e=>e.name)),i=/* @__PURE__ */new Set;for(const o of e){const e=o.constructor.manifest;if(e?.incompatibleWith)for(const n of e.incompatibleWith)if(t.has(n.name)){const e=[o.name,n.name].sort().join("↔");if(i.has(e))continue;i.add(e),console.warn(`[tbw-grid] Plugin incompatibility warning:\n\n${Qe(o.name)}Plugin and ${Qe(n.name)}Plugin are both loaded, but they are currently incompatible.\n\n → ${n.reason}\n\n Consider removing one of these plugins to avoid unexpected behavior.`)}}}(this.#K?.getPlugins()??[]),this.#me(),this.#he=[...this._columns]},processColumns:()=>this.#ve(),processRows:()=>this.#Ce(),renderHeader:()=>ce(this),updateTemplate:()=>c(this),renderVirtualWindow:()=>this.refreshVirtualWindow(!0,!0),afterRender:()=>{this.#K?.afterRender(),this._virtualization.enabled&&this._virtualization.totalHeightEl&&queueMicrotask(()=>{if(!this._virtualization.totalHeightEl)return;const e=this.#ye(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`});"fixed"!==this.#s.fitMode||this.__didInitialAutoSize||(this.__didInitialAutoSize=!0,s(this)),this._restoreFocusAfterRender&&(this._restoreFocusAfterRender=!1,G(this)),this._virtualization.enabled&&!this.#_e&&this.#Se(),this.#W&&(this.#W=!1,requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.#Re()})})),this.#se&&this.#ge()},isConnected:()=>this.isConnected&&this.#k}),this.#I.setInitialReadyResolver(()=>this.#R?.()),this.#oe=Ne(this.#ie,{getShadow:()=>this.#M,getShellConfig:()=>this.#s?.shell,getAccordionIcons:()=>({expand:this.#s?.icons?.expand??o.expand,collapse:this.#s?.icons?.collapse??o.collapse}),emit:(e,t)=>this.#Ee(e,t),refreshShellHeader:()=>this.refreshShellHeader()}),this.#z=new R({getRows:()=>this.#L,getSortState:()=>this._sortState,setSortState:e=>{this._sortState=e},onConfigChange:()=>{this.#I.requestPhase(fe.FULL,"configChange")},emit:(e,t)=>this.#Ee(e,t),clearRowPool:()=>{this._rowPool.length=0,this._bodyEl&&(this._bodyEl.innerHTML=""),this.__rowRenderEpoch++},setup:()=>this.#xe(),renderHeader:()=>ce(this),updateTemplate:()=>c(this),refreshVirtualWindow:()=>this.#I.requestPhase(fe.VIRTUALIZATION,"configManager"),getVirtualization:()=>this._virtualization,setRowHeight:e=>{this._virtualization.rowHeight=e},applyAnimationConfig:e=>this.#Ae(e),getShellLightDomTitle:()=>this.#ie.lightDomTitle,getShellToolPanels:()=>this.#ie.toolPanels,getShellHeaderContents:()=>this.#ie.headerContents,getShellToolbarContents:()=>this.#ie.toolbarContents,getShellLightDomHeaderContent:()=>this.#ie.lightDomHeaderContent,getShellHasToolButtonsContainer:()=>this.#ie.hasToolButtonsContainer})}async#we(){await Be('@layer tbw-base, tbw-plugins, tbw-theme;\n\n@layer tbw-base{tbw-grid{--tbw-base-icon-size: 1em;--tbw-base-radius: .25em;--tbw-font-size: 1em;--tbw-font-size-sm: .9285em;--tbw-font-size-xs: .7857em;--tbw-font-size-2xs: .7142em;--tbw-spacing-xs: .25em;--tbw-spacing-sm: .375em;--tbw-spacing-md: .5em;--tbw-spacing-lg: .75em;--tbw-spacing-xl: 1em;--tbw-icon-size: var(--tbw-base-icon-size);--tbw-icon-size-sm: .875em;--tbw-checkbox-size: var(--tbw-base-icon-size);--tbw-toggle-size: 1.25em;--tbw-border-radius: var(--tbw-base-radius);--tbw-color-bg: transparent;--tbw-color-panel-bg: light-dark(#eeeeee, #222222);--tbw-color-fg: light-dark(#222222, #eeeeee);--tbw-color-fg-muted: light-dark(#555555, #aaaaaa);--tbw-color-accent: light-dark(#3b82f6, #3b82f6);--tbw-color-accent-fg: light-dark(#ffffff, #000000);--tbw-color-success: light-dark(hsl(122, 39%, 40%), hsl(122, 39%, 49%));--tbw-color-warning: light-dark(hsl(38, 92%, 50%), hsl(38, 92%, 50%));--tbw-color-error: light-dark(hsl(0, 65%, 51%), hsl(0, 65%, 55%));--tbw-color-danger: var(--tbw-color-error);--tbw-color-selection: light-dark(#fff7d6, #333333);--tbw-color-row-alt: var(--tbw-color-bg);--tbw-color-row-hover: light-dark(#f0f6ff, #1c1c1c);--tbw-color-header-bg: color-mix(in hsl, var(--tbw-color-panel-bg) 85%, var(--tbw-color-fg));--tbw-color-header-fg: color-mix(in hsl, var(--tbw-color-fg) 75%, var(--tbw-color-panel-bg));--tbw-color-border: light-dark(#d0d0d4, #454545);--tbw-color-border-strong: light-dark(#777777, #666666);--tbw-color-border-cell: var(--tbw-color-border);--tbw-color-border-header: var(--tbw-color-border);--tbw-color-shadow: light-dark(rgba(0, 0, 0, .1), rgba(0, 0, 0, .3));--tbw-font-family: inherit;--tbw-font-size-header: var(--tbw-font-size);--tbw-font-weight-header: bold;--tbw-cell-padding-header: var(--tbw-spacing-xs) var(--tbw-spacing-md);--tbw-cell-padding-v: var(--tbw-spacing-xs);--tbw-cell-padding-h: var(--tbw-spacing-md);--tbw-cell-padding: var(--tbw-cell-padding-v) var(--tbw-cell-padding-h);--tbw-cell-padding-input: var(--tbw-spacing-xs) var(--tbw-spacing-sm);--tbw-row-height: 1.75em;--tbw-header-height: 1.875em;--tbw-cell-white-space: nowrap;--tbw-border-width: 1px;--tbw-border-style: solid;--tbw-border-input: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-strong);--tbw-border-header: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-header);--tbw-row-divider: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-cell);--tbw-row-hover-outline: 0;--tbw-color-active-row-bg: var(--tbw-color-selection);--tbw-active-row-outline: 0;--tbw-focus-outline-width: 2px;--tbw-focus-outline: var(--tbw-focus-outline-width) var(--tbw-border-style) var(--tbw-color-accent);--tbw-focus-outline-offset: -2px;--tbw-focus-background: rgba(from var(--tbw-color-accent) r g b / 12%);--tbw-range-border-color: var(--tbw-color-accent);--tbw-range-selection-bg: rgba(from var(--tbw-range-border-color) r g b / 12%);--tbw-resize-handle-width: var(--tbw-spacing-sm);--tbw-resize-handle-color: transparent;--tbw-resize-handle-color-hover: var(--tbw-color-accent);--tbw-resize-handle-border-radius: 0;--tbw-resize-indicator-width: 2px;--tbw-resize-indicator-color: var(--tbw-color-accent);--tbw-resize-indicator-opacity: .6;--tbw-transition-duration: .12s;--tbw-transition-ease: ease;--tbw-animation-duration: .2s;--tbw-animation-easing: ease-out;--tbw-animation-enabled: 1;--tbw-row-change-duration: .5s;--tbw-row-insert-duration: .3s;--tbw-row-remove-duration: .2s;--tbw-row-change-color: rgba(from var(--tbw-color-accent) r g b / 25%);--tbw-sort-indicator-color: var(--tbw-color-fg-muted);--tbw-sort-indicator-active-color: var(--tbw-color-accent);--tbw-sort-indicator-display: inline-flex;--tbw-sort-indicator-visibility: visible;--tbw-header-text-transform: none;--tbw-header-letter-spacing: normal;--tbw-color-header-separator: var(--tbw-color-border-cell);--tbw-density-scale: 1;--tbw-shell-header-height: 2.75em;--tbw-shell-header-bg: var(--tbw-color-panel-bg);--tbw-shell-header-border: var(--tbw-color-border);--tbw-shell-title-font-size: var(--tbw-font-size);--tbw-shell-title-font-weight: 600;--tbw-tool-panel-width: 17.5em;--tbw-tool-panel-bg: var(--tbw-color-panel-bg);--tbw-tool-panel-border: var(--tbw-color-border);--tbw-tool-panel-header-height: 2.5em;--tbw-tool-panel-transition: var(--tbw-animation-duration) var(--tbw-animation-easing);--tbw-toolbar-button-size: 2em;--tbw-toolbar-button-gap: var(--tbw-spacing-xs);--tbw-panel-padding: var(--tbw-spacing-lg);--tbw-panel-gap: var(--tbw-spacing-md);--tbw-menu-item-padding: var(--tbw-spacing-sm) var(--tbw-spacing-lg);--tbw-menu-item-gap: var(--tbw-spacing-md);--tbw-menu-min-width: 10rem;--tbw-button-padding: var(--tbw-spacing-sm) var(--tbw-spacing-lg);--tbw-button-padding-sm: var(--tbw-spacing-xs) var(--tbw-spacing-md);--tbw-input-height: var(--tbw-row-height);--tbw-input-padding: 0 var(--tbw-spacing-md);--tbw-detail-padding: var(--tbw-spacing-xl);--tbw-detail-max-height: 31.25rem;--tbw-indicator-size: var(--tbw-spacing-sm)}}\n@layer tbw-base{tbw-grid{color-scheme:inherit;position:relative;display:block;width:100%;height:100%;min-height:0;contain:content;font-family:var(--tbw-font-family);font-size:var(--tbw-font-size);font-feature-settings:"tnum","lnum";background:var(--tbw-color-bg);color:var(--tbw-color-fg);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);overflow:clip;outline:none;&,*{box-sizing:border-box}.tbw-grid-root{position:relative;display:flex;flex-direction:column;height:100%;&.has-shell{display:flex;flex-direction:column;height:100%}&:has(.selected){user-select:none}}.rows-body-wrapper{flex:1;min-height:0;display:flex;flex-direction:row;width:100%;min-width:fit-content}.rows-body{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:visible}.rows-container{display:flex;flex-direction:row;flex:1;min-height:0;overflow:visible}.rows-viewport{flex:1;min-width:0;position:relative;display:block;overflow:clip;.rows{position:absolute;top:0;left:0;min-width:100%;will-change:transform;z-index:var(--tbw-z-layer-rows, 1)}}.faux-vscroll{position:sticky;inset-inline-end:0;flex-shrink:0;width:auto;overflow-y:auto;overflow-x:hidden;z-index:var(--tbw-z-layer-header, 30)}.faux-vscroll-spacer{width:1px}&[data-has-focus]{.cell-focus,.row-focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}}.sticky-left,.sticky-right{position:sticky;z-index:25}.sticky-left{box-shadow:1px 0 0 var(--tbw-color-border)}.sticky-right{box-shadow:-1px 0 0 var(--tbw-color-border)}}}\n@layer tbw-base{tbw-grid{.header{display:block;flex-shrink:0;z-index:var(--tbw-z-layer-header, 30);background:var(--tbw-color-header-bg);overflow:visible}.header-group-row{display:grid;grid-template-columns:var(--tbw-column-template);background:var(--tbw-color-header-bg);z-index:var(--tbw-z-layer-header, 30)}.header-group-cell{display:flex;align-items:center;justify-content:flex-start;padding:var(--tbw-cell-padding-header, 2px 8px);color:var(--tbw-color-header-group-fg, var(--tbw-color-header-fg));font-weight:var(--tbw-font-weight-header-group, var(--tbw-font-weight-header));justify-content:var(--tbw-align-header-group, var(--tbw-align-header, flex-start));&:not(:last-child){border-right:2px solid var(--tbw-color-border)}}.header-row{display:grid;grid-template-columns:var(--tbw-column-template);color:var(--tbw-color-header-fg);font-size:var(--tbw-font-size-header);min-height:var(--tbw-header-height);border-bottom:var(--tbw-border-header);z-index:var(--tbw-z-layer-header, 30);text-transform:var(--tbw-header-text-transform);letter-spacing:var(--tbw-header-letter-spacing);>.cell{display:flex;align-items:center;gap:4px;padding:var(--tbw-cell-padding-header, 2px 8px);background-color:var(--tbw-color-header-bg);font-weight:var(--tbw-font-weight-header);border-right:1px solid var(--tbw-color-border-cell);overflow:visible;min-width:0;>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:inherit}>span[part~=sort-indicator]{flex-shrink:0;opacity:.6;color:var(--tbw-sort-indicator-color);display:var(--tbw-sort-indicator-display, inline-flex);visibility:var(--tbw-sort-indicator-visibility, visible);transition:opacity .15s,visibility 0s,display 0s allow-discrete;transition-behavior:allow-discrete}&:hover>span[part~=sort-indicator]{display:inline-flex;visibility:visible}&[aria-sort=ascending]>span[part~=sort-indicator],&[aria-sort=descending]>span[part~=sort-indicator]{display:inline-flex;visibility:visible;opacity:1;color:var(--tbw-sort-indicator-active-color)}&:last-child{border-right:0;.resize-handle{right:0;width:calc(var(--tbw-resize-handle-width) / 2)}}&.grouped.group-end:not(:last-child){border-right:2px solid var(--tbw-color-border)}&.resizable{position:relative}&.sticky-left,&.sticky-right{background:var(--tbw-color-header-bg);z-index:35}}}.sortable{cursor:pointer;user-select:none}.resize-handle{position:absolute;top:0;right:calc(var(--tbw-resize-handle-width) / -2);width:var(--tbw-resize-handle-width);height:100%;cursor:e-resize;user-select:none;touch-action:none;z-index:20;background:var(--tbw-resize-handle-color);transition:background .12s ease;border-radius:var(--tbw-resize-handle-border-radius);&:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);width:var(--tbw-resize-indicator-width, 2px);height:0;background:var(--tbw-resize-indicator-color, var(--tbw-color-accent));opacity:0;pointer-events:none;transition:opacity .12s ease,height 0s .12s;z-index:1000}&:hover{background:var(--tbw-resize-handle-color-hover);&:after{height:100vh;opacity:var(--tbw-resize-indicator-opacity, .6);transition:opacity .12s ease,height 0s}}}}}\n@layer tbw-base{tbw-grid{.data-grid-row{display:grid;grid-template-columns:var(--tbw-column-template);contain:layout style;&:nth-child(2n){background:var(--tbw-color-row-alt)}&:hover{background:var(--tbw-color-row-hover)}>.cell{display:block;padding:var(--tbw-cell-padding, 2px 8px);border-bottom:var(--tbw-row-divider);min-height:var(--tbw-row-height);align-content:center;border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;min-width:0;white-space:var(--tbw-cell-white-space, nowrap);text-overflow:ellipsis;>*{overflow:hidden;text-overflow:ellipsis;white-space:inherit;min-width:0}&:last-child{border-right:0}&[data-type=boolean]{text-align:center;input[type=checkbox]{margin:0;width:var(--tbw-checkbox-size);height:var(--tbw-checkbox-size);vertical-align:middle}}&.selected:focus-visible,&:focus-visible:not(.cell-focus){outline:none}&.sticky-left,&.sticky-right{background:var(--tbw-color-panel-bg)}}}.selecting .data-grid-row>.cell{user-select:none}}}\n@layer tbw-base{tbw-grid{.tbw-shell-header{display:flex;align-items:center;gap:8px;min-height:var(--tbw-shell-header-height);padding:0 8px;background:var(--tbw-shell-header-bg);border-bottom:1px solid var(--tbw-shell-header-border);flex-shrink:0}.tbw-shell-title{font-size:var(--tbw-shell-title-font-size);font-weight:var(--tbw-shell-title-font-weight);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tbw-shell-content{flex:1;display:flex;align-items:center;gap:12px;min-width:0;overflow:hidden}.tbw-shell-toolbar{display:flex;align-items:center;gap:var(--tbw-toolbar-button-gap);flex-shrink:0}.tbw-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--tbw-toolbar-button-size);height:var(--tbw-toolbar-button-size);padding:0;border:1px solid transparent;border-radius:var(--tbw-border-radius);background:transparent;color:var(--tbw-color-fg);cursor:pointer;font-size:16px;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease),border-color var(--tbw-transition-duration) var(--tbw-transition-ease);&:hover{background:var(--tbw-color-row-hover)}&:focus-visible{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}&.active{background:var(--tbw-focus-background);border-color:var(--tbw-color-accent)}&:disabled{opacity:.5;cursor:not-allowed}}.tbw-toolbar-separator{width:1px;height:20px;background:var(--tbw-color-border);margin:0 4px}.tbw-shell-body{position:relative;display:flex;flex:1;min-height:0;overflow:visible}.tbw-grid-content{flex:1;min-width:0;min-height:0;display:flex;flex-direction:row;overflow:hidden}.tbw-scroll-area{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow-x:auto;overflow-y:hidden;overflow-anchor:none}}}\n@layer tbw-base{tbw-grid{.tbw-tool-panel{position:absolute;top:0;bottom:0;right:0;width:0;overflow:hidden;background:var(--tbw-tool-panel-bg);border-left:1px solid var(--tbw-tool-panel-border);transition:width var(--tbw-tool-panel-transition);display:flex;flex-direction:column;z-index:30;box-shadow:-2px 0 8px var(--tbw-color-shadow);&[data-position=left]{right:auto;left:0;border-left:none;border-right:1px solid var(--tbw-tool-panel-border);box-shadow:2px 0 8px var(--tbw-color-shadow)}&.open{width:var(--tbw-tool-panel-width)}}.tbw-tool-panel-resize{position:absolute;top:0;bottom:0;width:6px;cursor:col-resize;background:transparent;z-index:10;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease);&[data-handle-position=left]{left:0}&[data-handle-position=right]{right:0}&:hover,&.resizing{background:var(--tbw-color-accent)}}.tbw-tool-panel-header{display:flex;align-items:center;justify-content:space-between;min-height:var(--tbw-tool-panel-header-height);padding:0 12px;border-bottom:1px solid var(--tbw-tool-panel-border);flex-shrink:0}.tbw-tool-panel-title{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tbw-tool-panel-close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--tbw-border-radius);background:transparent;color:var(--tbw-color-fg-muted);cursor:pointer;font-size:14px;&:hover{background:var(--tbw-color-row-hover);color:var(--tbw-color-fg)}}.tbw-tool-panel-content{flex:1;overflow:auto}.tbw-accordion{display:flex;flex-direction:column;gap:0}.tbw-accordion-section{border-bottom:1px solid var(--tbw-tool-panel-border);&:last-child{border-bottom:none}&.single .tbw-accordion-header{cursor:default;&:hover{background:transparent}}&.expanded{.tbw-accordion-chevron{transform:rotate(90deg)}.tbw-accordion-content{display:block}}}.tbw-accordion-header{display:flex;align-items:center;gap:8px;width:100%;padding:10px 12px;border:none;background:transparent;color:var(--tbw-color-fg);font-size:13px;font-weight:600;text-align:start;cursor:pointer;user-select:none;&:hover{background:var(--tbw-color-row-hover)}}.tbw-accordion-chevron{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:10px;color:var(--tbw-color-fg-muted);transition:transform .15s ease;flex-shrink:0}.tbw-accordion-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:14px;flex-shrink:0}.tbw-accordion-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tbw-accordion-content{display:none}}}\n@layer tbw-base{.tbw-loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:1000;pointer-events:all;animation:tbw-fade-in .15s ease-out}.tbw-spinner{--tbw-spinner-size: 48px;--tbw-spinner-border-width: 3px;--tbw-spinner-color: var(--tbw-color-accent);--tbw-spinner-track-color: var(--tbw-color-border);width:var(--tbw-spinner-size);height:var(--tbw-spinner-size);border:var(--tbw-spinner-border-width) solid var(--tbw-spinner-track-color);border-top-color:var(--tbw-spinner-color);border-radius:50%;animation:tbw-spin .8s linear infinite}.tbw-spinner--large{--tbw-spinner-size: min(48px, calc(100% - 16px) )}.tbw-spinner--small{--tbw-spinner-size: calc(var(--tbw-row-height, 28px) * .6);--tbw-spinner-border-width: 2px}.data-grid-row.tbw-row-loading{position:relative;pointer-events:none}.tbw-row-loading-overlay{position:absolute;inset:0;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:26;animation:tbw-fade-in .15s ease-out;pointer-events:none;display:flex;align-items:center}.tbw-row-loading-spinner{--_spinner-size: calc(var(--tbw-row-height, 28px) * .6);margin-left:var(--tbw-spacing-md);width:var(--_spinner-size);height:var(--_spinner-size);border:2px solid var(--tbw-spinner-track-color, var(--tbw-color-border));border-top-color:var(--tbw-spinner-color, var(--tbw-color-accent));border-radius:50%;animation:tbw-spin .8s linear infinite}.cell.tbw-cell-loading{position:relative;pointer-events:none;&:before{content:"";position:absolute;inset:0;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:26;animation:tbw-fade-in .15s ease-out}&:after{--_spinner-size: calc(var(--tbw-row-height, 28px) * .5);content:"";position:absolute;left:var(--tbw-spacing-sm);top:0;bottom:0;margin:auto 0;width:var(--_spinner-size);height:var(--_spinner-size);border:2px solid var(--tbw-spinner-track-color, var(--tbw-color-border));border-top-color:var(--tbw-spinner-color, var(--tbw-color-accent));border-radius:50%;animation:tbw-spin .8s linear infinite;z-index:27}}}\n@layer tbw-base{tbw-grid{.tbw-expanding{animation:tbw-expand var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}.tbw-collapsing{animation:tbw-collapse var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}&[data-animation-mode=off]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms;.data-grid-row[data-animating]{animation:none}}}tbw-grid .data-grid-row[data-animating=change]{animation:tbw-row-change var(--tbw-row-change-duration) ease-out}tbw-grid .data-grid-row[data-animating=insert]{animation:tbw-row-insert var(--tbw-row-insert-duration) ease-out;will-change:max-height,opacity}tbw-grid .data-grid-row[data-animating=remove]{animation:tbw-row-remove var(--tbw-row-remove-duration) ease-out forwards;will-change:max-height,opacity,transform;pointer-events:none}}@keyframes tbw-expand{0%{opacity:0;max-height:0;transform:translateY(-8px)}to{opacity:1;max-height:500px;transform:translateY(0)}}@keyframes tbw-collapse{0%{opacity:1;max-height:500px;transform:translateY(0)}to{opacity:0;max-height:0;transform:translateY(-8px)}}@keyframes tbw-row-change{0%{background-color:transparent}20%{background-color:var(--tbw-row-change-color)}to{background-color:transparent}}@keyframes tbw-row-insert{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:var(--tbw-row-height, 28px);overflow:hidden}}@keyframes tbw-row-remove{0%{opacity:1;transform:translateY(0);max-height:var(--tbw-row-height, 28px)}to{opacity:0;max-height:0;transform:translateY(-8px)}}@keyframes tbw-spin{to{transform:rotate(360deg)}}@keyframes tbw-fade-in{0%{opacity:0}to{opacity:1}}\n@layer tbw-base{@media(forced-colors:active){tbw-grid{--tbw-color-border: CanvasText;--tbw-color-border-strong: CanvasText;--tbw-color-border-cell: CanvasText;--tbw-color-border-header: CanvasText;--tbw-color-fg: CanvasText;--tbw-color-bg: Canvas;--tbw-color-panel-bg: Canvas;--tbw-color-header-bg: Canvas;--tbw-color-header-fg: CanvasText;--tbw-color-accent: Highlight;--tbw-color-accent-fg: HighlightText;--tbw-color-selection: Highlight;--tbw-color-row-hover: Highlight;--tbw-focus-outline: 2px solid Highlight;--tbw-range-border-color: Highlight;.cell:focus,.cell.active-cell{outline:2px solid Highlight!important;outline-offset:-2px}.data-grid-row[aria-selected=true]{background:Highlight!important;color:HighlightText!important}}}@media(prefers-reduced-motion:reduce){tbw-grid[data-animation-mode=reduced-motion]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms;.data-grid-row[data-animating]{animation:none}}}}\n')}getPlugin(e){return this.#K?.getPlugin(e)}getPluginByName(e){return this.#K?.getPluginByName(e)}requestRender(){this.#I.requestPhase(fe.ROWS,"plugin:requestRender")}requestColumnsRender(){this.#I.requestPhase(fe.COLUMNS,"plugin:requestColumnsRender")}requestRenderWithFocus(){this._restoreFocusAfterRender=!0,this.#I.requestPhase(fe.ROWS,"plugin:requestRenderWithFocus")}updateTemplate(){c(this)}requestAfterRender(){this.#I.requestPhase(fe.STYLE,"plugin:requestAfterRender")}requestVirtualRefresh(){this._virtualization.start=-1,this.refreshVirtualWindow(!1)}#Te(){this.#K=new lt(this);const e=this.#s?.plugins,t=Array.isArray(e)?e:[],i=this.#s?.features;let o=[];i&&Z&&(o=Z(i));const n=o.length>0?[...o,...t]:t;this.#K.attachAll(n)}#He(){!function(e){let t=!1;for(const{name:i,styles:o}of e)Ue.has(i)||(Ue.set(i,o),t=!0);t&&Ve()}(this.#K?.getPluginStyles()??[])}#be(){const e=this.#s?.plugins,t=Array.isArray(e)?e:[],i=this.#s?.features??void 0,o=i!==this.#Q;if((this.#Z===t||void 0!==this.#Z&&this.#Z.length===t.length&&this.#Z.every((e,i)=>e===t[i]))&&!o)return void(this.#Z=t);this.#K&&this.#K.detachAll();for(const r of this.#ie.toolPanels.keys()){const e=this.#ie.lightDomToolPanelIds.has(r),t=this.#ie.apiToolPanelIds.has(r);if(!e&&!t){const e=this.#ie.panelCleanups.get(r);e&&(e(),this.#ie.panelCleanups.delete(r)),this.#ie.toolPanels.delete(r)}}for(const r of this.#ie.headerContents.keys()){const e=this.#ie.headerContentCleanups.get(r);e&&(e(),this.#ie.headerContentCleanups.delete(r)),this.#ie.headerContents.delete(r)}this.#Te(),this.#He(),this.#Z=t,this.#Q=i,this.#Me(),this.#Pe();const n=this.#$;if(this.#$=this.#K?.getAll().some(e=>e.onScroll)??!1,!n&&this.#$){const e=this.#M.querySelector(".tbw-grid-content")??this.#M.querySelector(".tbw-grid-root");this.#Le(e)}}#ze(){this.#K?.detachAll()}#Pe(){if(!this.#K)return;const e=this.#K.getToolPanels();for(const{panel:i}of e)this.#ie.toolPanels.has(i.id)||this.#ie.toolPanels.set(i.id,i);const t=this.#K.getHeaderContents();for(const{content:i}of t)this.#ie.headerContents.has(i.id)||this.#ie.headerContents.set(i.id,i)}#ke(){const e=at.getAdapters();if(0===e.length&&!this.__frameworkAdapter)return;const t=this.__frameworkAdapter;return i=>{if(t?.createToolPanelRenderer){const e=t.createToolPanelRenderer(i);if(e)return e}for(const t of e)if(t.createToolPanelRenderer){const e=t.createToolPanelRenderer(i);if(e)return e}}}connectedCallback(){this.hasAttribute("tabindex")||(this.tabIndex=0),this.hasAttribute("version")||this.setAttribute("version",at.version),this.id||(this.id="tbw-grid-"+ ++at.#H),this._rows=Array.isArray(this.#L)?[...this.#L]:[],this.#B&&(this.#B.abort(),this.#J=!1),this.#B=new AbortController,this.#Y&&(he(this.#Y),this.#Y=void 0),this.#Oe(),this.#z.parseLightDomColumns(this),this.#z.merge(),this.#Te();const e=this.#s?.plugins;var t,i;this.#Z=Array.isArray(e)?e:[],this.#Q=this.#s?.features??void 0,this.#Pe(),this.#P||(this.#De(),this.#He(),this.#P=!0),this.#Ie(),this.#Y=(t=()=>{this.#Ne()},i={timeout:100},de?requestIdleCallback(t,i):window.setTimeout(()=>{const e=Date.now();t({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-e))})},1))}disconnectedCallback(){this.#Y&&(he(this.#Y),this.#Y=void 0),this.#F&&(clearTimeout(this.#F),this.#F=0),this.#ze(),function(e){for(const t of e.headerContentCleanups.values())t();e.headerContentCleanups.clear();for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.toolbarContentCleanups.values())t();e.toolbarContentCleanups.clear();for(const t of e.toolbarContents.values())t.onDestroy?.();if(e.isPanelOpen)for(const t of e.expandedSections){const i=e.toolPanels.get(t);i?.onClose?.()}e.isPanelOpen=!1,e.expandedSections.clear(),e.toolPanels.clear(),e.headerContents.clear(),e.toolbarContents.clear(),e.lightDomHeaderContent=[],e.lightDomToolPanelIds.clear(),e.lightDomToolbarContentIds.clear(),e.lightDomContentMoved=!1}(this.#ie),this.#oe.setInitialized(!1),this.#ne?.(),this.#ne=void 0,this.#re?.(),this.#re=void 0,Ge(this.#V),this.#B&&(this.#B.abort(),this.#B=void 0),this.#ee?.abort(),this.#ee=void 0,this.#J=!1,this._resizeController&&this._resizeController.dispose(),this.#G&&(this.#G.disconnect(),this.#G=void 0),this.#X&&(this.#X.disconnect(),this.#X=void 0,this.#_e=!1),F(this),this.#qe.clear(),this.#Z=void 0,this.#Q=void 0;for(const e of this._rowPool)e.remove();this._rowPool.length=0,this.__rowsBodyEl=null,this.#k=!1}attributeChangedCallback(e,t,i){if("loading"===e){const e=null!==i&&"false"!==i;return void(this.loading!==e&&(this.loading=e))}if(t!==i&&i&&"null"!==i&&"undefined"!==i)if("rows"===e||"columns"===e||"grid-config"===e)try{const t=JSON.parse(i);"rows"===e?this.rows=t:"columns"===e?this.columns=t:"grid-config"===e&&(this.gridConfig=t)}catch{console.warn(`[tbw-grid] Invalid JSON for '${e}' attribute:`,i)}else"fit-mode"===e&&(this.fitMode=i)}#Ie(){const e=this.#M.querySelector(".tbw-grid-content")??this.#M.querySelector(".tbw-grid-root");if(this._headerRowEl=e?.querySelector(".header-row"),this._virtualization.totalHeightEl=e?.querySelector(".faux-vscroll-spacer"),this._virtualization.viewportEl=e?.querySelector(".rows-viewport"),this._bodyEl=e?.querySelector(".rows"),this.__rowsBodyEl=e?.querySelector(".rows-body"),this.#oe.isInitialized){ke(this.#M,this.#ie),ze(this.#M,this.#s?.shell,this.#ie);const e=this.#s?.shell?.toolPanel?.defaultOpen;e&&this.#ie.toolPanels.has(e)&&(this.openToolPanel(),this.#ie.expandedSections.add(e))}if(this.setAttribute("data-upgraded",""),this.#k=!0,this._resizeController=we(this),this.#xe(),this.#Le(e),this.#J)return;this.#J=!0;const t=this.disconnectSignal;K(this,this,this.#M,t),this.#Me(),queueMicrotask(()=>this.#$e()),this.#I.requestPhase(fe.FULL,"afterConnect")}#Me(){const e=this.#s.rowHeight,t=this.#K.hasRowHeightPlugin();"function"==typeof e||t?this._virtualization.variableHeights||(this._virtualization.variableHeights=!0,this._virtualization.rowHeight="number"==typeof e&&e>0?e:this._virtualization.rowHeight||28,this.#We(),"function"!=typeof e&&(this.#W=!0)):!t&&"function"!=typeof e&&this._virtualization.variableHeights?(this._virtualization.variableHeights=!1,this._virtualization.positionCache=null):"number"==typeof e&&e>0?(this._virtualization.rowHeight=e,this._virtualization.variableHeights=!1):requestAnimationFrame(()=>this.#Fe())}#Fe(){if(this.#K.hasExtraHeight())return;const e=this._bodyEl?.querySelector(".data-grid-row");if(!e)return;const t=e.querySelectorAll(".cell");let i=0;t.forEach(e=>{const t=e.offsetHeight;t>i&&(i=t)});const o=e.getBoundingClientRect(),n=Math.max(o.height,i);n>0&&n-this._virtualization.rowHeight>1&&(this._virtualization.rowHeight=n,this.#I.requestPhase(fe.VIRTUALIZATION,"measureRowHeight"))}#Re(){const e=this._bodyEl?.querySelector(".data-grid-row");if(!e)return;const t=e.querySelectorAll(".cell");let i=0;t.forEach(e=>{const t=e.offsetHeight;t>i&&(i=t)});const o=e.getBoundingClientRect(),n=Math.max(o.height,i);if(n>0){if(Math.abs(n-this._virtualization.rowHeight)>1&&(this._virtualization.rowHeight=n),this.#We(),this._virtualization.totalHeightEl){const e=this.#ye(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`}}}#Le(e){this.#ee?.abort(),this.#ee=new AbortController;const t=this.#ee.signal,i=e?.querySelector(".faux-vscroll"),o=e?.querySelector(".rows");if(this._virtualization.container=i??this,this.#$=this.#K?.getAll().some(e=>e.onScroll)??!1,i&&o){i.addEventListener("scroll",()=>{if(!this._virtualization.enabled&&!this.#$)return;const e=i.scrollTop,t=this._virtualization.rowHeight;if(this._rows.length<=this._virtualization.bypassThreshold)o.style.transform=`translateY(${-e}px)`;else{const i=this._virtualization.positionCache;let n,r;if(this._virtualization.variableHeights&&i&&i.length>0){n=ot(i,e),-1===n&&(n=0);const o=n-n%2;r=i[o]?.offset??o*t}else{n=Math.floor(e/t);r=(n-n%2)*t}const s=-(e-r);o.style.transform=`translateY(${s}px)`}this.#q=e,this.#N||(this.#N=requestAnimationFrame(()=>{this.#N=0,null!==this.#q&&(this.#Ue(this.#q),this.#q=null)}))},{passive:!0,signal:t});const e=this.#M.querySelector(".tbw-scroll-area");this.#te=e,this._virtualization.scrollAreaEl=e,e&&this.#$&&e.addEventListener("scroll",()=>{const t=this.#j;t.scrollTop=i.scrollTop,t.scrollLeft=e.scrollLeft,t.scrollHeight=i.scrollHeight,t.scrollWidth=e.scrollWidth,t.clientHeight=i.clientHeight,t.clientWidth=e.clientWidth,this.#K?.onScroll(t)},{passive:!0,signal:t});const n=this.#M.querySelector(".tbw-grid-content"),r=this.#te;n&&(n.addEventListener("wheel",e=>{const t=e.shiftKey||Math.abs(e.deltaX)>Math.abs(e.deltaY);if(t&&r){const t=e.shiftKey?e.deltaY:e.deltaX,{scrollLeft:i,scrollWidth:o,clientWidth:n}=r;(t>0&&i<o-n||t<0&&i>0)&&(e.preventDefault(),r.scrollLeft+=t)}else if(!t){const{scrollTop:t,scrollHeight:o,clientHeight:n}=i;(e.deltaY>0&&t<o-n||e.deltaY<0&&t>0)&&(e.preventDefault(),i.scrollTop+=e.deltaY)}},{passive:!1,signal:t}),Ye(n,this.#V,{fauxScrollbar:i,scrollArea:r},t))}var n,r,s;this._bodyEl&&(n=this,r=this._bodyEl,s=t,r.addEventListener("mousedown",e=>{const t=e.target.closest(".cell[data-col]");if(!t)return;if(t.classList.contains("editing"))return;const i=e.target;i.draggable||i.closest('[draggable="true"]')||e.preventDefault(),Y(n,t)},{signal:s}),r.addEventListener("click",e=>{const t=e.target.closest(".data-grid-row");if(t&&B(n,e,t),!document.activeElement?.closest(".cell.editing")){const t=e.target.closest("tbw-grid");t&&t.focus({preventScroll:!0})}},{signal:s}),r.addEventListener("dblclick",e=>{const t=e.target.closest(".data-grid-row");t&&B(n,e,t)},{signal:s})),this.#G?.disconnect(),this._virtualization.viewportEl&&(this.#G=new ResizeObserver(()=>{this.#Ve(),this.#I.requestPhase(fe.VIRTUALIZATION,"resize-observer")}),this.#G.observe(this._virtualization.viewportEl)),this.#M.addEventListener("focusin",()=>{this.dataset.hasFocus=""},{signal:t}),this.#M.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&(this.#M.contains(t)||this.#Be(t))||delete this.dataset.hasFocus},{signal:t})}#_e=!1;#Se(){if(this.#_e)return;const e=this._bodyEl?.querySelector(".data-grid-row");e&&(this.#_e=!0,this.#X?.disconnect(),this.#X=new ResizeObserver(()=>{this.#Fe()}),this.#X.observe(e))}addEventListener(e,t,i){super.addEventListener(e,t,i)}removeEventListener(e,t,i){super.removeEventListener(e,t,i)}on(e,t){const i=e=>{t(e.detail,e)};return this.addEventListener(e,i),()=>this.removeEventListener(e,i)}#Ee(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}#$e(){const e=this._bodyEl?.querySelectorAll(".data-grid-row");e?.forEach((e,t)=>{const i=t===this._focusRow;e.setAttribute("aria-selected",String(i)),e.querySelectorAll(".cell").forEach((e,t)=>{e.setAttribute("aria-selected",String(i&&t===this._focusCol))})})}#ue(e){this.#D[e]=!0,this.#O||(this.#O=!0,queueMicrotask(()=>this.#Ge()))}#Ge(){if(!this.#O||!this.#k)return void(this.#O=!1);const e=this.#D;if(this.#O=!1,this.#D={rows:!1,columns:!1,gridConfig:!1,fitMode:!1},e.gridConfig)return this.#Xe(),void(e.rows&&this.#Ye());e.columns&&this.#je(),e.rows&&this.#Ye(),e.fitMode&&this.#Ke()}#Ye(){this._rows=Array.isArray(this.#L)?[...this.#L]:[],this.#Ze(),this.#I.requestPhase(fe.ROWS,"applyRowsUpdate")}#Ze(){this.#de.clear();const e=this.#s.getRowId;this._rows.forEach((t,i)=>{const o=this.#Qe(t,e);void 0!==o&&this.#de.set(o,{row:t,index:i})})}#Qe(e,t){if(t)return t(e);const i=e;return"id"in i&&null!=i.id?String(i.id):"_id"in i&&null!=i._id?String(i._id):void 0}#Je(e,t){const i=this.#Qe(e,t);if(void 0===i)throw new Error('[tbw-grid] Cannot determine row ID. Configure getRowId in gridConfig or ensure rows have an "id" property.');return i}#je(){F(this),this.#z.merge(),this.#xe()}#Ke(){this.#z.merge();"fixed"===this.#s.fitMode?(this.__didInitialAutoSize=!1,s(this)):(this._columns.forEach(e=>{!e.__userResized&&e.__autoSized&&delete e.width}),c(this))}#Xe(){Me(this,this.#ie),Pe(this,this.#ie);const e=!!this.#M.querySelector(".has-shell"),t=!!this.#M.querySelector(".tbw-tool-panel"),i=this.#M.querySelectorAll(".tbw-accordion-section").length;this.#z.parseLightDomColumns(this),this.#z.merge(),this.#be(),Le(this,this.#ie,this.#ke()),this.#z.markSourcesChanged(),this.#z.merge();const o=He(this.#s?.shell),n=(this.#s?.shell?.toolPanels?.length??0)>0,r=this.#s?.shell?.toolPanels?.length??0;if(e!==o||!t&&n||t&&r!==i)return Ie(this.#ie),this.#De(),this.#He(),this.#Ie(),void this.#Ze();e&&this.#et(),this.#Ze(),this.#I.requestPhase(fe.COLUMNS,"applyGridConfigUpdate")}#et(){const e=this.#M.querySelector(".tbw-shell-header");if(!e)return;const t=this.#s.shell?.header?.title??this.#ie.lightDomTitle;let i=e.querySelector(".tbw-shell-title");t?(i||(i=document.createElement("h2"),i.className="tbw-shell-title",i.setAttribute("part","shell-title"),e.insertBefore(i,e.firstChild)),i.textContent=t):i&&i.remove()}#ve(){if(this.__rowRenderEpoch++,this.#K){const e=this.#he.length>0?this.#he:this._columns,t=e.filter(e=>!e.hidden),i=e.filter(e=>e.hidden),o=this.#K.processColumns([...t]);if(o!==t){const n=new Set(o.map(e=>e.field));!t.some(e=>n.has(e.field))&&o.length>0?this._columns=[...o,...i]:this._columns=this.#tt(e,o,i)}else this._columns=[...e]}}#tt(e,t,i){if(0===i.length)return t;const o=/* @__PURE__ */new Map;for(const l of t)o.set(l.field,l);const n=new Set(e.map(e=>e.field)),r=[];for(const l of t)n.has(l.field)||r.push(l);const s=[];for(const l of e){const e=o.get(l.field);e?s.push(e):l.hidden&&s.push(l)}return s.push(...r),s}#Ce(){F(this);const e=function(e,t){if(!e._sortState)return t;e.__originalOrder=[...t];const i=(e.effectiveConfig?.sortHandler??ee)(t,e._sortState,e._columns);return i&&"function"==typeof i.then?t:i}(this,Array.isArray(this.#L)?[...this.#L]:[]),t=this.#K?.processRows(e)??e;this._rows=t,this.#Ze(),this._virtualization.variableHeights&&this.#We()}#Ae(e){const i={...t,...e.animation},o=i.mode??"reduced-motion";let n=1;!1===o||"off"===o?n=0:!0!==o&&"on"!==o||(n=1),this.style.setProperty("--tbw-animation-duration",`${i.duration}ms`),this.style.setProperty("--tbw-animation-easing",i.easing??"ease-out"),this.style.setProperty("--tbw-animation-enabled",String(n)),this.dataset.animationMode="boolean"==typeof o?o?"on":"off":o}#it(e,t,i=this.__rowRenderEpoch){if(this.#U||(this.#U=(e,t,i)=>this.#K?.renderRow(e,t,i)??!1),function(e,t,i,o,n){const r=Math.max(0,i-t),s=e._bodyEl,l=e._visibleColumns,a=l.length;let c=e.__cachedHeaderRowCount;for(void 0===c&&(c=e.querySelector(".header-group-row")?2:1,e.__cachedHeaderRowCount=c);e._rowPool.length<r;){const t=W();e._rowPool.push(t)}if(e._rowPool.length>r){for(let t=r;t<e._rowPool.length;t++){const i=e._rowPool[t];i.parentNode===s&&i.remove()}e._rowPool.length=r}const d=n&&!1!==e.__hasRenderRowPlugins,h=e._hasAfterRowRenderHook?.()??!1;for(let g=0;g<r;g++){const i=t+g,r=e._rows[i],f=e._rowPool[g];if(f.setAttribute("aria-rowindex",String(i+c+1)),d&&n(r,f,i)){f.__epoch=o,f.__rowDataRef=r,f.parentNode!==s&&s.appendChild(f);continue}const p=f.__epoch,w=f.__rowDataRef;let b=f.children.length;b>a&&f.lastElementChild?.classList.contains("tbw-row-loading-overlay")&&b--;const m=p===o&&b===a,v=w!==r,C=!!e._isGridEditMode;let y=!1;if(m&&v)for(let e=0;e<a;e++)if(l[e].externalView&&!f.querySelector(`.cell[data-col="${e}"] [data-external-view]`)){y=!0;break}if(!m||y){const t=D(f),n=C||e._activeEditRows===i;t&&!n?(f.__isCustomRow&&(f.className="data-grid-row",f.setAttribute("role","row"),f.__isCustomRow=!1),I(f),V(e,f,r,i),f.__epoch=o,f.__rowDataRef=r):t&&n?(U(e,f,r,i),f.__rowDataRef=r):(f.__isCustomRow&&(f.className="data-grid-row",f.setAttribute("role","row"),f.__isCustomRow=!1),V(e,f,r,i),f.__epoch=o,f.__rowDataRef=r)}else if(v){const t=D(f),n=C||e._activeEditRows===i;t&&!n?(I(f),V(e,f,r,i),f.__epoch=o,f.__rowDataRef=r):(U(e,f,r,i),f.__rowDataRef=r)}else{const t=D(f),n=C||e._activeEditRows===i;t&&!n?(I(f),V(e,f,r,i),f.__epoch=o,f.__rowDataRef=r):U(e,f,r,i)}let _=!1;const S=e.changedRowIds;if(S&&S.length>0)try{const t=e.getRowId?.(r);t&&(_=S.includes(t))}catch{}_!==f.classList.contains("changed")&&f.classList.toggle("changed",_);const R=e.effectiveConfig?.rowClass;if(R){const e=f.getAttribute("data-dynamic-classes");e&&e.split(" ").forEach(e=>e&&f.classList.remove(e));try{const e=R(r);if(e&&e.length>0){const t=e.filter(e=>e&&"string"==typeof e);t.forEach(e=>f.classList.add(e)),f.setAttribute("data-dynamic-classes",t.join(" "))}else f.removeAttribute("data-dynamic-classes")}catch(u){console.warn("[tbw-grid] rowClass callback error:",u),f.removeAttribute("data-dynamic-classes")}}h&&e._afterRowRender?.({row:r,rowIndex:i,rowElement:f}),f.parentNode!==s&&s.appendChild(f)}}(this,e,t,i,this.#U),this.#le.size>0)for(const o of this.#le)this.#fe(o,!0)}#ot={rowCount:-1,colCount:-1,ariaLabel:void 0,ariaDescribedBy:void 0};#nt(e,t){!function(e,t,i,o,n){if(o===e.rowCount&&n===e.colCount)return!1;const r=e.rowCount;e.rowCount=o,e.colCount=n,t&&(t.setAttribute("aria-rowcount",String(o)),t.setAttribute("aria-colcount",String(n))),o!==r&&i&&(o>0?i.setAttribute("role","rowgroup"):i.removeAttribute("role"))}(this.#ot,this.__rowsBodyEl,this._bodyEl,e,t)}#me(){!function(e,t,i,o){if(!t)return!1;let n=!1;const r=function(e,t){const i=e?.gridAriaLabel;return i||(e?.shell?.header?.title??t?.lightDomTitle??void 0)}(i,o);r!==e.ariaLabel&&(e.ariaLabel=r,r?t.setAttribute("aria-label",r):t.removeAttribute("aria-label"),n=!0);const s=i?.gridAriaDescribedBy;s!==e.ariaDescribedBy&&(e.ariaDescribedBy=s,s?t.setAttribute("aria-describedby",s):t.removeAttribute("aria-describedby"),n=!0)}(this.#ot,this.__rowsBodyEl,this.#s,this.#ie)}#ge(){const e=this.querySelector(".tbw-grid-root");var t;e&&(this.#se?(this.#ce||(this.#ce=function(e){const t=document.createElement("div");return t.className="tbw-loading-overlay",t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.appendChild(ue("large",e)),t}(this.#s?.loadingRenderer)),function(e,t){e.appendChild(t)}(e,this.#ce)):(t=this.#ce,t?.remove()))}#fe(e,t){const i=this.#de.get(e);if(!i)return;const o=this.findRenderedRowElement?.(i.index);o&&function(e,t){if(t){if(e.classList.add("tbw-row-loading"),e.setAttribute("aria-busy","true"),!e.querySelector(".tbw-row-loading-overlay")){const t=document.createElement("div");t.className="tbw-row-loading-overlay",t.setAttribute("aria-hidden","true");const i=document.createElement("div");i.className="tbw-row-loading-spinner",t.appendChild(i),e.appendChild(t)}}else e.classList.remove("tbw-row-loading"),e.removeAttribute("aria-busy"),e.querySelector(".tbw-row-loading-overlay")?.remove()}(o,t)}#pe(e,t,i){const o=this.#de.get(e);if(!o)return;const n=this.findRenderedRowElement?.(o.index);if(!n)return;const r=this._visibleColumns.findIndex(e=>e.field===t);if(r<0)return;const s=n.children[r];s&&function(e,t){t?(e.classList.add("tbw-cell-loading"),e.setAttribute("aria-busy","true")):(e.classList.remove("tbw-cell-loading"),e.removeAttribute("aria-busy"))}(s,i)}#xe(){if(this.isConnected&&this._headerRowEl&&this._bodyEl){if(this.#z.parseLightDomColumns(this),this.#h){const e=this.#h;this.#h=void 0,this.#z.merge();const t=this.#K?.getAll()??[];this.#z.applyState(e,t)}this._bodyEl&&(this._bodyEl.style.display="",this._bodyEl.style.gridTemplateColumns=""),this.#I.requestPhase(fe.FULL,"setup")}}#Ue(e){let t=0,i=0,o=0,n=0,r=0;if(this.#$){const e=this._virtualization.container,s=this.#te;t=s?.scrollLeft??0,i=e?.scrollHeight??0,o=s?.scrollWidth??0,n=e?.clientHeight??0,r=s?.clientWidth??0}if(this.refreshVirtualWindow(!1)&&this.#K?.onScrollRender(),this._virtualization.variableHeights&&(this.#F&&clearTimeout(this.#F),this.#F=window.setTimeout(()=>{this.#F=0,this.#rt(this._virtualization.start,this._virtualization.end)},100)),this.#$){const s=this.#j;s.scrollTop=e,s.scrollLeft=t,s.scrollHeight=i,s.scrollWidth=o,s.clientHeight=n,s.clientWidth=r,this.#K?.onScroll(s)}}findHeaderRow(){return this.#M.querySelector(".header-row")}findRenderedRowElement(e){return Array.from(this._bodyEl.querySelectorAll(".data-grid-row")).find(t=>{const i=t.querySelector(".cell[data-row]");return i&&Number(i.getAttribute("data-row"))===e})||null}_dispatchCellClick(e,t,i,o){const n=this._rows[t],r=this._visibleColumns[i];if(!n||!r)return!1;const s=r.field,l=n[s],a=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,composed:!0,detail:{rowIndex:t,colIndex:i,column:r,field:s,value:l,row:n,cellEl:o,trigger:"pointer",originalEvent:e}});if(this.dispatchEvent(a),a.defaultPrevented)return!0;const c={row:n,rowIndex:t,colIndex:i,column:r,field:s,value:l,cellEl:o,originalEvent:e},d=this.#K?.onCellClick(c)??!1;return this.#Ee("cell-click",c),d}_dispatchRowClick(e,t,i,o){if(!i)return!1;const n={rowIndex:t,row:i,rowEl:o,originalEvent:e},r=this.#K?.onRowClick(n)??!1;return this.#Ee("row-click",n),r}_dispatchHeaderClick(e,t,i){if(!t)return!1;const o={colIndex:this._columns.indexOf(t),field:t.field,column:t,headerEl:i,originalEvent:e};return this.#K?.onHeaderClick(o)??!1}_dispatchKeyDown(e){return this.#K?.onKeyDown(e)??!1}_getHorizontalScrollOffsets(e,t){return this.#K?.getHorizontalScrollOffsets(e,t)??{left:0,right:0}}queryPlugins(e){return this.#K?.queryPlugins(e)??[]}query(e,t){return this.#K?.queryPlugins({type:e,context:t})??[]}_dispatchCellMouseDown(e){return this.#K?.onCellMouseDown(e)??!1}_dispatchCellMouseMove(e){this.#K?.onCellMouseMove(e)}_dispatchCellMouseUp(e){this.#K?.onCellMouseUp(e)}_afterCellRender(e){this.#K?.afterCellRender(e)}_hasAfterCellRenderHook(){return this.#K?.hasAfterCellRenderHook()??!1}_afterRowRender(e){this.#K?.afterRowRender(e)}_hasAfterRowRenderHook(){return this.#K?.hasAfterRowRenderHook()??!1}async ready(){return this.#S}async forceLayout(){return this.#I.requestPhase(fe.FULL,"forceLayout"),this.#I.whenReady()}async getConfig(){return Object.freeze({...this.#s||{}})}getRowId(e){return this.#Je(e,this.#s.getRowId)}getRow(e){return this.#de.get(e)?.row}_getRowEntry(e){return this.#de.get(e)}updateRow(e,t,i="api"){const o=this.#de.get(e);if(!o)throw new Error(`[tbw-grid] Row with ID "${e}" not found. Ensure the row exists and getRowId is correctly configured.`);const{row:n,index:r}=o,s=[];for(const[l,a]of Object.entries(t)){const e=n[l];e!==a&&(s.push({field:l,oldValue:e,newValue:a}),n[l]=a)}for(const{field:l,oldValue:a,newValue:c}of s)this.#Ee("cell-change",{row:n,rowId:e,rowIndex:r,field:l,oldValue:a,newValue:c,changes:t,source:i});s.length>0&&(F(this),this.#I.requestPhase(fe.VIRTUALIZATION,"updateRow"))}updateRows(e,t="api"){let i=!1;for(const{id:o,changes:n}of e){const e=this.#de.get(o);if(!e)throw new Error(`[tbw-grid] Row with ID "${o}" not found. Ensure the row exists and getRowId is correctly configured.`);const{row:r,index:s}=e;for(const[l,a]of Object.entries(n)){const e=r[l];e!==a&&(i=!0,r[l]=a,this.#Ee("cell-change",{row:r,rowId:o,rowIndex:s,field:l,oldValue:e,newValue:a,changes:n,source:t}))}}i&&(F(this),this.#I.requestPhase(fe.VIRTUALIZATION,"updateRows"))}animateRow(e,t){return ye(this,e,t)}animateRows(e,t){return function(e,t,i){return Promise.all(t.map(t=>ye(e,t,i))).then(e=>e.filter(Boolean).length)}(this,e,t)}animateRowById(e,t){return function(e,t,i){const o=e._rows??[],n=e.getRowId;if(!n)return Promise.resolve(!1);const r=o.findIndex(e=>{if(null==e)return!1;try{return n(e)===t}catch{return!1}});return r<0?Promise.resolve(!1):ye(e,r,i)}(this,e,t)}async insertRow(e,t,i=!0){const o=Math.max(0,Math.min(e,this._rows.length));this.#L=[...this.#L,t];const n=[...this._rows];n.splice(o,0,t),this._rows=n,this._sortState&&(this.__originalOrder=[...this.__originalOrder,t]),F(this),this.#Ze(),this.__rowRenderEpoch++;for(const r of this._rowPool)r.__epoch=-1;this.refreshVirtualWindow(!0),this.#K?.emitPluginEvent("row-inserted",{row:t,index:o}),i&&(await new Promise(e=>requestAnimationFrame(()=>e())),await this.animateRow(o,"insert"))}async removeRow(e,t=!0){const i=this._rows[e];if(!i)return;t&&await this.animateRow(e,"remove");const o=this._rows.indexOf(i);if(o<0)return i;const n=[...this._rows];n.splice(o,1),this._rows=n;const r=this.#L.indexOf(i);if(r>=0){const e=[...this.#L];e.splice(r,1),this.#L=e}if(this._sortState){const e=this.__originalOrder.indexOf(i);if(e>=0){const t=[...this.__originalOrder];t.splice(e,1),this.__originalOrder=t}}F(this),this.#Ze(),this.__rowRenderEpoch++;for(const s of this._rowPool)s.__epoch=-1;return this.refreshVirtualWindow(!0),t&&requestAnimationFrame(()=>{this.querySelectorAll('[data-animating="remove"]').forEach(e=>{e.removeAttribute("data-animating")})}),i}suspendProcessing(){}focusCell(e,t){const i=this._rows.length-1;if(i<0)return;let o;if("string"==typeof t){if(o=this._visibleColumns.findIndex(e=>e.field===t),o<0)return}else o=t;const n=this._visibleColumns.length-1;n<0||(this._focusRow=Math.max(0,Math.min(e,i)),this._focusCol=Math.max(0,Math.min(o,n)),G(this))}get focusedCell(){if(0===this._rows.length||0===this._visibleColumns.length)return null;const e=this._visibleColumns[this._focusCol];return{rowIndex:this._focusRow,colIndex:this._focusCol,field:e?.field??""}}scrollToRow(e,t){const i=this._virtualization;if(!i.enabled)return;const o=i.container;if(!o)return;const n=this._rows.length;if(0===n)return;const r=Math.max(0,Math.min(e,n-1)),s=t?.align??"nearest",l=t?.behavior??"instant";let a,c;const d=i.positionCache;i.variableHeights&&d&&d.length>r?(a=d[r].offset,c=d[r].height):(a=r*i.rowHeight,c=i.rowHeight);const h=i.viewportEl?.clientHeight??o.clientHeight??0;if(h<=0)return;const u=o.scrollTop,g=a+c,f=u+h;let p;switch(s){case"start":p=a;break;case"center":p=a-h/2+c/2;break;case"end":p=g-h;break;default:if(a>=u&&g<=f)return;p=a<u?a:g-h}p=Math.max(0,p),"smooth"===l?o.scrollTo({top:p,behavior:"smooth"}):o.scrollTop=p}scrollToRowById(e,t){const i=this.#de.get(e);i&&this.scrollToRow(i.index,t)}setColumnVisible(e,t){const i=this.#z.setColumnVisible(e,t);return i&&this.requestStateChange(),i}toggleColumnVisibility(e){const t=this.#z.toggleColumnVisibility(e);return t&&this.requestStateChange(),t}isColumnVisible(e){return this.#z.isColumnVisible(e)}showAllColumns(){this.#z.showAllColumns(),this.requestStateChange()}getAllColumns(){return this.#z.getAllColumns()}setColumnOrder(e){this.#z.setColumnOrder(e),this.requestStateChange()}getColumnOrder(){return this.#z.getColumnOrder()}getColumnState(){const e=this.#K?.getAll()??[];return this.#z.collectState(e)}set columnState(e){e&&(this.#h=e,this.#z.initialColumnState=e,this.#P&&this.#st(e))}get columnState(){return this.getColumnState()}#st(e){const t=this.#K?.getAll()??[];this.#z.applyState(e,t),this.#xe()}requestStateChange(){const e=this.#K?.getAll()??[];this.#z.requestStateChange(e)}resetColumnState(){this.#h=void 0,this.__originalOrder=[];const e=this.#K?.getAll()??[];this.#z.resetState(e),this.#z.merge(),this.#xe()}get isToolPanelOpen(){return this.#oe.isPanelOpen}get defaultRowHeight(){return this._virtualization.rowHeight}get expandedToolPanelSections(){return this.#oe.expandedSections}openToolPanel(){this.#oe.openToolPanel()}closeToolPanel(){this.#oe.closeToolPanel()}toggleToolPanel(){this.#oe.toggleToolPanel()}toggleToolPanelSection(e){this.#oe.toggleToolPanelSection(e)}getToolPanels(){return this.#oe.getToolPanels()}registerToolPanel(e){this.#ie.apiToolPanelIds.add(e.id),this.#oe.registerToolPanel(e)}unregisterToolPanel(e){this.#ie.apiToolPanelIds.delete(e),this.#oe.unregisterToolPanel(e)}getHeaderContents(){return this.#oe.getHeaderContents()}registerHeaderContent(e){this.#oe.registerHeaderContent(e)}unregisterHeaderContent(e){this.#oe.unregisterHeaderContent(e)}getToolbarContents(){return this.#oe.getToolbarContents()}registerToolbarContent(e){this.#oe.registerToolbarContent(e)}unregisterToolbarContent(e){this.#oe.unregisterToolbarContent(e)}#lt=!1;refreshShellHeader(){this.#lt||(this.#lt=!0,queueMicrotask(()=>{this.#lt=!1,this.isConnected&&(this.#Oe(),this.#z.markSourcesChanged(),this.#z.merge(),Ie(this.#ie),this.#De(),this.#He(),this.#at())}))}#at(){const e=this.#M.querySelector(".tbw-grid-content")??this.#M.querySelector(".tbw-grid-root");if(this._headerRowEl=e?.querySelector(".header-row"),this._virtualization.totalHeightEl=e?.querySelector(".faux-vscroll-spacer"),this._virtualization.viewportEl=e?.querySelector(".rows-viewport"),this._bodyEl=e?.querySelector(".rows"),this.__rowsBodyEl=e?.querySelector(".rows-body"),this.#oe.isInitialized){ke(this.#M,this.#ie),ze(this.#M,this.#s?.shell,this.#ie);const e=this.#s?.shell?.toolPanel?.defaultOpen;e&&this.#ie.toolPanels.has(e)&&(this.openToolPanel(),this.#ie.expandedSections.add(e))}this._resizeController=we(this),this.#Le(e),this.#I.requestPhase(fe.COLUMNS,"shellRefresh")}#qe=/* @__PURE__ */new Map;registerStyles(e,t){let i=this.#qe.get(e);i||(i=new CSSStyleSheet,this.#qe.set(e,i)),i.replaceSync(t),this.#ct()}unregisterStyles(e){this.#qe.delete(e)&&this.#ct()}getRegisteredStyles(){return Array.from(this.#qe.keys())}#ct(){const e=Array.from(this.#qe.values()),t=document.adoptedStyleSheets.filter(e=>!Array.from(this.#qe.values()).includes(e));document.adoptedStyleSheets=[...t,...e]}#dt=/* @__PURE__ */new Set;#ht=/* @__PURE__ */new Map;registerExternalFocusContainer(e){if(this.#dt.has(e))return;this.#dt.add(e);const t=new AbortController,i=t.signal;e.addEventListener("focusin",()=>{this.dataset.hasFocus=""},{signal:i}),e.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&this.containsFocus(t)||delete this.dataset.hasFocus},{signal:i}),this.#ht.set(e,()=>t.abort())}unregisterExternalFocusContainer(e){this.#dt.delete(e);const t=this.#ht.get(e);t&&(t(),this.#ht.delete(e))}containsFocus(e){const t=e??document.activeElement;return!!t&&(!!this.contains(t)||this.#Be(t))}#Be(e){for(const t of this.#dt)if(t.contains(e))return!0;return!1}#Oe(){Me(this,this.#ie),Pe(this,this.#ie),Le(this,this.#ie,this.#ke())}#ut(){const e=this.#M.querySelector(".tbw-shell-header");if(!e)return;Ie(this.#ie);const t=function(e,t,i="☰"){const o=e?.header?.title??t.lightDomTitle??"",n=!!o,r=Te(i),s=e?.header?.toolbarContents??[],l=[...t.toolbarContents.values()],a=new Set(s.map(e=>e.id)),c=[...s];for(const w of l)a.has(w.id)||c.push(w);const d=c.length>0,h=t.toolPanels.size>0,u=d&&h,g=[...c].sort((e,t)=>(e.order??0)-(t.order??0));let f="";for(const w of g)f+=`<div class="tbw-toolbar-content-slot" data-toolbar-content="${w.id}"></div>`;if(u&&(f+='<div class="tbw-toolbar-separator"></div>'),h){const e=t.isPanelOpen;f+=`<button class="${e?"tbw-toolbar-btn active":"tbw-toolbar-btn"}" data-panel-toggle title="Settings" aria-label="Toggle settings panel" aria-pressed="${e}" aria-controls="tbw-tool-panel">${r}</button>`}return`\n <div class="tbw-shell-header" part="shell-header" role="presentation">\n ${n?`<div class="tbw-shell-title">${p=o,p&&"string"==typeof p?p.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"):""}</div>`:""}\n <div class="tbw-shell-content" part="shell-content" role="presentation" data-light-dom-header-content></div>\n <div class="tbw-shell-toolbar" part="shell-toolbar" role="presentation">\n ${f}\n </div>\n </div>\n `;var p}(this.#s.shell,this.#ie,this.#s.icons?.toolPanel),i=document.createElement("div");i.innerHTML=t;const o=i.firstElementChild;o&&(e.replaceWith(o),this.#gt(),ze(this.#M,this.#s?.shell,this.#ie))}#Ne(){const e=()=>{const e=this.#ie.lightDomTitle,t=this.#ie.hasToolButtonsContainer;this.#Oe();const i=this.#ie.lightDomTitle,o=this.#ie.hasToolButtonsContainer;(i&&!e||o&&!t)&&(this.#z.markSourcesChanged(),this.#z.merge(),this.#ut())},t=()=>{this.__lightDomColumnsCache=void 0,this.#xe()};this.#z.registerLightDomHandler("tbw-grid-header",e),this.#z.registerLightDomHandler("tbw-grid-tool-buttons",e),this.#z.registerLightDomHandler("tbw-grid-tool-panel",e),this.#z.registerLightDomHandler("tbw-grid-column",t),this.#z.registerLightDomHandler("tbw-grid-detail",t),this.#z.observeLightDOM(this)}refreshColumns(){this.__lightDomColumnsCache=void 0,F(this),this.#z.parseLightDomColumns(this);const e=this.#ie.lightDomTitle,t=this.#ie.hasToolButtonsContainer;this.#Oe();const i=this.#ie.lightDomTitle,o=this.#ie.hasToolButtonsContainer;(i&&!e||o&&!t)&&(this.#z.markSourcesChanged(),this.#z.merge(),this.#ut()),this.#I.requestPhase(fe.COLUMNS,"refreshColumns")}#Ve(){const e=this._virtualization.container,t=this._virtualization.viewportEl??e;t&&(this._virtualization.cachedViewportHeight=t.clientHeight),e&&(this._virtualization.cachedFauxHeight=e.clientHeight);const i=this._virtualization.scrollAreaEl;i&&(this._virtualization.cachedScrollAreaHeight=i.clientHeight)}#ye(e,t=!1){const i=this._virtualization;let o,n,r;if(t){const e=i.container??this,t=i.viewportEl??e,s=i.scrollAreaEl;o=e.clientHeight,n=t.clientHeight,r=s?s.clientHeight:o,i.cachedFauxHeight=o,i.cachedViewportHeight=n,i.cachedScrollAreaHeight=r}else o=i.cachedFauxHeight,n=i.cachedViewportHeight,r=i.cachedScrollAreaHeight||o;const s=r-n,l=Math.max(0,o-r);let a,c=0;i.variableHeights&&i.positionCache?a=function(e){if(0===e.length)return 0;const t=e[e.length-1];return t.offset+t.height}(i.positionCache):(a=e*i.rowHeight,c=this.#K?.getExtraHeight()??0);return a+s+c+l}#We(){if(!this._virtualization.variableHeights)return;const e=this._rows,t=this._virtualization.rowHeight||28,i=this.#s.rowHeight,o=this.#s.getRowId,n=o?e=>o(e):void 0;this._virtualization.positionCache=function(e,t,i,o,n){const r=new Array(e.length);let s=0;for(let l=0;l<e.length;l++){const a=e[l];let c=n?.(a,l),d=void 0!==c;void 0===c&&(c=tt(t,a,o.rowId),d=void 0!==c),void 0===c&&(c=i,d=!1),r[l]={offset:s,height:c,measured:d},s+=c}return r}(e,this._virtualization.heightCache,t,{rowId:n},(e,t)=>{const o=this.#K?.getRowHeight?.(e,t);if(void 0!==o)return o;if(i){const o=i(e,t);if(void 0!==o&&o>0)return o}});const r=function(e,t,i,o){let n=0,r=0;for(let s=0;s<e.length;s++){const i=e[s];if(i.measured){const e=o?.(t[s],s);void 0===e&&(r+=i.height,n++)}}return{measuredCount:n,averageHeight:n>0?r/n:i}}(this._virtualization.positionCache,e,t,(e,t)=>this.#K?.getRowHeight?.(e,t));this._virtualization.measuredCount=r.measuredCount,r.measuredCount>0&&(this._virtualization.averageHeight=r.averageHeight)}invalidateRowHeight(e,t){if(!this._virtualization.variableHeights)return;if(!this._virtualization.positionCache)return;if(e<0||e>=this._rows.length)return;const i=this._virtualization.positionCache,o=this._rows[e];let n=t;void 0===n&&(n=this.#K?.getRowHeight?.(o,e)),void 0===n&&(n=this._virtualization.rowHeight);const r=i[e];if(r&&!(Math.abs(r.height-n)<1)&&(it(i,e,n),this._virtualization.totalHeightEl)){const e=this.#ye(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`}}#rt(e,t){if(!this._virtualization.variableHeights)return;if(!this._virtualization.positionCache)return;if(!this._bodyEl)return;const i=this._bodyEl.querySelectorAll(".data-grid-row"),o=this.#s.getRowId,n=nt({positionCache:this._virtualization.positionCache,heightCache:this._virtualization.heightCache,rows:this._rows,defaultHeight:this._virtualization.rowHeight,start:e,end:t,getPluginHeight:(e,t)=>this.#K?.getRowHeight?.(e,t),getRowId:o?e=>o(e):void 0},i);if(n.hasChanges&&(this._virtualization.measuredCount=n.measuredCount,this._virtualization.averageHeight=n.averageHeight,this._virtualization.totalHeightEl)){const e=this.#ye(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`}}refreshVirtualWindow(e=!1,t=!1){if(!this._bodyEl)return!1;const i=this._rows.length;if(!this._virtualization.enabled)return this.#it(0,i),t||this.#K?.afterRender(),!0;if(this._rows.length<=this._virtualization.bypassThreshold)return this._virtualization.start=0,this._virtualization.end=i,e&&(this._bodyEl.style.transform="translateY(0px)"),this.#it(0,i,this.__rowRenderEpoch),e&&this._virtualization.totalHeightEl&&(this._virtualization.totalHeightEl.style.height=`${this.#ye(i,!0)}px`),this.#nt(i,this._visibleColumns.length),t||this.#K?.afterRender(),!0;const o=this._virtualization.container??this,n=this._virtualization.viewportEl??o,r=e?this._virtualization.cachedViewportHeight=n.clientHeight:this._virtualization.cachedViewportHeight||(this._virtualization.cachedViewportHeight=n.clientHeight),s=this._virtualization.rowHeight,l=o.scrollTop;let a;const c=this._virtualization.positionCache;if(this._virtualization.variableHeights&&c&&c.length>0)a=ot(c,l),-1===a&&(a=0);else{a=Math.floor(l/s);let e=0;const t=10;for(;e<t;){const t=this.#K?.getExtraHeightBefore?.(a)??0,i=Math.floor((l-t)/s);if(i>=a||i<0)break;a=i,e++}}a-=a%2,a<0&&(a=0);const d=this.#K?.adjustVirtualStart(a,l,s);let h;if(void 0!==d&&d<a&&(a=d,a-=a%2,a<0&&(a=0)),this._virtualization.variableHeights&&c&&c.length>0){const e=r+3*s;let t=0;for(h=a;h<i&&t<e;)t+=c[h].height,h++;const o=Math.ceil(r/s)+3;h-a<o&&(h=Math.min(a+o,i))}else{h=a+(Math.ceil(r/s)+3)}h>i&&(h=i);const u=this._virtualization.start,g=this._virtualization.end;if(!e&&a===u&&h===g)return!1;this._virtualization.start=a,this._virtualization.end=h;const f=e?this._virtualization.cachedFauxHeight=o.clientHeight:this._virtualization.cachedFauxHeight||(this._virtualization.cachedFauxHeight=o.clientHeight);if(e){const e=this._virtualization.scrollAreaEl;e&&(this._virtualization.cachedScrollAreaHeight=e.clientHeight)}if(0===f&&r>0)return this.#I.requestPhase(fe.VIRTUALIZATION,"stale-refs-retry"),!1;if(e&&this._virtualization.totalHeightEl){const e=this.#ye(i);this._virtualization.totalHeightEl.style.height=`${e}px`}let p;if(this._virtualization.variableHeights&&c&&c[a])p=c[a].offset;else{p=a*s+(this.#K?.getExtraHeightBefore?.(a)??0)}const w=-(l-p);return this._bodyEl.style.transform=`translateY(${w}px)`,this.#it(a,h,this.__rowRenderEpoch),e&&this._virtualization.variableHeights&&this.#rt(a,h),this.#nt(i,this._visibleColumns.length),e&&!t&&(this.#K?.afterRender(),queueMicrotask(()=>{if(!this._virtualization.totalHeightEl)return;const e=this.#ye(i);0===this._virtualization.cachedFauxHeight&&this._virtualization.cachedViewportHeight>0||(this._virtualization.totalHeightEl.style.height=`${e}px`)})),!0}#De(){this.#Oe(),this.#z.markSourcesChanged(),this.#z.merge();const e=this.#s?.shell;$e(this.#M,e,{isPanelOpen:this.#ie.isPanelOpen,expandedSections:this.#ie.expandedSections},this.#s?.icons)&&(this.#gt(),this.#oe.setInitialized(!0))}#gt(){!function(e,t,i,o){const n=e.querySelector(".tbw-shell-toolbar");n&&n.addEventListener("click",e=>{e.target.closest("[data-panel-toggle]")&&o.onPanelToggle()});const r=e.querySelector(".tbw-accordion");r&&r.addEventListener("click",e=>{const t=e.target.closest(".tbw-accordion-header");if(t){const e=t.closest("[data-section]"),i=e?.getAttribute("data-section");i&&o.onSectionToggle(i)}})}(this.#M,this.#s,this.#ie,{onPanelToggle:()=>this.toggleToolPanel(),onSectionToggle:e=>this.toggleToolPanelSection(e)}),this.#ne?.(),this.#ne=function(e,t,i){const o=e.querySelector(".tbw-tool-panel"),n=e.querySelector("[data-resize-handle]"),r=e.querySelector(".tbw-shell-body");if(!o||!n||!r)return()=>{};const s=t?.toolPanel?.position??"right";let l=0,a=0,c=0,d=!1;const h=e=>{if(!d)return;e.preventDefault();const t="left"===s?e.clientX-l:l-e.clientX,i=Math.min(c,Math.max(200,a+t));o.style.width=`${i}px`},u=()=>{if(!d)return;d=!1,n.classList.remove("resizing"),o.style.transition="",document.body.style.cursor="",document.body.style.userSelect="";const e=o.getBoundingClientRect().width;i(e),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u)},g=e=>{e.preventDefault(),d=!0,l=e.clientX,a=o.getBoundingClientRect().width,c=r.getBoundingClientRect().width-20,n.classList.add("resizing"),o.style.transition="none",document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",h),document.addEventListener("mouseup",u)};return n.addEventListener("mousedown",g),()=>{n.removeEventListener("mousedown",g),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u)}}(this.#M,this.#s?.shell,e=>{this.style.setProperty("--tbw-tool-panel-width",`${e}px`)}),this.#re?.(),this.#re=function(e,t,i,o){if(!t?.toolPanel?.closeOnClickOutside)return()=>{};const n=e=>{if(!i.isPanelOpen)return;const t=e.target;t&&(t.closest(".tbw-tool-panel")||t.closest("[data-panel-toggle]")||o())};return e.addEventListener("mousedown",n),()=>e.removeEventListener("mousedown",n)}(this,this.#s?.shell,this.#ie,()=>this.closeToolPanel())}}customElements.get(at.tagName)||customElements.define(at.tagName,at),globalThis.DataGridElement=at;const ct={CAN_MOVE_COLUMN:"canMoveColumn",GET_CONTEXT_MENU_ITEMS:"getContextMenuItems"};class dt{static dependencies;static manifest;aliases;version="1.24.2";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#ft;get defaultConfig(){return{}}constructor(e={}){this.userConfig=e}attach(e){this.#ft?.abort(),this.#ft=new AbortController,this.grid=e,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#ft?.abort(),this.#ft=void 0}getPlugin(e){return this.grid?.getPlugin(e)}emit(e,t){this.grid?.dispatchEvent?.(new CustomEvent(e,{detail:t,bubbles:!0}))}emitCancelable(e,t){const i=new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(i),i.defaultPrevented}on(e,t){this.grid?._pluginManager?.subscribe(this,e,t)}off(e){this.grid?._pluginManager?.unsubscribe(this,e)}emitPluginEvent(e,t){this.grid?._pluginManager?.emitPluginEvent(e,t)}requestRender(){this.grid?.requestRender?.()}requestColumnsRender(){this.grid?.requestColumnsRender?.()}requestRenderWithFocus(){this.grid?.requestRenderWithFocus?.()}requestAfterRender(){this.grid?.requestAfterRender?.()}requestVirtualRefresh(){this.grid?.requestVirtualRefresh?.()}get rows(){return this.grid?.rows??[]}get sourceRows(){return this.grid?.sourceRows??[]}get columns(){return this.grid?.columns??[]}get visibleColumns(){return this.grid?._visibleColumns??[]}get gridElement(){return this.grid}get disconnectSignal(){return this.#ft?.signal??this.grid?.disconnectSignal}get gridIcons(){const e=this.grid?.gridConfig?.icons??{};return{...o,...e}}get isAnimationEnabled(){const e=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===e||"off"===e)return!1;if(!0===e||"on"===e)return!0;const t=this.gridElement;if(t){return"0"!==getComputedStyle(t).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const e=this.gridElement;if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-animation-duration").trim(),i=parseInt(t,10);if(!isNaN(i))return i}return 200}resolveIcon(e,t){return void 0!==t?t:this.gridIcons[e]}setIcon(e,t){"string"==typeof t?e.innerHTML=t:t instanceof HTMLElement&&(e.innerHTML="",e.appendChild(t.cloneNode(!0)))}warn(e){console.warn(`[tbw-grid:${this.name}] ${e}`)}}const ht={ROOT:"tbw-grid-root",HEADER:"header",HEADER_ROW:"header-row",HEADER_CELL:"header-cell",ROWS_VIEWPORT:"rows-viewport",ROWS_SPACER:"rows-spacer",ROWS_CONTAINER:"rows",DATA_ROW:"data-row",GROUP_ROW:"group-row",DATA_CELL:"data-cell",SELECTED:"selected",FOCUSED:"focused",EDITING:"editing",EXPANDED:"expanded",COLLAPSED:"collapsed",DRAGGING:"dragging",RESIZING:"resizing",SORTABLE:"sortable",SORTED_ASC:"sorted-asc",SORTED_DESC:"sorted-desc",HIDDEN:"hidden",STICKY_LEFT:"sticky-left",STICKY_RIGHT:"sticky-right",PINNED_TOP:"pinned-top",PINNED_BOTTOM:"pinned-bottom",TREE_TOGGLE:"tree-toggle",TREE_INDENT:"tree-indent",GROUP_TOGGLE:"group-toggle",GROUP_LABEL:"group-label",GROUP_COUNT:"group-count",RANGE_SELECTION:"range-selection",SELECTION_OVERLAY:"selection-overlay"},ut={ROW_INDEX:"data-row-index",COL_INDEX:"data-col-index",FIELD:"data-field",GROUP_KEY:"data-group-key",TREE_LEVEL:"data-tree-level",STICKY:"data-sticky"},gt={ROOT:`.${ht.ROOT}`,HEADER:`.${ht.HEADER}`,HEADER_ROW:`.${ht.HEADER_ROW}`,HEADER_CELL:`.${ht.HEADER_CELL}`,ROWS_VIEWPORT:`.${ht.ROWS_VIEWPORT}`,ROWS_CONTAINER:`.${ht.ROWS_CONTAINER}`,DATA_ROW:`.${ht.DATA_ROW}`,DATA_CELL:`.${ht.DATA_CELL}`,GROUP_ROW:`.${ht.GROUP_ROW}`,ROW_BY_INDEX:e=>`.${ht.DATA_ROW}[${ut.ROW_INDEX}="${e}"]`,CELL_BY_FIELD:e=>`.${ht.DATA_CELL}[${ut.FIELD}="${e}"]`,CELL_AT:(e,t)=>`.${ht.DATA_ROW}[${ut.ROW_INDEX}="${e}"] .${ht.DATA_CELL}[${ut.COL_INDEX}="${t}"]`,SELECTED_ROWS:`.${ht.DATA_ROW}.${ht.SELECTED}`,EDITING_CELL:`.${ht.DATA_CELL}.${ht.EDITING}`},ft={COLOR_BG:"--tbw-color-bg",COLOR_FG:"--tbw-color-fg",COLOR_FG_MUTED:"--tbw-color-fg-muted",COLOR_BORDER:"--tbw-color-border",COLOR_ACCENT:"--tbw-color-accent",COLOR_HEADER_BG:"--tbw-color-header-bg",COLOR_HEADER_FG:"--tbw-color-header-fg",COLOR_SELECTION:"--tbw-color-selection",COLOR_ROW_HOVER:"--tbw-color-row-hover",COLOR_ROW_ALT:"--tbw-color-row-alt",ROW_HEIGHT:"--tbw-row-height",HEADER_HEIGHT:"--tbw-header-height",CELL_PADDING:"--tbw-cell-padding",FONT_FAMILY:"--tbw-font-family",FONT_SIZE:"--tbw-font-size",BORDER_RADIUS:"--tbw-border-radius",FOCUS_OUTLINE:"--tbw-focus-outline"};function pt(e){const t=document.createElement("tbw-grid");return e&&(t.gridConfig=e),t}function wt(e,t=document){return t.querySelector(e)}const bt={CELL_CHANGE:"cell-change",CELL_COMMIT:"cell-commit",ROW_COMMIT:"row-commit",EDIT_OPEN:"edit-open",EDIT_CLOSE:"edit-close",CHANGED_ROWS_RESET:"changed-rows-reset",MOUNT_EXTERNAL_VIEW:"mount-external-view",MOUNT_EXTERNAL_EDITOR:"mount-external-editor",SORT_CHANGE:"sort-change",COLUMN_RESIZE:"column-resize",ACTIVATE_CELL:"activate-cell",CELL_ACTIVATE:"cell-activate",GROUP_TOGGLE:"group-toggle",COLUMN_STATE_CHANGE:"column-state-change"},mt={SELECTION_CHANGE:"selection-change",TREE_EXPAND:"tree-expand",FILTER_CHANGE:"filter-change",SORT_MODEL_CHANGE:"sort-model-change",EXPORT_START:"export-start",EXPORT_COMPLETE:"export-complete",CLIPBOARD_COPY:"clipboard-copy",CLIPBOARD_PASTE:"clipboard-paste",CONTEXT_MENU_OPEN:"context-menu-open",CONTEXT_MENU_CLOSE:"context-menu-close",HISTORY_CHANGE:"history-change",SERVER_LOADING:"server-loading",SERVER_ERROR:"server-error",COLUMN_VISIBILITY_CHANGE:"column-visibility-change",COLUMN_REORDER:"column-reorder",DETAIL_EXPAND:"detail-expand",GROUP_EXPAND:"group-expand"},vt={sum:(e,t)=>e.reduce((e,i)=>e+(Number(i[t])||0),0),avg:(e,t)=>{const i=e.reduce((e,i)=>e+(Number(i[t])||0),0);return e.length?i/e.length:0},count:e=>e.length,min:(e,t)=>e.length?Math.min(...e.map(e=>Number(e[t])||1/0)):0,max:(e,t)=>e.length?Math.max(...e.map(e=>Number(e[t])||-1/0)):0,first:(e,t)=>e[0]?.[t],last:(e,t)=>e[e.length-1]?.[t]},Ct=/* @__PURE__ */new Map,yt={register(e,t){Ct.set(e,t)},unregister(e){Ct.delete(e)},get(e){if(void 0!==e)return"function"==typeof e?e:Ct.get(e)??vt[e]},run(e,t,i,o){const n=this.get(e);return n?n(t,i,o):void 0},has:e=>Ct.has(e)||e in vt,list:()=>[...Object.keys(vt),...Ct.keys()]},_t={sum:e=>e.reduce((e,t)=>e+t,0),avg:e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:0,count:e=>e.length,min:e=>e.length?Math.min(...e):0,max:e=>e.length?Math.max(...e):0,first:e=>e[0]??0,last:e=>e[e.length-1]??0};function St(e){return _t[e]??_t.sum}function Rt(e,t){return St(e)(t)}const Et=yt.register.bind(yt),xt=yt.unregister.bind(yt),At=yt.get.bind(yt),Tt=yt.run.bind(yt),Ht=yt.list.bind(yt);export{dt as BaseGridPlugin,t as DEFAULT_ANIMATION_CONFIG,o as DEFAULT_GRID_ICONS,bt as DGEvents,at as DataGridElement,O as F,e as FitModeEnum,ft as GridCSSVars,ht as GridClasses,ut as GridDataAttrs,at as GridElement,gt as GridSelectors,ct as PLUGIN_QUERIES,mt as PluginEvents,lt as PluginManager,fe as RenderPhase,C as a,yt as aggregatorRegistry,v as b,ee as builtInSort,rt as c,pt as createGrid,T as d,J as defaultComparator,G as e,H as f,M as g,At as getAggregator,St as getValueAggregator,Ht as listAggregators,wt as queryGrid,L as r,Et as registerAggregator,Tt as runAggregator,Rt as runValueAggregator,st as s,Q as setFeatureResolver,xt as unregisterAggregator};//# sourceMappingURL=index.js.map
|
|
1
|
+
function e(e,t){const o=e.querySelector?.(".tbw-sr-only");o&&(o.textContent="",requestAnimationFrame(()=>{o.textContent=t}))}const t={STRETCH:"stretch",FIXED:"fixed"},o={mode:"reduced-motion",duration:200,easing:"ease-out"},i='<svg viewBox="0 0 16 16" width="12" height="12"><path fill="currentColor" d="M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z"/></svg>',n={expand:"▶",collapse:"▼",sortAsc:"▲",sortDesc:"▼",sortNone:"⇅",submenuArrow:"▶",dragHandle:"⋮⋮",toolPanel:"☰",filter:i,filterActive:i,print:"🖨️"};function r(e,t){if(!(e&&e.length||t&&t.length))return[];if(!e||!e.length)return t||[];if(!t||!t.length)return e;const o={};t.forEach(e=>{const t=o[e.field];if(t){e.header&&!t.header&&(t.header=e.header),e.type&&!t.type&&(t.type=e.type),e.sortable&&(t.sortable=!0),e.editable&&(t.editable=!0),e.resizable&&(t.resizable=!0),null!=e.width&&null==t.width&&(t.width=e.width),null!=e.minWidth&&null==t.minWidth&&(t.minWidth=e.minWidth),e.__viewTemplate&&(t.__viewTemplate=e.__viewTemplate),e.__editorTemplate&&(t.__editorTemplate=e.__editorTemplate),e.__headerTemplate&&(t.__headerTemplate=e.__headerTemplate);const o=e.renderer||e.viewRenderer,i=t.renderer||t.viewRenderer;o&&!i&&(t.viewRenderer=o,e.renderer&&(t.renderer=o)),e.editor&&!t.editor&&(t.editor=e.editor)}else o[e.field]={...e}});const i=e.map(e=>{const t=o[e.field];if(!t)return e;const i={...e};t.header&&!i.header&&(i.header=t.header),t.type&&!i.type&&(i.type=t.type),i.sortable=e.sortable||t.sortable,!0!==e.resizable&&!0!==t.resizable||(i.resizable=!0),i.editable=e.editable||t.editable,null!=t.width&&null==i.width&&(i.width=t.width),null!=t.minWidth&&null==i.minWidth&&(i.minWidth=t.minWidth),t.__viewTemplate&&(i.__viewTemplate=t.__viewTemplate),t.__editorTemplate&&(i.__editorTemplate=t.__editorTemplate),t.__headerTemplate&&(i.__headerTemplate=t.__headerTemplate);const n=t.renderer||t.viewRenderer,r=i.renderer||i.viewRenderer;return n&&!r&&(i.viewRenderer=n,t.renderer&&(i.renderer=n)),t.editor&&!i.editor&&(i.editor=t.editor),delete o[e.field],i});return Object.keys(o).forEach(e=>i.push(o[e])),i}function s(e,t){try{e.part?.add?.(t)}catch{}const o=e.getAttribute("part");o?o.split(/\s+/).includes(t)||e.setAttribute("part",o+" "+t):e.setAttribute("part",t)}function l(e){const o=e.effectiveConfig?.fitMode||e.fitMode||t.STRETCH;if(o!==t.STRETCH&&o!==t.FIXED)return;if(e.__didInitialAutoSize)return;if(!e.isConnected)return;const i=Array.from(e._headerRowEl?.children||[]);if(!i.length)return;let n=!1;e._visibleColumns.forEach((t,o)=>{if(t.width)return;const r=i[o];let s=r?r.scrollWidth:0;for(const i of e._rowPool){const e=i.children[o];if(e){const t=e.scrollWidth;t>s&&(s=t)}}s>0&&(t.width=s+2,t.__autoSized=!0,n=!0)}),n&&d(e),e.__didInitialAutoSize=!0}const a=/^(?:\d+(?:\.\d+)?(?:px|%|fr|em|rem|ch|vw|vh|vmin|vmax)|calc\(.+\)|min-content|max-content|minmax\(.+\)|fit-content\(.+\)|auto)$/i;function c(e,t){return"number"==typeof e?`${e}px`:(a.test(e)||console.warn(`[tbw-grid] Column '${t??"?"}' has an invalid CSS width value: '${e}'. Expected a number (px) or a valid CSS unit string (e.g. '30%', '2fr', 'calc(...)').`),e)}function d(e){const o=e.effectiveConfig?.fitMode||e.fitMode||t.STRETCH;e._gridTemplate=o===t.STRETCH?e._visibleColumns.map(e=>{if(null!=e.width)return c(e.width,e.field);const t=e.minWidth;return null!=t?`minmax(${t}px, 1fr)`:"1fr"}).join(" ").trim():e._visibleColumns.map(e=>null!=e.width?c(e.width,e.field):"max-content").join(" "),e.style.setProperty("--tbw-column-template",e._gridTemplate)}const h=/{{\s*([^}]+)\s*}}/g,u="__DG_EMPTY__",g=/^[\w$. '?+\-*/%:()!<>=,&|]+$/,f=/__(proto|defineGetter|defineSetter)|constructor|window|globalThis|global|process|Function|import|eval|Reflect|Proxy|Error|arguments|document|location|cookie|localStorage|sessionStorage|indexedDB|fetch|XMLHttpRequest|WebSocket|Worker|SharedWorker|ServiceWorker|opener|parent|top|frames|self|this\b/;const p=/* @__PURE__ */new Set(["script","iframe","object","embed","form","input","button","textarea","select","link","meta","base","style","template","slot","portal","frame","frameset","applet","noscript","noembed","plaintext","xmp","listing"]),w=/^on\w+$/i,b=/* @__PURE__ */new Set(["href","src","action","formaction","data","srcdoc","xlink:href","poster","srcset"]),m=/^\s*(javascript|vbscript|data|blob):/i;function v(e){if(!e||"string"!=typeof e)return"";if(-1===e.indexOf("<"))return e;const t=document.createElement("template");return t.innerHTML=e,function(e){const t=[],o=e.querySelectorAll("*");for(const i of o){const e=i.tagName.toLowerCase();if(p.has(e)){t.push(i);continue}if("svg"===e||"http://www.w3.org/2000/svg"===i.namespaceURI){if(Array.from(i.attributes).some(e=>w.test(e.name)||"href"===e.name||"xlink:href"===e.name)){t.push(i);continue}}const o=[];for(const t of i.attributes){const e=t.name.toLowerCase();w.test(e)?o.push(t.name):(b.has(e)&&m.test(t.value)||"style"===e&&/expression\s*\(|javascript:|behavior\s*:/i.test(t.value))&&o.push(t.name)}o.forEach(e=>i.removeAttribute(e))}t.forEach(e=>e.remove())}(t.content),t.innerHTML}function C(e,t){if(!e||-1===e.indexOf("{{"))return e;const o=[],i=e.replace(h,(e,i)=>{const n=function(e,t){if(e=(e||"").trim(),!e)return u;if(y.test(e))return u;if("value"===e)return null==t.value?u:String(t.value);if(e.startsWith("row.")&&!/[()?]/.test(e)&&!e.includes(":")){const o=e.slice(4),i=t.row?t.row[o]:void 0;return null==i?u:String(i)}if(e.length>80)return u;if(!g.test(e)||f.test(e))return u;const o=e.match(/\./g);if(o&&o.length>1)return u;try{const o=new Function("value","row",`return (${e});`)(t.value,t.row),i=null==o?"":String(o);return y.test(i)?u:i||u}catch{return u}}(i,t);return o.push({expr:i.trim(),result:n}),n}),n=(r=i)?r.replace(new RegExp(u,"g"),"").replace(/Reflect\.[^<>{}\s]+|\bProxy\b|ownKeys\([^)]*\)/g,""):r;var r;const s=o.length&&o.every(e=>""===e.result||e.result===u);return y.test(e)||s?"":n}const y=/Reflect|Proxy|ownKeys/;function _(e){if(y.test(e.textContent||"")){for(const t of e.childNodes)t.nodeType===Node.TEXT_NODE&&y.test(t.textContent||"")&&(t.textContent="");y.test(e.textContent||"")&&(e.textContent="")}}function R(e){const t=y.test(e),o=o=>{if(t)return"";return C(e,o)};return o.__blocked=t,o}function S(e,t){return null==e&&null==t?0:null==e?-1:null==t||e>t?1:e<t?-1:0}function E(e,t,o){const i=o.find(e=>e.field===t.field),n=i?.sortComparator??S,{field:r,direction:s}=t;return[...e].sort((e,t)=>n(e[r],t[r],e,t)*s)}function x(t,o,i,n){t._rows=o,t.__rowRenderEpoch++,t._rowPool.forEach(e=>e.__epoch=-1),D(t),t.refreshVirtualWindow(!0),t.dispatchEvent(new CustomEvent("sort-change",{detail:{field:i.field,direction:n}})),e(t,`Sorted by ${i.header??i.field}, ${1===n?"ascending":"descending"}`),t.requestStateChange?.()}function A(t,o){if(t._sortState&&t._sortState.field===o.field)if(1===t._sortState.direction)T(t,o,-1);else{t._sortState=null,t.__rowRenderEpoch++,t._rowPool.forEach(e=>e.__epoch=-1),t._rows=t.__originalOrder.slice(),D(t);const i=t._headerRowEl?.querySelectorAll('[role="columnheader"].sortable');i?.forEach(e=>{e.getAttribute("aria-sort")&&("ascending"!==e.getAttribute("aria-sort")&&"descending"!==e.getAttribute("aria-sort")||t._sortState)||e.setAttribute("aria-sort","none")}),t.refreshVirtualWindow(!0),t.dispatchEvent(new CustomEvent("sort-change",{detail:{field:o.field,direction:0}})),e(t,"Sort cleared"),t.requestStateChange?.()}else t._sortState||(t.__originalOrder=t._rows.slice()),T(t,o,1)}function T(e,t,o){e._sortState={field:t.field,direction:o};const i={field:t.field,direction:o},n=e._columns,r=(e.effectiveConfig?.sortHandler??E)(e._rows,i,n);r&&"function"==typeof r.then?r.then(i=>{x(e,i,t,o)}):x(e,r,t,o)}function H(e,t){return!1!==e.effectiveConfig?.sortable&&!0===t.sortable}function P(e,t){return!1!==e.effectiveConfig?.resizable&&!1!==t.resizable}function M(e,t){const o=document.createElement("span");s(o,"sort-indicator");const i=e._sortState?.field===t.field?e._sortState.direction:0,r={...n,...e.icons};return function(e,t){"string"==typeof t?e.textContent=t:t instanceof HTMLElement&&(e.innerHTML="",e.appendChild(t.cloneNode(!0)))}(o,1===i?r.sortAsc:-1===i?r.sortDesc:r.sortNone),o}function L(e,t,o){const i=document.createElement("div");return i.className="resize-handle",i.setAttribute("aria-hidden","true"),i.addEventListener("mousedown",i=>{i.stopPropagation(),i.preventDefault(),e._resizeController.start(i,t,o)}),i.addEventListener("dblclick",o=>{o.stopPropagation(),o.preventDefault(),e._resizeController.resetColumn(t)}),i}function O(e,t,o,i){i.classList.add("sortable"),i.tabIndex=0;const n=e._sortState?.field===t.field?e._sortState.direction:0;i.setAttribute("aria-sort",0===n?"none":1===n?"ascending":"descending"),i.addEventListener("click",o=>{e._resizeController?.isResizing||e._dispatchHeaderClick?.(o,t,i)||A(e,t)}),i.addEventListener("keydown",o=>{if("Enter"===o.key||" "===o.key){if(o.preventDefault(),e._dispatchHeaderClick?.(o,t,i))return;A(e,t)}})}function D(e){e._headerRowEl=e.findHeaderRow();const t=e._headerRowEl;t&&(t.innerHTML="",e._visibleColumns.forEach((o,i)=>{const n=document.createElement("div");n.className="cell",s(n,"header-cell"),n.setAttribute("role","columnheader"),n.setAttribute("aria-colindex",String(i+1)),n.setAttribute("data-field",o.field),n.setAttribute("data-col",String(i)),o.type&&n.setAttribute("data-type",o.type);const r=o.header??o.field,l=e._sortState?.field===o.field?e._sortState.direction:0,a=1===l?"asc":-1===l?"desc":null;if(o.headerRenderer){const t={column:o,value:r,sortState:a,filterActive:!1,cellEl:n,renderSortIcon:()=>H(e,o)?M(e,o):null,renderFilterButton:()=>null},s=o.headerRenderer(t);!function(e,t){if(null!=t)if("string"==typeof t){const o=document.createElement("span");for(o.innerHTML=v(t);o.firstChild;)e.appendChild(o.firstChild)}else t instanceof Node&&e.appendChild(t)}(n,s),H(e,o)&&O(e,o,0,n),P(e,o)&&(n.classList.add("resizable"),n.appendChild(L(e,i,n)))}else if(o.headerLabelRenderer){const t={column:o,value:r},s=o.headerLabelRenderer(t),l=document.createElement("span");null==s?l.textContent=r:"string"==typeof s?l.innerHTML=v(s):s instanceof Node&&l.appendChild(s),n.appendChild(l),H(e,o)&&(O(e,o,0,n),n.appendChild(M(e,o))),P(e,o)&&(n.classList.add("resizable"),n.appendChild(L(e,i,n)))}else if(o.__headerTemplate)Array.from(o.__headerTemplate.childNodes).forEach(e=>n.appendChild(e.cloneNode(!0))),H(e,o)&&(O(e,o,0,n),n.appendChild(M(e,o))),P(e,o)&&(n.classList.add("resizable"),n.appendChild(L(e,i,n)));else{const t=document.createElement("span");t.textContent=r,n.appendChild(t),H(e,o)&&(O(e,o,0,n),n.appendChild(M(e,o))),P(e,o)&&(n.classList.add("resizable"),n.appendChild(L(e,i,n)))}t.appendChild(n)}),t.querySelectorAll(".cell.sortable").forEach(e=>{e.getAttribute("aria-sort")||e.setAttribute("aria-sort","none")}),t.children.length>0?(t.setAttribute("role","row"),t.setAttribute("aria-rowindex","1")):(t.removeAttribute("role"),t.removeAttribute("aria-rowindex")))}function k(e,t){const o=e[0]||{},i=Object.keys(o).map(e=>{const t=o[e],i=null==(n=t)?"string":"number"==typeof n?"number":"boolean"==typeof n?"boolean":n instanceof Date||"string"==typeof n&&/\d{4}-\d{2}-\d{2}/.test(n)&&!isNaN(Date.parse(n))?"date":"string";var n;return{field:e,header:e.charAt(0).toUpperCase()+e.slice(1),type:i}}),n={};return i.forEach(e=>{n[e.field]=e.type||"string"}),{columns:i,typeMap:n}}var I,z=((I=z||{})[I.STYLE=1]="STYLE",I[I.VIRTUALIZATION=2]="VIRTUALIZATION",I[I.HEADER=3]="HEADER",I[I.ROWS=4]="ROWS",I[I.COLUMNS=5]="COLUMNS",I[I.FULL=6]="FULL",I);class q{#e;#t=0;#o=0;#i=null;#n=null;#r=null;#s=!1;constructor(e){this.#e=e}requestPhase(e,t){e>this.#t&&(this.#t=e),0===this.#o&&(this.#l(),this.#o=requestAnimationFrame(()=>this.#a()))}whenReady(){return this.#i?this.#i:Promise.resolve()}setInitialReadyResolver(e){this.#r=e}cancel(){0!==this.#o&&(cancelAnimationFrame(this.#o),this.#o=0),this.#t=0,this.#n&&(this.#n(),this.#n=null,this.#i=null)}get isPending(){return 0!==this.#t}get pendingPhase(){return this.#t}#l(){this.#i||(this.#i=new Promise(e=>{this.#n=e}))}#a(){if(this.#o=0,!this.#e._schedulerIsConnected)return this.#t=0,void(this.#n&&(this.#n(),this.#n=null,this.#i=null));const e=this.#t;this.#t=0,e>=5&&this.#e._schedulerMergeConfig(),e>=4&&this.#e._schedulerProcessRows(),e>=5&&(this.#e._schedulerProcessColumns(),this.#e._schedulerUpdateTemplate()),e>=3&&this.#e._schedulerRenderHeader(),e>=2&&this.#e.refreshVirtualWindow(!0,!0),e>=1&&this.#e._schedulerAfterRender(),!this.#s&&this.#r&&(this.#s=!0,this.#r()),this.#n&&(this.#n(),this.#n=null,this.#i=null)}}class N{#c;#d;#h;#u;#g;#f={};#p={};#w=!0;#b=[];#m;#v;#C;#e;#y;constructor(e){this.#e=e}get original(){return this.#f}get effective(){return this.#p}get columns(){return this.#p.columns??[]}set columns(e){this.#p.columns=e}get lightDomColumnsCache(){return this.#u}set lightDomColumnsCache(e){this.#u=e}get originalColumnNodes(){return this.#g}set originalColumnNodes(e){this.#g=e}get lightDomTitle(){return this.#y}set lightDomTitle(e){this.#y=e}get initialColumnState(){return this.#C}set initialColumnState(e){this.#C=e}get sourcesChanged(){return this.#w}markSourcesChanged(){this.#w=!0}setGridConfig(e){this.#c=e,this.#w=!0,this.#u=void 0}getGridConfig(){return this.#c}setColumns(e){this.#d=e,this.#w=!0}getColumns(){return this.#d}setFitMode(e){this.#h=e,this.#w=!0}getFitMode(){return this.#h}merge(){const e=(this.#p.columns?.length??0)>0;if(!this.#w&&e)return;const t=this.#_();this.#w=!1,this.#f=t,Object.freeze(this.#f),this.#f.columns&&Object.freeze(this.#f.columns),this.#p=this.#R(this.#f),this.#S()}#R(e){const t={...e};return e.columns&&(t.columns=e.columns.map(e=>({...e}))),e.shell&&(t.shell={...e.shell,header:e.shell.header?{...e.shell.header}:void 0,toolPanel:e.shell.toolPanel?{...e.shell.toolPanel}:void 0,toolPanels:e.shell.toolPanels?.map(e=>({...e})),headerContents:e.shell.headerContents?.map(e=>({...e}))}),t}#S(){const e=this.#p;if(this.#E(),"number"==typeof e.rowHeight&&e.rowHeight>0&&(this.#e._virtualization.rowHeight=e.rowHeight),"fixed"===e.fitMode){this.columns.forEach(e=>{null==e.width&&(e.width=80)})}this.#e._applyAnimationConfig(e)}#E(){const e=this.#p.typeDefaults;if(!e)return;const t=this.columns;for(const o of t){if(!o.type)continue;const t=e[o.type];t&&(o.renderer||o.viewRenderer||!t.renderer||(o.renderer=t.renderer),!o.format&&t.format&&(o.format=t.format),!o.editor&&t.editor&&(o.editor=t.editor),!o.editorParams&&t.editorParams&&(o.editorParams=t.editorParams))}}#_(){const e=this.#c?{...this.#c}:{},t=Array.isArray(e.columns)?[...e.columns]:[],o=(this.#u??[]).map(e=>({...e}));let i=r(t,o);this.#d&&this.#d.length&&(i=r(this.#d,o));const n=this.#e.sourceRows;if(0===i.length&&n.length){i=k(n).columns}return i.length&&(i.forEach(e=>{void 0===e.sortable&&(e.sortable=!0),void 0===e.resizable&&(e.resizable=!0),void 0===e.__originalWidth&&"number"==typeof e.width&&(e.__originalWidth=e.width)}),i.forEach(e=>{e.__viewTemplate&&!e.__compiledView&&(e.__compiledView=R(e.__viewTemplate.innerHTML)),e.__editorTemplate&&!e.__compiledEditor&&(e.__compiledEditor=R(e.__editorTemplate.innerHTML))}),e.columns=i),this.#h&&(e.fitMode=this.#h),e.fitMode||(e.fitMode="stretch"),this.#x(e),e.columnState&&!this.#C&&(this.#C=e.columnState),e}#x(e){e.shell=e.shell?{...e.shell}:{},e.shell.header=e.shell.header?{...e.shell.header}:{};const t=this.#e._shellState.lightDomTitle;t&&(this.#y=t),this.#y&&!e.shell.header.title&&(e.shell.header.title=this.#y);const o=this.#e._shellState.lightDomHeaderContent;o?.length>0&&(e.shell.header.lightDomContent=o),this.#e._shellState.hasToolButtonsContainer&&(e.shell.header.hasToolButtonsContainer=!0);const i=this.#e._shellState.toolPanels;if(i.size>0){const t=Array.from(i.values());t.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.toolPanels=t}const n=this.#e._shellState.headerContents;if(n.size>0){const t=Array.from(n.values());t.sort((e,t)=>(e.order??100)-(t.order??100)),e.shell.headerContents=t}const r=this.#e._shellState.toolbarContents,s=Array.from(r.values()),l=this.#c?.shell?.header?.toolbarContents??[],a=new Set(l.map(e=>e.id)),c=[...l];for(const d of s)a.has(d.id)||c.push(d);c.sort((e,t)=>(e.order??0)-(t.order??0)),e.shell.header.toolbarContents=c}collectState(e){const t=this.columns,o=this.#A();return{columns:t.map((t,i)=>{const n={field:t.field,order:i,visible:!t.hidden},r=t;void 0!==r.__renderedWidth?n.width=r.__renderedWidth:void 0!==t.width&&(n.width="string"==typeof t.width?parseFloat(t.width):t.width);const s=o.get(t.field);s&&(n.sort=s);for(const o of e)if(o.getColumnState){const e=o.getColumnState(t.field);e&&Object.assign(n,e)}return n})}}applyState(e,t){if(!e.columns||0===e.columns.length)return;const o=this.columns,i=new Map(e.columns.map(e=>[e.field,e])),n=o.map(e=>{const t=i.get(e.field);if(!t)return e;const o={...e};return void 0!==t.width&&(o.width=t.width,o.__renderedWidth=t.width),void 0!==t.visible&&(o.hidden=!t.visible),o});n.sort((e,t)=>(i.get(e.field)?.order??1/0)-(i.get(t.field)?.order??1/0)),this.columns=n;const r=e.columns.filter(e=>void 0!==e.sort).sort((e,t)=>(e.sort?.priority??0)-(t.sort?.priority??0));if(r.length>0){const e=r[0];e.sort&&(this.#e._sortState={field:e.field,direction:"asc"===e.sort.direction?1:-1})}else this.#e._sortState=null;for(const s of t)if(s.applyColumnState)for(const t of e.columns)s.applyColumnState(t.field,t)}resetState(e){this.#C=void 0,this.#e._sortState=null,this.#p=this.#R(this.#f),this.#S();for(const t of e)if(t.applyColumnState)for(const e of this.columns)t.applyColumnState(e.field,{field:e.field,order:0,visible:!0});this.requestStateChange(e)}#A(){const e=/* @__PURE__ */new Map,t=this.#e._sortState;return t&&e.set(t.field,{direction:1===t.direction?"asc":"desc",priority:0}),e}requestStateChange(e){this.#v&&clearTimeout(this.#v),this.#v=setTimeout(()=>{this.#v=void 0;const t=this.collectState(e);this.#e._emit("column-state-change",t)},100)}setColumnVisible(e,t){const o=this.columns,i=o.find(t=>t.field===e);if(!i)return!1;if(!t&&i.lockVisible)return!1;if(!t){if(0===o.filter(t=>!t.hidden&&t.field!==e).length)return!1}return!!i.hidden!=!t&&(i.hidden=!t,this.#e._emit("column-visibility",{field:e,visible:t,visibleColumns:o.filter(e=>!e.hidden).map(e=>e.field)}),this.#e._clearRowPool(),this.#e._setup(),!0)}toggleColumnVisibility(e){const t=this.columns.find(t=>t.field===e);return!!t&&this.setColumnVisible(e,!!t.hidden)}isColumnVisible(e){const t=this.columns.find(t=>t.field===e);return!!t&&!t.hidden}showAllColumns(){const e=this.columns;e.some(e=>e.hidden)&&(e.forEach(e=>e.hidden=!1),this.#e._emit("column-visibility",{visibleColumns:e.map(e=>e.field)}),this.#e._clearRowPool(),this.#e._setup())}getAllColumns(){return this.columns.map(e=>({field:e.field,header:e.header||e.field,visible:!e.hidden,lockVisible:e.lockVisible,utility:!0===e.meta?.utility}))}getColumnOrder(){return this.columns.map(e=>e.field)}setColumnOrder(e){if(!e.length)return;const t=new Map(this.columns.map(e=>[e.field,e])),o=[];for(const i of e){const e=t.get(i);e&&(o.push(e),t.delete(i))}for(const i of t.values())o.push(i);this.columns=o,D(this.#e),d(this.#e),this.#e._requestSchedulerPhase(z.VIRTUALIZATION,"configManager")}parseLightDomColumns(e){this.#u||(this.#g=Array.from(e.querySelectorAll("tbw-grid-column")),this.#u=this.#g.length?function(e){return Array.from(e.querySelectorAll("tbw-grid-column")).map(e=>{const t=e.getAttribute("field")||"";if(!t)return null;const o=e.getAttribute("type")||void 0,i={field:t,type:o&&/* @__PURE__ */new Set(["number","string","date","boolean","select"]).has(o)?o:void 0,header:e.getAttribute("header")||void 0,sortable:e.hasAttribute("sortable"),editable:e.hasAttribute("editable")},n=e.getAttribute("width");if(n){const e=parseFloat(n);!isNaN(e)&&/^\d+(\.\d+)?$/.test(n.trim())?i.width=e:i.width=n}const r=e.getAttribute("minWidth")||e.getAttribute("min-width");if(r){const e=parseFloat(r);isNaN(e)||(i.minWidth=e)}e.hasAttribute("resizable")&&(i.resizable=!0),e.hasAttribute("sizable")&&(i.resizable=!0);const s=e.getAttribute("editor"),l=e.getAttribute("renderer");s&&(i.__editorName=s),l&&(i.__rendererName=l);const a=e.getAttribute("options");a&&(i.options=a.split(",").map(e=>{const[t,o]=e.includes(":")?e.split(":"):[e.trim(),e.trim()];return{value:t.trim(),label:o?.trim()||t.trim()}}));const c=e.querySelector("tbw-grid-column-view"),d=e.querySelector("tbw-grid-column-editor"),h=e.querySelector("tbw-grid-column-header");c&&(i.__viewTemplate=c),d&&(i.__editorTemplate=d),h&&(i.__headerTemplate=h);const u=globalThis.DataGridElement,g=u?.getAdapters?.()??[],f=c??e,p=g.find(e=>e.canHandle(f));if(p){const e=p.createRenderer(f);e&&(i.viewRenderer=e)}const w=d??e,b=g.find(e=>e.canHandle(w));if(b){const e=b.createEditor(w);e&&(i.editor=e)}return i}).filter(e=>!!e)}(e):[])}clearLightDomCache(){this.#u=void 0}#T=/* @__PURE__ */new Map;registerLightDomHandler(e,t){this.#T.set(e.toLowerCase(),t)}unregisterLightDomHandler(e){this.#T.delete(e.toLowerCase())}observeLightDOM(e){this.#m&&this.#m.disconnect();const t=/* @__PURE__ */new Set;let o=null;const i=()=>{o=null;for(const e of t){const t=this.#T.get(e);t?.()}t.clear()};this.#m=new MutationObserver(e=>{for(const o of e){for(const e of o.addedNodes){if(e.nodeType!==Node.ELEMENT_NODE)continue;const o=e.tagName.toLowerCase();this.#T.has(o)&&t.add(o)}if("attributes"===o.type&&o.target.nodeType===Node.ELEMENT_NODE){const e=o.target.tagName.toLowerCase();this.#T.has(e)&&t.add(e)}}t.size>0&&!o&&(o=setTimeout(i,0))}),this.#m.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["title","field","header","width","hidden","id","icon","tooltip","order"]})}onChange(e){this.#b.push(e)}notifyChange(){for(const e of this.#b)e()}dispose(){this.#m?.disconnect(),this.#b=[],this.#v&&clearTimeout(this.#v)}}function $(){if("undefined"!=typeof window&&window.location){const e=window.location.hostname;if("localhost"===e||"127.0.0.1"===e||"::1"===e)return!0}return"undefined"!=typeof process&&"production"!==process.env?.NODE_ENV}function F(e,t){return`[tbw-grid${e?`#${e}`:""}${t?`:${t}`:""}]`}function W(e){return`<span role="checkbox" aria-checked="${e}" aria-label="${e}">${e?"🗹":"☐"}</span>`}function U(e){if(null==e||""===e)return"";if(e instanceof Date)return isNaN(e.getTime())?"":e.toLocaleDateString();if("number"==typeof e||"string"==typeof e){const t=new Date(e);return isNaN(t.getTime())?"":t.toLocaleDateString()}return""}function V(e){if(!e)return-1;const t=e.getAttribute("data-row");if(t)return parseInt(t,10);const o=e.closest(".data-grid-row");if(!o)return-1;const i=o.parentElement;if(!i)return-1;const n=i.querySelectorAll(":scope > .data-grid-row");for(let r=0;r<n.length;r++)if(n[r]===o)return r;return-1}function B(e){e&&e.querySelectorAll(".cell-focus").forEach(e=>e.classList.remove("cell-focus"))}function G(e){try{if("rtl"===getComputedStyle(e).direction)return"rtl"}catch{}try{const t=e.closest?.("[dir]")?.getAttribute("dir");if("rtl"===t)return"rtl"}catch{}return"ltr"}function X(e){return"rtl"===G(e)}function Y(e,t){return"left"===e||"right"===e?e:"rtl"===t?"start"===e?"right":"left":"start"===e?"left":"right"}function j(e,t){const o=t.renderer||t.viewRenderer;if(o)return o;if(!t.type)return;const i=e.__frameworkAdapter;if(i?.getTypeDefault){const e=i.getTypeDefault(t.type);if(e?.renderer)return e.renderer}}function K(e,t){if(t.format)return t.format;if(!t.type)return;const o=e.__frameworkAdapter;if(o?.getTypeDefault){const e=o.getTypeDefault(t.type);if(e?.format)return e.format}}const Z='input,select,textarea,[contenteditable="true"],[contenteditable=""],[tabindex]:not([tabindex="-1"])';function Q(e){return(e.__editingCellCount??0)>0}function J(e){e.__editingCellCount=0,e.removeAttribute("data-has-editing");e.querySelectorAll(".cell.editing").forEach(e=>e.classList.remove("editing"))}const ee=document.createElement("template");ee.innerHTML='<div class="cell" role="gridcell" part="cell"></div>';const te=document.createElement("template");function oe(){return ee.content.firstElementChild.cloneNode(!0)}function ie(){return te.content.firstElementChild.cloneNode(!0)}function ne(e){e.__cellDisplayCache=void 0,e.__cellCacheEpoch=void 0,e.__hasSpecialColumns=void 0}function re(e,t,o,i){const n=t.children,r=e._visibleColumns,s=r.length,l=n.length,a=s<l?s:l,c=e._focusRow,d=e._focusCol,h=e._hasAfterCellRenderHook?.()??!1;let u=e.__hasSpecialColumns;if(void 0===u){u=!1;const t=e.__frameworkAdapter;for(let e=0;e<s;e++){const o=r[e];if(o.__viewTemplate||o.__compiledView||o.renderer||o.viewRenderer||o.externalView||o.format||o.cellClass||"date"===o.type||"boolean"===o.type||o.type&&t?.getTypeDefault?.(o.type)?.renderer||o.type&&t?.getTypeDefault?.(o.type)?.format){u=!0;break}}e.__hasSpecialColumns=u}const g=String(i);if(u){for(let s=0;s<a;s++){if(r[s].externalView){if(!n[s].querySelector("[data-external-view]"))return void se(e,t,o,i)}}for(let s=0;s<a;s++){const l=r[s],a=n[s];a.getAttribute("data-row")!==g&&a.setAttribute("data-row",g);const u=a.classList.contains("editing");if(!u){const e=c===i&&d===s;e!==a.classList.contains("cell-focus")&&(a.classList.toggle("cell-focus",e),a.setAttribute("aria-selected",String(e)))}const p=l.cellClass;if(p){const t=a.getAttribute("data-dynamic-classes");t&&t.split(" ").forEach(e=>e&&a.classList.remove(e));try{const e=p(o[l.field],o,l),t="string"==typeof e?e.split(/\s+/):e;if(t&&t.length>0){const e=t.filter(e=>e&&"string"==typeof e);e.forEach(e=>a.classList.add(e)),a.setAttribute("data-dynamic-classes",e.join(" "))}else a.removeAttribute("data-dynamic-classes")}catch(f){console.warn(`${F(e.id)} cellClass callback error for column '${l.field}':`,f),a.removeAttribute("data-dynamic-classes")}}if(u)continue;const w=j(e,l);if(w){const n=o[l.field],r=w({row:o,value:n,field:l.field,column:l,cellEl:a});"string"==typeof r?(e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=v(r)):r instanceof Node?r.parentElement!==a&&(e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML="",a.appendChild(r)):null==r&&(e.__frameworkAdapter?.releaseCell?.(a),a.textContent=null==n?"":String(n)),h&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:n,cellElement:a,rowElement:t});continue}if(l.__compiledView){const n=o[l.field],r=l.__compiledView({row:o,value:n,field:l.field,column:l});l.__compiledView.__blocked?a.textContent="":(a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=v(r),_(a)),h&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:n,cellElement:a,rowElement:t});continue}if(l.__viewTemplate){const n=o[l.field],r=l.__viewTemplate.innerHTML;/Reflect\.|\bProxy\b|ownKeys\(/.test(r)?a.textContent="":(a.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(a),a.innerHTML=v(C(r,{row:o,value:n})),_(a)),h&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:n,cellElement:a,rowElement:t});continue}if(l.externalView)continue;const b=o[l.field];let m;const y=K(e,l);if(y){try{const e=y(b,o);m=null==e?"":String(e)}catch(f){console.warn(`${F(e.id)} Format error in column '${l.field}':`,f),m=null==b?"":String(b)}a.textContent=m}else"date"===l.type?(m=U(b),a.textContent=m):"boolean"===l.type?a.innerHTML=W(!!b):(m=null==b?"":String(b),a.textContent=m);h&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:s,value:b,cellElement:a,rowElement:t})}}else for(let p=0;p<a;p++){const s=n[p];if(s.classList.contains("editing"))continue;s.firstElementChild&&e.__frameworkAdapter?.releaseCell?.(s);const l=r[p],a=o[l.field];s.textContent=null==a?"":String(a),s.getAttribute("data-row")!==g&&s.setAttribute("data-row",g);const u=c===i&&d===p;u!==s.classList.contains("cell-focus")&&(s.classList.toggle("cell-focus",u),s.setAttribute("aria-selected",String(u))),h&&e._afterCellRender?.({row:o,rowIndex:i,column:l,colIndex:p,value:a,cellElement:s,rowElement:t})}}function se(e,t,o,i){t.classList.remove("tbw-row-loading"),t.removeAttribute("aria-busy");const n=e.__frameworkAdapter;if(n?.releaseCell){const e=t.children;for(let t=e.length-1;t>=0;t--)n.releaseCell(e[t])}t.innerHTML="";const r=e._visibleColumns,s=r.length,l=e._focusRow,a=e._focusCol,c=e._hasAfterCellRenderHook?.()??!1,d=document.createDocumentFragment();for(let u=0;u<s;u++){const n=r[u],s=oe();s.setAttribute("aria-colindex",String(u+1)),s.setAttribute("data-col",String(u)),s.setAttribute("data-row",String(i)),s.setAttribute("data-field",n.field),s.setAttribute("data-header",n.header??n.field),n.type&&s.setAttribute("data-type",n.type);let g=o[n.field];const f=K(e,n);if(f)try{g=f(g,o)}catch(h){console.warn(`${F(e.id)} Format error in column '${n.field}':`,h)}const p=n.__compiledView,w=n.__viewTemplate,b=j(e,n),m=n.externalView;let y=!1;if(b){const e=b({row:o,value:g,field:n.field,column:n,cellEl:s});"string"==typeof e?(s.innerHTML=v(e),y=!0):e instanceof Node?e.parentElement!==s&&(s.textContent="",s.appendChild(e)):null==e&&(s.textContent=null==g?"":String(g))}else if(m){const t=m,i=document.createElement("div");i.setAttribute("data-external-view",""),i.setAttribute("data-field",n.field),s.appendChild(i);const r={row:o,value:g,field:n.field,column:n};if(t.mount)try{t.mount({placeholder:i,context:r,spec:t})}catch(h){console.warn(`${F(e.id)} External view mount error for column '${n.field}':`,h)}else queueMicrotask(()=>{try{e.dispatchEvent(new CustomEvent("mount-external-view",{bubbles:!0,composed:!0,detail:{placeholder:i,spec:t,context:r}}))}catch(h){console.warn(`${F(e.id)} External view event dispatch error for column '${n.field}':`,h)}});i.setAttribute("data-mounted","")}else if(p){const e=p({row:o,value:g,field:n.field,column:n}),t=p.__blocked;s.innerHTML=t?"":v(e),y=!0,t&&(s.textContent="",s.setAttribute("data-blocked-template",""))}else if(w){const e=w.innerHTML;/Reflect\.|\bProxy\b|ownKeys\(/.test(e)?(s.textContent="",s.setAttribute("data-blocked-template","")):(s.innerHTML=v(C(e,{row:o,value:g})),y=!0)}else f?s.textContent=null==g?"":String(g):"date"===n.type?s.textContent=U(g):"boolean"===n.type?s.innerHTML=W(!!g):s.textContent=null==g?"":String(g);if(y){_(s);const e=s.textContent||"";/Proxy|Reflect\.ownKeys/.test(e)&&(s.textContent=e.replace(/Proxy|Reflect\.ownKeys/g,"").trim(),/Proxy|Reflect\.ownKeys/.test(s.textContent||"")&&(s.textContent=""))}s.hasAttribute("data-blocked-template")&&(s.textContent||"").trim().length&&(s.textContent=""),n.editable?s.tabIndex=0:"boolean"===n.type&&(s.hasAttribute("tabindex")||(s.tabIndex=0)),l===i&&a===u?(s.classList.add("cell-focus"),s.setAttribute("aria-selected","true")):s.setAttribute("aria-selected","false");const R=n.cellClass;if(R)try{const e=R(o[n.field],o,n),t="string"==typeof e?e.split(/\s+/):e;if(t&&t.length>0){const e=t.filter(e=>e&&"string"==typeof e);e.forEach(e=>s.classList.add(e)),s.setAttribute("data-dynamic-classes",e.join(" "))}}catch(h){console.warn(`${F(e.id)} cellClass callback error for column '${n.field}':`,h)}c&&e._afterCellRender?.({row:o,rowIndex:i,column:n,colIndex:u,value:g,cellElement:s,rowElement:t}),d.appendChild(s)}t.appendChild(d)}function le(e,t,o){if(t.target?.closest(".resize-handle"))return;const i=V(o.querySelector(".cell[data-row]"));if(i<0)return;const n=e._rows[i];if(!n)return;if(e._dispatchRowClick?.(t,i,n,o))return;const r=t.target?.closest(".cell[data-col]");if(r){const o=Number(r.getAttribute("data-col"));if(!isNaN(o)){if(e._dispatchCellClick?.(t,i,o,r))return;const n=e._focusRow!==i||e._focusCol!==o;if(e._focusRow=i,e._focusCol=o,r.classList.contains("editing")){n&&(B(e._bodyEl??e),r.classList.add("cell-focus"));const t=r.querySelector(Z);try{t?.focus({preventScroll:!0})}catch{}return}ae(e)}}}function ae(e,t){if(e._virtualization?.enabled){const{rowHeight:t,container:o,viewportEl:i}=e._virtualization,n=o,r=i?.clientHeight??n?.clientHeight??0;if(n&&r>0){const o=e._focusRow*t;o<n.scrollTop?n.scrollTop=o:o+t>n.scrollTop+r&&(n.scrollTop=o-r+t)}}const o=void 0!==e._activeEditRows&&-1!==e._activeEditRows||!!e._isGridEditMode;o||e.refreshVirtualWindow(!1),B(e._bodyEl),Array.from(e._bodyEl.querySelectorAll('[aria-selected="true"]')).forEach(e=>{e.setAttribute("aria-selected","false")});const i=e._focusRow,n=e._virtualization.start??0,r=e._virtualization.end??e._rows.length;if(i>=n&&i<r){const r=e._bodyEl.querySelectorAll(".data-grid-row")[i-n];let s=r?.children[e._focusCol];if(s&&s.classList?.contains("cell")||(s=r?.querySelector(`.cell[data-col="${e._focusCol}"]`)??r?.querySelector(".cell[data-col]")),s){s.classList.add("cell-focus"),s.setAttribute("aria-selected","true");const i=e.querySelector(".tbw-scroll-area");if(i&&s&&(!o||t?.forceHorizontalScroll))if(t?.forceScrollLeft)i.scrollLeft=0;else if(t?.forceScrollRight)i.scrollLeft=i.scrollWidth-i.clientWidth;else{const t=e._getHorizontalScrollOffsets?.(r??void 0,s)??{left:0,right:0};if(!t.skipScroll){const e=s.getBoundingClientRect(),o=i.getBoundingClientRect(),n=e.left-o.left+i.scrollLeft,r=n+e.width,l=i.scrollLeft+t.left,a=i.scrollLeft+i.clientWidth-t.right;n<l?i.scrollLeft=n-t.left:r>a&&(i.scrollLeft=r-i.clientWidth+t.right)}}if(o&&s.classList.contains("editing")){const e=s.querySelector(Z);if(e&&document.activeElement!==e)try{e.focus({preventScroll:!0})}catch{}}else if(o&&!s.contains(document.activeElement)){s.hasAttribute("tabindex")||s.setAttribute("tabindex","-1");try{s.focus({preventScroll:!0})}catch{}}else o||document.activeElement!==e&&e.focus({preventScroll:!0})}}}te.innerHTML='<div class="data-grid-row" role="row" part="row"></div>';const ce=/* @__PURE__ */new WeakMap;function de(e,t){const o=V(t),i=function(e){if(!e)return-1;const t=e.getAttribute("data-col");return t?parseInt(t,10):-1}(t);if(o<0||i<0)return;e._focusRow=o,e._focusCol=i,B(e._bodyEl),t.classList.add("cell-focus"),t.setAttribute("aria-selected","true");const n=t.closest("tbw-grid");n&&document.activeElement!==n&&n.focus({preventScroll:!0})}function he(e,t,o,i){let n=null;const r=o.composedPath?.();if(n=r&&r.length>0?r[0]:o.target,n&&!t.contains(n)){const e=document.elementFromPoint(o.clientX,o.clientY);e&&(n=e)}const s=n?.closest?.("[data-col]"),l=n?.closest?.(".data-grid-row"),a=n?.closest?.(".header-row");let c,d,h,u,g,f;return s&&(c=parseInt(s.getAttribute("data-row")??"-1",10),d=parseInt(s.getAttribute("data-col")??"-1",10),c>=0&&d>=0&&(h=e._rows[c],f=e._visibleColumns[d],u=f?.field,g=h&&u?h[u]:void 0)),{type:i,row:h,rowIndex:void 0!==c&&c>=0?c:void 0,colIndex:void 0!==d&&d>=0?d:void 0,field:u,value:g,column:f,originalEvent:o,cellElement:s??void 0,rowElement:l??void 0,isHeader:!!a,cell:void 0!==c&&void 0!==d&&c>=0&&d>=0?{row:c,col:d}:void 0}}function ue(e,t,o,i){t.addEventListener("keydown",t=>function(e,t){if(e._dispatchKeyDown?.(t))return;const o=e._rows.length-1,i=e._visibleColumns.length-1,n=void 0!==e._activeEditRows&&-1!==e._activeEditRows,r=e._visibleColumns[e._focusCol],s=r?.type,l=t.composedPath?.()??[],a=l.length?l[0]:t.target,c=e=>{if(!e)return!1;const t=e.tagName;return"INPUT"===t||"SELECT"===t||"TEXTAREA"===t||!!e.isContentEditable};if((!c(a)||"Home"!==t.key&&"End"!==t.key)&&!(c(a)&&("ArrowUp"===t.key||"ArrowDown"===t.key)&&"INPUT"===a.tagName&&"number"===a.type||c(a)&&("ArrowLeft"===t.key||"ArrowRight"===t.key)||c(a)&&("Enter"===t.key||"Escape"===t.key)||n&&"select"===s&&("ArrowDown"===t.key||"ArrowUp"===t.key))){switch(t.key){case"Tab":return t.preventDefault(),t.shiftKey?e._focusCol>0?e._focusCol-=1:e._focusRow>0&&("function"==typeof e.commitActiveRowEdit&&e._activeEditRows===e._focusRow&&e.commitActiveRowEdit(),e._focusRow-=1,e._focusCol=i):e._focusCol<i?e._focusCol+=1:("function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow<o&&(e._focusRow+=1,e._focusCol=0)),void ae(e);case"ArrowDown":n&&"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow=Math.min(o,e._focusRow+1),t.preventDefault();break;case"ArrowUp":n&&"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow=Math.max(0,e._focusRow-1),t.preventDefault();break;case"ArrowRight":{const o=X(e);e._focusCol=o?Math.max(0,e._focusCol-1):Math.min(i,e._focusCol+1),t.preventDefault();break}case"ArrowLeft":{const o=X(e);e._focusCol=o?Math.min(i,e._focusCol+1):Math.max(0,e._focusCol-1),t.preventDefault();break}case"Home":return t.ctrlKey||t.metaKey?(n&&"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow=0,e._focusCol=0):e._focusCol=0,t.preventDefault(),void ae(e,{forceScrollLeft:!0});case"End":return t.ctrlKey||t.metaKey?(n&&"function"==typeof e.commitActiveRowEdit&&e.commitActiveRowEdit(),e._focusRow=o,e._focusCol=i):e._focusCol=i,t.preventDefault(),void ae(e,{forceScrollRight:!0});case"PageDown":e._focusRow=Math.min(o,e._focusRow+20),t.preventDefault();break;case"PageUp":e._focusRow=Math.max(0,e._focusRow-20),t.preventDefault();break;case"Enter":{const o=e._focusRow,i=e._focusCol,n=e._visibleColumns[i],r=e._rows[o],s=n?.field??"",l=s&&r?r[s]:void 0,a=e.querySelector(`[data-row="${o}"][data-col="${i}"]`),c=new CustomEvent("cell-activate",{cancelable:!0,detail:{rowIndex:o,colIndex:i,column:n,field:s,value:l,row:r,cellEl:a,trigger:"keyboard",originalEvent:t}});e.dispatchEvent(c);const d=new CustomEvent("activate-cell",{cancelable:!0,detail:{row:o,col:i}});if(e.dispatchEvent(d),c.defaultPrevented||d.defaultPrevented)return void t.preventDefault();break}default:return}ae(e)}}(e,t),{signal:i}),o.addEventListener("mousedown",t=>function(e,t,o){const i=he(e,t,o,"mousedown");e._dispatchCellMouseDown?.(i)&&ce.set(e,!0)}(e,o,t),{signal:i}),document.addEventListener("mousemove",t=>function(e,t,o){if(!ce.get(e))return;const i=he(e,t,o,"mousemove");e._dispatchCellMouseMove?.(i)}(e,o,t),{signal:i}),document.addEventListener("mouseup",t=>function(e,t,o){if(!ce.get(e))return;const i=he(e,t,o,"mouseup");e._dispatchCellMouseUp?.(i),ce.set(e,!1)}(e,o,t),{signal:i})}let ge;function fe(e){ge=e}class pe{#e;#H=/* @__PURE__ */new Set;#P=/* @__PURE__ */new Map;constructor(e){this.#e=e}focusCell(e,t){const o=this.#e,i=o._rows.length-1;if(i<0)return;let n;if("string"==typeof t){if(n=o._visibleColumns.findIndex(e=>e.field===t),n<0)return}else n=t;const r=o._visibleColumns.length-1;r<0||(o._focusRow=Math.max(0,Math.min(e,i)),o._focusCol=Math.max(0,Math.min(n,r)),ae(o))}get focusedCell(){const e=this.#e;if(0===e._rows.length||0===e._visibleColumns.length)return null;const t=e._visibleColumns[e._focusCol];return{rowIndex:e._focusRow,colIndex:e._focusCol,field:t?.field??""}}scrollToRow(e,t){const o=this.#e._virtualization;if(!o.enabled)return;const i=o.container;if(!i)return;const n=this.#e._rows.length;if(0===n)return;const r=Math.max(0,Math.min(e,n-1)),s=t?.align??"nearest",l=t?.behavior??"instant";let a,c;const d=o.positionCache;o.variableHeights&&d&&d.length>r?(a=d[r].offset,c=d[r].height):(a=r*o.rowHeight,c=o.rowHeight);const h=o.viewportEl?.clientHeight??i.clientHeight??0;if(h<=0)return;const u=i.scrollTop,g=a+c,f=u+h;let p;switch(s){case"start":p=a;break;case"center":p=a-h/2+c/2;break;case"end":p=g-h;break;default:if(a>=u&&g<=f)return;p=a<u?a:g-h}p=Math.max(0,p),"smooth"===l?i.scrollTo({top:p,behavior:"smooth"}):i.scrollTop=p}scrollToRowById(e,t){const o=this.#e._getRowEntry(e);o&&this.scrollToRow(o.index,t)}registerExternalFocusContainer(e){if(this.#H.has(e))return;this.#H.add(e);const t=new AbortController,o=t.signal,i=this.#e;e.addEventListener("focusin",()=>{i.dataset.hasFocus=""},{signal:o}),e.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&this.containsFocus(t)||delete i.dataset.hasFocus},{signal:o}),this.#P.set(e,()=>t.abort())}unregisterExternalFocusContainer(e){this.#H.delete(e);const t=this.#P.get(e);t&&(t(),this.#P.delete(e))}containsFocus(e){const t=e??document.activeElement;return!!t&&(!!this.#e.contains(t)||this.isInExternalFocusContainer(t))}isInExternalFocusContainer(e){for(const t of this.#H)if(t.contains(e))return!0;return!1}destroy(){for(const e of this.#P.values())e();this.#P.clear(),this.#H.clear()}}const we="function"==typeof requestIdleCallback;function be(e){we?cancelIdleCallback(e):clearTimeout(e)}function me(e,t){if(t){const o=t({size:e});if("string"==typeof o){const e=document.createElement("div");return e.innerHTML=o,e}return o}return function(e){const t=document.createElement("div");return t.className=`tbw-spinner tbw-spinner--${e}`,t.setAttribute("role","progressbar"),t.setAttribute("aria-label","Loading"),t}(e)}function ve(e){let t=null,o=null,i=null,n=null;const r=i=>{if(!t)return;const n=i.clientX-t.startX,r=Math.max(40,t.startWidth+n),s=e._visibleColumns[t.colIndex];s.width=r,s.__userResized=!0,s.__renderedWidth=r,null==o&&(o=requestAnimationFrame(()=>{o=null,e.updateTemplate?.()})),e.dispatchEvent(new CustomEvent("column-resize",{detail:{field:s.field,width:r}}))};let s=!1;const l=()=>{const o=null!==t;o&&(s=!0,requestAnimationFrame(()=>{s=!1})),window.removeEventListener("mousemove",r),window.removeEventListener("mouseup",l),null!==i&&(document.documentElement.style.cursor=i,i=null),null!==n&&(document.body.style.userSelect=n,n=null),t=null,o&&e.requestStateChange&&e.requestStateChange()};return{get isResizing(){return null!==t||s},start(o,s,a){o.preventDefault();const c=e._visibleColumns[s],d="number"==typeof c?.width?c.width:void 0,h=c?.__renderedWidth??d??a.getBoundingClientRect().width;t={startX:o.clientX,colIndex:s,startWidth:h},window.addEventListener("mousemove",r),window.addEventListener("mouseup",l),null===i&&(i=document.documentElement.style.cursor),document.documentElement.style.cursor="e-resize",null===n&&(n=document.body.style.userSelect),document.body.style.userSelect="none"},resetColumn(t){const o=e._visibleColumns[t];o&&(o.__userResized=!1,o.__renderedWidth=void 0,o.width=o.__originalWidth,e.updateTemplate?.(),e.requestStateChange?.(),e.dispatchEvent(new CustomEvent("column-resize-reset",{detail:{field:o.field,width:o.width}})))},dispose(){l()}}}const Ce="data-animating",ye={change:"--tbw-row-change-duration",insert:"--tbw-row-insert-duration",remove:"--tbw-row-remove-duration"},_e={change:500,insert:300,remove:200};function Re(e,t){const o=ye[t],i=getComputedStyle(e).getPropertyValue(o);if(i){const e=function(e){const t=e.trim().toLowerCase();return t.endsWith("ms")?parseFloat(t):t.endsWith("s")?1e3*parseFloat(t):parseFloat(t)}(i);if(!isNaN(e)&&e>0)return e}return _e[t]}function Se(e,t,o){if(t<0)return Promise.resolve(!1);const i=e.findRenderedRowElement?.(t);return i?new Promise(e=>{!function(e,t,o){e.removeAttribute(Ce),e.offsetWidth,e.setAttribute(Ce,t);const i=Re(e,t);setTimeout(()=>{"remove"!==t&&e.removeAttribute(Ce),o?.()},i)}(i,o,()=>e(!0))}):Promise.resolve(!1)}function Ee(e,t){if(t)return t(e);const o=e;return"id"in o&&null!=o.id?String(o.id):"_id"in o&&null!=o._id?String(o._id):void 0}function xe(e,t,o){const i=Ee(e,o);if(void 0===i)throw new Error(`${F(t)} Cannot determine row ID. Configure getRowId in gridConfig or ensure rows have an "id" property.`);return i}class Ae{#e;constructor(e){this.#e=e}resolveRowId(e){return xe(e,this.#e.id,this.#e.effectiveConfig?.getRowId)}getRow(e){return this.#e._getRowEntry(e)?.row}getRowEntry(e){return this.#e._getRowEntry(e)}updateRow(e,t,o="api"){const i=this.#e,n=i._getRowEntry(e);if(!n)throw new Error(`${F(i.id)} Row with ID "${e}" not found. Ensure the row exists and getRowId is correctly configured.`);const{row:r,index:s}=n,l=[];for(const[a,c]of Object.entries(t)){const e=r[a];e!==c&&(l.push({field:a,oldValue:e,newValue:c}),r[a]=c)}for(const{field:a,oldValue:c,newValue:d}of l)i.dispatchEvent(new CustomEvent("cell-change",{detail:{row:r,rowId:e,rowIndex:s,field:a,oldValue:c,newValue:d,changes:t,source:o},bubbles:!0,composed:!0}));l.length>0&&(ne(i),i._requestSchedulerPhase(z.VIRTUALIZATION,"updateRow"),i._emitDataChange())}updateRows(e,t="api"){const o=this.#e;let i=!1;for(const{id:n,changes:r}of e){const e=o._getRowEntry(n);if(!e)throw new Error(`${F(o.id)} Row with ID "${n}" not found. Ensure the row exists and getRowId is correctly configured.`);const{row:s,index:l}=e;for(const[a,c]of Object.entries(r)){const e=s[a];e!==c&&(i=!0,s[a]=c,o.dispatchEvent(new CustomEvent("cell-change",{detail:{row:s,rowId:n,rowIndex:l,field:a,oldValue:e,newValue:c,changes:r,source:t},bubbles:!0,composed:!0})))}}i&&(ne(o),o._requestSchedulerPhase(z.VIRTUALIZATION,"updateRows"),o._emitDataChange())}async insertRow(e,t,o=!0){const i=this.#e,n=Math.max(0,Math.min(e,i._rows.length));i.sourceRows=[...i.sourceRows,t];const r=[...i._rows];r.splice(n,0,t),i._rows=r,i._sortState&&(i.__originalOrder=[...i.__originalOrder,t]),ne(i),i._rebuildRowIdMap(),i.__rowRenderEpoch++;for(const s of i._rowPool)s.__epoch=-1;i.refreshVirtualWindow(!0),i._emitPluginEvent("row-inserted",{row:t,index:n}),i._emitDataChange(),o&&(await new Promise(e=>requestAnimationFrame(()=>e())),await Se(i,n,"insert"))}async removeRow(e,t=!0){const o=this.#e,i=o._rows[e];if(!i)return;t&&await Se(o,e,"remove");const n=o._rows.indexOf(i);if(n<0)return i;const r=[...o._rows];r.splice(n,1),o._rows=r;const s=o.sourceRows.indexOf(i);if(s>=0){const e=[...o.sourceRows];e.splice(s,1),o.sourceRows=e}if(o._sortState){const e=o.__originalOrder.indexOf(i);if(e>=0){const t=[...o.__originalOrder];t.splice(e,1),o.__originalOrder=t}}ne(o),o._rebuildRowIdMap(),o.__rowRenderEpoch++;for(const l of o._rowPool)l.__epoch=-1;return o.refreshVirtualWindow(!0),o._emitDataChange(),t&&requestAnimationFrame(()=>{o.querySelectorAll('[data-animating="remove"]').forEach(e=>{e.removeAttribute("data-animating")})}),i}}function Te(e,t,o){const i=document.createElement(e);if(t)for(const n in t){const e=t[n];null!=e&&i.setAttribute(n,e)}return i}function He(e,t){const o=document.createElement("div");if(e&&(o.className=e),t)for(const i in t){const e=t[i];null!=e&&o.setAttribute(i,e)}return o}function Pe(e,t,o){const i=document.createElement("button");if(e&&(i.className=e),t)for(const n in t){const e=t[n];null!=e&&i.setAttribute(n,e)}return i}const Me=document.createElement("template");function Le(){return Me.content.cloneNode(!0)}function Oe(e){const t=document.createDocumentFragment(),o=He(e.hasShell?"tbw-grid-root has-shell":"tbw-grid-root");if(e.hasShell&&e.shellHeader&&e.shellBody)o.appendChild(e.shellHeader),o.appendChild(e.shellBody);else{const e=He("tbw-grid-content");e.appendChild(Le()),o.appendChild(e)}return t.appendChild(o),t}function De(e){return e?"string"==typeof e?e:e.outerHTML:""}function ke(e){return!!e?.header?.title||(!!e?.header?.toolbarContents?.length||(!!e?.toolPanels?.length||(!!e?.headerContents?.length||(!!e?.header?.lightDomContent?.length||!!e?.header?.hasToolButtonsContainer))))}function Ie(e,t){const o=e.querySelector("tbw-grid-header");if(!o)return;if(!t.lightDomTitle){const e=o.getAttribute("title");e&&(t.lightDomTitle=e)}const i=o.querySelectorAll("tbw-grid-header-content");i.length>0&&0===t.lightDomHeaderContent.length&&(t.lightDomHeaderContent=Array.from(i)),o.style.display="none"}function ze(e,t,o){const i=e.querySelector(":scope > tbw-grid-tool-buttons");if(!i)return;t.hasToolButtonsContainer=!0;const n="light-dom-toolbar-content";if(t.lightDomToolbarContentIds.has(n))return;const r={id:n,order:0,render:e=>{for(;i.firstChild;)e.appendChild(i.firstChild);return()=>{for(;e.firstChild;)i.appendChild(e.firstChild)}}};t.toolbarContents.set(n,r),t.lightDomToolbarContentIds.add(n),i.style.display="none"}function qe(e,t,o){e.querySelectorAll(":scope > tbw-grid-tool-panel").forEach(e=>{const i=e,n=i.getAttribute("id"),r=i.getAttribute("title");if(!n||!r)return void console.warn(`[parseLightDomToolPanels] Tool panel missing required id or title attribute: id="${n??""}", title="${r??""}"`);const s=i.getAttribute("icon")??void 0,l=i.getAttribute("tooltip")??void 0,a=parseInt(i.getAttribute("order")??"100",10);let c;const d=o?.(i);if(d)c=d;else{const e=i.innerHTML.trim();c=t=>{const o=document.createElement("div");return o.innerHTML=e,t.appendChild(o),()=>o.remove()}}const h=t.toolPanels.get(n);if(h){if(d){h.render=c,h.order=a,h.icon=s,h.tooltip=l;const e=t.panelCleanups.get(n);e&&(e(),t.panelCleanups.delete(n))}return}const u={id:n,title:r,icon:s,tooltip:l,order:a,render:c};t.toolPanels.set(n,u),t.lightDomToolPanelIds.add(n),i.style.display="none"})}function Ne(e,t,o){const i=t?.header?.toolbarContents??[],n=[...o.toolbarContents.values()],r=new Set(i.map(e=>e.id)),s=[...i];for(const l of n)r.has(l.id)||s.push(l);for(const l of s){if(o.toolbarContentCleanups.has(l.id))continue;if(!l.render)continue;const t=e.querySelector(`[data-toolbar-content="${l.id}"]`);if(!t)continue;const i=l.render(t);i&&o.toolbarContentCleanups.set(l.id,i)}}function $e(e,t){const o=t.lightDomHeaderContent.length>0&&!t.lightDomContentMoved,i=t.headerContents.size>0;if(!o&&!i)return;const n=e.querySelector(".tbw-shell-content");if(!n)return;if(o){for(const e of t.lightDomHeaderContent)e.style.display="",n.appendChild(e);t.lightDomContentMoved=!0}const r=[...t.headerContents.values()].sort((e,t)=>(e.order??100)-(t.order??100));for(const s of r){const e=t.headerContentCleanups.get(s.id);e&&(e(),t.headerContentCleanups.delete(s.id));let o=n.querySelector(`[data-header-content="${s.id}"]`);o||(o=document.createElement("div"),o.setAttribute("data-header-content",s.id),n.appendChild(o));const i=s.render(o);i&&t.headerContentCleanups.set(s.id,i)}}function Fe(e,t,o){if(t.isPanelOpen)for(const[i,n]of t.toolPanels){const o=t.expandedSections.has(i),r=e.querySelector(`[data-section="${i}"]`),s=r?.querySelector(".tbw-accordion-content");if(!r||!s)continue;r.classList.toggle("expanded",o);const l=r.querySelector(".tbw-accordion-header");if(l&&l.setAttribute("aria-expanded",String(o)),o){if(0===s.children.length){const e=n.render(s);e&&t.panelCleanups.set(i,e)}}else{const e=t.panelCleanups.get(i);e&&(e(),t.panelCleanups.delete(i)),s.innerHTML=""}}}function We(e,t){const o=e.querySelector("[data-panel-toggle]");o&&(o.classList.toggle("active",t.isPanelOpen),o.setAttribute("aria-pressed",String(t.isPanelOpen)))}function Ue(e,t){const o=e.querySelector(".tbw-tool-panel");o&&(o.classList.toggle("open",t.isPanelOpen),t.isPanelOpen||(o.style.width=""))}function Ve(e){for(const t of e.toolbarContentCleanups.values())t();e.toolbarContentCleanups.clear();for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.headerContentCleanups.values())t();e.headerContentCleanups.clear(),e.lightDomContentMoved=!1}function Be(e,t,o){const i=e.querySelector(`[data-section="${t}"]`);i&&i.classList.toggle("expanded",o)}function Ge(e,t,o,i){const r=ke(t),s=[],l=["tbw-grid-header","tbw-grid-tool-buttons","tbw-grid-tool-panel","tbw-grid-column","tbw-grid-detail","tbw-grid-responsive-card"];for(const n of l){e.querySelectorAll(`:scope > ${n}`).forEach(e=>s.push(e))}e.replaceChildren();for(const n of s)e.appendChild(n);if(r){const r=De(i?.toolPanel??n.toolPanel),s=De(i?.expand??n.expand);De(i?.collapse??n.collapse);const l=[...t?.header?.toolbarContents??[]].sort((e,t)=>(e.order??0)-(t.order??0)),a=[...t?.toolPanels??[]].sort((e,t)=>(e.order??100)-(t.order??100)),c={title:t?.header?.title??void 0,hasPanels:a.length>0,isPanelOpen:o.isPanelOpen,toolPanelIcon:r,configButtons:l.map(e=>({id:e.id,hasElement:!1,hasRender:!!e.render})),apiButtons:[]},d={position:t?.toolPanel?.position??"right",isPanelOpen:o.isPanelOpen,expandIcon:s,panels:a.map(e=>({id:e.id,title:e.title,icon:De(e.icon),isExpanded:o.expandedSections.has(e.id)}))},h=Oe({hasShell:!0,shellHeader:function(e){const t=He("tbw-shell-header",{part:"shell-header",role:"presentation"});if(e.title){const o=He("tbw-shell-title");o.textContent=e.title,t.appendChild(o)}const o=He("tbw-shell-content",{part:"shell-content",role:"presentation","data-light-dom-header-content":""});t.appendChild(o);const i=He("tbw-shell-toolbar",{part:"shell-toolbar",role:"presentation"});for(const n of e.configButtons)n.hasRender&&i.appendChild(He("tbw-toolbar-content-slot",{"data-toolbar-content":n.id}));for(const n of e.apiButtons)n.hasRender&&i.appendChild(He("tbw-toolbar-content-slot",{"data-toolbar-content":n.id}));if((e.configButtons.some(e=>e.hasRender)||e.apiButtons.some(e=>e.hasRender))&&e.hasPanels&&i.appendChild(He("tbw-toolbar-separator")),e.hasPanels){const t=Pe(e.isPanelOpen?"tbw-toolbar-btn active":"tbw-toolbar-btn",{"data-panel-toggle":"",title:"Settings","aria-label":"Toggle settings panel","aria-pressed":String(e.isPanelOpen),"aria-controls":"tbw-tool-panel"});t.innerHTML=e.toolPanelIcon,i.appendChild(t)}return t.appendChild(i),t}(c),shellBody:function(e){const t=He("tbw-shell-body"),o=e.panels.length>0,i=1===e.panels.length,n=He("tbw-grid-content");n.appendChild(Le());let r=null;if(o){r=Te("aside",{class:e.isPanelOpen?"tbw-tool-panel open":"tbw-tool-panel",part:"tool-panel","data-position":e.position,role:"presentation",id:"tbw-tool-panel"});const t="left"===e.position?"right":"left";r.appendChild(He("tbw-tool-panel-resize",{"data-resize-handle":"","data-handle-position":t,"aria-hidden":"true"}));const o=He("tbw-tool-panel-content",{role:"presentation"}),n=He("tbw-accordion");for(const r of e.panels){const t=He(`tbw-accordion-section${r.isExpanded?" expanded":""}${i?" single":""}`,{"data-section":r.id}),o=Pe("tbw-accordion-header",{"aria-expanded":String(r.isExpanded),"aria-controls":`tbw-section-${r.id}`});if(i&&o.setAttribute("aria-disabled","true"),r.icon){const e=Te("span",{class:"tbw-accordion-icon"});e.innerHTML=r.icon,o.appendChild(e)}const s=Te("span",{class:"tbw-accordion-title"});if(s.textContent=r.title,o.appendChild(s),!i){const t=Te("span",{class:"tbw-accordion-chevron"});t.innerHTML=e.expandIcon,o.appendChild(t)}t.appendChild(o),t.appendChild(He("tbw-accordion-content",{id:`tbw-section-${r.id}`,role:"presentation"})),n.appendChild(t)}o.appendChild(n),r.appendChild(o)}return"left"===e.position&&r?(t.appendChild(r),t.appendChild(n)):(t.appendChild(n),r&&t.appendChild(r)),t}(d)});e.appendChild(h)}else{const t=Oe({hasShell:!1});e.appendChild(t)}return r}Me.innerHTML='\n <div class="tbw-scroll-area">\n <div class="rows-body-wrapper">\n <div class="rows-body" role="grid">\n <div class="header" role="rowgroup">\n <div class="header-row" role="row" part="header-row"></div>\n </div>\n <div class="rows-container" role="presentation">\n <div class="rows-viewport" role="presentation">\n <div class="rows"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="faux-vscroll">\n <div class="faux-vscroll-spacer"></div>\n </div>\n <div class="tbw-sr-only" aria-live="polite" aria-atomic="true"></div>\n';const Xe="tbw-grid-styles";let Ye="";const je=/* @__PURE__ */new Map;function Ke(){const e=function(){let e=document.getElementById(Xe);return e||(e=document.createElement("style"),e.id=Xe,e.setAttribute("data-tbw-grid","true"),document.head.appendChild(e)),e}(),t=Array.from(je.values()).join("\n");e.textContent=`${Ye}\n\n/* Plugin Styles */\n${t}`}async function Ze(e){if(Ye)return;if("string"==typeof e&&e.length>0)return Ye=e,void Ke();await new Promise(e=>setTimeout(e,50));const t=function(){try{for(const e of Array.from(document.styleSheets))try{const t=Array.from(e.cssRules||[]).map(e=>e.cssText).join("\n");if(t.includes(".tbw-grid-root")&&t.includes("tbw-grid"))return t}catch{continue}}catch(e){console.warn("[tbw-grid] Failed to extract grid.css from document stylesheets:",e)}return null}();t?(Ye=t,Ke()):"undefined"!=typeof process&&"test"===process.env?.NODE_ENV||console.warn("[tbw-grid] Could not find grid.css in document.styleSheets. Grid styling will not work.","Available stylesheets:",Array.from(document.styleSheets).map(e=>e.href||"(inline)"))}function Qe(e){e.startY=null,e.startX=null,e.lastY=null,e.lastX=null,e.lastTime=null,e.locked=!1}function Je(e){e.momentumRaf&&(cancelAnimationFrame(e.momentumRaf),e.momentumRaf=0)}function et(e,t){(Math.abs(e.velocityY)>.1||Math.abs(e.velocityX)>.1)&&function(e,t){const o=.95,i=.01,n=()=>{e.velocityY*=o,e.velocityX*=o;const r=16*e.velocityY,s=16*e.velocityX;Math.abs(e.velocityY)>i&&(t.fauxScrollbar.scrollTop+=r),Math.abs(e.velocityX)>i&&t.scrollArea&&(t.scrollArea.scrollLeft+=s),Math.abs(e.velocityY)>i||Math.abs(e.velocityX)>i?e.momentumRaf=requestAnimationFrame(n):e.momentumRaf=0};e.momentumRaf=requestAnimationFrame(n)}(e,t),Qe(e)}function tt(e,t,o,i){e.addEventListener("pointerdown",o=>{"touch"===o.pointerType&&null===t.activePointerId&&(t.activePointerId=o.pointerId,e.setPointerCapture(o.pointerId),function(e,t,o){Je(o),o.startY=t,o.startX=e,o.lastY=t,o.lastX=e,o.lastTime=performance.now(),o.velocityY=0,o.velocityX=0,o.locked=!1}(o.clientX,o.clientY,t))},{passive:!0,signal:i}),e.addEventListener("pointermove",e=>{if(e.pointerId!==t.activePointerId)return;const i=function(e,t,o,i){if(null===o.lastY||null===o.lastX)return!1;const n=performance.now(),r=o.lastY-t,s=o.lastX-e;if(null!==o.lastTime){const e=n-o.lastTime;e>0&&(o.velocityY=r/e,o.velocityX=s/e)}if(o.lastY=t,o.lastX=e,o.lastTime=n,o.locked)return i.fauxScrollbar.scrollTop+=r,i.scrollArea&&(i.scrollArea.scrollLeft+=s),!0;const l=null!==o.startY?Math.abs(o.startY-t):0,a=null!==o.startX?Math.abs(o.startX-e):0;if(l<3&&a<3)return!1;const c=l>=a,{scrollHeight:d,clientHeight:h}=i.fauxScrollbar,u=d-h>0;let g=!1;if(i.scrollArea){const{scrollWidth:e,clientWidth:t}=i.scrollArea;g=e-t>0}return!!(c&&u||!c&&g)&&(o.locked=!0,i.fauxScrollbar.scrollTop+=r,i.scrollArea&&(i.scrollArea.scrollLeft+=s),!0)}(e.clientX,e.clientY,t,o);i&&e.preventDefault()},{passive:!1,signal:i}),e.addEventListener("pointerup",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,et(t,o))},{passive:!0,signal:i}),e.addEventListener("pointercancel",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Qe(t))},{passive:!0,signal:i}),e.addEventListener("lostpointercapture",e=>{e.pointerId===t.activePointerId&&(t.activePointerId=null,Qe(t))},{passive:!0,signal:i})}const ot=[{property:"editable",pluginName:"editing",level:"column",description:'the "editable" column property',isUsed:e=>!0===e},{property:"editor",pluginName:"editing",level:"column",description:'the "editor" column property'},{property:"editorParams",pluginName:"editing",level:"column",description:'the "editorParams" column property'},{property:"group",pluginName:"groupingColumns",level:"column",description:'the "group" column property'},{property:"pinned",pluginName:"pinnedColumns",level:"column",description:'the "pinned" column property',isUsed:e=>"left"===e||"right"===e||"start"===e||"end"===e},{property:"sticky",pluginName:"pinnedColumns",level:"column",description:'the "sticky" column property (deprecated, use "pinned")',isUsed:e=>"left"===e||"right"===e||"start"===e||"end"===e}],it=[{property:"columnGroups",pluginName:"groupingColumns",level:"config",description:'the "columnGroups" config property',isUsed:e=>Array.isArray(e)&&e.length>0}];function nt(e){return`import { ${rt(e)}Plugin } from '@toolbox-web/grid/plugins/${t=e,t.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}';`;var t}function rt(e){return e.charAt(0).toUpperCase()+e.slice(1)}function st(e,t){return e.some(e=>e.name===t)}function lt(e,t){return e&&"object"==typeof e?"__rowCacheKey"in e?e.__rowCacheKey:"rowId"in e&&null!=e.rowId?`id:${e.rowId}`:t?`id:${t(e)}`:e:e}function at(e,t,o){const i=lt(t,o);return"string"==typeof i?e.byKey.get(i):i&&"object"==typeof i?e.byRef.get(i):void 0}function ct(e,t,o){if(t<0||t>=e.length)return;const i=e[t],n=o-i.height;if(0!==n){i.height=o,i.measured=!0;for(let o=t+1;o<e.length;o++)e[o].offset+=n}}function dt(e,t){if(0===e.length)return-1;if(t<=0)return 0;let o=0,i=e.length-1;for(;o<=i;){const n=Math.floor((o+i)/2),r=e[n],s=r.offset+r.height;if(t<r.offset)i=n-1;else{if(!(t>=s))return n;o=n+1}}return Math.max(0,Math.min(o,e.length-1))}function ht(e,t){const{positionCache:o,heightCache:i,rows:n,start:r,end:s,getPluginHeight:l,getRowId:a}=e;let c=!1;t.forEach(e=>{const t=e.dataset.rowIndex;if(!t)return;const d=parseInt(t,10);if(d<r||d>=s||d>=n.length)return;const h=n[d],u=l?.(h,d);if(void 0!==u){const e=o[d];return void((!e.measured||Math.abs(e.height-u)>1)&&(ct(o,d,u),c=!0))}const g=e.offsetHeight;if(g>0){const e=o[d];(!e.measured||Math.abs(e.height-g)>1)&&(ct(o,d,g),function(e,t,o,i){const n=lt(t,i);"string"==typeof n?e.byKey.set(n,o):n&&"object"==typeof n&&e.byRef.set(n,o)}(i,h,g,a),c=!0)}});const d=c?function(e){let t=0;for(const o of e)o.measured&&t++;return t}(o):0,h=c?function(e,t){let o=0,i=0;for(const n of e)n.measured&&(o+=n.height,i++);return i>0?o/i:t}(o,e.defaultHeight):0;return{hasChanges:c,measuredCount:d,averageHeight:h}}function ut(e){const{totalRows:t,viewportHeight:o,scrollTop:i,rowHeight:n,overscan:r}=e,s=Math.ceil(o/n);let l=Math.floor(i/n)-r;l<0&&(l=0);let a=l+s+2*r;return a>t&&(a=t),a===t&&l>0&&(l=Math.max(0,a-s-2*r)),{start:l,end:a,offsetY:l*n,totalHeight:t*n}}function gt(e,t){return e<=t}class ft{#e;state;constructor(e,t){this.#e=e,this.state={enabled:!0,rowHeight:28,bypassThreshold:24,start:0,end:0,container:null,viewportEl:null,totalHeightEl:null,positionCache:null,heightCache:{byKey:/* @__PURE__ */new Map,byRef:/* @__PURE__ */new WeakMap},averageHeight:28,measuredCount:0,variableHeights:!1,cachedViewportHeight:0,cachedFauxHeight:0,cachedScrollAreaHeight:0,scrollAreaEl:null,...t}}updateCachedGeometry(){const e=this.state,t=e.container,o=e.viewportEl??t;o&&(e.cachedViewportHeight=o.clientHeight),t&&(e.cachedFauxHeight=t.clientHeight);const i=e.scrollAreaEl;i&&(e.cachedScrollAreaHeight=i.clientHeight)}calculateTotalSpacerHeight(e,t=!1){const o=this.state;let i,n,r;if(t){const e=o.container??this.#e._hostElement,t=o.viewportEl??e,s=o.scrollAreaEl;i=e?.clientHeight??0,n=t?.clientHeight??0,r=s?s.clientHeight:i,o.cachedFauxHeight=i,o.cachedViewportHeight=n,o.cachedScrollAreaHeight=r}else i=o.cachedFauxHeight,n=o.cachedViewportHeight,r=o.cachedScrollAreaHeight||i;const s=r-n,l=Math.max(0,i-r);let a,c=0;return o.variableHeights&&o.positionCache?a=function(e){if(0===e.length)return 0;const t=e[e.length-1];return t.offset+t.height}(o.positionCache):(a=e*o.rowHeight,c=this.#e._getPluginExtraHeight()),a+s+c+l}initializePositionCache(){const e=this.state;if(!e.variableHeights)return;const t=this.#e,o=t._rows,i=e.rowHeight||28,n=t.effectiveConfig?.rowHeight,r=t.effectiveConfig?.getRowId,s=r?e=>r(e):void 0;e.positionCache=function(e,t,o,i,n){const r=new Array(e.length);let s=0;for(let l=0;l<e.length;l++){const a=e[l];let c=n?.(a,l),d=void 0!==c;void 0===c&&(c=at(t,a,i.rowId),d=void 0!==c),void 0===c&&(c=o,d=!1),r[l]={offset:s,height:c,measured:d},s+=c}return r}(o,e.heightCache,i,{rowId:s},(e,o)=>{const i=t._getPluginRowHeight(e,o);if(void 0!==i)return i;if(n){const t=n(e,o);if(void 0!==t&&t>0)return t}});const l=function(e,t,o,i){let n=0,r=0;for(let s=0;s<e.length;s++){const o=e[s];if(o.measured){const e=i?.(t[s],s);void 0===e&&(r+=o.height,n++)}}return{measuredCount:n,averageHeight:n>0?r/n:o}}(e.positionCache,o,i,(e,o)=>t._getPluginRowHeight(e,o));e.measuredCount=l.measuredCount,l.measuredCount>0&&(e.averageHeight=l.averageHeight)}invalidateRowHeight(e,t){const o=this.state;if(!o.variableHeights)return;if(!o.positionCache)return;const i=this.#e._rows;if(e<0||e>=i.length)return;const n=i[e];let r=t;void 0===r&&(r=this.#e._getPluginRowHeight(n,e)),void 0===r&&(r=o.rowHeight);const s=o.positionCache[e];if(s&&!(Math.abs(s.height-r)<1)&&(ct(o.positionCache,e,r),o.totalHeightEl)){const e=this.calculateTotalSpacerHeight(i.length);o.totalHeightEl.style.height=`${e}px`}}measureRenderedRowHeights(e,t){const o=this.state;if(!o.variableHeights)return;if(!o.positionCache)return;const i=this.#e,n=i._bodyEl;if(!n)return;const r=n.querySelectorAll(".data-grid-row"),s=i.effectiveConfig?.getRowId,l=i._rows,a=ht({positionCache:o.positionCache,heightCache:o.heightCache,rows:l,defaultHeight:o.rowHeight,start:e,end:t,getPluginHeight:(e,t)=>i._getPluginRowHeight(e,t),getRowId:s?e=>s(e):void 0},r);if(a.hasChanges&&(o.measuredCount=a.measuredCount,o.averageHeight=a.averageHeight,o.totalHeightEl)){const e=this.calculateTotalSpacerHeight(l.length);o.totalHeightEl.style.height=`${e}px`}}refreshVirtualWindow(e=!1,t=!1){const o=this.state,i=this.#e,n=i._bodyEl;if(!n)return!1;const r=i._rows.length;if(!o.enabled)return i._renderVisibleRows(0,r),t||i._afterPluginRender(),!0;if(r<=o.bypassThreshold)return o.start=0,o.end=r,e&&(n.style.transform="translateY(0px)"),i._renderVisibleRows(0,r,i.__rowRenderEpoch),e&&o.totalHeightEl&&(o.totalHeightEl.style.height=`${this.calculateTotalSpacerHeight(r,!0)}px`),i._updateAriaCounts(r,i._visibleColumns.length),t||i._afterPluginRender(),!0;const s=o.container,l=o.viewportEl??s,a=e?o.cachedViewportHeight=l.clientHeight:o.cachedViewportHeight||(o.cachedViewportHeight=l.clientHeight),c=o.rowHeight,d=s.scrollTop;let h;e&&o.variableHeights&&this.initializePositionCache();const u=o.positionCache;if(o.variableHeights&&u&&u.length>0)h=dt(u,d),-1===h&&(h=0);else{h=Math.floor(d/c);let e=0;const t=10;for(;e<t;){const t=i._getPluginExtraHeightBefore(h),o=Math.floor((d-t)/c);if(o>=h||o<0)break;h=o,e++}}h-=h%2,h<0&&(h=0);const g=i._adjustPluginVirtualStart(h,d,c);let f;if(void 0!==g&&g<h&&(h=g,h-=h%2,h<0&&(h=0)),o.variableHeights&&u&&u.length>0){const e=a+3*c;let t=0;for(f=h;f<r&&t<e;)t+=u[f].height,f++;const o=Math.ceil(a/c)+3;f-h<o&&(f=Math.min(h+o,r))}else{f=h+(Math.ceil(a/c)+3)}f>r&&(f=r);const p=o.start,w=o.end;if(!e&&h===p&&f===w)return!1;o.start=h,o.end=f;const b=e?o.cachedFauxHeight=s.clientHeight:o.cachedFauxHeight||(o.cachedFauxHeight=s.clientHeight);if(e){const e=o.scrollAreaEl;e&&(o.cachedScrollAreaHeight=e.clientHeight)}if(0===b&&a>0)return i._requestSchedulerPhase(z.VIRTUALIZATION,"stale-refs-retry"),!1;if(e&&o.totalHeightEl){const e=this.calculateTotalSpacerHeight(r);o.totalHeightEl.style.height=`${e}px`}let m;if(o.variableHeights&&u&&u[h])m=u[h].offset;else{m=h*c+i._getPluginExtraHeightBefore(h)}const v=-(d-m);return n.style.transform=`translateY(${v}px)`,i._renderVisibleRows(h,f,i.__rowRenderEpoch),e&&o.variableHeights&&this.measureRenderedRowHeights(h,f),i._updateAriaCounts(r,i._visibleColumns.length),e&&!t&&(i._afterPluginRender(),queueMicrotask(()=>{if(!o.totalHeightEl)return;const e=this.calculateTotalSpacerHeight(r);0===o.cachedFauxHeight&&o.cachedViewportHeight>0||(o.totalHeightEl.style.height=`${e}px`)})),!0}}class pt{constructor(e){this.grid=e}plugins=[];getPlugins(){return this.plugins}pluginMap=/* @__PURE__ */new Map;cellRenderers=/* @__PURE__ */new Map;headerRenderers=/* @__PURE__ */new Map;cellEditors=/* @__PURE__ */new Map;eventListeners=/* @__PURE__ */new Map;queryHandlers=/* @__PURE__ */new Map;static deprecationWarned=/* @__PURE__ */new WeakSet;get logPrefix(){return F(this.grid.getAttribute("id")??void 0)}attachAll(e){for(const t of e)this.attach(t)}attach(e){if(function(e,t,o){const i=e.name,n=e.constructor,r=F(o),s=n.dependencies??[];for(const l of s){const e=l.name,o=l.required??!0,n=l.reason;if(!t.some(t=>t.name===e)){const t=n??`${rt(i)}Plugin requires ${rt(e)}Plugin`,s=nt(e);if(o)throw new Error(`${r} Plugin dependency error:\n\n${t}.\n\n → Add the plugin to your gridConfig.plugins array BEFORE ${rt(i)}Plugin:\n ${s}\n plugins: [new ${rt(e)}Plugin(), new ${rt(i)}Plugin()]`);console.info(`${r} ${rt(i)}Plugin: Optional "${e}" plugin not found. Some features may be unavailable.`)}}}(e,this.plugins,this.grid.getAttribute("id")??void 0),this.pluginMap.set(e.constructor,e),this.plugins.push(e),e.cellRenderers)for(const[t,o]of Object.entries(e.cellRenderers))this.cellRenderers.set(t,o);if(e.headerRenderers)for(const[t,o]of Object.entries(e.headerRenderers))this.headerRenderers.set(t,o);if(e.cellEditors)for(const[t,o]of Object.entries(e.cellEditors))this.cellEditors.set(t,o);this.registerQueryHandlers(e),this.warnDeprecatedHooks(e),e.attach(this.grid);for(const t of this.plugins)t!==e&&t.onPluginAttached&&t.onPluginAttached(e.name,e)}registerQueryHandlers(e){const t=e.constructor.manifest;if(t?.queries)for(const o of t.queries){let t=this.queryHandlers.get(o.type);t||(t=/* @__PURE__ */new Set,this.queryHandlers.set(o.type,t)),t.add(e)}}warnDeprecatedHooks(e){const t=e.constructor;if(pt.deprecationWarned.has(t))return;if(!$())return;const o="function"==typeof e.getExtraHeight||"function"==typeof e.getExtraHeightBefore,i="function"==typeof e.getRowHeight;o&&!i&&(pt.deprecationWarned.add(t),console.warn(`${this.logPrefix} Deprecation warning: "${e.name}" uses getExtraHeight() / getExtraHeightBefore() which are deprecated and will be removed in v2.0.\n → Migrate to getRowHeight(row, index) for better variable row height support.\n → See: https://toolbox-web.dev/docs/grid/plugins/migration#row-height-hooks`))}unregisterQueryHandlers(e){for(const[t,o]of this.queryHandlers)o.delete(e),0===o.size&&this.queryHandlers.delete(t)}detachAll(){for(const e of this.plugins)for(const t of this.plugins)t!==e&&t.onPluginDetached&&t.onPluginDetached(e.name);for(let e=this.plugins.length-1;e>=0;e--){const t=this.plugins[e];this.unsubscribeAll(t),this.unregisterQueryHandlers(t),t.detach()}this.plugins=[],this.pluginMap.clear(),this.cellRenderers.clear(),this.headerRenderers.clear(),this.cellEditors.clear(),this.eventListeners.clear(),this.queryHandlers.clear()}getPlugin(e){return this.pluginMap.get(e)}getPluginByName(e){return this.plugins.find(t=>t.name===e||t.aliases?.includes(e))}hasPlugin(e){return this.pluginMap.has(e)}getAll(){return this.plugins}getRegisteredPluginNames(){return this.plugins.map(e=>e.name)}getCellRenderer(e){return this.cellRenderers.get(e)}getHeaderRenderer(e){return this.headerRenderers.get(e)}getCellEditor(e){return this.cellEditors.get(e)}getPluginStyles(){return this.plugins.filter(e=>e.styles).map(e=>({name:e.name,styles:e.styles}))}processRows(e){let t=[...e];for(const o of this.plugins)o.processRows&&(t=o.processRows(t));return t}processColumns(e){let t=[...e];for(const o of this.plugins)o.processColumns&&(t=o.processColumns(t));return t}beforeRender(){for(const e of this.plugins)e.beforeRender?.()}afterRender(){for(const e of this.plugins)e.afterRender?.()}afterCellRender(e){for(const t of this.plugins)t.afterCellRender?.(e)}hasAfterCellRenderHook(){return this.plugins.some(e=>"function"==typeof e.afterCellRender)}afterRowRender(e){for(const t of this.plugins)t.afterRowRender?.(e)}hasAfterRowRenderHook(){return this.plugins.some(e=>"function"==typeof e.afterRowRender)}onScrollRender(){for(const e of this.plugins)e.onScrollRender?.()}getExtraHeight(){let e=0;for(const t of this.plugins)"function"==typeof t.getExtraHeight&&(e+=t.getExtraHeight());return e}hasExtraHeight(){for(const e of this.plugins)if("function"==typeof e.getExtraHeight&&e.getExtraHeight()>0)return!0;return!1}getExtraHeightBefore(e){let t=0;for(const o of this.plugins)"function"==typeof o.getExtraHeightBefore&&(t+=o.getExtraHeightBefore(e));return t}getRowHeight(e,t){for(const o of this.plugins)if("function"==typeof o.getRowHeight){const i=o.getRowHeight(e,t);if(void 0!==i)return i}}hasRowHeightPlugin(){for(const e of this.plugins)if("function"==typeof e.getRowHeight)return!0;return!1}adjustVirtualStart(e,t,o){let i=e;for(const n of this.plugins)if("function"==typeof n.adjustVirtualStart){const r=n.adjustVirtualStart(e,t,o);r<i&&(i=r)}return i}renderRow(e,t,o){for(const i of this.plugins)if(i.renderRow?.(e,t,o))return!0;return!1}queryPlugins(e){const t=[],o=this.queryHandlers.get(e.type);if(o&&o.size>0){for(const i of o){const o=i.handleQuery?.(e)??i.onPluginQuery?.(e);void 0!==o&&t.push(o)}return t}for(const i of this.plugins){const o=i.handleQuery?.(e)??i.onPluginQuery?.(e);void 0!==o&&t.push(o)}return t}subscribe(e,t,o){let i=this.eventListeners.get(t);i||(i=/* @__PURE__ */new Map,this.eventListeners.set(t,i)),i.set(e,o)}unsubscribe(e,t){const o=this.eventListeners.get(t);o&&(o.delete(e),0===o.size&&this.eventListeners.delete(t))}unsubscribeAll(e){for(const[t,o]of this.eventListeners)o.delete(e),0===o.size&&this.eventListeners.delete(t)}emitPluginEvent(e,t){const o=this.eventListeners.get(e);if(o)for(const n of o.values())try{n(t)}catch(i){console.error(`${this.logPrefix} Error in plugin event handler for "${e}":`,i)}}onKeyDown(e){for(const t of this.plugins)if(t.onKeyDown?.(e))return!0;return!1}onCellClick(e){for(const t of this.plugins)if(t.onCellClick?.(e))return!0;return!1}onRowClick(e){for(const t of this.plugins)if(t.onRowClick?.(e))return!0;return!1}onHeaderClick(e){for(const t of this.plugins)if(t.onHeaderClick?.(e))return!0;return!1}onScroll(e){for(const t of this.plugins)t.onScroll?.(e)}onCellMouseDown(e){for(const t of this.plugins)if(t.onCellMouseDown?.(e))return!0;return!1}onCellMouseMove(e){for(const t of this.plugins)if(t.onCellMouseMove?.(e))return!0;return!1}onCellMouseUp(e){for(const t of this.plugins)if(t.onCellMouseUp?.(e))return!0;return!1}getHorizontalScrollOffsets(e,t){let o=0,i=0,n=!1;for(const r of this.plugins){const s=r.getHorizontalScrollOffsets?.(e,t);s&&(o+=s.left,i+=s.right,s.skipScroll&&(n=!0))}return{left:o,right:i,skipScroll:n}}getToolPanels(){const e=[];for(const t of this.plugins){const o=t.getToolPanel?.();o&&e.push({plugin:t,panel:o})}return e.sort((e,t)=>(e.panel.order??0)-(t.panel.order??0))}getHeaderContents(){const e=[];for(const t of this.plugins){const o=t.getHeaderContent?.();o&&e.push({plugin:t,content:o})}return e.sort((e,t)=>(e.content.order??0)-(t.content.order??0))}}class wt extends HTMLElement{static tagName="tbw-grid";static version="1.25.0";static#M=0;static adapters=[];static registerAdapter(e){this.adapters.push(e)}static getAdapters(){return this.adapters}static clearAdapters(){this.adapters=[]}static get observedAttributes(){return["rows","columns","grid-config","fit-mode","loading"]}get#L(){return this}#O=!1;#i;#n;#D=[];get#p(){return this.#k?.effective??{}}#I=!1;#z=!1;#q={rows:!1,columns:!1,gridConfig:!1,fitMode:!1};#N;#$=0;#F=null;#W=!1;#U=!1;#V=0;#B;#G={startY:null,startX:null,lastY:null,lastX:null,lastTime:null,velocityY:0,velocityX:0,momentumRaf:0,locked:!1,activePointerId:null};#X;#Y;#j;#K;#Z={scrollTop:0,scrollLeft:0,scrollHeight:0,scrollWidth:0,clientHeight:0,clientWidth:0};#Q;#J;#ee;#te;#oe;#ie;get _pluginManager(){return this.#Q}#ne=!1;#re;#se;#C;#k;#le=function(){return{toolPanels:/* @__PURE__ */new Map,headerContents:/* @__PURE__ */new Map,toolbarContents:/* @__PURE__ */new Map,hasToolButtonsContainer:!1,lightDomHeaderContent:[],lightDomTitle:null,lightDomToolPanelIds:/* @__PURE__ */new Set,lightDomToolbarContentIds:/* @__PURE__ */new Set,apiToolPanelIds:/* @__PURE__ */new Set,apiHeaderContentIds:/* @__PURE__ */new Set,isPanelOpen:!1,expandedSections:/* @__PURE__ */new Set,headerContentCleanups:/* @__PURE__ */new Map,panelCleanups:/* @__PURE__ */new Map,toolbarContentCleanups:/* @__PURE__ */new Map,lightDomContentMoved:!1}}();#ae;#ce;#de;#he=!1;#ue=/* @__PURE__ */new Set;#ge=/* @__PURE__ */new Map;#fe;#pe=/* @__PURE__ */new Map;_rows=[];#we=[];get _columns(){return this.#p.columns??[]}set _columns(e){this.#p.columns=e}get _visibleColumns(){return this._columns.filter(e=>!e.hidden)}_headerRowEl;_bodyEl;_rowPool=[];_resizeController;get _virtualization(){return this.#te.state}set _virtualization(e){Object.assign(this.#te.state,e)}_focusRow=0;_focusCol=0;_restoreFocusAfterRender=!1;_sortState=null;_gridTemplate="";__rowRenderEpoch=0;__didInitialAutoSize=!1;get __lightDomColumnsCache(){return this.#k?.lightDomColumnsCache}set __lightDomColumnsCache(e){this.#k&&(this.#k.lightDomColumnsCache=e)}get __originalColumnNodes(){return this.#k?.originalColumnNodes}set __originalColumnNodes(e){this.#k&&(this.#k.originalColumnNodes=e)}__originalOrder=[];__frameworkAdapter;__rowsBodyEl=null;get rows(){return this._rows}set rows(e){const t=this.#D;this.#D=e,t!==e&&this.#be("rows")}get sourceRows(){return this.#D}set sourceRows(e){this.#D=e}get columns(){return[...this._columns]}set columns(e){const t=this.#k?.getColumns();this.#k?.setColumns(e),t!==e&&this.#be("columns")}get gridConfig(){return this.#p}set gridConfig(e){e&&this.__frameworkAdapter?.processConfig&&(e=this.__frameworkAdapter.processConfig(e));const t=this.#k?.getGridConfig();this.#k?.setGridConfig(e),t!==e&&(this.#k.clearLightDomCache(),this.#be("gridConfig"))}get fitMode(){return this.#p.fitMode??"stretch"}set fitMode(e){const t=this.#k?.getFitMode();this.#k?.setFitMode(e),t!==e&&this.#be("fitMode")}get loading(){return this.#he}set loading(e){const t=this.#he;this.#he=e,e?this.setAttribute("loading",""):this.removeAttribute("loading"),t!==e&&this.#me()}setRowLoading(e,t){const o=this.#ue.has(e);t?this.#ue.add(e):this.#ue.delete(e),o!==t&&this.#ve(e,t)}setCellLoading(e,t,o){let i=this.#ge.get(e);const n=i?.has(t)??!1;o?(i||(i=/* @__PURE__ */new Set,this.#ge.set(e,i)),i.add(t)):(i?.delete(t),0===i?.size&&this.#ge.delete(e)),n!==o&&this.#Ce(e,t,o)}isRowLoading(e){return this.#ue.has(e)}isCellLoading(e,t){return this.#ge.get(e)?.has(t)??!1}clearAllLoading(){this.loading=!1;for(const e of this.#ue)this.#ve(e,!1);this.#ue.clear();for(const[e,t]of this.#ge)for(const o of t)this.#Ce(e,o,!1);this.#ge.clear()}get effectiveConfig(){return this.#p}get disconnectSignal(){return this.#X||(this.#X=new AbortController),this.#X.signal}constructor(){super(),this.#ye(),this.#i=new Promise(e=>this.#n=e),this.#te=new ft(this),this.#oe=new pe(this),this.#ie=new Ae(this),this.#N=new q(this),this.#N.setInitialReadyResolver(()=>this.#n?.()),this.#ae=function(e,t){let o=!1;const i={get isInitialized(){return o},setInitialized(e){o=e},get isPanelOpen(){return e.isPanelOpen},get activePanel(){return e.isPanelOpen&&e.expandedSections.size>0?[...e.expandedSections][0]:null},get expandedSections(){return[...e.expandedSections]},openToolPanel(){if(e.isPanelOpen)return;if(0===e.toolPanels.size)return void console.warn("[tbw-grid] No tool panels registered");if(e.isPanelOpen=!0,0===e.expandedSections.size&&e.toolPanels.size>0){const t=[...e.toolPanels.values()].sort((e,t)=>(e.order??100)-(t.order??100))[0];t&&e.expandedSections.add(t.id)}const o=t._renderRoot;We(o,e),Ue(o,e),Fe(o,e,t._accordionIcons),t._emit("tool-panel-open",{sections:i.expandedSections})},closeToolPanel(){if(!e.isPanelOpen)return;for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.toolPanels.values())t.onClose?.();e.isPanelOpen=!1;const o=t._renderRoot;We(o,e),Ue(o,e),t._emit("tool-panel-close",{})},toggleToolPanel(){e.isPanelOpen?i.closeToolPanel():i.openToolPanel()},toggleToolPanelSection(o){const i=e.toolPanels.get(o);if(!i)return void console.warn(`${F(t.id)} Tool panel section "${o}" not found`);if(1===e.toolPanels.size)return;const n=t._renderRoot,r=e.expandedSections.has(o);if(r){const t=e.panelCleanups.get(o);t&&(t(),e.panelCleanups.delete(o)),i.onClose?.(),e.expandedSections.delete(o),Be(n,o,!1)}else{for(const[t,i]of e.toolPanels)if(t!==o&&e.expandedSections.has(t)){const o=e.panelCleanups.get(t);o&&(o(),e.panelCleanups.delete(t)),i.onClose?.(),e.expandedSections.delete(t),Be(n,t,!1);const r=n.querySelector(`[data-section="${t}"] .tbw-accordion-content`);r&&(r.innerHTML="")}e.expandedSections.add(o),Be(n,o,!0),function(e,t,o){const i=t.toolPanels.get(o);if(!i?.render)return;const n=e.querySelector(`[data-section="${o}"] .tbw-accordion-content`);if(!n)return;const r=i.render(n);r&&t.panelCleanups.set(o,r)}(n,e,o)}t._emit("tool-panel-section-toggle",{id:o,expanded:!r})},getToolPanels:()=>[...e.toolPanels.values()],registerToolPanel(i){e.toolPanels.has(i.id)?console.warn(`${F(t.id)} Tool panel "${i.id}" already registered`):(e.toolPanels.set(i.id,i),o&&t.refreshShellHeader?.())},unregisterToolPanel(i){if(e.expandedSections.has(i)){const t=e.panelCleanups.get(i);t&&(t(),e.panelCleanups.delete(i)),e.expandedSections.delete(i)}e.toolPanels.delete(i),o&&t.refreshShellHeader?.()},getHeaderContents:()=>[...e.headerContents.values()],registerHeaderContent(i){e.headerContents.has(i.id)?console.warn(`${F(t.id)} Header content "${i.id}" already registered`):(e.headerContents.set(i.id,i),o&&$e(t._renderRoot,e))},unregisterHeaderContent(o){const i=e.headerContentCleanups.get(o);i&&(i(),e.headerContentCleanups.delete(o));const n=e.headerContents.get(o);n?.onDestroy?.(),e.headerContents.delete(o);const r=t._renderRoot.querySelector(`[data-header-content="${o}"]`);r?.remove()},getToolbarContents:()=>[...e.toolbarContents.values()].sort((e,t)=>(e.order??0)-(t.order??0)),registerToolbarContent(i){e.toolbarContents.has(i.id)?console.warn(`${F(t.id)} Toolbar content "${i.id}" already registered`):(e.toolbarContents.set(i.id,i),o&&t.refreshShellHeader?.())},unregisterToolbarContent(i){const n=e.toolbarContentCleanups.get(i);n&&(n(),e.toolbarContentCleanups.delete(i));const r=e.toolbarContents.get(i);r?.onDestroy&&r.onDestroy(),e.toolbarContents.delete(i),o&&t.refreshShellHeader?.()}};return i}(this.#le,this),this.#k=new N(this)}async#ye(){await Ze('@layer tbw-base, tbw-plugins, tbw-theme;\n\n@layer tbw-base{tbw-grid{--tbw-base-icon-size: 1em;--tbw-base-radius: .25em;--tbw-font-size: 1em;--tbw-font-size-sm: .9285em;--tbw-font-size-xs: .7857em;--tbw-font-size-2xs: .7142em;--tbw-spacing-xs: .25em;--tbw-spacing-sm: .375em;--tbw-spacing-md: .5em;--tbw-spacing-lg: .75em;--tbw-spacing-xl: 1em;--tbw-icon-size: var(--tbw-base-icon-size);--tbw-icon-size-sm: .875em;--tbw-checkbox-size: var(--tbw-base-icon-size);--tbw-toggle-size: 1.25em;--tbw-border-radius: var(--tbw-base-radius);--tbw-color-bg: transparent;--tbw-color-panel-bg: light-dark(#eeeeee, #222222);--tbw-color-fg: light-dark(#222222, #eeeeee);--tbw-color-fg-muted: light-dark(#555555, #aaaaaa);--tbw-color-accent: light-dark(#3b82f6, #3b82f6);--tbw-color-accent-fg: light-dark(#ffffff, #000000);--tbw-color-success: light-dark(hsl(122, 39%, 40%), hsl(122, 39%, 49%));--tbw-color-warning: light-dark(hsl(38, 92%, 50%), hsl(38, 92%, 50%));--tbw-color-error: light-dark(hsl(0, 65%, 51%), hsl(0, 65%, 55%));--tbw-color-danger: var(--tbw-color-error);--tbw-color-selection: light-dark(#fff7d6, #333333);--tbw-color-row-alt: var(--tbw-color-bg);--tbw-color-row-hover: light-dark(#f0f6ff, #1c1c1c);--tbw-color-header-bg: color-mix(in hsl, var(--tbw-color-panel-bg) 85%, var(--tbw-color-fg));--tbw-color-header-fg: color-mix(in hsl, var(--tbw-color-fg) 75%, var(--tbw-color-panel-bg));--tbw-color-border: light-dark(#d0d0d4, #454545);--tbw-color-border-strong: light-dark(#777777, #666666);--tbw-color-border-cell: var(--tbw-color-border);--tbw-color-border-header: var(--tbw-color-border);--tbw-color-shadow: light-dark(rgba(0, 0, 0, .1), rgba(0, 0, 0, .3));--tbw-font-family: inherit;--tbw-font-size-header: var(--tbw-font-size);--tbw-font-weight-header: bold;--tbw-cell-padding-header: var(--tbw-spacing-xs) var(--tbw-spacing-md);--tbw-cell-padding-v: var(--tbw-spacing-xs);--tbw-cell-padding-h: var(--tbw-spacing-md);--tbw-cell-padding: var(--tbw-cell-padding-v) var(--tbw-cell-padding-h);--tbw-cell-padding-input: var(--tbw-spacing-xs) var(--tbw-spacing-sm);--tbw-row-height: 1.75em;--tbw-header-height: 1.875em;--tbw-cell-white-space: nowrap;--tbw-border-width: 1px;--tbw-border-style: solid;--tbw-border-input: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-strong);--tbw-border-header: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-header);--tbw-row-divider: var(--tbw-border-width) var(--tbw-border-style) var(--tbw-color-border-cell);--tbw-row-hover-outline: 0;--tbw-color-active-row-bg: var(--tbw-color-selection);--tbw-active-row-outline: 0;--tbw-focus-outline-width: 2px;--tbw-focus-outline: var(--tbw-focus-outline-width) var(--tbw-border-style) var(--tbw-color-accent);--tbw-focus-outline-offset: -2px;--tbw-focus-background: rgba(from var(--tbw-color-accent) r g b / 12%);--tbw-range-border-color: var(--tbw-color-accent);--tbw-range-selection-bg: rgba(from var(--tbw-range-border-color) r g b / 12%);--tbw-resize-handle-width: var(--tbw-spacing-sm);--tbw-resize-handle-color: transparent;--tbw-resize-handle-color-hover: var(--tbw-color-accent);--tbw-resize-handle-border-radius: 0;--tbw-resize-indicator-width: 2px;--tbw-resize-indicator-color: var(--tbw-color-accent);--tbw-resize-indicator-opacity: .6;--tbw-transition-duration: .12s;--tbw-transition-ease: ease;--tbw-animation-duration: .2s;--tbw-animation-easing: ease-out;--tbw-animation-enabled: 1;--tbw-row-change-duration: .5s;--tbw-row-insert-duration: .3s;--tbw-row-remove-duration: .2s;--tbw-row-change-color: rgba(from var(--tbw-color-accent) r g b / 25%);--tbw-sort-indicator-color: var(--tbw-color-fg-muted);--tbw-sort-indicator-active-color: var(--tbw-color-accent);--tbw-sort-indicator-display: inline-flex;--tbw-sort-indicator-visibility: visible;--tbw-header-text-transform: none;--tbw-header-letter-spacing: normal;--tbw-color-header-separator: var(--tbw-color-border-cell);--tbw-density-scale: 1;--tbw-shell-header-height: 2.75em;--tbw-shell-header-bg: var(--tbw-color-panel-bg);--tbw-shell-header-border: var(--tbw-color-border);--tbw-shell-title-font-size: var(--tbw-font-size);--tbw-shell-title-font-weight: 600;--tbw-tool-panel-width: 17.5em;--tbw-tool-panel-bg: var(--tbw-color-panel-bg);--tbw-tool-panel-border: var(--tbw-color-border);--tbw-tool-panel-header-height: 2.5em;--tbw-tool-panel-transition: var(--tbw-animation-duration) var(--tbw-animation-easing);--tbw-toolbar-button-size: 2em;--tbw-toolbar-button-gap: var(--tbw-spacing-xs);--tbw-panel-padding: var(--tbw-spacing-lg);--tbw-panel-gap: var(--tbw-spacing-md);--tbw-menu-item-padding: var(--tbw-spacing-sm) var(--tbw-spacing-lg);--tbw-menu-item-gap: var(--tbw-spacing-md);--tbw-menu-min-width: 10rem;--tbw-button-padding: var(--tbw-spacing-sm) var(--tbw-spacing-lg);--tbw-button-padding-sm: var(--tbw-spacing-xs) var(--tbw-spacing-md);--tbw-input-height: var(--tbw-row-height);--tbw-input-padding: 0 var(--tbw-spacing-md);--tbw-detail-padding: var(--tbw-spacing-xl);--tbw-detail-max-height: 31.25rem;--tbw-indicator-size: var(--tbw-spacing-sm)}}\n@layer tbw-base{tbw-grid{color-scheme:inherit;position:relative;display:block;width:100%;height:100%;min-height:0;contain:content;font-family:var(--tbw-font-family);font-size:var(--tbw-font-size);font-feature-settings:"tnum","lnum";background:var(--tbw-color-bg);color:var(--tbw-color-fg);border:1px solid var(--tbw-color-border);border-radius:var(--tbw-border-radius);overflow:clip;outline:none;&,*{box-sizing:border-box}.tbw-grid-root{position:relative;display:flex;flex-direction:column;height:100%;&.has-shell{display:flex;flex-direction:column;height:100%}&:has(.selected){user-select:none}}.rows-body-wrapper{flex:1;min-height:0;display:flex;flex-direction:row;width:100%;min-width:fit-content}.rows-body{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:visible}.rows-container{display:flex;flex-direction:row;flex:1;min-height:0;overflow:visible}.rows-viewport{flex:1;min-width:0;position:relative;display:block;overflow:clip;touch-action:none;.rows{position:absolute;top:0;left:0;min-width:100%;will-change:transform;z-index:var(--tbw-z-layer-rows, 1)}}.faux-vscroll{position:sticky;inset-inline-end:0;flex-shrink:0;width:auto;overflow-y:auto;overflow-x:hidden;z-index:var(--tbw-z-layer-header, 30);touch-action:none}.faux-vscroll-spacer{width:1px}.tbw-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}&[data-has-focus]{.cell-focus,.row-focus{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}}.sticky-left,.sticky-right{position:sticky;z-index:25}.sticky-left{box-shadow:1px 0 0 var(--tbw-color-border)}.sticky-right{box-shadow:-1px 0 0 var(--tbw-color-border)}}}\n@layer tbw-base{tbw-grid{.header{display:block;flex-shrink:0;z-index:var(--tbw-z-layer-header, 30);background:var(--tbw-color-header-bg);overflow:visible}.header-group-row{display:grid;grid-template-columns:var(--tbw-column-template);background:var(--tbw-color-header-bg);z-index:var(--tbw-z-layer-header, 30)}.header-group-cell{display:flex;align-items:center;justify-content:flex-start;padding:var(--tbw-cell-padding-header, 2px 8px);color:var(--tbw-color-header-group-fg, var(--tbw-color-header-fg));font-weight:var(--tbw-font-weight-header-group, var(--tbw-font-weight-header));justify-content:var(--tbw-align-header-group, var(--tbw-align-header, flex-start));&:not(:last-child){border-right:2px solid var(--tbw-color-border)}}.header-row{display:grid;grid-template-columns:var(--tbw-column-template);color:var(--tbw-color-header-fg);font-size:var(--tbw-font-size-header);min-height:var(--tbw-header-height);border-bottom:var(--tbw-border-header);z-index:var(--tbw-z-layer-header, 30);text-transform:var(--tbw-header-text-transform);letter-spacing:var(--tbw-header-letter-spacing);>.cell{display:flex;align-items:center;gap:4px;padding:var(--tbw-cell-padding-header, 2px 8px);background-color:var(--tbw-color-header-bg);font-weight:var(--tbw-font-weight-header);border-right:1px solid var(--tbw-color-border-cell);overflow:visible;min-width:0;>span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:inherit}>span[part~=sort-indicator]{flex-shrink:0;opacity:.6;color:var(--tbw-sort-indicator-color);display:var(--tbw-sort-indicator-display, inline-flex);visibility:var(--tbw-sort-indicator-visibility, visible);transition:opacity .15s,visibility 0s,display 0s allow-discrete;transition-behavior:allow-discrete}&:hover>span[part~=sort-indicator]{display:inline-flex;visibility:visible}&[aria-sort=ascending]>span[part~=sort-indicator],&[aria-sort=descending]>span[part~=sort-indicator]{display:inline-flex;visibility:visible;opacity:1;color:var(--tbw-sort-indicator-active-color)}&:last-child{border-right:0;.resize-handle{right:0;width:calc(var(--tbw-resize-handle-width) / 2)}}&.grouped.group-end:not(:last-child){border-right:2px solid var(--tbw-color-border)}&.resizable{position:relative}&.sticky-left,&.sticky-right{background:var(--tbw-color-header-bg);z-index:35}}}.sortable{cursor:pointer;user-select:none}.resize-handle{position:absolute;top:0;right:calc(var(--tbw-resize-handle-width) / -2);width:var(--tbw-resize-handle-width);height:100%;cursor:e-resize;user-select:none;touch-action:none;z-index:20;background:var(--tbw-resize-handle-color);transition:background .12s ease;border-radius:var(--tbw-resize-handle-border-radius);&:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);width:var(--tbw-resize-indicator-width, 2px);height:0;background:var(--tbw-resize-indicator-color, var(--tbw-color-accent));opacity:0;pointer-events:none;transition:opacity .12s ease,height 0s .12s;z-index:1000}&:hover{background:var(--tbw-resize-handle-color-hover);&:after{height:100vh;opacity:var(--tbw-resize-indicator-opacity, .6);transition:opacity .12s ease,height 0s}}}}}\n@layer tbw-base{tbw-grid{.data-grid-row{display:grid;grid-template-columns:var(--tbw-column-template);contain:layout style;&:nth-child(2n){background:var(--tbw-color-row-alt)}&:hover{background:var(--tbw-color-row-hover)}>.cell{display:block;padding:var(--tbw-cell-padding, 2px 8px);border-bottom:var(--tbw-row-divider);min-height:var(--tbw-row-height);align-content:center;border-right:1px solid var(--tbw-color-border-cell);overflow:hidden;min-width:0;white-space:var(--tbw-cell-white-space, nowrap);text-overflow:ellipsis;>*{overflow:hidden;text-overflow:ellipsis;white-space:inherit;min-width:0}&:last-child{border-right:0}&[data-type=boolean]{text-align:center;input[type=checkbox]{margin:0;width:var(--tbw-checkbox-size);height:var(--tbw-checkbox-size);vertical-align:middle}}&.selected:focus-visible,&:focus-visible:not(.cell-focus){outline:none}&.sticky-left,&.sticky-right{background:var(--tbw-color-panel-bg)}}}.selecting .data-grid-row>.cell{user-select:none}}}\n@layer tbw-base{tbw-grid{.tbw-shell-header{display:flex;align-items:center;gap:8px;min-height:var(--tbw-shell-header-height);padding:0 8px;background:var(--tbw-shell-header-bg);border-bottom:1px solid var(--tbw-shell-header-border);flex-shrink:0}.tbw-shell-title{font-size:var(--tbw-shell-title-font-size);font-weight:var(--tbw-shell-title-font-weight);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tbw-shell-content{flex:1;display:flex;align-items:center;gap:12px;min-width:0;overflow:hidden}.tbw-shell-toolbar{display:flex;align-items:center;gap:var(--tbw-toolbar-button-gap);flex-shrink:0}.tbw-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--tbw-toolbar-button-size);height:var(--tbw-toolbar-button-size);padding:0;border:1px solid transparent;border-radius:var(--tbw-border-radius);background:transparent;color:var(--tbw-color-fg);cursor:pointer;font-size:16px;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease),border-color var(--tbw-transition-duration) var(--tbw-transition-ease);&:hover{background:var(--tbw-color-row-hover)}&:focus-visible{outline:var(--tbw-focus-outline);outline-offset:var(--tbw-focus-outline-offset)}&.active{background:var(--tbw-focus-background);border-color:var(--tbw-color-accent)}&:disabled{opacity:.5;cursor:not-allowed}}.tbw-toolbar-separator{width:1px;height:20px;background:var(--tbw-color-border);margin:0 4px}.tbw-shell-body{position:relative;display:flex;flex:1;min-height:0;overflow:visible}.tbw-grid-content{flex:1;min-width:0;min-height:0;display:flex;flex-direction:row;overflow:hidden;touch-action:none}.tbw-scroll-area{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;overflow-x:auto;overflow-y:hidden;overflow-anchor:none}}}\n@layer tbw-base{tbw-grid{.tbw-tool-panel{position:absolute;top:0;bottom:0;right:0;width:0;overflow:hidden;background:var(--tbw-tool-panel-bg);border-left:1px solid var(--tbw-tool-panel-border);transition:width var(--tbw-tool-panel-transition);display:flex;flex-direction:column;z-index:var(--tbw-z-layer-toolpanel, 31);box-shadow:-2px 0 8px var(--tbw-color-shadow);&[data-position=left]{right:auto;left:0;border-left:none;border-right:1px solid var(--tbw-tool-panel-border);box-shadow:2px 0 8px var(--tbw-color-shadow)}&.open{width:var(--tbw-tool-panel-width)}}.tbw-tool-panel-resize{position:absolute;top:0;bottom:0;width:6px;cursor:col-resize;background:transparent;z-index:10;transition:background var(--tbw-transition-duration) var(--tbw-transition-ease);&[data-handle-position=left]{left:0}&[data-handle-position=right]{right:0}&:hover,&.resizing{background:var(--tbw-color-accent)}}.tbw-tool-panel-header{display:flex;align-items:center;justify-content:space-between;min-height:var(--tbw-tool-panel-header-height);padding:0 12px;border-bottom:1px solid var(--tbw-tool-panel-border);flex-shrink:0}.tbw-tool-panel-title{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tbw-tool-panel-close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--tbw-border-radius);background:transparent;color:var(--tbw-color-fg-muted);cursor:pointer;font-size:14px;&:hover{background:var(--tbw-color-row-hover);color:var(--tbw-color-fg)}}.tbw-tool-panel-content{flex:1;overflow:auto}.tbw-accordion{display:flex;flex-direction:column;gap:0}.tbw-accordion-section{border-bottom:1px solid var(--tbw-tool-panel-border);&:last-child{border-bottom:none}&.single .tbw-accordion-header{cursor:default;&:hover{background:transparent}}&.expanded{.tbw-accordion-chevron{transform:rotate(90deg)}.tbw-accordion-content{display:block}}}.tbw-accordion-header{display:flex;align-items:center;gap:8px;width:100%;padding:10px 12px;border:none;background:transparent;color:var(--tbw-color-fg);font-size:13px;font-weight:600;text-align:start;cursor:pointer;user-select:none;&:hover{background:var(--tbw-color-row-hover)}}.tbw-accordion-chevron{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:10px;color:var(--tbw-color-fg-muted);transition:transform .15s ease;flex-shrink:0}.tbw-accordion-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:14px;flex-shrink:0}.tbw-accordion-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tbw-accordion-content{display:none}}}\n@layer tbw-base{.tbw-loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:1000;pointer-events:all;animation:tbw-fade-in .15s ease-out}.tbw-spinner{--tbw-spinner-size: 48px;--tbw-spinner-border-width: 3px;--tbw-spinner-color: var(--tbw-color-accent);--tbw-spinner-track-color: var(--tbw-color-border);width:var(--tbw-spinner-size);height:var(--tbw-spinner-size);border:var(--tbw-spinner-border-width) solid var(--tbw-spinner-track-color);border-top-color:var(--tbw-spinner-color);border-radius:50%;animation:tbw-spin .8s linear infinite}.tbw-spinner--large{--tbw-spinner-size: min(48px, calc(100% - 16px) )}.tbw-spinner--small{--tbw-spinner-size: calc(var(--tbw-row-height, 28px) * .6);--tbw-spinner-border-width: 2px}.data-grid-row.tbw-row-loading{position:relative;pointer-events:none}.tbw-row-loading-overlay{position:absolute;inset:0;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:26;animation:tbw-fade-in .15s ease-out;pointer-events:none;display:flex;align-items:center}.tbw-row-loading-spinner{--_spinner-size: calc(var(--tbw-row-height, 28px) * .6);margin-left:var(--tbw-spacing-md);width:var(--_spinner-size);height:var(--_spinner-size);border:2px solid var(--tbw-spinner-track-color, var(--tbw-color-border));border-top-color:var(--tbw-spinner-color, var(--tbw-color-accent));border-radius:50%;animation:tbw-spin .8s linear infinite}.cell.tbw-cell-loading{position:relative;pointer-events:none;&:before{content:"";position:absolute;inset:0;background:light-dark(rgba(255,255,255,.7),rgba(0,0,0,.5));z-index:26;animation:tbw-fade-in .15s ease-out}&:after{--_spinner-size: calc(var(--tbw-row-height, 28px) * .5);content:"";position:absolute;left:var(--tbw-spacing-sm);top:0;bottom:0;margin:auto 0;width:var(--_spinner-size);height:var(--_spinner-size);border:2px solid var(--tbw-spinner-track-color, var(--tbw-color-border));border-top-color:var(--tbw-spinner-color, var(--tbw-color-accent));border-radius:50%;animation:tbw-spin .8s linear infinite;z-index:27}}}\n@layer tbw-base{tbw-grid{.tbw-expanding{animation:tbw-expand var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}.tbw-collapsing{animation:tbw-collapse var(--tbw-animation-duration) var(--tbw-animation-easing) forwards;overflow:hidden}&[data-animation-mode=off]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms;.data-grid-row[data-animating]{animation:none}}}tbw-grid .data-grid-row[data-animating=change]{animation:tbw-row-change var(--tbw-row-change-duration) ease-out}tbw-grid .data-grid-row[data-animating=insert]{animation:tbw-row-insert var(--tbw-row-insert-duration) ease-out;will-change:max-height,opacity}tbw-grid .data-grid-row[data-animating=remove]{animation:tbw-row-remove var(--tbw-row-remove-duration) ease-out forwards;will-change:max-height,opacity,transform;pointer-events:none}}@keyframes tbw-expand{0%{opacity:0;max-height:0;transform:translateY(-8px)}to{opacity:1;max-height:500px;transform:translateY(0)}}@keyframes tbw-collapse{0%{opacity:1;max-height:500px;transform:translateY(0)}to{opacity:0;max-height:0;transform:translateY(-8px)}}@keyframes tbw-row-change{0%{background-color:transparent}20%{background-color:var(--tbw-row-change-color)}to{background-color:transparent}}@keyframes tbw-row-insert{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:var(--tbw-row-height, 28px);overflow:hidden}}@keyframes tbw-row-remove{0%{opacity:1;transform:translateY(0);max-height:var(--tbw-row-height, 28px)}to{opacity:0;max-height:0;transform:translateY(-8px)}}@keyframes tbw-spin{to{transform:rotate(360deg)}}@keyframes tbw-fade-in{0%{opacity:0}to{opacity:1}}\n@layer tbw-base{@media(forced-colors:active){tbw-grid{--tbw-color-border: CanvasText;--tbw-color-border-strong: CanvasText;--tbw-color-border-cell: CanvasText;--tbw-color-border-header: CanvasText;--tbw-color-fg: CanvasText;--tbw-color-bg: Canvas;--tbw-color-panel-bg: Canvas;--tbw-color-header-bg: Canvas;--tbw-color-header-fg: CanvasText;--tbw-color-accent: Highlight;--tbw-color-accent-fg: HighlightText;--tbw-color-selection: Highlight;--tbw-color-row-hover: Highlight;--tbw-focus-outline: 2px solid Highlight;--tbw-range-border-color: Highlight;.cell:focus,.cell.active-cell{outline:2px solid Highlight!important;outline-offset:-2px}.data-grid-row[aria-selected=true]{background:Highlight!important;color:HighlightText!important}}}@media(prefers-reduced-motion:reduce){tbw-grid[data-animation-mode=reduced-motion]{--tbw-animation-enabled: 0;--tbw-animation-duration: 0ms;.data-grid-row[data-animating]{animation:none}}}}\n')}getPlugin(e){return this.#Q?.getPlugin(e)}getPluginByName(e){return this.#Q?.getPluginByName(e)}requestRender(){this.#N.requestPhase(z.ROWS,"plugin:requestRender")}requestColumnsRender(){this.#N.requestPhase(z.COLUMNS,"plugin:requestColumnsRender")}requestRenderWithFocus(){this._restoreFocusAfterRender=!0,this.#N.requestPhase(z.ROWS,"plugin:requestRenderWithFocus")}updateTemplate(){d(this)}requestAfterRender(){this.#N.requestPhase(z.STYLE,"plugin:requestAfterRender")}requestVirtualRefresh(){this._virtualization.start=-1,this.refreshVirtualWindow(!1)}#_e(){this.#Q=new pt(this);const e=this.#p?.plugins,t=Array.isArray(e)?e:[],o=this.#p?.features;let i=[];o&&ge&&(i=ge(o));const n=i.length>0?[...i,...t]:t;this.#Q.attachAll(n)}#Re(){!function(e){let t=!1;for(const{name:o,styles:i}of e)je.has(o)||(je.set(o,i),t=!0);t&&Ke()}(this.#Q?.getPluginStyles()??[])}#Se(){const e=this.#p?.plugins,t=Array.isArray(e)?e:[],o=this.#p?.features??void 0,i=o!==this.#ee;if((this.#J===t||void 0!==this.#J&&this.#J.length===t.length&&this.#J.every((e,o)=>e===t[o]))&&!i)return void(this.#J=t);this.#Q&&this.#Q.detachAll();for(const r of this.#le.toolPanels.keys()){const e=this.#le.lightDomToolPanelIds.has(r),t=this.#le.apiToolPanelIds.has(r);if(!e&&!t){const e=this.#le.panelCleanups.get(r);e&&(e(),this.#le.panelCleanups.delete(r)),this.#le.toolPanels.delete(r)}}for(const r of this.#le.headerContents.keys()){if(this.#le.apiHeaderContentIds.has(r))continue;const e=this.#le.headerContentCleanups.get(r);e&&(e(),this.#le.headerContentCleanups.delete(r)),this.#le.headerContents.delete(r)}this.#_e(),this.#Re(),this.#J=t,this.#ee=o,this.#Ee(),this.#xe();const n=this.#W;if(this.#W=this.#Q?.getAll().some(e=>e.onScroll)??!1,!n&&this.#W){const e=this.#L.querySelector(".tbw-grid-content")??this.#L.querySelector(".tbw-grid-root");this.#Ae(e)}}#Te(){this.#Q?.detachAll()}#xe(){if(!this.#Q)return;const e=this.#Q.getToolPanels();for(const{panel:o}of e)this.#le.toolPanels.has(o.id)||this.#le.toolPanels.set(o.id,o);const t=this.#Q.getHeaderContents();for(const{content:o}of t)this.#le.headerContents.has(o.id)||this.#le.headerContents.set(o.id,o)}#He(){const e=wt.getAdapters();if(0===e.length&&!this.__frameworkAdapter)return;const t=this.__frameworkAdapter;return o=>{if(t?.createToolPanelRenderer){const e=t.createToolPanelRenderer(o);if(e)return e}for(const t of e)if(t.createToolPanelRenderer){const e=t.createToolPanelRenderer(o);if(e)return e}}}connectedCallback(){this.hasAttribute("tabindex")||(this.tabIndex=0),this.hasAttribute("version")||this.setAttribute("version",wt.version),this.id||(this.id="tbw-grid-"+ ++wt.#M),this._rows=Array.isArray(this.#D)?[...this.#D]:[],this.#X&&(this.#X.abort(),this.#ne=!1),this.#X=new AbortController,this.#K&&(be(this.#K),this.#K=void 0),this.#Pe(),this.#k.parseLightDomColumns(this),this.#k.merge(),this.#_e();const e=this.#p?.plugins;var t,o;this.#J=Array.isArray(e)?e:[],this.#ee=this.#p?.features??void 0,this.#xe(),this.#O||(this.#Me(),this.#Re(),this.#O=!0),this.#Le(),this.#K=(t=()=>{this.#Oe()},o={timeout:100},we?requestIdleCallback(t,o):window.setTimeout(()=>{const e=Date.now();t({didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-e))})},1))}disconnectedCallback(){this.#K&&(be(this.#K),this.#K=void 0),this.#V&&(clearTimeout(this.#V),this.#V=0),this.#Te(),function(e){for(const t of e.headerContentCleanups.values())t();e.headerContentCleanups.clear();for(const t of e.panelCleanups.values())t();e.panelCleanups.clear();for(const t of e.toolbarContentCleanups.values())t();e.toolbarContentCleanups.clear();for(const t of e.toolbarContents.values())t.onDestroy?.();if(e.isPanelOpen)for(const t of e.expandedSections){const o=e.toolPanels.get(t);o?.onClose?.()}e.isPanelOpen=!1,e.expandedSections.clear(),e.toolPanels.clear(),e.headerContents.clear(),e.toolbarContents.clear(),e.lightDomHeaderContent=[],e.lightDomToolPanelIds.clear(),e.lightDomToolbarContentIds.clear(),e.lightDomContentMoved=!1}(this.#le),this.#ae.setInitialized(!1),this.#ce?.(),this.#ce=void 0,this.#de?.(),this.#de=void 0,Je(this.#G),this.#X&&(this.#X.abort(),this.#X=void 0),this.#re?.abort(),this.#re=void 0,this.#ne=!1,this._resizeController&&this._resizeController.dispose(),this.#Y&&(this.#Y.disconnect(),this.#Y=void 0),this.#j&&(this.#j.disconnect(),this.#j=void 0,this.#De=!1),ne(this),this.#ke.clear(),this.#J=void 0,this.#ee=void 0;for(const e of this._rowPool)e.remove();this._rowPool.length=0,this.__rowsBodyEl=null,this.#I=!1}attributeChangedCallback(e,t,o){if("loading"===e){const e=null!==o&&"false"!==o;return void(this.loading!==e&&(this.loading=e))}if(t!==o&&o&&"null"!==o&&"undefined"!==o)if("rows"===e||"columns"===e||"grid-config"===e)try{const t=JSON.parse(o);"rows"===e?this.rows=t:"columns"===e?this.columns=t:"grid-config"===e&&(this.gridConfig=t)}catch{console.warn(`${F(this.id)} Invalid JSON for '${e}' attribute:`,o)}else"fit-mode"===e&&(this.fitMode=o)}#Le(){const e=this.#L.querySelector(".tbw-grid-content")??this.#L.querySelector(".tbw-grid-root");if(this._headerRowEl=e?.querySelector(".header-row"),this._virtualization.totalHeightEl=e?.querySelector(".faux-vscroll-spacer"),this._virtualization.viewportEl=e?.querySelector(".rows-viewport"),this._bodyEl=e?.querySelector(".rows"),this.__rowsBodyEl=e?.querySelector(".rows-body"),this.#ae.isInitialized){$e(this.#L,this.#le),Ne(this.#L,this.#p?.shell,this.#le);const e=this.#p?.shell?.toolPanel?.defaultOpen;e&&this.#le.toolPanels.has(e)&&(this.openToolPanel(),this.#le.expandedSections.add(e)),this.#le.isPanelOpen&&(Ue(this.#L,this.#le),Fe(this.#L,this.#le,(this.#p,this.#p)),We(this.#L,this.#le))}if(this.setAttribute("data-upgraded",""),this.#I=!0,this._resizeController=ve(this),this.#Ie(),this.#Ae(e),this.#ne)return;this.#ne=!0;const t=this.disconnectSignal;ue(this,this,this.#L,t),this.#Ee(),queueMicrotask(()=>this.#ze()),this.#N.requestPhase(z.FULL,"afterConnect")}#Ee(){const e=this.#p.rowHeight,t=this.#Q.hasRowHeightPlugin();"function"==typeof e||t?this._virtualization.variableHeights||(this._virtualization.variableHeights=!0,this._virtualization.rowHeight="number"==typeof e&&e>0?e:this._virtualization.rowHeight||28,this.#te.initializePositionCache(),"function"!=typeof e&&(this.#U=!0)):!t&&"function"!=typeof e&&this._virtualization.variableHeights?(this._virtualization.variableHeights=!1,this._virtualization.positionCache=null):"number"==typeof e&&e>0?(this._virtualization.rowHeight=e,this._virtualization.variableHeights=!1):requestAnimationFrame(()=>this.#qe())}#qe(){if(this.#Q.hasExtraHeight())return;const e=this._bodyEl?.querySelector(".data-grid-row");if(!e)return;const t=e.querySelectorAll(".cell");let o=0;t.forEach(e=>{const t=e.offsetHeight;t>o&&(o=t)});const i=e.getBoundingClientRect(),n=Math.max(i.height,o);n>0&&n-this._virtualization.rowHeight>1&&(this._virtualization.rowHeight=n,this.#N.requestPhase(z.VIRTUALIZATION,"measureRowHeight"))}#Ne(){const e=this._bodyEl?.querySelector(".data-grid-row");if(!e)return;const t=e.querySelectorAll(".cell");let o=0;t.forEach(e=>{const t=e.offsetHeight;t>o&&(o=t)});const i=e.getBoundingClientRect(),n=Math.max(i.height,o);if(n>0){if(Math.abs(n-this._virtualization.rowHeight)>1&&(this._virtualization.rowHeight=n),this.#te.initializePositionCache(),this._virtualization.totalHeightEl){const e=this.#te.calculateTotalSpacerHeight(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`}}}#Ae(e){this.#re?.abort(),this.#re=new AbortController;const t=this.#re.signal,o=e?.querySelector(".faux-vscroll"),i=e?.querySelector(".rows");if(this._virtualization.container=o??this,this.#W=this.#Q?.getAll().some(e=>e.onScroll)??!1,o&&i){o.addEventListener("scroll",()=>{if(!this._virtualization.enabled&&!this.#W)return;const e=o.scrollTop,t=this._virtualization.rowHeight;if(this._rows.length<=this._virtualization.bypassThreshold)i.style.transform=`translateY(${-e}px)`;else{const o=this._virtualization.positionCache;let n,r;if(this._virtualization.variableHeights&&o&&o.length>0){n=dt(o,e),-1===n&&(n=0);const i=n-n%2;r=o[i]?.offset??i*t}else{n=Math.floor(e/t);r=(n-n%2)*t}const s=-(e-r);i.style.transform=`translateY(${s}px)`}this.#F=e,this.#$||(this.#$=requestAnimationFrame(()=>{this.#$=0,null!==this.#F&&(this.#$e(this.#F),this.#F=null)}))},{passive:!0,signal:t});const e=this.#L.querySelector(".tbw-scroll-area");this.#se=e,this._virtualization.scrollAreaEl=e,e&&this.#W&&e.addEventListener("scroll",()=>{const t=this.#Z;t.scrollTop=o.scrollTop,t.scrollLeft=e.scrollLeft,t.scrollHeight=o.scrollHeight,t.scrollWidth=e.scrollWidth,t.clientHeight=o.clientHeight,t.clientWidth=e.clientWidth,this.#Q?.onScroll(t)},{passive:!0,signal:t});const n=this.#L.querySelector(".tbw-grid-content"),r=this.#se;n&&(n.addEventListener("wheel",e=>{const t=e.shiftKey||Math.abs(e.deltaX)>Math.abs(e.deltaY);if(t&&r){const t=e.shiftKey?e.deltaY:e.deltaX,{scrollLeft:o,scrollWidth:i,clientWidth:n}=r;(t>0&&o<i-n||t<0&&o>0)&&(e.preventDefault(),r.scrollLeft+=t)}else if(!t){const{scrollTop:t,scrollHeight:i,clientHeight:n}=o;(e.deltaY>0&&t<i-n||e.deltaY<0&&t>0)&&(e.preventDefault(),o.scrollTop+=e.deltaY)}},{passive:!1,signal:t}),tt(n,this.#G,{fauxScrollbar:o,scrollArea:r},t))}var n,r,s;this._bodyEl&&(n=this,r=this._bodyEl,s=t,r.addEventListener("mousedown",e=>{const t=e.target.closest(".cell[data-col]");if(!t)return;if(t.classList.contains("editing"))return;const o=e.target;o.draggable||o.closest('[draggable="true"]')||e.preventDefault(),de(n,t)},{signal:s}),r.addEventListener("click",e=>{const t=e.target.closest(".data-grid-row");if(t&&le(n,e,t),!document.activeElement?.closest(".cell.editing")){const t=e.target.closest("tbw-grid");t&&t.focus({preventScroll:!0})}},{signal:s}),r.addEventListener("dblclick",e=>{const t=e.target.closest(".data-grid-row");t&&le(n,e,t)},{signal:s})),this.#Y?.disconnect(),this._virtualization.viewportEl&&(this.#Y=new ResizeObserver(()=>{this.#Fe(),this.#N.requestPhase(z.VIRTUALIZATION,"resize-observer")}),this.#Y.observe(this._virtualization.viewportEl)),this.#L.addEventListener("focusin",()=>{this.dataset.hasFocus=""},{signal:t}),this.#L.addEventListener("focusout",e=>{const t=e.relatedTarget;t&&(this.#L.contains(t)||this.#oe.isInExternalFocusContainer(t))||delete this.dataset.hasFocus},{signal:t})}#De=!1;#We(){if(this.#De)return;const e=this._bodyEl?.querySelector(".data-grid-row");e&&(this.#De=!0,this.#j?.disconnect(),this.#j=new ResizeObserver(()=>{this.#qe()}),this.#j.observe(e))}addEventListener(e,t,o){super.addEventListener(e,t,o)}removeEventListener(e,t,o){super.removeEventListener(e,t,o)}on(e,t){const o=e=>{t(e.detail,e)};return this.addEventListener(e,o),()=>this.removeEventListener(e,o)}#Ue(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}_emitDataChange(){this.#Ue("data-change",{rowCount:this._rows.length,sourceRowCount:this.#D.length})}#ze(){const e=this._bodyEl?.querySelectorAll(".data-grid-row");e?.forEach((e,t)=>{const o=t===this._focusRow;e.setAttribute("aria-selected",String(o)),e.querySelectorAll(".cell").forEach((e,t)=>{e.setAttribute("aria-selected",String(o&&t===this._focusCol))})})}#be(e){this.#q[e]=!0,this.#z||(this.#z=!0,queueMicrotask(()=>this.#Ve()))}#Ve(){if(!this.#z||!this.#I)return void(this.#z=!1);const e=this.#q;if(this.#z=!1,this.#q={rows:!1,columns:!1,gridConfig:!1,fitMode:!1},e.gridConfig)return this.#Be(),void(e.rows&&this.#Ge());e.columns&&this.#Xe(),e.rows&&this.#Ge(),e.fitMode&&this.#Ye()}#Ge(){this._rows=Array.isArray(this.#D)?[...this.#D]:[],this._rebuildRowIdMap(),this.#N.requestPhase(z.ROWS,"applyRowsUpdate")}_rebuildRowIdMap(){this.#pe.clear();const e=this.#p.getRowId;this._rows.forEach((t,o)=>{const i=Ee(t,e);void 0!==i&&this.#pe.set(i,{row:t,index:o})})}#Xe(){ne(this),this.#k.merge(),this.#Ie()}#Ye(){this.#k.merge();"fixed"===this.#p.fitMode?(this.__didInitialAutoSize=!1,l(this)):(this._columns.forEach(e=>{!e.__userResized&&e.__autoSized&&delete e.width}),d(this))}#Be(){Ie(this,this.#le),ze(this,this.#le);const e=!!this.#L.querySelector(".has-shell"),t=!!this.#L.querySelector(".tbw-tool-panel"),o=this.#L.querySelectorAll(".tbw-accordion-section").length,i=this.#L.querySelector(".tbw-tool-panel")?.dataset.position??"right";this.#k.parseLightDomColumns(this),this.#k.merge(),this.#Se(),qe(this,this.#le,this.#He()),this.#k.markSourcesChanged(),this.#k.merge();const n=ke(this.#p?.shell),r=(this.#p?.shell?.toolPanels?.length??0)>0,s=this.#p?.shell?.toolPanels?.length??0,l=this.#p?.shell?.toolPanel?.position??"right";if(e!==n||!t&&r||t&&s!==o||t&&i!==l)return Ve(this.#le),this.#Me(),this.#Re(),this.#Le(),void this._rebuildRowIdMap();e&&this.#je(),this._rebuildRowIdMap(),this.#N.requestPhase(z.COLUMNS,"applyGridConfigUpdate")}#je(){const e=this.#L.querySelector(".tbw-shell-header");if(!e)return;const t=this.#p.shell?.header?.title??this.#le.lightDomTitle;let o=e.querySelector(".tbw-shell-title");t?(o||(o=document.createElement("h2"),o.className="tbw-shell-title",o.setAttribute("part","shell-title"),e.insertBefore(o,e.firstChild)),o.textContent=t):o&&o.remove()}#Ke(){if(this.__rowRenderEpoch++,this.#Q){const e=this.#we.length>0?this.#we:this._columns,t=e.filter(e=>!e.hidden),o=e.filter(e=>e.hidden),i=this.#Q.processColumns([...t]);if(i!==t){const n=new Set(i.map(e=>e.field));!t.some(e=>n.has(e.field))&&i.length>0?this._columns=[...i,...o]:this._columns=this.#Ze(e,i,o)}else this._columns=[...e]}}#Ze(e,t,o){if(0===o.length)return t;const i=/* @__PURE__ */new Map;for(const l of t)i.set(l.field,l);const n=new Set(e.map(e=>e.field)),r=[];for(const l of t)n.has(l.field)||r.push(l);const s=[];for(const l of e){const e=i.get(l.field);e?s.push(e):l.hidden&&s.push(l)}return s.push(...r),s}#Qe(){ne(this);const e=function(e,t){if(!e._sortState)return t;e.__originalOrder=[...t];const o=(e.effectiveConfig?.sortHandler??E)(t,e._sortState,e._columns);return o&&"function"==typeof o.then?t:o}(this,Array.isArray(this.#D)?[...this.#D]:[]),t=this.#Q?.processRows(e)??e;this._rows=t,this._rebuildRowIdMap(),this._virtualization.variableHeights&&this.#te.initializePositionCache(),this._emitDataChange()}#Je(e){const t={...o,...e.animation},i=t.mode??"reduced-motion";let n=1;!1===i||"off"===i?n=0:!0!==i&&"on"!==i||(n=1),this.style.setProperty("--tbw-animation-duration",`${t.duration}ms`),this.style.setProperty("--tbw-animation-easing",t.easing??"ease-out"),this.style.setProperty("--tbw-animation-enabled",String(n)),this.dataset.animationMode="boolean"==typeof i?i?"on":"off":i}_renderVisibleRows(e,t,o=this.__rowRenderEpoch){if(this.#B||(this.#B=(e,t,o)=>this.#Q?.renderRow(e,t,o)??!1),function(e,t,o,i,n){const r=Math.max(0,o-t),s=e._bodyEl,l=e._visibleColumns,a=l.length;let c=e.__cachedHeaderRowCount;for(void 0===c&&(c=e.querySelector(".header-group-row")?2:1,e.__cachedHeaderRowCount=c);e._rowPool.length<r;){const t=ie();e._rowPool.push(t)}if(e._rowPool.length>r){for(let t=r;t<e._rowPool.length;t++){const o=e._rowPool[t];o.parentNode===s&&o.remove()}e._rowPool.length=r}const d=n&&!1!==e.__hasRenderRowPlugins,h=e._hasAfterRowRenderHook?.()??!1;for(let g=0;g<r;g++){const o=t+g,r=e._rows[o],f=e._rowPool[g];if(f.setAttribute("aria-rowindex",String(o+c+1)),d&&n(r,f,o)){f.__epoch=i,f.__rowDataRef=r,f.parentNode!==s&&s.appendChild(f);continue}const p=f.__epoch,w=f.__rowDataRef;let b=f.children.length;b>a&&f.lastElementChild?.classList.contains("tbw-row-loading-overlay")&&b--;const m=p===i&&b===a,v=w!==r,C=!!e._isGridEditMode;let y=!1;if(m&&v)for(let e=0;e<a;e++)if(l[e].externalView&&!f.querySelector(`.cell[data-col="${e}"] [data-external-view]`)){y=!0;break}if(!m||y){const t=Q(f),n=C||e._activeEditRows===o;t&&!n?(f.__isCustomRow&&(f.className="data-grid-row",f.setAttribute("role","row"),f.__isCustomRow=!1),J(f),se(e,f,r,o),f.__epoch=i,f.__rowDataRef=r):t&&n?(re(e,f,r,o),f.__rowDataRef=r):(f.__isCustomRow&&(f.className="data-grid-row",f.setAttribute("role","row"),f.__isCustomRow=!1),se(e,f,r,o),f.__epoch=i,f.__rowDataRef=r)}else if(v){const t=Q(f),n=C||e._activeEditRows===o;t&&!n?(J(f),se(e,f,r,o),f.__epoch=i,f.__rowDataRef=r):(re(e,f,r,o),f.__rowDataRef=r)}else{const t=Q(f),n=C||e._activeEditRows===o;t&&!n?(J(f),se(e,f,r,o),f.__epoch=i,f.__rowDataRef=r):re(e,f,r,o)}let _=!1;const R=e._changedRowIdSet;if(R&&R.size>0)try{const t=e.getRowId?.(r);t&&(_=R.has(t))}catch{}_!==f.classList.contains("changed")&&f.classList.toggle("changed",_);const S=e.effectiveConfig?.rowClass;if(S){const t=f.getAttribute("data-dynamic-classes");t&&t.split(" ").forEach(e=>e&&f.classList.remove(e));try{const e=S(r),t="string"==typeof e?e.split(/\s+/):e;if(t&&t.length>0){const e=t.filter(e=>e&&"string"==typeof e);e.forEach(e=>f.classList.add(e)),f.setAttribute("data-dynamic-classes",e.join(" "))}else f.removeAttribute("data-dynamic-classes")}catch(u){console.warn(`${F(e.id)} rowClass callback error:`,u),f.removeAttribute("data-dynamic-classes")}}h&&e._afterRowRender?.({row:r,rowIndex:o,rowElement:f}),f.parentNode!==s&&s.appendChild(f)}}(this,e,t,o,this.#B),this.#ue.size>0)for(const i of this.#ue)this.#ve(i,!0)}#et={rowCount:-1,colCount:-1,ariaLabel:void 0,ariaDescribedBy:void 0};_updateAriaCounts(e,t){!function(e,t,o,i,n){if(i===e.rowCount&&n===e.colCount)return!1;const r=e.rowCount;e.rowCount=i,e.colCount=n,t&&(t.setAttribute("aria-rowcount",String(i)),t.setAttribute("aria-colcount",String(n))),i!==r&&o&&(i>0?o.setAttribute("role","rowgroup"):o.removeAttribute("role"))}(this.#et,this.__rowsBodyEl,this._bodyEl,e,t)}_requestSchedulerPhase(e,t){this.#N.requestPhase(e,t)}_getPluginExtraHeight(){return this.#Q?.getExtraHeight()??0}_getPluginRowHeight(e,t){return this.#Q?.getRowHeight?.(e,t)}_getPluginExtraHeightBefore(e){return this.#Q?.getExtraHeightBefore?.(e)??0}_adjustPluginVirtualStart(e,t,o){return this.#Q?.adjustVirtualStart(e,t,o)}_afterPluginRender(){this.#Q?.afterRender()}_emitPluginEvent(e,t){this.#Q?.emitPluginEvent(e,t)}_schedulerMergeConfig(){this.#k.parseLightDomColumns(this),this.#k.merge(),this.#Se(),function(e,t,o){const i=ot,n=it,r=/* @__PURE__ */new Map;function s(e,t,o,i,n=!1){r.has(e)||r.set(e,{description:t,importHint:o,fields:[],isConfigProperty:n});const s=r.get(e);s.fields.includes(i)||s.fields.push(i)}for(const a of n){const o=e[a.property];(a.isUsed?a.isUsed(o):void 0!==o)&&!st(t,a.pluginName)&&s(a.pluginName,a.description,nt(a.pluginName),a.property,!0)}const l=e.columns;if(l&&l.length>0)for(const a of l)for(const e of i){const o=a[e.property];if((e.isUsed?e.isUsed(o):void 0!==o)&&!st(t,e.pluginName)){const t=a.field||"<unknown>";s(e.pluginName,e.description,nt(e.pluginName),t)}}if(r.size>0){const e=[];for(const[t,{description:o,importHint:i,fields:n,isConfigProperty:s}]of r)if(s)e.push(`Config uses ${o}, but the required plugin is not loaded.\n → Add the plugin to your gridConfig.plugins array:\n ${i}\n plugins: [new ${rt(t)}Plugin(), ...]`);else{const r=n.slice(0,3).join(", ")+(n.length>3?`, ... (${n.length} total)`:"");e.push(`Column(s) [${r}] use ${o}, but the required plugin is not loaded.\n → Add the plugin to your gridConfig.plugins array:\n ${i}\n plugins: [new ${rt(t)}Plugin(), ...]`)}throw new Error(`${F(o)} Configuration error:\n\n${e.join("\n\n")}\n\nThis validation helps catch misconfigurations early. The properties listed above require their respective plugins to function.`)}}(this.#p,this.#Q?.getPlugins()??[],this.id),function(e,t){const o=[],i=[],n=F(t);for(const r of e){const e=r.constructor.manifest;if(e?.configRules)for(const n of e.configRules){const e=r.config;if(n.check(e)){const e=`${F(t,`${rt(r.name)}Plugin`)} Configuration warning: ${n.message}`;"error"===n.severity?o.push(e):i.push(e)}}}if(i.length>0&&$())for(const r of i)console.warn(r);if(o.length>0)throw new Error(`${n} Configuration error:\n\n${o.join("\n\n")}`)}(this.#Q?.getPlugins()??[],this.id),function(e,t){if(!$())return;const o=new Set(e.map(e=>e.name)),i=/* @__PURE__ */new Set,n=F(t);for(const r of e){const e=r.constructor.manifest;if(e?.incompatibleWith)for(const t of e.incompatibleWith)if(o.has(t.name)){const e=[r.name,t.name].sort().join("↔");if(i.has(e))continue;i.add(e),console.warn(`${n} Plugin incompatibility warning:\n\n${rt(r.name)}Plugin and ${rt(t.name)}Plugin are both loaded, but they are currently incompatible.\n\n → ${t.reason}\n\n Consider removing one of these plugins to avoid unexpected behavior.`)}}}(this.#Q?.getPlugins()??[],this.id),this.#tt(),this.#we=[...this._columns]}_schedulerProcessColumns(){this.#Ke()}_schedulerProcessRows(){this.#Qe()}_schedulerRenderHeader(){D(this)}_schedulerUpdateTemplate(){d(this)}_schedulerAfterRender(){this.#Q?.afterRender(),this._virtualization.enabled&&this._virtualization.totalHeightEl&&queueMicrotask(()=>{if(!this._virtualization.totalHeightEl)return;const e=this.#te.calculateTotalSpacerHeight(this._rows.length);this._virtualization.totalHeightEl.style.height=`${e}px`});"fixed"!==this.#p.fitMode||this.__didInitialAutoSize||(this.__didInitialAutoSize=!0,l(this)),this._restoreFocusAfterRender&&(this._restoreFocusAfterRender=!1,ae(this)),this._virtualization.enabled&&!this.#De&&this.#We(),this.#U&&(this.#U=!1,requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.#Ne()})})),this.#he&&this.#me()}get _schedulerIsConnected(){return this.isConnected&&this.#I}get _hostElement(){return this}get _renderRoot(){return this.#L}_emit(e,t){this.#Ue(e,t)}get _accordionIcons(){return{expand:this.#p?.icons?.expand??n.expand,collapse:this.#p?.icons?.collapse??n.collapse}}get _shellState(){return this.#le}_clearRowPool(){this._rowPool.length=0,this._bodyEl&&(this._bodyEl.innerHTML=""),this.__rowRenderEpoch++}_setup(){this.#Ie()}_applyAnimationConfig(e){this.#Je(e)}#tt(){!function(e,t,o,i){if(!t)return!1;let n=!1;const r=function(e,t){const o=e?.gridAriaLabel;return o||(e?.shell?.header?.title??t?.lightDomTitle??void 0)}(o,i);r!==e.ariaLabel&&(e.ariaLabel=r,r?t.setAttribute("aria-label",r):t.removeAttribute("aria-label"),n=!0);const s=o?.gridAriaDescribedBy;s!==e.ariaDescribedBy&&(e.ariaDescribedBy=s,s?t.setAttribute("aria-describedby",s):t.removeAttribute("aria-describedby"),n=!0)}(this.#et,this.__rowsBodyEl,this.#p,this.#le)}#me(){const e=this.querySelector(".tbw-grid-root");var t;e&&(this.#he?(this.#fe||(this.#fe=function(e){const t=document.createElement("div");return t.className="tbw-loading-overlay",t.setAttribute("role","status"),t.setAttribute("aria-live","polite"),t.appendChild(me("large",e)),t}(this.#p?.loadingRenderer)),function(e,t){e.appendChild(t)}(e,this.#fe)):(t=this.#fe,t?.remove()))}#ve(e,t){const o=this.#pe.get(e);if(!o)return;const i=this.findRenderedRowElement?.(o.index);i&&function(e,t){if(t){if(e.classList.add("tbw-row-loading"),e.setAttribute("aria-busy","true"),!e.querySelector(".tbw-row-loading-overlay")){const t=document.createElement("div");t.className="tbw-row-loading-overlay",t.setAttribute("aria-hidden","true");const o=document.createElement("div");o.className="tbw-row-loading-spinner",t.appendChild(o),e.appendChild(t)}}else e.classList.remove("tbw-row-loading"),e.removeAttribute("aria-busy"),e.querySelector(".tbw-row-loading-overlay")?.remove()}(i,t)}#Ce(e,t,o){const i=this.#pe.get(e);if(!i)return;const n=this.findRenderedRowElement?.(i.index);if(!n)return;const r=this._visibleColumns.findIndex(e=>e.field===t);if(r<0)return;const s=n.children[r];s&&function(e,t){t?(e.classList.add("tbw-cell-loading"),e.setAttribute("aria-busy","true")):(e.classList.remove("tbw-cell-loading"),e.removeAttribute("aria-busy"))}(s,o)}#Ie(){if(this.isConnected&&this._headerRowEl&&this._bodyEl){if(this.#k.parseLightDomColumns(this),this.#C){const e=this.#C;this.#C=void 0,this.#k.merge();const t=this.#Q?.getAll()??[];this.#k.applyState(e,t)}this._bodyEl&&(this._bodyEl.style.display="",this._bodyEl.style.gridTemplateColumns=""),this.#N.requestPhase(z.FULL,"setup")}}#$e(e){let t=0,o=0,i=0,n=0,r=0;if(this.#W){const e=this._virtualization.container,s=this.#se;t=s?.scrollLeft??0,o=e?.scrollHeight??0,i=s?.scrollWidth??0,n=e?.clientHeight??0,r=s?.clientWidth??0}if(this.refreshVirtualWindow(!1)&&this.#Q?.onScrollRender(),this._virtualization.variableHeights&&(this.#V&&clearTimeout(this.#V),this.#V=window.setTimeout(()=>{this.#V=0,this.#te.measureRenderedRowHeights(this._virtualization.start,this._virtualization.end)},100)),this.#W){const s=this.#Z;s.scrollTop=e,s.scrollLeft=t,s.scrollHeight=o,s.scrollWidth=i,s.clientHeight=n,s.clientWidth=r,this.#Q?.onScroll(s)}}findHeaderRow(){return this.#L.querySelector(".header-row")}findRenderedRowElement(e){return Array.from(this._bodyEl.querySelectorAll(".data-grid-row")).find(t=>{const o=t.querySelector(".cell[data-row]");return o&&Number(o.getAttribute("data-row"))===e})||null}_dispatchCellClick(e,t,o,i){const n=this._rows[t],r=this._visibleColumns[o];if(!n||!r)return!1;const s=r.field,l=n[s],a=new CustomEvent("cell-activate",{cancelable:!0,bubbles:!0,composed:!0,detail:{rowIndex:t,colIndex:o,column:r,field:s,value:l,row:n,cellEl:i,trigger:"pointer",originalEvent:e}});if(this.dispatchEvent(a),a.defaultPrevented)return!0;const c={row:n,rowIndex:t,colIndex:o,column:r,field:s,value:l,cellEl:i,originalEvent:e},d=this.#Q?.onCellClick(c)??!1;return this.#Ue("cell-click",c),d}_dispatchRowClick(e,t,o,i){if(!o)return!1;const n={rowIndex:t,row:o,rowEl:i,originalEvent:e},r=this.#Q?.onRowClick(n)??!1;return this.#Ue("row-click",n),r}_dispatchHeaderClick(e,t,o){if(!t)return!1;const i={colIndex:this._columns.indexOf(t),field:t.field,column:t,headerEl:o,originalEvent:e};return this.#Q?.onHeaderClick(i)??!1}_dispatchKeyDown(e){return this.#Q?.onKeyDown(e)??!1}_getHorizontalScrollOffsets(e,t){return this.#Q?.getHorizontalScrollOffsets(e,t)??{left:0,right:0}}queryPlugins(e){return this.#Q?.queryPlugins(e)??[]}query(e,t){return this.#Q?.queryPlugins({type:e,context:t})??[]}_dispatchCellMouseDown(e){return this.#Q?.onCellMouseDown(e)??!1}_dispatchCellMouseMove(e){this.#Q?.onCellMouseMove(e)}_dispatchCellMouseUp(e){this.#Q?.onCellMouseUp(e)}_afterCellRender(e){this.#Q?.afterCellRender(e)}_hasAfterCellRenderHook(){return this.#Q?.hasAfterCellRenderHook()??!1}_afterRowRender(e){this.#Q?.afterRowRender(e)}_hasAfterRowRenderHook(){return this.#Q?.hasAfterRowRenderHook()??!1}async ready(){return this.#i}async forceLayout(){return this.#N.requestPhase(z.FULL,"forceLayout"),this.#N.whenReady()}async getConfig(){return Object.freeze({...this.#p||{}})}getRowId(e){return xe(e,this.id,this.#p.getRowId)}getRow(e){return this.#ie.getRow(e)}_getRowEntry(e){return this.#pe.get(e)}updateRow(e,t,o="api"){this.#ie.updateRow(e,t,o)}updateRows(e,t="api"){this.#ie.updateRows(e,t)}animateRow(e,t){return Se(this,e,t)}animateRows(e,t){return function(e,t,o){return Promise.all(t.map(t=>Se(e,t,o))).then(e=>e.filter(Boolean).length)}(this,e,t)}animateRowById(e,t){return function(e,t,o){const i=e._rows??[],n=e.getRowId;if(!n)return Promise.resolve(!1);const r=i.findIndex(e=>{if(null==e)return!1;try{return n(e)===t}catch{return!1}});return r<0?Promise.resolve(!1):Se(e,r,o)}(this,e,t)}async insertRow(e,t,o=!0){return this.#ie.insertRow(e,t,o)}async removeRow(e,t=!0){return this.#ie.removeRow(e,t)}suspendProcessing(){}focusCell(e,t){this.#oe.focusCell(e,t)}get focusedCell(){return this.#oe.focusedCell}scrollToRow(e,t){this.#oe.scrollToRow(e,t)}scrollToRowById(e,t){this.#oe.scrollToRowById(e,t)}setColumnVisible(e,t){const o=this.#k.setColumnVisible(e,t);return o&&this.requestStateChange(),o}toggleColumnVisibility(e){const t=this.#k.toggleColumnVisibility(e);return t&&this.requestStateChange(),t}isColumnVisible(e){return this.#k.isColumnVisible(e)}showAllColumns(){this.#k.showAllColumns(),this.requestStateChange()}getAllColumns(){return this.#k.getAllColumns()}setColumnOrder(e){this.#k.setColumnOrder(e),this.requestStateChange()}getColumnOrder(){return this.#k.getColumnOrder()}getColumnState(){const e=this.#Q?.getAll()??[];return this.#k.collectState(e)}set columnState(e){e&&(this.#C=e,this.#k.initialColumnState=e,this.#O&&this.#ot(e))}get columnState(){return this.getColumnState()}#ot(e){const t=this.#Q?.getAll()??[];this.#k.applyState(e,t),this.#Ie()}requestStateChange(){const e=this.#Q?.getAll()??[];this.#k.requestStateChange(e)}resetColumnState(){this.#C=void 0,this.__originalOrder=[];const e=this.#Q?.getAll()??[];this.#k.resetState(e),this.#k.merge(),this.#Ie()}get isToolPanelOpen(){return this.#ae.isPanelOpen}get defaultRowHeight(){return this._virtualization.rowHeight}get expandedToolPanelSections(){return this.#ae.expandedSections}openToolPanel(){this.#ae.openToolPanel()}closeToolPanel(){this.#ae.closeToolPanel()}toggleToolPanel(){this.#ae.toggleToolPanel()}toggleToolPanelSection(e){this.#ae.toggleToolPanelSection(e)}getToolPanels(){return this.#ae.getToolPanels()}registerToolPanel(e){this.#le.apiToolPanelIds.add(e.id),this.#ae.registerToolPanel(e)}unregisterToolPanel(e){this.#le.apiToolPanelIds.delete(e),this.#ae.unregisterToolPanel(e)}getHeaderContents(){return this.#ae.getHeaderContents()}registerHeaderContent(e){this.#le.apiHeaderContentIds.add(e.id),this.#ae.registerHeaderContent(e)}unregisterHeaderContent(e){this.#le.apiHeaderContentIds.delete(e),this.#ae.unregisterHeaderContent(e)}getToolbarContents(){return this.#ae.getToolbarContents()}registerToolbarContent(e){this.#ae.registerToolbarContent(e)}unregisterToolbarContent(e){this.#ae.unregisterToolbarContent(e)}#it=!1;refreshShellHeader(){this.#it||(this.#it=!0,queueMicrotask(()=>{this.#it=!1,this.isConnected&&(this.#Pe(),this.#k.markSourcesChanged(),this.#k.merge(),Ve(this.#le),this.#Me(),this.#Re(),this.#nt())}))}#nt(){const e=this.#L.querySelector(".tbw-grid-content")??this.#L.querySelector(".tbw-grid-root");if(this._headerRowEl=e?.querySelector(".header-row"),this._virtualization.totalHeightEl=e?.querySelector(".faux-vscroll-spacer"),this._virtualization.viewportEl=e?.querySelector(".rows-viewport"),this._bodyEl=e?.querySelector(".rows"),this.__rowsBodyEl=e?.querySelector(".rows-body"),this.#ae.isInitialized){$e(this.#L,this.#le),Ne(this.#L,this.#p?.shell,this.#le);const e=this.#p?.shell?.toolPanel?.defaultOpen;e&&this.#le.toolPanels.has(e)&&(this.openToolPanel(),this.#le.expandedSections.add(e)),this.#le.isPanelOpen&&(Ue(this.#L,this.#le),Fe(this.#L,this.#le,(this.#p,this.#p)),We(this.#L,this.#le))}this._resizeController=ve(this),this.#Ae(e),this.#N.requestPhase(z.COLUMNS,"shellRefresh")}#ke=/* @__PURE__ */new Map;registerStyles(e,t){let o=this.#ke.get(e);o||(o=new CSSStyleSheet,this.#ke.set(e,o)),o.replaceSync(t),this.#rt()}unregisterStyles(e){this.#ke.delete(e)&&this.#rt()}getRegisteredStyles(){return Array.from(this.#ke.keys())}#rt(){const e=Array.from(this.#ke.values()),t=document.adoptedStyleSheets.filter(e=>!Array.from(this.#ke.values()).includes(e));document.adoptedStyleSheets=[...t,...e]}registerExternalFocusContainer(e){this.#oe.registerExternalFocusContainer(e)}unregisterExternalFocusContainer(e){this.#oe.unregisterExternalFocusContainer(e)}containsFocus(e){return this.#oe.containsFocus(e)}#Pe(){Ie(this,this.#le),ze(this,this.#le),qe(this,this.#le,this.#He())}#st(){const e=this.#L.querySelector(".tbw-shell-header");if(!e)return;Ve(this.#le);const t=function(e,t,o="☰"){const i=e?.header?.title??t.lightDomTitle??"",n=!!i,r=De(o),s=e?.header?.toolbarContents??[],l=[...t.toolbarContents.values()],a=new Set(s.map(e=>e.id)),c=[...s];for(const w of l)a.has(w.id)||c.push(w);const d=c.length>0,h=t.toolPanels.size>0,u=d&&h,g=[...c].sort((e,t)=>(e.order??0)-(t.order??0));let f="";for(const w of g)f+=`<div class="tbw-toolbar-content-slot" data-toolbar-content="${w.id}"></div>`;if(u&&(f+='<div class="tbw-toolbar-separator"></div>'),h){const e=t.isPanelOpen;f+=`<button class="${e?"tbw-toolbar-btn active":"tbw-toolbar-btn"}" data-panel-toggle title="Settings" aria-label="Toggle settings panel" aria-pressed="${e}" aria-controls="tbw-tool-panel">${r}</button>`}return`\n <div class="tbw-shell-header" part="shell-header" role="presentation">\n ${n?`<div class="tbw-shell-title">${p=i,p&&"string"==typeof p?p.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"):""}</div>`:""}\n <div class="tbw-shell-content" part="shell-content" role="presentation" data-light-dom-header-content></div>\n <div class="tbw-shell-toolbar" part="shell-toolbar" role="presentation">\n ${f}\n </div>\n </div>\n `;var p}(this.#p.shell,this.#le,this.#p.icons?.toolPanel),o=document.createElement("div");o.innerHTML=t;const i=o.firstElementChild;i&&(e.replaceWith(i),this.#lt(),Ne(this.#L,this.#p?.shell,this.#le))}#Oe(){const e=()=>{const e=this.#le.lightDomTitle,t=this.#le.hasToolButtonsContainer;this.#Pe();const o=this.#le.lightDomTitle,i=this.#le.hasToolButtonsContainer;(o&&!e||i&&!t)&&(this.#k.markSourcesChanged(),this.#k.merge(),this.#st())},t=()=>{this.__lightDomColumnsCache=void 0,this.#Ie()};this.#k.registerLightDomHandler("tbw-grid-header",e),this.#k.registerLightDomHandler("tbw-grid-tool-buttons",e),this.#k.registerLightDomHandler("tbw-grid-tool-panel",e),this.#k.registerLightDomHandler("tbw-grid-column",t),this.#k.registerLightDomHandler("tbw-grid-detail",t),this.#k.observeLightDOM(this)}refreshColumns(){this.__lightDomColumnsCache=void 0,ne(this),this.#k.parseLightDomColumns(this);const e=this.#le.lightDomTitle,t=this.#le.hasToolButtonsContainer;this.#Pe();const o=this.#le.lightDomTitle,i=this.#le.hasToolButtonsContainer;(o&&!e||i&&!t)&&(this.#k.markSourcesChanged(),this.#k.merge(),this.#st()),this.#N.requestPhase(z.COLUMNS,"refreshColumns")}#Fe(){this.#te.updateCachedGeometry()}refreshVirtualWindow(e=!1,t=!1){return this.#te.refreshVirtualWindow(e,t)}invalidateRowHeight(e,t){this.#te.invalidateRowHeight(e,t)}#Me(){this.#Pe(),this.#k.markSourcesChanged(),this.#k.merge();const e=this.#p?.shell;Ge(this.#L,e,{isPanelOpen:this.#le.isPanelOpen,expandedSections:this.#le.expandedSections},this.#p?.icons)&&(this.#lt(),this.#ae.setInitialized(!0))}#lt(){!function(e,t,o,i){const n=e.querySelector(".tbw-shell-toolbar");n&&n.addEventListener("click",e=>{e.target.closest("[data-panel-toggle]")&&i.onPanelToggle()});const r=e.querySelector(".tbw-accordion");r&&r.addEventListener("click",e=>{const t=e.target.closest(".tbw-accordion-header");if(t){const e=t.closest("[data-section]"),o=e?.getAttribute("data-section");o&&i.onSectionToggle(o)}})}(this.#L,this.#p,this.#le,{onPanelToggle:()=>this.toggleToolPanel(),onSectionToggle:e=>this.toggleToolPanelSection(e)}),this.#ce?.(),this.#ce=function(e,t,o){const i=e.querySelector(".tbw-tool-panel"),n=e.querySelector("[data-resize-handle]"),r=e.querySelector(".tbw-shell-body");if(!i||!n||!r)return()=>{};const s=t?.toolPanel?.position??"right";let l=0,a=0,c=0,d=!1;const h=e=>{if(!d)return;e.preventDefault();const t="left"===s?e.clientX-l:l-e.clientX,o=Math.min(c,Math.max(200,a+t));i.style.width=`${o}px`},u=()=>{if(!d)return;d=!1,n.classList.remove("resizing"),i.style.transition="",document.body.style.cursor="",document.body.style.userSelect="";const e=i.getBoundingClientRect().width;o(e),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u)},g=e=>{e.preventDefault(),d=!0,l=e.clientX,a=i.getBoundingClientRect().width,c=r.getBoundingClientRect().width-20,n.classList.add("resizing"),i.style.transition="none",document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",h),document.addEventListener("mouseup",u)};return n.addEventListener("mousedown",g),()=>{n.removeEventListener("mousedown",g),document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",u)}}(this.#L,this.#p?.shell,e=>{this.style.setProperty("--tbw-tool-panel-width",`${e}px`)}),this.#de?.(),this.#de=function(e,t,o,i){if(!t?.toolPanel?.closeOnClickOutside)return()=>{};const n=e=>{if(!o.isPanelOpen)return;const t=e.target;t&&(t.closest(".tbw-tool-panel")||t.closest("[data-panel-toggle]")||i())};return e.addEventListener("mousedown",n),()=>e.removeEventListener("mousedown",n)}(this,this.#p?.shell,this.#le,()=>this.closeToolPanel())}}customElements.get(wt.tagName)||customElements.define(wt.tagName,wt),globalThis.DataGridElement=wt;const bt={CAN_MOVE_COLUMN:"canMoveColumn",GET_CONTEXT_MENU_ITEMS:"getContextMenuItems"};class mt{static dependencies;static manifest;aliases;version="1.25.0";styles;cellRenderers;headerRenderers;cellEditors;grid;config;userConfig;#at;get defaultConfig(){return{}}constructor(e={}){this.userConfig=e}attach(e){this.#at?.abort(),this.#at=new AbortController,this.grid=e,this.config={...this.defaultConfig,...this.userConfig}}detach(){this.#at?.abort(),this.#at=void 0}getPlugin(e){return this.grid?.getPlugin(e)}emit(e,t){this.grid?.dispatchEvent?.(new CustomEvent(e,{detail:t,bubbles:!0}))}emitCancelable(e,t){const o=new CustomEvent(e,{detail:t,bubbles:!0,cancelable:!0});return this.grid?.dispatchEvent?.(o),o.defaultPrevented}on(e,t){this.grid?._pluginManager?.subscribe(this,e,t)}off(e){this.grid?._pluginManager?.unsubscribe(this,e)}emitPluginEvent(e,t){this.grid?._pluginManager?.emitPluginEvent(e,t)}requestRender(){this.grid?.requestRender?.()}requestColumnsRender(){this.grid?.requestColumnsRender?.()}requestRenderWithFocus(){this.grid?.requestRenderWithFocus?.()}requestAfterRender(){this.grid?.requestAfterRender?.()}requestVirtualRefresh(){this.grid?.requestVirtualRefresh?.()}get rows(){return this.grid?.rows??[]}get sourceRows(){return this.grid?.sourceRows??[]}get columns(){return this.grid?.columns??[]}get visibleColumns(){return this.grid?._visibleColumns??[]}get gridElement(){return this.grid?._hostElement}get disconnectSignal(){return this.#at?.signal??this.grid?.disconnectSignal}get gridIcons(){const e=this.grid?.gridConfig?.icons??{};return{...n,...e}}get isAnimationEnabled(){const e=this.grid?.effectiveConfig?.animation?.mode??"reduced-motion";if(!1===e||"off"===e)return!1;if(!0===e||"on"===e)return!0;const t=this.gridElement;if(t){return"0"!==getComputedStyle(t).getPropertyValue("--tbw-animation-enabled").trim()}return!0}get animationDuration(){const e=this.gridElement;if(e){const t=getComputedStyle(e).getPropertyValue("--tbw-animation-duration").trim(),o=parseInt(t,10);if(!isNaN(o))return o}return 200}resolveIcon(e,t){return void 0!==t?t:this.gridIcons[e]}setIcon(e,t){"string"==typeof t?e.innerHTML=t:t instanceof HTMLElement&&(e.innerHTML="",e.appendChild(t.cloneNode(!0)))}warn(e){console.warn(`${F(this.gridElement.id,this.name)} ${e}`)}}const vt={ROOT:"tbw-grid-root",HEADER:"header",HEADER_ROW:"header-row",HEADER_CELL:"header-cell",ROWS_VIEWPORT:"rows-viewport",ROWS_SPACER:"rows-spacer",ROWS_CONTAINER:"rows",DATA_ROW:"data-row",GROUP_ROW:"group-row",DATA_CELL:"data-cell",SELECTED:"selected",FOCUSED:"focused",EDITING:"editing",EXPANDED:"expanded",COLLAPSED:"collapsed",DRAGGING:"dragging",RESIZING:"resizing",SORTABLE:"sortable",SORTED_ASC:"sorted-asc",SORTED_DESC:"sorted-desc",HIDDEN:"hidden",STICKY_LEFT:"sticky-left",STICKY_RIGHT:"sticky-right",PINNED_TOP:"pinned-top",PINNED_BOTTOM:"pinned-bottom",TREE_TOGGLE:"tree-toggle",TREE_INDENT:"tree-indent",GROUP_TOGGLE:"group-toggle",GROUP_LABEL:"group-label",GROUP_COUNT:"group-count",RANGE_SELECTION:"range-selection",SELECTION_OVERLAY:"selection-overlay"},Ct={ROW_INDEX:"data-row-index",COL_INDEX:"data-col-index",FIELD:"data-field",GROUP_KEY:"data-group-key",TREE_LEVEL:"data-tree-level",STICKY:"data-sticky"},yt={ROOT:`.${vt.ROOT}`,HEADER:`.${vt.HEADER}`,HEADER_ROW:`.${vt.HEADER_ROW}`,HEADER_CELL:`.${vt.HEADER_CELL}`,ROWS_VIEWPORT:`.${vt.ROWS_VIEWPORT}`,ROWS_CONTAINER:`.${vt.ROWS_CONTAINER}`,DATA_ROW:`.${vt.DATA_ROW}`,DATA_CELL:`.${vt.DATA_CELL}`,GROUP_ROW:`.${vt.GROUP_ROW}`,ROW_BY_INDEX:e=>`.${vt.DATA_ROW}[${Ct.ROW_INDEX}="${e}"]`,CELL_BY_FIELD:e=>`.${vt.DATA_CELL}[${Ct.FIELD}="${e}"]`,CELL_AT:(e,t)=>`.${vt.DATA_ROW}[${Ct.ROW_INDEX}="${e}"] .${vt.DATA_CELL}[${Ct.COL_INDEX}="${t}"]`,SELECTED_ROWS:`.${vt.DATA_ROW}.${vt.SELECTED}`,EDITING_CELL:`.${vt.DATA_CELL}.${vt.EDITING}`},_t={COLOR_BG:"--tbw-color-bg",COLOR_FG:"--tbw-color-fg",COLOR_FG_MUTED:"--tbw-color-fg-muted",COLOR_BORDER:"--tbw-color-border",COLOR_ACCENT:"--tbw-color-accent",COLOR_HEADER_BG:"--tbw-color-header-bg",COLOR_HEADER_FG:"--tbw-color-header-fg",COLOR_SELECTION:"--tbw-color-selection",COLOR_ROW_HOVER:"--tbw-color-row-hover",COLOR_ROW_ALT:"--tbw-color-row-alt",ROW_HEIGHT:"--tbw-row-height",HEADER_HEIGHT:"--tbw-header-height",CELL_PADDING:"--tbw-cell-padding",FONT_FAMILY:"--tbw-font-family",FONT_SIZE:"--tbw-font-size",BORDER_RADIUS:"--tbw-border-radius",FOCUS_OUTLINE:"--tbw-focus-outline"};function Rt(e){const t=document.createElement("tbw-grid");return e&&(t.gridConfig=e),t}function St(e,t,o){let i=document,n=!1;return"boolean"==typeof t?n=t:t&&(i=t,n=!!o),n?customElements.whenDefined(wt.tagName).then(()=>i.querySelector(e)):i.querySelector(e)}const Et={CELL_CHANGE:"cell-change",CELL_COMMIT:"cell-commit",ROW_COMMIT:"row-commit",EDIT_OPEN:"edit-open",EDIT_CLOSE:"edit-close",CHANGED_ROWS_RESET:"changed-rows-reset",MOUNT_EXTERNAL_VIEW:"mount-external-view",MOUNT_EXTERNAL_EDITOR:"mount-external-editor",SORT_CHANGE:"sort-change",COLUMN_RESIZE:"column-resize",ACTIVATE_CELL:"activate-cell",CELL_ACTIVATE:"cell-activate",GROUP_TOGGLE:"group-toggle",COLUMN_STATE_CHANGE:"column-state-change",DATA_CHANGE:"data-change"},xt={SELECTION_CHANGE:"selection-change",TREE_EXPAND:"tree-expand",FILTER_CHANGE:"filter-change",SORT_MODEL_CHANGE:"sort-model-change",EXPORT_START:"export-start",EXPORT_COMPLETE:"export-complete",CLIPBOARD_COPY:"clipboard-copy",CLIPBOARD_PASTE:"clipboard-paste",CONTEXT_MENU_OPEN:"context-menu-open",CONTEXT_MENU_CLOSE:"context-menu-close",HISTORY_CHANGE:"history-change",SERVER_LOADING:"server-loading",SERVER_ERROR:"server-error",COLUMN_VISIBILITY_CHANGE:"column-visibility-change",COLUMN_REORDER:"column-reorder",DETAIL_EXPAND:"detail-expand",GROUP_EXPAND:"group-expand"},At={sum:(e,t)=>e.reduce((e,o)=>e+(Number(o[t])||0),0),avg:(e,t)=>{const o=e.reduce((e,o)=>e+(Number(o[t])||0),0);return e.length?o/e.length:0},count:e=>e.length,min:(e,t)=>e.length?Math.min(...e.map(e=>Number(e[t])||1/0)):0,max:(e,t)=>e.length?Math.max(...e.map(e=>Number(e[t])||-1/0)):0,first:(e,t)=>e[0]?.[t],last:(e,t)=>e[e.length-1]?.[t]},Tt=/* @__PURE__ */new Map,Ht={register(e,t){Tt.set(e,t)},unregister(e){Tt.delete(e)},get(e){if(void 0!==e)return"function"==typeof e?e:Tt.get(e)??At[e]},run(e,t,o,i){const n=this.get(e);return n?n(t,o,i):void 0},has:e=>Tt.has(e)||e in At,list:()=>[...Object.keys(At),...Tt.keys()]},Pt={sum:e=>e.reduce((e,t)=>e+t,0),avg:e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:0,count:e=>e.length,min:e=>e.length?Math.min(...e):0,max:e=>e.length?Math.max(...e):0,first:e=>e[0]??0,last:e=>e[e.length-1]??0};function Mt(e){return Pt[e]??Pt.sum}function Lt(e,t){return Mt(e)(t)}const Ot=Ht.register.bind(Ht),Dt=Ht.unregister.bind(Ht),kt=Ht.get.bind(Ht),It=Ht.run.bind(Ht),zt=Ht.list.bind(Ht);export{mt as BaseGridPlugin,o as DEFAULT_ANIMATION_CONFIG,n as DEFAULT_GRID_ICONS,Et as DGEvents,wt as DataGridElement,Z as F,t as FitModeEnum,_t as GridCSSVars,vt as GridClasses,Ct as GridDataAttrs,wt as GridElement,yt as GridSelectors,bt as PLUGIN_QUERIES,xt as PluginEvents,pt as PluginManager,z as RenderPhase,e as a,Ht as aggregatorRegistry,C as b,E as builtInSort,ut as c,Rt as createGrid,v as d,S as defaultComparator,ae as e,G as f,F as g,kt as getAggregator,Mt as getValueAggregator,V as h,B as i,zt as listAggregators,St as queryGrid,Y as r,Ot as registerAggregator,It as runAggregator,Lt as runValueAggregator,gt as s,fe as setFeatureResolver,Dt as unregisterAggregator};//# sourceMappingURL=index.js.map
|