@lazhus/kg-ui 0.8.8 → 0.8.9

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.
@@ -1407,13 +1407,13 @@
1407
1407
  "text": "object"
1408
1408
  },
1409
1409
  "static": true,
1410
- "default": "{ columns: { type: Array }, // [{ label: 'Name', field: 'name', width: '100px', align: 'left', sortable: true }] data: { type: Array }, loading: { type: Boolean }, striped: { type: Boolean }, bordered: { type: Boolean }, hover: { type: Boolean }, selectable: { type: Boolean }, selectionMode: { type: String, attribute: 'selection-mode' }, // 'single' | 'multiple', default 'multiple' selectedRows: { type: Array, state: true }, // Sorting sortable: { type: Boolean }, // Global sort enable/disable _sortColumn: { type: String, state: true }, _sortDirection: { type: String, state: true }, // 'asc' | 'desc' // Pagination pagination: { type: Boolean }, pageSize: { type: Number, attribute: 'page-size' }, _currentPage: { type: Number, state: true } }"
1410
+ "default": "{ columns: { type: Array }, // [{ label: 'Name', field: 'name', width: '100px', align: 'left', sortable: true }] data: { type: Array }, loading: { type: Boolean }, striped: { type: Boolean }, bordered: { type: Boolean }, hover: { type: Boolean }, selectable: { type: Boolean }, selectionMode: { type: String, attribute: 'selection-mode' }, // 'single' | 'multiple', default 'multiple' selectedRows: { type: Array, state: true }, // Sorting sortable: { type: Boolean }, // Global sort enable/disable _sortColumn: { type: String, state: true }, _sortDirection: { type: String, state: true }, // 'asc' | 'desc' // Pagination pagination: { type: Boolean }, pageSize: { type: Number, attribute: 'page-size' }, pageSizeOptions: { type: Array, attribute: 'page-size-options' }, total: { type: Number }, // Total records for server-side serverSide: { type: Boolean, attribute: 'server-side' }, currentPage: { type: Number, attribute: 'current-page' } }"
1411
1411
  },
