@simple-table/svelte 4.1.9 → 4.2.0

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"),n=require("simple-table-core"),r=require("svelte/legacy");function o(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 s=o(e);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 l(e,t,n){return r.createClassComponent({component:e,target:t,props:n,intro:!1})}function c(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 u(e,n,r,o){const s="cell"===r?e.cellRendererCache:e.headerRendererCache,i=s.get(n);if(i)return i.component=o,i.wrapped;const c={component:o,wrapped:null};if("header"===r){let t=null,r=null,o=null;const i=n=>{const s=c.component;return t&&r&&e.isRegistered(t)&&o===s?(r.$set(n),t):(t&&e.isRegistered(t)&&e.disposeHost(t),t=document.createElement("div"),r=l(s,t,n),o=s,e.register(t,()=>{null==r||r.$destroy(),r=null,o=null,t=null}),t)};return c.wrapped=i,s.set(n,c),i}const u=n=>{const r=document.createElement("div"),o=t.mount(c.component,{target:r,props:n});return e.register(r,()=>{t.unmount(o)}),r};return c.wrapped=u,s.set(n,c),u}function a(e,t){const n=new Map;return r=>{const o=String(r.accessor),s=n.get(o);if(s&&e.isRegistered(s.host))return s.instance.$set(r),s.host;const i=document.createElement("div"),c=l(t,i,r);return e.register(i,()=>{c.$destroy(),n.delete(o)}),n.set(o,{host:i,instance:c}),i}}function d(e,n={}){const r=document.createElement("div"),o=t.mount(e,{target:r,props:n}),s=r.innerHTML;return t.unmount(o),s}function p(e){return"function"==typeof e}function g(e,t){const{cellRenderer:n,headerRenderer:r,children:o,nestedTable:s}=e,l=i(e,["cellRenderer","headerRenderer","children","nestedTable"]),c=String(e.accessor),a=Object.assign({},l);if(n&&(a.cellRenderer="function"==typeof n&&n.length>=2?u(t,c,"cell",n):n),r&&(a.headerRenderer="function"==typeof r&&r.length>=2?u(t,c,"header",r):r),o&&(a.children=o.map(e=>g(e,t))),s){const e=Object.assign(Object.assign({},s),{rows:[]});a.nestedTable=m(e,t)}return a}function f(e){const t=e.columns;if(!t)throw new Error("SimpleTable requires `columns`");return t}function m(e,r){const{rows:o,footerRenderer:s,emptyStateRenderer:l,errorStateRenderer:u,loadingStateRenderer:m,headerDropdown:h,columnEditorConfig:b,icons:R,tableEmptyStateRenderer:v,rowButtons:y,onColumnOrderChange:O,onColumnWidthChange:w,onHeaderEdit:C,onColumnSelect:E,enableColumnEditor:_,enableColumnEditorInitOpen:S,enablePagination:P,onTableReady:j,hoverRowBackground:A,oddColumnBackground:T,oddEvenRowBackground:I}=e,B=i(e,["columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","enableColumnEditorInitOpen","enablePagination","onTableReady","hoverRowBackground","oddColumnBackground","oddEvenRowBackground"]),x=f(e);r.pruneRendererCaches(n.collectHeaderAccessors(x));const L=Object.assign(Object.assign({},B),{rows:n.asRows(o),columns:x.map(e=>g(e,r)),enableColumnEditor:_,enableColumnEditorInitOpen:S,enablePagination:P,onTableReady:j,hoverRowBackground:A,oddColumnBackground:T,oddEvenRowBackground:I,onRendererHostDiscard:r.disposeHost});return O&&(L.onColumnOrderChange=e=>O(e)),w&&(L.onColumnWidthChange=e=>w(e)),C&&(L.onHeaderEdit=(e,t)=>C(e,t)),E&&(L.onColumnSelect=e=>E(e)),void 0!==v&&(null===v?L.tableEmptyStateRenderer=null:"string"==typeof v||v instanceof HTMLElement?L.tableEmptyStateRenderer=v:p(v)&&(L.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,v))),void 0!==s&&(L.footerRenderer="function"==typeof s&&s.length>=2?c(r,s):s),void 0!==l&&(L.emptyStateRenderer="function"==typeof l&&l.length>=2?c(r,l):l),void 0!==u&&(L.errorStateRenderer="function"==typeof u&&u.length>=2?c(r,u):u),void 0!==m&&(L.loadingStateRenderer="function"==typeof m&&m.length>=2?c(r,m):m),void 0!==h&&(L.headerDropdown=c(r,h)),void 0!==b&&(L.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:a(t,n)}:{}),r?{customRenderer:c(t,r)}:{})}(b,r)),void 0!==R&&(L.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:p(r)&&(t[n]=d(r,{})));return t}(R)),void 0!==y&&(L.rowButtons=y.map(e=>c(r,e))),L}"function"==typeof SuppressedError&&SuppressedError;const h="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(h);null!==n&&t.push(n),e.querySelectorAll(`[${h}]`).forEach(e=>{const n=e.getAttribute(h);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(h,n),this.entries.set(n,t)}isRegistered(e){const t=e.getAttribute(h);return null!==t&&this.entries.has(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 R=s.from_html("<div></div>");function v(e,r){const o=s.legacy_rest_props(r,["children","$$slots","$$events","$$legacy"]),i=s.legacy_rest_props(o,["getAPI","rows","columns"]);s.push(r,!1);let l=s.prop(r,"rows",8),c=s.prop(r,"columns",8,void 0),u=s.mutable_source(),a=s.mutable_source(null);const d=new b;let p=s.mutable_source(void 0),g=s.mutable_source(void 0),h=s.mutable_source(!1),v=!1;function y(e){var t,n;s.get(a)&&(e?null===(t=s.get(a).refitAutoSizeColumns)||void 0===t||t.call(s.get(a)):!v&&d.size>0&&(v=!0,null===(n=s.get(a).refitAutoSizeColumns)||void 0===n||n.call(s.get(a))))}function O(){var e;return null!==(e=null===s.get(a)||void 0===s.get(a)?void 0:s.get(a).getAPI())&&void 0!==e?e:null}t.onMount(()=>{const e=Object.assign({rows:l(),columns:c()},i);s.set(a,new n.SimpleTableVanilla(s.get(u),m(e,d))),s.get(a).mount(),s.set(p,f(e)),s.set(g,l()),s.set(h,Boolean(e.isLoading)),y(!1)}),t.onDestroy(()=>{null===s.get(a)||void 0===s.get(a)||s.get(a).destroy(),s.set(a,null),s.set(p,void 0),s.set(g,void 0),d.clear()}),s.legacy_pre_effect(()=>(s.get(a),s.deep_read_state(l()),s.deep_read_state(c()),s.deep_read_state(i),s.get(p),s.get(g),s.get(h)),()=>{if(s.get(a)){const e=Object.assign({rows:l(),columns:c()},i),t=m(e,d),r=Object.assign({},t),o=f(e),u=n.headersStructurallyEqual(s.get(p),o);s.set(p,o),u&&delete r.columns;const b=n.rowsShallowUnchanged(s.get(g),l(),e.getRowId);s.set(g,l()),b&&delete r.rows;const R=Boolean(e.isLoading),v=s.get(h)&&!R;s.set(h,R),s.get(a).update(r),y(v)}}),s.legacy_pre_effect_reset();var w={getAPI:O};s.init();var C=R();return s.bind_this(C,e=>s.set(u,e),()=>s.get(u)),s.append(e,C),s.bind_prop(r,"getAPI",O),s.pop(w)}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_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=v,exports.mountSimpleTable=function(e){return t.mount(v,e)};
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"),r=require("svelte/legacy");function o(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 s=o(e);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"==typeof SuppressedError&&SuppressedError;const l=Symbol.for("simple-table.rendererGeneration");function c(e,t,n){return r.createClassComponent({component:e,target:t,props:n,intro:!1})}function a(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 u(e,n,r,o){const s="cell"===r?e.cellRendererCache:e.headerRendererCache,i=s.get(n);if(i){if("cell"===r&&i.component!==o){i.component=o;const e=i.wrapped[l];i.wrapped[l]=("number"==typeof e?e:0)+1}else i.component=o;return i.wrapped}const a={component:o,wrapped:null};if("header"===r){let t=null,r=null,o=null;const i=n=>{const s=a.component;return t&&r&&e.isRegistered(t)&&o===s?(r.$set(n),t):(t&&e.isRegistered(t)&&e.disposeHost(t),t=document.createElement("div"),r=c(s,t,n),o=s,e.register(t,()=>{null==r||r.$destroy(),r=null,o=null,t=null}),t)};return a.wrapped=i,s.set(n,a),i}const u=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=u,u[l]=0,s.set(n,a),u}function d(e,t){const n=new Map;return r=>{const o=String(r.accessor),s=n.get(o);if(s&&e.isRegistered(s.host))return s.instance.$set(r),s.host;const i=document.createElement("div"),l=c(t,i,r);return e.register(i,()=>{l.$destroy(),n.delete(o)}),n.set(o,{host:i,instance:l}),i}}function p(e,n={}){const r=document.createElement("div"),o=t.mount(e,{target:r,props:n}),s=r.innerHTML;return t.unmount(o),s}function g(e){return"function"==typeof e}function m(e,t){const{cellRenderer:n,headerRenderer:r,children:o,nestedTable:s}=e,l=i(e,["cellRenderer","headerRenderer","children","nestedTable"]),c=String(e.accessor),a=Object.assign({},l);if(n&&(a.cellRenderer="function"==typeof n&&n.length>=2?u(t,c,"cell",n):n),r&&(a.headerRenderer="function"==typeof r&&r.length>=2?u(t,c,"header",r):r),o&&(a.children=o.map(e=>m(e,t))),s){const e=Object.assign(Object.assign({},s),{rows:[]});a.nestedTable=h(e,t)}return a}function f(e){const t=e.columns;if(!t)throw new Error("SimpleTable requires `columns`");return t}function h(e,r){const{rows:o,footerRenderer:s,emptyStateRenderer:l,errorStateRenderer:c,loadingStateRenderer:u,headerDropdown:h,columnEditorConfig:b,icons:R,tableEmptyStateRenderer:v,rowButtons:y,onColumnOrderChange:w,onColumnWidthChange:O,onHeaderEdit:C,onColumnSelect:E,enableColumnEditor:_,enableColumnEditorInitOpen:S,enablePagination:P,onTableReady:j,hoverRowBackground:A,oddColumnBackground:T,oddEvenRowBackground:I}=e,B=i(e,["columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","enableColumnEditorInitOpen","enablePagination","onTableReady","hoverRowBackground","oddColumnBackground","oddEvenRowBackground"]),x=f(e);r.pruneRendererCaches(n.collectHeaderAccessors(x));const L=Object.assign(Object.assign({},B),{rows:n.asRows(o),columns:x.map(e=>m(e,r)),enableColumnEditor:_,enableColumnEditorInitOpen:S,enablePagination:P,onTableReady:j,hoverRowBackground:A,oddColumnBackground:T,oddEvenRowBackground:I,onRendererHostDiscard:r.disposeHost});return w&&(L.onColumnOrderChange=e=>w(e)),O&&(L.onColumnWidthChange=e=>O(e)),C&&(L.onHeaderEdit=(e,t)=>C(e,t)),E&&(L.onColumnSelect=e=>E(e)),void 0!==v&&(null===v?L.tableEmptyStateRenderer=null:"string"==typeof v||v instanceof HTMLElement?L.tableEmptyStateRenderer=v:g(v)&&(L.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,v))),void 0!==s&&(L.footerRenderer="function"==typeof s&&s.length>=2?a(r,s):s),void 0!==l&&(L.emptyStateRenderer="function"==typeof l&&l.length>=2?a(r,l):l),void 0!==c&&(L.errorStateRenderer="function"==typeof c&&c.length>=2?a(r,c):c),void 0!==u&&(L.loadingStateRenderer="function"==typeof u&&u.length>=2?a(r,u):u),void 0!==h&&(L.headerDropdown=a(r,h)),void 0!==b&&(L.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:d(t,n)}:{}),r?{customRenderer:a(t,r)}:{})}(b,r)),void 0!==R&&(L.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}(R)),void 0!==y&&(L.rowButtons=y.map(e=>a(r,e))),L}const b="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=[],n=e.getAttribute(b);null!==n&&t.push(n),e.querySelectorAll(`[${b}]`).forEach(e=>{const n=e.getAttribute(b);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(b,n),this.entries.set(n,t)}isRegistered(e){const t=e.getAttribute(b);return null!==t&&this.entries.has(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=s.from_html("<div></div>");function y(e,r){const o=s.legacy_rest_props(r,["children","$$slots","$$events","$$legacy"]),i=s.legacy_rest_props(o,["getAPI","rows","columns"]);s.push(r,!1);let l=s.prop(r,"rows",8),c=s.prop(r,"columns",8,void 0),a=s.mutable_source(),u=s.mutable_source(null);const d=new R;let p=s.mutable_source(void 0),g=s.mutable_source(void 0),m=s.mutable_source(!1),b=!1;function y(e){var t,n;s.get(u)&&(e?null===(t=s.get(u).refitAutoSizeColumns)||void 0===t||t.call(s.get(u)):!b&&d.size>0&&(b=!0,null===(n=s.get(u).refitAutoSizeColumns)||void 0===n||n.call(s.get(u))))}function w(){var e;return null!==(e=null===s.get(u)||void 0===s.get(u)?void 0:s.get(u).getAPI())&&void 0!==e?e:null}t.onMount(()=>{const e=Object.assign({rows:l(),columns:c()},i);s.set(u,new n.SimpleTableVanilla(s.get(a),h(e,d))),s.get(u).mount(),s.set(p,f(e)),s.set(g,l()),s.set(m,Boolean(e.isLoading)),y(!1)}),t.onDestroy(()=>{null===s.get(u)||void 0===s.get(u)||s.get(u).destroy(),s.set(u,null),s.set(p,void 0),s.set(g,void 0),d.clear()}),s.legacy_pre_effect(()=>(s.get(u),s.deep_read_state(l()),s.deep_read_state(c()),s.deep_read_state(i),s.get(p),s.get(g),s.get(m)),()=>{if(s.get(u)){const e=Object.assign({rows:l(),columns:c()},i),t=h(e,d),r=Object.assign({},t),o=f(e),a=n.headersStructurallyEqual(s.get(p),o);s.set(p,o),a&&delete r.columns;const b=n.rowsShallowUnchanged(s.get(g),l(),e.getRowId);s.set(g,l()),b&&delete r.rows;const R=Boolean(e.isLoading),v=s.get(m)&&!R;s.set(m,R),s.get(u).update(r),y(v)}}),s.legacy_pre_effect_reset();var O={getAPI:w};s.init();var C=v();return s.bind_this(C,e=>s.set(a,e),()=>s.get(a)),s.append(e,C),s.bind_prop(r,"getAPI",w),s.pop(O)}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_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=y,exports.mountSimpleTable=function(e){return t.mount(y,e)};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/SimpleTable.svelte"],"sourcesContent":["<script lang=\"ts\" generics=\"TData extends Record<string, any> = Record<string, any>\">\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 // Prefer typed `rows` / `columns` (`SvelteColumnDef<MyRow>`) so TData flows into\n // callbacks. Use bind:this={tableRef} for TableAPI: tableRef.getAPI()?.sort(...)\n\n type $$Props = SimpleTableSvelteProps<TData>;\n\n export let rows: $$Props[\"rows\"];\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 syncedColumns: ReadonlyArray<\n NonNullable<$$Props[\"columns\"]>[number]\n > | undefined = undefined;\n let syncedRows: $$Props[\"rows\"] | undefined = undefined;\n let wasLoading = false;\n let didInitialAutoSize = false;\n\n function maybeRefitAutoSizeColumns(leftLoading: boolean) {\n if (!instance) return;\n if (leftLoading) {\n instance.refitAutoSizeColumns?.();\n return;\n }\n // Svelte mounts are synchronous for template DOM, so custom renderer hosts\n // are already present after the first paint that registered mounts (mirrors\n // Vue/React first-portals refit).\n if (!didInitialAutoSize && registry.size > 0) {\n didInitialAutoSize = true;\n instance.refitAutoSizeColumns?.();\n }\n }\n\n onMount(() => {\n const props = { rows, columns, ...$$restProps } as SimpleTableSvelteProps<TData>;\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, registry),\n ) as unknown as TableInstance;\n instance.mount();\n syncedColumns = resolveSvelteColumns(props);\n syncedRows = rows;\n wasLoading = Boolean(props.isLoading);\n maybeRefitAutoSizeColumns(false);\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n syncedColumns = 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, columns, ...$$restProps } as SimpleTableSvelteProps<TData>;\n const fullConfig = buildVanillaConfig(props, registry);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n const resolvedColumns = resolveSvelteColumns(props);\n\n const headersUnchanged = headersStructurallyEqual(syncedColumns, resolvedColumns);\n syncedColumns = resolvedColumns;\n if (headersUnchanged) {\n delete patch.columns;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n syncedRows as ReadonlyArray<object> | undefined,\n rows as ReadonlyArray<object>,\n props.getRowId as Parameters<typeof rowsShallowUnchanged>[2],\n );\n syncedRows = rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n const isLoading = Boolean(props.isLoading);\n const leftLoading = wasLoading && !isLoading;\n wasLoading = isLoading;\n\n instance.update(patch);\n maybeRefitAutoSizeColumns(leftLoading);\n }\n\n /** Expose the TableAPI for consumers using bind:this. */\n export function getAPI(): TableAPI<TData> | null {\n return (instance?.getAPI() as TableAPI<TData> | undefined) ?? null;\n }\n</script>\n\n<div bind:this={container}></div>\n"],"names":["div","root","$$value","$","set","container","get"],"mappings":"soPA4GCA,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\" generics=\"TData extends Record<string, any> = Record<string, any>\">\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 // Prefer typed `rows` / `columns` (`SvelteColumnDef<MyRow>`) so TData flows into\n // callbacks. Use bind:this={tableRef} for TableAPI: tableRef.getAPI()?.sort(...)\n\n type $$Props = SimpleTableSvelteProps<TData>;\n\n export let rows: $$Props[\"rows\"];\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 syncedColumns: ReadonlyArray<\n NonNullable<$$Props[\"columns\"]>[number]\n > | undefined = undefined;\n let syncedRows: $$Props[\"rows\"] | undefined = undefined;\n let wasLoading = false;\n let didInitialAutoSize = false;\n\n function maybeRefitAutoSizeColumns(leftLoading: boolean) {\n if (!instance) return;\n if (leftLoading) {\n instance.refitAutoSizeColumns?.();\n return;\n }\n // Svelte mounts are synchronous for template DOM, so custom renderer hosts\n // are already present after the first paint that registered mounts (mirrors\n // Vue/React first-portals refit).\n if (!didInitialAutoSize && registry.size > 0) {\n didInitialAutoSize = true;\n instance.refitAutoSizeColumns?.();\n }\n }\n\n onMount(() => {\n const props = { rows, columns, ...$$restProps } as SimpleTableSvelteProps<TData>;\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, registry),\n ) as unknown as TableInstance;\n instance.mount();\n syncedColumns = resolveSvelteColumns(props);\n syncedRows = rows;\n wasLoading = Boolean(props.isLoading);\n maybeRefitAutoSizeColumns(false);\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n syncedColumns = 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, columns, ...$$restProps } as SimpleTableSvelteProps<TData>;\n const fullConfig = buildVanillaConfig(props, registry);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n const resolvedColumns = resolveSvelteColumns(props);\n\n const headersUnchanged = headersStructurallyEqual(syncedColumns, resolvedColumns);\n syncedColumns = resolvedColumns;\n if (headersUnchanged) {\n delete patch.columns;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n syncedRows as ReadonlyArray<object> | undefined,\n rows as ReadonlyArray<object>,\n props.getRowId as Parameters<typeof rowsShallowUnchanged>[2],\n );\n syncedRows = rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n const isLoading = Boolean(props.isLoading);\n const leftLoading = wasLoading && !isLoading;\n wasLoading = isLoading;\n\n instance.update(patch);\n maybeRefitAutoSizeColumns(leftLoading);\n }\n\n /** Expose the TableAPI for consumers using bind:this. */\n export function getAPI(): TableAPI<TData> | null {\n return (instance?.getAPI() as TableAPI<TData> | undefined) ?? null;\n }\n</script>\n\n<div bind:this={container}></div>\n"],"names":["div","root","$$value","$","set","container","get"],"mappings":"ozPA4GCA,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 n,onMount as r,onDestroy as o}from"svelte";import{collectHeaderAccessors as s,asRows as i,SimpleTableVanilla as l,headersStructurallyEqual as c,rowsShallowUnchanged as d}from"simple-table-core";export{PIVOT_ACCESSOR_PREFIX,PIVOT_BLANK_LABEL,PIVOT_IS_TOTAL_KEY,asRows,buildPivotAccessor,buildPivotRowTotalAccessor,pivotRows}from"simple-table-core";import{createClassComponent as a}from"svelte/legacy";function u(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 g(e,t,n){return a({component:e,target:t,props:n,intro:!1})}function p(e,r){return o=>{const s=document.createElement("div"),i=t(r,{target:s,props:o});return e.register(s,()=>{n(i)}),s}}function m(e,r,o,s){const i="cell"===o?e.cellRendererCache:e.headerRendererCache,l=i.get(r);if(l)return l.component=s,l.wrapped;const c={component:s,wrapped:null};if("header"===o){let t=null,n=null,o=null;const s=r=>{const s=c.component;return t&&n&&e.isRegistered(t)&&o===s?(n.$set(r),t):(t&&e.isRegistered(t)&&e.disposeHost(t),t=document.createElement("div"),n=g(s,t,r),o=s,e.register(t,()=>{null==n||n.$destroy(),n=null,o=null,t=null}),t)};return c.wrapped=s,i.set(r,c),s}const d=r=>{const o=document.createElement("div"),s=t(c.component,{target:o,props:r});return e.register(o,()=>{n(s)}),o};return c.wrapped=d,i.set(r,c),d}function f(e,t){const n=new Map;return r=>{const o=String(r.accessor),s=n.get(o);if(s&&e.isRegistered(s.host))return s.instance.$set(r),s.host;const i=document.createElement("div"),l=g(t,i,r);return e.register(i,()=>{l.$destroy(),n.delete(o)}),n.set(o,{host:i,instance:l}),i}}function h(e,r={}){const o=document.createElement("div"),s=t(e,{target:o,props:r}),i=o.innerHTML;return n(s),i}function R(e){return"function"==typeof e}function b(e,t){const{cellRenderer:n,headerRenderer:r,children:o,nestedTable:s}=e,i=u(e,["cellRenderer","headerRenderer","children","nestedTable"]),l=String(e.accessor),c=Object.assign({},i);if(n&&(c.cellRenderer="function"==typeof n&&n.length>=2?m(t,l,"cell",n):n),r&&(c.headerRenderer="function"==typeof r&&r.length>=2?m(t,l,"header",r):r),o&&(c.children=o.map(e=>b(e,t))),s){const e=Object.assign(Object.assign({},s),{rows:[]});c.nestedTable=y(e,t)}return c}function v(e){const t=e.columns;if(!t)throw new Error("SimpleTable requires `columns`");return t}function y(e,r){const{rows:o,footerRenderer:l,emptyStateRenderer:c,errorStateRenderer:d,loadingStateRenderer:a,headerDropdown:g,columnEditorConfig:m,icons:y,tableEmptyStateRenderer:w,rowButtons:C,onColumnOrderChange:E,onColumnWidthChange:O,onHeaderEdit:S,onColumnSelect:_,enableColumnEditor:A,enableColumnEditorInitOpen:j,enablePagination:B,onTableReady:I,hoverRowBackground:P,oddColumnBackground:T,oddEvenRowBackground:k}=e,$=u(e,["columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","enableColumnEditorInitOpen","enablePagination","onTableReady","hoverRowBackground","oddColumnBackground","oddEvenRowBackground"]),H=v(e);r.pruneRendererCaches(s(H));const L=Object.assign(Object.assign({},$),{rows:i(o),columns:H.map(e=>b(e,r)),enableColumnEditor:A,enableColumnEditorInitOpen:j,enablePagination:B,onTableReady:I,hoverRowBackground:P,oddColumnBackground:T,oddEvenRowBackground:k,onRendererHostDiscard:r.disposeHost});return E&&(L.onColumnOrderChange=e=>E(e)),O&&(L.onColumnWidthChange=e=>O(e)),S&&(L.onHeaderEdit=(e,t)=>S(e,t)),_&&(L.onColumnSelect=e=>_(e)),void 0!==w&&(null===w?L.tableEmptyStateRenderer=null:"string"==typeof w||w instanceof HTMLElement?L.tableEmptyStateRenderer=w:R(w)&&(L.tableEmptyStateRenderer=function(e,r){const o=document.createElement("div"),s=t(r,{target:o,props:{}});return e.register(o,()=>{n(s)}),o}(r,w))),void 0!==l&&(L.footerRenderer="function"==typeof l&&l.length>=2?p(r,l):l),void 0!==c&&(L.emptyStateRenderer="function"==typeof c&&c.length>=2?p(r,c):c),void 0!==d&&(L.errorStateRenderer="function"==typeof d&&d.length>=2?p(r,d):d),void 0!==a&&(L.loadingStateRenderer="function"==typeof a&&a.length>=2?p(r,a):a),void 0!==g&&(L.headerDropdown=p(r,g)),void 0!==m&&(L.columnEditorConfig=function(e,t){const{rowRenderer:n,customRenderer:r}=e,o=u(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),n?{rowRenderer:f(t,n)}:{}),r?{customRenderer:p(t,r)}:{})}(m,r)),void 0!==y&&(L.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:R(r)&&(t[n]=h(r,{})));return t}(y)),void 0!==C&&(L.rowButtons=C.map(e=>p(r,e))),L}"function"==typeof SuppressedError&&SuppressedError;const w="data-st-mount-id";class C{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(w);null!==n&&t.push(n),e.querySelectorAll(`[${w}]`).forEach(e=>{const n=e.getAttribute(w);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(w,n),this.entries.set(n,t)}isRegistered(e){const t=e.getAttribute(w);return null!==t&&this.entries.has(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 E=e.from_html("<div></div>");function O(t,n){const s=e.legacy_rest_props(n,["children","$$slots","$$events","$$legacy"]),i=e.legacy_rest_props(s,["getAPI","rows","columns"]);e.push(n,!1);let a=e.prop(n,"rows",8),u=e.prop(n,"columns",8,void 0),g=e.mutable_source(),p=e.mutable_source(null);const m=new C;let f=e.mutable_source(void 0),h=e.mutable_source(void 0),R=e.mutable_source(!1),b=!1;function w(t){var n,r;e.get(p)&&(t?null===(n=e.get(p).refitAutoSizeColumns)||void 0===n||n.call(e.get(p)):!b&&m.size>0&&(b=!0,null===(r=e.get(p).refitAutoSizeColumns)||void 0===r||r.call(e.get(p))))}function O(){var t;return null!==(t=null===e.get(p)||void 0===e.get(p)?void 0:e.get(p).getAPI())&&void 0!==t?t:null}r(()=>{const t=Object.assign({rows:a(),columns:u()},i);e.set(p,new l(e.get(g),y(t,m))),e.get(p).mount(),e.set(f,v(t)),e.set(h,a()),e.set(R,Boolean(t.isLoading)),w(!1)}),o(()=>{null===e.get(p)||void 0===e.get(p)||e.get(p).destroy(),e.set(p,null),e.set(f,void 0),e.set(h,void 0),m.clear()}),e.legacy_pre_effect(()=>(e.get(p),e.deep_read_state(a()),e.deep_read_state(u()),e.deep_read_state(i),e.get(f),e.get(h),e.get(R)),()=>{if(e.get(p)){const t=Object.assign({rows:a(),columns:u()},i),n=y(t,m),r=Object.assign({},n),o=v(t),s=c(e.get(f),o);e.set(f,o),s&&delete r.columns;const l=d(e.get(h),a(),t.getRowId);e.set(h,a()),l&&delete r.rows;const g=Boolean(t.isLoading),b=e.get(R)&&!g;e.set(R,g),e.get(p).update(r),w(b)}}),e.legacy_pre_effect_reset();var S={getAPI:O};e.init();var _=E();return e.bind_this(_,t=>e.set(g,t),()=>e.get(g)),e.append(t,_),e.bind_prop(n,"getAPI",O),e.pop(S)}function S(e){return t(O,e)}export{O as SimpleTable,S as mountSimpleTable};
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,asRows as i,SimpleTableVanilla as l,headersStructurallyEqual as c,rowsShallowUnchanged as a}from"simple-table-core";export{PIVOT_ACCESSOR_PREFIX,PIVOT_BLANK_LABEL,PIVOT_IS_TOTAL_KEY,asRows,buildPivotAccessor,buildPivotRowTotalAccessor,pivotRows}from"simple-table-core";import{createClassComponent as d}from"svelte/legacy";function u(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"==typeof SuppressedError&&SuppressedError;const p=Symbol.for("simple-table.rendererGeneration");function g(e,t,n){return d({component:e,target:t,props:n,intro:!1})}function m(e,r){return o=>{const s=document.createElement("div"),i=t(r,{target:s,props:o});return e.register(s,()=>{n(i)}),s}}function f(e,r,o,s){const i="cell"===o?e.cellRendererCache:e.headerRendererCache,l=i.get(r);if(l){if("cell"===o&&l.component!==s){l.component=s;const e=l.wrapped[p];l.wrapped[p]=("number"==typeof e?e:0)+1}else l.component=s;return l.wrapped}const c={component:s,wrapped:null};if("header"===o){let t=null,n=null,o=null;const s=r=>{const s=c.component;return t&&n&&e.isRegistered(t)&&o===s?(n.$set(r),t):(t&&e.isRegistered(t)&&e.disposeHost(t),t=document.createElement("div"),n=g(s,t,r),o=s,e.register(t,()=>{null==n||n.$destroy(),n=null,o=null,t=null}),t)};return c.wrapped=s,i.set(r,c),s}const a=r=>{const o=document.createElement("div"),s=t(c.component,{target:o,props:r});return e.register(o,()=>{n(s)}),o};return c.wrapped=a,a[p]=0,i.set(r,c),a}function h(e,t){const n=new Map;return r=>{const o=String(r.accessor),s=n.get(o);if(s&&e.isRegistered(s.host))return s.instance.$set(r),s.host;const i=document.createElement("div"),l=g(t,i,r);return e.register(i,()=>{l.$destroy(),n.delete(o)}),n.set(o,{host:i,instance:l}),i}}function R(e,r={}){const o=document.createElement("div"),s=t(e,{target:o,props:r}),i=o.innerHTML;return n(s),i}function b(e){return"function"==typeof e}function v(e,t){const{cellRenderer:n,headerRenderer:r,children:o,nestedTable:s}=e,i=u(e,["cellRenderer","headerRenderer","children","nestedTable"]),l=String(e.accessor),c=Object.assign({},i);if(n&&(c.cellRenderer="function"==typeof n&&n.length>=2?f(t,l,"cell",n):n),r&&(c.headerRenderer="function"==typeof r&&r.length>=2?f(t,l,"header",r):r),o&&(c.children=o.map(e=>v(e,t))),s){const e=Object.assign(Object.assign({},s),{rows:[]});c.nestedTable=w(e,t)}return c}function y(e){const t=e.columns;if(!t)throw new Error("SimpleTable requires `columns`");return t}function w(e,r){const{rows:o,footerRenderer:l,emptyStateRenderer:c,errorStateRenderer:a,loadingStateRenderer:d,headerDropdown:p,columnEditorConfig:g,icons:f,tableEmptyStateRenderer:w,rowButtons:C,onColumnOrderChange:E,onColumnWidthChange:O,onHeaderEdit:S,onColumnSelect:_,enableColumnEditor:A,enableColumnEditorInitOpen:j,enablePagination:B,onTableReady:I,hoverRowBackground:P,oddColumnBackground:T,oddEvenRowBackground:k}=e,$=u(e,["columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","enableColumnEditorInitOpen","enablePagination","onTableReady","hoverRowBackground","oddColumnBackground","oddEvenRowBackground"]),H=y(e);r.pruneRendererCaches(s(H));const L=Object.assign(Object.assign({},$),{rows:i(o),columns:H.map(e=>v(e,r)),enableColumnEditor:A,enableColumnEditorInitOpen:j,enablePagination:B,onTableReady:I,hoverRowBackground:P,oddColumnBackground:T,oddEvenRowBackground:k,onRendererHostDiscard:r.disposeHost});return E&&(L.onColumnOrderChange=e=>E(e)),O&&(L.onColumnWidthChange=e=>O(e)),S&&(L.onHeaderEdit=(e,t)=>S(e,t)),_&&(L.onColumnSelect=e=>_(e)),void 0!==w&&(null===w?L.tableEmptyStateRenderer=null:"string"==typeof w||w instanceof HTMLElement?L.tableEmptyStateRenderer=w:b(w)&&(L.tableEmptyStateRenderer=function(e,r){const o=document.createElement("div"),s=t(r,{target:o,props:{}});return e.register(o,()=>{n(s)}),o}(r,w))),void 0!==l&&(L.footerRenderer="function"==typeof l&&l.length>=2?m(r,l):l),void 0!==c&&(L.emptyStateRenderer="function"==typeof c&&c.length>=2?m(r,c):c),void 0!==a&&(L.errorStateRenderer="function"==typeof a&&a.length>=2?m(r,a):a),void 0!==d&&(L.loadingStateRenderer="function"==typeof d&&d.length>=2?m(r,d):d),void 0!==p&&(L.headerDropdown=m(r,p)),void 0!==g&&(L.columnEditorConfig=function(e,t){const{rowRenderer:n,customRenderer:r}=e,o=u(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),n?{rowRenderer:h(t,n)}:{}),r?{customRenderer:m(t,r)}:{})}(g,r)),void 0!==f&&(L.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:b(r)&&(t[n]=R(r,{})));return t}(f)),void 0!==C&&(L.rowButtons=C.map(e=>m(r,e))),L}const C="data-st-mount-id";class E{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(C);null!==n&&t.push(n),e.querySelectorAll(`[${C}]`).forEach(e=>{const n=e.getAttribute(C);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(C,n),this.entries.set(n,t)}isRegistered(e){const t=e.getAttribute(C);return null!==t&&this.entries.has(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 O=e.from_html("<div></div>");function S(t,n){const s=e.legacy_rest_props(n,["children","$$slots","$$events","$$legacy"]),i=e.legacy_rest_props(s,["getAPI","rows","columns"]);e.push(n,!1);let d=e.prop(n,"rows",8),u=e.prop(n,"columns",8,void 0),p=e.mutable_source(),g=e.mutable_source(null);const m=new E;let f=e.mutable_source(void 0),h=e.mutable_source(void 0),R=e.mutable_source(!1),b=!1;function v(t){var n,r;e.get(g)&&(t?null===(n=e.get(g).refitAutoSizeColumns)||void 0===n||n.call(e.get(g)):!b&&m.size>0&&(b=!0,null===(r=e.get(g).refitAutoSizeColumns)||void 0===r||r.call(e.get(g))))}function C(){var t;return null!==(t=null===e.get(g)||void 0===e.get(g)?void 0:e.get(g).getAPI())&&void 0!==t?t:null}r(()=>{const t=Object.assign({rows:d(),columns:u()},i);e.set(g,new l(e.get(p),w(t,m))),e.get(g).mount(),e.set(f,y(t)),e.set(h,d()),e.set(R,Boolean(t.isLoading)),v(!1)}),o(()=>{null===e.get(g)||void 0===e.get(g)||e.get(g).destroy(),e.set(g,null),e.set(f,void 0),e.set(h,void 0),m.clear()}),e.legacy_pre_effect(()=>(e.get(g),e.deep_read_state(d()),e.deep_read_state(u()),e.deep_read_state(i),e.get(f),e.get(h),e.get(R)),()=>{if(e.get(g)){const t=Object.assign({rows:d(),columns:u()},i),n=w(t,m),r=Object.assign({},n),o=y(t),s=c(e.get(f),o);e.set(f,o),s&&delete r.columns;const l=a(e.get(h),d(),t.getRowId);e.set(h,d()),l&&delete r.rows;const p=Boolean(t.isLoading),b=e.get(R)&&!p;e.set(R,p),e.get(g).update(r),v(b)}}),e.legacy_pre_effect_reset();var S={getAPI:C};e.init();var _=O();return e.bind_this(_,t=>e.set(p,t),()=>e.get(p)),e.append(t,_),e.bind_prop(n,"getAPI",C),e.pop(S)}function _(e){return t(S,e)}export{S as SimpleTable,_ as mountSimpleTable};
2
2
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/SimpleTable.svelte"],"sourcesContent":["<script lang=\"ts\" generics=\"TData extends Record<string, any> = Record<string, any>\">\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 // Prefer typed `rows` / `columns` (`SvelteColumnDef<MyRow>`) so TData flows into\n // callbacks. Use bind:this={tableRef} for TableAPI: tableRef.getAPI()?.sort(...)\n\n type $$Props = SimpleTableSvelteProps<TData>;\n\n export let rows: $$Props[\"rows\"];\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 syncedColumns: ReadonlyArray<\n NonNullable<$$Props[\"columns\"]>[number]\n > | undefined = undefined;\n let syncedRows: $$Props[\"rows\"] | undefined = undefined;\n let wasLoading = false;\n let didInitialAutoSize = false;\n\n function maybeRefitAutoSizeColumns(leftLoading: boolean) {\n if (!instance) return;\n if (leftLoading) {\n instance.refitAutoSizeColumns?.();\n return;\n }\n // Svelte mounts are synchronous for template DOM, so custom renderer hosts\n // are already present after the first paint that registered mounts (mirrors\n // Vue/React first-portals refit).\n if (!didInitialAutoSize && registry.size > 0) {\n didInitialAutoSize = true;\n instance.refitAutoSizeColumns?.();\n }\n }\n\n onMount(() => {\n const props = { rows, columns, ...$$restProps } as SimpleTableSvelteProps<TData>;\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, registry),\n ) as unknown as TableInstance;\n instance.mount();\n syncedColumns = resolveSvelteColumns(props);\n syncedRows = rows;\n wasLoading = Boolean(props.isLoading);\n maybeRefitAutoSizeColumns(false);\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n syncedColumns = 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, columns, ...$$restProps } as SimpleTableSvelteProps<TData>;\n const fullConfig = buildVanillaConfig(props, registry);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n const resolvedColumns = resolveSvelteColumns(props);\n\n const headersUnchanged = headersStructurallyEqual(syncedColumns, resolvedColumns);\n syncedColumns = resolvedColumns;\n if (headersUnchanged) {\n delete patch.columns;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n syncedRows as ReadonlyArray<object> | undefined,\n rows as ReadonlyArray<object>,\n props.getRowId as Parameters<typeof rowsShallowUnchanged>[2],\n );\n syncedRows = rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n const isLoading = Boolean(props.isLoading);\n const leftLoading = wasLoading && !isLoading;\n wasLoading = isLoading;\n\n instance.update(patch);\n maybeRefitAutoSizeColumns(leftLoading);\n }\n\n /** Expose the TableAPI for consumers using bind:this. */\n export function getAPI(): TableAPI<TData> | null {\n return (instance?.getAPI() as TableAPI<TData> | undefined) ?? null;\n }\n</script>\n\n<div bind:this={container}></div>\n"],"names":["div","root","$$value","$","set","container","get"],"mappings":"s7OA4GCA,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\" generics=\"TData extends Record<string, any> = Record<string, any>\">\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 // Prefer typed `rows` / `columns` (`SvelteColumnDef<MyRow>`) so TData flows into\n // callbacks. Use bind:this={tableRef} for TableAPI: tableRef.getAPI()?.sort(...)\n\n type $$Props = SimpleTableSvelteProps<TData>;\n\n export let rows: $$Props[\"rows\"];\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 syncedColumns: ReadonlyArray<\n NonNullable<$$Props[\"columns\"]>[number]\n > | undefined = undefined;\n let syncedRows: $$Props[\"rows\"] | undefined = undefined;\n let wasLoading = false;\n let didInitialAutoSize = false;\n\n function maybeRefitAutoSizeColumns(leftLoading: boolean) {\n if (!instance) return;\n if (leftLoading) {\n instance.refitAutoSizeColumns?.();\n return;\n }\n // Svelte mounts are synchronous for template DOM, so custom renderer hosts\n // are already present after the first paint that registered mounts (mirrors\n // Vue/React first-portals refit).\n if (!didInitialAutoSize && registry.size > 0) {\n didInitialAutoSize = true;\n instance.refitAutoSizeColumns?.();\n }\n }\n\n onMount(() => {\n const props = { rows, columns, ...$$restProps } as SimpleTableSvelteProps<TData>;\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, registry),\n ) as unknown as TableInstance;\n instance.mount();\n syncedColumns = resolveSvelteColumns(props);\n syncedRows = rows;\n wasLoading = Boolean(props.isLoading);\n maybeRefitAutoSizeColumns(false);\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n syncedColumns = 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, columns, ...$$restProps } as SimpleTableSvelteProps<TData>;\n const fullConfig = buildVanillaConfig(props, registry);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n const resolvedColumns = resolveSvelteColumns(props);\n\n const headersUnchanged = headersStructurallyEqual(syncedColumns, resolvedColumns);\n syncedColumns = resolvedColumns;\n if (headersUnchanged) {\n delete patch.columns;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n syncedRows as ReadonlyArray<object> | undefined,\n rows as ReadonlyArray<object>,\n props.getRowId as Parameters<typeof rowsShallowUnchanged>[2],\n );\n syncedRows = rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n const isLoading = Boolean(props.isLoading);\n const leftLoading = wasLoading && !isLoading;\n wasLoading = isLoading;\n\n instance.update(patch);\n maybeRefitAutoSizeColumns(leftLoading);\n }\n\n /** Expose the TableAPI for consumers using bind:this. */\n export function getAPI(): TableAPI<TData> | null {\n return (instance?.getAPI() as TableAPI<TData> | undefined) ?? null;\n }\n</script>\n\n<div bind:this={container}></div>\n"],"names":["div","root","$$value","$","set","container","get"],"mappings":"omPA4GCA,EAAGC,uBAAHD,EAAGE,GAAAC,EAAAC,IAAYC,EAASH,GAAA,IAAAC,EAAAG,IAATD,eAAfL,qCAFO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simple-table/svelte",
3
- "version": "4.1.9",
3
+ "version": "4.2.0",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/index.es.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -32,7 +32,7 @@
32
32
  "svelte": ">=5.0.0"
33
33
  },
34
34
  "dependencies": {
35
- "simple-table-core": "4.1.9"
35
+ "simple-table-core": "4.2.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@rollup/plugin-alias": "4.0.0",