@simple-table/svelte 4.0.1 → 4.0.2

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}),require("svelte/internal/disclose-version"),require("svelte/internal/flags/legacy");var e=require("svelte/internal/client"),t=require("svelte"),r=require("simple-table-core");function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}var o=n(e);function s(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}function c(e,r){return n=>{const o=document.createElement("div"),s=t.mount(r,{target:o,props:n});return e.register(o,()=>{t.unmount(s)}),o}}function i(e,r,n,o){const s="cell"===n?e.cellRendererCache:e.headerRendererCache,c=s.get(r);if(c)return c.component=o,c.wrapped;const i={component:o,wrapped:null},a=r=>{const n=document.createElement("div"),o=t.mount(i.component,{target:n,props:r});return e.register(n,()=>{t.unmount(o)}),n};return i.wrapped=a,s.set(r,i),a}function a(e,r={}){const n=document.createElement("div"),o=t.mount(e,{target:n,props:r}),s=n.innerHTML;return t.unmount(o),s}function l(e){return"function"==typeof e}function d(e,t){const{cellRenderer:r,headerRenderer:n,children:o,nestedTable:c}=e,a=s(e,["cellRenderer","headerRenderer","children","nestedTable"]),l=String(e.accessor),p=Object.assign({},a);if(r&&(p.cellRenderer="function"==typeof r&&r.length>=2?i(t,l,"cell",r):r),n&&(p.headerRenderer="function"==typeof n&&n.length>=2?i(t,l,"header",n):n),o&&(p.children=o.map(e=>d(e,t))),c){const e=Object.assign(Object.assign({},c),{rows:[]});p.nestedTable=u(e,t)}return p}function u(e,n){const{defaultHeaders:o,rows:i,footerRenderer:u,emptyStateRenderer:p,errorStateRenderer:f,loadingStateRenderer:g,headerDropdown:h,columnEditorConfig:m,icons:b,tableEmptyStateRenderer:O,rowButtons:R,onColumnOrderChange:y,onColumnWidthChange:v,onHeaderEdit:_,onColumnSelect:w}=e,C=s(e,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect"]);n.pruneRendererCaches(r.collectHeaderAccessors(o));const E=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},C),{rows:i,defaultHeaders:o.map(e=>d(e,n)),onRendererHostDiscard:n.disposeHost}),y?{onColumnOrderChange:e=>y(e)}:{}),v?{onColumnWidthChange:e=>v(e)}:{}),_?{onHeaderEdit:(e,t)=>_(e,t)}:{}),w?{onColumnSelect:e=>w(e)}:{});return void 0!==O&&(null===O?E.tableEmptyStateRenderer=null:"string"==typeof O||O instanceof HTMLElement?E.tableEmptyStateRenderer=O:l(O)&&(E.tableEmptyStateRenderer=function(e,r){const n=document.createElement("div"),o=t.mount(r,{target:n,props:{}});return e.register(n,()=>{t.unmount(o)}),n}(n,O))),void 0!==u&&(E.footerRenderer="function"==typeof u&&u.length>=2?c(n,u):u),void 0!==p&&(E.emptyStateRenderer="function"==typeof p&&p.length>=2?c(n,p):p),void 0!==f&&(E.errorStateRenderer="function"==typeof f&&f.length>=2?c(n,f):f),void 0!==g&&(E.loadingStateRenderer="function"==typeof g&&g.length>=2?c(n,g):g),void 0!==h&&(E.headerDropdown=c(n,h)),void 0!==m&&(E.columnEditorConfig=function(e,t){const{rowRenderer:r,customRenderer:n}=e,o=s(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),r?{rowRenderer:c(t,r)}:{}),n?{customRenderer:c(t,n)}:{})}(m,n)),void 0!==b&&(E.icons=function(e){const t={};for(const[r,n]of Object.entries(e))null!=n&&("string"==typeof n||n instanceof HTMLElement||n instanceof SVGElement?t[r]=n:l(n)&&(t[r]=a(n,{})));return t}(b)),void 0!==R&&(E.rowButtons=R.map(e=>c(n,e))),E}"function"==typeof SuppressedError&&SuppressedError;const p="data-st-mount-id";class f{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 t=[],r=e.getAttribute(p);null!==r&&t.push(r),e.querySelectorAll(`[${p}]`).forEach(e=>{const r=e.getAttribute(p);null!==r&&t.push(r)});for(const e of t){const t=this.entries.get(e);t&&(this.entries.delete(e),t())}}}register(e,t){const r="st-mount-"+this.nextId++;e.setAttribute(p,r),this.entries.set(r,t)}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear();for(const e of this.entries.values())e();this.entries.clear()}pruneRendererCaches(e){for(const t of this.cellRendererCache.keys())e.has(t)||this.cellRendererCache.delete(t);for(const t of this.headerRendererCache.keys())e.has(t)||this.headerRendererCache.delete(t)}get size(){return this.entries.size}}var g=o.from_html("<div></div>");Object.defineProperty(exports,"PIVOT_ACCESSOR_PREFIX",{enumerable:!0,get:function(){return r.PIVOT_ACCESSOR_PREFIX}}),Object.defineProperty(exports,"PIVOT_BLANK_LABEL",{enumerable:!0,get:function(){return r.PIVOT_BLANK_LABEL}}),Object.defineProperty(exports,"PIVOT_CHILDREN_KEY",{enumerable:!0,get:function(){return r.PIVOT_CHILDREN_KEY}}),Object.defineProperty(exports,"PIVOT_IS_TOTAL_KEY",{enumerable:!0,get:function(){return r.PIVOT_IS_TOTAL_KEY}}),Object.defineProperty(exports,"asRows",{enumerable:!0,get:function(){return r.asRows}}),Object.defineProperty(exports,"buildPivotAccessor",{enumerable:!0,get:function(){return r.buildPivotAccessor}}),Object.defineProperty(exports,"buildPivotRowTotalAccessor",{enumerable:!0,get:function(){return r.buildPivotRowTotalAccessor}}),Object.defineProperty(exports,"pivotRows",{enumerable:!0,get:function(){return r.pivotRows}}),exports.SimpleTable=function(e,n){const s=o.legacy_rest_props(n,["children","$$slots","$$events","$$legacy"]),c=o.legacy_rest_props(s,["getAPI","rows","defaultHeaders"]);o.push(n,!1);let i=o.prop(n,"rows",8),a=o.prop(n,"defaultHeaders",8),l=o.mutable_source(),d=o.mutable_source(null);const p=new f;let h=o.mutable_source(void 0),m=o.mutable_source(void 0);function b(){var e;return null!==(e=null===o.get(d)||void 0===o.get(d)?void 0:o.get(d).getAPI())&&void 0!==e?e:null}t.onMount(()=>{const e=Object.assign({rows:i(),defaultHeaders:a()},c);o.set(d,new r.SimpleTableVanilla(o.get(l),u(e,p))),o.get(d).mount(),o.set(h,a()),o.set(m,i())}),t.onDestroy(()=>{null===o.get(d)||void 0===o.get(d)||o.get(d).destroy(),o.set(d,null),o.set(h,void 0),o.set(m,void 0),p.clear()}),o.legacy_pre_effect(()=>(o.get(d),o.deep_read_state(i()),o.deep_read_state(a()),o.deep_read_state(c),o.get(h),o.get(m)),()=>{if(o.get(d)){const e=Object.assign({rows:i(),defaultHeaders:a()},c),t=u(e,p),n=Object.assign({},t),s=r.headersStructurallyEqual(o.get(h),a());o.set(h,a()),s&&delete n.defaultHeaders;const l=r.rowsShallowUnchanged(o.get(m),i(),e.getRowId);o.set(m,i()),l&&delete n.rows,o.get(d).update(n)}}),o.legacy_pre_effect_reset();var O={getAPI:b};o.init();var R=g();return o.bind_this(R,e=>o.set(l,e),()=>o.get(l)),o.append(e,R),o.bind_prop(n,"getAPI",b),o.pop(O)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("svelte/internal/disclose-version"),require("svelte/internal/flags/legacy");var e=require("svelte/internal/client"),t=require("svelte"),n=require("simple-table-core");function r(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,Object.freeze(t)}var o=r(e);function s(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function d(e,n){return r=>{const o=document.createElement("div"),s=t.mount(n,{target:o,props:r});return e.register(o,()=>{t.unmount(s)}),o}}function a(e,n,r,o){const s="cell"===r?e.cellRendererCache:e.headerRendererCache,d=s.get(n);if(d)return d.component=o,d.wrapped;const a={component:o,wrapped:null},l=n=>{const r=document.createElement("div"),o=t.mount(a.component,{target:r,props:n});return e.register(r,()=>{t.unmount(o)}),r};return a.wrapped=l,s.set(n,a),l}function l(e,n={}){const r=document.createElement("div"),o=t.mount(e,{target:r,props:n}),s=r.innerHTML;return t.unmount(o),s}function u(e){return"function"==typeof e}function i(e,t){const{cellRenderer:n,headerRenderer:r,children:o,nestedTable:d}=e,l=s(e,["cellRenderer","headerRenderer","children","nestedTable"]),u=String(e.accessor),c=Object.assign({},l);if(n&&(c.cellRenderer="function"==typeof n&&n.length>=2?a(t,u,"cell",n):n),r&&(c.headerRenderer="function"==typeof r&&r.length>=2?a(t,u,"header",r):r),o&&(c.children=o.map(e=>i(e,t))),d){const e=Object.assign(Object.assign({},d),{rows:[]});c.nestedTable=p(e,t)}return c}function c(e){var t;const n=null!==(t=e.columns)&&void 0!==t?t:e.defaultHeaders;if(!n)throw new Error("SimpleTable requires `columns` or `defaultHeaders`");return n}function p(e,r){const{rows:o,footerRenderer:a,emptyStateRenderer:p,errorStateRenderer:g,loadingStateRenderer:f,headerDropdown:m,columnEditorConfig:h,icons:b,tableEmptyStateRenderer:R,rowButtons:O,onColumnOrderChange:v,onColumnWidthChange:y,onHeaderEdit:w,onColumnSelect:C,enableColumnEditor:E,editColumns:_,enableColumnEditorInitOpen:P,editColumnsInitOpen:S,enablePagination:j,shouldPaginate:I,onTableReady:T,onGridReady:H,hoverRowBackground:A,useHoverRowBackground:B,oddColumnBackground:k,useOddColumnBackground:x,oddEvenRowBackground:L,useOddEvenRowBackground:V}=e,M=s(e,["defaultHeaders","columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","editColumns","enableColumnEditorInitOpen","editColumnsInitOpen","enablePagination","shouldPaginate","onTableReady","onGridReady","hoverRowBackground","useHoverRowBackground","oddColumnBackground","useOddColumnBackground","oddEvenRowBackground","useOddEvenRowBackground"]),q=c(e);r.pruneRendererCaches(n.collectHeaderAccessors(q));const D=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},M),{rows:o,defaultHeaders:q.map(e=>i(e,r)),editColumns:null!=E?E:_,editColumnsInitOpen:null!=P?P:S,shouldPaginate:null!=j?j:I,onGridReady:null!=T?T:H,useHoverRowBackground:null!=A?A:B,useOddColumnBackground:null!=k?k:x,useOddEvenRowBackground:null!=L?L:V,onRendererHostDiscard:r.disposeHost}),v?{onColumnOrderChange:e=>v(e)}:{}),y?{onColumnWidthChange:e=>y(e)}:{}),w?{onHeaderEdit:(e,t)=>w(e,t)}:{}),C?{onColumnSelect:e=>C(e)}:{});return void 0!==R&&(null===R?D.tableEmptyStateRenderer=null:"string"==typeof R||R instanceof HTMLElement?D.tableEmptyStateRenderer=R:u(R)&&(D.tableEmptyStateRenderer=function(e,n){const r=document.createElement("div"),o=t.mount(n,{target:r,props:{}});return e.register(r,()=>{t.unmount(o)}),r}(r,R))),void 0!==a&&(D.footerRenderer="function"==typeof a&&a.length>=2?d(r,a):a),void 0!==p&&(D.emptyStateRenderer="function"==typeof p&&p.length>=2?d(r,p):p),void 0!==g&&(D.errorStateRenderer="function"==typeof g&&g.length>=2?d(r,g):g),void 0!==f&&(D.loadingStateRenderer="function"==typeof f&&f.length>=2?d(r,f):f),void 0!==m&&(D.headerDropdown=d(r,m)),void 0!==h&&(D.columnEditorConfig=function(e,t){const{rowRenderer:n,customRenderer:r}=e,o=s(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),n?{rowRenderer:d(t,n)}:{}),r?{customRenderer:d(t,r)}:{})}(h,r)),void 0!==b&&(D.icons=function(e){const t={};for(const[n,r]of Object.entries(e))null!=r&&("string"==typeof r||r instanceof HTMLElement||r instanceof SVGElement?t[n]=r:u(r)&&(t[n]=l(r,{})));return t}(b)),void 0!==O&&(D.rowButtons=O.map(e=>d(r,e))),D}"function"==typeof SuppressedError&&SuppressedError;const g="data-st-mount-id";class f{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 t=[],n=e.getAttribute(g);null!==n&&t.push(n),e.querySelectorAll(`[${g}]`).forEach(e=>{const n=e.getAttribute(g);null!==n&&t.push(n)});for(const e of t){const t=this.entries.get(e);t&&(this.entries.delete(e),t())}}}register(e,t){const n="st-mount-"+this.nextId++;e.setAttribute(g,n),this.entries.set(n,t)}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear();for(const e of this.entries.values())e();this.entries.clear()}pruneRendererCaches(e){for(const t of this.cellRendererCache.keys())e.has(t)||this.cellRendererCache.delete(t);for(const t of this.headerRendererCache.keys())e.has(t)||this.headerRendererCache.delete(t)}get size(){return this.entries.size}}var m=o.from_html("<div></div>");Object.defineProperty(exports,"PIVOT_ACCESSOR_PREFIX",{enumerable:!0,get:function(){return n.PIVOT_ACCESSOR_PREFIX}}),Object.defineProperty(exports,"PIVOT_BLANK_LABEL",{enumerable:!0,get:function(){return n.PIVOT_BLANK_LABEL}}),Object.defineProperty(exports,"PIVOT_CHILDREN_KEY",{enumerable:!0,get:function(){return n.PIVOT_CHILDREN_KEY}}),Object.defineProperty(exports,"PIVOT_IS_TOTAL_KEY",{enumerable:!0,get:function(){return n.PIVOT_IS_TOTAL_KEY}}),Object.defineProperty(exports,"asRows",{enumerable:!0,get:function(){return n.asRows}}),Object.defineProperty(exports,"buildPivotAccessor",{enumerable:!0,get:function(){return n.buildPivotAccessor}}),Object.defineProperty(exports,"buildPivotRowTotalAccessor",{enumerable:!0,get:function(){return n.buildPivotRowTotalAccessor}}),Object.defineProperty(exports,"pivotRows",{enumerable:!0,get:function(){return n.pivotRows}}),exports.SimpleTable=function(e,r){const s=o.legacy_rest_props(r,["children","$$slots","$$events","$$legacy"]),d=o.legacy_rest_props(s,["getAPI","rows","defaultHeaders","columns"]);o.push(r,!1);let a=o.prop(r,"rows",8),l=o.prop(r,"defaultHeaders",8,void 0),u=o.prop(r,"columns",8,void 0),i=o.mutable_source(),g=o.mutable_source(null);const h=new f;let b=o.mutable_source(void 0),R=o.mutable_source(void 0);function O(){var e;return null!==(e=null===o.get(g)||void 0===o.get(g)?void 0:o.get(g).getAPI())&&void 0!==e?e:null}t.onMount(()=>{const e=Object.assign({rows:a(),defaultHeaders:l(),columns:u()},d);o.set(g,new n.SimpleTableVanilla(o.get(i),p(e,h))),o.get(g).mount(),o.set(b,c(e)),o.set(R,a())}),t.onDestroy(()=>{null===o.get(g)||void 0===o.get(g)||o.get(g).destroy(),o.set(g,null),o.set(b,void 0),o.set(R,void 0),h.clear()}),o.legacy_pre_effect(()=>(o.get(g),o.deep_read_state(a()),o.deep_read_state(l()),o.deep_read_state(u()),o.deep_read_state(d),o.get(b),o.get(R)),()=>{if(o.get(g)){const e=Object.assign({rows:a(),defaultHeaders:l(),columns:u()},d),t=p(e,h),r=Object.assign({},t),s=c(e),i=n.headersStructurallyEqual(o.get(b),s);o.set(b,s),i&&delete r.defaultHeaders;const f=n.rowsShallowUnchanged(o.get(R),a(),e.getRowId);o.set(R,a()),f&&delete r.rows,o.get(g).update(r)}}),o.legacy_pre_effect_reset();var v={getAPI:O};o.init();var y=m();return o.bind_this(y,e=>o.set(i,e),()=>o.get(i)),o.append(e,y),o.bind_prop(r,"getAPI",O),o.pop(v)};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/SimpleTable.svelte"],"sourcesContent":["<script lang=\"ts\">\n import { onMount, onDestroy } from \"svelte\";\n import {\n SimpleTableVanilla,\n headersStructurallyEqual,\n rowsShallowUnchanged,\n } from \"simple-table-core\";\n import type { SimpleTableConfig, TableAPI } from \"simple-table-core\";\n import { buildVanillaConfig } from \"./buildVanillaConfig\";\n import { MountRegistry } from \"./MountRegistry\";\n import type { SimpleTableSvelteProps, TableInstance } from \"./types\";\n\n // SimpleTable — Svelte adapter for simple-table-core.\n // Accepts the same props as SimpleTableProps with Svelte component types for renderers.\n // Use bind:this={tableRef} to access the TableAPI: tableRef.getAPI()?.sort(...)\n\n type $$Props = SimpleTableSvelteProps;\n\n export let rows: $$Props[\"rows\"];\n export let defaultHeaders: $$Props[\"defaultHeaders\"];\n\n // All remaining optional props — spread via $$restProps\n let container: HTMLDivElement;\n let instance: TableInstance | null = null;\n const registry = new MountRegistry();\n\n /** Last headers/rows whose structure/content was applied via update. */\n let syncedDefaultHeaders: $$Props[\"defaultHeaders\"] | undefined = undefined;\n let syncedRows: $$Props[\"rows\"] | undefined = undefined;\n\n onMount(() => {\n const props = { rows, defaultHeaders, ...$$restProps } as SimpleTableSvelteProps;\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, registry),\n ) as unknown as TableInstance;\n instance.mount();\n syncedDefaultHeaders = defaultHeaders;\n syncedRows = rows;\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n syncedDefaultHeaders = undefined;\n syncedRows = undefined;\n registry.clear();\n });\n\n // Reactive update: skip no-op defaultHeaders/rows when structure/content is unchanged.\n $: if (instance) {\n const props = { rows, defaultHeaders, ...$$restProps } as SimpleTableSvelteProps;\n const fullConfig = buildVanillaConfig(props, registry);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n\n const headersUnchanged = headersStructurallyEqual(syncedDefaultHeaders, defaultHeaders);\n syncedDefaultHeaders = defaultHeaders;\n if (headersUnchanged) {\n delete patch.defaultHeaders;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n syncedRows as ReadonlyArray<object> | undefined,\n rows as ReadonlyArray<object>,\n props.getRowId,\n );\n syncedRows = rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n instance.update(patch);\n }\n\n /** Expose the TableAPI for consumers using bind:this. */\n export function getAPI(): TableAPI | null {\n return instance?.getAPI() ?? null;\n }\n</script>\n\n<div bind:this={container}></div>\n"],"names":["div","root","$$value","$","set","container","get"],"mappings":"g+NAgFCA,EAAGC,uBAAHD,EAAGE,GAAAC,EAAAC,IAAYC,EAASH,GAAA,IAAAC,EAAAG,IAATD,eAAfL,qCAFO"}
1
+ {"version":3,"file":"index.js","sources":["../../src/SimpleTable.svelte"],"sourcesContent":["<script lang=\"ts\">\n import { onMount, onDestroy } from \"svelte\";\n import {\n SimpleTableVanilla,\n headersStructurallyEqual,\n rowsShallowUnchanged,\n } from \"simple-table-core\";\n import type { SimpleTableConfig, TableAPI } from \"simple-table-core\";\n import { buildVanillaConfig, resolveSvelteColumns } from \"./buildVanillaConfig\";\n import { MountRegistry } from \"./MountRegistry\";\n import type { SimpleTableSvelteProps, TableInstance } from \"./types\";\n\n // SimpleTable — Svelte adapter for simple-table-core.\n // Accepts the same props as SimpleTableProps with Svelte component types for renderers.\n // Use bind:this={tableRef} to access the TableAPI: tableRef.getAPI()?.sort(...)\n\n type $$Props = SimpleTableSvelteProps;\n\n export let rows: $$Props[\"rows\"];\n export let defaultHeaders: $$Props[\"defaultHeaders\"] = undefined;\n export let columns: $$Props[\"columns\"] = undefined;\n\n // All remaining optional props — spread via $$restProps\n let container: HTMLDivElement;\n let instance: TableInstance | null = null;\n const registry = new MountRegistry();\n\n /** Last headers/rows whose structure/content was applied via update. */\n let syncedDefaultHeaders: ReadonlyArray<\n NonNullable<$$Props[\"columns\"]>[number]\n > | undefined = undefined;\n let syncedRows: $$Props[\"rows\"] | undefined = undefined;\n\n onMount(() => {\n const props = { rows, defaultHeaders, columns, ...$$restProps } as SimpleTableSvelteProps;\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, registry),\n ) as unknown as TableInstance;\n instance.mount();\n syncedDefaultHeaders = resolveSvelteColumns(props);\n syncedRows = rows;\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n syncedDefaultHeaders = undefined;\n syncedRows = undefined;\n registry.clear();\n });\n\n // Reactive update: skip no-op columns/rows when structure/content is unchanged.\n $: if (instance) {\n const props = { rows, defaultHeaders, columns, ...$$restProps } as SimpleTableSvelteProps;\n const fullConfig = buildVanillaConfig(props, registry);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n const resolvedColumns = resolveSvelteColumns(props);\n\n const headersUnchanged = headersStructurallyEqual(syncedDefaultHeaders, resolvedColumns);\n syncedDefaultHeaders = resolvedColumns;\n if (headersUnchanged) {\n delete patch.defaultHeaders;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n syncedRows as ReadonlyArray<object> | undefined,\n rows as ReadonlyArray<object>,\n props.getRowId,\n );\n syncedRows = rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n instance.update(patch);\n }\n\n /** Expose the TableAPI for consumers using bind:this. */\n export function getAPI(): TableAPI | null {\n return instance?.getAPI() ?? null;\n }\n</script>\n\n<div bind:this={container}></div>\n"],"names":["div","root","$$value","$","set","container","get"],"mappings":"ogQAoFCA,EAAGC,uBAAHD,EAAGE,GAAAC,EAAAC,IAAYC,EAASH,GAAA,IAAAC,EAAAG,IAATD,eAAfL,qCAFO"}
package/dist/index.es.js CHANGED
@@ -1,2 +1,2 @@
1
- import"svelte/internal/disclose-version";import"svelte/internal/flags/legacy";import*as e from"svelte/internal/client";import{mount as t,unmount as r,onMount as n,onDestroy as o}from"svelte";import{collectHeaderAccessors as s,SimpleTableVanilla as a,headersStructurallyEqual as i,rowsShallowUnchanged as d}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";function c(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}function l(e,n){return o=>{const s=document.createElement("div"),a=t(n,{target:s,props:o});return e.register(s,()=>{r(a)}),s}}function u(e,n,o,s){const a="cell"===o?e.cellRendererCache:e.headerRendererCache,i=a.get(n);if(i)return i.component=s,i.wrapped;const d={component:s,wrapped:null},c=n=>{const o=document.createElement("div"),s=t(d.component,{target:o,props:n});return e.register(o,()=>{r(s)}),o};return d.wrapped=c,a.set(n,d),c}function p(e,n={}){const o=document.createElement("div"),s=t(e,{target:o,props:n}),a=o.innerHTML;return r(s),a}function f(e){return"function"==typeof e}function g(e,t){const{cellRenderer:r,headerRenderer:n,children:o,nestedTable:s}=e,a=c(e,["cellRenderer","headerRenderer","children","nestedTable"]),i=String(e.accessor),d=Object.assign({},a);if(r&&(d.cellRenderer="function"==typeof r&&r.length>=2?u(t,i,"cell",r):r),n&&(d.headerRenderer="function"==typeof n&&n.length>=2?u(t,i,"header",n):n),o&&(d.children=o.map(e=>g(e,t))),s){const e=Object.assign(Object.assign({},s),{rows:[]});d.nestedTable=h(e,t)}return d}function h(e,n){const{defaultHeaders:o,rows:a,footerRenderer:i,emptyStateRenderer:d,errorStateRenderer:u,loadingStateRenderer:h,headerDropdown:m,columnEditorConfig:R,icons:b,tableEmptyStateRenderer:v,rowButtons:y,onColumnOrderChange:O,onColumnWidthChange:w,onHeaderEdit:C,onColumnSelect:_}=e,E=c(e,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect"]);n.pruneRendererCaches(s(o));const S=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},E),{rows:a,defaultHeaders:o.map(e=>g(e,n)),onRendererHostDiscard:n.disposeHost}),O?{onColumnOrderChange:e=>O(e)}:{}),w?{onColumnWidthChange:e=>w(e)}:{}),C?{onHeaderEdit:(e,t)=>C(e,t)}:{}),_?{onColumnSelect:e=>_(e)}:{});return void 0!==v&&(null===v?S.tableEmptyStateRenderer=null:"string"==typeof v||v instanceof HTMLElement?S.tableEmptyStateRenderer=v:f(v)&&(S.tableEmptyStateRenderer=function(e,n){const o=document.createElement("div"),s=t(n,{target:o,props:{}});return e.register(o,()=>{r(s)}),o}(n,v))),void 0!==i&&(S.footerRenderer="function"==typeof i&&i.length>=2?l(n,i):i),void 0!==d&&(S.emptyStateRenderer="function"==typeof d&&d.length>=2?l(n,d):d),void 0!==u&&(S.errorStateRenderer="function"==typeof u&&u.length>=2?l(n,u):u),void 0!==h&&(S.loadingStateRenderer="function"==typeof h&&h.length>=2?l(n,h):h),void 0!==m&&(S.headerDropdown=l(n,m)),void 0!==R&&(S.columnEditorConfig=function(e,t){const{rowRenderer:r,customRenderer:n}=e,o=c(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),r?{rowRenderer:l(t,r)}:{}),n?{customRenderer:l(t,n)}:{})}(R,n)),void 0!==b&&(S.icons=function(e){const t={};for(const[r,n]of Object.entries(e))null!=n&&("string"==typeof n||n instanceof HTMLElement||n instanceof SVGElement?t[r]=n:f(n)&&(t[r]=p(n,{})));return t}(b)),void 0!==y&&(S.rowButtons=y.map(e=>l(n,e))),S}"function"==typeof SuppressedError&&SuppressedError;const m="data-st-mount-id";class R{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 t=[],r=e.getAttribute(m);null!==r&&t.push(r),e.querySelectorAll(`[${m}]`).forEach(e=>{const r=e.getAttribute(m);null!==r&&t.push(r)});for(const e of t){const t=this.entries.get(e);t&&(this.entries.delete(e),t())}}}register(e,t){const r="st-mount-"+this.nextId++;e.setAttribute(m,r),this.entries.set(r,t)}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear();for(const e of this.entries.values())e();this.entries.clear()}pruneRendererCaches(e){for(const t of this.cellRendererCache.keys())e.has(t)||this.cellRendererCache.delete(t);for(const t of this.headerRendererCache.keys())e.has(t)||this.headerRendererCache.delete(t)}get size(){return this.entries.size}}var b=e.from_html("<div></div>");function v(t,r){const s=e.legacy_rest_props(r,["children","$$slots","$$events","$$legacy"]),c=e.legacy_rest_props(s,["getAPI","rows","defaultHeaders"]);e.push(r,!1);let l=e.prop(r,"rows",8),u=e.prop(r,"defaultHeaders",8),p=e.mutable_source(),f=e.mutable_source(null);const g=new R;let m=e.mutable_source(void 0),v=e.mutable_source(void 0);function y(){var t;return null!==(t=null===e.get(f)||void 0===e.get(f)?void 0:e.get(f).getAPI())&&void 0!==t?t:null}n(()=>{const t=Object.assign({rows:l(),defaultHeaders:u()},c);e.set(f,new a(e.get(p),h(t,g))),e.get(f).mount(),e.set(m,u()),e.set(v,l())}),o(()=>{null===e.get(f)||void 0===e.get(f)||e.get(f).destroy(),e.set(f,null),e.set(m,void 0),e.set(v,void 0),g.clear()}),e.legacy_pre_effect(()=>(e.get(f),e.deep_read_state(l()),e.deep_read_state(u()),e.deep_read_state(c),e.get(m),e.get(v)),()=>{if(e.get(f)){const t=Object.assign({rows:l(),defaultHeaders:u()},c),r=h(t,g),n=Object.assign({},r),o=i(e.get(m),u());e.set(m,u()),o&&delete n.defaultHeaders;const s=d(e.get(v),l(),t.getRowId);e.set(v,l()),s&&delete n.rows,e.get(f).update(n)}}),e.legacy_pre_effect_reset();var O={getAPI:y};e.init();var w=b();return e.bind_this(w,t=>e.set(p,t),()=>e.get(p)),e.append(t,w),e.bind_prop(r,"getAPI",y),e.pop(O)}export{v as SimpleTable};
1
+ import"svelte/internal/disclose-version";import"svelte/internal/flags/legacy";import*as e from"svelte/internal/client";import{mount as t,unmount as n,onMount as r,onDestroy as o}from"svelte";import{collectHeaderAccessors as s,SimpleTableVanilla as d,headersStructurallyEqual as a,rowsShallowUnchanged as l}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";function i(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function c(e,r){return o=>{const s=document.createElement("div"),d=t(r,{target:s,props:o});return e.register(s,()=>{n(d)}),s}}function u(e,r,o,s){const d="cell"===o?e.cellRendererCache:e.headerRendererCache,a=d.get(r);if(a)return a.component=s,a.wrapped;const l={component:s,wrapped:null},i=r=>{const o=document.createElement("div"),s=t(l.component,{target:o,props:r});return e.register(o,()=>{n(s)}),o};return l.wrapped=i,d.set(r,l),i}function p(e,r={}){const o=document.createElement("div"),s=t(e,{target:o,props:r}),d=o.innerHTML;return n(s),d}function g(e){return"function"==typeof e}function m(e,t){const{cellRenderer:n,headerRenderer:r,children:o,nestedTable:s}=e,d=i(e,["cellRenderer","headerRenderer","children","nestedTable"]),a=String(e.accessor),l=Object.assign({},d);if(n&&(l.cellRenderer="function"==typeof n&&n.length>=2?u(t,a,"cell",n):n),r&&(l.headerRenderer="function"==typeof r&&r.length>=2?u(t,a,"header",r):r),o&&(l.children=o.map(e=>m(e,t))),s){const e=Object.assign(Object.assign({},s),{rows:[]});l.nestedTable=h(e,t)}return l}function f(e){var t;const n=null!==(t=e.columns)&&void 0!==t?t:e.defaultHeaders;if(!n)throw new Error("SimpleTable requires `columns` or `defaultHeaders`");return n}function h(e,r){const{rows:o,footerRenderer:d,emptyStateRenderer:a,errorStateRenderer:l,loadingStateRenderer:u,headerDropdown:h,columnEditorConfig:R,icons:b,tableEmptyStateRenderer:v,rowButtons:C,onColumnOrderChange:w,onColumnWidthChange:O,onHeaderEdit:y,onColumnSelect:E,enableColumnEditor:_,editColumns:S,enableColumnEditorInitOpen:H,editColumnsInitOpen:j,enablePagination:B,shouldPaginate:I,onTableReady:P,onGridReady:k,hoverRowBackground:T,useHoverRowBackground:A,oddColumnBackground:L,useOddColumnBackground:$,oddEvenRowBackground:x,useOddEvenRowBackground:M}=e,D=i(e,["defaultHeaders","columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","editColumns","enableColumnEditorInitOpen","editColumnsInitOpen","enablePagination","shouldPaginate","onTableReady","onGridReady","hoverRowBackground","useHoverRowBackground","oddColumnBackground","useOddColumnBackground","oddEvenRowBackground","useOddEvenRowBackground"]),V=f(e);r.pruneRendererCaches(s(V));const G=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},D),{rows:o,defaultHeaders:V.map(e=>m(e,r)),editColumns:null!=_?_:S,editColumnsInitOpen:null!=H?H:j,shouldPaginate:null!=B?B:I,onGridReady:null!=P?P:k,useHoverRowBackground:null!=T?T:A,useOddColumnBackground:null!=L?L:$,useOddEvenRowBackground:null!=x?x:M,onRendererHostDiscard:r.disposeHost}),w?{onColumnOrderChange:e=>w(e)}:{}),O?{onColumnWidthChange:e=>O(e)}:{}),y?{onHeaderEdit:(e,t)=>y(e,t)}:{}),E?{onColumnSelect:e=>E(e)}:{});return void 0!==v&&(null===v?G.tableEmptyStateRenderer=null:"string"==typeof v||v instanceof HTMLElement?G.tableEmptyStateRenderer=v:g(v)&&(G.tableEmptyStateRenderer=function(e,r){const o=document.createElement("div"),s=t(r,{target:o,props:{}});return e.register(o,()=>{n(s)}),o}(r,v))),void 0!==d&&(G.footerRenderer="function"==typeof d&&d.length>=2?c(r,d):d),void 0!==a&&(G.emptyStateRenderer="function"==typeof a&&a.length>=2?c(r,a):a),void 0!==l&&(G.errorStateRenderer="function"==typeof l&&l.length>=2?c(r,l):l),void 0!==u&&(G.loadingStateRenderer="function"==typeof u&&u.length>=2?c(r,u):u),void 0!==h&&(G.headerDropdown=c(r,h)),void 0!==R&&(G.columnEditorConfig=function(e,t){const{rowRenderer:n,customRenderer:r}=e,o=i(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),n?{rowRenderer:c(t,n)}:{}),r?{customRenderer:c(t,r)}:{})}(R,r)),void 0!==b&&(G.icons=function(e){const t={};for(const[n,r]of Object.entries(e))null!=r&&("string"==typeof r||r instanceof HTMLElement||r instanceof SVGElement?t[n]=r:g(r)&&(t[n]=p(r,{})));return t}(b)),void 0!==C&&(G.rowButtons=C.map(e=>c(r,e))),G}"function"==typeof SuppressedError&&SuppressedError;const R="data-st-mount-id";class b{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 t=[],n=e.getAttribute(R);null!==n&&t.push(n),e.querySelectorAll(`[${R}]`).forEach(e=>{const n=e.getAttribute(R);null!==n&&t.push(n)});for(const e of t){const t=this.entries.get(e);t&&(this.entries.delete(e),t())}}}register(e,t){const n="st-mount-"+this.nextId++;e.setAttribute(R,n),this.entries.set(n,t)}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear();for(const e of this.entries.values())e();this.entries.clear()}pruneRendererCaches(e){for(const t of this.cellRendererCache.keys())e.has(t)||this.cellRendererCache.delete(t);for(const t of this.headerRendererCache.keys())e.has(t)||this.headerRendererCache.delete(t)}get size(){return this.entries.size}}var v=e.from_html("<div></div>");function C(t,n){const s=e.legacy_rest_props(n,["children","$$slots","$$events","$$legacy"]),i=e.legacy_rest_props(s,["getAPI","rows","defaultHeaders","columns"]);e.push(n,!1);let c=e.prop(n,"rows",8),u=e.prop(n,"defaultHeaders",8,void 0),p=e.prop(n,"columns",8,void 0),g=e.mutable_source(),m=e.mutable_source(null);const R=new b;let C=e.mutable_source(void 0),w=e.mutable_source(void 0);function O(){var t;return null!==(t=null===e.get(m)||void 0===e.get(m)?void 0:e.get(m).getAPI())&&void 0!==t?t:null}r(()=>{const t=Object.assign({rows:c(),defaultHeaders:u(),columns:p()},i);e.set(m,new d(e.get(g),h(t,R))),e.get(m).mount(),e.set(C,f(t)),e.set(w,c())}),o(()=>{null===e.get(m)||void 0===e.get(m)||e.get(m).destroy(),e.set(m,null),e.set(C,void 0),e.set(w,void 0),R.clear()}),e.legacy_pre_effect(()=>(e.get(m),e.deep_read_state(c()),e.deep_read_state(u()),e.deep_read_state(p()),e.deep_read_state(i),e.get(C),e.get(w)),()=>{if(e.get(m)){const t=Object.assign({rows:c(),defaultHeaders:u(),columns:p()},i),n=h(t,R),r=Object.assign({},n),o=f(t),s=a(e.get(C),o);e.set(C,o),s&&delete r.defaultHeaders;const d=l(e.get(w),c(),t.getRowId);e.set(w,c()),d&&delete r.rows,e.get(m).update(r)}}),e.legacy_pre_effect_reset();var y={getAPI:O};e.init();var E=v();return e.bind_this(E,t=>e.set(g,t),()=>e.get(g)),e.append(t,E),e.bind_prop(n,"getAPI",O),e.pop(y)}export{C as SimpleTable};
2
2
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/SimpleTable.svelte"],"sourcesContent":["<script lang=\"ts\">\n import { onMount, onDestroy } from \"svelte\";\n import {\n SimpleTableVanilla,\n headersStructurallyEqual,\n rowsShallowUnchanged,\n } from \"simple-table-core\";\n import type { SimpleTableConfig, TableAPI } from \"simple-table-core\";\n import { buildVanillaConfig } from \"./buildVanillaConfig\";\n import { MountRegistry } from \"./MountRegistry\";\n import type { SimpleTableSvelteProps, TableInstance } from \"./types\";\n\n // SimpleTable — Svelte adapter for simple-table-core.\n // Accepts the same props as SimpleTableProps with Svelte component types for renderers.\n // Use bind:this={tableRef} to access the TableAPI: tableRef.getAPI()?.sort(...)\n\n type $$Props = SimpleTableSvelteProps;\n\n export let rows: $$Props[\"rows\"];\n export let defaultHeaders: $$Props[\"defaultHeaders\"];\n\n // All remaining optional props — spread via $$restProps\n let container: HTMLDivElement;\n let instance: TableInstance | null = null;\n const registry = new MountRegistry();\n\n /** Last headers/rows whose structure/content was applied via update. */\n let syncedDefaultHeaders: $$Props[\"defaultHeaders\"] | undefined = undefined;\n let syncedRows: $$Props[\"rows\"] | undefined = undefined;\n\n onMount(() => {\n const props = { rows, defaultHeaders, ...$$restProps } as SimpleTableSvelteProps;\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, registry),\n ) as unknown as TableInstance;\n instance.mount();\n syncedDefaultHeaders = defaultHeaders;\n syncedRows = rows;\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n syncedDefaultHeaders = undefined;\n syncedRows = undefined;\n registry.clear();\n });\n\n // Reactive update: skip no-op defaultHeaders/rows when structure/content is unchanged.\n $: if (instance) {\n const props = { rows, defaultHeaders, ...$$restProps } as SimpleTableSvelteProps;\n const fullConfig = buildVanillaConfig(props, registry);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n\n const headersUnchanged = headersStructurallyEqual(syncedDefaultHeaders, defaultHeaders);\n syncedDefaultHeaders = defaultHeaders;\n if (headersUnchanged) {\n delete patch.defaultHeaders;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n syncedRows as ReadonlyArray<object> | undefined,\n rows as ReadonlyArray<object>,\n props.getRowId,\n );\n syncedRows = rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n instance.update(patch);\n }\n\n /** Expose the TableAPI for consumers using bind:this. */\n export function getAPI(): TableAPI | null {\n return instance?.getAPI() ?? null;\n }\n</script>\n\n<div bind:this={container}></div>\n"],"names":["div","root","$$value","$","set","container","get"],"mappings":"65LAgFCA,EAAGC,uBAAHD,EAAGE,GAAAC,EAAAC,IAAYC,EAASH,GAAA,IAAAC,EAAAG,IAATD,eAAfL,qCAFO"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/SimpleTable.svelte"],"sourcesContent":["<script lang=\"ts\">\n import { onMount, onDestroy } from \"svelte\";\n import {\n SimpleTableVanilla,\n headersStructurallyEqual,\n rowsShallowUnchanged,\n } from \"simple-table-core\";\n import type { SimpleTableConfig, TableAPI } from \"simple-table-core\";\n import { buildVanillaConfig, resolveSvelteColumns } from \"./buildVanillaConfig\";\n import { MountRegistry } from \"./MountRegistry\";\n import type { SimpleTableSvelteProps, TableInstance } from \"./types\";\n\n // SimpleTable — Svelte adapter for simple-table-core.\n // Accepts the same props as SimpleTableProps with Svelte component types for renderers.\n // Use bind:this={tableRef} to access the TableAPI: tableRef.getAPI()?.sort(...)\n\n type $$Props = SimpleTableSvelteProps;\n\n export let rows: $$Props[\"rows\"];\n export let defaultHeaders: $$Props[\"defaultHeaders\"] = undefined;\n export let columns: $$Props[\"columns\"] = undefined;\n\n // All remaining optional props — spread via $$restProps\n let container: HTMLDivElement;\n let instance: TableInstance | null = null;\n const registry = new MountRegistry();\n\n /** Last headers/rows whose structure/content was applied via update. */\n let syncedDefaultHeaders: ReadonlyArray<\n NonNullable<$$Props[\"columns\"]>[number]\n > | undefined = undefined;\n let syncedRows: $$Props[\"rows\"] | undefined = undefined;\n\n onMount(() => {\n const props = { rows, defaultHeaders, columns, ...$$restProps } as SimpleTableSvelteProps;\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, registry),\n ) as unknown as TableInstance;\n instance.mount();\n syncedDefaultHeaders = resolveSvelteColumns(props);\n syncedRows = rows;\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n syncedDefaultHeaders = undefined;\n syncedRows = undefined;\n registry.clear();\n });\n\n // Reactive update: skip no-op columns/rows when structure/content is unchanged.\n $: if (instance) {\n const props = { rows, defaultHeaders, columns, ...$$restProps } as SimpleTableSvelteProps;\n const fullConfig = buildVanillaConfig(props, registry);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n const resolvedColumns = resolveSvelteColumns(props);\n\n const headersUnchanged = headersStructurallyEqual(syncedDefaultHeaders, resolvedColumns);\n syncedDefaultHeaders = resolvedColumns;\n if (headersUnchanged) {\n delete patch.defaultHeaders;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n syncedRows as ReadonlyArray<object> | undefined,\n rows as ReadonlyArray<object>,\n props.getRowId,\n );\n syncedRows = rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n instance.update(patch);\n }\n\n /** Expose the TableAPI for consumers using bind:this. */\n export function getAPI(): TableAPI | null {\n return instance?.getAPI() ?? null;\n }\n</script>\n\n<div bind:this={container}></div>\n"],"names":["div","root","$$value","$","set","container","get"],"mappings":"i8NAoFCA,EAAGC,uBAAHD,EAAGE,GAAAC,EAAAC,IAAYC,EAASH,GAAA,IAAAC,EAAAG,IAATD,eAAfL,qCAFO"}
@@ -1,4 +1,6 @@
1
- import type { SimpleTableConfig } from "simple-table-core";
2
- import type { SimpleTableSvelteProps } from "./types";
1
+ import type { SimpleTableConfig, HeaderObject } from "simple-table-core";
2
+ import type { SimpleTableSvelteProps, SvelteHeaderObject } from "./types";
3
3
  import type { MountRegistry } from "./MountRegistry";
