VTable.mjs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { createVNode as _createVNode } from "vue";
  2. // Styles
  3. import "./VTable.css";
  4. // Composables
  5. import { makeComponentProps } from "../../composables/component.mjs";
  6. import { makeDensityProps, useDensity } from "../../composables/density.mjs";
  7. import { makeTagProps } from "../../composables/tag.mjs";
  8. import { makeThemeProps, provideTheme } from "../../composables/theme.mjs"; // Utilities
  9. import { convertToUnit, genericComponent, propsFactory, useRender } from "../../util/index.mjs";
  10. export const makeVTableProps = propsFactory({
  11. fixedHeader: Boolean,
  12. fixedFooter: Boolean,
  13. height: [Number, String],
  14. hover: Boolean,
  15. ...makeComponentProps(),
  16. ...makeDensityProps(),
  17. ...makeTagProps(),
  18. ...makeThemeProps()
  19. }, 'VTable');
  20. export const VTable = genericComponent()({
  21. name: 'VTable',
  22. props: makeVTableProps(),
  23. setup(props, _ref) {
  24. let {
  25. slots,
  26. emit
  27. } = _ref;
  28. const {
  29. themeClasses
  30. } = provideTheme(props);
  31. const {
  32. densityClasses
  33. } = useDensity(props);
  34. useRender(() => _createVNode(props.tag, {
  35. "class": ['v-table', {
  36. 'v-table--fixed-height': !!props.height,
  37. 'v-table--fixed-header': props.fixedHeader,
  38. 'v-table--fixed-footer': props.fixedFooter,
  39. 'v-table--has-top': !!slots.top,
  40. 'v-table--has-bottom': !!slots.bottom,
  41. 'v-table--hover': props.hover
  42. }, themeClasses.value, densityClasses.value, props.class],
  43. "style": props.style
  44. }, {
  45. default: () => [slots.top?.(), slots.default ? _createVNode("div", {
  46. "class": "v-table__wrapper",
  47. "style": {
  48. height: convertToUnit(props.height)
  49. }
  50. }, [_createVNode("table", null, [slots.default()])]) : slots.wrapper?.(), slots.bottom?.()]
  51. }));
  52. return {};
  53. }
  54. });
  55. //# sourceMappingURL=VTable.mjs.map