vue2-excel-grid 2.8.9 → 2.10.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/dist/vue2-excel-grid.esm.js +488 -352
- package/dist/vue2-excel-grid.umd.js +2 -2
- package/package.json +1 -1
- package/src/components/EgSelect.vue +10 -0
- package/src/components/EgTreeSelect.vue +6 -0
- package/src/components/ExcelGrid.vue +96 -14
- package/src/index.js +13 -1
package/package.json
CHANGED
|
@@ -60,6 +60,9 @@
|
|
|
60
60
|
<div v-if="clearable && selectedOpt" class="eg-select-footer">
|
|
61
61
|
<button class="eg-select-btn eg-select-btn--clear" tabindex="-1" @mousedown.prevent="pickClear">{{ t.clear }}</button>
|
|
62
62
|
</div>
|
|
63
|
+
<div v-if="$slots['dropdown-footer']" class="eg-select-dropdown-footer">
|
|
64
|
+
<slot name="dropdown-footer"></slot>
|
|
65
|
+
</div>
|
|
63
66
|
</template>
|
|
64
67
|
|
|
65
68
|
<!-- Options panel in standalone mode (floating dropdown below trigger) -->
|
|
@@ -103,6 +106,9 @@
|
|
|
103
106
|
<div v-if="clearable && selectedOpt" class="eg-select-footer">
|
|
104
107
|
<button class="eg-select-btn eg-select-btn--clear" tabindex="-1" @mousedown.prevent="pickClear">{{ t.clear }}</button>
|
|
105
108
|
</div>
|
|
109
|
+
<div v-if="$slots['dropdown-footer']" class="eg-select-dropdown-footer">
|
|
110
|
+
<slot name="dropdown-footer"></slot>
|
|
111
|
+
</div>
|
|
106
112
|
</div>
|
|
107
113
|
|
|
108
114
|
<div v-if="hoverTooltip" class="eg-option-tooltip" :style="hoverTooltipStyle">{{ hoverTooltip.text }}</div>
|
|
@@ -557,6 +563,10 @@ export default {
|
|
|
557
563
|
padding: 4px 6px 6px;
|
|
558
564
|
border-top: 1px solid var(--eg-color-border, var(--eg-color-border-default));
|
|
559
565
|
}
|
|
566
|
+
.eg-select-dropdown-footer {
|
|
567
|
+
border-top: 1px solid var(--eg-color-border, var(--eg-color-border-default));
|
|
568
|
+
padding: 4px;
|
|
569
|
+
}
|
|
560
570
|
.eg-select-btn {
|
|
561
571
|
background: none;
|
|
562
572
|
border: 1px solid var(--eg-color-border, var(--eg-color-border-default));
|
|
@@ -66,6 +66,9 @@
|
|
|
66
66
|
<div v-if="clearable && selectedLabel != null" class="eg-select-footer">
|
|
67
67
|
<button class="eg-select-btn eg-select-btn--clear" tabindex="-1" @mousedown.prevent="pickClear">{{ t.clear }}</button>
|
|
68
68
|
</div>
|
|
69
|
+
<div v-if="$slots['dropdown-footer']" class="eg-select-dropdown-footer">
|
|
70
|
+
<slot name="dropdown-footer"></slot>
|
|
71
|
+
</div>
|
|
69
72
|
</template>
|
|
70
73
|
|
|
71
74
|
<!-- Options panel in standalone mode -->
|
|
@@ -116,6 +119,9 @@
|
|
|
116
119
|
<div v-if="clearable && selectedLabel != null" class="eg-select-footer">
|
|
117
120
|
<button class="eg-select-btn eg-select-btn--clear" tabindex="-1" @mousedown.prevent="pickClear">{{ t.clear }}</button>
|
|
118
121
|
</div>
|
|
122
|
+
<div v-if="$slots['dropdown-footer']" class="eg-select-dropdown-footer">
|
|
123
|
+
<slot name="dropdown-footer"></slot>
|
|
124
|
+
</div>
|
|
119
125
|
</div>
|
|
120
126
|
|
|
121
127
|
<div v-if="hoverTooltip" class="eg-option-tooltip" :style="hoverTooltipStyle">{{ hoverTooltip.text }}</div>
|
|
@@ -97,6 +97,7 @@
|
|
|
97
97
|
<option value="antd">Ant Design</option>
|
|
98
98
|
<option value="fluent">Fluent</option>
|
|
99
99
|
<option value="carbon">Carbon</option>
|
|
100
|
+
<option value="polaris">Shopify Polaris</option>
|
|
100
101
|
</select>
|
|
101
102
|
</div>
|
|
102
103
|
|
|
@@ -244,8 +245,8 @@
|
|
|
244
245
|
class="eg-header-cell"
|
|
245
246
|
:class="[
|
|
246
247
|
{ 'eg-header-group': cell.isGroup, 'eg-header-cell--drag-source': colDrag.active && cell._firstLeafFlatIndex >= colDrag.sourceFirstLeaf && cell._firstLeafFlatIndex < colDrag.sourceFirstLeaf + colDrag.sourceLeafCount },
|
|
247
|
-
cell.column && cell.column.overflowTitle === 'truncate' ? 'eg-header-cell--truncate' : '',
|
|
248
|
-
cell.column && cell.column.overflowTitle === 'wrap' ? 'eg-header-cell--wrap' : ''
|
|
248
|
+
cell.column && (cell.column.overflowTitle || overflowTitle) === 'truncate' ? 'eg-header-cell--truncate' : '',
|
|
249
|
+
cell.column && (cell.column.overflowTitle || overflowTitle) === 'wrap' ? 'eg-header-cell--wrap' : ''
|
|
249
250
|
]"
|
|
250
251
|
:data-fi="!cell.isGroup ? cell.column._flatIndex : undefined"
|
|
251
252
|
:data-start="cell.isGroup ? cell._firstLeafFlatIndex : undefined"
|
|
@@ -254,7 +255,7 @@
|
|
|
254
255
|
@mousedown="onColHeaderMouseDown($event, cell)"
|
|
255
256
|
@dblclick="onColHeaderDblClick($event, cell)"
|
|
256
257
|
@contextmenu.prevent="onColHeaderContextMenu($event, cell)"
|
|
257
|
-
@mouseenter="cell.column && cell.column.overflowTitle === 'truncate' ? _showTooltip(cell.column.title, $event.currentTarget) : null"
|
|
258
|
+
@mouseenter="cell.column && (cell.column.overflowTitle || overflowTitle) === 'truncate' ? _showTooltip(cell.column.title, $event.currentTarget) : null"
|
|
258
259
|
@mouseleave="_hideTooltip"
|
|
259
260
|
>
|
|
260
261
|
<span class="eg-header-title">
|
|
@@ -342,8 +343,8 @@
|
|
|
342
343
|
class="eg-header-cell"
|
|
343
344
|
:class="[
|
|
344
345
|
{ 'eg-header-group': cell.isGroup, 'eg-header-cell--drag-source': colDrag.active && cell._firstLeafFlatIndex >= colDrag.sourceFirstLeaf && cell._firstLeafFlatIndex < colDrag.sourceFirstLeaf + colDrag.sourceLeafCount },
|
|
345
|
-
cell.column && cell.column.overflowTitle === 'truncate' ? 'eg-header-cell--truncate' : '',
|
|
346
|
-
cell.column && cell.column.overflowTitle === 'wrap' ? 'eg-header-cell--wrap' : ''
|
|
346
|
+
cell.column && (cell.column.overflowTitle || overflowTitle) === 'truncate' ? 'eg-header-cell--truncate' : '',
|
|
347
|
+
cell.column && (cell.column.overflowTitle || overflowTitle) === 'wrap' ? 'eg-header-cell--wrap' : ''
|
|
347
348
|
]"
|
|
348
349
|
:data-fi="!cell.isGroup ? cell.column._flatIndex : undefined"
|
|
349
350
|
:data-start="cell.isGroup ? cell._firstLeafFlatIndex : undefined"
|
|
@@ -352,7 +353,7 @@
|
|
|
352
353
|
@mousedown="onColHeaderMouseDown($event, cell)"
|
|
353
354
|
@dblclick="onColHeaderDblClick($event, cell)"
|
|
354
355
|
@contextmenu.prevent="onColHeaderContextMenu($event, cell)"
|
|
355
|
-
@mouseenter="cell.column && cell.column.overflowTitle === 'truncate' ? _showTooltip(cell.column.title, $event.currentTarget) : null"
|
|
356
|
+
@mouseenter="cell.column && (cell.column.overflowTitle || overflowTitle) === 'truncate' ? _showTooltip(cell.column.title, $event.currentTarget) : null"
|
|
356
357
|
@mouseleave="_hideTooltip"
|
|
357
358
|
>
|
|
358
359
|
<span class="eg-header-title">
|
|
@@ -437,8 +438,8 @@
|
|
|
437
438
|
class="eg-header-cell"
|
|
438
439
|
:class="[
|
|
439
440
|
{ 'eg-header-group': cell.isGroup, 'eg-header-cell--drag-source': colDrag.active && cell._firstLeafFlatIndex >= colDrag.sourceFirstLeaf && cell._firstLeafFlatIndex < colDrag.sourceFirstLeaf + colDrag.sourceLeafCount },
|
|
440
|
-
cell.column && cell.column.overflowTitle === 'truncate' ? 'eg-header-cell--truncate' : '',
|
|
441
|
-
cell.column && cell.column.overflowTitle === 'wrap' ? 'eg-header-cell--wrap' : ''
|
|
441
|
+
cell.column && (cell.column.overflowTitle || overflowTitle) === 'truncate' ? 'eg-header-cell--truncate' : '',
|
|
442
|
+
cell.column && (cell.column.overflowTitle || overflowTitle) === 'wrap' ? 'eg-header-cell--wrap' : ''
|
|
442
443
|
]"
|
|
443
444
|
:data-fi="!cell.isGroup ? cell.column._flatIndex : undefined"
|
|
444
445
|
:data-start="cell.isGroup ? cell._firstLeafFlatIndex : undefined"
|
|
@@ -447,7 +448,7 @@
|
|
|
447
448
|
@mousedown="onColHeaderMouseDown($event, cell)"
|
|
448
449
|
@dblclick="onColHeaderDblClick($event, cell)"
|
|
449
450
|
@contextmenu.prevent="onColHeaderContextMenu($event, cell)"
|
|
450
|
-
@mouseenter="cell.column && cell.column.overflowTitle === 'truncate' ? _showTooltip(cell.column.title, $event.currentTarget) : null"
|
|
451
|
+
@mouseenter="cell.column && (cell.column.overflowTitle || overflowTitle) === 'truncate' ? _showTooltip(cell.column.title, $event.currentTarget) : null"
|
|
451
452
|
@mouseleave="_hideTooltip"
|
|
452
453
|
>
|
|
453
454
|
<span class="eg-header-title">
|
|
@@ -917,7 +918,11 @@
|
|
|
917
918
|
:clearable="selectDropdown.clearable"
|
|
918
919
|
@select="onComponentSelect"
|
|
919
920
|
@close="closeSelectDropdown"
|
|
920
|
-
|
|
921
|
+
>
|
|
922
|
+
<template #dropdown-footer>
|
|
923
|
+
<slot :name="'dropdown-footer-' + selectDropdown.col.key" :column="selectDropdown.col" :close="closeSelectDropdown"></slot>
|
|
924
|
+
</template>
|
|
925
|
+
</eg-select>
|
|
921
926
|
<!-- Tree select dropdown overlay -->
|
|
922
927
|
<eg-tree-select
|
|
923
928
|
v-if="selectDropdown && selectDropdown.tree"
|
|
@@ -935,7 +940,11 @@
|
|
|
935
940
|
:clearable="selectDropdown.clearable"
|
|
936
941
|
@select="onComponentSelect"
|
|
937
942
|
@close="closeSelectDropdown"
|
|
938
|
-
|
|
943
|
+
>
|
|
944
|
+
<template #dropdown-footer>
|
|
945
|
+
<slot :name="'dropdown-footer-' + selectDropdown.col.key" :column="selectDropdown.col" :close="closeSelectDropdown"></slot>
|
|
946
|
+
</template>
|
|
947
|
+
</eg-tree-select>
|
|
939
948
|
|
|
940
949
|
<!-- Date picker overlay -->
|
|
941
950
|
<eg-date-picker
|
|
@@ -1051,7 +1060,7 @@ const DEFAULT_TOOLBAR_LIST = ['undoRedo', 'export', 'import', 'print', 'localSyn
|
|
|
1051
1060
|
// retarget smoothly from whatever intermediate position an element is currently
|
|
1052
1061
|
// at when the drop slot changes mid-flight — no JS animation library races.
|
|
1053
1062
|
const COL_DRAG_TRANSITION = 'transform 200ms cubic-bezier(0.2, 0, 0, 1)'
|
|
1054
|
-
const THEME_LIST = ['excel', 'material', 'antd', 'fluent', 'carbon']
|
|
1063
|
+
const THEME_LIST = ['excel', 'material', 'antd', 'fluent', 'carbon', 'polaris']
|
|
1055
1064
|
|
|
1056
1065
|
// Kept as a named const (rather than an inline `export default {}`) so the
|
|
1057
1066
|
// local-sync preview modal can receive the plain component definition
|
|
@@ -1072,6 +1081,19 @@ const ExcelGridComponent = {
|
|
|
1072
1081
|
/** Array of row objects keyed by columns[].key */
|
|
1073
1082
|
data: { type: Array, default: () => [] },
|
|
1074
1083
|
|
|
1084
|
+
/**
|
|
1085
|
+
* Sarlavhalardagi matn sig'may qolganda uning qanday harakatlanishini belgilaydi
|
|
1086
|
+
* (barcha ustunlar uchun umumiy qoida). Ustun (column) sozlamalarida
|
|
1087
|
+
* xuddi shu nomli xususiyat mavjud bo'lsa, ustun sozlamasi inobatga olinadi.
|
|
1088
|
+
* @type {String}
|
|
1089
|
+
* @default 'no-overflow'
|
|
1090
|
+
*/
|
|
1091
|
+
overflowTitle: {
|
|
1092
|
+
type: String,
|
|
1093
|
+
default: 'no-overflow',
|
|
1094
|
+
validator: v => ['no-overflow', 'truncate', 'wrap'].includes(v)
|
|
1095
|
+
},
|
|
1096
|
+
|
|
1075
1097
|
/**
|
|
1076
1098
|
* Column definitions (may be nested via children[]).
|
|
1077
1099
|
*
|
|
@@ -1443,7 +1465,7 @@ const ExcelGridComponent = {
|
|
|
1443
1465
|
|
|
1444
1466
|
/**
|
|
1445
1467
|
* Visual theme of the grid.
|
|
1446
|
-
* Built-in: 'excel' | 'material' | 'antd' | 'fluent' | 'carbon'
|
|
1468
|
+
* Built-in: 'excel' | 'material' | 'antd' | 'fluent' | 'carbon' | 'polaris'
|
|
1447
1469
|
* Default is the classic Excel 365 look. Use 'material' for Material Design 3.
|
|
1448
1470
|
* Mirrors the `size` prop's convention: an internal `internalTheme` state
|
|
1449
1471
|
* mirrors this prop and is what the toolbar's theme picker actually reads
|
|
@@ -2842,7 +2864,7 @@ const ExcelGridComponent = {
|
|
|
2842
2864
|
},
|
|
2843
2865
|
_calcHeaderHeight() {
|
|
2844
2866
|
if (!this.leafCols) return
|
|
2845
|
-
const wrapCols = this.leafCols.filter(c => c.overflowTitle === 'wrap')
|
|
2867
|
+
const wrapCols = this.leafCols.filter(c => (c.overflowTitle || this.overflowTitle) === 'wrap')
|
|
2846
2868
|
if (wrapCols.length === 0) {
|
|
2847
2869
|
if (this.calculatedHeaderHeight !== null) this.calculatedHeaderHeight = null
|
|
2848
2870
|
return
|
|
@@ -7620,6 +7642,62 @@ export default ExcelGridComponent
|
|
|
7620
7642
|
--eg-color-row-stripe-default: #F4F4F4;
|
|
7621
7643
|
}
|
|
7622
7644
|
|
|
7645
|
+
/* ── Shopify Polaris — toza, zamonaviy e-commerce uslubi, 8px radius ── */
|
|
7646
|
+
.eg-shell.eg-theme-polaris {
|
|
7647
|
+
--eg-font-family-default: -apple-system, BlinkMacSystemFont, 'San Francisco', 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;
|
|
7648
|
+
--eg-font-size-default: 13px;
|
|
7649
|
+
--eg-font-size-header-default: 12px;
|
|
7650
|
+
--eg-radius-default: 8px;
|
|
7651
|
+
--eg-cell-padding-x-default: 8px;
|
|
7652
|
+
|
|
7653
|
+
--eg-color-accent-default: #008060;
|
|
7654
|
+
--eg-color-accent-dark-default: #004c3f;
|
|
7655
|
+
--eg-color-accent-soft-default: #E3F1DF;
|
|
7656
|
+
|
|
7657
|
+
--eg-color-error-default: #D72C0D;
|
|
7658
|
+
--eg-color-error-soft-default: #FFF4F4;
|
|
7659
|
+
--eg-color-error-dark-default: #8C1000;
|
|
7660
|
+
|
|
7661
|
+
/* Polaris borderlar: yumshoq kulrang */
|
|
7662
|
+
--eg-color-border-default: #D2D5D8;
|
|
7663
|
+
--eg-color-border-cell-default: #E1E3E5;
|
|
7664
|
+
--eg-color-border-strong-default: #8C9196;
|
|
7665
|
+
|
|
7666
|
+
/* Polaris header: yengil neytral kulrang (#F6F6F7) */
|
|
7667
|
+
--eg-color-header-bg-default: #F6F6F7;
|
|
7668
|
+
--eg-color-header-group-bg-default: #EDEEEF;
|
|
7669
|
+
--eg-color-group-border-default: #008060;
|
|
7670
|
+
--eg-color-group-bg-collapsed-default: #004c3f;
|
|
7671
|
+
|
|
7672
|
+
--eg-color-cell-bg-default: #FFFFFF;
|
|
7673
|
+
--eg-color-cell-selected-default: #E3F1DF;
|
|
7674
|
+
--eg-color-cell-fill-preview-default: #BBE5B3;
|
|
7675
|
+
--eg-color-cell-readonly-default: #FAFBFB;
|
|
7676
|
+
--eg-color-cell-readonly-selected-default: #D8ECE5;
|
|
7677
|
+
--eg-color-cell-readonly-pattern-default: rgba(0, 128, 96, 0.05);
|
|
7678
|
+
--eg-color-footer-bg-default: #F6F6F7;
|
|
7679
|
+
|
|
7680
|
+
--eg-color-text-default: #202223;
|
|
7681
|
+
--eg-color-text-secondary-default: #6D7175;
|
|
7682
|
+
--eg-color-text-muted-default: #8C9196;
|
|
7683
|
+
|
|
7684
|
+
--eg-shadow-dropdown-default: 0 4px 12px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.05);
|
|
7685
|
+
--eg-shadow-dialog-default: 0 8px 24px rgba(0, 0, 0, 0.12);
|
|
7686
|
+
--eg-shadow-tooltip-default: 0 2px 6px rgba(0, 0, 0, 0.15);
|
|
7687
|
+
--eg-color-freeze-shadow-default: rgba(0, 0, 0, 0.08);
|
|
7688
|
+
|
|
7689
|
+
--eg-color-overlay-bg-default: rgba(255, 255, 255, 0.94);
|
|
7690
|
+
--eg-color-option-hover-bg-default: #F6F6F7;
|
|
7691
|
+
--eg-color-option-active-hover-bg-default: #E3F1DF;
|
|
7692
|
+
|
|
7693
|
+
--eg-color-checkbox-border-default: #8C9196;
|
|
7694
|
+
--eg-color-checkbox-disabled-checked-default: #C9CCCF;
|
|
7695
|
+
|
|
7696
|
+
/* Polaris hover va stripe */
|
|
7697
|
+
--eg-color-row-hover-default: #F1F2F4;
|
|
7698
|
+
--eg-color-row-stripe-default: #FAFBFB;
|
|
7699
|
+
}
|
|
7700
|
+
|
|
7623
7701
|
.eg-wrapper {
|
|
7624
7702
|
display: flex;
|
|
7625
7703
|
flex-direction: column;
|
|
@@ -8901,6 +8979,10 @@ export default ExcelGridComponent
|
|
|
8901
8979
|
padding: 4px 6px 6px;
|
|
8902
8980
|
border-top: 1px solid var(--eg-color-border, var(--eg-color-border-default));
|
|
8903
8981
|
}
|
|
8982
|
+
.eg-select-dropdown-footer {
|
|
8983
|
+
border-top: 1px solid var(--eg-color-border, var(--eg-color-border-default));
|
|
8984
|
+
padding: 4px;
|
|
8985
|
+
}
|
|
8904
8986
|
.eg-select-btn {
|
|
8905
8987
|
background: none;
|
|
8906
8988
|
border: 1px solid var(--eg-color-border, var(--eg-color-border-default));
|
package/src/index.js
CHANGED
|
@@ -8,7 +8,19 @@ export { ExcelGrid, EgCheckbox, EgSelect, EgTreeSelect, version }
|
|
|
8
8
|
|
|
9
9
|
export default {
|
|
10
10
|
version,
|
|
11
|
-
install(Vue) {
|
|
11
|
+
install(Vue, options = {}) {
|
|
12
|
+
if (options && typeof options === 'object') {
|
|
13
|
+
Object.keys(options).forEach(key => {
|
|
14
|
+
if (ExcelGrid.props && ExcelGrid.props[key] !== undefined) {
|
|
15
|
+
const val = options[key]
|
|
16
|
+
if (typeof ExcelGrid.props[key] !== 'object') {
|
|
17
|
+
// Convert to object notation if it was just a constructor like `props: { fitColumns: Boolean }`
|
|
18
|
+
ExcelGrid.props[key] = { type: ExcelGrid.props[key] }
|
|
19
|
+
}
|
|
20
|
+
ExcelGrid.props[key].default = (val !== null && typeof val === 'object') ? () => val : val
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
}
|
|
12
24
|
Vue.component('Vue2ExcelGrid', ExcelGrid)
|
|
13
25
|
Vue.component('Vue2EgCheckbox', EgCheckbox)
|
|
14
26
|
Vue.component('Vue2EgSelect', EgSelect)
|