@stonecrop/atable 0.2.52 → 0.2.53
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/atable.js +377 -376
- package/dist/atable.js.map +1 -1
- package/dist/atable.umd.cjs +2 -2
- package/dist/atable.umd.cjs.map +1 -1
- package/dist/components/index.js +8 -7
- package/dist/src/components/index.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/types/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/components/ACell.vue +37 -35
- package/src/components/index.ts +10 -7
- package/src/types/index.ts +1 -1
package/dist/components/index.js
CHANGED
|
@@ -26,7 +26,7 @@ export default class TableDataStore {
|
|
|
26
26
|
return table;
|
|
27
27
|
}
|
|
28
28
|
createDisplayObject(display) {
|
|
29
|
-
const defaultDisplay = [Object.assign({}, {
|
|
29
|
+
const defaultDisplay = [Object.assign({}, { rowModified: false })];
|
|
30
30
|
// TODO: (typing) what is the type of `display` here?
|
|
31
31
|
if (display) {
|
|
32
32
|
if ('0:0' in display) {
|
|
@@ -50,7 +50,7 @@ export default class TableDataStore {
|
|
|
50
50
|
indent: row.indent || null,
|
|
51
51
|
isParent: parents.has(rowIndex),
|
|
52
52
|
isRoot: row.parent === null || row.parent === undefined,
|
|
53
|
-
|
|
53
|
+
rowModified: false,
|
|
54
54
|
open: row.parent === null || row.parent === undefined,
|
|
55
55
|
parent: row.parent,
|
|
56
56
|
};
|
|
@@ -69,13 +69,14 @@ export default class TableDataStore {
|
|
|
69
69
|
return this.table[`${colIndex}:${rowIndex}`];
|
|
70
70
|
}
|
|
71
71
|
setCellData(rowIndex, colIndex, value) {
|
|
72
|
-
|
|
73
|
-
this.display[rowIndex].modified = true;
|
|
74
|
-
}
|
|
75
|
-
this.table[`${colIndex}:${rowIndex}`] = value;
|
|
72
|
+
const index = `${colIndex}:${rowIndex}`;
|
|
76
73
|
const col = this.columns[colIndex];
|
|
74
|
+
if (this.table[index] !== value) {
|
|
75
|
+
this.display[rowIndex].rowModified = true;
|
|
76
|
+
}
|
|
77
|
+
this.table[index] = value;
|
|
77
78
|
this.rows[rowIndex][col.name] = value;
|
|
78
|
-
return this.table[
|
|
79
|
+
return this.table[index];
|
|
79
80
|
}
|
|
80
81
|
toggleRowExpand(rowIndex) {
|
|
81
82
|
if (this.config.view === 'tree') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE3F,MAAM,CAAC,OAAO,OAAO,cAAc;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,MAAM,EAAE,WAAW,CAAA;IACnB,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,KAAK,EAAE,UAAU,CAAA;gBAGhB,EAAE,CAAC,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,WAAW,EAAE,EACvB,IAAI,CAAC,EAAE,QAAQ,EAAE,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAC9B,OAAO,CAAC,EAAE,YAAY,EAAE;IAWzB,iBAAiB;IAUjB,mBAAmB,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE;IAqC5C,IAAI,UAAU,YAEb;IAED,IAAI,gBAAgB,sCAInB;IAED,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;IAIlD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAE3F,MAAM,CAAC,OAAO,OAAO,cAAc;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,MAAM,EAAE,WAAW,CAAA;IACnB,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,KAAK,EAAE,UAAU,CAAA;gBAGhB,EAAE,CAAC,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,WAAW,EAAE,EACvB,IAAI,CAAC,EAAE,QAAQ,EAAE,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAC9B,OAAO,CAAC,EAAE,YAAY,EAAE;IAWzB,iBAAiB;IAUjB,mBAAmB,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE;IAqC5C,IAAI,UAAU,YAEb;IAED,IAAI,gBAAgB,sCAInB;IAED,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;IAIlD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAa1D,eAAe,CAAC,QAAQ,EAAE,MAAM;CAehC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,cAAc,CAAA;AAEzC,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC,CAAA;IAC7D,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAE9C,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC,CAAA;IACjE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAA;IACzC,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,cAAc,CAAA;AAEzC,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IAEZ,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC,CAAA;IAC7D,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAE9C,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC,CAAA;IACjE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAA;IACzC,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACpC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stonecrop/atable",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.53",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": {
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"@vueuse/components": "^10.11.0",
|
|
38
38
|
"@vueuse/core": "^11.1.0",
|
|
39
39
|
"vue": "^3.5.6",
|
|
40
|
-
"@stonecrop/
|
|
41
|
-
"@stonecrop/
|
|
40
|
+
"@stonecrop/themes": "0.2.53",
|
|
41
|
+
"@stonecrop/utilities": "0.2.53"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@microsoft/api-documenter": "^7.25.3",
|
package/src/components/ACell.vue
CHANGED
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
:spellcheck="false"
|
|
10
10
|
:style="cellStyle"
|
|
11
11
|
@focus="onFocus"
|
|
12
|
-
@paste="
|
|
13
|
-
@blur="
|
|
14
|
-
@input="
|
|
15
|
-
@click="
|
|
16
|
-
@mousedown="
|
|
12
|
+
@paste="updateCellData"
|
|
13
|
+
@blur="updateCellData"
|
|
14
|
+
@input="updateCellData"
|
|
15
|
+
@click="showModal"
|
|
16
|
+
@mousedown="showModal"
|
|
17
17
|
class="atable__cell"
|
|
18
18
|
:class="pinned ? 'sticky-column' : ''">
|
|
19
19
|
<component
|
|
@@ -52,20 +52,33 @@ const {
|
|
|
52
52
|
|
|
53
53
|
const tableData = inject<TableDataStore>(tableid)
|
|
54
54
|
const cellRef = useTemplateRef<HTMLTableCellElement>('cell')
|
|
55
|
+
const { bottom, left } = useElementBounding(cellRef)
|
|
56
|
+
|
|
57
|
+
// keep a shallow copy of the original cell value for comparison
|
|
58
|
+
const originalData = tableData.cellData<any>(colIndex, rowIndex)
|
|
55
59
|
const currentData = ref('')
|
|
56
60
|
const cellModified = ref(false)
|
|
57
|
-
const { bottom, left } = useElementBounding(cellRef)
|
|
58
61
|
|
|
59
62
|
const table = tableData.table
|
|
60
63
|
const column = tableData.columns[colIndex]
|
|
61
64
|
const row = tableData.rows[rowIndex]
|
|
62
65
|
|
|
63
|
-
const textAlign =
|
|
64
|
-
|
|
66
|
+
const textAlign = column.align || 'center'
|
|
67
|
+
const cellWidth = column.width || '40ch'
|
|
68
|
+
|
|
69
|
+
const isHtmlValue = computed(() => {
|
|
70
|
+
// TODO: check if display value is a native DOM element
|
|
71
|
+
return typeof displayValue.value === 'string' ? isHtmlString(displayValue.value) : false
|
|
65
72
|
})
|
|
66
73
|
|
|
67
|
-
const
|
|
68
|
-
return
|
|
74
|
+
const cellStyle = computed((): CSSProperties => {
|
|
75
|
+
return {
|
|
76
|
+
textAlign,
|
|
77
|
+
width: cellWidth,
|
|
78
|
+
backgroundColor: !cellModified.value ? 'inherit' : 'var(--cell-modified-color)',
|
|
79
|
+
fontWeight: !cellModified.value ? 'inherit' : 'bold',
|
|
80
|
+
paddingLeft: getIndent(colIndex, tableData.display[rowIndex]?.indent),
|
|
81
|
+
}
|
|
69
82
|
})
|
|
70
83
|
|
|
71
84
|
const displayValue = computed(() => {
|
|
@@ -88,12 +101,7 @@ const displayValue = computed(() => {
|
|
|
88
101
|
return cellData
|
|
89
102
|
})
|
|
90
103
|
|
|
91
|
-
const
|
|
92
|
-
// TODO: check if display value is a native DOM element
|
|
93
|
-
return typeof displayValue.value === 'string' ? isHtmlString(displayValue.value) : false
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
const handleInput = () => {
|
|
104
|
+
const showModal = () => {
|
|
97
105
|
if (column.mask) {
|
|
98
106
|
// TODO: add masking to cell values
|
|
99
107
|
// column.mask(event)
|
|
@@ -106,7 +114,7 @@ const handleInput = () => {
|
|
|
106
114
|
tableData.modal.parent = cellRef.value
|
|
107
115
|
tableData.modal.top = bottom.value
|
|
108
116
|
tableData.modal.left = left.value
|
|
109
|
-
tableData.modal.width = cellWidth
|
|
117
|
+
tableData.modal.width = cellWidth
|
|
110
118
|
|
|
111
119
|
if (typeof column.modalComponent === 'function') {
|
|
112
120
|
tableData.modal.component = column.modalComponent({ table, row, column })
|
|
@@ -122,11 +130,11 @@ if (addNavigation) {
|
|
|
122
130
|
let handlers = {
|
|
123
131
|
...defaultKeypressHandlers,
|
|
124
132
|
...{
|
|
125
|
-
'keydown.f2':
|
|
126
|
-
'keydown.alt.up':
|
|
127
|
-
'keydown.alt.down':
|
|
128
|
-
'keydown.alt.left':
|
|
129
|
-
'keydown.alt.right':
|
|
133
|
+
'keydown.f2': showModal,
|
|
134
|
+
'keydown.alt.up': showModal,
|
|
135
|
+
'keydown.alt.down': showModal,
|
|
136
|
+
'keydown.alt.left': showModal,
|
|
137
|
+
'keydown.alt.right': showModal,
|
|
130
138
|
},
|
|
131
139
|
}
|
|
132
140
|
|
|
@@ -161,12 +169,14 @@ const onFocus = () => {
|
|
|
161
169
|
}
|
|
162
170
|
}
|
|
163
171
|
|
|
164
|
-
const
|
|
172
|
+
const updateCellData = () => {
|
|
165
173
|
if (cellRef.value) {
|
|
174
|
+
// only apply changes if the cell value has changed after being mounted
|
|
175
|
+
cellModified.value = cellRef.value.textContent !== originalData
|
|
176
|
+
|
|
166
177
|
if (cellRef.value.textContent !== currentData.value) {
|
|
167
178
|
currentData.value = cellRef.value.textContent
|
|
168
179
|
cellRef.value.dispatchEvent(new Event('change'))
|
|
169
|
-
cellModified.value = true // set display instead
|
|
170
180
|
if (!column.format) {
|
|
171
181
|
// TODO: need to setup reverse format function
|
|
172
182
|
tableData.setCellData(rowIndex, colIndex, currentData.value)
|
|
@@ -175,21 +185,13 @@ const onChange = () => {
|
|
|
175
185
|
}
|
|
176
186
|
}
|
|
177
187
|
|
|
178
|
-
const getIndent = (
|
|
179
|
-
if (
|
|
180
|
-
return `${
|
|
188
|
+
const getIndent = (colIndex: number, indentLevel?: number) => {
|
|
189
|
+
if (indentLevel && colIndex === 0 && indentLevel > 0) {
|
|
190
|
+
return `${indentLevel}ch`
|
|
181
191
|
} else {
|
|
182
192
|
return 'inherit'
|
|
183
193
|
}
|
|
184
194
|
}
|
|
185
|
-
|
|
186
|
-
const cellStyle: CSSProperties = {
|
|
187
|
-
textAlign: textAlign.value,
|
|
188
|
-
width: cellWidth.value,
|
|
189
|
-
backgroundColor: !cellModified.value ? 'inherit' : 'var(--cell-modified-color)',
|
|
190
|
-
fontWeight: !cellModified.value ? 'inherit' : 'bold',
|
|
191
|
-
paddingLeft: getIndent(colIndex, tableData.display[rowIndex]?.indent),
|
|
192
|
-
}
|
|
193
195
|
</script>
|
|
194
196
|
|
|
195
197
|
<style>
|
package/src/components/index.ts
CHANGED
|
@@ -39,7 +39,7 @@ export default class TableDataStore {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
createDisplayObject(display?: TableDisplay[]) {
|
|
42
|
-
const defaultDisplay: TableDisplay[] = [Object.assign({}, {
|
|
42
|
+
const defaultDisplay: TableDisplay[] = [Object.assign({}, { rowModified: false })]
|
|
43
43
|
|
|
44
44
|
// TODO: (typing) what is the type of `display` here?
|
|
45
45
|
if (display) {
|
|
@@ -66,7 +66,7 @@ export default class TableDataStore {
|
|
|
66
66
|
indent: row.indent || null,
|
|
67
67
|
isParent: parents.has(rowIndex),
|
|
68
68
|
isRoot: row.parent === null || row.parent === undefined,
|
|
69
|
-
|
|
69
|
+
rowModified: false,
|
|
70
70
|
open: row.parent === null || row.parent === undefined,
|
|
71
71
|
parent: row.parent,
|
|
72
72
|
}
|
|
@@ -90,13 +90,16 @@ export default class TableDataStore {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
setCellData(rowIndex: number, colIndex: number, value: any) {
|
|
93
|
-
|
|
94
|
-
this.display[rowIndex].modified = true
|
|
95
|
-
}
|
|
96
|
-
this.table[`${colIndex}:${rowIndex}`] = value
|
|
93
|
+
const index = `${colIndex}:${rowIndex}`
|
|
97
94
|
const col = this.columns[colIndex]
|
|
95
|
+
|
|
96
|
+
if (this.table[index] !== value) {
|
|
97
|
+
this.display[rowIndex].rowModified = true
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
this.table[index] = value
|
|
98
101
|
this.rows[rowIndex][col.name] = value
|
|
99
|
-
return this.table[
|
|
102
|
+
return this.table[index]
|
|
100
103
|
}
|
|
101
104
|
|
|
102
105
|
toggleRowExpand(rowIndex: number) {
|