VTreeviewGroup.mjs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { mergeProps as _mergeProps, createVNode as _createVNode, Fragment as _Fragment } from "vue";
  2. // Components
  3. import { VDefaultsProvider } from "../../components/VDefaultsProvider/index.mjs";
  4. import { makeVListGroupProps, VListGroup } from "../../components/VList/VListGroup.mjs"; // Utilities
  5. import { computed, ref } from 'vue';
  6. import { genericComponent, omit, propsFactory, useRender } from "../../util/index.mjs"; // Types
  7. export const makeVTreeviewGroupProps = propsFactory({
  8. ...omit(makeVListGroupProps({
  9. collapseIcon: '$treeviewCollapse',
  10. expandIcon: '$treeviewExpand'
  11. }), ['subgroup'])
  12. }, 'VTreeviewGroup');
  13. export const VTreeviewGroup = genericComponent()({
  14. name: 'VTreeviewGroup',
  15. props: makeVTreeviewGroupProps(),
  16. setup(props, _ref) {
  17. let {
  18. slots
  19. } = _ref;
  20. const vListGroupRef = ref();
  21. const toggleIcon = computed(() => vListGroupRef.value?.isOpen ? props.collapseIcon : props.expandIcon);
  22. const activatorDefaults = computed(() => ({
  23. VTreeviewItem: {
  24. prependIcon: undefined,
  25. appendIcon: undefined,
  26. active: vListGroupRef.value?.isOpen,
  27. toggleIcon: toggleIcon.value
  28. }
  29. }));
  30. useRender(() => {
  31. const listGroupProps = VListGroup.filterProps(props);
  32. return _createVNode(VListGroup, _mergeProps(listGroupProps, {
  33. "ref": vListGroupRef,
  34. "class": ['v-treeview-group', props.class],
  35. "subgroup": true
  36. }), {
  37. ...slots,
  38. activator: slots.activator ? slotProps => _createVNode(_Fragment, null, [_createVNode(VDefaultsProvider, {
  39. "defaults": activatorDefaults.value
  40. }, {
  41. default: () => [slots.activator?.(slotProps)]
  42. })]) : undefined
  43. });
  44. });
  45. return {};
  46. }
  47. });
  48. //# sourceMappingURL=VTreeviewGroup.mjs.map