VCardItem.mjs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { resolveDirective as _resolveDirective, createVNode as _createVNode, Fragment as _Fragment } from "vue";
  2. // Components
  3. import { VCardSubtitle } from "./VCardSubtitle.mjs";
  4. import { VCardTitle } from "./VCardTitle.mjs";
  5. import { VAvatar } from "../VAvatar/index.mjs";
  6. import { VDefaultsProvider } from "../VDefaultsProvider/index.mjs";
  7. import { VIcon } from "../VIcon/index.mjs"; // Composables
  8. import { makeComponentProps } from "../../composables/component.mjs";
  9. import { makeDensityProps } from "../../composables/density.mjs";
  10. import { IconValue } from "../../composables/icons.mjs"; // Utilities
  11. import { genericComponent, propsFactory, useRender } from "../../util/index.mjs";
  12. export const makeCardItemProps = propsFactory({
  13. appendAvatar: String,
  14. appendIcon: IconValue,
  15. prependAvatar: String,
  16. prependIcon: IconValue,
  17. subtitle: [String, Number],
  18. title: [String, Number],
  19. ...makeComponentProps(),
  20. ...makeDensityProps()
  21. }, 'VCardItem');
  22. export const VCardItem = genericComponent()({
  23. name: 'VCardItem',
  24. props: makeCardItemProps(),
  25. setup(props, _ref) {
  26. let {
  27. slots
  28. } = _ref;
  29. useRender(() => {
  30. const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
  31. const hasPrepend = !!(hasPrependMedia || slots.prepend);
  32. const hasAppendMedia = !!(props.appendAvatar || props.appendIcon);
  33. const hasAppend = !!(hasAppendMedia || slots.append);
  34. const hasTitle = !!(props.title != null || slots.title);
  35. const hasSubtitle = !!(props.subtitle != null || slots.subtitle);
  36. return _createVNode("div", {
  37. "class": ['v-card-item', props.class],
  38. "style": props.style
  39. }, [hasPrepend && _createVNode("div", {
  40. "key": "prepend",
  41. "class": "v-card-item__prepend"
  42. }, [!slots.prepend ? _createVNode(_Fragment, null, [props.prependAvatar && _createVNode(VAvatar, {
  43. "key": "prepend-avatar",
  44. "density": props.density,
  45. "image": props.prependAvatar
  46. }, null), props.prependIcon && _createVNode(VIcon, {
  47. "key": "prepend-icon",
  48. "density": props.density,
  49. "icon": props.prependIcon
  50. }, null)]) : _createVNode(VDefaultsProvider, {
  51. "key": "prepend-defaults",
  52. "disabled": !hasPrependMedia,
  53. "defaults": {
  54. VAvatar: {
  55. density: props.density,
  56. image: props.prependAvatar
  57. },
  58. VIcon: {
  59. density: props.density,
  60. icon: props.prependIcon
  61. }
  62. }
  63. }, slots.prepend)]), _createVNode("div", {
  64. "class": "v-card-item__content"
  65. }, [hasTitle && _createVNode(VCardTitle, {
  66. "key": "title"
  67. }, {
  68. default: () => [slots.title?.() ?? props.title]
  69. }), hasSubtitle && _createVNode(VCardSubtitle, {
  70. "key": "subtitle"
  71. }, {
  72. default: () => [slots.subtitle?.() ?? props.subtitle]
  73. }), slots.default?.()]), hasAppend && _createVNode("div", {
  74. "key": "append",
  75. "class": "v-card-item__append"
  76. }, [!slots.append ? _createVNode(_Fragment, null, [props.appendIcon && _createVNode(VIcon, {
  77. "key": "append-icon",
  78. "density": props.density,
  79. "icon": props.appendIcon
  80. }, null), props.appendAvatar && _createVNode(VAvatar, {
  81. "key": "append-avatar",
  82. "density": props.density,
  83. "image": props.appendAvatar
  84. }, null)]) : _createVNode(VDefaultsProvider, {
  85. "key": "append-defaults",
  86. "disabled": !hasAppendMedia,
  87. "defaults": {
  88. VAvatar: {
  89. density: props.density,
  90. image: props.appendAvatar
  91. },
  92. VIcon: {
  93. density: props.density,
  94. icon: props.appendIcon
  95. }
  96. }
  97. }, slots.append)])]);
  98. });
  99. return {};
  100. }
  101. });
  102. //# sourceMappingURL=VCardItem.mjs.map