Skip to content

Error & Warning Reference

Every warning and error in @toolbox-web/grid includes a diagnostic code (e.g. TBW001) and a link back to this page. Find your code below for an explanation and fix.


TBW001 — Missing Plugin (Column Property)

Section titled “TBW001 — Missing Plugin (Column Property)”

A column uses a property (like editable, editor, pinned, or group) that requires a plugin, but that plugin isn’t loaded.

Fix: Import and add the required plugin:

// For editing
import '@toolbox-web/grid/features/editing';
grid.gridConfig = {
features: { editing: true },
columns: [{ field: 'name', editable: true }],
};

Or with the plugin API directly:

import { EditingPlugin } from '@toolbox-web/grid/plugins/editing';
grid.gridConfig = {
plugins: [new EditingPlugin()],
columns: [{ field: 'name', editable: true }],
};

TBW002 — Missing Plugin (Config Property)

Section titled “TBW002 — Missing Plugin (Config Property)”

A grid config property (like columnGroups) requires a plugin that isn’t loaded.

Fix: Same as TBW001 — import the required feature or plugin.

A plugin’s configuration rule detected an invalid combination. The error message describes the specific rule that was violated.

Fix: Check the error message for the specific plugin and configuration that triggered the rule. Adjust the plugin config to avoid the invalid combination.

A plugin detected a potentially problematic configuration. This is a development-only warning — the grid will still work, but behavior may be unexpected.

Fix: Read the warning message and adjust your config accordingly.


A plugin requires another plugin to be loaded first. For example, UndoRedoPlugin requires EditingPlugin.

Fix: Add the dependency plugin before the dependent one:

import '@toolbox-web/grid/features/editing';
import '@toolbox-web/grid/features/undoRedo';
grid.gridConfig = {
features: {
editing: true,
undoRedo: true,
},
};

A plugin has an optional dependency that isn’t loaded. The plugin will still work, but some features may be unavailable.

Fix: If you need the full feature set, add the optional dependency. Otherwise, this message is informational and can be ignored.

Two plugins that are known to conflict are both loaded. Development-only warning.

Fix: Remove one of the conflicting plugins. The warning message names both plugins and explains the conflict.

A plugin uses a deprecated API that will be removed in a future major version.

Fix: Migrate to the recommended replacement described in the warning message.

An error was thrown inside a plugin event handler. This doesn’t crash the grid — the error is caught and logged — but it indicates a bug in plugin code.

Fix: Check the stack trace to find and fix the error in the plugin’s event handler.


A feature was registered more than once. The previous registration was overwritten. This typically happens when two different versions of the same feature module are loaded.

Fix: Check your bundle for duplicate imports. Each feature should be imported exactly once.

A feature is configured in gridConfig.features but its module was never imported. Features require a side-effect import to register themselves.

Fix: Add the import shown in the warning:

import '@toolbox-web/grid/features/selection';
grid.gridConfig = {
features: { selection: 'row' },
};

Framework adapters handle this automatically — if you’re using Angular, React, or Vue adapters, import from the adapter package instead.

A feature requires another feature to be enabled. For example, clipboard requires selection.

Fix: Add the required feature to your config:

grid.gridConfig = {
features: {
selection: 'range',
clipboard: true,
},
};

The grid needs to identify a row but couldn’t determine its ID. This happens when:

  • Rows don’t have an id or _id property
  • No getRowId function is configured

Fix: Either add an id field to your data, or configure getRowId:

grid.gridConfig = {
getRowId: (row) => row.employeeNumber,
};

A row update or delete operation referenced a row ID that doesn’t exist in the grid.

Fix: Verify the row ID is correct and the row hasn’t been removed. Use grid.getRow(id) to check if a row exists before updating.


A column’s width value is not a valid CSS grid track size. Development-only warning.

Fix: Use a number (interpreted as pixels) or a valid CSS string:

{ field: 'name', width: 200 } // 200px
{ field: 'name', width: '30%' } // 30%
{ field: 'name', width: '2fr' } // 2 fractional units
{ field: 'name', width: 'auto' } // auto

The rowClass function threw an error during rendering. The row will render without dynamic classes.

Fix: Check your rowClass function for null/undefined access or type errors.

