Skip to content

Commit 18656e1

Browse files
committed
updates
1 parent 61e198a commit 18656e1

70 files changed

Lines changed: 5292 additions & 11093 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.babelrc

Lines changed: 0 additions & 3 deletions
This file was deleted.

.github/workflows/npmpublish.yml

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,28 @@ jobs:
1111
- uses: actions/checkout@v6
1212
- uses: actions/setup-node@v6
1313
with:
14-
node-version: 16
14+
node-version: 22
1515
- run: npm ci
1616
- run: npm test
1717

1818
publish-packages:
1919
needs: build
2020
runs-on: ubuntu-latest
2121
steps:
22-
23-
# checkout the repo
2422
- uses: actions/checkout@v6
2523
- uses: actions/setup-node@v6
2624
with:
27-
node-version: 16
25+
node-version: 22
2826
registry-url: https://registry.npmjs.org/
2927
- run: npm ci
3028
- run: npm run build
3129

32-
# extract tag name
3330
- id: branch_name
3431
name: Get branch name
3532
run: |
3633
echo ::set-output name=SOURCE_NAME::${GITHUB_REF#refs/*/}
3734
echo ::set-output name=SOURCE_BRANCH::${GITHUB_REF#refs/heads/}
3835
echo ::set-output name=SOURCE_TAG::${GITHUB_REF#refs/tags/}
39-
# update version
4036
- id: update_version
4137
name: Update version
4238
run: |
@@ -49,7 +45,6 @@ jobs:
4945
SOURCE_BRANCH: ${{ steps.branch_name.outputs.SOURCE_BRANCH }}
5046
SOURCE_TAG: ${{ steps.branch_name.outputs.SOURCE_TAG }}
5147

52-
# publish to NPMJS
5348
- uses: actions/setup-node@v6
5449
with:
5550
registry-url: https://registry.npmjs.org/
@@ -59,7 +54,6 @@ jobs:
5954
npm publish --access public
6055
env:
6156
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
62-
# publish to GitHub Pacakge Registry
6357
- uses: actions/setup-node@v6
6458
with:
6559
registry-url: https://npm.pkg.github.com/

.github/workflows/test.yml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,7 @@ jobs:
88
- uses: actions/checkout@v6
99
- uses: actions/setup-node@v6
1010
with:
11-
node-version: 16
11+
node-version: 22
1212
- run: npm ci
13-
- run: npm run build
13+
- run: npm run lint
1414
- run: npm test
15-
16-
# - uses: coverallsapp/github-action@master
17-
# with:
18-
# github-token: "${{ secrets.GITHUB_TOKEN }}"
19-
# path-to-lcov: "./coverage/lcov.info"

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,6 @@ typings/
5757
# dotenv environment variables file
5858
.env
5959

60+
# Build output
61+
.build/
62+

.mocharc.yaml

Lines changed: 0 additions & 14 deletions
This file was deleted.

.nycrc

Lines changed: 0 additions & 28 deletions
This file was deleted.

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"typescript.tsdk": "node_modules\\typescript\\lib"
2+
"typescript.tsdk": "node_modules\\typescript\\lib"
33
}

biome.json

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"$schema": "https://biomejs.dev/schemas/latest/schema.json",
3+
"files": {
4+
"includes": ["**", "!dist"]
5+
},
6+
"assist": {
7+
"actions": {
8+
"source": {
9+
"organizeImports": "on"
10+
}
11+
}
12+
},
13+
"linter": {
14+
"enabled": true,
15+
"rules": {
16+
"recommended": true
17+
}
18+
},
19+
"formatter": {
20+
"enabled": true,
21+
"indentStyle": "space",
22+
"indentWidth": 2,
23+
"lineEnding": "lf",
24+
"lineWidth": 120
25+
},
26+
"vcs": {
27+
"enabled": true,
28+
"clientKind": "git",
29+
"useIgnoreFile": true
30+
}
31+
}

dist/bundle/index.cjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e={dataPropertyName:`validide_rtc_data_object`,classes:{table:`rtc-table`,wrapper:`rtc-wrapper`,handleContainer:`rtc-handle-container`,handle:`rtc-handle`,tableResizing:`rtc-table-resizing`,columnResizing:`rtc-column-resizing`},attributes:{dataResizable:`data-rtc-resizable`,dataResizableTable:`data-rtc-resizable-table`},data:{resizable:`rtcResizable`,resizableTable:`rtcResizableTable`},events:{pointerDown:[`mousedown`,`touchstart`],pointerMove:[`mousemove`,`touchmove`],pointerUp:[`mouseup`,`touchend`],windowResize:[`resize`],eventResizeStart:`eventResizeStart.rtc`,eventResize:`eventResize.rtc`,eventResizeStop:`eventResizeStop.rtc`}},t=class{column=0;table=0},n=class{x=null;isDoubleClick=!1},r=class{column;dragHandler;pointer=new n;originalWidths=new t;newWidths=new t;constructor(e,t){this.column=e,this.dragHandler=t}},i={regexEscapeRegex:/[-[\]/{}()*+?.\\^$|]/g,kebabCaseRegex:/(-\w)/g,trueRegex:/^true$/i,falseRegex:/^false$/i,onlyWhiteSpace:/^\s$/,notEmptyOrWhiteSpace:/\S/,kebabCaseToCamelCase(e){return e.replace(i.kebabCaseRegex,e=>e[1].toUpperCase())},parseStringToType(e){if(e.length===0||i.onlyWhiteSpace.test(e))return e;if(i.trueRegex.test(e))return!0;if(i.falseRegex.test(e))return!1;if(i.notEmptyOrWhiteSpace.test(e)){let t=+e;if(!Number.isNaN(t))return t}return e}},a={getDataAttributesValues(e){if(!e)return null;let t={};if(e.dataset)for(let n in e.dataset)Object.hasOwn(e.dataset,n)&&(t[n]=i.parseStringToType(e.dataset[n]||``));else for(let n=0;n<e.attributes.length;n++){if(!/^data-/.test(e.attributes[n].name))continue;let r=i.kebabCaseToCamelCase(e.attributes[n].name.replace(`data-`,``));t[r]=i.parseStringToType(e.attributes[n].value)}return t}},o=class{resizeFromBody;minWidth;maxWidth;maxInitialWidthHint;doubleClickDelay;store;constructor(e=null,t=null){this.resizeFromBody=!0,this.minWidth=40,this.maxWidth=null,this.doubleClickDelay=500,this.maxInitialWidthHint=null,this.store=null,this.overrideValues(e),this.overrideValuesFromElement(t)}overrideValues(e=null){if(e)for(let t in e)Object.hasOwn(this,t)&&(this[t]=e[t])}overrideValuesFromElement(e=null){if(!e)return;let t=a.getDataAttributesValues(e);this.overrideValues(t)}},s=class t{static instancesCount=0;static windowResizeHandlerRef=null;table;options;id;wrapper;ownerDocument;tableHeaders;dragHandlesContainer;originalWidths;eventData;lastPointerDown;onPointerDownRef;onPointerMoveRef;onPointerUpRef;constructor(n,r){if(typeof n!=`object`||!n||n.toString()!==`[object HTMLTableElement]`)throw`Invalid argument: "table".
2+
ResizableTableColumns requires that the table element is a not null HTMLTableElement object!`;if(n[e.dataPropertyName]!==void 0)throw`Existing "${e.dataPropertyName}" property.\nTable element already has a '${e.dataPropertyName}' attached object!`;this.id=t.getInstanceId(),this.table=n,this.options=new o(r,n),this.wrapper=null,this.ownerDocument=n.ownerDocument,this.tableHeaders=[],this.dragHandlesContainer=null,this.originalWidths=[],this.eventData=null,this.lastPointerDown=0,this.init(),this.table[e.dataPropertyName]=this}init(){this.validateMarkup(),this.createHandlerReferences(),this.wrapTable(),this.assignTableHeaders(),this.storeOriginalWidths(),this.setHeaderWidths(),this.createDragHandles(),this.restoreColumnWidths(),this.checkTableWidth(),this.syncHandleWidths(),this.registerWindowResizeHandler()}dispose(){this.destroyDragHandles(),this.restoreOriginalWidths(),this.unwrapTable(),this.onPointerDownRef=null,this.onPointerMoveRef=null,this.onPointerUpRef=null,this.table[e.dataPropertyName]=void 0}validateMarkup(){let e=0,t=0,n=null;for(let r=0;r<this.table.childNodes.length;r++){let i=this.table.childNodes[r];i.nodeName===`THEAD`?(e++,n=i):i.nodeName===`TBODY`&&t++}if(n===null||e!==1)throw`Markup validation: thead count.\nResizableTableColumns requires that the table element has one(1) table head element. Current count: ${e}`;if(t!==1)throw`Markup validation: tbody count.\nResizableTableColumns requires that the table element has one(1) table body element. Current count: ${t}`;let r=0,i=null;for(let e=0;e<n.childNodes.length;e++){let t=n.childNodes[e];t.nodeName===`TR`&&(r++,i===null&&(i=t))}if(i===null||r<1)throw`Markup validation: thead row count.\nResizableTableColumns requires that the table head element has at least one(1) table row element. Current count: ${r}`;let a=0,o=0;for(let e=0;e<i.childNodes.length;e++){let t=i.childNodes[e];t.nodeName===`TH`?a++:t.nodeName===`TD`&&o++}if(a<1)throw`Markup validation: thead first row cells count.\nResizableTableColumns requires that the table head's first row element has at least one(1) table header cell element. Current count: ${a}`;if(o!==0)throw`Markup validation: thead first row invalid.\nResizableTableColumns requires that the table head's first row element has no(0) table cell(TD) elements. Current count: ${o}`}wrapTable(){if(this.wrapper)return;this.wrapper=this.ownerDocument.createElement(`div`),this.wrapper.classList.add(e.classes.wrapper);let t=this.table.parentNode;t.insertBefore(this.wrapper,this.table),t.removeChild(this.table),this.wrapper.appendChild(this.table),this.table.classList.add(e.classes.table)}unwrapTable(){if(this.table.classList.remove(e.classes.table),!this.wrapper)return;let t=this.wrapper.parentNode;t.insertBefore(this.table,this.wrapper),t.removeChild(this.wrapper),this.wrapper=null}assignTableHeaders(){let e,t;for(let t=0;t<this.table.childNodes.length;t++){let n=this.table.childNodes[t];if(n.nodeName===`THEAD`){e=n;break}}if(e){for(let n=0;n<e.childNodes.length;n++){let r=e.childNodes[n];if(r.nodeName===`TR`){t=r;break}}if(t)for(let e=0;e<t.childNodes.length;e++){let n=t.childNodes[e];n.nodeName===`TH`&&this.tableHeaders.push(n)}}}storeOriginalWidths(){this.tableHeaders.forEach(e=>{this.originalWidths.push({el:e,detail:e.style.width})}),this.originalWidths.push({el:this.table,detail:this.table.style.width})}restoreOriginalWidths(){this.originalWidths.forEach(e=>{e.el.style.width=e.detail})}setHeaderWidths(){this.tableHeaders.forEach(e=>{let t=e.offsetWidth,n=this.constrainWidth(e,t);typeof this.options.maxInitialWidthHint==`number`&&(n=Math.min(n,this.options.maxInitialWidthHint)),this.updateWidth(e,n,!0,!1)})}constrainWidth(e,t){let n=t;return n=Math.max(n,this.options.minWidth||-1/0),n=Math.min(n,this.options.maxWidth||1/0),n}createDragHandles(){if(this.dragHandlesContainer!=null)throw`Drag handlers already created. Call <destroyDragHandles> if you wish to recreate them`;this.dragHandlesContainer=this.ownerDocument.createElement(`div`),this.wrapper?.insertBefore(this.dragHandlesContainer,this.table),this.dragHandlesContainer.classList.add(e.classes.handleContainer),this.getResizableHeaders().forEach(()=>{let t=this.ownerDocument.createElement(`div`);t.classList.add(e.classes.handle),this.dragHandlesContainer?.appendChild(t)}),e.events.pointerDown.forEach((e,t)=>{this.dragHandlesContainer?.addEventListener(e,this.onPointerDownRef,!1)})}destroyDragHandles(){this.dragHandlesContainer!==null&&(e.events.pointerDown.forEach((e,t)=>{this.dragHandlesContainer?.removeEventListener(e,this.onPointerDownRef,!1)}),this.dragHandlesContainer?.parentElement?.removeChild(this.dragHandlesContainer))}getDragHandlers(){let t=this.dragHandlesContainer==null?null:this.dragHandlesContainer.querySelectorAll(`.${e.classes.handle}`);return t?Array.prototype.slice.call(t).filter(e=>e.nodeName===`DIV`):[]}restoreColumnWidths(){if(!this.options.store)return;let e=t.generateTableId(this.table);if(e.length===0)return;let n=this.options.store.get(e);n&&(this.getResizableHeaders().forEach(e=>{let r=n.columns[t.generateColumnId(e)];r!==void 0&&t.setWidth(e,r)}),n.table!==void 0&&t.setWidth(this.table,n.table))}checkTableWidth(){let n=this.wrapper.clientWidth,r=n-this.table.offsetWidth;if(r<=0)return;let i=0,a=0,o=[];this.tableHeaders.forEach((t,n)=>{if(t.hasAttribute(e.attributes.dataResizable)){let e={el:t,detail:t.offsetWidth};o.push(e),i+=e.detail}});let s=0,c=null,l;for(;o.length>0;){l=o.shift(),s=r-a,c=l.el;let e=Math.floor(l.detail/i*r);e=Math.min(e,s);let t=this.updateWidth(l.el,l.detail+e,!1,!0);if(a+=t-l.detail,a>=r)break}if(s=r-a,s>0){let e=o[0]?.el||c||this.tableHeaders[this.tableHeaders.length-1],t=e.offsetWidth;this.updateWidth(e,t,!0,!0)}t.setWidth(this.table,n)}syncHandleWidths(){let e=this.table.clientWidth;t.setWidth(this.dragHandlesContainer,e),this.dragHandlesContainer.style.minWidth=`${e}px`;let n=this.getResizableHeaders();this.getDragHandlers().forEach((e,r)=>{let i=(this.options.resizeFromBody?this.table:this.table.tHead).clientHeight;if(r<n.length){let a=n[r],o=a.offsetWidth;o+=t.getOffset(a).left,o-=t.getOffset(this.dragHandlesContainer).left,e.style.left=`${o}px`,e.style.height=`${i}px`}})}getResizableHeaders(){return this.tableHeaders.filter((t,n)=>t.hasAttribute(e.attributes.dataResizable))}handlePointerDown(n){this.handlePointerUp();let i=n?n.target:null;if(i==null||i.nodeName!==`DIV`||!i.classList.contains(e.classes.handle)||typeof n.button==`number`&&n.button!==0)return;let a=i,o=this.getDragHandlers().indexOf(a),s=this.getResizableHeaders();if(o>=s.length)return;let c=Date.now(),l=c-this.lastPointerDown<this.options.doubleClickDelay,u=s[o],d=u.offsetWidth,f={column:d,table:this.table.offsetWidth},p=new r(u,a);p.pointer={x:t.getPointerX(n),isDoubleClick:l},p.originalWidths=f,p.newWidths=f,this.detachHandlers(),this.attachHandlers(),this.table.classList.add(e.classes.tableResizing),this.wrapper.classList.add(e.classes.tableResizing),a.classList.add(e.classes.columnResizing),u.classList.add(e.classes.columnResizing),this.lastPointerDown=c,this.eventData=p;var m=new CustomEvent(e.events.eventResizeStart,{detail:{column:u,columnWidth:d,table:this.table,tableWidth:this.table.clientWidth}});this.table.dispatchEvent(m),n.preventDefault()}handlePointerMove(n){if(!this.eventData||!n)return;let r=(t.getPointerX(n)||0)-(this.eventData.pointer.x||0);if(r===0)return;let i=this.eventData.originalWidths.table+r,a=this.constrainWidth(this.eventData.column,this.eventData.originalWidths.column+r);t.setWidth(this.table,i),t.setWidth(this.eventData.column,a),this.eventData.newWidths={column:a,table:i};var o=new CustomEvent(e.events.eventResize,{detail:{column:this.eventData.column,columnWidth:a,table:this.table,tableWidth:i}});this.table.dispatchEvent(o)}handlePointerUp(){if(this.detachHandlers(),!this.eventData)return;this.eventData.pointer.isDoubleClick&&this.handleDoubleClick(),this.table.classList.remove(e.classes.tableResizing),this.wrapper.classList.remove(e.classes.tableResizing),this.eventData.dragHandler.classList.remove(e.classes.columnResizing),this.eventData.column.classList.remove(e.classes.columnResizing),this.checkTableWidth(),this.syncHandleWidths(),this.refreshWrapperStyle(),this.saveColumnWidths();let t=this.eventData.newWidths||this.eventData.originalWidths;var n=new CustomEvent(e.events.eventResizeStop,{detail:{column:this.eventData.column,columnWidth:t.column,table:this.table,tableWidth:t.table}});this.table.dispatchEvent(n),this.eventData=null}handleDoubleClick(){if(!this.eventData?.column)return;let n=this.eventData.column,r=this.tableHeaders.indexOf(n),i=0,a=[];this.tableHeaders.forEach((t,n)=>{t.hasAttribute(e.attributes.dataResizable)||a.push(n)});let o=this.ownerDocument.createElement(`span`);o.style.position=`absolute`,o.style.left=`-99999px`,o.style.top=`-99999px`,o.style.visibility=`hidden`,this.ownerDocument.body.appendChild(o);let s=this.table.querySelectorAll(`tr`);for(let e=0;e<s.length;e++){let n=s[e].querySelectorAll(`td, th`),c=0;for(let e=0;e<n.length;e++){let s=n[e],l=1;if(s.hasAttribute(`colspan`)){let e=s.getAttribute(`colspan`)||`1`,t=parseInt(e,10);l=Number.isNaN(t)?1:t}if(a.indexOf(e)===-1&&l===1&&c===r){i=Math.max(i,t.getTextWidth(s,o));break}c+=l}}this.ownerDocument.body.removeChild(o);let c=i-n.offsetWidth;if(c===0)return;let l=this.eventData.originalWidths.table+c,u=this.constrainWidth(this.eventData.column,this.eventData.originalWidths.column+c);t.setWidth(this.table,l),t.setWidth(this.eventData.column,u),this.eventData.newWidths={column:u,table:l};var d=new CustomEvent(e.events.eventResize,{detail:{column:this.eventData.column,columnWidth:u,table:this.table,tableWidth:l}});this.table.dispatchEvent(d),this.checkTableWidth(),this.syncHandleWidths(),this.saveColumnWidths()}attachHandlers(){e.events.pointerMove.forEach((e,t)=>{this.ownerDocument.addEventListener(e,this.onPointerMoveRef,!1)}),e.events.pointerUp.forEach((e,t)=>{this.ownerDocument.addEventListener(e,this.onPointerUpRef,!1)})}detachHandlers(){e.events.pointerMove.forEach((e,t)=>{this.ownerDocument.removeEventListener(e,this.onPointerMoveRef,!1)}),e.events.pointerUp.forEach((e,t)=>{this.ownerDocument.removeEventListener(e,this.onPointerUpRef,!1)})}refreshWrapperStyle(){if(this.wrapper==null)return;let e=this.wrapper.style.overflowX;this.wrapper.style.overflowX=`hidden`,this.wrapper.style.overflowX=e}saveColumnWidths(){if(!this.options.store)return;let e=t.generateTableId(this.table);if(e.length===0)return;let n={table:this.table.offsetWidth,columns:{}};this.getResizableHeaders().forEach(e=>{n.columns[t.generateColumnId(e)]=e.offsetWidth}),this.options.store.set(e,n)}createHandlerReferences(){this.onPointerDownRef||=t.debounce(e=>{this.handlePointerDown(e)},100,!0),this.onPointerMoveRef||=t.debounce(e=>{this.handlePointerMove(e)},5,!1),this.onPointerUpRef||=t.debounce(e=>{this.handlePointerUp()},100,!0)}registerWindowResizeHandler(){let n=this.ownerDocument.defaultView;t.windowResizeHandlerRef||(t.windowResizeHandlerRef=t.debounce(t.onWindowResize,50,!1),e.events.windowResize.forEach((e,r)=>{n?.addEventListener(e,t.windowResizeHandlerRef,!1)}))}handleWindowResize(){this.checkTableWidth(),this.syncHandleWidths(),this.saveColumnWidths()}updateWidth(e,n,r,i){let a=e.offsetWidth,o=r?n:this.constrainWidth(e,n);if(t.setWidth(e,o),!i){let e=o-a,n=this.table.offsetWidth+e;t.setWidth(this.table,n)}return o}static onWindowResize(t){let n=t?t.target:null;if(n==null)return;let r=n.document.querySelectorAll(`.${e.classes.table}`);for(let t=0;t<r.length;t++){let n=r[t];typeof n[e.dataPropertyName]==`object`&&n[e.dataPropertyName].handleWindowResize()}}static generateColumnId(t){return(t.getAttribute(e.attributes.dataResizable)||``).trim().replace(/\./g,`_`)}static generateTableId(t){let n=(t.getAttribute(e.attributes.dataResizableTable)||``).trim().replace(/\./g,`_`);return n.length?`rtc/${n}`:n}static setWidth(e,t){let n=t.toFixed(2);n=t>0?n:`0`,e.style.width=`${n}px`}static getInstanceId(){return t.instancesCount++}static debounce=(e,t,n)=>{let r=null;return i=>{let a=()=>{r=null,n||e(i)},o=n&&!r;r&&clearTimeout(r),r=setTimeout(a,t),o&&e(i)}};static getPointerX(e){if(e.type.indexOf(`touch`)===0){let t=e;if(t.touches?.length)return t.touches[0].pageX;if(t.changedTouches?.length)return t.changedTouches[0].pageX}return e.pageX}static getTextWidth(e,t){if(!e||!t)return 0;var n=`${e.textContent?.trim().replace(/\s/g,`&nbsp;`)}&nbsp;`;let r=e.ownerDocument.defaultView?.getComputedStyle(e);return[`fontFamily`,`fontSize`,`fontWeight`,`padding`,`border`,`boxSizing`].forEach(e=>{t.style[e]=r[e]}),t.innerHTML=n,t.offsetWidth}static getOffset(e){if(!e)return{top:0,left:0};let t=e.getBoundingClientRect();return{top:t.top+e.ownerDocument.body.scrollTop,left:t.left+e.ownerDocument.body.scrollLeft}}};exports.PointerData=n,exports.ResizableConstants=e,exports.ResizableEventData=r,exports.ResizableOptions=o,exports.ResizableTableColumns=s,exports.Utilities=i,exports.UtilitiesDOM=a,exports.WidthsData=t;

0 commit comments

Comments
 (0)