b4cb31e0bd95ef947900b96a5d021949d3e1d727b90e50ff7716dd8741d970f50456fd0325a8a37a4ac45fcc8a4dbfb9c73a26971c48809eb19928d3b574ef 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var useSize = require('./useSize.js');
  5. var shared = require('@vue/shared');
  6. function useResize(panels, containerSize, pxSizes, lazy) {
  7. const ptg2px = (ptg) => ptg * containerSize.value || 0;
  8. function getLimitSize(str, defaultLimit) {
  9. if (useSize.isPct(str)) {
  10. return ptg2px(useSize.getPct(str));
  11. } else if (useSize.isPx(str)) {
  12. return useSize.getPx(str);
  13. }
  14. return str != null ? str : defaultLimit;
  15. }
  16. const lazyOffset = vue.ref(0);
  17. const movingIndex = vue.ref(null);
  18. let cachePxSizes = [];
  19. let updatePanelSizes = shared.NOOP;
  20. const limitSizes = vue.computed(() => panels.value.map((item) => [item.min, item.max]));
  21. vue.watch(lazy, () => {
  22. if (lazyOffset.value) {
  23. const mouseup = new MouseEvent("mouseup", { bubbles: true });
  24. window.dispatchEvent(mouseup);
  25. }
  26. });
  27. const onMoveStart = (index) => {
  28. lazyOffset.value = 0;
  29. movingIndex.value = { index, confirmed: false };
  30. cachePxSizes = pxSizes.value;
  31. };
  32. const onMoving = (index, offset) => {
  33. var _a, _b;
  34. let confirmedIndex = null;
  35. if ((!movingIndex.value || !movingIndex.value.confirmed) && offset !== 0) {
  36. if (offset > 0) {
  37. confirmedIndex = index;
  38. movingIndex.value = { index, confirmed: true };
  39. } else {
  40. for (let i = index; i >= 0; i -= 1) {
  41. if (cachePxSizes[i] > 0) {
  42. confirmedIndex = i;
  43. movingIndex.value = { index: i, confirmed: true };
  44. break;
  45. }
  46. }
  47. }
  48. }
  49. const mergedIndex = (_b = confirmedIndex != null ? confirmedIndex : (_a = movingIndex.value) == null ? void 0 : _a.index) != null ? _b : index;
  50. const numSizes = [...cachePxSizes];
  51. const nextIndex = mergedIndex + 1;
  52. const startMinSize = getLimitSize(limitSizes.value[mergedIndex][0], 0);
  53. const endMinSize = getLimitSize(limitSizes.value[nextIndex][0], 0);
  54. const startMaxSize = getLimitSize(limitSizes.value[mergedIndex][1], containerSize.value || 0);
  55. const endMaxSize = getLimitSize(limitSizes.value[nextIndex][1], containerSize.value || 0);
  56. let mergedOffset = offset;
  57. if (numSizes[mergedIndex] + mergedOffset < startMinSize) {
  58. mergedOffset = startMinSize - numSizes[mergedIndex];
  59. }
  60. if (numSizes[nextIndex] - mergedOffset < endMinSize) {
  61. mergedOffset = numSizes[nextIndex] - endMinSize;
  62. }
  63. if (numSizes[mergedIndex] + mergedOffset > startMaxSize) {
  64. mergedOffset = startMaxSize - numSizes[mergedIndex];
  65. }
  66. if (numSizes[nextIndex] - mergedOffset > endMaxSize) {
  67. mergedOffset = numSizes[nextIndex] - endMaxSize;
  68. }
  69. numSizes[mergedIndex] += mergedOffset;
  70. numSizes[nextIndex] -= mergedOffset;
  71. lazyOffset.value = mergedOffset;
  72. updatePanelSizes = () => {
  73. panels.value.forEach((panel, index2) => {
  74. panel.size = numSizes[index2];
  75. });
  76. updatePanelSizes = shared.NOOP;
  77. };
  78. if (!lazy.value) {
  79. updatePanelSizes();
  80. }
  81. };
  82. const onMoveEnd = () => {
  83. if (lazy.value) {
  84. updatePanelSizes();
  85. }
  86. lazyOffset.value = 0;
  87. movingIndex.value = null;
  88. cachePxSizes = [];
  89. };
  90. const cacheCollapsedSize = [];
  91. const onCollapse = (index, type) => {
  92. if (!cacheCollapsedSize.length) {
  93. cacheCollapsedSize.push(...pxSizes.value);
  94. }
  95. const currentSizes = pxSizes.value;
  96. const currentIndex = type === "start" ? index : index + 1;
  97. const targetIndex = type === "start" ? index + 1 : index;
  98. const currentSize = currentSizes[currentIndex];
  99. const targetSize = currentSizes[targetIndex];
  100. if (currentSize !== 0 && targetSize !== 0) {
  101. currentSizes[currentIndex] = 0;
  102. currentSizes[targetIndex] += currentSize;
  103. cacheCollapsedSize[index] = currentSize;
  104. } else {
  105. const totalSize = currentSize + targetSize;
  106. const targetCacheCollapsedSize = cacheCollapsedSize[index];
  107. const currentCacheCollapsedSize = totalSize - targetCacheCollapsedSize;
  108. currentSizes[targetIndex] = targetCacheCollapsedSize;
  109. currentSizes[currentIndex] = currentCacheCollapsedSize;
  110. }
  111. panels.value.forEach((panel, index2) => {
  112. panel.size = currentSizes[index2];
  113. });
  114. };
  115. return {
  116. lazyOffset,
  117. onMoveStart,
  118. onMoving,
  119. onMoveEnd,
  120. movingIndex,
  121. onCollapse
  122. };
  123. }
  124. exports.useResize = useResize;
  125. //# sourceMappingURL=useResize.js.map