@simple-table/svelte 3.9.6 → 3.9.8

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 i(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 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:a}=e,l=s(e,["cellRenderer","headerRenderer","children","nestedTable"]),c=Object.assign({},l);if(r&&(c.cellRenderer="function"==typeof r&&r.length>=2?i(t,r):r),n&&(c.headerRenderer="function"==typeof n&&n.length>=2?i(t,n):n),o&&(c.children=o.map(e=>d(e,t))),a){const e=Object.assign(Object.assign({},a),{rows:[]});c.nestedTable=u(e,t)}return c}function u(e,r){const{defaultHeaders:n,rows:o,footerRenderer:u,emptyStateRenderer:c,errorStateRenderer:f,loadingStateRenderer:p,headerDropdown:g,columnEditorConfig:m,icons:b,tableEmptyStateRenderer:h,rowButtons:y,onColumnOrderChange:v,onColumnWidthChange:O,onHeaderEdit:R,onColumnSelect:j}=e,w=s(e,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect"]),S=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},w),{rows:o,defaultHeaders:n.map(e=>d(e,r)),onRendererHostDiscard:r.disposeHost}),v?{onColumnOrderChange:e=>v(e)}:{}),O?{onColumnWidthChange:e=>O(e)}:{}),R?{onHeaderEdit:(e,t)=>R(e,t)}:{}),j?{onColumnSelect:e=>j(e)}:{});return void 0!==h&&(null===h?S.tableEmptyStateRenderer=null:"string"==typeof h||h instanceof HTMLElement?S.tableEmptyStateRenderer=h:l(h)&&(S.tableEmptyStateRenderer=function(e,r){const n=document.createElement("div"),o=t.mount(r,{target:n,props:{}});return e.register(n,()=>{t.unmount(o)}),n}(r,h))),void 0!==u&&(S.footerRenderer="function"==typeof u&&u.length>=2?i(r,u):u),void 0!==c&&(S.emptyStateRenderer="function"==typeof c&&c.length>=2?i(r,c):c),void 0!==f&&(S.errorStateRenderer="function"==typeof f&&f.length>=2?i(r,f):f),void 0!==p&&(S.loadingStateRenderer="function"==typeof p&&p.length>=2?i(r,p):p),void 0!==g&&(S.headerDropdown=i(r,g)),void 0!==m&&(S.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:i(t,r)}:{}),n?{customRenderer:i(t,n)}:{})}(m,r)),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:l(n)&&(t[r]=a(n,{})));return t}(b)),void 0!==y&&(S.rowButtons=y.map(e=>i(r,e))),S}"function"==typeof SuppressedError&&SuppressedError;const c="data-st-mount-id";class f{constructor(){this.entries=new Map,this.nextId=0,this.disposeHost=e=>{if("function"!=typeof e.getAttribute)return;const t=[],r=e.getAttribute(c);null!==r&&t.push(r),e.querySelectorAll(`[${c}]`).forEach(e=>{const r=e.getAttribute(c);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(c,r),this.entries.set(r,t)}clear(){for(const e of this.entries.values())e();this.entries.clear()}get size(){return this.entries.size}}var p=o.from_html("<div></div>");Object.defineProperty(exports,"asRows",{enumerable:!0,get:function(){return r.asRows}}),exports.SimpleTable=function(e,n){const s=o.legacy_rest_props(n,["children","$$slots","$$events","$$legacy"]),i=o.legacy_rest_props(s,["getAPI","rows","defaultHeaders"]);o.push(n,!1);let a=o.prop(n,"rows",8),l=o.prop(n,"defaultHeaders",8),d=o.mutable_source(),c=o.mutable_source(null);const g=new f;function m(){var e;return null!==(e=null===o.get(c)||void 0===o.get(c)?void 0:o.get(c).getAPI())&&void 0!==e?e:null}t.onMount(()=>{o.set(c,new r.SimpleTableVanilla(o.get(d),u(Object.assign({rows:a(),defaultHeaders:l()},i),g))),o.get(c).mount()}),t.onDestroy(()=>{null===o.get(c)||void 0===o.get(c)||o.get(c).destroy(),o.set(c,null),g.clear()}),o.legacy_pre_effect(()=>(o.get(c),o.deep_read_state(a()),o.deep_read_state(l()),o.deep_read_state(i)),()=>{o.get(c)&&o.get(c).update(u(Object.assign({rows:a(),defaultHeaders:l()},i),g))}),o.legacy_pre_effect_reset();var b={getAPI:m};o.init();var h=p();return o.bind_this(h,e=>o.set(d,e),()=>o.get(d)),o.append(e,h),o.bind_prop(n,"getAPI",m),o.pop(b)};
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 a(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 c(e,r,n,o){const s="cell"===n?e.cellRendererCache:e.headerRendererCache,a=s.get(r);if(a)return a.component=o,a.wrapped;const c={component:o,wrapped:null},i=r=>{const n=document.createElement("div"),o=t.mount(c.component,{target:n,props:r});return e.register(n,()=>{t.unmount(o)}),n};return c.wrapped=i,s.set(r,c),i}function i(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:a}=e,i=s(e,["cellRenderer","headerRenderer","children","nestedTable"]),l=String(e.accessor),p=Object.assign({},i);if(r&&(p.cellRenderer="function"==typeof r&&r.length>=2?c(t,l,"cell",r):r),n&&(p.headerRenderer="function"==typeof n&&n.length>=2?c(t,l,"header",n):n),o&&(p.children=o.map(e=>d(e,t))),a){const e=Object.assign(Object.assign({},a),{rows:[]});p.nestedTable=u(e,t)}return p}function u(e,n){const{defaultHeaders:o,rows:c,footerRenderer:u,emptyStateRenderer:p,errorStateRenderer:f,loadingStateRenderer:g,headerDropdown:h,columnEditorConfig:m,icons:b,tableEmptyStateRenderer:y,rowButtons:R,onColumnOrderChange:v,onColumnWidthChange:O,onHeaderEdit:w,onColumnSelect:C}=e,S=s(e,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect"]);n.pruneRendererCaches(r.collectHeaderAccessors(o));const j=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},S),{rows:c,defaultHeaders:o.map(e=>d(e,n)),onRendererHostDiscard:n.disposeHost}),v?{onColumnOrderChange:e=>v(e)}:{}),O?{onColumnWidthChange:e=>O(e)}:{}),w?{onHeaderEdit:(e,t)=>w(e,t)}:{}),C?{onColumnSelect:e=>C(e)}:{});return void 0!==y&&(null===y?j.tableEmptyStateRenderer=null:"string"==typeof y||y instanceof HTMLElement?j.tableEmptyStateRenderer=y:l(y)&&(j.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,y))),void 0!==u&&(j.footerRenderer="function"==typeof u&&u.length>=2?a(n,u):u),void 0!==p&&(j.emptyStateRenderer="function"==typeof p&&p.length>=2?a(n,p):p),void 0!==f&&(j.errorStateRenderer="function"==typeof f&&f.length>=2?a(n,f):f),void 0!==g&&(j.loadingStateRenderer="function"==typeof g&&g.length>=2?a(n,g):g),void 0!==h&&(j.headerDropdown=a(n,h)),void 0!==m&&(j.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:a(t,r)}:{}),n?{customRenderer:a(t,n)}:{})}(m,n)),void 0!==b&&(j.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]=i(n,{})));return t}(b)),void 0!==R&&(j.rowButtons=R.map(e=>a(n,e))),j}"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,"asRows",{enumerable:!0,get:function(){return r.asRows}}),exports.SimpleTable=function(e,n){const s=o.legacy_rest_props(n,["children","$$slots","$$events","$$legacy"]),a=o.legacy_rest_props(s,["getAPI","rows","defaultHeaders"]);o.push(n,!1);let c=o.prop(n,"rows",8),i=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:c(),defaultHeaders:i()},a);o.set(d,new r.SimpleTableVanilla(o.get(l),u(e,p))),o.get(d).mount(),o.set(h,i()),o.set(m,c())}),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(c()),o.deep_read_state(i()),o.deep_read_state(a),o.get(h),o.get(m)),()=>{if(o.get(d)){const e=Object.assign({rows:c(),defaultHeaders:i()},a),t=u(e,p),n=Object.assign({},t),s=r.headersStructurallyEqual(o.get(h),i());o.set(h,i()),s&&delete n.defaultHeaders;const l=r.rowsShallowUnchanged(o.get(m),c(),e.getRowId);o.set(m,c()),l&&delete n.rows,o.get(d).update(n)}}),o.legacy_pre_effect_reset();var y={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(y)};
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 { SimpleTableVanilla } from \"simple-table-core\";\n import type { 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 onMount(() => {\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(\n { rows, defaultHeaders, ...$$restProps } as SimpleTableSvelteProps,\n registry,\n ),\n ) as unknown as TableInstance;\n instance.mount();\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n registry.clear();\n });\n\n // Reactive update: re-run whenever any prop changes.\n $: if (instance) {\n instance.update(\n buildVanillaConfig(\n { rows, defaultHeaders, ...$$restProps } as SimpleTableSvelteProps,\n registry,\n ),\n );\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":"4nKAuDCA,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 } 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":"8sMAgFCA,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{SimpleTableVanilla as s}from"simple-table-core";export{asRows}from"simple-table-core";function i(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 a(e,n){return o=>{const s=document.createElement("div"),i=t(n,{target:s,props:o});return e.register(s,()=>{r(i)}),s}}function d(e,n={}){const o=document.createElement("div"),s=t(e,{target:o,props:n}),i=o.innerHTML;return r(s),i}function l(e){return"function"==typeof e}function c(e,t){const{cellRenderer:r,headerRenderer:n,children:o,nestedTable:s}=e,d=i(e,["cellRenderer","headerRenderer","children","nestedTable"]),l=Object.assign({},d);if(r&&(l.cellRenderer="function"==typeof r&&r.length>=2?a(t,r):r),n&&(l.headerRenderer="function"==typeof n&&n.length>=2?a(t,n):n),o&&(l.children=o.map(e=>c(e,t))),s){const e=Object.assign(Object.assign({},s),{rows:[]});l.nestedTable=u(e,t)}return l}function u(e,n){const{defaultHeaders:o,rows:s,footerRenderer:u,emptyStateRenderer:p,errorStateRenderer:f,loadingStateRenderer:g,headerDropdown:m,columnEditorConfig:h,icons:b,tableEmptyStateRenderer:y,rowButtons:v,onColumnOrderChange:R,onColumnWidthChange:O,onHeaderEdit:w,onColumnSelect:S}=e,E=i(e,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect"]),_=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},E),{rows:s,defaultHeaders:o.map(e=>c(e,n)),onRendererHostDiscard:n.disposeHost}),R?{onColumnOrderChange:e=>R(e)}:{}),O?{onColumnWidthChange:e=>O(e)}:{}),w?{onHeaderEdit:(e,t)=>w(e,t)}:{}),S?{onColumnSelect:e=>S(e)}:{});return void 0!==y&&(null===y?_.tableEmptyStateRenderer=null:"string"==typeof y||y instanceof HTMLElement?_.tableEmptyStateRenderer=y:l(y)&&(_.tableEmptyStateRenderer=function(e,n){const o=document.createElement("div"),s=t(n,{target:o,props:{}});return e.register(o,()=>{r(s)}),o}(n,y))),void 0!==u&&(_.footerRenderer="function"==typeof u&&u.length>=2?a(n,u):u),void 0!==p&&(_.emptyStateRenderer="function"==typeof p&&p.length>=2?a(n,p):p),void 0!==f&&(_.errorStateRenderer="function"==typeof f&&f.length>=2?a(n,f):f),void 0!==g&&(_.loadingStateRenderer="function"==typeof g&&g.length>=2?a(n,g):g),void 0!==m&&(_.headerDropdown=a(n,m)),void 0!==h&&(_.columnEditorConfig=function(e,t){const{rowRenderer:r,customRenderer:n}=e,o=i(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),r?{rowRenderer:a(t,r)}:{}),n?{customRenderer:a(t,n)}:{})}(h,n)),void 0!==b&&(_.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]=d(n,{})));return t}(b)),void 0!==v&&(_.rowButtons=v.map(e=>a(n,e))),_}"function"==typeof SuppressedError&&SuppressedError;const p="data-st-mount-id";class f{constructor(){this.entries=new Map,this.nextId=0,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(){for(const e of this.entries.values())e();this.entries.clear()}get size(){return this.entries.size}}var g=e.from_html("<div></div>");function m(t,r){const i=e.legacy_rest_props(r,["children","$$slots","$$events","$$legacy"]),a=e.legacy_rest_props(i,["getAPI","rows","defaultHeaders"]);e.push(r,!1);let d=e.prop(r,"rows",8),l=e.prop(r,"defaultHeaders",8),c=e.mutable_source(),p=e.mutable_source(null);const m=new f;function h(){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}n(()=>{e.set(p,new s(e.get(c),u(Object.assign({rows:d(),defaultHeaders:l()},a),m))),e.get(p).mount()}),o(()=>{null===e.get(p)||void 0===e.get(p)||e.get(p).destroy(),e.set(p,null),m.clear()}),e.legacy_pre_effect(()=>(e.get(p),e.deep_read_state(d()),e.deep_read_state(l()),e.deep_read_state(a)),()=>{e.get(p)&&e.get(p).update(u(Object.assign({rows:d(),defaultHeaders:l()},a),m))}),e.legacy_pre_effect_reset();var b={getAPI:h};e.init();var y=g();return e.bind_this(y,t=>e.set(c,t),()=>e.get(c)),e.append(t,y),e.bind_prop(r,"getAPI",h),e.pop(b)}export{m 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 r,onMount as n,onDestroy as o}from"svelte";import{collectHeaderAccessors as s,SimpleTableVanilla as a,headersStructurallyEqual as d,rowsShallowUnchanged as i}from"simple-table-core";export{asRows}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,d=a.get(n);if(d)return d.component=s,d.wrapped;const i={component:s,wrapped:null},c=n=>{const o=document.createElement("div"),s=t(i.component,{target:o,props:n});return e.register(o,()=>{r(s)}),o};return i.wrapped=c,a.set(n,i),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"]),d=String(e.accessor),i=Object.assign({},a);if(r&&(i.cellRenderer="function"==typeof r&&r.length>=2?u(t,d,"cell",r):r),n&&(i.headerRenderer="function"==typeof n&&n.length>=2?u(t,d,"header",n):n),o&&(i.children=o.map(e=>g(e,t))),s){const e=Object.assign(Object.assign({},s),{rows:[]});i.nestedTable=h(e,t)}return i}function h(e,n){const{defaultHeaders:o,rows:a,footerRenderer:d,emptyStateRenderer:i,errorStateRenderer:u,loadingStateRenderer:h,headerDropdown:m,columnEditorConfig:R,icons:b,tableEmptyStateRenderer:y,rowButtons:v,onColumnOrderChange:w,onColumnWidthChange:C,onHeaderEdit:O,onColumnSelect:S}=e,E=c(e,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","headerDropdown","columnEditorConfig","icons","tableEmptyStateRenderer","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect"]);n.pruneRendererCaches(s(o));const _=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}),w?{onColumnOrderChange:e=>w(e)}:{}),C?{onColumnWidthChange:e=>C(e)}:{}),O?{onHeaderEdit:(e,t)=>O(e,t)}:{}),S?{onColumnSelect:e=>S(e)}:{});return void 0!==y&&(null===y?_.tableEmptyStateRenderer=null:"string"==typeof y||y instanceof HTMLElement?_.tableEmptyStateRenderer=y:f(y)&&(_.tableEmptyStateRenderer=function(e,n){const o=document.createElement("div"),s=t(n,{target:o,props:{}});return e.register(o,()=>{r(s)}),o}(n,y))),void 0!==d&&(_.footerRenderer="function"==typeof d&&d.length>=2?l(n,d):d),void 0!==i&&(_.emptyStateRenderer="function"==typeof i&&i.length>=2?l(n,i):i),void 0!==u&&(_.errorStateRenderer="function"==typeof u&&u.length>=2?l(n,u):u),void 0!==h&&(_.loadingStateRenderer="function"==typeof h&&h.length>=2?l(n,h):h),void 0!==m&&(_.headerDropdown=l(n,m)),void 0!==R&&(_.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&&(_.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!==v&&(_.rowButtons=v.map(e=>l(n,e))),_}"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 y(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),y=e.mutable_source(void 0);function v(){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(y,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(y,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(y)),()=>{if(e.get(f)){const t=Object.assign({rows:l(),defaultHeaders:u()},c),r=h(t,g),n=Object.assign({},r),o=d(e.get(m),u());e.set(m,u()),o&&delete n.defaultHeaders;const s=i(e.get(y),l(),t.getRowId);e.set(y,l()),s&&delete n.rows,e.get(f).update(n)}}),e.legacy_pre_effect_reset();var w={getAPI:v};e.init();var C=b();return e.bind_this(C,t=>e.set(p,t),()=>e.get(p)),e.append(t,C),e.bind_prop(r,"getAPI",v),e.pop(w)}export{y 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 { SimpleTableVanilla } from \"simple-table-core\";\n import type { 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 onMount(() => {\n instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(\n { rows, defaultHeaders, ...$$restProps } as SimpleTableSvelteProps,\n registry,\n ),\n ) as unknown as TableInstance;\n instance.mount();\n });\n\n onDestroy(() => {\n instance?.destroy();\n instance = null;\n registry.clear();\n });\n\n // Reactive update: re-run whenever any prop changes.\n $: if (instance) {\n instance.update(\n buildVanillaConfig(\n { rows, defaultHeaders, ...$$restProps } as SimpleTableSvelteProps,\n registry,\n ),\n );\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":"osJAuDCA,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 } 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":"uxLAgFCA,EAAGC,uBAAHD,EAAGE,GAAAC,EAAAC,IAAYC,EAASH,GAAA,IAAAC,EAAAG,IAATD,eAAfL,qCAFO"}
@@ -1,6 +1,14 @@
1
+ export type CachedRendererSlot<T = unknown> = {
2
+ component: T;
3
+ wrapped: unknown;
4
+ };
1
5
  export declare class MountRegistry {
2
6
  private entries;
3
7
  private nextId;
8
+ /** Per-accessor cached cellRenderer wrappers. */
9
+ readonly cellRendererCache: Map<string, CachedRendererSlot<unknown>>;
10
+ /** Per-accessor cached headerRenderer wrappers. */
11
+ readonly headerRendererCache: Map<string, CachedRendererSlot<unknown>>;
4
12
  /**
5
13
  * Register a dispose callback for a mount container. Tags the container so
6
14
  * {@link disposeHost} can find it when core discards an ancestor host.
@@ -13,6 +21,10 @@ export declare class MountRegistry {
13
21
  disposeHost: (host: HTMLElement) => void;
14
22
  /** Dispose every tracked mount (used on table teardown). */
15
23
  clear(): void;
24
+ /**
25
+ * Drop cached wrappers for accessors no longer present in the header tree.
26
+ */
27
+ pruneRendererCaches(liveAccessors: ReadonlySet<string>): void;
16
28
  /** Test helper — number of live mounts. */
17
29
  get size(): number;
18
30
  }