4
+ /** Resolve preferred `columns` or legacy `defaultHeaders`. */
5
+ export declare function resolveSvelteColumns(config: Pick<SimpleTableSvelteProps, "columns" | "defaultHeaders">): ReadonlyArray<HeaderObject | SvelteHeaderObject>;
4
6
  export declare function buildVanillaConfig(config: SimpleTableSvelteProps, registry: MountRegistry): SimpleTableConfig;
@@ -1,5 +1,5 @@
1
1
  export { default as SimpleTable } from "./SimpleTable.svelte";
2
2
  export { asRows } from "simple-table-core";
3
- export type { SimpleTableSvelteProps, TableInstance, SvelteHeaderObject, SvelteIconsConfig, SvelteIconElement, SvelteColumnEditorConfig, SvelteCellRenderer, SvelteHeaderRenderer, SvelteFooterRenderer, SvelteHeaderDropdown, SvelteColumnEditorRowRenderer, SvelteColumnEditorCustomRenderer, SvelteRowButton, SvelteLoadingStateRenderer, SvelteErrorStateRenderer, SvelteEmptyStateRenderer, } from "./types";
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, FilterOperator, StringFilterOperator, NumberFilterOperator, BooleanFilterOperator, DateFilterOperator, EnumFilterOperator, FooterRendererProps, GetRowId, GetRowIdParams, HeaderDropdown, HeaderDropdownProps, HeaderObject, HeaderRenderer, HeaderRendererComponents, HeaderRendererProps, IconsConfig, LoadingStateRenderer, LoadingStateRendererProps, OnRowGroupExpandProps, OnSortProps, PivotConfig, PivotValueConfig, PivotResult, 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";
3
+ export type { SimpleTableSvelteProps, TableInstance, SvelteHeaderObject, SvelteColumnDef, SvelteIconsConfig, SvelteIconElement, SvelteColumnEditorConfig, SvelteCellRenderer, SvelteHeaderRenderer, SvelteFooterRenderer, SvelteHeaderDropdown, SvelteColumnEditorRowRenderer, SvelteColumnEditorCustomRenderer, SvelteRowButton, SvelteLoadingStateRenderer, SvelteErrorStateRenderer, SvelteEmptyStateRenderer, } from "./types";
4
+ export type { Accessor, AggregationConfig, AggregationType, AnimationsConfig, AutoSizeMode, ColumnDef, Cell, CellChangeProps, CellClickProps, CellRenderer, CellRendererProps, CellValue, ChartOptions, ColumnEditorConfig, ColumnEditorRowRenderer, ColumnEditorRowRendererComponents, ColumnEditorCustomRenderer, ColumnEditorCustomRendererProps, ColumnEditorRowRendererProps, ColumnEditorSearchFunction, ColumnType, ColumnVisibilityState, Comparator, ComparatorProps, CustomTheme, CustomThemeProps, EmptyStateRenderer, EmptyStateRendererProps, EnumOption, ErrorStateRenderer, ErrorStateRendererProps, ExportToCSVProps, ExportValueGetter, ExportValueProps, FilterCondition, FilterOperator, StringFilterOperator, NumberFilterOperator, BooleanFilterOperator, DateFilterOperator, EnumFilterOperator, FooterRendererProps, FooterPosition, GetRowId, GetRowIdParams, HeaderDropdown, HeaderDropdownProps, HeaderObject, HeaderRenderer, HeaderRendererComponents, HeaderRendererProps, IconsConfig, LoadingStateRenderer, LoadingStateRendererProps, OnRowGroupExpandProps, Pinned, PinnedSectionsState, PivotConfig, PivotValueConfig, PivotResult, QuickFilterConfig, QuickFilterGetter, QuickFilterGetterProps, QuickFilterMode, Row, RowButtonProps, RowId, RowSelectionChangeProps, RowSelectionMode, RowState, SetHeaderRenameProps, ShowWhen, SimpleTableConfig, SimpleTableProps, SortColumn, TableAPI, TableFilterState, TableRow, Theme, UpdateDataProps, ValueFormatter, ValueFormatterProps, ValueGetter, ValueGetterProps, } from "simple-table-core";
5
5
  export { pivotRows, buildPivotAccessor, buildPivotRowTotalAccessor, PIVOT_CHILDREN_KEY, PIVOT_IS_TOTAL_KEY, PIVOT_ACCESSOR_PREFIX, PIVOT_BLANK_LABEL, } from "simple-table-core";
