ae1bd98e175d5c12718d74eb3fd8c29817baa1578405e10ec5755bb312c7c98400ae8f2f337e5fff8ed3ecf8bbf716506571232c2cb50d6a8d99cf9dc51653 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var shared = require('@vue/shared');
  5. function getPct(str) {
  6. return Number(str.slice(0, -1)) / 100;
  7. }
  8. function getPx(str) {
  9. return Number(str.slice(0, -2));
  10. }
  11. function isPct(itemSize) {
  12. return shared.isString(itemSize) && itemSize.endsWith("%");
  13. }
  14. function isPx(itemSize) {
  15. return shared.isString(itemSize) && itemSize.endsWith("px");
  16. }
  17. function useSize(panels, containerSize) {
  18. const propSizes = vue.computed(() => panels.value.map((i) => i.size));
  19. const panelCounts = vue.computed(() => panels.value.length);
  20. const percentSizes = vue.ref([]);
  21. vue.watch([propSizes, panelCounts, containerSize], () => {
  22. var _a;
  23. let ptgList = [];
  24. let emptyCount = 0;
  25. for (let i = 0; i < panelCounts.value; i += 1) {
  26. const itemSize = (_a = panels.value[i]) == null ? void 0 : _a.size;
  27. if (isPct(itemSize)) {
  28. ptgList[i] = getPct(itemSize);
  29. } else if (isPx(itemSize)) {
  30. ptgList[i] = getPx(itemSize) / containerSize.value;
  31. } else if (itemSize || itemSize === 0) {
  32. const num = Number(itemSize);
  33. if (!Number.isNaN(num)) {
  34. ptgList[i] = num / containerSize.value;
  35. }
  36. } else {
  37. emptyCount += 1;
  38. ptgList[i] = void 0;
  39. }
  40. }
  41. const totalPtg = ptgList.reduce((acc, ptg) => acc + (ptg || 0), 0);
  42. if (totalPtg > 1 || !emptyCount) {
  43. const scale = 1 / totalPtg;
  44. ptgList = ptgList.map((ptg) => ptg === void 0 ? 0 : ptg * scale);
  45. } else {
  46. const avgRest = (1 - totalPtg) / emptyCount;
  47. ptgList = ptgList.map((ptg) => ptg === void 0 ? avgRest : ptg);
  48. }
  49. percentSizes.value = ptgList;
  50. });
  51. const ptg2px = (ptg) => ptg * containerSize.value;
  52. const pxSizes = vue.computed(() => percentSizes.value.map(ptg2px));
  53. return { percentSizes, pxSizes };
  54. }
  55. exports.getPct = getPct;
  56. exports.getPx = getPx;
  57. exports.isPct = isPct;
  58. exports.isPx = isPx;
  59. exports.useSize = useSize;
  60. //# sourceMappingURL=useSize.js.map