Changelogs
Version 3.0.0
16 April, 2026
Architecture
- Extracted all logic from monolithic custom-table.vue (~800 → ~200 lines) into single-responsibility composables
- New composables: usePagination, useSorting, useFiltering, useSelection, useRowClick
- Introduced filter-strategies.ts — strategy pattern replacing 130+ line if-else chain for column filtering
- Extracted pure utility helpers into utils.ts (
cellValue,dateFormat,stringFormat) - Zero prop mutations enforced — column filter state managed via internal
columnFilterStatereactive Map - normalizedColumns computed applies defaults immutably — used everywhere instead of raw
props.columns
Events — Breaking Changes
- Renamed
@change→@changeServerfor clarity (server mode aggregate event) - New event
@reset— fires whenreset()called. Only event emitted during reset; all others suppressed - @pageChange now fires only from explicit user pagination clicks — silent on programmatic resets (filter/search/pagesize/reset)
- Removed internal
suppressPageEventflag — replaced with explicitonUserPageChange()handler pattern
Selection
- Rewrote selection system — removed fragile
suppressEmitflag and watcher-based emit - selectedAll is now a
computedreactive to bothselectedand visible rows (was ref + watcher) - Row checkbox uses explicit
@changehandler instead ofv-model— single emit per interaction, no double-fire - Added toggleRow() method for cleaner row click selection
Column Filtering
- Boolean column filter defaults to "All" (empty) instead of "equal"
- Auto-set filter condition when user types with "No filter" selected — defaults to
contain(string) orequal(number/date) - Filter dropdown width increased (
bh-w-[180px]) withwhitespace-normalfor better readability - column-header.vue refactored — flat individual props instead of
:all="props"pattern - column-filter.vue emits
conditionChangeinstead of mutating props - Debounced text/number filter inputs (300ms) in column header
getColumnsWithFilterState()now defaultstypeto'string'when not explicitly set
New Props
- skeletonRowCount — number of skeleton loader rows (default: 10)
- Skeleton loader now renders one
<td>per visible column instead of single colspan
New Slots
- #noData — custom empty state slot alongside
noDataContenttext prop - #firstArrow, #previousArrow, #nextArrow, #lastArrow — custom pagination arrow slots
i18n / Localization
- Added all, true, false keys to
columnFilterLangfor boolean filter dropdown translation
Bug Fixes
- Fixed pagination breaking after page size change when already on page 1 (stale
suppressPageEventflag) - Fixed selection checkbox not updating properly in client-side mode (stale
suppressEmitflag) - Fixed double
@rowSelectemit whenselectRowOnClickenabled - Fixed
@pageChangeevent firing during filter/search/pagesize resets - Fixed reset emitting
@searchChange,@pageSizeChangeetc. — now only emits@reset - Fixed
selectedAllnot reacting to visible row changes (page/filter/sort)
Version 2.0.1
30 January, 2025
- Fixed a global CSS issue
- Added getVisibleRows method
- Fixed column filtering to apply only when enabled
- Fixed sorting to apply only when enabled