@@ -1,13 +1,13 @@
1
1
  import type { Component } from "svelte";
2
- import type { SimpleTableProps, SimpleTableConfig, HeaderObject, Row, TableAPI, CellRendererProps, HeaderRendererProps, FooterRendererProps, LoadingStateRendererProps, ErrorStateRendererProps, EmptyStateRendererProps, HeaderDropdownProps, ColumnEditorRowRendererProps, ColumnEditorCustomRendererProps, ColumnEditorConfig, RowButtonProps } from "simple-table-core";
2
+ import type { SimpleTableProps, SimpleTableConfig, HeaderObject, Row, TableAPI, CellRenderer, CellRendererProps, HeaderRenderer, HeaderRendererProps, FooterRendererProps, LoadingStateRendererProps, ErrorStateRendererProps, EmptyStateRendererProps, HeaderDropdownProps, ColumnEditorRowRendererProps, ColumnEditorCustomRendererProps, ColumnEditorConfig, RowButtonProps } from "simple-table-core";
3
3
  export interface TableInstance {
4
4
  mount(): void;
5
5
  update(config: Partial<SimpleTableConfig>): void;
6
6
  destroy(): void;
7
7
  getAPI(): TableAPI;
8
8
  }
9
- export type SvelteCellRenderer = Component<CellRendererProps>;
10
- export type SvelteHeaderRenderer = Component<HeaderRendererProps>;
9
+ export type SvelteCellRenderer = Component<CellRendererProps> | CellRenderer;
10
+ export type SvelteHeaderRenderer = Component<HeaderRendererProps> | HeaderRenderer;
11
11
  export type SvelteFooterRenderer = Component<FooterRendererProps>;
