@simple-table/react 4.0.1 → 4.0.3
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 +1 -1
- package/dist/index.es.js +1 -1
- package/dist/types/{react/src/PortalBridge.d.ts → PortalBridge.d.ts} +96 -96
- package/dist/types/{react/src/SimpleTable.d.ts → SimpleTable.d.ts} +27 -27
- package/dist/types/buildVanillaConfig.d.ts +6 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/{react/src/types.d.ts → types.d.ts} +111 -103
- package/dist/types/{react/src/utils → utils}/ImperativeDomSlot.d.ts +46 -46
- package/dist/types/{react/src/utils → utils}/headersEqual.d.ts +6 -6
- package/dist/types/{react/src/utils → utils}/rowsEqual.d.ts +6 -6
- package/dist/types/{react/src/utils → utils}/wrapReactRenderer.d.ts +95 -95
- package/package.json +12 -7
- package/styles.css.d.ts +1 -0
- package/dist/types/core/src/consts/column-constraints.d.ts +0 -58
- package/dist/types/core/src/consts/general-consts.d.ts +0 -32
- package/dist/types/core/src/core/SimpleTableVanilla.d.ts +0 -369
- package/dist/types/core/src/core/api/TableAPIImpl.d.ts +0 -78
- package/dist/types/core/src/core/dom/DOMManager.d.ts +0 -52
- package/dist/types/core/src/core/initialization/TableInitializer.d.ts +0 -34
- package/dist/types/core/src/core/rendering/RenderOrchestrator.d.ts +0 -172
- package/dist/types/core/src/core/rendering/SectionRenderer.d.ts +0 -119
- package/dist/types/core/src/core/rendering/TableRenderer.d.ts +0 -120
- package/dist/types/core/src/hooks/ariaAnnouncements.d.ts +0 -37
- package/dist/types/core/src/hooks/contentHeight.d.ts +0 -29
- package/dist/types/core/src/hooks/expandedDepths.d.ts +0 -69
- package/dist/types/core/src/hooks/handleOutsideClick.d.ts +0 -50
- package/dist/types/core/src/hooks/previousValue.d.ts +0 -30
- package/dist/types/core/src/hooks/scrollbarVisibility.d.ts +0 -65
- package/dist/types/core/src/hooks/scrollbarWidth.d.ts +0 -52
- package/dist/types/core/src/hooks/useAggregatedRows.d.ts +0 -14
- package/dist/types/core/src/hooks/useQuickFilter.d.ts +0 -14
- package/dist/types/core/src/hooks/windowResize.d.ts +0 -31
- package/dist/types/core/src/icons/AngleDownIcon.d.ts +0 -1
- package/dist/types/core/src/icons/AngleLeftIcon.d.ts +0 -1
- package/dist/types/core/src/icons/AngleRightIcon.d.ts +0 -1
- package/dist/types/core/src/icons/AngleUpIcon.d.ts +0 -1
- package/dist/types/core/src/icons/AscIcon.d.ts +0 -1
- package/dist/types/core/src/icons/CheckIcon.d.ts +0 -1
- package/dist/types/core/src/icons/DescIcon.d.ts +0 -1
- package/dist/types/core/src/icons/DragIcon.d.ts +0 -1
- package/dist/types/core/src/icons/FilterIcon.d.ts +0 -1
- package/dist/types/core/src/icons/SelectIcon.d.ts +0 -1
- package/dist/types/core/src/icons/index.d.ts +0 -14
- package/dist/types/core/src/index.d.ts +0 -58
- package/dist/types/core/src/managers/AnimationCoordinator.d.ts +0 -356
- package/dist/types/core/src/managers/AutoScaleManager.d.ts +0 -33
- package/dist/types/core/src/managers/DimensionManager.d.ts +0 -84
- package/dist/types/core/src/managers/DragHandlerManager.d.ts +0 -44
- package/dist/types/core/src/managers/FilterManager.d.ts +0 -36
- package/dist/types/core/src/managers/PivotManager.d.ts +0 -35
- package/dist/types/core/src/managers/RowManager.d.ts +0 -56
- package/dist/types/core/src/managers/RowSelectionManager.d.ts +0 -72
- package/dist/types/core/src/managers/ScrollManager.d.ts +0 -38
- package/dist/types/core/src/managers/SectionScrollController.d.ts +0 -74
- package/dist/types/core/src/managers/SelectionManager/SelectionManager.d.ts +0 -251
- package/dist/types/core/src/managers/SelectionManager/index.d.ts +0 -2
- package/dist/types/core/src/managers/SelectionManager/keyboardUtils.d.ts +0 -7
- package/dist/types/core/src/managers/SelectionManager/mouseUtils.d.ts +0 -16
- package/dist/types/core/src/managers/SelectionManager/selectionRangeUtils.d.ts +0 -7
- package/dist/types/core/src/managers/SelectionManager/types.d.ts +0 -28
- package/dist/types/core/src/managers/SortManager.d.ts +0 -42
- package/dist/types/core/src/types/AggregationTypes.d.ts +0 -8
- package/dist/types/core/src/types/AnimationsConfig.d.ts +0 -16
- package/dist/types/core/src/types/BoundingBox.d.ts +0 -11
- package/dist/types/core/src/types/Cell.d.ts +0 -7
- package/dist/types/core/src/types/CellChangeProps.d.ts +0 -9
- package/dist/types/core/src/types/CellClickProps.d.ts +0 -11
- package/dist/types/core/src/types/CellRendererProps.d.ts +0 -32
- package/dist/types/core/src/types/CellValue.d.ts +0 -2
- package/dist/types/core/src/types/ColumnEditorConfig.d.ts +0 -42
- package/dist/types/core/src/types/ColumnEditorCustomRendererProps.d.ts +0 -14
- package/dist/types/core/src/types/ColumnEditorRowRendererProps.d.ts +0 -39
- package/dist/types/core/src/types/ColumnVisibilityTypes.d.ts +0 -4
- package/dist/types/core/src/types/CustomTheme.d.ts +0 -28
- package/dist/types/core/src/types/DragHandlerProps.d.ts +0 -14
- package/dist/types/core/src/types/EnumOption.d.ts +0 -5
- package/dist/types/core/src/types/FilterTypes.d.ts +0 -31
- package/dist/types/core/src/types/FlattenedHeader.d.ts +0 -10
- package/dist/types/core/src/types/FooterPosition.d.ts +0 -3
- package/dist/types/core/src/types/FooterRendererProps.d.ts +0 -17
- package/dist/types/core/src/types/GenerateRowIdParams.d.ts +0 -11
- package/dist/types/core/src/types/GetRowId.d.ts +0 -16
- package/dist/types/core/src/types/HandleResizeStartProps.d.ts +0 -25
- package/dist/types/core/src/types/HeaderDropdownProps.d.ts +0 -14
- package/dist/types/core/src/types/HeaderObject.d.ts +0 -133
- package/dist/types/core/src/types/HeaderRendererProps.d.ts +0 -17
- package/dist/types/core/src/types/IconsConfig.d.ts +0 -19
- package/dist/types/core/src/types/OnNextPage.d.ts +0 -2
- package/dist/types/core/src/types/OnRowGroupExpandProps.d.ts +0 -16
- package/dist/types/core/src/types/OnSortProps.d.ts +0 -3
- package/dist/types/core/src/types/PanelSection.d.ts +0 -1
- package/dist/types/core/src/types/Pinned.d.ts +0 -1
- package/dist/types/core/src/types/PinnedSectionsState.d.ts +0 -6
- package/dist/types/core/src/types/PivotTypes.d.ts +0 -37
- package/dist/types/core/src/types/QuickFilterTypes.d.ts +0 -21
- package/dist/types/core/src/types/Row.d.ts +0 -3
- package/dist/types/core/src/types/RowButton.d.ts +0 -6
- package/dist/types/core/src/types/RowId.d.ts +0 -1
- package/dist/types/core/src/types/RowSelectionChangeProps.d.ts +0 -7
- package/dist/types/core/src/types/RowSelectionMode.d.ts +0 -8
- package/dist/types/core/src/types/RowState.d.ts +0 -12
- package/dist/types/core/src/types/RowStateRendererProps.d.ts +0 -18
- package/dist/types/core/src/types/SharedTableProps.d.ts +0 -24
- package/dist/types/core/src/types/SimpleTableConfig.d.ts +0 -124
- package/dist/types/core/src/types/SimpleTableProps.d.ts +0 -125
- package/dist/types/core/src/types/SortColumn.d.ts +0 -8
- package/dist/types/core/src/types/TableAPI.d.ts +0 -82
- package/dist/types/core/src/types/TableHeaderProps.d.ts +0 -17
- package/dist/types/core/src/types/TableRow.d.ts +0 -39
- package/dist/types/core/src/types/TableRowProps.d.ts +0 -29
- package/dist/types/core/src/types/Theme.d.ts +0 -2
- package/dist/types/core/src/types/UpdateCellProps.d.ts +0 -8
- package/dist/types/core/src/utils/accordionAnimation.d.ts +0 -25
- package/dist/types/core/src/utils/aggregationUtils.d.ts +0 -7
- package/dist/types/core/src/utils/ariaRowOwnership.d.ts +0 -37
- package/dist/types/core/src/utils/asRows.d.ts +0 -7
- package/dist/types/core/src/utils/bodyCell/cellLiveRef.d.ts +0 -9
- package/dist/types/core/src/utils/bodyCell/content.d.ts +0 -5
- package/dist/types/core/src/utils/bodyCell/editing.d.ts +0 -4
- package/dist/types/core/src/utils/bodyCell/editors/booleanDropdown.d.ts +0 -2
- package/dist/types/core/src/utils/bodyCell/editors/datePicker.d.ts +0 -2
- package/dist/types/core/src/utils/bodyCell/editors/dropdown.d.ts +0 -18
- package/dist/types/core/src/utils/bodyCell/editors/enumDropdown.d.ts +0 -2
- package/dist/types/core/src/utils/bodyCell/eventTracking.d.ts +0 -3
- package/dist/types/core/src/utils/bodyCell/expansion.d.ts +0 -12
- package/dist/types/core/src/utils/bodyCell/selection.d.ts +0 -7
- package/dist/types/core/src/utils/bodyCell/styling.d.ts +0 -11
- package/dist/types/core/src/utils/bodyCell/types.d.ts +0 -170
- package/dist/types/core/src/utils/bodyCellRenderer.d.ts +0 -6
- package/dist/types/core/src/utils/cellClipboardUtils.d.ts +0 -25
- package/dist/types/core/src/utils/cellScrollUtils.d.ts +0 -10
- package/dist/types/core/src/utils/cellUtils.d.ts +0 -18
- package/dist/types/core/src/utils/charts/createBarChart.d.ts +0 -20
- package/dist/types/core/src/utils/charts/createLineAreaChart.d.ts +0 -25
- package/dist/types/core/src/utils/collapseUtils.d.ts +0 -31
- package/dist/types/core/src/utils/columnEditor/columnEditorUtils.d.ts +0 -27
- package/dist/types/core/src/utils/columnEditor/createCheckbox.d.ts +0 -21
- package/dist/types/core/src/utils/columnEditor/createColumnEditor.d.ts +0 -26
- package/dist/types/core/src/utils/columnEditor/createColumnEditorPopout.d.ts +0 -23
- package/dist/types/core/src/utils/columnEditor/createColumnEditorRow.d.ts +0 -41
- package/dist/types/core/src/utils/csvExportUtils.d.ts +0 -14
- package/dist/types/core/src/utils/dateUtils.d.ts +0 -18
- package/dist/types/core/src/utils/externalScroll.d.ts +0 -58
- package/dist/types/core/src/utils/filterUtils.d.ts +0 -5
- package/dist/types/core/src/utils/filters/createBooleanFilter.d.ts +0 -15
- package/dist/types/core/src/utils/filters/createCustomSelect.d.ts +0 -20
- package/dist/types/core/src/utils/filters/createDateFilter.d.ts +0 -15
- package/dist/types/core/src/utils/filters/createDatePicker.d.ts +0 -10
- package/dist/types/core/src/utils/filters/createDropdown.d.ts +0 -33
- package/dist/types/core/src/utils/filters/createEnumFilter.d.ts +0 -15
- package/dist/types/core/src/utils/filters/createFilterActions.d.ts +0 -12
- package/dist/types/core/src/utils/filters/createFilterDropdown.d.ts +0 -15
- package/dist/types/core/src/utils/filters/createFilterInput.d.ts +0 -16
- package/dist/types/core/src/utils/filters/createNumberFilter.d.ts +0 -15
- package/dist/types/core/src/utils/filters/createStringFilter.d.ts +0 -15
- package/dist/types/core/src/utils/footer/createTableFooter.d.ts +0 -21
- package/dist/types/core/src/utils/formatters.d.ts +0 -3
- package/dist/types/core/src/utils/generalUtils.d.ts +0 -4
- package/dist/types/core/src/utils/headerCell/collapsing.d.ts +0 -6
- package/dist/types/core/src/utils/headerCell/dragging.d.ts +0 -5
- package/dist/types/core/src/utils/headerCell/editing.d.ts +0 -4
- package/dist/types/core/src/utils/headerCell/eventTracking.d.ts +0 -28
- package/dist/types/core/src/utils/headerCell/filtering.d.ts +0 -3
- package/dist/types/core/src/utils/headerCell/resizing.d.ts +0 -3
- package/dist/types/core/src/utils/headerCell/selection.d.ts +0 -10
- package/dist/types/core/src/utils/headerCell/sorting.d.ts +0 -3
- package/dist/types/core/src/utils/headerCell/styling.d.ts +0 -7
- package/dist/types/core/src/utils/headerCell/types.d.ts +0 -110
- package/dist/types/core/src/utils/headerCellRenderer.d.ts +0 -4
- package/dist/types/core/src/utils/headerUtils.d.ts +0 -41
- package/dist/types/core/src/utils/headerWidthUtils.d.ts +0 -121
- package/dist/types/core/src/utils/horizontalScrollbarRenderer.d.ts +0 -27
- package/dist/types/core/src/utils/infiniteScrollUtils.d.ts +0 -145
- package/dist/types/core/src/utils/loadingPlaceholderUtils.d.ts +0 -11
- package/dist/types/core/src/utils/nestedGridRowRenderer.d.ts +0 -50
- package/dist/types/core/src/utils/pinnedColumnUtils.d.ts +0 -29
- package/dist/types/core/src/utils/pivot/pivotRows.d.ts +0 -16
- package/dist/types/core/src/utils/propSyncEqual.d.ts +0 -60
- package/dist/types/core/src/utils/quickFilterUtils.d.ts +0 -14
- package/dist/types/core/src/utils/resizeUtils/autoExpandResize.d.ts +0 -32
- package/dist/types/core/src/utils/resizeUtils/compensation.d.ts +0 -17
- package/dist/types/core/src/utils/resizeUtils/domUpdates.d.ts +0 -15
- package/dist/types/core/src/utils/resizeUtils/index.d.ts +0 -26
- package/dist/types/core/src/utils/resizeUtils/maxWidth.d.ts +0 -9
- package/dist/types/core/src/utils/resizeUtils/parentHeaderResize.d.ts +0 -11
- package/dist/types/core/src/utils/resizeUtils/sectionWidths.d.ts +0 -36
- package/dist/types/core/src/utils/rowFlattening.d.ts +0 -30
- package/dist/types/core/src/utils/rowProcessing.d.ts +0 -65
- package/dist/types/core/src/utils/rowSelectionUtils.d.ts +0 -62
- package/dist/types/core/src/utils/rowSeparatorRenderer.d.ts +0 -16
- package/dist/types/core/src/utils/rowUtils.d.ts +0 -187
- package/dist/types/core/src/utils/sortUtils.d.ts +0 -8
- package/dist/types/core/src/utils/stateRowRenderer.d.ts +0 -15
- package/dist/types/core/src/utils/stickyParentsRenderer.d.ts +0 -53
- package/dist/types/react/src/buildVanillaConfig.d.ts +0 -4
- package/dist/types/react/src/index.d.ts +0 -5
package/dist/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),n=require("simple-table-core"),r=require("react-dom/server"),o=require("react-dom");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=s(t);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 u({node:n}){const r=t.useRef(null);return t.useLayoutEffect(()=>{const e=r.current;if(e)return e.appendChild(n),()=>{n.parentNode===e&&e.removeChild(n)}},[n]),e.jsx("span",{ref:r,style:{display:"contents"}})}function a(t){if(null!=t)return"string"==typeof t?t:t instanceof Node?e.jsx(u,{node:t}):void 0}function l(e){return{sortIcon:a(null==e?void 0:e.sortIcon),filterIcon:a(null==e?void 0:e.filterIcon),collapseIcon:a(null==e?void 0:e.collapseIcon),labelContent:a(null==e?void 0:e.labelContent)}}function d(t){if(null!=t){if("string"==typeof t){if(""===t)return;return e.jsx("span",{style:{display:"contents"},dangerouslySetInnerHTML:{__html:t}})}return t instanceof Node?e.jsx(u,{node:t}):void 0}}"function"==typeof SuppressedError&&SuppressedError;const f=Symbol.for("simple-table.wrappedRenderer");function p(e){return"function"==typeof e&&Boolean(e[f])}function h(e){return e[f]=!0,e}function m(t,n){return p(n)?n:h(r=>{const o=document.createElement("div");return t.register(e.jsx(n,Object.assign({},r)),o),o})}function g(t,n){return p(n)?n:h(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{components:(c=r.components,{expandIcon:a(c.expandIcon),checkbox:a(c.checkbox),dragIcon:a(c.dragIcon),labelContent:a(c.labelContent),pinIcon:a(c.pinIcon)})});var c;return t.register(e.jsx(n,Object.assign({},s)),o),o})}function b(t,n){return p(n)?n:h(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{searchSection:r.searchSection?a(r.searchSection):null,listSection:a(r.listSection),resetSection:r.resetSection?a(r.resetSection):null});return t.register(e.jsx(n,Object.assign({},s)),o),o})}function R(t){const n=document.createElement("div");return n.innerHTML=r.renderToStaticMarkup(e.jsx(e.Fragment,{children:t})),function(e){const t=Array.from(e.childNodes).filter(e=>e.nodeType!==Node.TEXT_NODE||null!=e.textContent&&""!==e.textContent.trim());return 1===t.length&&t[0]instanceof HTMLElement?(e.removeChild(t[0]),t[0]):e}(n)}function O(t){return r.renderToStaticMarkup(e.jsx(e.Fragment,{children:t}))}function y(e){return"function"==typeof e}function j(t,n){const{cellRenderer:r,headerRenderer:o,children:s,nestedTable:c}=t,u=i(t,["cellRenderer","headerRenderer","children","nestedTable"]),a=String(t.accessor),d=Object.assign({},u);if(r&&(d.cellRenderer=function(t,n,r){if(p(r))return r;const o=t.cellRendererCache.get(n);if(o)return o.component=r,o.wrapped;const s={component:r,wrapped:null},c=h(n=>{const r=s.component,o=document.createElement("div");return o.style.display="contents",t.register(e.jsx(r,Object.assign({},n)),o),o});return s.wrapped=c,t.cellRendererCache.set(n,s),c}(n,a,r)),o&&(d.headerRenderer=function(t,n,r){if(p(r))return r;const o=t.headerRendererCache.get(n);if(o)return o.component=r,o.wrapped;const s={component:r,wrapped:null};let c=null;const i=h(n=>{const r=s.component,o=Object.assign(Object.assign({},n),{components:l(n.components)}),i=e.jsx(r,Object.assign({},o));return c&&t.update(c,i)||(c=document.createElement("div"),t.register(i,c)),c});return s.wrapped=i,t.headerRendererCache.set(n,s),i}(n,a,o)),s&&(d.children=s.map(e=>j(e,n))),c){const e=Object.assign(Object.assign({},c),{rows:[]});d.nestedTable=S(e,n)}return d}function S(t,r){const{defaultHeaders:o,rows:s,footerRenderer:c,emptyStateRenderer:u,errorStateRenderer:a,loadingStateRenderer:f,tableEmptyStateRenderer:S,headerDropdown:v,columnEditorConfig:E,icons:C,rowButtons:w,onColumnOrderChange:x,onColumnWidthChange:I,onHeaderEdit:T,onColumnSelect:P}=t,A=i(t,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","tableEmptyStateRenderer","headerDropdown","columnEditorConfig","icons","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect"]);r.pruneRendererCaches(n.collectHeaderAccessors(o));const _=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},A),{rows:s,defaultHeaders:o.map(e=>j(e,r)),onRendererHostDiscard:r.disposeHost}),x?{onColumnOrderChange:e=>x(e)}:{}),I?{onColumnWidthChange:e=>I(e)}:{}),T?{onHeaderEdit:(e,t)=>T(e,t)}:{}),P?{onColumnSelect:e=>P(e)}:{});if(void 0!==c&&(_.footerRenderer=function(t,n){return p(n)?n:h(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{nextIcon:d((c={nextIcon:r.nextIcon,prevIcon:r.prevIcon}).nextIcon),prevIcon:d(c.prevIcon)});var c;return t.register(e.jsx(n,Object.assign({},s)),o),o})}(r,c)),void 0!==u)if(y(u))_.emptyStateRenderer=m(r,u);else{const e=u;_.emptyStateRenderer=()=>R(e)}if(void 0!==a)if(y(a))_.errorStateRenderer=m(r,a);else{const e=a;_.errorStateRenderer=()=>R(e)}if(void 0!==f)if(y(f))_.loadingStateRenderer=m(r,f);else{const e=f;_.loadingStateRenderer=()=>R(e)}return void 0!==S&&(_.tableEmptyStateRenderer=null===S?null:R(S)),void 0!==v&&(_.headerDropdown=function(t,n){return p(n)?n:h(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{components:l(r.components)});return t.register(e.jsx(n,Object.assign({},s)),o),o})}(r,v)),void 0!==E&&(_.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:g(t,n)}:{}),r?{customRenderer:b(t,r)}:{})}(E,r)),void 0!==C&&(_.icons=function(e){const t={};for(const[n,r]of Object.entries(e))null!=r&&(t[n]="string"==typeof r||r instanceof HTMLElement||r instanceof SVGElement?r:O(r));return t}(C)),void 0!==w&&(_.rowButtons=w.map(t=>function(t,n){return p(n)?n:h(r=>{const o=document.createElement("div");return o.style.display="contents",t.register(e.jsx(n,Object.assign({},r)),o),o})}(r,t))),_}const v="data-st-portal-id";class E{constructor(){this.entries=new Map,this.listeners=new Set,this.nextId=0,this.cachedSnapshot=[],this.snapshotDirty=!0,this.emitScheduled=!1,this.cellRendererCache=new Map,this.headerRendererCache=new Map,this.disposeHost=e=>{if("function"!=typeof e.getAttribute)return;const t=[],n=e.getAttribute(v);null!==n&&t.push(n),e.querySelectorAll(`[${v}]`).forEach(e=>{const n=e.getAttribute(v);null!==n&&t.push(n)});for(const e of t)this.unregister(e)},this.subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),this.getSnapshot=()=>(this.snapshotDirty&&(this.cachedSnapshot=Array.from(this.entries.values()),this.snapshotDirty=!1),this.cachedSnapshot)}register(e,t){const n="st-portal-"+this.nextId++;return t.setAttribute(v,n),this.entries.set(n,{id:n,container:t,node:e}),this.scheduleEmit(),{id:n,unregister:()=>this.unregister(n)}}update(e,t){const n=e.getAttribute(v);if(null===n)return!1;const r=this.entries.get(n);return!(!r||r.container!==e||(r.node=t,this.scheduleEmit(),0))}unregister(e){this.entries.delete(e)&&this.scheduleEmit()}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear(),0!==this.entries.size&&(this.entries.clear(),this.emit())}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)}emit(){this.snapshotDirty=!0;for(const e of this.listeners)e()}scheduleEmit(){this.emitScheduled||(this.emitScheduled=!0,queueMicrotask(()=>{this.emitScheduled=!1,this.emit()}))}}class C extends c.default.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("[simple-table] A custom renderer threw while rendering:",e)}render(){return this.state.hasError?null:this.props.children}}const w=c.default.forwardRef(function(r,s){const c=t.useRef(null),i=t.useRef(null);null===i.current&&(i.current=new E);const u=i.current,a=t.useRef(null),l=t.useRef(void 0),d=t.useRef(void 0),f=t.useRef(null),p=r;t.useLayoutEffect(()=>{const e=c.current;if(!e)return;const t=new n.SimpleTableVanilla(e,S(p,u));if(t.mount(),a.current=t,f.current=p,l.current=p.defaultHeaders,d.current=p.rows,s){const e=t.getAPI();"function"==typeof s?s(e):s.current=e}return()=>{t.destroy(),a.current=null,l.current=void 0,d.current=void 0,f.current=null,u.clear(),s&&"function"!=typeof s&&(s.current=null)}},[]),t.useLayoutEffect(()=>{const e=a.current;if(!e)return;if(null!==f.current&&!function(e,t){const n=new Set([...Object.keys(e),...Object.keys(t)]);for(const r of n)if(e[r]!==t[r])return!0;return!1}(f.current,p))return;f.current=p;const t=S(p,u),r=Object.assign({},t),o=n.headersStructurallyEqual(l.current,p.defaultHeaders);l.current=p.defaultHeaders,o&&delete r.defaultHeaders;const s=n.rowsShallowUnchanged(d.current,p.rows,p.getRowId);d.current=p.rows,s&&delete r.rows,e.update(r)},[p]);const h=function(n){return t.useSyncExternalStore(n.subscribe,n.getSnapshot,n.getSnapshot).map(t=>o.createPortal(e.jsx(C,{children:t.node}),t.container,t.id))}(u),m=Array.isArray(h)&&h.length>0,g=t.useRef(!1),b=t.useRef(Boolean(p.isLoading));return t.useLayoutEffect(()=>{var e,t;const n=a.current;if(!n)return;const r=Boolean(p.isLoading),o=b.current&&!r;b.current=r,o?null===(e=n.refitAutoSizeColumns)||void 0===e||e.call(n):!g.current&&m&&(g.current=!0,null===(t=n.refitAutoSizeColumns)||void 0===t||t.call(n))},[m,p.isLoading]),e.jsxs(e.Fragment,{children:[e.jsx("div",{ref:c}),h]})});w.displayName="SimpleTable",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=w;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),n=require("react"),t=require("simple-table-core"),r=require("react-dom/server"),o=require("react-dom");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=s(n);function i(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)n.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(t[r[o]]=e[r[o]])}return t}function u({node:t}){const r=n.useRef(null);return n.useLayoutEffect(()=>{const e=r.current;if(e)return e.appendChild(t),()=>{t.parentNode===e&&e.removeChild(t)}},[t]),e.jsx("span",{ref:r,style:{display:"contents"}})}function a(n){if(null!=n)return"string"==typeof n?n:n instanceof Node?e.jsx(u,{node:n}):void 0}function l(e){return{sortIcon:a(null==e?void 0:e.sortIcon),filterIcon:a(null==e?void 0:e.filterIcon),collapseIcon:a(null==e?void 0:e.collapseIcon),labelContent:a(null==e?void 0:e.labelContent)}}function d(n){if(null!=n){if("string"==typeof n){if(""===n)return;return e.jsx("span",{style:{display:"contents"},dangerouslySetInnerHTML:{__html:n}})}return n instanceof Node?e.jsx(u,{node:n}):void 0}}"function"==typeof SuppressedError&&SuppressedError;const f=Symbol.for("simple-table.wrappedRenderer");function p(e){return"function"==typeof e&&Boolean(e[f])}function h(e){return e[f]=!0,e}function m(n,t){return p(t)?t:h(r=>{const o=document.createElement("div");return n.register(e.jsx(t,Object.assign({},r)),o),o})}function g(n,t){return p(t)?t:h(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{components:(c=r.components,{expandIcon:a(c.expandIcon),checkbox:a(c.checkbox),dragIcon:a(c.dragIcon),labelContent:a(c.labelContent),pinIcon:a(c.pinIcon)})});var c;return n.register(e.jsx(t,Object.assign({},s)),o),o})}function b(n,t){return p(t)?t:h(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{searchSection:r.searchSection?a(r.searchSection):null,listSection:a(r.listSection),resetSection:r.resetSection?a(r.resetSection):null});return n.register(e.jsx(t,Object.assign({},s)),o),o})}function R(n){const t=document.createElement("div");return t.innerHTML=r.renderToStaticMarkup(e.jsx(e.Fragment,{children:n})),function(e){const n=Array.from(e.childNodes).filter(e=>e.nodeType!==Node.TEXT_NODE||null!=e.textContent&&""!==e.textContent.trim());return 1===n.length&&n[0]instanceof HTMLElement?(e.removeChild(n[0]),n[0]):e}(t)}function O(n){return r.renderToStaticMarkup(e.jsx(e.Fragment,{children:n}))}function y(e){return"function"==typeof e}function v(n,t){const{cellRenderer:r,headerRenderer:o,children:s,nestedTable:c}=n,u=i(n,["cellRenderer","headerRenderer","children","nestedTable"]),a=String(n.accessor),d=Object.assign({},u);if(r&&(d.cellRenderer=function(n,t,r){if(p(r))return r;const o=n.cellRendererCache.get(t);if(o)return o.component=r,o.wrapped;const s={component:r,wrapped:null},c=h(t=>{const r=s.component,o=document.createElement("div");return o.style.display="contents",n.register(e.jsx(r,Object.assign({},t)),o),o});return s.wrapped=c,n.cellRendererCache.set(t,s),c}(t,a,r)),o&&(d.headerRenderer=function(n,t,r){if(p(r))return r;const o=n.headerRendererCache.get(t);if(o)return o.component=r,o.wrapped;const s={component:r,wrapped:null};let c=null;const i=h(t=>{const r=s.component,o=Object.assign(Object.assign({},t),{components:l(t.components)}),i=e.jsx(r,Object.assign({},o));return c&&n.update(c,i)||(c=document.createElement("div"),n.register(i,c)),c});return s.wrapped=i,n.headerRendererCache.set(t,s),i}(t,a,o)),s&&(d.children=s.map(e=>v(e,t))),c){const e=Object.assign(Object.assign({},c),{rows:[]});d.nestedTable=C(e,t)}return d}function j(e){var n;const t=null!==(n=e.columns)&&void 0!==n?n:e.defaultHeaders;if(!t)throw new Error("SimpleTable requires `columns` or `defaultHeaders`");return t}function C(n,r){const{rows:o,footerRenderer:s,emptyStateRenderer:c,errorStateRenderer:u,loadingStateRenderer:a,tableEmptyStateRenderer:f,headerDropdown:C,columnEditorConfig:S,icons:E,rowButtons:w,onColumnOrderChange:I,onColumnWidthChange:x,onHeaderEdit:P,onColumnSelect:T,enableColumnEditor:A,editColumns:B,enableColumnEditorInitOpen:k,editColumnsInitOpen:_,enablePagination:H,shouldPaginate:L,onTableReady:D,onGridReady:M,hoverRowBackground:N,useHoverRowBackground:V,oddColumnBackground:q,useOddColumnBackground:F,oddEvenRowBackground:K,useOddEvenRowBackground:G}=n,Y=i(n,["defaultHeaders","columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","tableEmptyStateRenderer","headerDropdown","columnEditorConfig","icons","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","editColumns","enableColumnEditorInitOpen","editColumnsInitOpen","enablePagination","shouldPaginate","onTableReady","onGridReady","hoverRowBackground","useHoverRowBackground","oddColumnBackground","useOddColumnBackground","oddEvenRowBackground","useOddEvenRowBackground"]),z=j(n);r.pruneRendererCaches(t.collectHeaderAccessors(z));const W=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Y),{rows:o,defaultHeaders:z.map(e=>v(e,r)),editColumns:null!=A?A:B,editColumnsInitOpen:null!=k?k:_,shouldPaginate:null!=H?H:L,onGridReady:null!=D?D:M,useHoverRowBackground:null!=N?N:V,useOddColumnBackground:null!=q?q:F,useOddEvenRowBackground:null!=K?K:G,onRendererHostDiscard:r.disposeHost}),I?{onColumnOrderChange:e=>I(e)}:{}),x?{onColumnWidthChange:e=>x(e)}:{}),P?{onHeaderEdit:(e,n)=>P(e,n)}:{}),T?{onColumnSelect:e=>T(e)}:{});if(void 0!==s&&(W.footerRenderer=function(n,t){return p(t)?t:h(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{nextIcon:d((c={nextIcon:r.nextIcon,prevIcon:r.prevIcon}).nextIcon),prevIcon:d(c.prevIcon)});var c;return n.register(e.jsx(t,Object.assign({},s)),o),o})}(r,s)),void 0!==c)if(y(c))W.emptyStateRenderer=m(r,c);else{const e=c;W.emptyStateRenderer=()=>R(e)}if(void 0!==u)if(y(u))W.errorStateRenderer=m(r,u);else{const e=u;W.errorStateRenderer=()=>R(e)}if(void 0!==a)if(y(a))W.loadingStateRenderer=m(r,a);else{const e=a;W.loadingStateRenderer=()=>R(e)}return void 0!==f&&(W.tableEmptyStateRenderer=null===f?null:R(f)),void 0!==C&&(W.headerDropdown=function(n,t){return p(t)?t:h(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{components:l(r.components)});return n.register(e.jsx(t,Object.assign({},s)),o),o})}(r,C)),void 0!==S&&(W.columnEditorConfig=function(e,n){const{rowRenderer:t,customRenderer:r}=e,o=i(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),t?{rowRenderer:g(n,t)}:{}),r?{customRenderer:b(n,r)}:{})}(S,r)),void 0!==E&&(W.icons=function(e){const n={};for(const[t,r]of Object.entries(e))null!=r&&(n[t]="string"==typeof r||r instanceof HTMLElement||r instanceof SVGElement?r:O(r));return n}(E)),void 0!==w&&(W.rowButtons=w.map(n=>function(n,t){return p(t)?t:h(r=>{const o=document.createElement("div");return o.style.display="contents",n.register(e.jsx(t,Object.assign({},r)),o),o})}(r,n))),W}const S="data-st-portal-id";class E{constructor(){this.entries=new Map,this.listeners=new Set,this.nextId=0,this.cachedSnapshot=[],this.snapshotDirty=!0,this.emitScheduled=!1,this.cellRendererCache=new Map,this.headerRendererCache=new Map,this.disposeHost=e=>{if("function"!=typeof e.getAttribute)return;const n=[],t=e.getAttribute(S);null!==t&&n.push(t),e.querySelectorAll(`[${S}]`).forEach(e=>{const t=e.getAttribute(S);null!==t&&n.push(t)});for(const e of n)this.unregister(e)},this.subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),this.getSnapshot=()=>(this.snapshotDirty&&(this.cachedSnapshot=Array.from(this.entries.values()),this.snapshotDirty=!1),this.cachedSnapshot)}register(e,n){const t="st-portal-"+this.nextId++;return n.setAttribute(S,t),this.entries.set(t,{id:t,container:n,node:e}),this.scheduleEmit(),{id:t,unregister:()=>this.unregister(t)}}update(e,n){const t=e.getAttribute(S);if(null===t)return!1;const r=this.entries.get(t);return!(!r||r.container!==e||(r.node=n,this.scheduleEmit(),0))}unregister(e){this.entries.delete(e)&&this.scheduleEmit()}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear(),0!==this.entries.size&&(this.entries.clear(),this.emit())}pruneRendererCaches(e){for(const n of this.cellRendererCache.keys())e.has(n)||this.cellRendererCache.delete(n);for(const n of this.headerRendererCache.keys())e.has(n)||this.headerRendererCache.delete(n)}emit(){this.snapshotDirty=!0;for(const e of this.listeners)e()}scheduleEmit(){this.emitScheduled||(this.emitScheduled=!0,queueMicrotask(()=>{this.emitScheduled=!1,this.emit()}))}}class w extends c.default.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("[simple-table] A custom renderer threw while rendering:",e)}render(){return this.state.hasError?null:this.props.children}}const I=c.default.forwardRef(function(r,s){const c=n.useRef(null),i=n.useRef(null);null===i.current&&(i.current=new E);const u=i.current,a=n.useRef(null),l=n.useRef(void 0),d=n.useRef(void 0),f=n.useRef(null),p=r;n.useLayoutEffect(()=>{const e=c.current;if(!e)return;const n=new t.SimpleTableVanilla(e,C(p,u));if(n.mount(),a.current=n,f.current=p,l.current=j(p),d.current=p.rows,s){const e=n.getAPI();"function"==typeof s?s(e):s.current=e}return()=>{n.destroy(),a.current=null,l.current=void 0,d.current=void 0,f.current=null,u.clear(),s&&"function"!=typeof s&&(s.current=null)}},[]),n.useLayoutEffect(()=>{const e=a.current;if(!e)return;if(null!==f.current&&!function(e,n){const t=new Set([...Object.keys(e),...Object.keys(n)]);for(const r of t)if(e[r]!==n[r])return!0;return!1}(f.current,p))return;f.current=p;const n=C(p,u),r=Object.assign({},n),o=j(p),s=t.headersStructurallyEqual(l.current,o);l.current=o,s&&delete r.defaultHeaders;const c=t.rowsShallowUnchanged(d.current,p.rows,p.getRowId);d.current=p.rows,c&&delete r.rows,e.update(r)},[p]);const h=function(t){return n.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot).map(n=>o.createPortal(e.jsx(w,{children:n.node}),n.container,n.id))}(u),m=Array.isArray(h)&&h.length>0,g=n.useRef(!1),b=n.useRef(Boolean(p.isLoading));return n.useLayoutEffect(()=>{var e,n;const t=a.current;if(!t)return;const r=Boolean(p.isLoading),o=b.current&&!r;b.current=r,o?null===(e=t.refitAutoSizeColumns)||void 0===e||e.call(t):!g.current&&m&&(g.current=!0,null===(n=t.refitAutoSizeColumns)||void 0===n||n.call(t))},[m,p.isLoading]),e.jsxs(e.Fragment,{children:[e.jsx("div",{ref:c}),h]})});I.displayName="SimpleTable",Object.defineProperty(exports,"PIVOT_ACCESSOR_PREFIX",{enumerable:!0,get:function(){return t.PIVOT_ACCESSOR_PREFIX}}),Object.defineProperty(exports,"PIVOT_BLANK_LABEL",{enumerable:!0,get:function(){return t.PIVOT_BLANK_LABEL}}),Object.defineProperty(exports,"PIVOT_CHILDREN_KEY",{enumerable:!0,get:function(){return t.PIVOT_CHILDREN_KEY}}),Object.defineProperty(exports,"PIVOT_IS_TOTAL_KEY",{enumerable:!0,get:function(){return t.PIVOT_IS_TOTAL_KEY}}),Object.defineProperty(exports,"asRows",{enumerable:!0,get:function(){return t.asRows}}),Object.defineProperty(exports,"buildPivotAccessor",{enumerable:!0,get:function(){return t.buildPivotAccessor}}),Object.defineProperty(exports,"buildPivotRowTotalAccessor",{enumerable:!0,get:function(){return t.buildPivotRowTotalAccessor}}),Object.defineProperty(exports,"pivotRows",{enumerable:!0,get:function(){return t.pivotRows}}),exports.SimpleTable=I;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,Fragment as t,jsxs as n}from"react/jsx-runtime";import r,{useRef as o,useLayoutEffect as s,useSyncExternalStore as c}from"react";import{collectHeaderAccessors as i,SimpleTableVanilla as a,headersStructurallyEqual as l,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";import{renderToStaticMarkup as u}from"react-dom/server";import{createPortal as h}from"react-dom";function p(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 f({node:t}){const n=o(null);return s(()=>{const e=n.current;if(e)return e.appendChild(t),()=>{t.parentNode===e&&e.removeChild(t)}},[t]),e("span",{ref:n,style:{display:"contents"}})}function m(t){if(null!=t)return"string"==typeof t?t:t instanceof Node?e(f,{node:t}):void 0}function g(e){return{sortIcon:m(null==e?void 0:e.sortIcon),filterIcon:m(null==e?void 0:e.filterIcon),collapseIcon:m(null==e?void 0:e.collapseIcon),labelContent:m(null==e?void 0:e.labelContent)}}function b(t){if(null!=t){if("string"==typeof t){if(""===t)return;return e("span",{style:{display:"contents"},dangerouslySetInnerHTML:{__html:t}})}return t instanceof Node?e(f,{node:t}):void 0}}"function"==typeof SuppressedError&&SuppressedError;const R=Symbol.for("simple-table.wrappedRenderer");function S(e){return"function"==typeof e&&Boolean(e[R])}function O(e){return e[R]=!0,e}function y(t,n){return S(n)?n:O(r=>{const o=document.createElement("div");return t.register(e(n,Object.assign({},r)),o),o})}function v(t,n){return S(n)?n:O(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{components:(c=r.components,{expandIcon:m(c.expandIcon),checkbox:m(c.checkbox),dragIcon:m(c.dragIcon),labelContent:m(c.labelContent),pinIcon:m(c.pinIcon)})});var c;return t.register(e(n,Object.assign({},s)),o),o})}function C(t,n){return S(n)?n:O(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{searchSection:r.searchSection?m(r.searchSection):null,listSection:m(r.listSection),resetSection:r.resetSection?m(r.resetSection):null});return t.register(e(n,Object.assign({},s)),o),o})}function w(n){const r=document.createElement("div");return r.innerHTML=u(e(t,{children:n})),function(e){const t=Array.from(e.childNodes).filter(e=>e.nodeType!==Node.TEXT_NODE||null!=e.textContent&&""!==e.textContent.trim());return 1===t.length&&t[0]instanceof HTMLElement?(e.removeChild(t[0]),t[0]):e}(r)}function E(n){return u(e(t,{children:n}))}function j(e){return"function"==typeof e}function I(t,n){const{cellRenderer:r,headerRenderer:o,children:s,nestedTable:c}=t,i=p(t,["cellRenderer","headerRenderer","children","nestedTable"]),a=String(t.accessor),l=Object.assign({},i);if(r&&(l.cellRenderer=function(t,n,r){if(S(r))return r;const o=t.cellRendererCache.get(n);if(o)return o.component=r,o.wrapped;const s={component:r,wrapped:null},c=O(n=>{const r=s.component,o=document.createElement("div");return o.style.display="contents",t.register(e(r,Object.assign({},n)),o),o});return s.wrapped=c,t.cellRendererCache.set(n,s),c}(n,a,r)),o&&(l.headerRenderer=function(t,n,r){if(S(r))return r;const o=t.headerRendererCache.get(n);if(o)return o.component=r,o.wrapped;const s={component:r,wrapped:null};let c=null;const i=O(n=>{const r=s.component,o=Object.assign(Object.assign({},n),{components:g(n.components)}),i=e(r,Object.assign({},o));return c&&t.update(c,i)||(c=document.createElement("div"),t.register(i,c)),c});return s.wrapped=i,t.headerRendererCache.set(n,s),i}(n,a,o)),s&&(l.children=s.map(e=>I(e,n))),c){const e=Object.assign(Object.assign({},c),{rows:[]});l.nestedTable=A(e,n)}return l}function A(t,n){const{defaultHeaders:r,rows:o,footerRenderer:s,emptyStateRenderer:c,errorStateRenderer:a,loadingStateRenderer:l,tableEmptyStateRenderer:d,headerDropdown:u,columnEditorConfig:h,icons:f,rowButtons:m,onColumnOrderChange:R,onColumnWidthChange:A,onHeaderEdit:x,onColumnSelect:H}=t,T=p(t,["defaultHeaders","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","tableEmptyStateRenderer","headerDropdown","columnEditorConfig","icons","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect"]);n.pruneRendererCaches(i(r));const D=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},T),{rows:o,defaultHeaders:r.map(e=>I(e,n)),onRendererHostDiscard:n.disposeHost}),R?{onColumnOrderChange:e=>R(e)}:{}),A?{onColumnWidthChange:e=>A(e)}:{}),x?{onHeaderEdit:(e,t)=>x(e,t)}:{}),H?{onColumnSelect:e=>H(e)}:{});if(void 0!==s&&(D.footerRenderer=function(t,n){return S(n)?n:O(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{nextIcon:b((c={nextIcon:r.nextIcon,prevIcon:r.prevIcon}).nextIcon),prevIcon:b(c.prevIcon)});var c;return t.register(e(n,Object.assign({},s)),o),o})}(n,s)),void 0!==c)if(j(c))D.emptyStateRenderer=y(n,c);else{const e=c;D.emptyStateRenderer=()=>w(e)}if(void 0!==a)if(j(a))D.errorStateRenderer=y(n,a);else{const e=a;D.errorStateRenderer=()=>w(e)}if(void 0!==l)if(j(l))D.loadingStateRenderer=y(n,l);else{const e=l;D.loadingStateRenderer=()=>w(e)}return void 0!==d&&(D.tableEmptyStateRenderer=null===d?null:w(d)),void 0!==u&&(D.headerDropdown=function(t,n){return S(n)?n:O(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{components:g(r.components)});return t.register(e(n,Object.assign({},s)),o),o})}(n,u)),void 0!==h&&(D.columnEditorConfig=function(e,t){const{rowRenderer:n,customRenderer:r}=e,o=p(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),n?{rowRenderer:v(t,n)}:{}),r?{customRenderer:C(t,r)}:{})}(h,n)),void 0!==f&&(D.icons=function(e){const t={};for(const[n,r]of Object.entries(e))null!=r&&(t[n]="string"==typeof r||r instanceof HTMLElement||r instanceof SVGElement?r:E(r));return t}(f)),void 0!==m&&(D.rowButtons=m.map(t=>function(t,n){return S(n)?n:O(r=>{const o=document.createElement("div");return o.style.display="contents",t.register(e(n,Object.assign({},r)),o),o})}(n,t))),D}const x="data-st-portal-id";class H{constructor(){this.entries=new Map,this.listeners=new Set,this.nextId=0,this.cachedSnapshot=[],this.snapshotDirty=!0,this.emitScheduled=!1,this.cellRendererCache=new Map,this.headerRendererCache=new Map,this.disposeHost=e=>{if("function"!=typeof e.getAttribute)return;const t=[],n=e.getAttribute(x);null!==n&&t.push(n),e.querySelectorAll(`[${x}]`).forEach(e=>{const n=e.getAttribute(x);null!==n&&t.push(n)});for(const e of t)this.unregister(e)},this.subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),this.getSnapshot=()=>(this.snapshotDirty&&(this.cachedSnapshot=Array.from(this.entries.values()),this.snapshotDirty=!1),this.cachedSnapshot)}register(e,t){const n="st-portal-"+this.nextId++;return t.setAttribute(x,n),this.entries.set(n,{id:n,container:t,node:e}),this.scheduleEmit(),{id:n,unregister:()=>this.unregister(n)}}update(e,t){const n=e.getAttribute(x);if(null===n)return!1;const r=this.entries.get(n);return!(!r||r.container!==e||(r.node=t,this.scheduleEmit(),0))}unregister(e){this.entries.delete(e)&&this.scheduleEmit()}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear(),0!==this.entries.size&&(this.entries.clear(),this.emit())}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)}emit(){this.snapshotDirty=!0;for(const e of this.listeners)e()}scheduleEmit(){this.emitScheduled||(this.emitScheduled=!0,queueMicrotask(()=>{this.emitScheduled=!1,this.emit()}))}}class T extends r.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("[simple-table] A custom renderer threw while rendering:",e)}render(){return this.state.hasError?null:this.props.children}}const D=r.forwardRef(function(r,i){const u=o(null),p=o(null);null===p.current&&(p.current=new H);const f=p.current,m=o(null),g=o(void 0),b=o(void 0),R=o(null),S=r;s(()=>{const e=u.current;if(!e)return;const t=new a(e,A(S,f));if(t.mount(),m.current=t,R.current=S,g.current=S.defaultHeaders,b.current=S.rows,i){const e=t.getAPI();"function"==typeof i?i(e):i.current=e}return()=>{t.destroy(),m.current=null,g.current=void 0,b.current=void 0,R.current=null,f.clear(),i&&"function"!=typeof i&&(i.current=null)}},[]),s(()=>{const e=m.current;if(!e)return;if(null!==R.current&&!function(e,t){const n=new Set([...Object.keys(e),...Object.keys(t)]);for(const r of n)if(e[r]!==t[r])return!0;return!1}(R.current,S))return;R.current=S;const t=A(S,f),n=Object.assign({},t),r=l(g.current,S.defaultHeaders);g.current=S.defaultHeaders,r&&delete n.defaultHeaders;const o=d(b.current,S.rows,S.getRowId);b.current=S.rows,o&&delete n.rows,e.update(n)},[S]);const O=function(t){return c(t.subscribe,t.getSnapshot,t.getSnapshot).map(t=>h(e(T,{children:t.node}),t.container,t.id))}(f),y=Array.isArray(O)&&O.length>0,v=o(!1),C=o(Boolean(S.isLoading));return s(()=>{var e,t;const n=m.current;if(!n)return;const r=Boolean(S.isLoading),o=C.current&&!r;C.current=r,o?null===(e=n.refitAutoSizeColumns)||void 0===e||e.call(n):!v.current&&y&&(v.current=!0,null===(t=n.refitAutoSizeColumns)||void 0===t||t.call(n))},[y,S.isLoading]),n(t,{children:[e("div",{ref:u}),O]})});D.displayName="SimpleTable";export{D as SimpleTable};
|
|
1
|
+
import{jsx as e,Fragment as n,jsxs as t}from"react/jsx-runtime";import r,{useRef as o,useLayoutEffect as s,useSyncExternalStore as i}from"react";import{collectHeaderAccessors as c,SimpleTableVanilla as d,headersStructurallyEqual as l,rowsShallowUnchanged as u}from"simple-table-core";export{PIVOT_ACCESSOR_PREFIX,PIVOT_BLANK_LABEL,PIVOT_CHILDREN_KEY,PIVOT_IS_TOTAL_KEY,asRows,buildPivotAccessor,buildPivotRowTotalAccessor,pivotRows}from"simple-table-core";import{renderToStaticMarkup as a}from"react-dom/server";import{createPortal as h}from"react-dom";function p(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)n.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(t[r[o]]=e[r[o]])}return t}function m({node:n}){const t=o(null);return s(()=>{const e=t.current;if(e)return e.appendChild(n),()=>{n.parentNode===e&&e.removeChild(n)}},[n]),e("span",{ref:t,style:{display:"contents"}})}function f(n){if(null!=n)return"string"==typeof n?n:n instanceof Node?e(m,{node:n}):void 0}function g(e){return{sortIcon:f(null==e?void 0:e.sortIcon),filterIcon:f(null==e?void 0:e.filterIcon),collapseIcon:f(null==e?void 0:e.collapseIcon),labelContent:f(null==e?void 0:e.labelContent)}}function b(n){if(null!=n){if("string"==typeof n){if(""===n)return;return e("span",{style:{display:"contents"},dangerouslySetInnerHTML:{__html:n}})}return n instanceof Node?e(m,{node:n}):void 0}}"function"==typeof SuppressedError&&SuppressedError;const R=Symbol.for("simple-table.wrappedRenderer");function O(e){return"function"==typeof e&&Boolean(e[R])}function C(e){return e[R]=!0,e}function v(n,t){return O(t)?t:C(r=>{const o=document.createElement("div");return n.register(e(t,Object.assign({},r)),o),o})}function y(n,t){return O(t)?t:C(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{components:(i=r.components,{expandIcon:f(i.expandIcon),checkbox:f(i.checkbox),dragIcon:f(i.dragIcon),labelContent:f(i.labelContent),pinIcon:f(i.pinIcon)})});var i;return n.register(e(t,Object.assign({},s)),o),o})}function S(n,t){return O(t)?t:C(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{searchSection:r.searchSection?f(r.searchSection):null,listSection:f(r.listSection),resetSection:r.resetSection?f(r.resetSection):null});return n.register(e(t,Object.assign({},s)),o),o})}function w(t){const r=document.createElement("div");return r.innerHTML=a(e(n,{children:t})),function(e){const n=Array.from(e.childNodes).filter(e=>e.nodeType!==Node.TEXT_NODE||null!=e.textContent&&""!==e.textContent.trim());return 1===n.length&&n[0]instanceof HTMLElement?(e.removeChild(n[0]),n[0]):e}(r)}function E(t){return a(e(n,{children:t}))}function j(e){return"function"==typeof e}function I(n,t){const{cellRenderer:r,headerRenderer:o,children:s,nestedTable:i}=n,c=p(n,["cellRenderer","headerRenderer","children","nestedTable"]),d=String(n.accessor),l=Object.assign({},c);if(r&&(l.cellRenderer=function(n,t,r){if(O(r))return r;const o=n.cellRendererCache.get(t);if(o)return o.component=r,o.wrapped;const s={component:r,wrapped:null},i=C(t=>{const r=s.component,o=document.createElement("div");return o.style.display="contents",n.register(e(r,Object.assign({},t)),o),o});return s.wrapped=i,n.cellRendererCache.set(t,s),i}(t,d,r)),o&&(l.headerRenderer=function(n,t,r){if(O(r))return r;const o=n.headerRendererCache.get(t);if(o)return o.component=r,o.wrapped;const s={component:r,wrapped:null};let i=null;const c=C(t=>{const r=s.component,o=Object.assign(Object.assign({},t),{components:g(t.components)}),c=e(r,Object.assign({},o));return i&&n.update(i,c)||(i=document.createElement("div"),n.register(c,i)),i});return s.wrapped=c,n.headerRendererCache.set(t,s),c}(t,d,o)),s&&(l.children=s.map(e=>I(e,t))),i){const e=Object.assign(Object.assign({},i),{rows:[]});l.nestedTable=k(e,t)}return l}function B(e){var n;const t=null!==(n=e.columns)&&void 0!==n?n:e.defaultHeaders;if(!t)throw new Error("SimpleTable requires `columns` or `defaultHeaders`");return t}function k(n,t){const{rows:r,footerRenderer:o,emptyStateRenderer:s,errorStateRenderer:i,loadingStateRenderer:d,tableEmptyStateRenderer:l,headerDropdown:u,columnEditorConfig:a,icons:h,rowButtons:m,onColumnOrderChange:f,onColumnWidthChange:R,onHeaderEdit:k,onColumnSelect:T,enableColumnEditor:A,editColumns:H,enableColumnEditorInitOpen:x,editColumnsInitOpen:P,enablePagination:D,shouldPaginate:L,onTableReady:_,onGridReady:N,hoverRowBackground:M,useHoverRowBackground:V,oddColumnBackground:G,useOddColumnBackground:q,oddEvenRowBackground:z,useOddEvenRowBackground:K}=n,W=p(n,["defaultHeaders","columns","rows","footerRenderer","emptyStateRenderer","errorStateRenderer","loadingStateRenderer","tableEmptyStateRenderer","headerDropdown","columnEditorConfig","icons","rowButtons","onColumnOrderChange","onColumnWidthChange","onHeaderEdit","onColumnSelect","enableColumnEditor","editColumns","enableColumnEditorInitOpen","editColumnsInitOpen","enablePagination","shouldPaginate","onTableReady","onGridReady","hoverRowBackground","useHoverRowBackground","oddColumnBackground","useOddColumnBackground","oddEvenRowBackground","useOddEvenRowBackground"]),F=B(n);t.pruneRendererCaches(c(F));const X=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},W),{rows:r,defaultHeaders:F.map(e=>I(e,t)),editColumns:null!=A?A:H,editColumnsInitOpen:null!=x?x:P,shouldPaginate:null!=D?D:L,onGridReady:null!=_?_:N,useHoverRowBackground:null!=M?M:V,useOddColumnBackground:null!=G?G:q,useOddEvenRowBackground:null!=z?z:K,onRendererHostDiscard:t.disposeHost}),f?{onColumnOrderChange:e=>f(e)}:{}),R?{onColumnWidthChange:e=>R(e)}:{}),k?{onHeaderEdit:(e,n)=>k(e,n)}:{}),T?{onColumnSelect:e=>T(e)}:{});if(void 0!==o&&(X.footerRenderer=function(n,t){return O(t)?t:C(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{nextIcon:b((i={nextIcon:r.nextIcon,prevIcon:r.prevIcon}).nextIcon),prevIcon:b(i.prevIcon)});var i;return n.register(e(t,Object.assign({},s)),o),o})}(t,o)),void 0!==s)if(j(s))X.emptyStateRenderer=v(t,s);else{const e=s;X.emptyStateRenderer=()=>w(e)}if(void 0!==i)if(j(i))X.errorStateRenderer=v(t,i);else{const e=i;X.errorStateRenderer=()=>w(e)}if(void 0!==d)if(j(d))X.loadingStateRenderer=v(t,d);else{const e=d;X.loadingStateRenderer=()=>w(e)}return void 0!==l&&(X.tableEmptyStateRenderer=null===l?null:w(l)),void 0!==u&&(X.headerDropdown=function(n,t){return O(t)?t:C(r=>{const o=document.createElement("div"),s=Object.assign(Object.assign({},r),{components:g(r.components)});return n.register(e(t,Object.assign({},s)),o),o})}(t,u)),void 0!==a&&(X.columnEditorConfig=function(e,n){const{rowRenderer:t,customRenderer:r}=e,o=p(e,["rowRenderer","customRenderer"]);return Object.assign(Object.assign(Object.assign({},o),t?{rowRenderer:y(n,t)}:{}),r?{customRenderer:S(n,r)}:{})}(a,t)),void 0!==h&&(X.icons=function(e){const n={};for(const[t,r]of Object.entries(e))null!=r&&(n[t]="string"==typeof r||r instanceof HTMLElement||r instanceof SVGElement?r:E(r));return n}(h)),void 0!==m&&(X.rowButtons=m.map(n=>function(n,t){return O(t)?t:C(r=>{const o=document.createElement("div");return o.style.display="contents",n.register(e(t,Object.assign({},r)),o),o})}(t,n))),X}const T="data-st-portal-id";class A{constructor(){this.entries=new Map,this.listeners=new Set,this.nextId=0,this.cachedSnapshot=[],this.snapshotDirty=!0,this.emitScheduled=!1,this.cellRendererCache=new Map,this.headerRendererCache=new Map,this.disposeHost=e=>{if("function"!=typeof e.getAttribute)return;const n=[],t=e.getAttribute(T);null!==t&&n.push(t),e.querySelectorAll(`[${T}]`).forEach(e=>{const t=e.getAttribute(T);null!==t&&n.push(t)});for(const e of n)this.unregister(e)},this.subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),this.getSnapshot=()=>(this.snapshotDirty&&(this.cachedSnapshot=Array.from(this.entries.values()),this.snapshotDirty=!1),this.cachedSnapshot)}register(e,n){const t="st-portal-"+this.nextId++;return n.setAttribute(T,t),this.entries.set(t,{id:t,container:n,node:e}),this.scheduleEmit(),{id:t,unregister:()=>this.unregister(t)}}update(e,n){const t=e.getAttribute(T);if(null===t)return!1;const r=this.entries.get(t);return!(!r||r.container!==e||(r.node=n,this.scheduleEmit(),0))}unregister(e){this.entries.delete(e)&&this.scheduleEmit()}clear(){this.cellRendererCache.clear(),this.headerRendererCache.clear(),0!==this.entries.size&&(this.entries.clear(),this.emit())}pruneRendererCaches(e){for(const n of this.cellRendererCache.keys())e.has(n)||this.cellRendererCache.delete(n);for(const n of this.headerRendererCache.keys())e.has(n)||this.headerRendererCache.delete(n)}emit(){this.snapshotDirty=!0;for(const e of this.listeners)e()}scheduleEmit(){this.emitScheduled||(this.emitScheduled=!0,queueMicrotask(()=>{this.emitScheduled=!1,this.emit()}))}}class H extends r.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){console.error("[simple-table] A custom renderer threw while rendering:",e)}render(){return this.state.hasError?null:this.props.children}}const x=r.forwardRef(function(r,c){const a=o(null),p=o(null);null===p.current&&(p.current=new A);const m=p.current,f=o(null),g=o(void 0),b=o(void 0),R=o(null),O=r;s(()=>{const e=a.current;if(!e)return;const n=new d(e,k(O,m));if(n.mount(),f.current=n,R.current=O,g.current=B(O),b.current=O.rows,c){const e=n.getAPI();"function"==typeof c?c(e):c.current=e}return()=>{n.destroy(),f.current=null,g.current=void 0,b.current=void 0,R.current=null,m.clear(),c&&"function"!=typeof c&&(c.current=null)}},[]),s(()=>{const e=f.current;if(!e)return;if(null!==R.current&&!function(e,n){const t=new Set([...Object.keys(e),...Object.keys(n)]);for(const r of t)if(e[r]!==n[r])return!0;return!1}(R.current,O))return;R.current=O;const n=k(O,m),t=Object.assign({},n),r=B(O),o=l(g.current,r);g.current=r,o&&delete t.defaultHeaders;const s=u(b.current,O.rows,O.getRowId);b.current=O.rows,s&&delete t.rows,e.update(t)},[O]);const C=function(n){return i(n.subscribe,n.getSnapshot,n.getSnapshot).map(n=>h(e(H,{children:n.node}),n.container,n.id))}(m),v=Array.isArray(C)&&C.length>0,y=o(!1),S=o(Boolean(O.isLoading));return s(()=>{var e,n;const t=f.current;if(!t)return;const r=Boolean(O.isLoading),o=S.current&&!r;S.current=r,o?null===(e=t.refitAutoSizeColumns)||void 0===e||e.call(t):!y.current&&v&&(y.current=!0,null===(n=t.refitAutoSizeColumns)||void 0===n||n.call(t))},[v,O.isLoading]),t(n,{children:[e("div",{ref:a}),C]})});x.displayName="SimpleTable";export{x as SimpleTable};
|
|
2
2
|
//# sourceMappingURL=index.es.js.map
|
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
2
|
-
/**
|
|
3
|
-
* A single React subtree to render into a DOM node owned by simple-table-core.
|
|
4
|
-
*/
|
|
5
|
-
interface PortalEntry {
|
|
6
|
-
id: string;
|
|
7
|
-
container: HTMLElement;
|
|
8
|
-
node: ReactNode;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Bridges simple-table-core's imperative DOM rendering with React so that custom
|
|
12
|
-
* cell / header / footer renderers stay part of the host React tree.
|
|
13
|
-
*
|
|
14
|
-
* Instead of mounting each renderer in its own isolated `createRoot` (which can
|
|
15
|
-
* never see the host app's context providers and leaks because it is never
|
|
16
|
-
* unmounted), each renderer registers a {@link PortalEntry}. The owning
|
|
17
|
-
* `<SimpleTable>` renders one `createPortal` per entry via {@link useTablePortals},
|
|
18
|
-
* so the consumer's components are children of the host tree and inherit context,
|
|
19
|
-
* Suspense, error boundaries, etc.
|
|
20
|
-
*
|
|
21
|
-
* Cleanup is authoritative, not inferred: core invokes `onRendererHostDiscard(host)`
|
|
22
|
-
* — wired to {@link disposeHost} — immediately before it permanently discards a
|
|
23
|
-
* host element (cell rebuild/edit `innerHTML = ""`, plain cell/header removal, and
|
|
24
|
-
* the animation coordinator's ghost/FLIP/shrink teardown). Header sort/filter icon
|
|
25
|
-
* refresh reuses the same host via {@link update} when the adapter returns it
|
|
26
|
-
* in place, so React state is preserved. `disposeHost` unregisters the portal(s)
|
|
27
|
-
* tagged with {@link PORTAL_ID_ATTR} inside that host, so React unmounts exactly
|
|
28
|
-
* those subtrees. Reuse/reparent paths never signal, so a reused node keeps its
|
|
29
|
-
* portal entry (and its content) with zero churn.
|
|
30
|
-
*
|
|
31
|
-
* {@link cellRendererCache} / {@link headerRendererCache} keep one wrapped
|
|
32
|
-
* renderer per accessor so unstable column rebuilds (new Component identity,
|
|
33
|
-
* same accessor) reuse the portal host instead of remounting React state.
|
|
34
|
-
*/
|
|
35
|
-
/** Mutable slot so wrapped renderers keep a stable closure across rebuilds. */
|
|
36
|
-
export type CachedRendererSlot<T = unknown> = {
|
|
37
|
-
component: T;
|
|
38
|
-
wrapped: unknown;
|
|
39
|
-
};
|
|
40
|
-
export declare class PortalBridge {
|
|
41
|
-
private entries;
|
|
42
|
-
private listeners;
|
|
43
|
-
private nextId;
|
|
44
|
-
private cachedSnapshot;
|
|
45
|
-
private snapshotDirty;
|
|
46
|
-
private emitScheduled;
|
|
47
|
-
/** Per-accessor cached cellRenderer wrappers (stable across rebuildHeaders). */
|
|
48
|
-
readonly cellRendererCache: Map<string, CachedRendererSlot<unknown>>;
|
|
49
|
-
/** Per-accessor cached headerRenderer wrappers. */
|
|
50
|
-
readonly headerRendererCache: Map<string, CachedRendererSlot<unknown>>;
|
|
51
|
-
/**
|
|
52
|
-
* Register a React node to be rendered into `container`. The container is
|
|
53
|
-
* returned to core synchronously (matching the vanilla renderer contract); the
|
|
54
|
-
* React subtree commits on the host's next render. The container is tagged with
|
|
55
|
-
* {@link PORTAL_ID_ATTR} so {@link disposeHost} can find it when core discards
|
|
56
|
-
* the host that owns it.
|
|
57
|
-
*/
|
|
58
|
-
register(node: ReactNode, container: HTMLElement): {
|
|
59
|
-
id: string;
|
|
60
|
-
unregister: () => void;
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* Replace the React node for an existing portal host without changing its id
|
|
64
|
-
* or container. Used when core re-invokes a headerRenderer on sort/filter so
|
|
65
|
-
* icon props can update while the React subtree (and its state) stays mounted.
|
|
66
|
-
* Returns false when `container` is not a live registered host (e.g. after
|
|
67
|
-
* {@link disposeHost}), so callers can fall back to {@link register}.
|
|
68
|
-
*/
|
|
69
|
-
update(container: HTMLElement, node: ReactNode): boolean;
|
|
70
|
-
private unregister;
|
|
71
|
-
/**
|
|
72
|
-
* Tear down the portal(s) owned by a host element core is permanently
|
|
73
|
-
* discarding. Collects `host` itself plus every descendant tagged with
|
|
74
|
-
* {@link PORTAL_ID_ATTR} and unregisters each, so React unmounts exactly those
|
|
75
|
-
* subtrees. Called via the core `onRendererHostDiscard` callback BEFORE the
|
|
76
|
-
* host's content is cleared/removed, so the tagged nodes are still queryable.
|
|
77
|
-
*/
|
|
78
|
-
disposeHost: (host: HTMLElement) => void;
|
|
79
|
-
/** Remove all entries (used on table teardown). */
|
|
80
|
-
clear(): void;
|
|
81
|
-
/**
|
|
82
|
-
* Drop cached wrappers for accessors no longer present in the header tree
|
|
83
|
-
* so remounted columns with the same accessor don't reuse a stale Component box.
|
|
84
|
-
*/
|
|
85
|
-
pruneRendererCaches(liveAccessors: ReadonlySet<string>): void;
|
|
86
|
-
subscribe: (listener: () => void) => (() => void);
|
|
87
|
-
getSnapshot: () => PortalEntry[];
|
|
88
|
-
private emit;
|
|
89
|
-
private scheduleEmit;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Renders one `createPortal` per registered entry. Call once from `<SimpleTable>`
|
|
93
|
-
* and include the result in its JSX so portals mount inside the host React tree.
|
|
94
|
-
*/
|
|
95
|
-
export declare function useTablePortals(bridge: PortalBridge): ReactNode;
|
|
96
|
-
export {};
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* A single React subtree to render into a DOM node owned by simple-table-core.
|
|
4
|
+
*/
|
|
5
|
+
interface PortalEntry {
|
|
6
|
+
id: string;
|
|
7
|
+
container: HTMLElement;
|
|
8
|
+
node: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Bridges simple-table-core's imperative DOM rendering with React so that custom
|
|
12
|
+
* cell / header / footer renderers stay part of the host React tree.
|
|
13
|
+
*
|
|
14
|
+
* Instead of mounting each renderer in its own isolated `createRoot` (which can
|
|
15
|
+
* never see the host app's context providers and leaks because it is never
|
|
16
|
+
* unmounted), each renderer registers a {@link PortalEntry}. The owning
|
|
17
|
+
* `<SimpleTable>` renders one `createPortal` per entry via {@link useTablePortals},
|
|
18
|
+
* so the consumer's components are children of the host tree and inherit context,
|
|
19
|
+
* Suspense, error boundaries, etc.
|
|
20
|
+
*
|
|
21
|
+
* Cleanup is authoritative, not inferred: core invokes `onRendererHostDiscard(host)`
|
|
22
|
+
* — wired to {@link disposeHost} — immediately before it permanently discards a
|
|
23
|
+
* host element (cell rebuild/edit `innerHTML = ""`, plain cell/header removal, and
|
|
24
|
+
* the animation coordinator's ghost/FLIP/shrink teardown). Header sort/filter icon
|
|
25
|
+
* refresh reuses the same host via {@link update} when the adapter returns it
|
|
26
|
+
* in place, so React state is preserved. `disposeHost` unregisters the portal(s)
|
|
27
|
+
* tagged with {@link PORTAL_ID_ATTR} inside that host, so React unmounts exactly
|
|
28
|
+
* those subtrees. Reuse/reparent paths never signal, so a reused node keeps its
|
|
29
|
+
* portal entry (and its content) with zero churn.
|
|
30
|
+
*
|
|
31
|
+
* {@link cellRendererCache} / {@link headerRendererCache} keep one wrapped
|
|
32
|
+
* renderer per accessor so unstable column rebuilds (new Component identity,
|
|
33
|
+
* same accessor) reuse the portal host instead of remounting React state.
|
|
34
|
+
*/
|
|
35
|
+
/** Mutable slot so wrapped renderers keep a stable closure across rebuilds. */
|
|
36
|
+
export type CachedRendererSlot<T = unknown> = {
|
|
37
|
+
component: T;
|
|
38
|
+
wrapped: unknown;
|
|
39
|
+
};
|
|
40
|
+
export declare class PortalBridge {
|
|
41
|
+
private entries;
|
|
42
|
+
private listeners;
|
|
43
|
+
private nextId;
|
|
44
|
+
private cachedSnapshot;
|
|
45
|
+
private snapshotDirty;
|
|
46
|
+
private emitScheduled;
|
|
47
|
+
/** Per-accessor cached cellRenderer wrappers (stable across rebuildHeaders). */
|
|
48
|
+
readonly cellRendererCache: Map<string, CachedRendererSlot<unknown>>;
|
|
49
|
+
/** Per-accessor cached headerRenderer wrappers. */
|
|
50
|
+
readonly headerRendererCache: Map<string, CachedRendererSlot<unknown>>;
|
|
51
|
+
/**
|
|
52
|
+
* Register a React node to be rendered into `container`. The container is
|
|
53
|
+
* returned to core synchronously (matching the vanilla renderer contract); the
|
|
54
|
+
* React subtree commits on the host's next render. The container is tagged with
|
|
55
|
+
* {@link PORTAL_ID_ATTR} so {@link disposeHost} can find it when core discards
|
|
56
|
+
* the host that owns it.
|
|
57
|
+
*/
|
|
58
|
+
register(node: ReactNode, container: HTMLElement): {
|
|
59
|
+
id: string;
|
|
60
|
+
unregister: () => void;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Replace the React node for an existing portal host without changing its id
|
|
64
|
+
* or container. Used when core re-invokes a headerRenderer on sort/filter so
|
|
65
|
+
* icon props can update while the React subtree (and its state) stays mounted.
|
|
66
|
+
* Returns false when `container` is not a live registered host (e.g. after
|
|
67
|
+
* {@link disposeHost}), so callers can fall back to {@link register}.
|
|
68
|
+
*/
|
|
69
|
+
update(container: HTMLElement, node: ReactNode): boolean;
|
|
70
|
+
private unregister;
|
|
71
|
+
/**
|
|
72
|
+
* Tear down the portal(s) owned by a host element core is permanently
|
|
73
|
+
* discarding. Collects `host` itself plus every descendant tagged with
|
|
74
|
+
* {@link PORTAL_ID_ATTR} and unregisters each, so React unmounts exactly those
|
|
75
|
+
* subtrees. Called via the core `onRendererHostDiscard` callback BEFORE the
|
|
76
|
+
* host's content is cleared/removed, so the tagged nodes are still queryable.
|
|
77
|
+
*/
|
|
78
|
+
disposeHost: (host: HTMLElement) => void;
|
|
79
|
+
/** Remove all entries (used on table teardown). */
|
|
80
|
+
clear(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Drop cached wrappers for accessors no longer present in the header tree
|
|
83
|
+
* so remounted columns with the same accessor don't reuse a stale Component box.
|
|
84
|
+
*/
|
|
85
|
+
pruneRendererCaches(liveAccessors: ReadonlySet<string>): void;
|
|
86
|
+
subscribe: (listener: () => void) => (() => void);
|
|
87
|
+
getSnapshot: () => PortalEntry[];
|
|
88
|
+
private emit;
|
|
89
|
+
private scheduleEmit;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Renders one `createPortal` per registered entry. Call once from `<SimpleTable>`
|
|
93
|
+
* and include the result in its JSX so portals mount inside the host React tree.
|
|
94
|
+
*/
|
|
95
|
+
export declare function useTablePortals(bridge: PortalBridge): ReactNode;
|
|
96
|
+
export {};
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import type { TableAPI } from "simple-table-core";
|
|
3
|
-
import type { SimpleTableReactProps } from "./types";
|
|
4
|
-
/**
|
|
5
|
-
* SimpleTable — React adapter for simple-table-core.
|
|
6
|
-
*
|
|
7
|
-
* Accepts the same props as SimpleTableProps (the vanilla user-facing API) but
|
|
8
|
-
* with React component types for all renderer props: cellRenderer,
|
|
9
|
-
* headerRenderer, footerRenderer, loadingStateRenderer, errorStateRenderer,
|
|
10
|
-
* emptyStateRenderer, headerDropdown, and per-column renderers inside
|
|
11
|
-
* ReactHeaderObject.
|
|
12
|
-
*
|
|
13
|
-
* The ref exposes the full TableAPI imperative interface (sort, filter,
|
|
14
|
-
* paginate, export to CSV, cell selection, column visibility, etc.).
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* const tableRef = useRef<TableAPI>(null);
|
|
18
|
-
*
|
|
19
|
-
* <SimpleTable
|
|
20
|
-
* ref={tableRef}
|
|
21
|
-
* rows={rows}
|
|
22
|
-
*
|
|
23
|
-
* footerRenderer={MyFooter}
|
|
24
|
-
* />
|
|
25
|
-
*/
|
|
26
|
-
declare const SimpleTable: React.ForwardRefExoticComponent<SimpleTableReactProps & React.RefAttributes<TableAPI>>;
|
|
27
|
-
export default SimpleTable;
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { TableAPI } from "simple-table-core";
|
|
3
|
+
import type { SimpleTableReactProps } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* SimpleTable — React adapter for simple-table-core.
|
|
6
|
+
*
|
|
7
|
+
* Accepts the same props as SimpleTableProps (the vanilla user-facing API) but
|
|
8
|
+
* with React component types for all renderer props: cellRenderer,
|
|
9
|
+
* headerRenderer, footerRenderer, loadingStateRenderer, errorStateRenderer,
|
|
10
|
+
* emptyStateRenderer, headerDropdown, and per-column renderers inside
|
|
11
|
+
* ReactHeaderObject.
|
|
12
|
+
*
|
|
13
|
+
* The ref exposes the full TableAPI imperative interface (sort, filter,
|
|
14
|
+
* paginate, export to CSV, cell selection, column visibility, etc.).
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const tableRef = useRef<TableAPI>(null);
|
|
18
|
+
*
|
|
19
|
+
* <SimpleTable
|
|
20
|
+
* ref={tableRef}
|
|
21
|
+
* rows={rows}
|
|
22
|
+
* columns={headers}
|
|
23
|
+
* footerRenderer={MyFooter}
|
|
24
|
+
* />
|
|
25
|
+
*/
|
|
26
|
+
declare const SimpleTable: React.ForwardRefExoticComponent<SimpleTableReactProps & React.RefAttributes<TableAPI>>;
|
|
27
|
+
export default SimpleTable;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SimpleTableConfig } from "simple-table-core";
|
|
2
|
+
import type { SimpleTableReactProps, ReactHeaderObject } from "./types";
|
|
3
|
+
import type { PortalBridge } from "./PortalBridge";
|
|
4
|
+
/** Resolve preferred `columns` or legacy `defaultHeaders`. */
|
|
5
|
+
export declare function resolveReactColumns(config: Pick<SimpleTableReactProps, "columns" | "defaultHeaders">): ReadonlyArray<ReactHeaderObject>;
|
|
6
|
+
export declare function buildVanillaConfig(config: SimpleTableReactProps, bridge: PortalBridge): SimpleTableConfig;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as SimpleTable } from "./SimpleTable";
|
|
2
|
+
export { asRows } from "simple-table-core";
|
|
3
|
+
export type { SimpleTableReactProps, TableInstance, ReactHeaderObject, ReactColumnDef, ReactColumnEditorConfig, ReactIconsConfig, ReactIconElement, ReactCellRenderer, ReactHeaderRenderer, ReactFooterRenderer, ReactHeaderDropdown, ReactColumnEditorRowRenderer, ReactColumnEditorCustomRenderer, ReactRowButton, ReactLoadingStateRenderer, ReactErrorStateRenderer, ReactEmptyStateRenderer, HeaderRendererComponents, HeaderRendererProps, ColumnEditorRowRendererComponents, ColumnEditorRowRendererProps, ColumnEditorCustomRendererProps, FooterRendererProps, HeaderDropdownProps, } from "./types";
|
|
4
|
+
export type { Accessor, AggregationConfig, AggregationType, AnimationsConfig, AutoSizeMode, ColumnDef, Cell, CellChangeProps, CellClickProps, CellRenderer, CellRendererProps, CellValue, ChartOptions, ColumnEditorConfig, ColumnEditorRowRenderer, ColumnEditorCustomRenderer, ColumnEditorSearchFunction, ColumnType, ColumnVisibilityState, Comparator, ComparatorProps, CustomTheme, CustomThemeProps, EmptyStateRenderer, EmptyStateRendererProps, EnumOption, ErrorStateRenderer, ErrorStateRendererProps, ExportToCSVProps, ExportValueGetter, ExportValueProps, FilterCondition, FilterOperator, StringFilterOperator, NumberFilterOperator, BooleanFilterOperator, DateFilterOperator, EnumFilterOperator, FooterPosition, GetRowId, GetRowIdParams, HeaderDropdown, HeaderRenderer, 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
|
+
export { pivotRows, buildPivotAccessor, buildPivotRowTotalAccessor, PIVOT_CHILDREN_KEY, PIVOT_IS_TOTAL_KEY, PIVOT_ACCESSOR_PREFIX, PIVOT_BLANK_LABEL, } from "simple-table-core";
|
|
@@ -1,103 +1,111 @@
|
|
|
1
|
-
import type React from "react";
|
|
2
|
-
import type { SimpleTableProps, SimpleTableConfig, HeaderObject, TableAPI, Row, CellRendererProps, HeaderRendererProps as VanillaHeaderRendererProps, FooterRendererProps as VanillaFooterRendererProps, LoadingStateRendererProps, ErrorStateRendererProps, EmptyStateRendererProps, HeaderDropdownProps as VanillaHeaderDropdownProps, ColumnEditorRowRendererProps as VanillaColumnEditorRowRendererProps, ColumnEditorCustomRendererProps as VanillaColumnEditorCustomRendererProps, ColumnEditorConfig, RowButtonProps } from "simple-table-core";
|
|
3
|
-
/** Passed to React `headerRenderer` / `headerDropdown`; slots are React nodes. */
|
|
4
|
-
export interface HeaderRendererComponents {
|
|
5
|
-
sortIcon?: React.ReactNode;
|
|
6
|
-
filterIcon?: React.ReactNode;
|
|
7
|
-
collapseIcon?: React.ReactNode;
|
|
8
|
-
labelContent?: React.ReactNode;
|
|
9
|
-
}
|
|
10
|
-
export type HeaderRendererProps = Omit<VanillaHeaderRendererProps, "components"> & {
|
|
11
|
-
components?: HeaderRendererComponents;
|
|
12
|
-
};
|
|
13
|
-
/** Column editor row slots as React nodes (core uses `IconElement` / `HTMLElement`). */
|
|
14
|
-
export interface ColumnEditorRowRendererComponents {
|
|
15
|
-
expandIcon?: React.ReactNode;
|
|
16
|
-
checkbox?: React.ReactNode;
|
|
17
|
-
dragIcon?: React.ReactNode;
|
|
18
|
-
labelContent?: React.ReactNode;
|
|
19
|
-
pinIcon?: React.ReactNode;
|
|
20
|
-
}
|
|
21
|
-
export type ColumnEditorRowRendererProps = Omit<VanillaColumnEditorRowRendererProps, "components"> & {
|
|
22
|
-
components: ColumnEditorRowRendererComponents;
|
|
23
|
-
};
|
|
24
|
-
/** Column editor custom-renderer slots as React nodes (core uses `HTMLElement`). */
|
|
25
|
-
export type ColumnEditorCustomRendererProps = Omit<VanillaColumnEditorCustomRendererProps, "searchSection" | "listSection" | "resetSection"> & {
|
|
26
|
-
searchSection?: React.ReactNode;
|
|
27
|
-
listSection?: React.ReactNode;
|
|
28
|
-
resetSection?: React.ReactNode;
|
|
29
|
-
};
|
|
30
|
-
export type FooterRendererProps = Omit<VanillaFooterRendererProps, "nextIcon" | "prevIcon"> & {
|
|
31
|
-
nextIcon?: React.ReactNode;
|
|
32
|
-
prevIcon?: React.ReactNode;
|
|
33
|
-
};
|
|
34
|
-
export type HeaderDropdownProps = Omit<VanillaHeaderDropdownProps, "components"> & {
|
|
35
|
-
components?: HeaderRendererComponents;
|
|
36
|
-
};
|
|
37
|
-
export interface TableInstance {
|
|
38
|
-
mount(): void;
|
|
39
|
-
update(config: Partial<SimpleTableConfig>): void;
|
|
40
|
-
destroy(): void;
|
|
41
|
-
getAPI(): TableAPI;
|
|
42
|
-
/** Re-measure auto-size columns (used after async React renderers mount). */
|
|
43
|
-
refitAutoSizeColumns?(): void;
|
|
44
|
-
}
|
|
45
|
-
export type ReactIconElement = React.ReactNode;
|
|
46
|
-
export interface ReactIconsConfig {
|
|
47
|
-
drag?: ReactIconElement;
|
|
48
|
-
expand?: ReactIconElement;
|
|
49
|
-
filter?: ReactIconElement;
|
|
50
|
-
headerCollapse?: ReactIconElement;
|
|
51
|
-
headerExpand?: ReactIconElement;
|
|
52
|
-
next?: ReactIconElement;
|
|
53
|
-
prev?: ReactIconElement;
|
|
54
|
-
sortDown?: ReactIconElement;
|
|
55
|
-
sortUp?: ReactIconElement;
|
|
56
|
-
pinnedLeftIcon?: ReactIconElement;
|
|
57
|
-
pinnedRightIcon?: ReactIconElement;
|
|
58
|
-
}
|
|
59
|
-
export type ReactCellRenderer = React.ComponentType<CellRendererProps> | ((props: CellRendererProps) => React.ReactNode);
|
|
60
|
-
export type ReactHeaderRenderer = React.ComponentType<HeaderRendererProps> | ((props: HeaderRendererProps) => React.ReactNode);
|
|
61
|
-
export type ReactFooterRenderer = React.ComponentType<FooterRendererProps> | ((props: FooterRendererProps) => React.ReactNode);
|
|
62
|
-
export type ReactHeaderDropdown = React.ComponentType<HeaderDropdownProps> | ((props: HeaderDropdownProps) => React.ReactNode);
|
|
63
|
-
export type ReactColumnEditorRowRenderer = React.ComponentType<ColumnEditorRowRendererProps> | ((props: ColumnEditorRowRendererProps) => React.ReactNode);
|
|
64
|
-
export type ReactColumnEditorCustomRenderer = React.ComponentType<ColumnEditorCustomRendererProps> | ((props: ColumnEditorCustomRendererProps) => React.ReactNode);
|
|
65
|
-
export type ReactRowButton = React.ComponentType<RowButtonProps> | ((props: RowButtonProps) => React.ReactNode);
|
|
66
|
-
export type ReactLoadingStateRenderer = React.ComponentType<LoadingStateRendererProps> | React.ReactNode;
|
|
67
|
-
export type ReactErrorStateRenderer = React.ComponentType<ErrorStateRendererProps> | React.ReactNode;
|
|
68
|
-
export type ReactEmptyStateRenderer = React.ComponentType<EmptyStateRendererProps> | React.ReactNode;
|
|
69
|
-
export interface ReactColumnEditorConfig extends Omit<ColumnEditorConfig, "rowRenderer" | "customRenderer"> {
|
|
70
|
-
rowRenderer?: ReactColumnEditorRowRenderer;
|
|
71
|
-
customRenderer?: ReactColumnEditorCustomRenderer;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Column definition for `defaultHeaders`: same column metadata as core
|
|
75
|
-
* `cellRenderer` / `headerRenderer` / `children` / `nestedTable` are React-only.
|
|
76
|
-
*/
|
|
77
|
-
export interface ReactHeaderObject extends Omit<HeaderObject, "cellRenderer" | "headerRenderer" | "children" | "nestedTable"> {
|
|
78
|
-
cellRenderer?: ReactCellRenderer;
|
|
79
|
-
headerRenderer?: ReactHeaderRenderer;
|
|
80
|
-
children?: ReadonlyArray<ReactHeaderObject>;
|
|
81
|
-
/** Nested grid: React table props minus row data and inherited state renderers. */
|
|
82
|
-
nestedTable?: Omit<SimpleTableReactProps, "rows" | "loadingStateRenderer" | "errorStateRenderer" | "emptyStateRenderer" | "tableEmptyStateRenderer">;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { SimpleTableProps, SimpleTableConfig, HeaderObject, TableAPI, Row, CellRendererProps, HeaderRendererProps as VanillaHeaderRendererProps, FooterRendererProps as VanillaFooterRendererProps, LoadingStateRendererProps, ErrorStateRendererProps, EmptyStateRendererProps, HeaderDropdownProps as VanillaHeaderDropdownProps, ColumnEditorRowRendererProps as VanillaColumnEditorRowRendererProps, ColumnEditorCustomRendererProps as VanillaColumnEditorCustomRendererProps, ColumnEditorConfig, RowButtonProps } from "simple-table-core";
|
|
3
|
+
/** Passed to React `headerRenderer` / `headerDropdown`; slots are React nodes. */
|
|
4
|
+
export interface HeaderRendererComponents {
|
|
5
|
+
sortIcon?: React.ReactNode;
|
|
6
|
+
filterIcon?: React.ReactNode;
|
|
7
|
+
collapseIcon?: React.ReactNode;
|
|
8
|
+
labelContent?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export type HeaderRendererProps = Omit<VanillaHeaderRendererProps, "components"> & {
|
|
11
|
+
components?: HeaderRendererComponents;
|
|
12
|
+
};
|
|
13
|
+
/** Column editor row slots as React nodes (core uses `IconElement` / `HTMLElement`). */
|
|
14
|
+
export interface ColumnEditorRowRendererComponents {
|
|
15
|
+
expandIcon?: React.ReactNode;
|
|
16
|
+
checkbox?: React.ReactNode;
|
|
17
|
+
dragIcon?: React.ReactNode;
|
|
18
|
+
labelContent?: React.ReactNode;
|
|
19
|
+
pinIcon?: React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
export type ColumnEditorRowRendererProps = Omit<VanillaColumnEditorRowRendererProps, "components"> & {
|
|
22
|
+
components: ColumnEditorRowRendererComponents;
|
|
23
|
+
};
|
|
24
|
+
/** Column editor custom-renderer slots as React nodes (core uses `HTMLElement`). */
|
|
25
|
+
export type ColumnEditorCustomRendererProps = Omit<VanillaColumnEditorCustomRendererProps, "searchSection" | "listSection" | "resetSection"> & {
|
|
26
|
+
searchSection?: React.ReactNode;
|
|
27
|
+
listSection?: React.ReactNode;
|
|
28
|
+
resetSection?: React.ReactNode;
|
|
29
|
+
};
|
|
30
|
+
export type FooterRendererProps = Omit<VanillaFooterRendererProps, "nextIcon" | "prevIcon"> & {
|
|
31
|
+
nextIcon?: React.ReactNode;
|
|
32
|
+
prevIcon?: React.ReactNode;
|
|
33
|
+
};
|
|
34
|
+
export type HeaderDropdownProps = Omit<VanillaHeaderDropdownProps, "components"> & {
|
|
35
|
+
components?: HeaderRendererComponents;
|
|
36
|
+
};
|
|
37
|
+
export interface TableInstance {
|
|
38
|
+
mount(): void;
|
|
39
|
+
update(config: Partial<SimpleTableConfig>): void;
|
|
40
|
+
destroy(): void;
|
|
41
|
+
getAPI(): TableAPI;
|
|
42
|
+
/** Re-measure auto-size columns (used after async React renderers mount). */
|
|
43
|
+
refitAutoSizeColumns?(): void;
|
|
44
|
+
}
|
|
45
|
+
export type ReactIconElement = React.ReactNode;
|
|
46
|
+
export interface ReactIconsConfig {
|
|
47
|
+
drag?: ReactIconElement;
|
|
48
|
+
expand?: ReactIconElement;
|
|
49
|
+
filter?: ReactIconElement;
|
|
50
|
+
headerCollapse?: ReactIconElement;
|
|
51
|
+
headerExpand?: ReactIconElement;
|
|
52
|
+
next?: ReactIconElement;
|
|
53
|
+
prev?: ReactIconElement;
|
|
54
|
+
sortDown?: ReactIconElement;
|
|
55
|
+
sortUp?: ReactIconElement;
|
|
56
|
+
pinnedLeftIcon?: ReactIconElement;
|
|
57
|
+
pinnedRightIcon?: ReactIconElement;
|
|
58
|
+
}
|
|
59
|
+
export type ReactCellRenderer = React.ComponentType<CellRendererProps> | ((props: CellRendererProps) => React.ReactNode);
|
|
60
|
+
export type ReactHeaderRenderer = React.ComponentType<HeaderRendererProps> | ((props: HeaderRendererProps) => React.ReactNode);
|
|
61
|
+
export type ReactFooterRenderer = React.ComponentType<FooterRendererProps> | ((props: FooterRendererProps) => React.ReactNode);
|
|
62
|
+
export type ReactHeaderDropdown = React.ComponentType<HeaderDropdownProps> | ((props: HeaderDropdownProps) => React.ReactNode);
|
|
63
|
+
export type ReactColumnEditorRowRenderer = React.ComponentType<ColumnEditorRowRendererProps> | ((props: ColumnEditorRowRendererProps) => React.ReactNode);
|
|
64
|
+
export type ReactColumnEditorCustomRenderer = React.ComponentType<ColumnEditorCustomRendererProps> | ((props: ColumnEditorCustomRendererProps) => React.ReactNode);
|
|
65
|
+
export type ReactRowButton = React.ComponentType<RowButtonProps> | ((props: RowButtonProps) => React.ReactNode);
|
|
66
|
+
export type ReactLoadingStateRenderer = React.ComponentType<LoadingStateRendererProps> | React.ReactNode;
|
|
67
|
+
export type ReactErrorStateRenderer = React.ComponentType<ErrorStateRendererProps> | React.ReactNode;
|
|
68
|
+
export type ReactEmptyStateRenderer = React.ComponentType<EmptyStateRendererProps> | React.ReactNode;
|
|
69
|
+
export interface ReactColumnEditorConfig extends Omit<ColumnEditorConfig, "rowRenderer" | "customRenderer"> {
|
|
70
|
+
rowRenderer?: ReactColumnEditorRowRenderer;
|
|
71
|
+
customRenderer?: ReactColumnEditorCustomRenderer;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Column definition for `columns` / `defaultHeaders`: same column metadata as core
|
|
75
|
+
* columns, but `cellRenderer` / `headerRenderer` / `children` / `nestedTable` are React-only.
|
|
76
|
+
*/
|
|
77
|
+
export interface ReactHeaderObject extends Omit<HeaderObject, "cellRenderer" | "headerRenderer" | "children" | "nestedTable"> {
|
|
78
|
+
cellRenderer?: ReactCellRenderer;
|
|
79
|
+
headerRenderer?: ReactHeaderRenderer;
|
|
80
|
+
children?: ReadonlyArray<ReactHeaderObject>;
|
|
81
|
+
/** Nested grid: React table props minus row data and inherited state renderers. */
|
|
82
|
+
nestedTable?: Omit<SimpleTableReactProps, "rows" | "loadingStateRenderer" | "errorStateRenderer" | "emptyStateRenderer" | "tableEmptyStateRenderer">;
|
|
83
|
+
}
|
|
84
|
+
/** Preferred name for React column definitions. Alias of {@link ReactHeaderObject}. */
|
|
85
|
+
export type ReactColumnDef = ReactHeaderObject;
|
|
86
|
+
export interface SimpleTableReactProps extends Omit<SimpleTableProps, "defaultHeaders" | "columns" | "footerRenderer" | "emptyStateRenderer" | "errorStateRenderer" | "loadingStateRenderer" | "tableEmptyStateRenderer" | "headerDropdown" | "columnEditorConfig" | "icons" | "rows" | "rowButtons" | "onColumnOrderChange" | "onColumnWidthChange" | "onHeaderEdit" | "onColumnSelect"> {
|
|
87
|
+
/**
|
|
88
|
+
* Column definitions.
|
|
89
|
+
* @deprecated Prefer {@link columns}
|
|
90
|
+
*/
|
|
91
|
+
defaultHeaders?: ReadonlyArray<ReactHeaderObject>;
|
|
92
|
+
/** Column definitions. Preferred over `defaultHeaders`. */
|
|
93
|
+
columns?: ReadonlyArray<ReactHeaderObject>;
|
|
94
|
+
onColumnOrderChange?: (newHeaders: ReactHeaderObject[]) => void;
|
|
95
|
+
onColumnWidthChange?: (headers: ReactHeaderObject[]) => void;
|
|
96
|
+
onHeaderEdit?: (header: ReactHeaderObject, newLabel: string) => void;
|
|
97
|
+
onColumnSelect?: (header: ReactHeaderObject) => void;
|
|
98
|
+
/** Row data: any object rows (domain models) or core `Row[]`; cast to vanilla `Row[]` inside the adapter. */
|
|
99
|
+
rows: ReadonlyArray<Row> | ReadonlyArray<object>;
|
|
100
|
+
footerRenderer?: ReactFooterRenderer;
|
|
101
|
+
loadingStateRenderer?: ReactLoadingStateRenderer;
|
|
102
|
+
errorStateRenderer?: ReactErrorStateRenderer;
|
|
103
|
+
emptyStateRenderer?: ReactEmptyStateRenderer;
|
|
104
|
+
tableEmptyStateRenderer?: React.ReactNode;
|
|
105
|
+
headerDropdown?: ReactHeaderDropdown;
|
|
106
|
+
columnEditorConfig?: ReactColumnEditorConfig;
|
|
107
|
+
icons?: ReactIconsConfig;
|
|
108
|
+
/** Per-row action buttons; each entry returns JSX rendered into the row's selection column. */
|
|
109
|
+
rowButtons?: ReactRowButton[];
|
|
110
|
+
}
|
|
111
|
+
export type { CellRendererProps, LoadingStateRendererProps, ErrorStateRendererProps, EmptyStateRendererProps, };
|