vuetify 3.0.6 → 3.1.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/_settings.scss +1 -0
- package/dist/_component-variables-labs.sass +1 -0
- package/dist/json/attributes.json +460 -12
- package/dist/json/importMap-labs.json +28 -0
- package/dist/json/importMap.json +60 -60
- package/dist/json/tags.json +154 -8
- package/dist/json/web-types.json +1522 -26
- package/dist/vuetify-labs.d.ts +875 -0
- package/dist/vuetify-labs.js +9748 -0
- package/dist/vuetify.css +36 -55
- package/dist/vuetify.d.ts +173 -196
- package/dist/vuetify.esm.js +190 -128
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +189 -127
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +788 -780
- package/dist/vuetify.min.js.map +1 -1
- package/lib/blueprints/index.d.ts +3 -2
- package/lib/blueprints/md1.d.ts +3 -2
- package/lib/blueprints/md2.d.ts +3 -2
- package/lib/blueprints/md3.d.ts +3 -2
- package/lib/components/VAlert/VAlertTitle.mjs.map +1 -1
- package/lib/components/VAlert/index.d.ts +1 -0
- package/lib/components/VAutocomplete/VAutocomplete.mjs +8 -10
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.ts +3 -12
- package/lib/components/VAvatar/VAvatar.mjs +2 -1
- package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
- package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +23 -20
- package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
- package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +21 -2
- package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
- package/lib/components/VBreadcrumbs/index.d.ts +4 -15
- package/lib/components/VColorPicker/VColorPicker.mjs +0 -1
- package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
- package/lib/components/VCombobox/VCombobox.mjs +8 -10
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/index.d.ts +3 -12
- package/lib/components/VDivider/VDivider.css +1 -1
- package/lib/components/VDivider/VDivider.sass +1 -0
- package/lib/components/VDivider/_variables.scss +2 -1
- package/lib/components/VIcon/VIcon.mjs +25 -20
- package/lib/components/VIcon/VIcon.mjs.map +1 -1
- package/lib/components/VIcon/index.d.ts +4 -8
- package/lib/components/VList/VListItem.css +0 -4
- package/lib/components/VList/VListItem.sass +12 -6
- package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +10 -2
- package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
- package/lib/components/VNavigationDrawer/index.d.ts +11 -3
- package/lib/components/VPagination/VPagination.mjs +12 -5
- package/lib/components/VPagination/VPagination.mjs.map +1 -1
- package/lib/components/VRadioGroup/VRadioGroup.mjs +3 -2
- package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
- package/lib/components/VSelect/VSelect.mjs +11 -8
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelectionControl/VSelectionControl.mjs +11 -2
- package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
- package/lib/components/VSelectionControl/index.d.ts +2 -2
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +12 -3
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
- package/lib/components/VSlider/VSliderThumb.css +2 -0
- package/lib/components/VSlider/VSliderThumb.sass +2 -0
- package/lib/components/VTable/VTable.css +12 -29
- package/lib/components/VTable/VTable.mjs +3 -3
- package/lib/components/VTable/VTable.mjs.map +1 -1
- package/lib/components/VTable/VTable.sass +10 -17
- package/lib/components/VTable/_variables.scss +4 -2
- package/lib/components/index.d.ts +27 -51
- package/lib/composables/filter.mjs +18 -10
- package/lib/composables/filter.mjs.map +1 -1
- package/lib/composables/icons.mjs +12 -7
- package/lib/composables/icons.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +15 -13
- package/lib/framework.mjs.map +1 -1
- package/lib/iconsets/fa-svg.d.ts +3 -2
- package/lib/iconsets/fa.d.ts +3 -2
- package/lib/iconsets/fa.mjs +2 -1
- package/lib/iconsets/fa.mjs.map +1 -1
- package/lib/iconsets/fa4.d.ts +3 -2
- package/lib/iconsets/fa4.mjs +2 -1
- package/lib/iconsets/fa4.mjs.map +1 -1
- package/lib/iconsets/md.d.ts +3 -2
- package/lib/iconsets/md.mjs +2 -1
- package/lib/iconsets/md.mjs.map +1 -1
- package/lib/iconsets/mdi-svg.d.ts +3 -2
- package/lib/iconsets/mdi-svg.mjs +2 -1
- package/lib/iconsets/mdi-svg.mjs.map +1 -1
- package/lib/iconsets/mdi.d.ts +3 -2
- package/lib/iconsets/mdi.mjs +2 -1
- package/lib/iconsets/mdi.mjs.map +1 -1
- package/lib/index.d.ts +19 -18
- package/lib/labs/VDataTable/VDataTable.css +119 -0
- package/lib/labs/VDataTable/VDataTable.mjs +146 -0
- package/lib/labs/VDataTable/VDataTable.mjs.map +1 -0
- package/lib/labs/VDataTable/VDataTable.sass +106 -0
- package/lib/labs/VDataTable/VDataTableColumn.mjs +37 -0
- package/lib/labs/VDataTable/VDataTableColumn.mjs.map +1 -0
- package/lib/labs/VDataTable/VDataTableFooter.css +22 -0
- package/lib/labs/VDataTable/VDataTableFooter.mjs +105 -0
- package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -0
- package/lib/labs/VDataTable/VDataTableFooter.sass +23 -0
- package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs +88 -0
- package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs.map +1 -0
- package/lib/labs/VDataTable/VDataTableHeaders.mjs +143 -0
- package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -0
- package/lib/labs/VDataTable/VDataTableRow.mjs +75 -0
- package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -0
- package/lib/labs/VDataTable/VDataTableRows.mjs +87 -0
- package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -0
- package/lib/labs/VDataTable/VDataTableServer.mjs +124 -0
- package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -0
- package/lib/labs/VDataTable/VDataTableVirtual.mjs +154 -0
- package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -0
- package/lib/labs/VDataTable/_variables.scss +6 -0
- package/lib/labs/VDataTable/composables/expand.mjs +51 -0
- package/lib/labs/VDataTable/composables/expand.mjs.map +1 -0
- package/lib/labs/VDataTable/composables/group.mjs +124 -0
- package/lib/labs/VDataTable/composables/group.mjs.map +1 -0
- package/lib/labs/VDataTable/composables/headers.mjs +152 -0
- package/lib/labs/VDataTable/composables/headers.mjs.map +1 -0
- package/lib/labs/VDataTable/composables/items.mjs +30 -0
- package/lib/labs/VDataTable/composables/items.mjs.map +1 -0
- package/lib/labs/VDataTable/composables/options.mjs +44 -0
- package/lib/labs/VDataTable/composables/options.mjs.map +1 -0
- package/lib/labs/VDataTable/composables/paginate.mjs +62 -0
- package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -0
- package/lib/labs/VDataTable/composables/select.mjs +57 -0
- package/lib/labs/VDataTable/composables/select.mjs.map +1 -0
- package/lib/labs/VDataTable/composables/sort.mjs +109 -0
- package/lib/labs/VDataTable/composables/sort.mjs.map +1 -0
- package/lib/labs/VDataTable/composables/virtual.mjs +77 -0
- package/lib/labs/VDataTable/composables/virtual.mjs.map +1 -0
- package/lib/labs/VDataTable/index.d.ts +705 -0
- package/lib/labs/VDataTable/index.mjs +6 -0
- package/lib/labs/VDataTable/index.mjs.map +1 -0
- package/lib/labs/VDataTable/types.mjs +2 -0
- package/lib/labs/VDataTable/types.mjs.map +1 -0
- package/lib/labs/VVirtualScroll/VVirtualScroll.css +11 -0
- package/lib/labs/VVirtualScroll/VVirtualScroll.mjs +118 -0
- package/lib/labs/VVirtualScroll/VVirtualScroll.mjs.map +1 -0
- package/lib/{components → labs}/VVirtualScroll/VVirtualScroll.sass +0 -5
- package/lib/labs/VVirtualScroll/VVirtualScrollItem.mjs +35 -0
- package/lib/labs/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -0
- package/lib/labs/VVirtualScroll/index.d.ts +154 -0
- package/lib/labs/VVirtualScroll/index.mjs +2 -0
- package/lib/labs/VVirtualScroll/index.mjs.map +1 -0
- package/lib/labs/components.d.ts +856 -0
- package/lib/labs/components.mjs +3 -0
- package/lib/labs/components.mjs.map +1 -0
- package/lib/labs/index.mjs +3 -0
- package/lib/labs/index.mjs.map +1 -0
- package/lib/util/defineComponent.mjs +4 -0
- package/lib/util/defineComponent.mjs.map +1 -1
- package/lib/util/helpers.mjs +0 -38
- package/lib/util/helpers.mjs.map +1 -1
- package/package.json +4 -2
- package/lib/components/VDataTable/MobileRow.mjs +0 -63
- package/lib/components/VDataTable/MobileRow.mjs.map +0 -1
- package/lib/components/VDataTable/Row.mjs +0 -57
- package/lib/components/VDataTable/Row.mjs.map +0 -1
- package/lib/components/VDataTable/RowGroup.mjs +0 -48
- package/lib/components/VDataTable/RowGroup.mjs.map +0 -1
- package/lib/components/VDataTable/VDataTable.mjs +0 -577
- package/lib/components/VDataTable/VDataTable.mjs.map +0 -1
- package/lib/components/VDataTable/VDataTable.sass +0 -98
- package/lib/components/VDataTable/VDataTableHeader.mjs +0 -42
- package/lib/components/VDataTable/VDataTableHeader.mjs.map +0 -1
- package/lib/components/VDataTable/VDataTableHeader.sass +0 -80
- package/lib/components/VDataTable/VDataTableHeaderDesktop.mjs +0 -96
- package/lib/components/VDataTable/VDataTableHeaderDesktop.mjs.map +0 -1
- package/lib/components/VDataTable/VDataTableHeaderMobile.mjs +0 -89
- package/lib/components/VDataTable/VDataTableHeaderMobile.mjs.map +0 -1
- package/lib/components/VDataTable/VEditDialog.mjs +0 -127
- package/lib/components/VDataTable/VEditDialog.mjs.map +0 -1
- package/lib/components/VDataTable/VEditDialog.sass +0 -22
- package/lib/components/VDataTable/VVirtualTable.mjs +0 -132
- package/lib/components/VDataTable/VVirtualTable.mjs.map +0 -1
- package/lib/components/VDataTable/VVirtualTable.sass +0 -13
- package/lib/components/VDataTable/_variables.scss +0 -24
- package/lib/components/VDataTable/index.mjs +0 -21
- package/lib/components/VDataTable/index.mjs.map +0 -1
- package/lib/components/VDataTable/mixins/header.mjs +0 -71
- package/lib/components/VDataTable/mixins/header.mjs.map +0 -1
- package/lib/components/VVirtualScroll/VVirtualScroll.mjs +0 -108
- package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +0 -1
- package/lib/components/VVirtualScroll/index.mjs +0 -4
- package/lib/components/VVirtualScroll/index.mjs.map +0 -1
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
@use '../../styles/settings'
|
|
2
|
+
@use '../../styles/tools'
|
|
3
|
+
@use './variables' as *
|
|
4
|
+
|
|
5
|
+
.v-data-table
|
|
6
|
+
width: 100%
|
|
7
|
+
|
|
8
|
+
.v-data-table__table
|
|
9
|
+
width: 100%
|
|
10
|
+
border-collapse: separate
|
|
11
|
+
border-spacing: 0
|
|
12
|
+
|
|
13
|
+
.v-data-table__tr
|
|
14
|
+
&--focus
|
|
15
|
+
border: 1px dotted black
|
|
16
|
+
|
|
17
|
+
.v-data-table
|
|
18
|
+
.v-table__wrapper
|
|
19
|
+
> table
|
|
20
|
+
> thead,
|
|
21
|
+
tbody
|
|
22
|
+
> tr
|
|
23
|
+
> td,
|
|
24
|
+
th
|
|
25
|
+
background: rgb(var(--v-theme-surface))
|
|
26
|
+
|
|
27
|
+
&.v-data-table-column--align-end
|
|
28
|
+
text-align: end
|
|
29
|
+
|
|
30
|
+
.v-data-table-header__content
|
|
31
|
+
flex-direction: row-reverse
|
|
32
|
+
|
|
33
|
+
&.v-data-table-column--no-padding
|
|
34
|
+
padding: 0 8px
|
|
35
|
+
|
|
36
|
+
> th
|
|
37
|
+
align-items: center
|
|
38
|
+
|
|
39
|
+
> th.v-data-table__th--sortable:hover
|
|
40
|
+
cursor: pointer
|
|
41
|
+
color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity))
|
|
42
|
+
|
|
43
|
+
> th:not(.v-data-table__th--sorted)
|
|
44
|
+
.v-data-table-header__sort-icon
|
|
45
|
+
opacity: 0
|
|
46
|
+
|
|
47
|
+
&:hover
|
|
48
|
+
.v-data-table-header__sort-icon
|
|
49
|
+
opacity: 0.5
|
|
50
|
+
|
|
51
|
+
.v-data-table-column--fixed
|
|
52
|
+
position: sticky
|
|
53
|
+
z-index: 2
|
|
54
|
+
left: 0
|
|
55
|
+
|
|
56
|
+
.v-data-table-column--last-fixed
|
|
57
|
+
border-right: 1px solid rgba(var(--v-border-color), var(--v-border-opacity))
|
|
58
|
+
|
|
59
|
+
.v-data-table-group-header-row
|
|
60
|
+
td
|
|
61
|
+
background: lightgrey
|
|
62
|
+
|
|
63
|
+
> span
|
|
64
|
+
padding-left: 5px
|
|
65
|
+
|
|
66
|
+
.v-data-table--loading
|
|
67
|
+
.v-data-table__td
|
|
68
|
+
opacity: 0.3
|
|
69
|
+
|
|
70
|
+
.v-data-table__progress
|
|
71
|
+
th
|
|
72
|
+
position: relative
|
|
73
|
+
border: none !important
|
|
74
|
+
height: auto !important
|
|
75
|
+
|
|
76
|
+
.v-data-table-group-header-row__column
|
|
77
|
+
padding-left: calc(var(--v-data-table-group-header-row-depth) * 16px) !important
|
|
78
|
+
|
|
79
|
+
.v-data-table-header__content
|
|
80
|
+
display: flex
|
|
81
|
+
align-items: center
|
|
82
|
+
|
|
83
|
+
.v-data-table-header__sort-badge
|
|
84
|
+
display: inline-flex
|
|
85
|
+
justify-content: center
|
|
86
|
+
align-items: center
|
|
87
|
+
font-size: 0.875rem
|
|
88
|
+
padding: 4px
|
|
89
|
+
border-radius: 50%
|
|
90
|
+
background: $data-table-header-sort-badge-color
|
|
91
|
+
min-width: $data-table-header-sort-badge-size
|
|
92
|
+
min-height: $data-table-header-sort-badge-size
|
|
93
|
+
width: $data-table-header-sort-badge-size
|
|
94
|
+
height: $data-table-header-sort-badge-size
|
|
95
|
+
|
|
96
|
+
.v-data-table-headers__loader
|
|
97
|
+
bottom: auto
|
|
98
|
+
top: 0
|
|
99
|
+
left: 0
|
|
100
|
+
position: absolute
|
|
101
|
+
right: 0
|
|
102
|
+
width: 100%
|
|
103
|
+
z-index: 1
|
|
104
|
+
|
|
105
|
+
.v-data-table-rows-no-data
|
|
106
|
+
text-align: center
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createVNode as _createVNode, mergeProps as _mergeProps } from "vue";
|
|
2
|
+
import { convertToUnit, defineFunctionalComponent } from "../../util/index.mjs";
|
|
3
|
+
export const VDataTableColumn = defineFunctionalComponent({
|
|
4
|
+
align: {
|
|
5
|
+
type: String,
|
|
6
|
+
default: 'start'
|
|
7
|
+
},
|
|
8
|
+
fixed: Boolean,
|
|
9
|
+
fixedOffset: [Number, String],
|
|
10
|
+
height: [Number, String],
|
|
11
|
+
lastFixed: Boolean,
|
|
12
|
+
noPadding: Boolean,
|
|
13
|
+
tag: String,
|
|
14
|
+
width: [Number, String]
|
|
15
|
+
}, (props, _ref) => {
|
|
16
|
+
var _slots$default;
|
|
17
|
+
let {
|
|
18
|
+
slots,
|
|
19
|
+
attrs
|
|
20
|
+
} = _ref;
|
|
21
|
+
const Tag = props.tag ?? 'td';
|
|
22
|
+
return _createVNode(Tag, _mergeProps({
|
|
23
|
+
"class": ['v-data-table__td', {
|
|
24
|
+
'v-data-table-column--fixed': props.fixed,
|
|
25
|
+
'v-data-table-column--last-fixed': props.lastFixed,
|
|
26
|
+
'v-data-table-column--no-padding': props.noPadding
|
|
27
|
+
}, `v-data-table-column--align-${props.align}`],
|
|
28
|
+
"style": {
|
|
29
|
+
height: convertToUnit(props.height),
|
|
30
|
+
width: convertToUnit(props.width),
|
|
31
|
+
left: convertToUnit(props.fixedOffset || null)
|
|
32
|
+
}
|
|
33
|
+
}, attrs), {
|
|
34
|
+
default: () => [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=VDataTableColumn.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VDataTableColumn.mjs","names":["convertToUnit","defineFunctionalComponent","VDataTableColumn","align","type","String","default","fixed","Boolean","fixedOffset","Number","height","lastFixed","noPadding","tag","width","props","slots","attrs","Tag","left"],"sources":["../../../src/labs/VDataTable/VDataTableColumn.tsx"],"sourcesContent":["import { convertToUnit, defineFunctionalComponent } from '@/util'\nimport type { PropType } from 'vue'\n\nexport const VDataTableColumn = defineFunctionalComponent({\n align: {\n type: String as PropType<'start' | 'center' | 'end'>,\n default: 'start',\n },\n fixed: Boolean,\n fixedOffset: [Number, String],\n height: [Number, String],\n lastFixed: Boolean,\n noPadding: Boolean,\n tag: String,\n width: [Number, String],\n}, (props, { slots, attrs }) => {\n const Tag = props.tag ?? 'td'\n return (\n <Tag\n class={[\n 'v-data-table__td',\n {\n 'v-data-table-column--fixed': props.fixed,\n 'v-data-table-column--last-fixed': props.lastFixed,\n 'v-data-table-column--no-padding': props.noPadding,\n },\n `v-data-table-column--align-${props.align}`,\n ]}\n style={{\n height: convertToUnit(props.height),\n width: convertToUnit(props.width),\n left: convertToUnit(props.fixedOffset || null),\n }}\n { ...attrs }\n >\n { slots.default?.() }\n </Tag>\n )\n})\n"],"mappings":";SAASA,aAAa,EAAEC,yBAAyB;AAGjD,OAAO,MAAMC,gBAAgB,GAAGD,yBAAyB,CAAC;EACxDE,KAAK,EAAE;IACLC,IAAI,EAAEC,MAA8C;IACpDC,OAAO,EAAE;EACX,CAAC;EACDC,KAAK,EAAEC,OAAO;EACdC,WAAW,EAAE,CAACC,MAAM,EAAEL,MAAM,CAAC;EAC7BM,MAAM,EAAE,CAACD,MAAM,EAAEL,MAAM,CAAC;EACxBO,SAAS,EAAEJ,OAAO;EAClBK,SAAS,EAAEL,OAAO;EAClBM,GAAG,EAAET,MAAM;EACXU,KAAK,EAAE,CAACL,MAAM,EAAEL,MAAM;AACxB,CAAC,EAAE,CAACW,KAAK,WAAuB;EAAA;EAAA,IAArB;IAAEC,KAAK;IAAEC;EAAM,CAAC;EACzB,MAAMC,GAAG,GAAGH,KAAK,CAACF,GAAG,IAAI,IAAI;EAC7B;IAAA,SAEW,CACL,kBAAkB,EAClB;MACE,4BAA4B,EAAEE,KAAK,CAACT,KAAK;MACzC,iCAAiC,EAAES,KAAK,CAACJ,SAAS;MAClD,iCAAiC,EAAEI,KAAK,CAACH;IAC3C,CAAC,EACA,8BAA6BG,KAAK,CAACb,KAAM,EAAC,CAC5C;IAAA,SACM;MACLQ,MAAM,EAAEX,aAAa,CAACgB,KAAK,CAACL,MAAM,CAAC;MACnCI,KAAK,EAAEf,aAAa,CAACgB,KAAK,CAACD,KAAK,CAAC;MACjCK,IAAI,EAAEpB,aAAa,CAACgB,KAAK,CAACP,WAAW,IAAI,IAAI;IAC/C;EAAC,GACIS,KAAK;IAAA,kCAERD,KAAK,CAACX,OAAO,qBAAb,oBAAAW,KAAK,CAAY;EAAA;AAGzB,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
.v-data-table-footer {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
flex-wrap: wrap;
|
|
5
|
+
padding: 0 8px;
|
|
6
|
+
justify-content: flex-end;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.v-data-table-footer__items-per-page {
|
|
10
|
+
padding-inline-end: 24px;
|
|
11
|
+
display: flex;
|
|
12
|
+
align-items: center;
|
|
13
|
+
justify-content: space-between;
|
|
14
|
+
}
|
|
15
|
+
.v-data-table-footer__items-per-page > span {
|
|
16
|
+
padding-inline-end: 24px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.v-data-table-footer__info {
|
|
20
|
+
display: flex;
|
|
21
|
+
padding-inline-end: 24px;
|
|
22
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { createVNode as _createVNode, createTextVNode as _createTextVNode } from "vue";
|
|
2
|
+
// Styles
|
|
3
|
+
import "./VDataTableFooter.css";
|
|
4
|
+
|
|
5
|
+
// Components
|
|
6
|
+
import { VBtn } from "../../components/VBtn/index.mjs";
|
|
7
|
+
import { VSelect } from "../../components/VSelect/index.mjs"; // Composables
|
|
8
|
+
import { usePagination } from "./composables/paginate.mjs"; // Utilities
|
|
9
|
+
import { defineComponent } from "../../util/index.mjs"; // Types
|
|
10
|
+
export const VDataTableFooter = defineComponent({
|
|
11
|
+
name: 'VDataTableFooter',
|
|
12
|
+
props: {
|
|
13
|
+
prevIcon: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: '$prev'
|
|
16
|
+
},
|
|
17
|
+
nextIcon: {
|
|
18
|
+
type: String,
|
|
19
|
+
default: '$next'
|
|
20
|
+
},
|
|
21
|
+
firstIcon: {
|
|
22
|
+
type: String,
|
|
23
|
+
default: '$first'
|
|
24
|
+
},
|
|
25
|
+
lastIcon: {
|
|
26
|
+
type: String,
|
|
27
|
+
default: '$last'
|
|
28
|
+
},
|
|
29
|
+
itemsPerPageOptions: {
|
|
30
|
+
type: Array,
|
|
31
|
+
default: () => [{
|
|
32
|
+
value: 10,
|
|
33
|
+
title: '10'
|
|
34
|
+
}, {
|
|
35
|
+
value: 25,
|
|
36
|
+
title: '25'
|
|
37
|
+
}, {
|
|
38
|
+
value: 50,
|
|
39
|
+
title: '50'
|
|
40
|
+
}, {
|
|
41
|
+
value: 100,
|
|
42
|
+
title: '100'
|
|
43
|
+
}, {
|
|
44
|
+
value: -1,
|
|
45
|
+
title: 'All'
|
|
46
|
+
}]
|
|
47
|
+
},
|
|
48
|
+
showCurrentPage: Boolean
|
|
49
|
+
},
|
|
50
|
+
setup(props, _ref) {
|
|
51
|
+
let {
|
|
52
|
+
slots
|
|
53
|
+
} = _ref;
|
|
54
|
+
const {
|
|
55
|
+
page,
|
|
56
|
+
pageCount,
|
|
57
|
+
startIndex,
|
|
58
|
+
stopIndex,
|
|
59
|
+
itemsLength,
|
|
60
|
+
itemsPerPage
|
|
61
|
+
} = usePagination();
|
|
62
|
+
return () => {
|
|
63
|
+
var _slots$prepend;
|
|
64
|
+
return _createVNode("div", {
|
|
65
|
+
"class": "v-data-table-footer"
|
|
66
|
+
}, [(_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots), _createVNode("div", {
|
|
67
|
+
"class": "v-data-table-footer__items-per-page"
|
|
68
|
+
}, [_createVNode("span", null, [_createTextVNode("Items per page:")]), _createVNode(VSelect, {
|
|
69
|
+
"items": props.itemsPerPageOptions,
|
|
70
|
+
"modelValue": itemsPerPage.value,
|
|
71
|
+
"onUpdate:modelValue": v => itemsPerPage.value = Number(v),
|
|
72
|
+
"density": "compact",
|
|
73
|
+
"variant": "outlined",
|
|
74
|
+
"hide-details": true
|
|
75
|
+
}, null)]), _createVNode("div", {
|
|
76
|
+
"class": "v-data-table-footer__info"
|
|
77
|
+
}, [_createVNode("div", null, [(startIndex.value ?? -1) + 1, _createTextVNode(" - "), stopIndex.value ?? 0, _createTextVNode(" of "), itemsLength.value ?? 0])]), _createVNode("div", {
|
|
78
|
+
"class": "v-data-table-footer__pagination"
|
|
79
|
+
}, [_createVNode(VBtn, {
|
|
80
|
+
"icon": props.firstIcon,
|
|
81
|
+
"variant": "plain",
|
|
82
|
+
"onClick": () => page.value = 1,
|
|
83
|
+
"disabled": page.value === 1
|
|
84
|
+
}, null), _createVNode(VBtn, {
|
|
85
|
+
"icon": props.prevIcon,
|
|
86
|
+
"variant": "plain",
|
|
87
|
+
"onClick": () => page.value = Math.max(1, page.value - 1),
|
|
88
|
+
"disabled": page.value === 1
|
|
89
|
+
}, null), props.showCurrentPage && _createVNode("div", {
|
|
90
|
+
"key": "page"
|
|
91
|
+
}, [_createTextVNode("page.value")]), _createVNode(VBtn, {
|
|
92
|
+
"icon": props.nextIcon,
|
|
93
|
+
"variant": "plain",
|
|
94
|
+
"onClick": () => page.value = Math.min(pageCount.value, page.value + 1),
|
|
95
|
+
"disabled": page.value === pageCount.value
|
|
96
|
+
}, null), _createVNode(VBtn, {
|
|
97
|
+
"icon": props.lastIcon,
|
|
98
|
+
"variant": "plain",
|
|
99
|
+
"onClick": () => page.value = pageCount.value,
|
|
100
|
+
"disabled": page.value === pageCount.value
|
|
101
|
+
}, null)])]);
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=VDataTableFooter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VDataTableFooter.mjs","names":["VBtn","VSelect","usePagination","defineComponent","VDataTableFooter","name","props","prevIcon","type","String","default","nextIcon","firstIcon","lastIcon","itemsPerPageOptions","Array","value","title","showCurrentPage","Boolean","setup","slots","page","pageCount","startIndex","stopIndex","itemsLength","itemsPerPage","prepend","v","Number","Math","max","min"],"sources":["../../../src/labs/VDataTable/VDataTableFooter.tsx"],"sourcesContent":["// Styles\nimport './VDataTableFooter.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VSelect } from '@/components/VSelect'\n\n// Composables\nimport { usePagination } from './composables/paginate'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { InternalItem } from '@/composables/items'\n\nexport const VDataTableFooter = defineComponent({\n name: 'VDataTableFooter',\n\n props: {\n prevIcon: {\n type: String,\n default: '$prev',\n },\n nextIcon: {\n type: String,\n default: '$next',\n },\n firstIcon: {\n type: String,\n default: '$first',\n },\n lastIcon: {\n type: String,\n default: '$last',\n },\n itemsPerPageOptions: {\n type: Array as PropType<InternalItem[]>,\n default: () => ([\n { value: 10, title: '10' },\n { value: 25, title: '25' },\n { value: 50, title: '50' },\n { value: 100, title: '100' },\n { value: -1, title: 'All' },\n ]),\n },\n showCurrentPage: Boolean,\n },\n\n setup (props, { slots }) {\n const { page, pageCount, startIndex, stopIndex, itemsLength, itemsPerPage } = usePagination()\n\n return () => (\n <div\n class=\"v-data-table-footer\"\n >\n { slots.prepend?.() }\n <div class=\"v-data-table-footer__items-per-page\">\n <span>Items per page:</span>\n <VSelect\n items={ props.itemsPerPageOptions }\n modelValue={ itemsPerPage.value }\n onUpdate:modelValue={ v => itemsPerPage.value = Number(v) }\n density=\"compact\"\n variant=\"outlined\"\n hide-details\n />\n </div>\n <div class=\"v-data-table-footer__info\">\n <div>{ (startIndex.value ?? -1) + 1 } - { stopIndex.value ?? 0 } of { itemsLength.value ?? 0 }</div>\n </div>\n <div class=\"v-data-table-footer__pagination\">\n <VBtn\n icon={ props.firstIcon }\n variant=\"plain\"\n onClick={ () => page.value = 1 }\n disabled={ page.value === 1 }\n />\n <VBtn\n icon={ props.prevIcon }\n variant=\"plain\"\n onClick={ () => page.value = Math.max(1, page.value - 1) }\n disabled={ page.value === 1 }\n />\n { props.showCurrentPage && (\n <div key=\"page\">page.value</div>\n ) }\n <VBtn\n icon={ props.nextIcon }\n variant=\"plain\"\n onClick={ () => page.value = Math.min(pageCount.value, page.value + 1) }\n disabled={ page.value === pageCount.value }\n />\n <VBtn\n icon={ props.lastIcon }\n variant=\"plain\"\n onClick={ () => page.value = pageCount.value }\n disabled={ page.value === pageCount.value }\n />\n </div>\n </div>\n )\n },\n})\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
@forward './variables'
|
|
2
|
+
@use '../../styles/tools'
|
|
3
|
+
@use './variables' as *
|
|
4
|
+
|
|
5
|
+
.v-data-table-footer
|
|
6
|
+
display: flex
|
|
7
|
+
align-items: center
|
|
8
|
+
flex-wrap: wrap
|
|
9
|
+
padding: $data-table-footer-padding
|
|
10
|
+
justify-content: flex-end
|
|
11
|
+
|
|
12
|
+
.v-data-table-footer__items-per-page
|
|
13
|
+
padding-inline-end: 24px
|
|
14
|
+
display: flex
|
|
15
|
+
align-items: center
|
|
16
|
+
justify-content: space-between
|
|
17
|
+
|
|
18
|
+
> span
|
|
19
|
+
padding-inline-end: 24px
|
|
20
|
+
|
|
21
|
+
.v-data-table-footer__info
|
|
22
|
+
display: flex
|
|
23
|
+
padding-inline-end: 24px
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { createTextVNode as _createTextVNode, createVNode as _createVNode } from "vue";
|
|
2
|
+
// Components
|
|
3
|
+
import { VBtn } from "../../components/VBtn/index.mjs";
|
|
4
|
+
import { VCheckboxBtn } from "../../components/VCheckbox/index.mjs";
|
|
5
|
+
import { VDataTableColumn } from "./VDataTableColumn.mjs"; // Composables
|
|
6
|
+
import { useHeaders } from "./composables/headers.mjs";
|
|
7
|
+
import { useSelection } from "./composables/select.mjs";
|
|
8
|
+
import { useGroupBy } from "./composables/group.mjs"; // Utilities
|
|
9
|
+
import { computed } from 'vue';
|
|
10
|
+
import { defineComponent } from "../../util/index.mjs"; // Types
|
|
11
|
+
export const VDataTableGroupHeaderRow = defineComponent({
|
|
12
|
+
name: 'VDataTableGroupHeaderRow',
|
|
13
|
+
props: {
|
|
14
|
+
item: {
|
|
15
|
+
type: Object,
|
|
16
|
+
required: true
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
setup(props, _ref) {
|
|
20
|
+
let {
|
|
21
|
+
slots
|
|
22
|
+
} = _ref;
|
|
23
|
+
const {
|
|
24
|
+
opened,
|
|
25
|
+
toggleGroup,
|
|
26
|
+
extractRows
|
|
27
|
+
} = useGroupBy();
|
|
28
|
+
const {
|
|
29
|
+
isSelected,
|
|
30
|
+
isSomeSelected,
|
|
31
|
+
select
|
|
32
|
+
} = useSelection();
|
|
33
|
+
const {
|
|
34
|
+
columns
|
|
35
|
+
} = useHeaders();
|
|
36
|
+
const rows = computed(() => {
|
|
37
|
+
return extractRows([props.item]);
|
|
38
|
+
});
|
|
39
|
+
return () => _createVNode("tr", {
|
|
40
|
+
"class": "v-data-table-group-header-row",
|
|
41
|
+
"style": {
|
|
42
|
+
'--v-data-table-group-header-row-depth': props.item.depth
|
|
43
|
+
}
|
|
44
|
+
}, [columns.value.map(column => {
|
|
45
|
+
if (column.key === 'data-table-group') {
|
|
46
|
+
var _slots$dataTableGro;
|
|
47
|
+
const icon = opened.value.has(props.item.id) ? '$expand' : '$next';
|
|
48
|
+
const onClick = () => toggleGroup(props.item.id);
|
|
49
|
+
return ((_slots$dataTableGro = slots['data-table-group']) == null ? void 0 : _slots$dataTableGro.call(slots, {
|
|
50
|
+
item: props.item,
|
|
51
|
+
count: rows.value.length,
|
|
52
|
+
props: {
|
|
53
|
+
icon,
|
|
54
|
+
onClick
|
|
55
|
+
}
|
|
56
|
+
})) ?? _createVNode(VDataTableColumn, {
|
|
57
|
+
"class": "v-data-table-group-header-row__column"
|
|
58
|
+
}, {
|
|
59
|
+
default: () => [_createVNode(VBtn, {
|
|
60
|
+
"size": "small",
|
|
61
|
+
"variant": "text",
|
|
62
|
+
"icon": icon,
|
|
63
|
+
"onClick": onClick
|
|
64
|
+
}, null), _createVNode("span", null, [props.item.value]), _createVNode("span", null, [_createTextVNode("("), rows.value.length, _createTextVNode(")")])]
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (column.key === 'data-table-select') {
|
|
68
|
+
var _slots$dataTableSel;
|
|
69
|
+
const modelValue = isSelected(rows.value);
|
|
70
|
+
const indeterminate = isSomeSelected(rows.value) && !modelValue;
|
|
71
|
+
const selectGroup = v => select(rows.value, v);
|
|
72
|
+
return ((_slots$dataTableSel = slots['data-table-select']) == null ? void 0 : _slots$dataTableSel.call(slots, {
|
|
73
|
+
props: {
|
|
74
|
+
modelValue,
|
|
75
|
+
indeterminate,
|
|
76
|
+
'onUpdate:modelValue': selectGroup
|
|
77
|
+
}
|
|
78
|
+
})) ?? _createVNode("td", null, [_createVNode(VCheckboxBtn, {
|
|
79
|
+
"modelValue": modelValue,
|
|
80
|
+
"indeterminate": indeterminate,
|
|
81
|
+
"onUpdate:modelValue": selectGroup
|
|
82
|
+
}, null)]);
|
|
83
|
+
}
|
|
84
|
+
return _createVNode("td", null, null);
|
|
85
|
+
})]);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=VDataTableGroupHeaderRow.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VDataTableGroupHeaderRow.mjs","names":["VBtn","VCheckboxBtn","VDataTableColumn","useHeaders","useSelection","useGroupBy","computed","defineComponent","VDataTableGroupHeaderRow","name","props","item","type","Object","required","setup","slots","opened","toggleGroup","extractRows","isSelected","isSomeSelected","select","columns","rows","depth","value","map","column","key","icon","has","id","onClick","count","length","modelValue","indeterminate","selectGroup","v"],"sources":["../../../src/labs/VDataTable/VDataTableGroupHeaderRow.tsx"],"sourcesContent":["// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VDataTableColumn } from './VDataTableColumn'\n\n// Composables\nimport { useHeaders } from './composables/headers'\nimport { useSelection } from './composables/select'\nimport { useGroupBy } from './composables/group'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { GroupHeaderItem } from './types'\n\nexport const VDataTableGroupHeaderRow = defineComponent({\n name: 'VDataTableGroupHeaderRow',\n\n props: {\n item: {\n type: Object as PropType<GroupHeaderItem>,\n required: true,\n },\n },\n\n setup (props, { slots }) {\n const { opened, toggleGroup, extractRows } = useGroupBy()\n const { isSelected, isSomeSelected, select } = useSelection()\n const { columns } = useHeaders()\n\n const rows = computed(() => {\n return extractRows([props.item])\n })\n\n return () => (\n <tr\n class=\"v-data-table-group-header-row\"\n style={{\n '--v-data-table-group-header-row-depth': props.item.depth,\n }}\n >\n { columns.value.map(column => {\n if (column.key === 'data-table-group') {\n const icon = opened.value.has(props.item.id) ? '$expand' : '$next'\n const onClick = () => toggleGroup(props.item.id)\n\n return slots['data-table-group']?.({ item: props.item, count: rows.value.length, props: { icon, onClick } }) ?? (\n <VDataTableColumn class=\"v-data-table-group-header-row__column\">\n <VBtn\n size=\"small\"\n variant=\"text\"\n icon={ icon }\n onClick={ onClick }\n />\n <span>{ props.item.value }</span>\n <span>({ rows.value.length })</span>\n </VDataTableColumn>\n )\n }\n\n if (column.key === 'data-table-select') {\n const modelValue = isSelected(rows.value)\n const indeterminate = isSomeSelected(rows.value) && !modelValue\n const selectGroup = (v: boolean) => select(rows.value, v)\n return slots['data-table-select']?.({ props: { modelValue, indeterminate, 'onUpdate:modelValue': selectGroup } }) ?? (\n <td>\n <VCheckboxBtn\n modelValue={ modelValue }\n indeterminate={ indeterminate }\n onUpdate:modelValue={ selectGroup }\n />\n </td>\n )\n }\n\n return <td />\n })}\n </tr>\n )\n },\n})\n"],"mappings":";AAAA;AAAA,SACSA,IAAI;AAAA,SACJC,YAAY;AAAA,SACZC,gBAAgB,kCAEzB;AAAA,SACSC,UAAU;AAAA,SACVC,YAAY;AAAA,SACZC,UAAU,mCAEnB;AACA,SAASC,QAAQ,QAAQ,KAAK;AAAA,SACrBC,eAAe,gCAExB;AAIA,OAAO,MAAMC,wBAAwB,GAAGD,eAAe,CAAC;EACtDE,IAAI,EAAE,0BAA0B;EAEhCC,KAAK,EAAE;IACLC,IAAI,EAAE;MACJC,IAAI,EAAEC,MAAmC;MACzCC,QAAQ,EAAE;IACZ;EACF,CAAC;EAEDC,KAAK,CAAEL,KAAK,QAAa;IAAA,IAAX;MAAEM;IAAM,CAAC;IACrB,MAAM;MAAEC,MAAM;MAAEC,WAAW;MAAEC;IAAY,CAAC,GAAGd,UAAU,EAAE;IACzD,MAAM;MAAEe,UAAU;MAAEC,cAAc;MAAEC;IAAO,CAAC,GAAGlB,YAAY,EAAE;IAC7D,MAAM;MAAEmB;IAAQ,CAAC,GAAGpB,UAAU,EAAE;IAEhC,MAAMqB,IAAI,GAAGlB,QAAQ,CAAC,MAAM;MAC1B,OAAOa,WAAW,CAAC,CAACT,KAAK,CAACC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC;IAEF,OAAO;MAAA,SAEG,+BAA+B;MAAA,SAC9B;QACL,uCAAuC,EAAED,KAAK,CAACC,IAAI,CAACc;MACtD;IAAC,IAECF,OAAO,CAACG,KAAK,CAACC,GAAG,CAACC,MAAM,IAAI;MAC5B,IAAIA,MAAM,CAACC,GAAG,KAAK,kBAAkB,EAAE;QAAA;QACrC,MAAMC,IAAI,GAAGb,MAAM,CAACS,KAAK,CAACK,GAAG,CAACrB,KAAK,CAACC,IAAI,CAACqB,EAAE,CAAC,GAAG,SAAS,GAAG,OAAO;QAClE,MAAMC,OAAO,GAAG,MAAMf,WAAW,CAACR,KAAK,CAACC,IAAI,CAACqB,EAAE,CAAC;QAEhD,OAAO,wBAAAhB,KAAK,CAAC,kBAAkB,CAAC,qBAAzB,yBAAAA,KAAK,EAAuB;UAAEL,IAAI,EAAED,KAAK,CAACC,IAAI;UAAEuB,KAAK,EAAEV,IAAI,CAACE,KAAK,CAACS,MAAM;UAAEzB,KAAK,EAAE;YAAEoB,IAAI;YAAEG;UAAQ;QAAE,CAAC,CAAC;UAAA,SAClF;QAAuC;UAAA;YAAA,QAEtD,OAAO;YAAA,WACJ,MAAM;YAAA,QACPH,IAAI;YAAA,WACDG;UAAO,sCAEXvB,KAAK,CAACC,IAAI,CAACe,KAAK,uDACfF,IAAI,CAACE,KAAK,CAACS,MAAM;QAAA,EAE7B;MACH;MAEA,IAAIP,MAAM,CAACC,GAAG,KAAK,mBAAmB,EAAE;QAAA;QACtC,MAAMO,UAAU,GAAGhB,UAAU,CAACI,IAAI,CAACE,KAAK,CAAC;QACzC,MAAMW,aAAa,GAAGhB,cAAc,CAACG,IAAI,CAACE,KAAK,CAAC,IAAI,CAACU,UAAU;QAC/D,MAAME,WAAW,GAAIC,CAAU,IAAKjB,MAAM,CAACE,IAAI,CAACE,KAAK,EAAEa,CAAC,CAAC;QACzD,OAAO,wBAAAvB,KAAK,CAAC,mBAAmB,CAAC,qBAA1B,yBAAAA,KAAK,EAAwB;UAAEN,KAAK,EAAE;YAAE0B,UAAU;YAAEC,aAAa;YAAE,qBAAqB,EAAEC;UAAY;QAAE,CAAC,CAAC;UAAA,cAG9FF,UAAU;UAAA,iBACPC,aAAa;UAAA,uBACPC;QAAW,UAGtC;MACH;MAEA;IACF,CAAC,CAAC,EAEL;EACH;AACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { resolveDirective as _resolveDirective, Fragment as _Fragment, createVNode as _createVNode } from "vue";
|
|
2
|
+
// Components
|
|
3
|
+
import { VCheckboxBtn } from "../../components/VCheckbox/index.mjs";
|
|
4
|
+
import { VDataTableColumn } from "./VDataTableColumn.mjs";
|
|
5
|
+
import { VIcon } from "../../components/VIcon/index.mjs"; // Composables
|
|
6
|
+
import { IconValue } from "../../composables/icons.mjs";
|
|
7
|
+
import { LoaderSlot, makeLoaderProps, useLoader } from "../../composables/loader.mjs";
|
|
8
|
+
import { useBackgroundColor } from "../../composables/color.mjs";
|
|
9
|
+
import { useHeaders } from "./composables/headers.mjs";
|
|
10
|
+
import { useSelection } from "./composables/select.mjs";
|
|
11
|
+
import { useSort } from "./composables/sort.mjs"; // Utilities
|
|
12
|
+
import { convertToUnit, defineComponent, useRender } from "../../util/index.mjs"; // Types
|
|
13
|
+
export const VDataTableHeaders = defineComponent({
|
|
14
|
+
name: 'VDataTableHeaders',
|
|
15
|
+
props: {
|
|
16
|
+
color: String,
|
|
17
|
+
sticky: Boolean,
|
|
18
|
+
multiSort: Boolean,
|
|
19
|
+
sortAscIcon: {
|
|
20
|
+
type: IconValue,
|
|
21
|
+
default: '$sortAsc'
|
|
22
|
+
},
|
|
23
|
+
sortDescIcon: {
|
|
24
|
+
type: IconValue,
|
|
25
|
+
default: '$sortDesc'
|
|
26
|
+
},
|
|
27
|
+
...makeLoaderProps()
|
|
28
|
+
},
|
|
29
|
+
setup(props, _ref) {
|
|
30
|
+
let {
|
|
31
|
+
slots,
|
|
32
|
+
emit
|
|
33
|
+
} = _ref;
|
|
34
|
+
const {
|
|
35
|
+
toggleSort,
|
|
36
|
+
sortBy
|
|
37
|
+
} = useSort();
|
|
38
|
+
const {
|
|
39
|
+
someSelected,
|
|
40
|
+
allSelected,
|
|
41
|
+
selectAll
|
|
42
|
+
} = useSelection();
|
|
43
|
+
const {
|
|
44
|
+
columns,
|
|
45
|
+
headers
|
|
46
|
+
} = useHeaders();
|
|
47
|
+
const {
|
|
48
|
+
loaderClasses
|
|
49
|
+
} = useLoader(props);
|
|
50
|
+
const getFixedStyles = (column, y) => {
|
|
51
|
+
if (!props.sticky && !column.fixed) return null;
|
|
52
|
+
return {
|
|
53
|
+
position: 'sticky',
|
|
54
|
+
zIndex: column.fixed ? 4 : props.sticky ? 3 : undefined,
|
|
55
|
+
// TODO: This needs to account for possible previous fixed columns.
|
|
56
|
+
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
|
57
|
+
// TODO: This needs to account for possible row/colspan of previous columns
|
|
58
|
+
top: props.sticky ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
function getSortIcon(id) {
|
|
62
|
+
const item = sortBy.value.find(item => item.key === id);
|
|
63
|
+
if (!item) return props.sortAscIcon;
|
|
64
|
+
return item.order === 'asc' ? props.sortAscIcon : props.sortDescIcon;
|
|
65
|
+
}
|
|
66
|
+
const {
|
|
67
|
+
backgroundColorClasses,
|
|
68
|
+
backgroundColorStyles
|
|
69
|
+
} = useBackgroundColor(props, 'color');
|
|
70
|
+
const VDataTableHeaderCell = _ref2 => {
|
|
71
|
+
let {
|
|
72
|
+
column,
|
|
73
|
+
x,
|
|
74
|
+
y
|
|
75
|
+
} = _ref2;
|
|
76
|
+
const isSorted = !!sortBy.value.find(x => x.key === column.key);
|
|
77
|
+
const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
|
|
78
|
+
return _createVNode(VDataTableColumn, {
|
|
79
|
+
"tag": "th",
|
|
80
|
+
"align": column.align,
|
|
81
|
+
"class": ['v-data-table__th', {
|
|
82
|
+
'v-data-table__th--sortable': column.sortable,
|
|
83
|
+
'v-data-table__th--sorted': isSorted
|
|
84
|
+
}, loaderClasses.value],
|
|
85
|
+
"style": {
|
|
86
|
+
width: convertToUnit(column.width),
|
|
87
|
+
minWidth: convertToUnit(column.width),
|
|
88
|
+
...getFixedStyles(column, y)
|
|
89
|
+
},
|
|
90
|
+
"colspan": column.colspan,
|
|
91
|
+
"rowspan": column.rowspan,
|
|
92
|
+
"onClick": column.sortable ? () => toggleSort(column.key) : undefined,
|
|
93
|
+
"lastFixed": column.lastFixed,
|
|
94
|
+
"noPadding": noPadding
|
|
95
|
+
}, {
|
|
96
|
+
default: () => {
|
|
97
|
+
const slotName = `column.${column.key}`;
|
|
98
|
+
const slotProps = {
|
|
99
|
+
column,
|
|
100
|
+
selectAll
|
|
101
|
+
};
|
|
102
|
+
if (slots[slotName]) return slots[slotName](slotProps);
|
|
103
|
+
if (column.key === 'data-table-select') {
|
|
104
|
+
var _slots$columnDataTa;
|
|
105
|
+
return ((_slots$columnDataTa = slots['column.data-table-select']) == null ? void 0 : _slots$columnDataTa.call(slots, slotProps)) ?? _createVNode(VCheckboxBtn, {
|
|
106
|
+
"modelValue": allSelected.value,
|
|
107
|
+
"indeterminate": someSelected.value && !allSelected.value,
|
|
108
|
+
"onUpdate:modelValue": selectAll
|
|
109
|
+
}, null);
|
|
110
|
+
}
|
|
111
|
+
return _createVNode("div", {
|
|
112
|
+
"class": "v-data-table-header__content"
|
|
113
|
+
}, [_createVNode("span", null, [column.title]), column.sortable && _createVNode(VIcon, {
|
|
114
|
+
"key": "icon",
|
|
115
|
+
"class": "v-data-table-header__sort-icon",
|
|
116
|
+
"icon": getSortIcon(column.key)
|
|
117
|
+
}, null), props.multiSort && isSorted && _createVNode("div", {
|
|
118
|
+
"key": "badge",
|
|
119
|
+
"class": ['v-data-table-header__sort-badge', ...backgroundColorClasses.value],
|
|
120
|
+
"style": backgroundColorStyles.value
|
|
121
|
+
}, [sortBy.value.findIndex(x => x.key === column.key) + 1])]);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
useRender(() => _createVNode(_Fragment, null, [headers.value.map((row, y) => _createVNode("tr", null, [row.map((column, x) => _createVNode(VDataTableHeaderCell, {
|
|
126
|
+
"column": column,
|
|
127
|
+
"x": x,
|
|
128
|
+
"y": y
|
|
129
|
+
}, null))])), props.loading && _createVNode("tr", {
|
|
130
|
+
"class": "v-data-table__progress"
|
|
131
|
+
}, [_createVNode("th", {
|
|
132
|
+
"colspan": columns.value.length
|
|
133
|
+
}, [_createVNode(LoaderSlot, {
|
|
134
|
+
"name": "v-data-table-headers",
|
|
135
|
+
"active": true,
|
|
136
|
+
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
|
137
|
+
"indeterminate": true
|
|
138
|
+
}, {
|
|
139
|
+
default: slots.loader
|
|
140
|
+
})])])]));
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
//# sourceMappingURL=VDataTableHeaders.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VDataTableHeaders.mjs","names":["VCheckboxBtn","VDataTableColumn","VIcon","IconValue","LoaderSlot","makeLoaderProps","useLoader","useBackgroundColor","useHeaders","useSelection","useSort","convertToUnit","defineComponent","useRender","VDataTableHeaders","name","props","color","String","sticky","Boolean","multiSort","sortAscIcon","type","default","sortDescIcon","setup","slots","emit","toggleSort","sortBy","someSelected","allSelected","selectAll","columns","headers","loaderClasses","getFixedStyles","column","y","fixed","position","zIndex","undefined","left","fixedOffset","top","getSortIcon","id","item","value","find","key","order","backgroundColorClasses","backgroundColorStyles","VDataTableHeaderCell","x","isSorted","noPadding","align","sortable","width","minWidth","colspan","rowspan","lastFixed","slotName","slotProps","title","findIndex","map","row","loading","length","loader"],"sources":["../../../src/labs/VDataTable/VDataTableHeaders.tsx"],"sourcesContent":["// Components\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VDataTableColumn } from './VDataTableColumn'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useHeaders } from './composables/headers'\nimport { useSelection } from './composables/select'\nimport { useSort } from './composables/sort'\n\n// Utilities\nimport { convertToUnit, defineComponent, useRender } from '@/util'\n\n// Types\nimport type { InternalDataTableHeader } from './types'\n\nexport const VDataTableHeaders = defineComponent({\n name: 'VDataTableHeaders',\n\n props: {\n color: String,\n sticky: Boolean,\n multiSort: Boolean,\n sortAscIcon: {\n type: IconValue,\n default: '$sortAsc',\n },\n sortDescIcon: {\n type: IconValue,\n default: '$sortDesc',\n },\n\n ...makeLoaderProps(),\n },\n\n setup (props, { slots, emit }) {\n const { toggleSort, sortBy } = useSort()\n const { someSelected, allSelected, selectAll } = useSelection()\n const { columns, headers } = useHeaders()\n const { loaderClasses } = useLoader(props)\n\n const getFixedStyles = (column: InternalDataTableHeader, y: number) => {\n if (!props.sticky && !column.fixed) return null\n\n return {\n position: 'sticky',\n zIndex: column.fixed ? 4 : props.sticky ? 3 : undefined, // TODO: This needs to account for possible previous fixed columns.\n left: column.fixed ? convertToUnit(column.fixedOffset) : undefined, // TODO: This needs to account for possible row/colspan of previous columns\n top: props.sticky ? `calc(var(--v-table-header-height) * ${y})` : undefined,\n }\n }\n\n function getSortIcon (id: string) {\n const item = sortBy.value.find(item => item.key === id)\n\n if (!item) return props.sortAscIcon\n\n return item.order === 'asc' ? props.sortAscIcon : props.sortDescIcon\n }\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(props, 'color')\n\n const VDataTableHeaderCell = ({ column, x, y }: { column: InternalDataTableHeader, x: number, y: number }) => {\n const isSorted = !!sortBy.value.find(x => x.key === column.key)\n const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand'\n\n return (\n <VDataTableColumn\n tag=\"th\"\n align={ column.align }\n class={[\n 'v-data-table__th',\n {\n 'v-data-table__th--sortable': column.sortable,\n 'v-data-table__th--sorted': isSorted,\n },\n loaderClasses.value,\n ]}\n style={{\n width: convertToUnit(column.width),\n minWidth: convertToUnit(column.width),\n ...getFixedStyles(column, y),\n }}\n colspan={column.colspan}\n rowspan={column.rowspan}\n onClick={column.sortable ? () => toggleSort(column.key) : undefined}\n lastFixed={column.lastFixed}\n noPadding={noPadding}\n >\n {{\n default: () => {\n const slotName = `column.${column.key}`\n const slotProps = {\n column,\n selectAll,\n }\n\n if (slots[slotName]) return slots[slotName]!(slotProps)\n\n if (column.key === 'data-table-select') {\n return slots['column.data-table-select']?.(slotProps) ?? (\n <VCheckboxBtn\n modelValue={ allSelected.value }\n indeterminate={ someSelected.value && !allSelected.value }\n onUpdate:modelValue={ selectAll }\n />\n )\n }\n\n return (\n <div class=\"v-data-table-header__content\">\n <span>{ column.title }</span>\n { column.sortable && (\n <VIcon\n key=\"icon\"\n class=\"v-data-table-header__sort-icon\"\n icon={ getSortIcon(column.key) }\n />\n )}\n { props.multiSort && isSorted && (\n <div\n key=\"badge\"\n class={[\n 'v-data-table-header__sort-badge',\n ...backgroundColorClasses.value,\n ]}\n style={backgroundColorStyles.value}\n >\n {sortBy.value.findIndex(x => x.key === column.key) + 1}\n </div>\n ) }\n </div>\n )\n },\n }}\n </VDataTableColumn>\n )\n }\n\n useRender(() => (\n <>\n { headers.value.map((row, y) => (\n <tr>\n { row.map((column, x) => (\n <VDataTableHeaderCell column={ column} x={ x } y={ y } />\n )) }\n </tr>\n )) }\n\n { props.loading && (\n <tr class=\"v-data-table__progress\">\n <th colspan={ columns.value.length }>\n\n <LoaderSlot\n name=\"v-data-table-headers\"\n active\n color={ typeof props.loading === 'boolean' ? undefined : props.loading }\n indeterminate\n v-slots={{ default: slots.loader }}\n />\n </th>\n </tr>\n )}\n </>\n ))\n },\n})\n"],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { createVNode as _createVNode, resolveDirective as _resolveDirective } from "vue";
|
|
2
|
+
// Components
|
|
3
|
+
import { VBtn } from "../../components/VBtn/index.mjs";
|
|
4
|
+
import { VCheckboxBtn } from "../../components/VCheckbox/index.mjs"; // Composables
|
|
5
|
+
import { useExpanded } from "./composables/expand.mjs";
|
|
6
|
+
import { useHeaders } from "./composables/headers.mjs";
|
|
7
|
+
import { useSelection } from "./composables/select.mjs";
|
|
8
|
+
import { VDataTableColumn } from "./VDataTableColumn.mjs"; // Utilities
|
|
9
|
+
import { defineComponent, useRender } from "../../util/index.mjs"; // Types
|
|
10
|
+
export const VDataTableRow = defineComponent({
|
|
11
|
+
name: 'VDataTableRow',
|
|
12
|
+
props: {
|
|
13
|
+
item: Object
|
|
14
|
+
},
|
|
15
|
+
setup(props, _ref) {
|
|
16
|
+
let {
|
|
17
|
+
slots
|
|
18
|
+
} = _ref;
|
|
19
|
+
const {
|
|
20
|
+
isSelected,
|
|
21
|
+
toggleSelect
|
|
22
|
+
} = useSelection();
|
|
23
|
+
const {
|
|
24
|
+
isExpanded,
|
|
25
|
+
toggleExpand
|
|
26
|
+
} = useExpanded();
|
|
27
|
+
const {
|
|
28
|
+
columns
|
|
29
|
+
} = useHeaders();
|
|
30
|
+
useRender(() => _createVNode("tr", {
|
|
31
|
+
"class": ['v-data-table__tr']
|
|
32
|
+
}, [!columns.value.length && _createVNode(VDataTableColumn, {
|
|
33
|
+
"key": "no-data"
|
|
34
|
+
}, slots), props.item && columns.value.map((column, i) => _createVNode(VDataTableColumn, {
|
|
35
|
+
"align": column.align,
|
|
36
|
+
"fixed": column.fixed,
|
|
37
|
+
"fixedOffset": column.fixedOffset,
|
|
38
|
+
"lastFixed": column.lastFixed,
|
|
39
|
+
"noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
|
|
40
|
+
"width": column.width
|
|
41
|
+
}, {
|
|
42
|
+
default: () => {
|
|
43
|
+
const item = props.item;
|
|
44
|
+
const slotName = `item.${column.key}`;
|
|
45
|
+
const slotProps = {
|
|
46
|
+
item: props.item,
|
|
47
|
+
columns: columns.value,
|
|
48
|
+
isSelected,
|
|
49
|
+
toggleSelect,
|
|
50
|
+
isExpanded,
|
|
51
|
+
toggleExpand
|
|
52
|
+
};
|
|
53
|
+
if (slots[slotName]) return slots[slotName](slotProps);
|
|
54
|
+
if (column.key === 'data-table-select') {
|
|
55
|
+
var _slots$itemDataTabl;
|
|
56
|
+
return ((_slots$itemDataTabl = slots['item.data-table-select']) == null ? void 0 : _slots$itemDataTabl.call(slots, slotProps)) ?? _createVNode(VCheckboxBtn, {
|
|
57
|
+
"modelValue": isSelected([item]),
|
|
58
|
+
"onClick": () => toggleSelect(item)
|
|
59
|
+
}, null);
|
|
60
|
+
}
|
|
61
|
+
if (column.key === 'data-table-expand') {
|
|
62
|
+
var _slots$itemDataTabl2;
|
|
63
|
+
return ((_slots$itemDataTabl2 = slots['item.data-table-expand']) == null ? void 0 : _slots$itemDataTabl2.call(slots, slotProps)) ?? _createVNode(VBtn, {
|
|
64
|
+
"icon": isExpanded(item) ? '$collapse' : '$expand',
|
|
65
|
+
"size": "small",
|
|
66
|
+
"variant": "text",
|
|
67
|
+
"onClick": () => toggleExpand(item)
|
|
68
|
+
}, null);
|
|
69
|
+
}
|
|
70
|
+
return item.columns[column.key];
|
|
71
|
+
}
|
|
72
|
+
}))]));
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=VDataTableRow.mjs.map
|