12
12
  export type SvelteHeaderDropdown = Component<HeaderDropdownProps>;
13
13
  export type SvelteColumnEditorRowRenderer = Component<ColumnEditorRowRendererProps>;
@@ -35,8 +35,9 @@ export interface SvelteColumnEditorConfig extends Omit<ColumnEditorConfig, "rowR
35
35
  customRenderer?: SvelteColumnEditorCustomRenderer;
36
36
  }
37
37
  /**
38
- * Column definition for `defaultHeaders`: core column metadata with Svelte-only
39
- * renderer fields. `defaultHeaders` also accepts plain `HeaderObject[]` from shared configs.
38
+ * Column definition for `columns` / `defaultHeaders`: core column metadata with
39
+ * Svelte-only renderer fields. `columns` / `defaultHeaders` also accept plain
40
+ * `HeaderObject[]` from shared configs.
40
41
  */
41
42
  export interface SvelteHeaderObject extends Omit<HeaderObject, "cellRenderer" | "headerRenderer" | "children" | "nestedTable"> {
42
43
  cellRenderer?: SvelteCellRenderer;
@@ -44,8 +45,16 @@ export interface SvelteHeaderObject extends Omit<HeaderObject, "cellRenderer" |
44
45
  children?: SvelteHeaderObject[];
45
46
  nestedTable?: Omit<SimpleTableSvelteProps, "rows" | "loadingStateRenderer" | "errorStateRenderer" | "emptyStateRenderer" | "tableEmptyStateRenderer">;
46
47
  }