1412
1412
  {
1413
1413
  "kind": "field",
1414
1414
  "name": "styles",
1415
1415
  "static": true,
1416
- "default": "css` :host { display: block; width: 100%; font-family: inherit; color: var(--kg-text); --datagrid-border: var(--kg-border, #e2e8f0); --datagrid-header-bg: var(--kg-surface, #f8fafc); --datagrid-selected-bg: rgba(var(--kg-primary-rgb, 65, 171, 52), 0.08); } .wrapper { display: flex; flex-direction: column; gap: 1rem; width: 100%; } .table-container { width: 100%; overflow-x: auto; border: 1px solid var(--datagrid-border); border-radius: var(--kg-radius-md, 8px); background: var(--kg-bg); } table { width: 100%; border-collapse: collapse; text-align: left; font-size: 0.9rem; } thead { background-color: var(--datagrid-header-bg); border-bottom: 2px solid var(--datagrid-border); } th { padding: 12px 16px; font-weight: 600; color: var(--kg-text-muted); white-space: nowrap; user-select: none; transition: background 0.2s; overflow: hidden; text-overflow: ellipsis; } th.sortable { cursor: pointer; } th.sortable:hover { background-color: rgba(0,0,0,0.03); color: var(--kg-text); } td { padding: 12px 16px; border-bottom: 1px solid var(--datagrid-border); transition: background 0.2s; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } tr:last-child td { border-bottom: none; } /* Modifiers */ :host([striped]) tbody tr:nth-child(even) { background-color: var(--kg-surface); } :host([bordered]) td, :host([bordered]) th { border-right: 1px solid var(--datagrid-border); } :host([bordered]) td:last-child, :host([bordered]) th:last-child { border-right: none; } tbody tr { transition: background-color 0.2s; } :host([hover]) tbody tr:hover { background-color: var(--datagrid-hover-bg, rgba(0, 0, 0, 0.04)); } /* Selection */ .checkbox-cell { width: 48px; text-align: center; padding: 0 8px; } /* kg-checkbox and kg-radio handle their own sizing and cursor */ tr.selected { background-color: var(--datagrid-selected-bg) !important; } /* Alignment */ .align-left { text-align: left; } .align-center { text-align: center; } .align-right { text-align: right; } /* Empty State */ .empty-state { padding: 3rem; text-align: center; color: var(--kg-text-muted); } /* Sort Icons */ .sort-icon { display: inline-block; margin-left: 4px; vertical-align: middle; opacity: 0.3; font-size: 0.8em; } th.sortable:hover .sort-icon { opacity: 0.7; } th.active-sort .sort-icon { opacity: 1; color: var(--kg-primary); } /* Pagination */ .pagination-footer { display: flex; align-items: center; justify-content: space-between; padding: 1rem 0; gap: 1rem; flex-wrap: wrap; border-top: 1px solid var(--datagrid-border); margin-top: -1px; /* Overlap with table border if needed, or keeping it separate */ } .pagination-info { font-size: 0.85rem; color: var(--kg-text-muted); font-weight: 500; } .pagination-controls { display: flex; align-items: center; gap: 0.25rem; } `"
1416
+ "default": "css` :host { display: block; width: 100%; font-family: inherit; color: var(--kg-text); --datagrid-border: var(--kg-border, #e2e8f0); --datagrid-header-bg: var(--kg-surface, #f8fafc); --datagrid-selected-bg: rgba(var(--kg-primary-rgb, 65, 171, 52), 0.08); } .wrapper { display: flex; flex-direction: column; gap: 1rem; width: 100%; } .table-container { width: 100%; overflow-x: auto; border: 1px solid var(--datagrid-border); border-radius: var(--kg-radius-md, 8px); background: var(--kg-bg); } table { width: 100%; border-collapse: collapse; text-align: left; font-size: 0.9rem; } thead { background-color: var(--datagrid-header-bg); border-bottom: 2px solid var(--datagrid-border); } th { padding: 12px 16px; font-weight: 600; color: var(--kg-text-muted); white-space: nowrap; user-select: none; transition: background 0.2s; overflow: hidden; text-overflow: ellipsis; } th.sortable { cursor: pointer; } th.sortable:hover { background-color: rgba(0,0,0,0.03); color: var(--kg-text); } td { padding: 12px 16px; border-bottom: 1px solid var(--datagrid-border); transition: background 0.2s; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } tr:last-child td { border-bottom: none; } /* Modifiers */ :host([striped]) tbody tr:nth-child(even) { background-color: var(--kg-surface); } :host([bordered]) td, :host([bordered]) th { border-right: 1px solid var(--datagrid-border); } :host([bordered]) td:last-child, :host([bordered]) th:last-child { border-right: none; } tbody tr { transition: background-color 0.2s; } :host([hover]) tbody tr:hover { background-color: var(--datagrid-hover-bg, rgba(0, 0, 0, 0.04)); } /* Selection */ .checkbox-cell { width: 48px; text-align: center; padding: 0 8px; } /* kg-checkbox and kg-radio handle their own sizing and cursor */ tr.selected { background-color: var(--datagrid-selected-bg) !important; } /* Alignment */ .align-left { text-align: left; } .align-center { text-align: center; } .align-right { text-align: right; } /* Empty State */ .empty-state { padding: 3rem; text-align: center; color: var(--kg-text-muted); } /* Sort Icons */ .sort-icon { display: inline-block; margin-left: 4px; vertical-align: middle; opacity: 0.3; font-size: 0.8em; } th.sortable:hover .sort-icon { opacity: 0.7; } th.active-sort .sort-icon { opacity: 1; color: var(--kg-primary); } /* Pagination */ .pagination-footer { display: flex; align-items: center; justify-content: space-between; padding: 1rem 0; gap: 1rem; flex-wrap: wrap; border-top: 1px solid var(--datagrid-border); margin-top: -1px; /* Overlap with table border if needed, or keeping it separate */ } .pagination-info { font-size: 0.85rem; color: var(--kg-text-muted); font-weight: 500; } .pagination-controls { display: flex; align-items: center; gap: 0.25rem; } .page-size-selector { display: flex; align-items: center; gap: 0.5rem; font-size: 0.85rem; color: var(--kg-text-muted); } .page-size-select { padding: 4px 8px; border: 1px solid var(--datagrid-border); border-radius: var(--kg-radius-sm, 4px); background: var(--kg-surface); color: var(--kg-text); outline: none; cursor: pointer; } `"
1417
1417
  },
