@stonecrop/atable 0.4.21 → 0.4.23
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/assets/index.css +1 -1
- package/dist/atable.js +978 -940
- package/dist/atable.js.map +1 -1
- package/dist/atable.umd.cjs +2 -2
- package/dist/atable.umd.cjs.map +1 -1
- package/dist/src/stores/table.d.ts.map +1 -1
- package/dist/stores/table.js +5 -1
- package/package.json +3 -3
- package/src/components/ACell.vue +6 -2
- package/src/components/ATable.vue +13 -8
- package/src/stores/table.ts +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/stores/table.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,KAAK,CAAA;AAEvD,OAAO,KAAK,EACX,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,MAAM,UAAU,CAAA;AAGjB;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAU;IAC1C,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,UAAU,CAAA;CAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/stores/table.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,KAAK,CAAA;AAEvD,OAAO,KAAK,EACX,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,MAAM,UAAU,CAAA;AAGjB;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAU;IAC1C,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,UAAU,CAAA;CAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAiM4B,UAAU;kBAxHhB,CAAC,kBAAkB,MAAM,YAAY,MAAM,KAAG,CAAC;oCA8F7B,MAAM,YAAY,MAAM;kCAK1B,MAAM,YAAY,MAAM,SAAS,GAAG;iCAzErC,WAAW,KAAG,aAAa;6BAmB/B,MAAM,YAAY,MAAM;0BAqF3B,MAAM,gBAAgB,MAAM;mCAhEnB,MAAM;2BATd,MAAM;6BAKJ,MAAM;4BA7DP,MAAM,YAAY,MAAM,SAAS,GAAG;4BAgBpC,MAAM,YAAY,MAAM,SAAS,MAAM;gCA6DnC,MAAM;4BA4DV,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAlBlB,UAAU;kBAxHhB,CAAC,kBAAkB,MAAM,YAAY,MAAM,KAAG,CAAC;oCA8F7B,MAAM,YAAY,MAAM;kCAK1B,MAAM,YAAY,MAAM,SAAS,GAAG;iCAzErC,WAAW,KAAG,aAAa;6BAmB/B,MAAM,YAAY,MAAM;0BAqF3B,MAAM,gBAAgB,MAAM;mCAhEnB,MAAM;2BATd,MAAM;6BAKJ,MAAM;4BA7DP,MAAM,YAAY,MAAM,SAAS,GAAG;4BAgBpC,MAAM,YAAY,MAAM,SAAS,MAAM;gCA6DnC,MAAM;4BA4DV,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAlBlB,UAAU;kBAxHhB,CAAC,kBAAkB,MAAM,YAAY,MAAM,KAAG,CAAC;oCA8F7B,MAAM,YAAY,MAAM;kCAK1B,MAAM,YAAY,MAAM,SAAS,GAAG;iCAzErC,WAAW,KAAG,aAAa;6BAmB/B,MAAM,YAAY,MAAM;0BAqF3B,MAAM,gBAAgB,MAAM;mCAhEnB,MAAM;2BATd,MAAM;6BAKJ,MAAM;4BA7DP,MAAM,YAAY,MAAM,SAAS,GAAG;4BAgBpC,MAAM,YAAY,MAAM,SAAS,MAAM;gCA6DnC,MAAM;4BA4DV,cAAc;mQAwD9C,CAAA"}
|
package/dist/stores/table.js
CHANGED
|
@@ -76,7 +76,11 @@ export const createTableStore = (initData) => {
|
|
|
76
76
|
display.value[rowIndex].rowModified = true;
|
|
77
77
|
}
|
|
78
78
|
table.value[index] = value;
|
|
79
|
-
|
|
79
|
+
// Create a new row object to ensure reactivity
|
|
80
|
+
rows.value[rowIndex] = {
|
|
81
|
+
...rows.value[rowIndex],
|
|
82
|
+
[col.name]: value,
|
|
83
|
+
};
|
|
80
84
|
};
|
|
81
85
|
const setCellText = (colIndex, rowIndex, value) => {
|
|
82
86
|
const index = `${colIndex}:${rowIndex}`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stonecrop/atable",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.23",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": {
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"@vueuse/core": "^13.4.0",
|
|
39
39
|
"pinia": "^3.0.3",
|
|
40
40
|
"vue": "^3.5.17",
|
|
41
|
-
"@stonecrop/themes": "0.4.
|
|
42
|
-
"@stonecrop/utilities": "0.4.
|
|
41
|
+
"@stonecrop/themes": "0.4.23",
|
|
42
|
+
"@stonecrop/utilities": "0.4.23"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@microsoft/api-documenter": "^7.26.29",
|
package/src/components/ACell.vue
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
:style="cellStyle"
|
|
11
11
|
@focus="onFocus"
|
|
12
12
|
@paste="updateCellData"
|
|
13
|
-
@input="
|
|
13
|
+
@input="debouncedUpdateCellData"
|
|
14
14
|
@click="showModal"
|
|
15
15
|
class="atable-cell"
|
|
16
16
|
:class="cellClasses">
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
<script setup lang="ts">
|
|
28
28
|
import { KeypressHandlers, defaultKeypressHandlers, useKeyboardNav } from '@stonecrop/utilities'
|
|
29
|
-
import { useElementBounding } from '@vueuse/core'
|
|
29
|
+
import { useDebounceFn, useElementBounding } from '@vueuse/core'
|
|
30
30
|
import { computed, type CSSProperties, ref, useTemplateRef } from 'vue'
|
|
31
31
|
|
|
32
32
|
import { createTableStore } from '../stores/table'
|
|
@@ -39,6 +39,7 @@ const {
|
|
|
39
39
|
addNavigation = true,
|
|
40
40
|
tabIndex = 0,
|
|
41
41
|
pinned = false,
|
|
42
|
+
debounce = 300,
|
|
42
43
|
} = defineProps<{
|
|
43
44
|
colIndex: number
|
|
44
45
|
rowIndex: number
|
|
@@ -46,6 +47,7 @@ const {
|
|
|
46
47
|
addNavigation?: boolean | KeypressHandlers
|
|
47
48
|
tabIndex?: number
|
|
48
49
|
pinned?: boolean
|
|
50
|
+
debounce?: number
|
|
49
51
|
}>()
|
|
50
52
|
|
|
51
53
|
const cellRef = useTemplateRef<HTMLTableCellElement>('cell')
|
|
@@ -176,6 +178,8 @@ const updateCellData = (payload: Event) => {
|
|
|
176
178
|
}
|
|
177
179
|
}
|
|
178
180
|
|
|
181
|
+
const debouncedUpdateCellData = useDebounceFn(updateCellData, debounce)
|
|
182
|
+
|
|
179
183
|
defineExpose({
|
|
180
184
|
currentData,
|
|
181
185
|
})
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
<script setup lang="ts">
|
|
69
69
|
import { vOnClickOutside } from '@vueuse/components'
|
|
70
70
|
import { useMutationObserver } from '@vueuse/core'
|
|
71
|
-
import { nextTick,
|
|
71
|
+
import { nextTick, onMounted, useTemplateRef, computed, watch } from 'vue'
|
|
72
72
|
|
|
73
73
|
import ARow from './ARow.vue'
|
|
74
74
|
import ATableHeader from './ATableHeader.vue'
|
|
@@ -76,28 +76,27 @@ import ATableModal from './ATableModal.vue'
|
|
|
76
76
|
import { createTableStore } from '../stores/table'
|
|
77
77
|
import type { GanttDragEvent, TableColumn, TableConfig, TableRow } from '../types'
|
|
78
78
|
|
|
79
|
+
const modelValue = defineModel<TableRow[]>({ required: true })
|
|
80
|
+
|
|
79
81
|
const {
|
|
80
82
|
id,
|
|
81
|
-
modelValue,
|
|
82
83
|
columns,
|
|
83
84
|
rows = [],
|
|
84
85
|
config = new Object(),
|
|
85
86
|
} = defineProps<{
|
|
86
87
|
id?: string
|
|
87
|
-
modelValue: TableRow[]
|
|
88
88
|
columns: TableColumn[]
|
|
89
89
|
rows?: TableRow[]
|
|
90
90
|
config?: TableConfig
|
|
91
91
|
}>()
|
|
92
92
|
|
|
93
93
|
const emit = defineEmits<{
|
|
94
|
-
'update:modelValue': [value: TableRow[]]
|
|
95
94
|
cellUpdate: [{ colIndex: number; rowIndex: number; newValue: any; oldValue: any }]
|
|
96
95
|
'gantt:drag': [event: GanttDragEvent]
|
|
97
96
|
}>()
|
|
98
97
|
|
|
99
98
|
const tableRef = useTemplateRef<HTMLTableElement>('table')
|
|
100
|
-
const rowsValue = modelValue ? modelValue : rows
|
|
99
|
+
const rowsValue = modelValue.value.length > 0 ? modelValue.value : rows
|
|
101
100
|
const store = createTableStore({ columns, rows: rowsValue, id, config })
|
|
102
101
|
|
|
103
102
|
store.$onAction(({ name, store, args, after }) => {
|
|
@@ -105,6 +104,8 @@ store.$onAction(({ name, store, args, after }) => {
|
|
|
105
104
|
const [colIndex, rowIndex, newValue] = args
|
|
106
105
|
const oldValue = store.getCellData(colIndex, rowIndex)
|
|
107
106
|
after(() => {
|
|
107
|
+
// Update modelValue to trigger update:modelValue event
|
|
108
|
+
modelValue.value = [...store.rows]
|
|
108
109
|
emit('cellUpdate', { colIndex, rowIndex, newValue, oldValue })
|
|
109
110
|
})
|
|
110
111
|
} else if (name === 'updateGanttBar') {
|
|
@@ -124,10 +125,14 @@ store.$onAction(({ name, store, args, after }) => {
|
|
|
124
125
|
}
|
|
125
126
|
})
|
|
126
127
|
|
|
128
|
+
// Watch for external changes to modelValue and sync to store
|
|
127
129
|
watch(
|
|
128
|
-
() =>
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
() => modelValue.value,
|
|
131
|
+
newRows => {
|
|
132
|
+
// Only update if the rows have actually changed (avoid infinite loops)
|
|
133
|
+
if (JSON.stringify(newRows) !== JSON.stringify(store.rows)) {
|
|
134
|
+
store.rows = [...newRows]
|
|
135
|
+
}
|
|
131
136
|
},
|
|
132
137
|
{ deep: true }
|
|
133
138
|
)
|
package/src/stores/table.ts
CHANGED
|
@@ -109,7 +109,11 @@ export const createTableStore = (initData: {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
table.value[index] = value
|
|
112
|
-
|
|
112
|
+
// Create a new row object to ensure reactivity
|
|
113
|
+
rows.value[rowIndex] = {
|
|
114
|
+
...rows.value[rowIndex],
|
|
115
|
+
[col.name]: value,
|
|
116
|
+
}
|
|
113
117
|
}
|
|
114
118
|
|
|
115
119
|
const setCellText = (colIndex: number, rowIndex: number, value: string) => {
|