@lazhus/kg-ui 0.8.8 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/custom-elements.json +67 -4
- package/dist/components/kg-datagrid.js +61 -30
- package/dist/components/kg-switch.js +5 -2
- package/dist/react/KgDataGrid.js +1 -1
- package/package.json +1 -1
- package/types/components/kg-datagrid.d.ts +13 -0
- package/types/components/kg-switch.d.ts +9 -0
- package/types/index.d.ts +8 -0
package/README.md
CHANGED
|
@@ -10,6 +10,7 @@ Modern, lightweight UI component library built with LitElement.
|
|
|
10
10
|
- 📱 **Responsive** - Mobile-first design
|
|
11
11
|
- ⚡ **Lightweight** - Built with LitElement
|
|
12
12
|
- 🎯 **TypeScript Ready** - Full type support (Global & React/JSX)
|
|
13
|
+
- 📊 **Powerful DataGrid** - Server-side pagination, sorting, and custom rendering
|
|
13
14
|
- ♿ **Accessible** - ARIA compliant components
|
|
14
15
|
|
|
15
16
|
## 📦 Installation
|
package/custom-elements.json
CHANGED
|
@@ -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' },
|
|
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": "
|
|
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": {
|
|
@@ -5307,7 +5346,7 @@
|
|
|
5307
5346
|
"kind": "field",
|
|
5308
5347
|
"name": "styles",
|
|
5309
5348
|
"static": true,
|
|
5310
|
-
"default": "css` :host { display: inline-block; vertical-align: middle; cursor: pointer; user-select: none; font-family: inherit; } :host([disabled]) { cursor: not-allowed; opacity: 0.5; } .kg-switch-wrapper { display: flex; align-items: center; gap: 0.75rem; } .kg-switch-track { position: relative; width: 44px; height: 24px; background: var(--kg-border); border-radius: 24px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: inset 0 2px 4px rgba(0,0,0,0.05); } .kg-switch-thumb { position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; background: white; border-radius: 50%; box-shadow: 0 2px 4px rgba(0,0,0,0.2); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Checked State */ :host([checked]) .kg-switch-track { background: var(--switch-active-color, var(--kg-primary)); } :host([checked]) .kg-switch-thumb { transform: translateX(20px); .label { font-size: 0.95rem; font-weight: 500; color: var(--kg-text); } .error-text { position: absolute; top: 100%; left: 2px; color: #DB2828; font-size: 0.75rem; margin-top: 4px; font-weight: 500; animation: fadeIn 0.2s ease-in; white-space: nowrap; } .error .kg-switch-track { box-shadow: 0 0 0 2px rgba(219, 40, 40, 0.2); } @keyframes fadeIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } } `"
|
|
5349
|
+
"default": "css` :host { display: inline-block; vertical-align: middle; cursor: pointer; user-select: none; font-family: inherit; } :host([disabled]) { cursor: not-allowed; opacity: 0.5; } .kg-switch-wrapper { display: flex; align-items: center; gap: 0.75rem; } .kg-switch-track { position: relative; width: 44px; height: 24px; background: var(--kg-border); border-radius: 24px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: inset 0 2px 4px rgba(0,0,0,0.05); } .kg-switch-thumb { position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; background: white; border-radius: 50%; box-shadow: 0 2px 4px rgba(0,0,0,0.2); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Checked State */ :host([checked]) .kg-switch-track { background: var(--switch-active-color, var(--kg-primary)); } :host([checked]) .kg-switch-thumb { transform: translateX(20px); } .label { font-size: 0.95rem; font-weight: 500; color: var(--kg-text); } .error-text { position: absolute; top: 100%; left: 2px; color: #DB2828; font-size: 0.75rem; margin-top: 4px; font-weight: 500; animation: fadeIn 0.2s ease-in; white-space: nowrap; } .error .kg-switch-track { box-shadow: 0 0 0 2px rgba(219, 40, 40, 0.2); } @keyframes fadeIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } } `"
|
|
5311
5350
|
},
|
|
5312
5351
|
{
|
|
5313
5352
|
"kind": "method",
|
|
@@ -5375,6 +5414,30 @@
|
|
|
5375
5414
|
},
|
|
5376
5415
|
"default": "'primary'"
|
|
5377
5416
|
},
|
|
5417
|
+
{
|
|
5418
|
+
"kind": "field",
|
|
5419
|
+
"name": "label",
|
|
5420
|
+
"type": {
|
|
5421
|
+
"text": "string"
|
|
5422
|
+
},
|
|
5423
|
+
"default": "''"
|
|
5424
|
+
},
|
|
5425
|
+
{
|
|
5426
|
+
"kind": "field",
|
|
5427
|
+
"name": "leftLabel",
|
|
5428
|
+
"type": {
|
|
5429
|
+
"text": "string"
|
|
5430
|
+
},
|
|
5431
|
+
"default": "''"
|
|
5432
|
+
},
|
|
5433
|
+
{
|
|
5434
|
+
"kind": "field",
|
|
5435
|
+
"name": "rightLabel",
|
|
5436
|
+
"type": {
|
|
5437
|
+
"text": "string"
|
|
5438
|
+
},
|
|
5439
|
+
"default": "''"
|
|
5440
|
+
},
|
|
5378
5441
|
{
|
|
5379
5442
|
"kind": "field",
|
|
5380
5443
|
"name": "value",
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
var e=Object.defineProperty,t=(t,i,
|
|
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?
|
|
7
|
+
${this.selectable?a`
|
|
8
8
|
<th class="checkbox-cell">
|
|
9
|
-
${
|
|
9
|
+
${r?"":a`
|
|
10
10
|
<kg-checkbox
|
|
11
|
-
.checked="${
|
|
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=>
|
|
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?
|
|
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?
|
|
36
|
-
${Array.from({length:this.pagination&&this.pageSize?this.pageSize:5}).map(()=>
|
|
35
|
+
${this.loading?a`
|
|
36
|
+
${Array.from({length:this.pagination&&this.pageSize?this.pageSize:5}).map(()=>a`
|
|
37
37
|
<tr>
|
|
38
|
-
${this.selectable?
|
|
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(()=>
|
|
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?
|
|
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=>
|
|
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?
|
|
61
|
+
${this.selectable?a`
|
|
62
62
|
<td class="checkbox-cell">
|
|
63
|
-
${
|
|
63
|
+
${r?a`
|
|
64
64
|
<kg-radio
|
|
65
65
|
.checked="${this._isSelected(e)}"
|
|
66
66
|
style="pointer-events: none;"
|
|
67
67
|
></kg-radio>
|
|
68
|
-
`:
|
|
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=>
|
|
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?
|
|
89
|
+
${this.pagination&&t>0?a`
|
|
90
90
|
<div class="pagination-footer">
|
|
91
|
-
<div
|
|
92
|
-
|
|
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.
|
|
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.
|
|
110
|
-
@click="${()=>this._changePage(this.
|
|
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
|
-
${
|
|
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.
|
|
124
|
-
?text="${this.
|
|
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.
|
|
135
|
-
@click="${()=>this._changePage(this.
|
|
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.
|
|
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(
|
|
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",
|
|
350
|
+
`),"undefined"==typeof customElements||customElements.get("kg-datagrid")||customElements.define("kg-datagrid",o);export{o as kgdatagrid};
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
var e,t=Object.defineProperty;import{LitElement as r,css as s,html as i}from"lit";import"lit/directives/class-map.js";import{F as a}from"../chunks/FormAssociated-Cx5D8YQA.js";class c extends(a(r)){static get properties(){return{...super.properties,checked:{type:Boolean,reflect:!0},label:{type:String},color:{type:String}}}constructor(){super(),this.checked=!1,this.color="primary",this.value="on"}formResetCallback(){this.checked=this.hasAttribute("checked"),this._updateFormValue()}formStateRestoreCallback(e){"checked"===e?this.checked=!0:"unchecked"===e&&(this.checked=!1),this._updateFormValue()}updated(e){e.has("checked")&&this._updateFormValue(),super.updated(e)}_updateFormValue(){const e=this.checked?this.value||"on":null;this.internals.setFormValue(e,this.checked?"checked":"unchecked")}_toggle(){this.disabled||(this.checked=!this.checked,this.dispatchEvent(new CustomEvent("change",{detail:{checked:this.checked},bubbles:!0,composed:!0})))}render(){const e=(r=this.color)&&"primary"!==r?r.startsWith("#")||r.startsWith("rgb")||r.startsWith("hsl")?r:{secondary:"var(--kg-secondary)",tertiary:"var(--kg-tertiary)",error:"#e74c3c",red:"#e74c3c",green:"#2ecc71",blue:"#3498db",orange:"#f39c12",purple:"#9b59b6"}[r]||`var(--kg-${r}, ${r})`:"var(--kg-primary)",t=this.checked?`--switch-active-color: ${e};`:"";var r;return i`
|
|
1
|
+
var e,t=Object.defineProperty;import{LitElement as r,css as s,html as i}from"lit";import"lit/directives/class-map.js";import{F as a}from"../chunks/FormAssociated-Cx5D8YQA.js";class c extends(a(r)){static get properties(){return{...super.properties,checked:{type:Boolean,reflect:!0},label:{type:String},leftLabel:{type:String},rightLabel:{type:String},color:{type:String}}}constructor(){super(),this.checked=!1,this.color="primary",this.label="",this.leftLabel="",this.rightLabel="",this.value="on"}formResetCallback(){this.checked=this.hasAttribute("checked"),this._updateFormValue()}formStateRestoreCallback(e){"checked"===e?this.checked=!0:"unchecked"===e&&(this.checked=!1),this._updateFormValue()}updated(e){e.has("checked")&&this._updateFormValue(),super.updated(e)}_updateFormValue(){const e=this.checked?this.value||"on":null;this.internals.setFormValue(e,this.checked?"checked":"unchecked")}_toggle(){this.disabled||(this.checked=!this.checked,this.dispatchEvent(new CustomEvent("change",{detail:{checked:this.checked},bubbles:!0,composed:!0})))}render(){const e=(r=this.color)&&"primary"!==r?r.startsWith("#")||r.startsWith("rgb")||r.startsWith("hsl")?r:{secondary:"var(--kg-secondary)",tertiary:"var(--kg-tertiary)",error:"#e74c3c",red:"#e74c3c",green:"#2ecc71",blue:"#3498db",orange:"#f39c12",purple:"#9b59b6"}[r]||`var(--kg-${r}, ${r})`:"var(--kg-primary)",t=this.checked?`--switch-active-color: ${e};`:"";var r;return i`
|
|
2
2
|
<div style="position: relative; display: inline-block;">
|
|
3
3
|
<div
|
|
4
4
|
class="kg-switch-wrapper ${this.errorText?"error":""}"
|
|
5
5
|
style="${t}"
|
|
6
6
|
@click="${this._toggle}"
|
|
7
7
|
>
|
|
8
|
+
${this.leftLabel?i`<span class="label left-label">${this.leftLabel}</span>`:""}
|
|
8
9
|
<div class="kg-switch-track">
|
|
9
10
|
<div class="kg-switch-thumb"></div>
|
|
10
11
|
</div>
|
|
11
|
-
${this.label?i`<span class="label">${this.label}</span>`:""}
|
|
12
|
+
${this.rightLabel||this.label?i`<span class="label right-label">${this.rightLabel||this.label}</span>`:""}
|
|
12
13
|
</div>
|
|
13
14
|
${this.errorText?i`<div class="error-text">${this.errorText}</div>`:""}
|
|
14
15
|
</div>
|
|
@@ -61,6 +62,8 @@ var e,t=Object.defineProperty;import{LitElement as r,css as s,html as i}from"lit
|
|
|
61
62
|
|
|
62
63
|
:host([checked]) .kg-switch-thumb {
|
|
63
64
|
transform: translateX(20px);
|
|
65
|
+
}
|
|
66
|
+
|
|
64
67
|
.label {
|
|
65
68
|
font-size: 0.95rem;
|
|
66
69
|
font-weight: 500;
|
package/dist/react/KgDataGrid.js
CHANGED
|
@@ -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"}}),
|
|
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
|
@@ -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
|
}
|
|
@@ -17,6 +17,12 @@ export class kgswitch extends LitElement {
|
|
|
17
17
|
/** */
|
|
18
18
|
color: string;
|
|
19
19
|
/** */
|
|
20
|
+
label: string;
|
|
21
|
+
/** */
|
|
22
|
+
leftLabel: string;
|
|
23
|
+
/** */
|
|
24
|
+
rightLabel: string;
|
|
25
|
+
/** */
|
|
20
26
|
form: any;
|
|
21
27
|
/** */
|
|
22
28
|
type: string;
|
|
@@ -37,6 +43,9 @@ declare global {
|
|
|
37
43
|
errorText?: string;
|
|
38
44
|
checked?: boolean;
|
|
39
45
|
color?: string;
|
|
46
|
+
label?: string;
|
|
47
|
+
leftLabel?: string;
|
|
48
|
+
rightLabel?: string;
|
|
40
49
|
form?: any;
|
|
41
50
|
type?: string;
|
|
42
51
|
onChange?: (e: any) => void;
|
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': {
|
|
@@ -424,6 +429,9 @@ declare global {
|
|
|
424
429
|
errorText?: string;
|
|
425
430
|
checked?: boolean;
|
|
426
431
|
color?: string;
|
|
432
|
+
label?: string;
|
|
433
|
+
leftLabel?: string;
|
|
434
|
+
rightLabel?: string;
|
|
427
435
|
form?: any;
|
|
428
436
|
type?: string;
|
|
429
437
|
onChange?: (e: any) => void;
|