1418
1418
  {
1419
1419
  "kind": "method",
@@ -1471,6 +1471,15 @@
1471
1471
  }
1472
1472
  ]
1473
1473
  },
1474
+ {
1475
+ "kind": "method",
1476
+ "name": "_handlePageSizeChange",
1477
+ "parameters": [
1478
+ {
1479
+ "name": "e"
1480
+ }
1481
+ ]
1482
+ },
1474
1483
  {
1475
1484
  "kind": "method",
1476
1485
  "name": "_renderCellContent",
@@ -1594,7 +1603,31 @@
1594
1603
  },
1595
1604
  {
1596
1605
  "kind": "field",
1597
- "name": "_currentPage",
1606
+ "name": "pageSizeOptions",
1607
+ "type": {
1608
+ "text": "array"
1609
+ },
1610
+ "default": "[10, 20, 50, 100]"
1611
+ },
1612
+ {
1613
+ "kind": "field",
1614
+ "name": "total",
1615
+ "type": {
1616
+ "text": "number"
1617
+ },
1618
+ "default": "0"
1619
+ },
1620
+ {
1621
+ "kind": "field",
1622
+ "name": "serverSide",
1623
+ "type": {
1624
+ "text": "boolean"
1625
+ },
1626
+ "default": "false"
1627
+ },
1628
+ {
1629
+ "kind": "field",
1630
+ "name": "currentPage",
1598
1631
  "type": {
1599
1632
  "text": "number"
1600
1633
  },
@@ -1635,6 +1668,12 @@
1635
1668
  "type": {
1636
1669
  "text": "CustomEvent"
1637
1670
  }
1671
+ },
1672
+ {
1673
+ "name": "page-size-change",
1674
+ "type": {
1675
+ "text": "CustomEvent"
1676
+ }
1638
1677
  }
1639
1678
  ],