A column’s cellClass function threw an error. The cell will render without dynamic classes.

Fix: Check the cellClass function on the column named in the warning.

A column’s format function threw an error. The raw value will be displayed instead.

Fix: Check the format function on the named column. Ensure it handles null/undefined values gracefully.

An externalView.mount() callback threw during cell rendering.

Fix: Debug the mount function in your external view configuration for the named column.

The mount-external-view event dispatch failed for a cell.

Fix: Check event listeners attached to the mount-external-view event on the grid.


A <tbw-grid-tool-panel> light DOM element is missing required id or title attributes.

Fix: Add both attributes:

<tbw-grid-tool-panel id="my-panel" title="My Panel">
Panel content here
</tbw-grid-tool-panel>

openToolPanel() was called but no tool panels are registered.

Fix: Register at least one tool panel before attempting to open the panel.

toggleToolPanelSection() was called with a section ID that doesn’t match any registered panel.

Fix: Verify the section ID matches a registered tool panel’s id.

A tool panel with the same id was registered twice. The duplicate was ignored.

Fix: Ensure each tool panel has a unique id.

Header content with the same id was registered twice.

Fix: Use unique IDs for header content registrations.

Toolbar content with the same id was registered twice.

Fix: Use unique IDs for toolbar content registrations.


An external editor’s mount() function threw during edit activation.

Fix: Debug the editor’s mount function. Ensure it handles the editor context correctly.


print() was called while a print operation is already running.

Fix: Wait for the current print to complete before starting another. Listen for the print-complete event.

print() was called but the grid element is not available (likely disconnected from the DOM).

Fix: Ensure the grid is mounted before calling print().

The print operation encountered an error. The print-complete event will fire with success: false.

Fix: Check the error details in the console. Common causes include the grid being too large or the user canceling the print dialog.

Multiple elements on the page share the same id as the grid. This interferes with print isolation.

Fix: Assign a unique id to each grid element on the page.


The browser’s navigator.clipboard.writeText() failed. The grid falls back to document.execCommand('copy').

Fix: This usually happens when the page isn’t focused or lacks the clipboard permission. The fallback typically succeeds, so this warning is informational.


TBW110 — Missing Breakpoint (Responsive)

Section titled “TBW110 — Missing Breakpoint (Responsive)”

ResponsivePlugin is loaded but no breakpoint is configured. The plugin will not activate.

Fix: Set a breakpoint based on your container width:

grid.gridConfig = {
features: {
responsive: { breakpoint: 600 },
},
};

TBW111 — Transaction In Progress (Undo/Redo)

Section titled “TBW111 — Transaction In Progress (Undo/Redo)”

beginTransaction() was called while a transaction is already open.

Fix: Call endTransaction() before starting a new transaction.

endTransaction() was called without a matching beginTransaction().

Fix: Ensure every endTransaction() has a preceding beginTransaction().

A ColumnGroupDefinition has neither id nor header. The grid cannot generate an identifier.

Fix: Add either an id or header to every column group definition:

columnGroups: [
{ id: 'personal', header: 'Personal Info', children: ['name', 'age'] },
]

columnGroups are defined in both gridConfig and the groupingColumns feature config. The feature config takes precedence.

Fix: Define column groups in only one place — preferably in the feature config.


The grid couldn’t extract its CSS from document.styleSheets due to a CORS or access error.

Fix: Ensure the grid’s CSS file is served from the same origin, or add CORS headers to the stylesheet response.

The grid’s CSS was not found in document.styleSheets. The grid will render without styling.

Fix: Ensure you’re importing the grid’s CSS. For most setups:

import '@toolbox-web/grid/style.css';

Or link it in your HTML:

<link rel="stylesheet" href="node_modules/@toolbox-web/grid/style.css" />

An HTML attribute (rows, columns, or grid-config) contains invalid JSON.

Fix: Verify the attribute value is valid JSON. For complex config, use JavaScript properties instead of HTML attributes:

import { queryGrid } from '@toolbox-web/grid';
const grid = queryGrid('tbw-grid');
grid.gridConfig = { columns: [...], ... };
AI assistants: For complete API documentation, implementation guides, and code examples for this library, see https://raw.githubusercontent.com/OysteinAmundsen/toolbox/main/llms-full.txt