@simple-table/solid 4.1.4 → 4.1.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/dist/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("solid-js/web"),r=require("solid-js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("solid-js/web"),r=require("solid-js"),t=require("simple-table-core"),n=require("solid-js/store");function o(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 s(r,t){return n=>{const o=document.createElement("div"),s=e.render(()=>e.createComponent(t,n),o);return r.register(o,s),o}}function i(t,o,s){const i=document.createElement("div"),[c,d]=n.createStore(s),[l,a]=r.createSignal(o()),u=e.render(()=>e.createComponent(e.Dynamic,r.mergeProps(c,{get component(){return l()}})),i);return t.register(i,u),{host:i,setProps:e=>{a(()=>o()),d(n.reconcile(e))}}}function c(r,t,n,o){const s="cell"===n?r.cellRendererCache:r.headerRendererCache,c=s.get(t);if(c)return c.component=o,c.wrapped;const d={component:o,wrapped:null};if("header"===n){let e=null,n=null;const o=t=>{if(e&&r.isRegistered(e)&&n)return n(t),e;const o=i(r,()=>d.component,t);return e=o.host,n=o.setProps,e};return d.wrapped=o,s.set(t,d),o}const l=t=>{const n=document.createElement("div"),o=e.render(()=>e.createComponent(d.component,t),n);return r.register(n,o),n};return d.wrapped=l,s.set(t,d),l}function d(e,r){const t=new Map;return n=>{const o=String(n.accessor),s=t.get(o);if(s&&e.isRegistered(s.host))return s.setProps(n),s.host;const c=i(e,()=>r,n);return t.set(o,c),c.host}}function l(r,t){const n=document.createElement("div"),o=e.render(()=>t,n);return r.register(n,o),n}function a(r){const t=document.createElement("div"),n=e.render(()=>r,t),o=t.innerHTML;return n(),o}function u(e){return"function"==typeof e}function p(e,r){const{cellRenderer:t,headerRenderer:n,children:s,nestedTable:i}=e,d=o(e,["cellRenderer","headerRenderer","children","nestedTable"]),l=String(e.accessor),a=Object.assign({},d);if(t&&(a.cellRenderer=c(r,l,"cell",t)),n&&(a.headerRenderer=c(r,l,"header",n)),s&&(a.children=s.map(e=>p(e,r))),i){const e=Object.assign(Object.assign({},i),{rows:[]});a.nestedTable=m(e,r)}return a}function f(e){const r=e.columns;if(!r)throw new Error("SimpleTable requires `columns`");return r}function m(e,r){const{rows:n,footerRenderer:i,emptyStateRenderer:c,errorStateRenderer:m,loadingStateRenderer:h,tableEmptyStateRenderer:g,headerDropdown:R,columnEditorConfig:b,icons:C,rowButtons:w,onColumnOrderChange:O,onColumnWidthChange:E,onHeaderEdit:S,onColumnSelect:v,enableColumnEditor:y,enableColumnEditorInitOpen:P,enablePagination:j,onTableReady:T,hoverRowBackground:A,oddColumnBackground:I,oddEvenRowBackground:_}=e,B=o(e,["columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","tableEmptyStateRenderer","headerDropdown","columnEditorConfig","icons","rowButtons","ref","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","enableColumnEditorInitOpen","enablePagination","onTableReady","hoverRowBackground","oddColumnBackground","oddEvenRowBackground"]),x=f(e);r.pruneRendererCaches(t.collectHeaderAccessors(x));const L=Object.assign(Object.assign({},B),{rows:t.asRows(n),columns:x.map(e=>p(e,r)),enableColumnEditor:y,enableColumnEditorInitOpen:P,enablePagination:j,onTableReady:T,hoverRowBackground:A,oddColumnBackground:I,oddEvenRowBackground:_,onRendererHostDiscard:r.disposeHost});if(O&&(L.onColumnOrderChange=e=>O(e)),E&&(L.onColumnWidthChange=e=>E(e)),S&&(L.onHeaderEdit=(e,r)=>S(e,r)),v&&(L.onColumnSelect=e=>v(e)),void 0!==i&&(L.footerRenderer=s(r,i)),void 0!==c)if(u(c))L.emptyStateRenderer=s(r,c);else{const e=c;L.emptyStateRenderer=()=>l(r,e)}if(void 0!==m)if(u(m))L.errorStateRenderer=s(r,m);else{const e=m;L.errorStateRenderer=()=>l(r,e)}if(void 0!==h)if(u(h))L.loadingStateRenderer=s(r,h);else{const e=h;L.loadingStateRenderer=()=>l(r,e)}return void 0!==g&&(L.tableEmptyStateRenderer=null===g?null:l(r,g)),void 0!==R&&(L.headerDropdown=s(r,R)),void 0!==b&&(L.columnEditorConfig=function(e,r){const{rowRenderer:t,customRenderer:n}=e,i=o(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},i),t?{rowRenderer:d(r,t)}:{}),n?{customRenderer:s(r,n)}:{})}(b,r)),void 0!==C&&(L.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:a(n));return r}(C)),void 0!==w&&(L.rowButtons=w.map(e=>s(r,e))),L}"function"==typeof SuppressedError&&SuppressedError;const h="data-st-mount-id";class g{constructor(){this.entries=new Map,this.nextId=0,this.cellRendererCache=new Map,this.headerRendererCache=new Map,this.disposeHost=e=>{if("function"!=typeof e.getAttribute)return;const r=[],t=e.getAttribute(h);null!==t&&r.push(t),e.querySelectorAll(`[${h}]`).forEach(e=>{const t=e.getAttribute(h);null!==t&&r.push(t)});for(const e of r){const r=this.entries.get(e);r&&(this.entries.delete(e),r())}}}register(e,r){const t="st-mount-"+this.nextId++;e.setAttribute(h,t),this.entries.set(t,r)}isRegistered(e){const r=e.getAttribute(h);return null!==r&&this.entries.has(r)}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear();for(const e of this.entries.values())e();this.entries.clear()}pruneRendererCaches(e){for(const r of this.cellRendererCache.keys())e.has(r)||this.cellRendererCache.delete(r);for(const r of this.headerRendererCache.keys())e.has(r)||this.headerRendererCache.delete(r)}get size(){return this.entries.size}}var R=e.template("<div>");Object.defineProperty(exports,"PIVOT_ACCESSOR_PREFIX",{enumerable:!0,get:function(){return t.PIVOT_ACCESSOR_PREFIX}}),Object.defineProperty(exports,"PIVOT_BLANK_LABEL",{enumerable:!0,get:function(){return t.PIVOT_BLANK_LABEL}}),Object.defineProperty(exports,"PIVOT_CHILDREN_KEY",{enumerable:!0,get:function(){return t.PIVOT_CHILDREN_KEY}}),Object.defineProperty(exports,"PIVOT_IS_TOTAL_KEY",{enumerable:!0,get:function(){return t.PIVOT_IS_TOTAL_KEY}}),Object.defineProperty(exports,"asRows",{enumerable:!0,get:function(){return t.asRows}}),Object.defineProperty(exports,"buildPivotAccessor",{enumerable:!0,get:function(){return t.buildPivotAccessor}}),Object.defineProperty(exports,"buildPivotRowTotalAccessor",{enumerable:!0,get:function(){return t.buildPivotRowTotalAccessor}}),Object.defineProperty(exports,"pivotRows",{enumerable:!0,get:function(){return t.pivotRows}}),exports.SimpleTable=function(n){let o,s=null;const i=new g;let c,d,l=!1,a=!1;function u(e){var r,t;s&&(e?null===(r=s.refitAutoSizeColumns)||void 0===r||r.call(s):!a&&i.size>0&&(a=!0,null===(t=s.refitAutoSizeColumns)||void 0===t||t.call(s)))}return r.onMount(()=>{s=new t.SimpleTableVanilla(o,m(n,i)),s.mount(),c=f(n),d=n.rows,l=Boolean(n.isLoading),u(!1),n.ref&&n.ref(s.getAPI())}),r.createEffect(()=>{if(!s)return;const e=m(n,i),r=Object.assign({},e),o=f(n),a=t.headersStructurallyEqual(c,o);c=o,a&&delete r.columns;const p=t.rowsShallowUnchanged(d,n.rows,n.getRowId);d=n.rows,p&&delete r.rows;const h=Boolean(n.isLoading),g=l&&!h;l=h,s.update(r),u(g)}),r.onCleanup(()=>{null==s||s.destroy(),s=null,c=void 0,d=void 0,i.clear()}),p=R(),"function"==typeof o?e.use(o,p):o=p,p;var p};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{render as e,createComponent as n,use as r,template as
|
|
1
|
+
import{render as e,createComponent as n,Dynamic as t,use as r,template as o}from"solid-js/web";import{createSignal as s,mergeProps as i,onMount as d,createEffect as c,onCleanup as l}from"solid-js";import{collectHeaderAccessors as a,asRows as u,SimpleTableVanilla as m,headersStructurallyEqual as f,rowsShallowUnchanged as h}from"simple-table-core";export{PIVOT_ACCESSOR_PREFIX,PIVOT_BLANK_LABEL,PIVOT_CHILDREN_KEY,PIVOT_IS_TOTAL_KEY,asRows,buildPivotAccessor,buildPivotRowTotalAccessor,pivotRows}from"simple-table-core";import{createStore as p,reconcile as R}from"solid-js/store";function g(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)n.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(t[r[o]]=e[r[o]])}return t}function b(t,r){return o=>{const s=document.createElement("div"),i=e(()=>n(r,o),s);return t.register(s,i),s}}function C(r,o,d){const c=document.createElement("div"),[l,a]=p(d),[u,m]=s(o()),f=e(()=>n(t,i(l,{get component(){return u()}})),c);return r.register(c,f),{host:c,setProps:e=>{m(()=>o()),a(R(e))}}}function w(t,r,o,s){const i="cell"===o?t.cellRendererCache:t.headerRendererCache,d=i.get(r);if(d)return d.component=s,d.wrapped;const c={component:s,wrapped:null};if("header"===o){let e=null,n=null;const o=r=>{if(e&&t.isRegistered(e)&&n)return n(r),e;const o=C(t,()=>c.component,r);return e=o.host,n=o.setProps,e};return c.wrapped=o,i.set(r,c),o}const l=r=>{const o=document.createElement("div"),s=e(()=>n(c.component,r),o);return t.register(o,s),o};return c.wrapped=l,i.set(r,c),l}function E(e,n){const t=new Map;return r=>{const o=String(r.accessor),s=t.get(o);if(s&&e.isRegistered(s.host))return s.setProps(r),s.host;const i=C(e,()=>n,r);return t.set(o,i),i.host}}function v(n,t){const r=document.createElement("div"),o=e(()=>t,r);return n.register(r,o),r}function S(n){const t=document.createElement("div"),r=e(()=>n,t),o=t.innerHTML;return r(),o}function O(e){return"function"==typeof e}function y(e,n){const{cellRenderer:t,headerRenderer:r,children:o,nestedTable:s}=e,i=g(e,["cellRenderer","headerRenderer","children","nestedTable"]),d=String(e.accessor),c=Object.assign({},i);if(t&&(c.cellRenderer=w(n,d,"cell",t)),r&&(c.headerRenderer=w(n,d,"header",r)),o&&(c.children=o.map(e=>y(e,n))),s){const e=Object.assign(Object.assign({},s),{rows:[]});c.nestedTable=P(e,n)}return c}function j(e){const n=e.columns;if(!n)throw new Error("SimpleTable requires `columns`");return n}function P(e,n){const{rows:t,footerRenderer:r,emptyStateRenderer:o,errorStateRenderer:s,loadingStateRenderer:i,tableEmptyStateRenderer:d,headerDropdown:c,columnEditorConfig:l,icons:m,rowButtons:f,onColumnOrderChange:h,onColumnWidthChange:p,onHeaderEdit:R,onColumnSelect:C,enableColumnEditor:w,enableColumnEditorInitOpen:P,enablePagination:B,onTableReady:T,hoverRowBackground:A,oddColumnBackground:I,oddEvenRowBackground:k}=e,H=g(e,["columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","tableEmptyStateRenderer","headerDropdown","columnEditorConfig","icons","rowButtons","ref","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","enableColumnEditorInitOpen","enablePagination","onTableReady","hoverRowBackground","oddColumnBackground","oddEvenRowBackground"]),L=j(e);n.pruneRendererCaches(a(L));const _=Object.assign(Object.assign({},H),{rows:u(t),columns:L.map(e=>y(e,n)),enableColumnEditor:w,enableColumnEditorInitOpen:P,enablePagination:B,onTableReady:T,hoverRowBackground:A,oddColumnBackground:I,oddEvenRowBackground:k,onRendererHostDiscard:n.disposeHost});if(h&&(_.onColumnOrderChange=e=>h(e)),p&&(_.onColumnWidthChange=e=>p(e)),R&&(_.onHeaderEdit=(e,n)=>R(e,n)),C&&(_.onColumnSelect=e=>C(e)),void 0!==r&&(_.footerRenderer=b(n,r)),void 0!==o)if(O(o))_.emptyStateRenderer=b(n,o);else{const e=o;_.emptyStateRenderer=()=>v(n,e)}if(void 0!==s)if(O(s))_.errorStateRenderer=b(n,s);else{const e=s;_.errorStateRenderer=()=>v(n,e)}if(void 0!==i)if(O(i))_.loadingStateRenderer=b(n,i);else{const e=i;_.loadingStateRenderer=()=>v(n,e)}return void 0!==d&&(_.tableEmptyStateRenderer=null===d?null:v(n,d)),void 0!==c&&(_.headerDropdown=b(n,c)),void 0!==l&&(_.columnEditorConfig=function(e,n){const{rowRenderer:t,customRenderer:r}=e,o=g(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),t?{rowRenderer:E(n,t)}:{}),r?{customRenderer:b(n,r)}:{})}(l,n)),void 0!==m&&(_.icons=function(e){const n={};for(const[t,r]of Object.entries(e))null!=r&&(n[t]="string"==typeof r||r instanceof HTMLElement||r instanceof SVGElement?r:S(r));return n}(m)),void 0!==f&&(_.rowButtons=f.map(e=>b(n,e))),_}"function"==typeof SuppressedError&&SuppressedError;const B="data-st-mount-id";class T{constructor(){this.entries=new Map,this.nextId=0,this.cellRendererCache=new Map,this.headerRendererCache=new Map,this.disposeHost=e=>{if("function"!=typeof e.getAttribute)return;const n=[],t=e.getAttribute(B);null!==t&&n.push(t),e.querySelectorAll(`[${B}]`).forEach(e=>{const t=e.getAttribute(B);null!==t&&n.push(t)});for(const e of n){const n=this.entries.get(e);n&&(this.entries.delete(e),n())}}}register(e,n){const t="st-mount-"+this.nextId++;e.setAttribute(B,t),this.entries.set(t,n)}isRegistered(e){const n=e.getAttribute(B);return null!==n&&this.entries.has(n)}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear();for(const e of this.entries.values())e();this.entries.clear()}pruneRendererCaches(e){for(const n of this.cellRendererCache.keys())e.has(n)||this.cellRendererCache.delete(n);for(const n of this.headerRendererCache.keys())e.has(n)||this.headerRendererCache.delete(n)}get size(){return this.entries.size}}var A=o("<div>");function I(e){let n,t=null;const o=new T;let s,i,a=!1,u=!1;function p(e){var n,r;t&&(e?null===(n=t.refitAutoSizeColumns)||void 0===n||n.call(t):!u&&o.size>0&&(u=!0,null===(r=t.refitAutoSizeColumns)||void 0===r||r.call(t)))}return d(()=>{t=new m(n,P(e,o)),t.mount(),s=j(e),i=e.rows,a=Boolean(e.isLoading),p(!1),e.ref&&e.ref(t.getAPI())}),c(()=>{if(!t)return;const n=P(e,o),r=Object.assign({},n),d=j(e),c=f(s,d);s=d,c&&delete r.columns;const l=h(i,e.rows,e.getRowId);i=e.rows,l&&delete r.rows;const u=Boolean(e.isLoading),m=a&&!u;a=u,t.update(r),p(m)}),l(()=>{null==t||t.destroy(),t=null,s=void 0,i=void 0,o.clear()}),R=A(),"function"==typeof n?r(n,R):n=R,R;var R}export{I as SimpleTable};
|
|
2
2
|
//# sourceMappingURL=index.es.js.map
|
|
@@ -8,6 +8,8 @@ export declare class MountRegistry {
|
|
|
8
8
|
readonly cellRendererCache: Map<string, CachedRendererSlot<unknown>>;
|
|
9
9
|
readonly headerRendererCache: Map<string, CachedRendererSlot<unknown>>;
|
|
10
10
|
register(container: HTMLElement, dispose: () => void): void;
|
|
11
|
+
/** True when `container` is a live registered mount host (not yet disposed). */
|
|
12
|
+
isRegistered(container: HTMLElement): boolean;
|
|
11
13
|
disposeHost: (host: HTMLElement) => void;
|
|
12
14
|
clear(): void;
|
|
13
15
|
pruneRendererCaches(liveAccessors: ReadonlySet<string>): void;
|
package/dist/types/types.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface TableInstance {
|
|
|
14
14
|
update(config: Partial<SimpleTableConfig>): void;
|
|
15
15
|
destroy(): void;
|
|
16
16
|
getAPI(): TableAPI;
|
|
17
|
+
/** Re-measure `width: "auto"` columns after custom renderer DOM settles. */
|
|
18
|
+
refitAutoSizeColumns?(): void;
|
|
17
19
|
}
|
|
18
20
|
export type SolidIconElement = JSX.Element;
|
|
19
21
|
export interface SolidIconsConfig {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Component } from "solid-js";
|
|
2
|
+
import type { ColumnEditorRowRendererProps as VanillaColumnEditorRowRendererProps, HeaderRendererProps as VanillaHeaderRendererProps } from "simple-table-core";
|
|
2
3
|
import type { MountRegistry } from "../MountRegistry";
|
|
3
4
|
/**
|
|
4
5
|
* Wraps a Solid component into a function that returns an HTMLElement, matching
|
|
@@ -9,11 +10,27 @@ import type { MountRegistry } from "../MountRegistry";
|
|
|
9
10
|
* down the reactive tree (and any portal / floating UI) when the host is discarded.
|
|
10
11
|
*/
|
|
11
12
|
export declare function wrapSolidRenderer<P extends object>(registry: MountRegistry, component: Component<P>): (props: P) => HTMLElement;
|
|
13
|
+
/**
|
|
14
|
+
* Header renderer wrapper that reuses one host element so sort/filter icon
|
|
15
|
+
* refreshes update props in place (via a reactive props store) instead of
|
|
16
|
+
* remounting the Solid subtree and wiping local state. Mirrors Vue's
|
|
17
|
+
* {@link wrapVueHeaderRenderer} / React's {@link wrapReactHeaderRenderer}.
|
|
18
|
+
*/
|
|
19
|
+
export declare function wrapSolidHeaderRenderer(registry: MountRegistry, component: Component<VanillaHeaderRendererProps>): (props: VanillaHeaderRendererProps) => HTMLElement;
|
|
12
20
|
/**
|
|
13
21
|
* Like {@link wrapSolidRenderer}, but reuses one wrapper per accessor so
|
|
14
22
|
* unstable column rebuilds keep a stable function identity on ColumnDef.
|
|
23
|
+
*
|
|
24
|
+
* For `kind: "header"`, also reuses a single mount host (Vue
|
|
25
|
+
* {@link wrapCachedVueRenderer} / React {@link wrapCachedHeaderRenderer}) so
|
|
26
|
+
* sort/filter refreshes preserve state.
|
|
15
27
|
*/
|
|
16
28
|
export declare function wrapCachedSolidRenderer<P extends object>(registry: MountRegistry, accessor: string, kind: "cell" | "header", component: Component<P>): (props: P) => HTMLElement;
|
|
29
|
+
/**
|
|
30
|
+
* Column-editor row renderer: one host per `accessor` so popout list rebuilds
|
|
31
|
+
* update in place instead of remounting Solid state (mirrors Vue/React).
|
|
32
|
+
*/
|
|
33
|
+
export declare function wrapSolidColumnEditorRowRenderer(registry: MountRegistry, component: Component<VanillaColumnEditorRowRendererProps>): (props: VanillaColumnEditorRowRendererProps) => HTMLElement;
|
|
17
34
|
/**
|
|
18
35
|
* Renders a static Solid JSX node (already evaluated) into an HTMLElement.
|
|
19
36
|
* Used for props like tableEmptyStateRenderer that are not called with arguments.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simple-table/solid",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.5",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"module": "dist/index.es.js",
|
|
6
6
|
"types": "dist/types/index.d.ts",
|
|
@@ -32,13 +32,14 @@
|
|
|
32
32
|
"solid-js": ">=1.0.0"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"simple-table-core": "4.1.
|
|
35
|
+
"simple-table-core": "4.1.5"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@babel/preset-typescript": "^7.28.5",
|
|
39
39
|
"@rollup/plugin-alias": "4.0.0",
|
|
40
40
|
"@rollup/plugin-babel": "^6.0.0",
|
|
41
41
|
"@rollup/plugin-node-resolve": "^15.3.0",
|
|
42
|
+
"@testing-library/jest-dom": "^6.5.0",
|
|
42
43
|
"babel-preset-solid": "^1.8.0",
|
|
43
44
|
"jsdom": "^24.1.3",
|
|
44
45
|
"rollup": "^2.79.2",
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
"solid-js": "^1.8.0",
|
|
50
51
|
"tslib": "^2.8.1",
|
|
51
52
|
"typescript": "^5.0.0",
|
|
53
|
+
"vite-plugin-solid": "^2.11.11",
|
|
52
54
|
"vitest": "^2.1.9"
|
|
53
55
|
},
|
|
54
56
|
"description": "Solid.js adapter for simple-table-core — use the Simple Table data grid with full Solid component support for renderers.",
|