1640
1679
  "superclass": {
@@ -1,28 +1,28 @@
1
- var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[i]=r)(t,"symbol"!=typeof i?i+"":i,r);import{LitElement as i,css as r,html as o}from"lit";import"lit/directives/class-map.js";import"./kg-checkbox.js";import"./kg-radio.js";import{unsafeHTML as s}from"lit/directives/unsafe-html.js";import"./kg-button.js";import"./kg-skeleton.js";class a extends i{constructor(){super(),this.columns=[],this.data=[],this.loading=!1,this.striped=!1,this.bordered=!1,this.hover=!0,this.selectable=!1,this.selectionMode="multiple",this.selectedRows=[],this.sortable=!1,this.pagination=!1,this.pageSize=10,this._currentPage=1,this._sortColumn=null,this._sortDirection=null}_handleSelectAll(e){if(!this.selectable||"single"===this.selectionMode)return;const t=e.detail.checked;this.selectedRows=t?[...this.data]:[],this._emitSelectionChange()}_handleRowSelect(e,t){if(this.selectable)if(t.stopPropagation(),"single"===this.selectionMode)this._isSelected(e)||(this.selectedRows=[e],this._emitSelectionChange());else{let i;i="change"===t.type&&void 0!==t.detail&&void 0!==t.detail.checked?t.detail.checked:!this._isSelected(e),this.selectedRows=i?[...this.selectedRows,e]:this.selectedRows.filter(t=>t!==e),this._emitSelectionChange()}}_isSelected(e){return this.selectedRows.includes(e)}_emitSelectionChange(){this.dispatchEvent(new CustomEvent("selection-change",{detail:{selectedRows:this.selectedRows},bubbles:!0,composed:!0}))}_handleSort(e){(e.sortable||this.sortable)&&(this._sortColumn===e.field?this._sortDirection="asc"===this._sortDirection?"desc":"asc":(this._sortColumn=e.field,this._sortDirection="asc"),this.dispatchEvent(new CustomEvent("sort",{detail:{column:this._sortColumn,direction:this._sortDirection},bubbles:!0,composed:!0})))}_getProcessedData(){let e=[...this.data];if(this._sortColumn&&e.sort((e,t)=>{const i=e[this._sortColumn],r=t[this._sortColumn];return i<r?"asc"===this._sortDirection?-1:1:i>r?"asc"===this._sortDirection?1:-1:0}),this.pagination){const t=(this._currentPage-1)*this.pageSize,i=t+this.pageSize;return{data:e.slice(t,i),total:e.length}}return{data:e,total:e.length}}_changePage(e){if(e<1)return;const t=this.data.length;e>Math.ceil(t/this.pageSize)||(this._currentPage=e,this.dispatchEvent(new CustomEvent("page-change",{detail:{page:this._currentPage,pageSize:this.pageSize},bubbles:!0,composed:!0})))}_renderCellContent(e,t){if(!e.render)return t[e.field];const i=e.render(t);return"string"==typeof i?s(i):i}_renderHeaderContent(e){if(e.headerRender){const t=e.headerRender(e);return"string"==typeof t?s(t):t}return e.label}render(){const{data:e,total:t}=this._getProcessedData(),i=this.pagination?Math.ceil(t/this.pageSize):1,r=this.data.length>0&&this.selectedRows.length===this.data.length,s="single"===this.selectionMode;return o`
1
+ var e=Object.defineProperty,t=(t,i,s)=>((t,i,s)=>i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[i]=s)(t,"symbol"!=typeof i?i+"":i,s);import{LitElement as i,css as s,html as a}from"lit";import"lit/directives/class-map.js";import"./kg-checkbox.js";import"./kg-radio.js";import{unsafeHTML as r}from"lit/directives/unsafe-html.js";import"./kg-button.js";import"./kg-skeleton.js";class o extends i{constructor(){super(),this.columns=[],this.data=[],this.loading=!1,this.striped=!1,this.bordered=!1,this.hover=!0,this.selectable=!1,this.selectionMode="multiple",this.selectedRows=[],this.sortable=!1,this.pagination=!1,this.pageSize=10,this.pageSizeOptions=[10,20,50,100],this.total=0,this.serverSide=!1,this.currentPage=1,this._sortColumn=null,this._sortDirection=null}_handleSelectAll(e){if(!this.selectable||"single"===this.selectionMode)return;const t=e.detail.checked;this.selectedRows=t?[...this.data]:[],this._emitSelectionChange()}_handleRowSelect(e,t){if(this.selectable)if(t.stopPropagation(),"single"===this.selectionMode)this._isSelected(e)||(this.selectedRows=[e],this._emitSelectionChange());else{let i;i="change"===t.type&&void 0!==t.detail&&void 0!==t.detail.checked?t.detail.checked:!this._isSelected(e),this.selectedRows=i?[...this.selectedRows,e]:this.selectedRows.filter(t=>t!==e),this._emitSelectionChange()}}_isSelected(e){return this.selectedRows.includes(e)}_emitSelectionChange(){this.dispatchEvent(new CustomEvent("selection-change",{detail:{selectedRows:this.selectedRows},bubbles:!0,composed:!0}))}_handleSort(e){(e.sortable||this.sortable)&&(this._sortColumn===e.field?this._sortDirection="asc"===this._sortDirection?"desc":"asc":(this._sortColumn=e.field,this._sortDirection="asc"),this.dispatchEvent(new CustomEvent("sort",{detail:{column:this._sortColumn,direction:this._sortDirection},bubbles:!0,composed:!0})))}_getProcessedData(){if(this.serverSide)return{data:this.data,total:this.total||this.data.length};let e=[...this.data];if(this._sortColumn&&e.sort((e,t)=>{const i=e[this._sortColumn],s=t[this._sortColumn];return i<s?"asc"===this._sortDirection?-1:1:i>s?"asc"===this._sortDirection?1:-1:0}),this.pagination){const t=(this.currentPage-1)*this.pageSize,i=t+this.pageSize;return{data:e.slice(t,i),total:e.length}}return{data:e,total:e.length}}_changePage(e){if(e<1)return;const t=this.serverSide&&this.total||this.data.length;e>Math.ceil(t/this.pageSize)||(this.currentPage=e,this.dispatchEvent(new CustomEvent("page-change",{detail:{page:this.currentPage,pageSize:this.pageSize},bubbles:!0,composed:!0})))}_handlePageSizeChange(e){const t=parseInt(e.target.value);this.pageSize=t,this.currentPage=1,this.dispatchEvent(new CustomEvent("page-size-change",{detail:{pageSize:t,page:1},bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("page-change",{detail:{page:1,pageSize:t},bubbles:!0,composed:!0}))}_renderCellContent(e,t){if(!e.render)return t[e.field];const i=e.render(t);return"string"==typeof i?r(i):i}_renderHeaderContent(e){if(e.headerRender){const t=e.headerRender(e);return"string"==typeof t?r(t):t}return e.label}render(){const{data:e,total:t}=this._getProcessedData(),i=this.pagination?Math.ceil(t/this.pageSize):1,s=this.data.length>0&&this.selectedRows.length===this.data.length,r="single"===this.selectionMode,o=(()=>{const e=[],t=this.currentPage-2,s=this.currentPage+2+1;for(let a=1;a<=i;a++)(1===a||a===i||a>=t&&a<s)&&e.push(a);return e})();return a`
2
2
  <div class="wrapper">
3
3
  <div class="table-container">
4
4
  <table>
5
5
  <thead>
6
6
  <tr>
7
- ${this.selectable?o`
7
+ ${this.selectable?a`
8
8
  <th class="checkbox-cell">
9
- ${s?"":o`
9
+ ${r?"":a`
10
10
  <kg-checkbox
11
- .checked="${r}"
11
+ .checked="${s}"
12
12
  @change="${this._handleSelectAll}"
13
13
  ></kg-checkbox>
14
14
  `}
15
15
  </th>
16
16
  `:""}
17
17
 
18
- ${this.columns.map(e=>o`
18
+ ${this.columns.map(e=>a`
19
19
  <th
20
20
  class="${e.sortable||this.sortable?"sortable":""} ${e.align?`align-${e.align}`:""} ${this._sortColumn===e.field?"active-sort":""}"
21
21
  style="${e.width?`width: ${e.width}; min-width: ${e.width}; max-width: ${e.width};`:""}"
22
22
  @click="${()=>this._handleSort(e)}"
23
23
  >
24
24
  ${this._renderHeaderContent(e)}
25
- ${e.sortable||this.sortable?o`
25
+ ${e.sortable||this.sortable?a`
26
26
  <span class="sort-icon">
27
27
  ${this._sortColumn===e.field?"asc"===this._sortDirection?"▲":"▼":"⇅"}
28
28
  </span>
@@ -32,40 +32,40 @@ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,con
32
32
  </tr>
33
33
  </thead>
34
34
  <tbody>
35
- ${this.loading?o`
36
- ${Array.from({length:this.pagination&&this.pageSize?this.pageSize:5}).map(()=>o`
35
+ ${this.loading?a`
36
+ ${Array.from({length:this.pagination&&this.pageSize?this.pageSize:5}).map(()=>a`
37
37
  <tr>
38
- ${this.selectable?o`
38
+ ${this.selectable?a`
39
39
  <td class="checkbox-cell">
40
40
  <kg-skeleton variant="rect" width="16px" height="16px" style="border-radius: 4px; display: inline-block;"></kg-skeleton>
41
41
  </td>
42
42
  `:""}
43
- ${this.columns.map(()=>o`
43
+ ${this.columns.map(()=>a`
44
44
  <td>
45
45
  <kg-skeleton variant="text" width="${Math.floor(50*Math.random()+40)}%" height="1rem"></kg-skeleton>
46
46
  </td>
47
47
  `)}
48
48
  </tr>
49
49
  `)}
50
- `:0===e.length?o`
50
+ `:0===e.length?a`
51
51
  <tr>
52
52
  <td colspan="${this.columns.length+(this.selectable?1:0)}" class="empty-state">
53
53
  Veri bulunamadı.
54
54
  </td>
55
55
  </tr>
56
- `:e.map(e=>o`
56
+ `:e.map(e=>a`
57
57
  <tr
58
58
  class="${this._isSelected(e)?"selected":""}"
59
59
  @click="${t=>this._handleRowSelect(e,t)}"
60
60
  >
61
- ${this.selectable?o`
61
+ ${this.selectable?a`
62
62
  <td class="checkbox-cell">
63
- ${s?o`
63
+ ${r?a`
64
64
  <kg-radio
65
65
  .checked="${this._isSelected(e)}"
66
66
  style="pointer-events: none;"
67
67
  ></kg-radio>
68
- `:o`
68
+ `:a`
69
69
  <kg-checkbox
70
70
  .checked="${this._isSelected(e)}"
71
71
  @change="${t=>this._handleRowSelect(e,t)}"
@@ -75,7 +75,7 @@ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,con
75
75
  </td>
76
76
  `:""}
77
77
 
78
- ${this.columns.map(t=>o`
78
+ ${this.columns.map(t=>a`
79
79
  <td class="${t.align?`align-${t.align}`:""}">
80
80
  ${this._renderCellContent(t,e)}
81
81
  </td>
@@ -86,15 +86,27 @@ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,con
86
86
  </table>
87
87
  </div>
88
88
 
89
- ${this.pagination&&t>0?o`
89
+ ${this.pagination&&t>0?a`
90
90
  <div class="pagination-footer">
91
- <div class="pagination-info">
92
- Toplam <strong>${t}</strong> kayıttan <strong>${(this._currentPage-1)*this.pageSize+1} - ${Math.min(this._currentPage*this.pageSize,t)}</strong> arası gösteriliyor
91
+ <div style="display: flex; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
92
+ <div class="pagination-info">
93
+ Toplam <strong>${t}</strong> kayıttan <strong>${(this.currentPage-1)*this.pageSize+1} - ${Math.min(this.currentPage*this.pageSize,t)}</strong> arası gösteriliyor
94
+ </div>
95
+
96
+ <div class="page-size-selector">
97
+ <span>Sayfa başına:</span>
98
+ <select class="page-size-select" @change="${this._handlePageSizeChange}">
99
+ ${this.pageSizeOptions.map(e=>a`
100
+ <option value="${e}" ?selected="${this.pageSize===e}">${e}</option>
101
+ `)}
102
+ </select>
103
+ </div>
93
104
  </div>
105
+
94
106
  <div class="pagination-controls">
95
107
  <!-- First Page -->
96
108
  <kg-button
97
- ?disabled="${1===this._currentPage}"
109
+ ?disabled="${1===this.currentPage}"
98
110
  @click="${()=>this._changePage(1)}"
99
111
  text
100
112
  color="secondary"
@@ -106,8 +118,8 @@ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,con
106
118
 
107
119
  <!-- Previous Page -->
108
120
  <kg-button
109
- ?disabled="${1===this._currentPage}"
110
- @click="${()=>this._changePage(this._currentPage-1)}"
121
+ ?disabled="${1===this.currentPage}"
122
+ @click="${()=>this._changePage(this.currentPage-1)}"
111
123
  text
112
124
  color="secondary"
113
125
  size="medium"
@@ -117,11 +129,12 @@ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,con
117
129
  </kg-button>
118
130
 
119
131
  <!-- Page Numbers -->
120
- ${Array.from({length:i},(e,t)=>t+1).map(e=>o`
132
+ ${o.map((e,t)=>a`
133
+ ${t>0&&e-o[t-1]>1?a`<span class="pagination-info">...</span>`:""}
121
134
  <kg-button
122
135
  @click="${()=>this._changePage(e)}"
123
- color="${this._currentPage===e?"primary":"secondary"}"
124
- ?text="${this._currentPage!==e}"
136
+ color="${this.currentPage===e?"primary":"secondary"}"
137
+ ?text="${this.currentPage!==e}"
125
138
  size="medium"
126
139
  square
127
140
  >
@@ -131,8 +144,8 @@ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,con
131
144
 
132
145
  <!-- Next Page -->
133
146
  <kg-button
134
- ?disabled="${this._currentPage===i}"
135
- @click="${()=>this._changePage(this._currentPage+1)}"
147
+ ?disabled="${this.currentPage===i}"
148
+ @click="${()=>this._changePage(this.currentPage+1)}"
136
149
  text
137
150
  color="secondary"
138
151
  size="medium"
@@ -143,7 +156,7 @@ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,con
143
156
 
144
157
  <!-- Last Page -->
145
158
  <kg-button
146
- ?disabled="${this._currentPage===i}"
159
+ ?disabled="${this.currentPage===i}"
147
160
  @click="${()=>this._changePage(i)}"
148
161
  text
149
162
  color="secondary"
@@ -156,7 +169,7 @@ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,con
156
169
  </div>
157
170
  `:""}
158
171
  </div>
159
- `}}t(a,"properties",{columns:{type:Array},data:{type:Array},loading:{type:Boolean},striped:{type:Boolean},bordered:{type:Boolean},hover:{type:Boolean},selectable:{type:Boolean},selectionMode:{type:String,attribute:"selection-mode"},selectedRows:{type:Array,state:!0},sortable:{type:Boolean},_sortColumn:{type:String,state:!0},_sortDirection:{type:String,state:!0},pagination:{type:Boolean},pageSize:{type:Number,attribute:"page-size"},_currentPage:{type:Number,state:!0}}),t(a,"styles",r`
172
+ `}}t(o,"properties",{columns:{type:Array},data:{type:Array},loading:{type:Boolean},striped:{type:Boolean},bordered:{type:Boolean},hover:{type:Boolean},selectable:{type:Boolean},selectionMode:{type:String,attribute:"selection-mode"},selectedRows:{type:Array,state:!0},sortable:{type:Boolean},_sortColumn:{type:String,state:!0},_sortDirection:{type:String,state:!0},pagination:{type:Boolean},pageSize:{type:Number,attribute:"page-size"},pageSizeOptions:{type:Array,attribute:"page-size-options"},total:{type:Number},serverSide:{type:Boolean,attribute:"server-side"},currentPage:{type:Number,attribute:"current-page"}}),t(o,"styles",s`
160
173
  :host {
161
174
  display: block;
162
175
  width: 100%;
@@ -315,5 +328,23 @@ var e=Object.defineProperty,t=(t,i,r)=>((t,i,r)=>i in t?e(t,i,{enumerable:!0,con
315
328
  gap: 0.25rem;
316
329
  }
317
330
 
331
+ .page-size-selector {
332
+ display: flex;
333
+ align-items: center;
334
+ gap: 0.5rem;
335
+ font-size: 0.85rem;
336
+ color: var(--kg-text-muted);
337
+ }
338
+
339
+ .page-size-select {
340
+ padding: 4px 8px;
341
+ border: 1px solid var(--datagrid-border);
342
+ border-radius: var(--kg-radius-sm, 4px);
343
+ background: var(--kg-surface);
344
+ color: var(--kg-text);
345
+ outline: none;
346
+ cursor: pointer;
347
+ }
348
+
318
349
 
319
- `),"undefined"==typeof customElements||customElements.get("kg-datagrid")||customElements.define("kg-datagrid",a);export{a as kgdatagrid};
350
+ `),"undefined"==typeof customElements||customElements.get("kg-datagrid")||customElements.define("kg-datagrid",o);export{o as kgdatagrid};
@@ -1 +1 @@
1
- import e,{useState as t,useRef as r,useMemo as n,useEffect as a}from"react";import{createPortal as o}from"react-dom";import{o as c}from"../chunks/create-component-jQ1kjF1Z.js";import{kgdatagrid as s}from"../components/kg-datagrid.js";"undefined"==typeof customElements||customElements.get("kg-datagrid")||customElements.define("kg-datagrid",s);const l=c({tagName:"kg-datagrid",elementClass:s,react:e,events:{onSelectionChange:"selection-change",onPageChange:"page-change",onSort:"sort"}}),m=({columns:c,...s})=>{const[m,i]=t(/* @__PURE__ */new Map),d=r(null),u=r(/* @__PURE__ */new WeakMap),g=n(()=>c?c.map(t=>t.render?{...t,render:r=>{const n=t.render(r);if(!e.isValidElement(n))return n;let a=u.current.get(r);a||(a=/* @__PURE__ */new Map,u.current.set(r,a));let o=a.get(t.field);return o||(o=document.createElement("div"),o.className="kg-react-cell-portal",o.style.display="contents",o.dataset.reactCellId=Math.random().toString(36).substr(2,9),a.set(t.field,o)),o._reactContent=n,o}}:t):[],[c]);return a(()=>{const e=d.current;if(!e)return;const t=e.shadowRoot||e,r=()=>{const e=t.querySelectorAll(".kg-react-cell-portal"),r=/* @__PURE__ */new Map;e.forEach(e=>{e._reactContent&&r.set(e,e._reactContent)}),i(e=>{if(e.size!==r.size)return r;for(const[t,n]of r)if(e.get(t)!==n)return r;return e})},n=new MutationObserver(()=>{r()});return n.observe(t,{childList:!0,subtree:!0,attributes:!1,characterData:!1}),r(),()=>n.disconnect()},[g,s.data]),e.createElement(e.Fragment,null,e.createElement(l,{ref:d,columns:g,...s}),Array.from(m.entries()).map(([e,t])=>o(t,e,e.dataset.reactCellId)))};export{m as KgDataGrid};
1
+ import e,{useState as t,useRef as r,useMemo as n,useEffect as a}from"react";import{createPortal as o}from"react-dom";import{o as c}from"../chunks/create-component-jQ1kjF1Z.js";import{kgdatagrid as s}from"../components/kg-datagrid.js";"undefined"==typeof customElements||customElements.get("kg-datagrid")||customElements.define("kg-datagrid",s);const l=c({tagName:"kg-datagrid",elementClass:s,react:e,events:{onSelectionChange:"selection-change",onPageChange:"page-change",onPageSizeChange:"page-size-change",onSort:"sort"}}),i=({columns:c,...s})=>{const[i,m]=t(/* @__PURE__ */new Map),d=r(null),g=r(/* @__PURE__ */new WeakMap),u=n(()=>c?c.map(t=>t.render?{...t,render:r=>{const n=t.render(r);if(!e.isValidElement(n))return n;let a=g.current.get(r);a||(a=/* @__PURE__ */new Map,g.current.set(r,a));let o=a.get(t.field);return o||(o=document.createElement("div"),o.className="kg-react-cell-portal",o.style.display="contents",o.dataset.reactCellId=Math.random().toString(36).substr(2,9),a.set(t.field,o)),o._reactContent=n,o}}:t):[],[c]);return a(()=>{const e=d.current;if(!e)return;const t=e.shadowRoot||e,r=()=>{const e=t.querySelectorAll(".kg-react-cell-portal"),r=/* @__PURE__ */new Map;e.forEach(e=>{e._reactContent&&r.set(e,e._reactContent)}),m(e=>{if(e.size!==r.size)return r;for(const[t,n]of r)if(e.get(t)!==n)return r;return e})},n=new MutationObserver(()=>{r()});return n.observe(t,{childList:!0,subtree:!0,attributes:!1,characterData:!1}),r(),()=>n.disconnect()},[u,s.data]),e.createElement(e.Fragment,null,e.createElement(l,{ref:d,columns:u,...s}),Array.from(i.entries()).map(([e,t])=>o(t,e,e.dataset.reactCellId)))};export{i as KgDataGrid};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lazhus/kg-ui",
3
- "version": "0.8.8",
3
+ "version": "0.8.9",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -26,6 +26,14 @@ export class kgdatagrid extends LitElement {
26
26
  pagination: boolean;
27
27
  /** */
28
28
  pageSize: number;
29
+ /** */
30
+ pageSizeOptions: any[];
31
+ /** */
32
+ total: number;
33
+ /** */
34
+ serverSide: boolean;
35
+ /** */
36
+ currentPage: number;
29
37
  }
30
38
 
31
39
  declare global {
@@ -48,9 +56,14 @@ declare global {
48
56
  sortable?: boolean;
49
57
  pagination?: boolean;
50
58
  pageSize?: number;
59
+ pageSizeOptions?: any[];
60
+ total?: number;
61
+ serverSide?: boolean;
62
+ currentPage?: number;
51
63
  onSelectionChange?: (e: any) => void;
52
64
  onSort?: (e: any) => void;
53
65
  onPageChange?: (e: any) => void;
66
+ onPageSizeChange?: (e: any) => void;
54
67
  [key: string]: any;
55
68
  };
56
69
  }
package/types/index.d.ts CHANGED
@@ -198,9 +198,14 @@ declare global {
198
198
  sortable?: boolean;
199
199
  pagination?: boolean;
200
200
  pageSize?: number;
201
+ pageSizeOptions?: any[];
202
+ total?: number;
203
+ serverSide?: boolean;
204
+ currentPage?: number;
201
205
  onSelectionChange?: (e: any) => void;
202
206
  onSort?: (e: any) => void;
203
207
  onPageChange?: (e: any) => void;
208
+ onPageSizeChange?: (e: any) => void;
204
209
  [key: string]: any;
205
210
  };
206
211
  'kg-datepicker': {