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.
Files changed (189) hide show
  1. package/_settings.scss +1 -0
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +460 -12
  4. package/dist/json/importMap-labs.json +28 -0
  5. package/dist/json/importMap.json +60 -60
  6. package/dist/json/tags.json +154 -8
  7. package/dist/json/web-types.json +1522 -26
  8. package/dist/vuetify-labs.d.ts +875 -0
  9. package/dist/vuetify-labs.js +9748 -0
  10. package/dist/vuetify.css +36 -55
  11. package/dist/vuetify.d.ts +173 -196
  12. package/dist/vuetify.esm.js +190 -128
  13. package/dist/vuetify.esm.js.map +1 -1
  14. package/dist/vuetify.js +189 -127
  15. package/dist/vuetify.js.map +1 -1
  16. package/dist/vuetify.min.css +2 -2
  17. package/dist/vuetify.min.js +788 -780
  18. package/dist/vuetify.min.js.map +1 -1
  19. package/lib/blueprints/index.d.ts +3 -2
  20. package/lib/blueprints/md1.d.ts +3 -2
  21. package/lib/blueprints/md2.d.ts +3 -2
  22. package/lib/blueprints/md3.d.ts +3 -2
  23. package/lib/components/VAlert/VAlertTitle.mjs.map +1 -1
  24. package/lib/components/VAlert/index.d.ts +1 -0
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs +8 -10
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/index.d.ts +3 -12
  28. package/lib/components/VAvatar/VAvatar.mjs +2 -1
  29. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  30. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +23 -20
  31. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  32. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +21 -2
  33. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  34. package/lib/components/VBreadcrumbs/index.d.ts +4 -15
  35. package/lib/components/VColorPicker/VColorPicker.mjs +0 -1
  36. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  37. package/lib/components/VCombobox/VCombobox.mjs +8 -10
  38. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  39. package/lib/components/VCombobox/index.d.ts +3 -12
  40. package/lib/components/VDivider/VDivider.css +1 -1
  41. package/lib/components/VDivider/VDivider.sass +1 -0
  42. package/lib/components/VDivider/_variables.scss +2 -1
  43. package/lib/components/VIcon/VIcon.mjs +25 -20
  44. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  45. package/lib/components/VIcon/index.d.ts +4 -8
  46. package/lib/components/VList/VListItem.css +0 -4
  47. package/lib/components/VList/VListItem.sass +12 -6
  48. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +10 -2
  49. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  50. package/lib/components/VNavigationDrawer/index.d.ts +11 -3
  51. package/lib/components/VPagination/VPagination.mjs +12 -5
  52. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  53. package/lib/components/VRadioGroup/VRadioGroup.mjs +3 -2
  54. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  55. package/lib/components/VSelect/VSelect.mjs +11 -8
  56. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  57. package/lib/components/VSelectionControl/VSelectionControl.mjs +11 -2
  58. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  59. package/lib/components/VSelectionControl/index.d.ts +2 -2
  60. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +12 -3
  61. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  62. package/lib/components/VSlider/VSliderThumb.css +2 -0
  63. package/lib/components/VSlider/VSliderThumb.sass +2 -0
  64. package/lib/components/VTable/VTable.css +12 -29
  65. package/lib/components/VTable/VTable.mjs +3 -3
  66. package/lib/components/VTable/VTable.mjs.map +1 -1
  67. package/lib/components/VTable/VTable.sass +10 -17
  68. package/lib/components/VTable/_variables.scss +4 -2
  69. package/lib/components/index.d.ts +27 -51
  70. package/lib/composables/filter.mjs +18 -10
  71. package/lib/composables/filter.mjs.map +1 -1
  72. package/lib/composables/icons.mjs +12 -7
  73. package/lib/composables/icons.mjs.map +1 -1
  74. package/lib/entry-bundler.mjs +1 -1
  75. package/lib/framework.mjs +15 -13
  76. package/lib/framework.mjs.map +1 -1
  77. package/lib/iconsets/fa-svg.d.ts +3 -2
  78. package/lib/iconsets/fa.d.ts +3 -2
  79. package/lib/iconsets/fa.mjs +2 -1
  80. package/lib/iconsets/fa.mjs.map +1 -1
  81. package/lib/iconsets/fa4.d.ts +3 -2
  82. package/lib/iconsets/fa4.mjs +2 -1
  83. package/lib/iconsets/fa4.mjs.map +1 -1
  84. package/lib/iconsets/md.d.ts +3 -2
  85. package/lib/iconsets/md.mjs +2 -1
  86. package/lib/iconsets/md.mjs.map +1 -1
  87. package/lib/iconsets/mdi-svg.d.ts +3 -2
  88. package/lib/iconsets/mdi-svg.mjs +2 -1
  89. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  90. package/lib/iconsets/mdi.d.ts +3 -2
  91. package/lib/iconsets/mdi.mjs +2 -1
  92. package/lib/iconsets/mdi.mjs.map +1 -1
  93. package/lib/index.d.ts +19 -18
  94. package/lib/labs/VDataTable/VDataTable.css +119 -0
  95. package/lib/labs/VDataTable/VDataTable.mjs +146 -0
  96. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -0
  97. package/lib/labs/VDataTable/VDataTable.sass +106 -0
  98. package/lib/labs/VDataTable/VDataTableColumn.mjs +37 -0
  99. package/lib/labs/VDataTable/VDataTableColumn.mjs.map +1 -0
  100. package/lib/labs/VDataTable/VDataTableFooter.css +22 -0
  101. package/lib/labs/VDataTable/VDataTableFooter.mjs +105 -0
  102. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -0
  103. package/lib/labs/VDataTable/VDataTableFooter.sass +23 -0
  104. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs +88 -0
  105. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs.map +1 -0
  106. package/lib/labs/VDataTable/VDataTableHeaders.mjs +143 -0
  107. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -0
  108. package/lib/labs/VDataTable/VDataTableRow.mjs +75 -0
  109. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -0
  110. package/lib/labs/VDataTable/VDataTableRows.mjs +87 -0
  111. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -0
  112. package/lib/labs/VDataTable/VDataTableServer.mjs +124 -0
  113. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -0
  114. package/lib/labs/VDataTable/VDataTableVirtual.mjs +154 -0
  115. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -0
  116. package/lib/labs/VDataTable/_variables.scss +6 -0
  117. package/lib/labs/VDataTable/composables/expand.mjs +51 -0
  118. package/lib/labs/VDataTable/composables/expand.mjs.map +1 -0
  119. package/lib/labs/VDataTable/composables/group.mjs +124 -0
  120. package/lib/labs/VDataTable/composables/group.mjs.map +1 -0
  121. package/lib/labs/VDataTable/composables/headers.mjs +152 -0
  122. package/lib/labs/VDataTable/composables/headers.mjs.map +1 -0
  123. package/lib/labs/VDataTable/composables/items.mjs +30 -0
  124. package/lib/labs/VDataTable/composables/items.mjs.map +1 -0
  125. package/lib/labs/VDataTable/composables/options.mjs +44 -0
  126. package/lib/labs/VDataTable/composables/options.mjs.map +1 -0
  127. package/lib/labs/VDataTable/composables/paginate.mjs +62 -0
  128. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -0
  129. package/lib/labs/VDataTable/composables/select.mjs +57 -0
  130. package/lib/labs/VDataTable/composables/select.mjs.map +1 -0
  131. package/lib/labs/VDataTable/composables/sort.mjs +109 -0
  132. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -0
  133. package/lib/labs/VDataTable/composables/virtual.mjs +77 -0
  134. package/lib/labs/VDataTable/composables/virtual.mjs.map +1 -0
  135. package/lib/labs/VDataTable/index.d.ts +705 -0
  136. package/lib/labs/VDataTable/index.mjs +6 -0
  137. package/lib/labs/VDataTable/index.mjs.map +1 -0
  138. package/lib/labs/VDataTable/types.mjs +2 -0
  139. package/lib/labs/VDataTable/types.mjs.map +1 -0
  140. package/lib/labs/VVirtualScroll/VVirtualScroll.css +11 -0
  141. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs +118 -0
  142. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs.map +1 -0
  143. package/lib/{components → labs}/VVirtualScroll/VVirtualScroll.sass +0 -5
  144. package/lib/labs/VVirtualScroll/VVirtualScrollItem.mjs +35 -0
  145. package/lib/labs/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -0
  146. package/lib/labs/VVirtualScroll/index.d.ts +154 -0
  147. package/lib/labs/VVirtualScroll/index.mjs +2 -0
  148. package/lib/labs/VVirtualScroll/index.mjs.map +1 -0
  149. package/lib/labs/components.d.ts +856 -0
  150. package/lib/labs/components.mjs +3 -0
  151. package/lib/labs/components.mjs.map +1 -0
  152. package/lib/labs/index.mjs +3 -0
  153. package/lib/labs/index.mjs.map +1 -0
  154. package/lib/util/defineComponent.mjs +4 -0
  155. package/lib/util/defineComponent.mjs.map +1 -1
  156. package/lib/util/helpers.mjs +0 -38
  157. package/lib/util/helpers.mjs.map +1 -1
  158. package/package.json +4 -2
  159. package/lib/components/VDataTable/MobileRow.mjs +0 -63
  160. package/lib/components/VDataTable/MobileRow.mjs.map +0 -1
  161. package/lib/components/VDataTable/Row.mjs +0 -57
  162. package/lib/components/VDataTable/Row.mjs.map +0 -1
  163. package/lib/components/VDataTable/RowGroup.mjs +0 -48
  164. package/lib/components/VDataTable/RowGroup.mjs.map +0 -1
  165. package/lib/components/VDataTable/VDataTable.mjs +0 -577
  166. package/lib/components/VDataTable/VDataTable.mjs.map +0 -1
  167. package/lib/components/VDataTable/VDataTable.sass +0 -98
  168. package/lib/components/VDataTable/VDataTableHeader.mjs +0 -42
  169. package/lib/components/VDataTable/VDataTableHeader.mjs.map +0 -1
  170. package/lib/components/VDataTable/VDataTableHeader.sass +0 -80
  171. package/lib/components/VDataTable/VDataTableHeaderDesktop.mjs +0 -96
  172. package/lib/components/VDataTable/VDataTableHeaderDesktop.mjs.map +0 -1
  173. package/lib/components/VDataTable/VDataTableHeaderMobile.mjs +0 -89
  174. package/lib/components/VDataTable/VDataTableHeaderMobile.mjs.map +0 -1
  175. package/lib/components/VDataTable/VEditDialog.mjs +0 -127
  176. package/lib/components/VDataTable/VEditDialog.mjs.map +0 -1
  177. package/lib/components/VDataTable/VEditDialog.sass +0 -22
  178. package/lib/components/VDataTable/VVirtualTable.mjs +0 -132
  179. package/lib/components/VDataTable/VVirtualTable.mjs.map +0 -1
  180. package/lib/components/VDataTable/VVirtualTable.sass +0 -13
  181. package/lib/components/VDataTable/_variables.scss +0 -24
  182. package/lib/components/VDataTable/index.mjs +0 -21
  183. package/lib/components/VDataTable/index.mjs.map +0 -1
  184. package/lib/components/VDataTable/mixins/header.mjs +0 -71
  185. package/lib/components/VDataTable/mixins/header.mjs.map +0 -1
  186. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +0 -108
  187. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +0 -1
  188. package/lib/components/VVirtualScroll/index.mjs +0 -4
  189. 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":";AAAA;AAAA,SACSA,YAAY;AAAA,SACZC,gBAAgB;AAAA,SAChBC,KAAK,4CAEd;AAAA,SACSC,SAAS;AAAA,SACTC,UAAU,EAAEC,eAAe,EAAEC,SAAS;AAAA,SACtCC,kBAAkB;AAAA,SAClBC,UAAU;AAAA,SACVC,YAAY;AAAA,SACZC,OAAO,kCAEhB;AAAA,SACSC,aAAa,EAAEC,eAAe,EAAEC,SAAS,gCAElD;AAGA,OAAO,MAAMC,iBAAiB,GAAGF,eAAe,CAAC;EAC/CG,IAAI,EAAE,mBAAmB;EAEzBC,KAAK,EAAE;IACLC,KAAK,EAAEC,MAAM;IACbC,MAAM,EAAEC,OAAO;IACfC,SAAS,EAAED,OAAO;IAClBE,WAAW,EAAE;MACXC,IAAI,EAAEpB,SAAS;MACfqB,OAAO,EAAE;IACX,CAAC;IACDC,YAAY,EAAE;MACZF,IAAI,EAAEpB,SAAS;MACfqB,OAAO,EAAE;IACX,CAAC;IAED,GAAGnB,eAAe;EACpB,CAAC;EAEDqB,KAAK,CAAEV,KAAK,QAAmB;IAAA,IAAjB;MAAEW,KAAK;MAAEC;IAAK,CAAC;IAC3B,MAAM;MAAEC,UAAU;MAAEC;IAAO,CAAC,GAAGpB,OAAO,EAAE;IACxC,MAAM;MAAEqB,YAAY;MAAEC,WAAW;MAAEC;IAAU,CAAC,GAAGxB,YAAY,EAAE;IAC/D,MAAM;MAAEyB,OAAO;MAAEC;IAAQ,CAAC,GAAG3B,UAAU,EAAE;IACzC,MAAM;MAAE4B;IAAc,CAAC,GAAG9B,SAAS,CAACU,KAAK,CAAC;IAE1C,MAAMqB,cAAc,GAAG,CAACC,MAA+B,EAAEC,CAAS,KAAK;MACrE,IAAI,CAACvB,KAAK,CAACG,MAAM,IAAI,CAACmB,MAAM,CAACE,KAAK,EAAE,OAAO,IAAI;MAE/C,OAAO;QACLC,QAAQ,EAAE,QAAQ;QAClBC,MAAM,EAAEJ,MAAM,CAACE,KAAK,GAAG,CAAC,GAAGxB,KAAK,CAACG,MAAM,GAAG,CAAC,GAAGwB,SAAS;QAAE;QACzDC,IAAI,EAAEN,MAAM,CAACE,KAAK,GAAG7B,aAAa,CAAC2B,MAAM,CAACO,WAAW,CAAC,GAAGF,SAAS;QAAE;QACpEG,GAAG,EAAE9B,KAAK,CAACG,MAAM,GAAI,uCAAsCoB,CAAE,GAAE,GAAGI;MACpE,CAAC;IACH,CAAC;IAED,SAASI,WAAW,CAAEC,EAAU,EAAE;MAChC,MAAMC,IAAI,GAAGnB,MAAM,CAACoB,KAAK,CAACC,IAAI,CAACF,IAAI,IAAIA,IAAI,CAACG,GAAG,KAAKJ,EAAE,CAAC;MAEvD,IAAI,CAACC,IAAI,EAAE,OAAOjC,KAAK,CAACM,WAAW;MAEnC,OAAO2B,IAAI,CAACI,KAAK,KAAK,KAAK,GAAGrC,KAAK,CAACM,WAAW,GAAGN,KAAK,CAACS,YAAY;IACtE;IAEA,MAAM;MAAE6B,sBAAsB;MAAEC;IAAsB,CAAC,GAAGhD,kBAAkB,CAACS,KAAK,EAAE,OAAO,CAAC;IAE5F,MAAMwC,oBAAoB,GAAG,SAAiF;MAAA,IAAhF;QAAElB,MAAM;QAAEmB,CAAC;QAAElB;MAA6D,CAAC;MACvG,MAAMmB,QAAQ,GAAG,CAAC,CAAC5B,MAAM,CAACoB,KAAK,CAACC,IAAI,CAACM,CAAC,IAAIA,CAAC,CAACL,GAAG,KAAKd,MAAM,CAACc,GAAG,CAAC;MAC/D,MAAMO,SAAS,GAAGrB,MAAM,CAACc,GAAG,KAAK,mBAAmB,IAAId,MAAM,CAACc,GAAG,KAAK,mBAAmB;MAE1F;QAAA,OAEQ,IAAI;QAAA,SACAd,MAAM,CAACsB,KAAK;QAAA,SACb,CACL,kBAAkB,EAClB;UACE,4BAA4B,EAAEtB,MAAM,CAACuB,QAAQ;UAC7C,0BAA0B,EAAEH;QAC9B,CAAC,EACDtB,aAAa,CAACc,KAAK,CACpB;QAAA,SACM;UACLY,KAAK,EAAEnD,aAAa,CAAC2B,MAAM,CAACwB,KAAK,CAAC;UAClCC,QAAQ,EAAEpD,aAAa,CAAC2B,MAAM,CAACwB,KAAK,CAAC;UACrC,GAAGzB,cAAc,CAACC,MAAM,EAAEC,CAAC;QAC7B,CAAC;QAAA,WACQD,MAAM,CAAC0B,OAAO;QAAA,WACd1B,MAAM,CAAC2B,OAAO;QAAA,WACd3B,MAAM,CAACuB,QAAQ,GAAG,MAAMhC,UAAU,CAACS,MAAM,CAACc,GAAG,CAAC,GAAGT,SAAS;QAAA,aACxDL,MAAM,CAAC4B,SAAS;QAAA,aAChBP;MAAS;QAGlBnC,OAAO,EAAE,MAAM;UACb,MAAM2C,QAAQ,GAAI,UAAS7B,MAAM,CAACc,GAAI,EAAC;UACvC,MAAMgB,SAAS,GAAG;YAChB9B,MAAM;YACNL;UACF,CAAC;UAED,IAAIN,KAAK,CAACwC,QAAQ,CAAC,EAAE,OAAOxC,KAAK,CAACwC,QAAQ,CAAC,CAAEC,SAAS,CAAC;UAEvD,IAAI9B,MAAM,CAACc,GAAG,KAAK,mBAAmB,EAAE;YAAA;YACtC,OAAO,wBAAAzB,KAAK,CAAC,0BAA0B,CAAC,qBAAjC,yBAAAA,KAAK,EAA+ByC,SAAS,CAAC;cAAA,cAEpCpC,WAAW,CAACkB,KAAK;cAAA,iBACdnB,YAAY,CAACmB,KAAK,IAAI,CAAClB,WAAW,CAACkB,KAAK;cAAA,uBAClCjB;YAAS,QAElC;UACH;UAEA;YAAA,SACa;UAA8B,gCAC/BK,MAAM,CAAC+B,KAAK,IAClB/B,MAAM,CAACuB,QAAQ;YAAA,OAET,MAAM;YAAA,SACJ,gCAAgC;YAAA,QAC/Bd,WAAW,CAACT,MAAM,CAACc,GAAG;UAAC,QAEjC,EACCpC,KAAK,CAACK,SAAS,IAAIqC,QAAQ;YAAA,OAErB,OAAO;YAAA,SACJ,CACL,iCAAiC,EACjC,GAAGJ,sBAAsB,CAACJ,KAAK,CAChC;YAAA,SACMK,qBAAqB,CAACL;UAAK,IAEjCpB,MAAM,CAACoB,KAAK,CAACoB,SAAS,CAACb,CAAC,IAAIA,CAAC,CAACL,GAAG,KAAKd,MAAM,CAACc,GAAG,CAAC,GAAG,CAAC,EAEzD;QAGP;MAAC;IAIT,CAAC;IAEDvC,SAAS,CAAC,qCAEJsB,OAAO,CAACe,KAAK,CAACqB,GAAG,CAAC,CAACC,GAAG,EAAEjC,CAAC,+BAErBiC,GAAG,CAACD,GAAG,CAAC,CAACjC,MAAM,EAAEmB,CAAC;MAAA,UACanB,MAAM;MAAA,KAAMmB,CAAC;MAAA,KAAOlB;IAAC,QACrD,CAAC,EAEL,CAAC,EAEAvB,KAAK,CAACyD,OAAO;MAAA,SACH;IAAwB;MAAA,WAClBvC,OAAO,CAACgB,KAAK,CAACwB;IAAM;MAAA,QAG3B,sBAAsB;MAAA;MAAA,SAEnB,OAAO1D,KAAK,CAACyD,OAAO,KAAK,SAAS,GAAG9B,SAAS,GAAG3B,KAAK,CAACyD,OAAO;MAAA;IAAA,GAE7D;MAAEjD,OAAO,EAAEG,KAAK,CAACgD;IAAO,CAAC,KAIvC,EAEJ,CAAC;EACJ;AACF,CAAC,CAAC"}
@@ -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