VTabsWindow.mjs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { createVNode as _createVNode, mergeProps as _mergeProps, resolveDirective as _resolveDirective } from "vue";
  2. // Components
  3. import { makeVWindowProps, VWindow } from "../VWindow/VWindow.mjs"; // Composables
  4. import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
  5. import { computed, inject } from 'vue';
  6. import { genericComponent, omit, propsFactory, useRender } from "../../util/index.mjs"; // Types
  7. import { VTabsSymbol } from "./shared.mjs";
  8. export const makeVTabsWindowProps = propsFactory({
  9. ...omit(makeVWindowProps(), ['continuous', 'nextIcon', 'prevIcon', 'showArrows', 'touch', 'mandatory'])
  10. }, 'VTabsWindow');
  11. export const VTabsWindow = genericComponent()({
  12. name: 'VTabsWindow',
  13. props: makeVTabsWindowProps(),
  14. emits: {
  15. 'update:modelValue': v => true
  16. },
  17. setup(props, _ref) {
  18. let {
  19. slots
  20. } = _ref;
  21. const group = inject(VTabsSymbol, null);
  22. const _model = useProxiedModel(props, 'modelValue');
  23. const model = computed({
  24. get() {
  25. // Always return modelValue if defined
  26. // or if not within a VTabs group
  27. if (_model.value != null || !group) return _model.value;
  28. // If inside of a VTabs, find the currently selected
  29. // item by id. Item value may be assigned by its index
  30. return group.items.value.find(item => group.selected.value.includes(item.id))?.value;
  31. },
  32. set(val) {
  33. _model.value = val;
  34. }
  35. });
  36. useRender(() => {
  37. const windowProps = VWindow.filterProps(props);
  38. return _createVNode(VWindow, _mergeProps({
  39. "_as": "VTabsWindow"
  40. }, windowProps, {
  41. "modelValue": model.value,
  42. "onUpdate:modelValue": $event => model.value = $event,
  43. "class": ['v-tabs-window', props.class],
  44. "style": props.style,
  45. "mandatory": false,
  46. "touch": false
  47. }), slots);
  48. });
  49. return {};
  50. }
  51. });
  52. //# sourceMappingURL=VTabsWindow.mjs.map