@simple-table/vue 3.0.2 → 3.0.5
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/README.md +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/index.es.js +1 -1
- package/dist/types/core/src/core/rendering/RenderOrchestrator.d.ts +7 -0
- package/dist/types/core/src/managers/ScrollManager.d.ts +3 -0
- package/dist/types/core/src/utils/rowProcessing.d.ts +19 -0
- package/dist/types/vue/src/index.d.ts +0 -1
- package/dist/types/vue/src/types.d.ts +3 -3
- package/package.json +2 -2
- package/dist/types/vue/src/defaultHeadersFromCore.d.ts +0 -5
package/README.md
CHANGED
|
@@ -33,4 +33,4 @@ npm install @simple-table/vue
|
|
|
33
33
|
|
|
34
34
|
## License
|
|
35
35
|
|
|
36
|
-
Dual licensed — MIT for individuals
|
|
36
|
+
Dual licensed — MIT for zero-revenue individuals and startups; Pro and Enterprise (commercial EULA) for revenue-generating companies. See [LICENSE](LICENSE), [EULA.txt](../../EULA.txt), and [pricing](https://www.simple-table.com/pricing).
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),r=require("simple-table-core");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue"),r=require("simple-table-core");function n(e,r){var n={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&r.indexOf(t)<0&&(n[t]=e[t]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(t=Object.getOwnPropertySymbols(e);o<t.length;o++)r.indexOf(t[o])<0&&Object.prototype.propertyIsEnumerable.call(e,t[o])&&(n[t[o]]=e[t[o]])}return n}function t(r){return n=>{const t=document.createElement("div");return e.render(e.h(r,n),t),t}}function o(r){const n=document.createElement("div");return e.render(r,n),n}function d(r){const n=document.createElement("div");e.render(r,n);const t=n.innerHTML;return e.render(null,n),t}function i(e){return"object"==typeof e||"function"==typeof e}function l(e){const{cellRenderer:r,headerRenderer:o,children:d,nestedTable:i}=e,a=n(e,["cellRenderer","headerRenderer","children","nestedTable"]),c=Object.assign({},a);if(r&&(c.cellRenderer="object"==typeof r?t(r):r),o&&(c.headerRenderer="object"==typeof o?t(o):o),d&&(c.children=d.map(l)),i){const e=Object.assign(Object.assign({},i),{rows:[]});c.nestedTable=s(e)}return c}function s(e){const{defaultHeaders:r,rows:s,footerRenderer:a,emptyStateRenderer:c,errorStateRenderer:u,loadingStateRenderer:f,tableEmptyStateRenderer:p,headerDropdown:m,columnEditorConfig:b,icons:R}=e,y=n(e,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","tableEmptyStateRenderer","headerDropdown","columnEditorConfig","icons"]),g=Object.assign(Object.assign({},y),{rows:s,defaultHeaders:r.map(l)});if(void 0!==a&&(g.footerRenderer="object"==typeof a?t(a):a),void 0!==c)if(i(c))g.emptyStateRenderer=t(c);else{const e=c;g.emptyStateRenderer=()=>o(e)}if(void 0!==u)if(i(u))g.errorStateRenderer=t(u);else{const e=u;g.errorStateRenderer=()=>o(e)}if(void 0!==f)if(i(f))g.loadingStateRenderer=t(f);else{const e=f;g.loadingStateRenderer=()=>o(e)}return void 0!==p&&(g.tableEmptyStateRenderer=null===p?null:p instanceof HTMLElement||"string"==typeof p?p:o(p)),void 0!==m&&(g.headerDropdown=t(m)),void 0!==b&&(g.columnEditorConfig=function(e){const{rowRenderer:r,customRenderer:o}=e,d=n(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},d),r?{rowRenderer:t(r)}:{}),o?{customRenderer:t(o)}:{})}(b)),void 0!==R&&(g.icons=function(e){const r={};for(const[n,t]of Object.entries(e))null!=t&&(r[n]="string"==typeof t||t instanceof HTMLElement||t instanceof SVGElement?t:d(t));return r}(R)),g}function a(r){const n={};for(const t in r)n[e.camelize(t)]=""===r[t]||r[t];return n}"function"==typeof SuppressedError&&SuppressedError;const c=e.defineComponent({name:"SimpleTable",props:{},inheritAttrs:!1,setup(n,{attrs:t,expose:o}){const d=e.ref(null);let i=null;return e.onMounted(()=>{d.value&&(i=new r.SimpleTableVanilla(d.value,s(a(t))),i.mount())}),e.onUpdated(()=>{null==i||i.update(s(a(t)))}),e.onUnmounted(()=>{null==i||i.destroy(),i=null}),o({getAPI:()=>{var e;return null!==(e=null==i?void 0:i.getAPI())&&void 0!==e?e:null}}),()=>e.h("div",{ref:d})}});Object.defineProperty(exports,"asRows",{enumerable:!0,get:function(){return r.asRows}}),exports.SimpleTable=c;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{render as e,h as r,defineComponent as t,ref as n,onMounted as o,onUpdated as d,onUnmounted as i,camelize as
|
|
1
|
+
import{render as e,h as r,defineComponent as t,ref as n,onMounted as o,onUpdated as d,onUnmounted as i,camelize as l}from"vue";import{SimpleTableVanilla as s}from"simple-table-core";export{asRows}from"simple-table-core";function c(e,r){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&r.indexOf(n)<0&&(t[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)r.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(t[n[o]]=e[n[o]])}return t}function a(t){return n=>{const o=document.createElement("div");return e(r(t,n),o),o}}function u(r){const t=document.createElement("div");return e(r,t),t}function f(r){const t=document.createElement("div");e(r,t);const n=t.innerHTML;return e(null,t),n}function p(e){return"object"==typeof e||"function"==typeof e}function m(e){const{cellRenderer:r,headerRenderer:t,children:n,nestedTable:o}=e,d=c(e,["cellRenderer","headerRenderer","children","nestedTable"]),i=Object.assign({},d);if(r&&(i.cellRenderer="object"==typeof r?a(r):r),t&&(i.headerRenderer="object"==typeof t?a(t):t),n&&(i.children=n.map(m)),o){const e=Object.assign(Object.assign({},o),{rows:[]});i.nestedTable=R(e)}return i}function R(e){const{defaultHeaders:r,rows:t,footerRenderer:n,emptyStateRenderer:o,errorStateRenderer:d,loadingStateRenderer:i,tableEmptyStateRenderer:l,headerDropdown:s,columnEditorConfig:R,icons:b}=e,y=c(e,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","tableEmptyStateRenderer","headerDropdown","columnEditorConfig","icons"]),g=Object.assign(Object.assign({},y),{rows:t,defaultHeaders:r.map(m)});if(void 0!==n&&(g.footerRenderer="object"==typeof n?a(n):n),void 0!==o)if(p(o))g.emptyStateRenderer=a(o);else{const e=o;g.emptyStateRenderer=()=>u(e)}if(void 0!==d)if(p(d))g.errorStateRenderer=a(d);else{const e=d;g.errorStateRenderer=()=>u(e)}if(void 0!==i)if(p(i))g.loadingStateRenderer=a(i);else{const e=i;g.loadingStateRenderer=()=>u(e)}return void 0!==l&&(g.tableEmptyStateRenderer=null===l?null:l instanceof HTMLElement||"string"==typeof l?l:u(l)),void 0!==s&&(g.headerDropdown=a(s)),void 0!==R&&(g.columnEditorConfig=function(e){const{rowRenderer:r,customRenderer:t}=e,n=c(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},n),r?{rowRenderer:a(r)}:{}),t?{customRenderer:a(t)}:{})}(R)),void 0!==b&&(g.icons=function(e){const r={};for(const[t,n]of Object.entries(e))null!=n&&(r[t]="string"==typeof n||n instanceof HTMLElement||n instanceof SVGElement?n:f(n));return r}(b)),g}function b(e){const r={};for(const t in e)r[l(t)]=""===e[t]||e[t];return r}"function"==typeof SuppressedError&&SuppressedError;const y=t({name:"SimpleTable",props:{},inheritAttrs:!1,setup(e,{attrs:t,expose:l}){const c=n(null);let a=null;return o(()=>{c.value&&(a=new s(c.value,R(b(t))),a.mount())}),d(()=>{null==a||a.update(R(b(t)))}),i(()=>{null==a||a.destroy(),a=null}),l({getAPI:()=>{var e;return null!==(e=null==a?void 0:a.getAPI())&&void 0!==e?e:null}}),()=>r("div",{ref:c})}});export{y as SimpleTable};
|
|
2
2
|
//# sourceMappingURL=index.es.js.map
|
|
@@ -92,6 +92,13 @@ export declare class RenderOrchestrator {
|
|
|
92
92
|
private lastRowsRef;
|
|
93
93
|
private flattenedRowsCache;
|
|
94
94
|
private lastProcessedResult;
|
|
95
|
+
/** Fingerprint for skipping pagination + height-map work on vertical scroll frames. */
|
|
96
|
+
private processRowsScrollReuseKey;
|
|
97
|
+
private processRowsScrollReuseBase;
|
|
98
|
+
/** Last painted virtual row range on scroll-raf; when unchanged, DOM work is redundant (native scroll moves content). */
|
|
99
|
+
private lastScrollRafPaintedRange;
|
|
100
|
+
/** Reuse normalized headers across scroll frames when layout inputs are unchanged. */
|
|
101
|
+
private scrollRafHeadersMemo;
|
|
95
102
|
constructor();
|
|
96
103
|
getCachedFlattenResult(): FlattenRowsResult | null;
|
|
97
104
|
getLastProcessedResult(): ProcessRowsResult | null;
|
|
@@ -19,10 +19,13 @@ export declare class ScrollManager {
|
|
|
19
19
|
private subscribers;
|
|
20
20
|
private lastScrollTop;
|
|
21
21
|
private scrollTimeoutId;
|
|
22
|
+
/** Coalesce scroll-driven subscriber notifications to one rAF (avoids sync storms + reflow). */
|
|
23
|
+
private notifySubscribersRafId;
|
|
22
24
|
constructor(config: ScrollManagerConfig);
|
|
23
25
|
updateConfig(config: Partial<ScrollManagerConfig>): void;
|
|
24
26
|
subscribe(callback: StateChangeCallback): () => void;
|
|
25
27
|
private notifySubscribers;
|
|
28
|
+
private scheduleNotifySubscribersFromScroll;
|
|
26
29
|
handleScroll(scrollTop: number, scrollLeft: number, containerHeight: number, contentHeight: number): void;
|
|
27
30
|
setScrolling(isScrolling: boolean): void;
|
|
28
31
|
getState(): ScrollManagerState;
|
|
@@ -34,3 +34,22 @@ export interface ProcessRowsResult {
|
|
|
34
34
|
heightMap: CumulativeHeightMap | undefined;
|
|
35
35
|
}
|
|
36
36
|
export declare function processRows(config: ProcessRowsConfig): ProcessRowsResult;
|
|
37
|
+
/** Layout inputs that do not depend on scroll position (reuse across scroll-raf frames). */
|
|
38
|
+
export interface ProcessRowsScrollReuseBase {
|
|
39
|
+
currentTableRows: TableRow[];
|
|
40
|
+
paginatedHeightOffsets: HeightOffsets | undefined;
|
|
41
|
+
heightMap: CumulativeHeightMap | undefined;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Recomputes only viewport-dependent fields when pagination, height map, and row list
|
|
45
|
+
* are unchanged (vertical scroll only). Avoids re-running applyPagination and
|
|
46
|
+
* buildCumulativeHeightMap on every scroll frame.
|
|
47
|
+
*/
|
|
48
|
+
export declare function recomputeProcessRowsViewport(base: ProcessRowsScrollReuseBase, config: {
|
|
49
|
+
contentHeight: number | undefined;
|
|
50
|
+
rowHeight: number;
|
|
51
|
+
scrollTop: number;
|
|
52
|
+
scrollDirection?: "up" | "down" | "none";
|
|
53
|
+
enableStickyParents: boolean;
|
|
54
|
+
rowGrouping?: Accessor[];
|
|
55
|
+
}): ProcessRowsResult;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { default as SimpleTable } from "./SimpleTable";
|
|
2
2
|
export { asRows } from "simple-table-core";
|
|
3
|
-
export { defaultHeaderFromCore, defaultHeadersFromCore, mapToVueHeaderObjects, } from "./defaultHeadersFromCore";
|
|
4
3
|
export type { SimpleTableVueProps, TableInstance, VueHeaderObject, VueColumnEditorConfig, VueIconsConfig, VueIconElement, VueCellRenderer, VueHeaderRenderer, VueFooterRenderer, VueHeaderDropdown, VueColumnEditorRowRenderer, VueColumnEditorCustomRenderer, VueLoadingStateRenderer, VueErrorStateRenderer, VueEmptyStateRenderer, } from "./types";
|
|
5
4
|
export type { Accessor, AggregationConfig, AggregationType, BoundingBox, Cell, CellChangeProps, CellClickProps, CellRenderer, CellRendererProps, CellValue, ChartOptions, ColumnEditorConfig, ColumnEditorRowRenderer, ColumnEditorRowRendererComponents, ColumnEditorCustomRenderer, ColumnEditorCustomRendererProps, ColumnEditorRowRendererProps, ColumnEditorSearchFunction, ColumnType, ColumnVisibilityState, Comparator, ComparatorProps, CustomTheme, CustomThemeProps, DragHandlerProps, EmptyStateRenderer, EmptyStateRendererProps, EnumOption, ErrorStateRenderer, ErrorStateRendererProps, ExportToCSVProps, ExportValueGetter, ExportValueProps, FilterCondition, FooterRendererProps, GetRowId, GetRowIdParams, HeaderDropdown, HeaderDropdownProps, HeaderObject, HeaderRenderer, HeaderRendererComponents, HeaderRendererProps, IconsConfig, LoadingStateRenderer, LoadingStateRendererProps, OnRowGroupExpandProps, OnSortProps, QuickFilterConfig, QuickFilterGetter, QuickFilterGetterProps, QuickFilterMode, Row, RowButtonProps, RowId, RowSelectionChangeProps, RowState, SetHeaderRenameProps, SharedTableProps, ShowWhen, SimpleTableConfig, SimpleTableProps, SortColumn, TableAPI, TableFilterState, TableHeaderProps, TableRowProps, Theme, UpdateDataProps, ValueFormatter, ValueFormatterProps, ValueGetter, ValueGetterProps, } from "simple-table-core";
|
|
@@ -35,8 +35,8 @@ export interface VueColumnEditorConfig extends Omit<ColumnEditorConfig, "rowRend
|
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* Column definition for `defaultHeaders`: core column metadata with Vue-only
|
|
38
|
-
* `cellRenderer` / `headerRenderer` / `children` / `nestedTable`.
|
|
39
|
-
* `
|
|
38
|
+
* `cellRenderer` / `headerRenderer` / `children` / `nestedTable`.
|
|
39
|
+
* `defaultHeaders` also accepts plain `HeaderObject[]` from shared configs.
|
|
40
40
|
*/
|
|
41
41
|
export interface VueHeaderObject extends Omit<HeaderObject, "cellRenderer" | "headerRenderer" | "children" | "nestedTable"> {
|
|
42
42
|
cellRenderer?: VueCellRenderer;
|
|
@@ -45,7 +45,7 @@ export interface VueHeaderObject extends Omit<HeaderObject, "cellRenderer" | "he
|
|
|
45
45
|
nestedTable?: Omit<SimpleTableVueProps, "rows" | "loadingStateRenderer" | "errorStateRenderer" | "emptyStateRenderer" | "tableEmptyStateRenderer">;
|
|
46
46
|
}
|
|
47
47
|
export interface SimpleTableVueProps extends Omit<SimpleTableProps, "rows" | "defaultHeaders" | "footerRenderer" | "emptyStateRenderer" | "errorStateRenderer" | "loadingStateRenderer" | "tableEmptyStateRenderer" | "headerDropdown" | "columnEditorConfig" | "icons"> {
|
|
48
|
-
defaultHeaders: VueHeaderObject
|
|
48
|
+
defaultHeaders: ReadonlyArray<HeaderObject | VueHeaderObject>;
|
|
49
49
|
/** Row data: domain objects or core `Row[]`; cast inside the adapter. */
|
|
50
50
|
rows: ReadonlyArray<Row> | ReadonlyArray<object>;
|
|
51
51
|
footerRenderer?: VueFooterRenderer;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simple-table/vue",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.5",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"module": "dist/index.es.js",
|
|
6
6
|
"types": "dist/types/vue/src/index.d.ts",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"vue": ">=3.0.0"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"simple-table-core": "3.0.
|
|
31
|
+
"simple-table-core": "3.0.5"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@rollup/plugin-alias": "4.0.0",
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { HeaderObject } from "simple-table-core";
|
|
2
|
-
import type { VueHeaderObject } from "./types";
|
|
3
|
-
export declare function defaultHeaderFromCore(header: HeaderObject): VueHeaderObject;
|
|
4
|
-
export declare function defaultHeadersFromCore(headers: readonly HeaderObject[]): VueHeaderObject[];
|
|
5
|
-
export declare function mapToVueHeaderObjects(columns: readonly object[]): VueHeaderObject[];
|