@@ -7,6 +7,11 @@ import type { MountRegistry } from "../MountRegistry";
7
7
  * (including any `<svelte:teleport>` / floating UI) when the host is discarded.
8
8
  */
9
9
  export declare function wrapSvelteRenderer<P extends Record<string, any>>(registry: MountRegistry, component: Component<P>): (props: P) => HTMLElement;
10
+ /**
11
+ * Like {@link wrapSvelteRenderer}, but reuses one wrapper per accessor so
12
+ * unstable column rebuilds keep a stable function identity on HeaderObject.
13
+ */
14
+ export declare function wrapCachedSvelteRenderer<P extends Record<string, any>>(registry: MountRegistry, accessor: string, kind: "cell" | "header", component: Component<P>): (props: P) => HTMLElement;
10
15
  /** Mount a Svelte component into a div for vanilla-only slots (e.g. table empty state). */
11
16
  export declare function wrapSvelteStatic(registry: MountRegistry, component: Component): HTMLElement;
12
17
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simple-table/svelte",
3
- "version": "3.9.6",
3
+ "version": "3.9.8",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/index.es.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "svelte": ">=4.0.0"
29
29
  },
30
30
  "dependencies": {
31
- "simple-table-core": "3.9.6"
31
+ "simple-table-core": "3.9.8"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@rollup/plugin-alias": "4.0.0",