- Added
createLibraryAsync()
to automatically wait until piling is fully initialized. The function takes as input the same parameters ascreateLibrary()
.
- Revert setting
white
as the default background color for SVG renderer factory as it breaks existing examples.
- Add
createD3Renderer
,createVegaLiteRenderer
, andcreateObservablePlotRenderer
- Fix a glitch in the SVG renderer by overwriting any
width
,height
, andstyle
property of the<svg />
element. - Provide default options for the SVG renderer factory for convenience
- Switch from
node-sass
tosass
(dart-sass) to support Node version 12, 14, and 16.
- Export
whenInit
promise from a pile instance to easily determine when the instance is initialized. E.g.,piling.whenInit.then(() => { ... })
. - Add a
Promise
return toset()
for better async chaining. At the moment the promise immediately resolves unless you change the items. In the latter case, the promise will resolve once the items have been properly updated.
Together with changes from v0.7.14 you can now do stuff like:
const piling = createPilingJs(element, { ... });
await piling.whenInit;
// Piling instance has been initialized
await piling.groupBy('category', (item) => item.id % 5);
// Items have been grouped by their ID
await piling.arrangeBy('data', (state) => state.index);
// Piles have been ordered by their index
await piling.set('items', otherItems);
// Scatter plot items have been replaced
await piling.arrangeBy('data', { property: 'year', inverse: true });
// Piles have been arranged by year in descending order
- Return a
Promise
when callinggroupBy()
to determine when piles have been grouped (#236) - Fix an issue where
arrangeBy()
would return an unresolvable promise (#234) - Fix an issue with the badge rendering and async-rendered covers (#235)
- Add
debug
as an option topiling.importState(state, options)
andcreateLibraryFromState
to help discover issues with broken state.
- Fix an issue with external SVGs which are prefixed with
<?xml
and<!DOCTYPE
definitions
- Export
createUmap
from bundle - Include missing
piling-dimensionality-reducer
builds into the release
- Simplify the matrix renderer: you can now use
matrixRenderer
instead ofmatrixRenderer.renderer
- Fix minor visual regression from v0.7.8
- Add state serialization options via
exportState({ serialize: true })
- Export image class
createImage()
- Fix opacity issues on temporary depiling (#198 and #204)
- Fix issues removing piles on temp depile
- Fix
piling.destroy()
- Enforce aggregators to return a promise
- Fix preview scaling
- Fix a regression introduced in #218
- Fix an issue when deleting/adding items.
- Add
createLibraryFromState
as a named export to simplify the initialization of a piling.js instance from an existing state. - Allow subsampling of previews
- Allow initializing from previous state using
createPilingJs(element, { ... }, { initFromState: true })
- Return promise when running
importState()
that resolves once piling.js' state was overridden.
- Fix broken import of RBush
- Properly replace
browser.env.NODE_ENV
to avoid redux error
- Fix bundles
- Update third-party packages
- Add
pileLabelTextColor
,pileLabelTextOpacity
, andpileLabelTextStyle
(#164) - Add more pile/item properties and label properties to sidebar
- Add
zoomScale
for efficient zoom-based scaling (#164) - Rename
pileItemOrder
topileOrderItems
to make it a pile property (#194) - Add piling by selection (i.e., focused piles). See (interactions)[https://piling.js.org/docs/#/README?id=multi-select-grouping] for details.
- Add
pileLabelSizeTransform
property for adjusting the relative size of pile labels. When set tohistogram
, this option can be used to visualizing the distribution of categories on a pile (#167) - Add some pile/item properties and label properties to sidebar (#158)
- Add the following properties to give more control to the pile background color: (#151)
pileBackgroundColorActive
pileBackgroundColorFocus
pileBackgroundColorHover
pileBackgroundOpacityActive
pileBackgroundOpacityFocus
pileBackgroundOpacityHover
- Add the following properties to define the pile label (#133)
pileLabel
pileLabelAlign
pileLabelColor
pileLabelFontSize
pileLabelHeight
pileLabelStackAlign
pileLabelText
- Add
pileSizeBadge
andpileSizeBadgeAlign
to display a badge showing the pile size (#138) - Add
cellSize
to define the size of the cell (#136) - Add
splitBy()
andsplitAll()
to scatter piles (#144, #164) - Add
groupBy()
for layout-, location-, and data-driven piling (#129, #141, #142, #161) - Add
pileItemOrder
to sort the items on a pile by a callback function - Add
previewItemOffset
to position previews with a per-item callback function (#113) - Add
previewOffset
andpreviewPadding
and adjustpreviewSpacing
to position previews with a per-pile callback function (#148) - Add
previewScaling
andpreviewScaleToCover
to adjust the x and y scaling factor or width/height of previews relative to the cover (#148) - Add representative aggregator and renderer
- Add
pileItemInvert
andpileCoverInvert
property for inverting colors - Add
pileCoverScale
for scaling the cover in comparison to the pile size - Show spinner during the initial item rendering
- Add placeholder image to cover items during their computation (#132)
- Add support for dynamic item creation and removal (#104)
- Add a spatial example using COVID-19 data from John Hopkins University (#164)
- Add an example of scatterplot piles using the data from World Bank Open Data (#130)
- Add example of dynamic renderer for microscopy data from Codeluppi et al., 2018 that is based on the Vitessce Image Viewer (#109)
- Update and expand the Google Quickdraw examples (#172)
- Docsify the docs
- Remove
arrangeByOnce()
. Instead usearrangeBy(..., ..., { onPile: true })
- Make
arrangeBy
return a promise that resolves once the items have been positioned - Several perfomance improvements
- Ensure pile covers update as items update (#175)
- Ensure layout is updated properly (#155, #156)
- Ensure item/preview and pile properties can be functional properties (#174)
- Fix pile events (#182)
- Remove
randomOffsetRange
andrandomRotationRange
- Replace
pileItemAlignment
withpileItemOffset
. AllowpileItemOffset
andpileItemRotation
to either be a static value or a callback function - Add support for browsing in isolation
- Add a joy plot like example for monthly temperature distributions in Berlin Tempelhofer Feld
- Add support for dynamically re-render the items either when their data changes or when the renderer changes
- Add an example of perfectly overlapping piles using a subset of Google Quickdraw Dataset
- Add
previewBorderColor
andpreviewBorderOpacity
. Set the default value ofpreviewBackgroundColor
andpreviewBackgroundOpacity
to'inherit'
- Add pan&zoom interaction
- Add mouse-only lasso support to provide a unified interface for using the lasso in the scroll and pan&zoom mode
- Add
arrangeBy()
andarrangeByOnce()
for automatic and data-driven pile arrangements - Add
pileItemBrightness
to control the brightness of pile items - Add
pileItemTint
to control the tint of pile items - Add
randomOffsetRange
andrandomRotationRange
properties - Add item rotation animation
- Add drop-merge animation when using a preview aggregator
- Add support for specifying the
width
andheight
of the SVG image - Rename
itemOpacity
topileItemOpacity
for consistency - Change pile border to be scale invariant
- Change lasso from alt to shift + mouse-down + mouse-move
- Unmagnify magnified piles on drag start
- Fix pile scaling
- Fix grid drawing to update dynamically upon changes to the grid
- Disentangle the pile base scale and magnification
-
Add the following properties for dynamic styling. Each property accepts a float value or a callback function. See
DOCS.md
for details.pileOpacity
pileScale
pileBorderSize
itemOpacity
-
Rename the following properties for clarity:
itemPadding
is now calledcellPadding
pileCellAlign
is now calledpileCellAlignment
itemAlignment
is now calledpileItemAlignment
itemRotated
is now calledpileItemRotation
- Refactored the grid:
layout.cellWidth
is now calledlayout.columnWidth
layout.colWidth
is now calledlayout.cellWidth
layout.cellHeight
is now calledlayout.rowHeight
layout.rowHeight
is now calledlayout.cellHeight
layout.colNum
is now calledlayout.numColumns
layout.rowNum
is now calledlayout.numRows
- All properties but
layout.numRows
are read-only now
- Simplified
resizeHandler()
and debounced it - Changed the default value of
itemSizeRange
from[0.7, 0.9]
to[0.5, 1.0]
to make full use of the cell width - Changed the default value of
itemPadding
from0
to6
to ensure some padding - Add
gridColor
,gridOpacity
, andshowGrid
properties
- Include ES modules in npm release
- Switch
package.json
's module to ES module
-
Add functionality to align piles by the grid via the context menu
-
Add a new property called
pileCellAlign
to define where the piles are aligned to, which accepts the following values:topleft
topRight
bottomLeft
bottomRight
center
-
Add
exportState()
andimportState(newState)
to the library instance to allow saving a state and implementing an undo functionality. -
Add the following new events:
update
pileEnter
pileLeave
pileFocus
pileBlur
pileActive
pileInactive
pileDrag
pileDrop
-
Change the grid layout properties from a nested object called
grid
to the following individual properties that you can set with.set()
:itemSize
itemPadding
columns
rowHeight
cellAspectRatio
Their precedence is as follows:
columns
<itemSize
cellAspectRatio
<rowHeight
-
Update the grid layout on browser window resize
- Add properties for setting various colors via
.set()
:backgroundColor
lassoFillColor
lassoFillOpacity
lassoStrokeColor
lassoStrokeOpacity
lassoStrokeSize
pileBorderColor
pileBorderOpacity
pileBorderColorSelected
pileBorderOpacitySelected
pileBorderColorActive
pileBorderOpacityActive
pileBackgroundColor
pileBackgroundOpacity
- Add
pileContextMenuItems
property to define custom context menu items. - Redesign default context menu
- Add an SVG renderer. See the lines example.
- Initial release