
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
tweakpane-table
Advanced tools

Table plugin for Tweakpane.
✨ Version 0.4.0 - Structural Refactor for Robust Horizontal Layouts!
📖 Documentation:
<style>
/* size manipulation according to: https://github.com/cocopon/tweakpane/issues/46#issuecomment-633388907 */
.tableContainer {
width: 350px; /* give enough space for all cells */
}
.tableContainer .tp-lblv_v {
min-width: fit-content; /* don't cut off cells */
}
</style>
<script src="tweakpane.min.js"></script>
<script src="tweakpane-table.min.js"></script>
<script>
const pane = new Tweakpane.Pane();
pane.element.parentElement.classList = 'tableContainer';
pane.registerPlugin(TweakpaneTablePlugin.plugins);
</script>
import { Pane } from 'tweakpane';
import { plugins as TweakpaneTablePlugin } from 'tweakpane-table';
const style = document.createElement('style');
style.innerHTML = `
.tableContainer {
width: 350px;
}
.tableContainer .tp-lblv_v {
min-width: fit-content;
}
`;
document.head.appendChild(style);
const pane = new Pane();
pane.element.parentElement.classList = 'tableContainer';
pane.registerPlugin(TweakpaneTablePlugin);
Headers are just labels, Cells are just blades.
// add header row
pane.addBlade({
view: 'tableHead',
label: 'Label',
headers: [
{ label: 'Text', width: '80px' },
{ label: 'List', width: '160px' },
],
});
// add cells row
pane.addBlade({
view: 'tableRow',
label: 'row 1',
cells: [
{
view: 'text',
width: '80px',
parse: (v) => String(v),
value: 'sketch-01',
},
{
view: 'list',
width: '160px',
options: [
{ text: 'loading', value: 'LDG' },
{ text: 'menu', value: 'MNU' },
{ text: 'field', value: 'FLD' },
],
value: 'LDG',
},
],
});
You can dynamically add cells to a row using the .addCell() method. All blade types support the optional width property.
const row = pane.addBlade({
view: 'tableRow',
label: `#1`,
cells: [], // Start with empty row
});
const PARAMS = {
speed: 0.5,
};
// Add cells dynamically
row.addCell({
view: 'text',
width: '100px',
parse: (v) => String(v),
value: `effect-01`,
});
row.addCell({
view: 'binding',
width: '100px',
.../* binding params */,
});
row.addCell({
view: 'button',
title: 'del',
width: '50px',
});
// Access individual cells
const firstCell = row.getCell(0); // Returns BladeApi for the first cell
const allCells = row.cells; // Returns array of all BladeApi instances
// Listen to cell changes
firstCell.on('change', (event) => {
console.log('Cell value changed:', event.value);
});
// Remove a cell by index
row.removeCell(0); // Removes the first cell
Note: The width parameter sets the flex-basis for each cell, allowing you to control column widths.
Methods:
addCell(params) - Add a new cell to the row
params: Blade parameters with optional width propertyBladeApi for the created cellremoveCell(index) - Remove a cell at the specified index
index: Zero-based index of the cell to removegetCell(index) - Get the API for a specific cell
index: Zero-based index of the cellBladeApi or undefined if not foundProperties:
cells - Array of all cell BladeApi instances (read-only)When you remove a cell using removeCell(), it is automatically cleaned up from the DOM and internal arrays. Cell indices are updated after removal.
const row = pane.addBlade({
view: 'tableRow',
label: 'Example',
cells: [],
});
row.addCell({ view: 'text', value: 'Cell 0' });
row.addCell({ view: 'text', value: 'Cell 1' });
row.addCell({ view: 'text', value: 'Cell 2' });
console.log(row.cells.length); // 3
row.removeCell(1); // Remove 'Cell 1'
console.log(row.cells.length); // 2
console.log(row.getCell(1).value); // Now returns 'Cell 2' (indices shifted)
FAQs
Table plugin for Tweakpane
We found that tweakpane-table demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.