47
- export interface SimpleTableSvelteProps extends Omit<SimpleTableProps, "rows" | "defaultHeaders" | "footerRenderer" | "emptyStateRenderer" | "errorStateRenderer" | "loadingStateRenderer" | "tableEmptyStateRenderer" | "headerDropdown" | "columnEditorConfig" | "icons" | "rowButtons" | "onColumnOrderChange" | "onColumnWidthChange" | "onHeaderEdit" | "onColumnSelect"> {
48
- defaultHeaders: ReadonlyArray<HeaderObject | SvelteHeaderObject>;
48
+ /** Preferred name for Svelte column definitions. Alias of {@link SvelteHeaderObject}. */
49
+ export type SvelteColumnDef = SvelteHeaderObject;
50
+ export interface SimpleTableSvelteProps extends Omit<SimpleTableProps, "rows" | "defaultHeaders" | "columns" | "footerRenderer" | "emptyStateRenderer" | "errorStateRenderer" | "loadingStateRenderer" | "tableEmptyStateRenderer" | "headerDropdown" | "columnEditorConfig" | "icons" | "rowButtons" | "onColumnOrderChange" | "onColumnWidthChange" | "onHeaderEdit" | "onColumnSelect"> {
51
+ /**
52
+ * Column definitions.
53
+ * @deprecated Prefer {@link columns}
54
+ */
55
+ defaultHeaders?: ReadonlyArray<HeaderObject | SvelteHeaderObject>;
56
+ /** Column definitions. Preferred over `defaultHeaders`. */
57
+ columns?: ReadonlyArray<HeaderObject | SvelteHeaderObject>;
49
58
  /** Row data: domain objects or core `Row[]`; cast inside the adapter. */
50
59
  rows: ReadonlyArray<Row> | ReadonlyArray<object>;
51
60
  onColumnOrderChange?: (newHeaders: SvelteHeaderObject[]) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simple-table/svelte",
3
- "version": "4.0.1",
3
+ "version": "4.0.2",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/index.es.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -14,7 +14,10 @@
14
14
  "require": "./dist/cjs/index.js",
15
15
  "types": "./dist/types/index.d.ts"
16
16
  },
17
- "./styles.css": "./dist/styles.css"
17
+ "./styles.css": {
18
+ "types": "./styles.css.d.ts",
19
+ "default": "./dist/styles.css"
20
+ }
18
21
  },
19
22
  "license": "Community",
20
23
  "publishConfig": {
@@ -22,13 +25,14 @@
22
25
  },
23
26
  "files": [
24
27
  "dist",
25
- "LICENSE"
28
+ "LICENSE",
29
+ "styles.css.d.ts"
26
30
  ],
27
31
  "peerDependencies": {
28
32
  "svelte": ">=4.0.0"
29
33
  },
30
34
  "dependencies": {
31
- "simple-table-core": "4.0.1"
35
+ "simple-table-core": "4.0.2"
32
36
  },
33
37
  "devDependencies": {
34
38
  "@rollup/plugin-alias": "4.0.0",
@@ -42,6 +46,7 @@
42
46
  "rollup-plugin-typescript2": "^0.37.0",
43
47
  "svelte": "^5.0.0",
44
48
  "svelte-preprocess": "^6.0.0",
49
+ "tslib": "^2.8.1",
45
50
  "typescript": "^5.0.0",
46
51
  "vitest": "^2.1.9"
47
52
  },
@@ -90,6 +95,7 @@
90
95
  "scripts": {
91
96
  "build": "rollup -c",
92
97
  "preview": "rollup -c -w",
98
+ "typecheck": "tsc -p tsconfig.json --noEmit",
93
99
  "test": "vitest run",
94
100
  "version:patch": "npm version patch && git push && git push --tags",
95
101
  "version:minor": "npm version minor && git push && git push --tags",
@@ -0,0 +1 @@
1
+ export {};