znyg-frontend-common 1.0.63 → 1.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/es/components/znCountTo/index.mjs.map +1 -1
  2. package/es/components/znCountTo/src/countUp.mjs.map +1 -1
  3. package/es/components/znCountTo/src/index.vue2.mjs.map +1 -1
  4. package/es/components/znForm/src/components/Test.vue2.mjs.map +1 -1
  5. package/es/components/znGrid/index.mjs.map +1 -1
  6. package/es/components/znGrid/src/components/GridItem.vue2.mjs.map +1 -1
  7. package/es/components/znGrid/src/index.vue2.mjs.map +1 -1
  8. package/es/components/znSearch/index.mjs.map +1 -1
  9. package/es/components/znSearch/src/hooks/useProSearch.mjs.map +1 -1
  10. package/es/components/znSearch/src/index.vue2.mjs.map +1 -1
  11. package/es/components/znTable/src/components/OperationBtns/index.vue2.mjs +4 -4
  12. package/es/components/znTable/src/components/OperationBtns/index.vue2.mjs.map +1 -1
  13. package/es/components/znTreeFilter/index.mjs.map +1 -1
  14. package/es/components/znTreeFilter/src/index.vue2.mjs.map +1 -1
  15. package/es/functions/modules/is.mjs.map +1 -1
  16. package/es/functions/modules/log.mjs.map +1 -1
  17. package/es/functions/modules/uitls.mjs.map +1 -1
  18. package/es/hooks/useDrawer/index.mjs.map +1 -1
  19. package/es/hooks/useImageViewer/index.mjs.map +1 -1
  20. package/es/hooks/useImageViewer/src/index.vue2.mjs.map +1 -1
  21. package/es/index.mjs +1 -1
  22. package/es/index.mjs.map +1 -1
  23. package/lib/components/znCountTo/index.js.map +1 -1
  24. package/lib/components/znCountTo/src/countUp.js.map +1 -1
  25. package/lib/components/znCountTo/src/index.vue2.js.map +1 -1
  26. package/lib/components/znForm/src/components/Test.vue2.js.map +1 -1
  27. package/lib/components/znGrid/index.js.map +1 -1
  28. package/lib/components/znGrid/src/components/GridItem.vue2.js.map +1 -1
  29. package/lib/components/znGrid/src/index.vue2.js.map +1 -1
  30. package/lib/components/znSearch/index.js.map +1 -1
  31. package/lib/components/znSearch/src/hooks/useProSearch.js.map +1 -1
  32. package/lib/components/znSearch/src/index.vue2.js.map +1 -1
  33. package/lib/components/znTable/src/components/OperationBtns/index.vue2.js +3 -3
  34. package/lib/components/znTable/src/components/OperationBtns/index.vue2.js.map +1 -1
  35. package/lib/components/znTreeFilter/index.js.map +1 -1
  36. package/lib/components/znTreeFilter/src/index.vue2.js.map +1 -1
  37. package/lib/functions/modules/is.js.map +1 -1
  38. package/lib/functions/modules/log.js.map +1 -1
  39. package/lib/functions/modules/uitls.js.map +1 -1
  40. package/lib/hooks/useDrawer/index.js.map +1 -1
  41. package/lib/hooks/useImageViewer/index.js.map +1 -1
  42. package/lib/hooks/useImageViewer/src/index.vue2.js.map +1 -1
  43. package/lib/index.js +1 -1
  44. package/lib/index.js.map +1 -1
  45. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znCountTo/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\r\nimport index from './src/index.vue'\r\n\r\nexport const ZnCountTo = withInstall(index) // 增加类型\r\n\r\nexport default ZnCountTo\r\n"],"names":["ZnCountTo","withInstall","index"],"mappings":"sHAGa,MAAAA,EAAYC,EAAYC"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znCountTo/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\nimport index from './src/index.vue'\n\nexport const ZnCountTo = withInstall(index) // 增加类型\n\nexport default ZnCountTo\n"],"names":["ZnCountTo","withInstall","index"],"mappings":"sHAGa,MAAAA,EAAYC,EAAYC"}
@@ -1 +1 @@
1
- {"version":3,"file":"countUp.mjs","sources":["../../../../../../packages/components/znCountTo/src/countUp.ts"],"sourcesContent":["export interface CountUpOptions {\r\n // (default)\r\n startVal?: number // number to start at (0)\r\n decimalPlaces?: number // number of decimal places (0)\r\n duration?: number // animation duration in seconds (2)\r\n useGrouping?: boolean // example: 1,000 vs 1000 (true)\r\n useIndianSeparators?: boolean // example: 1,00,000 vs 100,000 (false)\r\n useEasing?: boolean // ease animation (true)\r\n smartEasingThreshold?: number // smooth easing for large numbers above this if useEasing (999)\r\n smartEasingAmount?: number // amount to be eased for numbers above threshold (333)\r\n separator?: string // grouping separator (,)\r\n decimal?: string // decimal (.)\r\n // easingFn: easing function for animation (easeOutExpo)\r\n easingFn?: (t: number, b: number, c: number, d: number) => number\r\n formattingFn?: (n: number) => string // this function formats result\r\n prefix?: string // text prepended to result\r\n suffix?: string // text appended to result\r\n numerals?: string[] // numeral glyph substitution\r\n enableScrollSpy?: boolean // start animation when target is in view\r\n scrollSpyDelay?: number // delay (ms) after target comes into view\r\n scrollSpyOnce?: boolean // run only once\r\n onCompleteCallback?: () => any // gets called when animation completes\r\n onStartCallback?: () => any // gets called when animation starts\r\n plugin?: CountUpPlugin // for alternate animations\r\n}\r\n\r\nexport declare interface CountUpPlugin {\r\n render(elem: HTMLElement, formatted: string): void\r\n}\r\n\r\n// playground: stackblitz.com/edit/countup-typescript\r\nexport class CountUp {\r\n version = '2.8.0'\r\n private defaults: CountUpOptions = {\r\n startVal: 0,\r\n decimalPlaces: 0,\r\n duration: 2,\r\n useEasing: true,\r\n useGrouping: true,\r\n useIndianSeparators: false,\r\n smartEasingThreshold: 999,\r\n smartEasingAmount: 333,\r\n separator: ',',\r\n decimal: '.',\r\n prefix: '',\r\n suffix: '',\r\n enableScrollSpy: false,\r\n scrollSpyDelay: 200,\r\n scrollSpyOnce: false\r\n }\r\n private rAF: any\r\n private startTime: number\r\n private remaining: number\r\n private finalEndVal: number = null // for smart easing\r\n private useEasing = true\r\n private countDown = false\r\n el: HTMLElement | HTMLInputElement\r\n formattingFn: (num: number) => string\r\n easingFn?: (t: number, b: number, c: number, d: number) => number\r\n error = ''\r\n startVal = 0\r\n duration: number\r\n paused = true\r\n frameVal: number\r\n once = false\r\n\r\n constructor(\r\n target: string | HTMLElement | HTMLInputElement,\r\n private endVal: number,\r\n public options?: CountUpOptions\r\n ) {\r\n this.options = {\r\n ...this.defaults,\r\n ...options\r\n }\r\n this.formattingFn = this.options.formattingFn ? this.options.formattingFn : this.formatNumber\r\n this.easingFn = this.options.easingFn ? this.options.easingFn : this.easeOutExpo\r\n\r\n this.startVal = this.validateValue(this.options.startVal)\r\n this.frameVal = this.startVal\r\n this.endVal = this.validateValue(endVal)\r\n this.options.decimalPlaces = Math.max(0 || this.options.decimalPlaces)\r\n this.resetDuration()\r\n this.options.separator = String(this.options.separator)\r\n this.useEasing = this.options.useEasing\r\n if (this.options.separator === '') {\r\n this.options.useGrouping = false\r\n }\r\n this.el = typeof target === 'string' ? document.getElementById(target) : target\r\n if (this.el) {\r\n this.printValue(this.startVal)\r\n } else {\r\n this.error = '[CountUp] target is null or undefined'\r\n }\r\n\r\n // scroll spy\r\n if (typeof window !== 'undefined' && this.options.enableScrollSpy) {\r\n if (!this.error) {\r\n // set up global array of onscroll functions to handle multiple instances\r\n window['onScrollFns'] = window['onScrollFns'] || []\r\n window['onScrollFns'].push(() => this.handleScroll(this))\r\n window.onscroll = () => {\r\n window['onScrollFns'].forEach((fn) => fn())\r\n }\r\n this.handleScroll(this)\r\n } else {\r\n console.error(this.error, target)\r\n }\r\n }\r\n }\r\n\r\n handleScroll(self: CountUp): void {\r\n if (!self || !window || self.once) return\r\n const bottomOfScroll = window.innerHeight + window.scrollY\r\n const rect = self.el.getBoundingClientRect()\r\n const topOfEl = rect.top + window.pageYOffset\r\n const bottomOfEl = rect.top + rect.height + window.pageYOffset\r\n if (bottomOfEl < bottomOfScroll && bottomOfEl > window.scrollY && self.paused) {\r\n // in view\r\n self.paused = false\r\n setTimeout(() => self.start(), self.options.scrollSpyDelay)\r\n if (self.options.scrollSpyOnce) self.once = true\r\n } else if ((window.scrollY > bottomOfEl || topOfEl > bottomOfScroll) && !self.paused) {\r\n // out of view\r\n self.reset()\r\n }\r\n }\r\n\r\n /**\r\n * Smart easing works by breaking the animation into 2 parts, the second part being the\r\n * smartEasingAmount and first part being the total amount minus the smartEasingAmount. It works\r\n * by disabling easing for the first part and enabling it on the second part. It is used if\r\n * useEasing is true and the total animation amount exceeds the smartEasingThreshold.\r\n */\r\n private determineDirectionAndSmartEasing(): void {\r\n const end = this.finalEndVal ? this.finalEndVal : this.endVal\r\n this.countDown = this.startVal > end\r\n const animateAmount = end - this.startVal\r\n if (Math.abs(animateAmount) > this.options.smartEasingThreshold && this.options.useEasing) {\r\n this.finalEndVal = end\r\n const up = this.countDown ? 1 : -1\r\n this.endVal = end + up * this.options.smartEasingAmount\r\n this.duration = this.duration / 2\r\n } else {\r\n this.endVal = end\r\n this.finalEndVal = null\r\n }\r\n if (this.finalEndVal !== null) {\r\n // setting finalEndVal indicates smart easing\r\n this.useEasing = false\r\n } else {\r\n this.useEasing = this.options.useEasing\r\n }\r\n }\r\n\r\n // start animation\r\n start(callback?: (args?: any) => any): void {\r\n if (this.error) {\r\n return\r\n }\r\n if (this.options.onStartCallback) {\r\n this.options.onStartCallback()\r\n }\r\n if (callback) {\r\n this.options.onCompleteCallback = callback\r\n }\r\n if (this.duration > 0) {\r\n this.determineDirectionAndSmartEasing()\r\n this.paused = false\r\n this.rAF = requestAnimationFrame(this.count)\r\n } else {\r\n this.printValue(this.endVal)\r\n }\r\n }\r\n\r\n // pause/resume animation\r\n pauseResume(): void {\r\n if (!this.paused) {\r\n cancelAnimationFrame(this.rAF)\r\n } else {\r\n this.startTime = null\r\n this.duration = this.remaining\r\n this.startVal = this.frameVal\r\n this.determineDirectionAndSmartEasing()\r\n this.rAF = requestAnimationFrame(this.count)\r\n }\r\n this.paused = !this.paused\r\n }\r\n\r\n // reset to startVal so animation can be run again\r\n reset(): void {\r\n cancelAnimationFrame(this.rAF)\r\n this.paused = true\r\n this.resetDuration()\r\n this.startVal = this.validateValue(this.options.startVal)\r\n this.frameVal = this.startVal\r\n this.printValue(this.startVal)\r\n }\r\n\r\n // pass a new endVal and start animation\r\n update(newEndVal: string | number): void {\r\n cancelAnimationFrame(this.rAF)\r\n this.startTime = null\r\n this.endVal = this.validateValue(newEndVal)\r\n if (this.endVal === this.frameVal) {\r\n return\r\n }\r\n this.startVal = this.frameVal\r\n if (this.finalEndVal == null) {\r\n this.resetDuration()\r\n }\r\n this.finalEndVal = null\r\n this.determineDirectionAndSmartEasing()\r\n this.rAF = requestAnimationFrame(this.count)\r\n }\r\n\r\n count = (timestamp: number): void => {\r\n if (!this.startTime) {\r\n this.startTime = timestamp\r\n }\r\n\r\n const progress = timestamp - this.startTime\r\n this.remaining = this.duration - progress\r\n\r\n // to ease or not to ease\r\n if (this.useEasing) {\r\n if (this.countDown) {\r\n this.frameVal = this.startVal - this.easingFn(progress, 0, this.startVal - this.endVal, this.duration)\r\n } else {\r\n this.frameVal = this.easingFn(progress, this.startVal, this.endVal - this.startVal, this.duration)\r\n }\r\n } else {\r\n this.frameVal = this.startVal + (this.endVal - this.startVal) * (progress / this.duration)\r\n }\r\n\r\n // don't go past endVal since progress can exceed duration in the last frame\r\n const wentPast = this.countDown ? this.frameVal < this.endVal : this.frameVal > this.endVal\r\n this.frameVal = wentPast ? this.endVal : this.frameVal\r\n\r\n // decimal\r\n this.frameVal = Number(this.frameVal.toFixed(this.options.decimalPlaces))\r\n\r\n // format and print value\r\n this.printValue(this.frameVal)\r\n\r\n // whether to continue\r\n if (progress < this.duration) {\r\n this.rAF = requestAnimationFrame(this.count)\r\n } else if (this.finalEndVal !== null) {\r\n // smart easing\r\n this.update(this.finalEndVal)\r\n } else {\r\n if (this.options.onCompleteCallback) {\r\n this.options.onCompleteCallback()\r\n }\r\n }\r\n }\r\n\r\n printValue(val: number): void {\r\n if (!this.el) return\r\n const result = this.formattingFn(val)\r\n if (this.options.plugin?.render) {\r\n this.options.plugin.render(this.el, result)\r\n return\r\n }\r\n if (this.el.tagName === 'INPUT') {\r\n const input = this.el as HTMLInputElement\r\n input.value = result\r\n } else if (this.el.tagName === 'text' || this.el.tagName === 'tspan') {\r\n this.el.textContent = result\r\n } else {\r\n this.el.innerHTML = result\r\n }\r\n }\r\n\r\n ensureNumber(n: any): boolean {\r\n return typeof n === 'number' && !isNaN(n)\r\n }\r\n\r\n validateValue(value: string | number): number {\r\n const newValue = Number(value)\r\n if (!this.ensureNumber(newValue)) {\r\n this.error = `[CountUp] invalid start or end value: ${value}`\r\n return null\r\n } else {\r\n return newValue\r\n }\r\n }\r\n\r\n private resetDuration(): void {\r\n this.startTime = null\r\n this.duration = Number(this.options.duration) * 1000\r\n this.remaining = this.duration\r\n }\r\n\r\n // default format and easing functions\r\n\r\n formatNumber = (num: number): string => {\r\n const neg = num < 0 ? '-' : ''\r\n let result: string, x1: string, x2: string, x3: string\r\n result = Math.abs(num).toFixed(this.options.decimalPlaces)\r\n result += ''\r\n const x = result.split('.')\r\n x1 = x[0]\r\n x2 = x.length > 1 ? this.options.decimal + x[1] : ''\r\n if (this.options.useGrouping) {\r\n x3 = ''\r\n let factor = 3,\r\n j = 0\r\n for (let i = 0, len = x1.length; i < len; ++i) {\r\n if (this.options.useIndianSeparators && i === 4) {\r\n factor = 2\r\n j = 1\r\n }\r\n if (i !== 0 && j % factor === 0) {\r\n x3 = this.options.separator + x3\r\n }\r\n j++\r\n x3 = x1[len - i - 1] + x3\r\n }\r\n x1 = x3\r\n }\r\n // optional numeral substitution\r\n if (this.options.numerals && this.options.numerals.length) {\r\n x1 = x1.replace(/[0-9]/g, (w) => this.options.numerals[+w])\r\n x2 = x2.replace(/[0-9]/g, (w) => this.options.numerals[+w])\r\n }\r\n return neg + this.options.prefix + x1 + x2 + this.options.suffix\r\n }\r\n\r\n // t: current time, b: beginning value, c: change in value, d: duration\r\n easeOutExpo = (t: number, b: number, c: number, d: number): number => (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b\r\n}\r\n"],"names":["CountUp","constructor","target","endVal","options","this","defaults","formattingFn","formatNumber","easingFn","easeOutExpo","startVal","validateValue","frameVal","decimalPlaces","Math","max","resetDuration","separator","String","useEasing","useGrouping","el","document","getElementById","printValue","error","window","enableScrollSpy","console","push","handleScroll","onscroll","forEach","fn","__name","version","duration","useIndianSeparators","smartEasingThreshold","smartEasingAmount","decimal","prefix","suffix","scrollSpyDelay","scrollSpyOnce","rAF","startTime","remaining","finalEndVal","countDown","paused","once","self","bottomOfScroll","innerHeight","scrollY","rect","getBoundingClientRect","topOfEl","top","pageYOffset","bottomOfEl","height","setTimeout","start","reset","determineDirectionAndSmartEasing","end","animateAmount","abs","up","callback","onStartCallback","onCompleteCallback","requestAnimationFrame","count","pauseResume","cancelAnimationFrame","update","newEndVal","timestamp","progress","wentPast","Number","toFixed","val","result","plugin","render","tagName","value","textContent","innerHTML","ensureNumber","n","isNaN","newValue","num","neg","x1","x2","x3","x","split","length","factor","j","i","len","numerals","replace","w","t","b","c","d","pow"],"mappings":"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"}
1
+ {"version":3,"file":"countUp.mjs","sources":["../../../../../../packages/components/znCountTo/src/countUp.ts"],"sourcesContent":["export interface CountUpOptions {\n // (default)\n startVal?: number // number to start at (0)\n decimalPlaces?: number // number of decimal places (0)\n duration?: number // animation duration in seconds (2)\n useGrouping?: boolean // example: 1,000 vs 1000 (true)\n useIndianSeparators?: boolean // example: 1,00,000 vs 100,000 (false)\n useEasing?: boolean // ease animation (true)\n smartEasingThreshold?: number // smooth easing for large numbers above this if useEasing (999)\n smartEasingAmount?: number // amount to be eased for numbers above threshold (333)\n separator?: string // grouping separator (,)\n decimal?: string // decimal (.)\n // easingFn: easing function for animation (easeOutExpo)\n easingFn?: (t: number, b: number, c: number, d: number) => number\n formattingFn?: (n: number) => string // this function formats result\n prefix?: string // text prepended to result\n suffix?: string // text appended to result\n numerals?: string[] // numeral glyph substitution\n enableScrollSpy?: boolean // start animation when target is in view\n scrollSpyDelay?: number // delay (ms) after target comes into view\n scrollSpyOnce?: boolean // run only once\n onCompleteCallback?: () => any // gets called when animation completes\n onStartCallback?: () => any // gets called when animation starts\n plugin?: CountUpPlugin // for alternate animations\n}\n\nexport declare interface CountUpPlugin {\n render(elem: HTMLElement, formatted: string): void\n}\n\n// playground: stackblitz.com/edit/countup-typescript\nexport class CountUp {\n version = '2.8.0'\n private defaults: CountUpOptions = {\n startVal: 0,\n decimalPlaces: 0,\n duration: 2,\n useEasing: true,\n useGrouping: true,\n useIndianSeparators: false,\n smartEasingThreshold: 999,\n smartEasingAmount: 333,\n separator: ',',\n decimal: '.',\n prefix: '',\n suffix: '',\n enableScrollSpy: false,\n scrollSpyDelay: 200,\n scrollSpyOnce: false\n }\n private rAF: any\n private startTime: number\n private remaining: number\n private finalEndVal: number = null // for smart easing\n private useEasing = true\n private countDown = false\n el: HTMLElement | HTMLInputElement\n formattingFn: (num: number) => string\n easingFn?: (t: number, b: number, c: number, d: number) => number\n error = ''\n startVal = 0\n duration: number\n paused = true\n frameVal: number\n once = false\n\n constructor(\n target: string | HTMLElement | HTMLInputElement,\n private endVal: number,\n public options?: CountUpOptions\n ) {\n this.options = {\n ...this.defaults,\n ...options\n }\n this.formattingFn = this.options.formattingFn ? this.options.formattingFn : this.formatNumber\n this.easingFn = this.options.easingFn ? this.options.easingFn : this.easeOutExpo\n\n this.startVal = this.validateValue(this.options.startVal)\n this.frameVal = this.startVal\n this.endVal = this.validateValue(endVal)\n this.options.decimalPlaces = Math.max(0 || this.options.decimalPlaces)\n this.resetDuration()\n this.options.separator = String(this.options.separator)\n this.useEasing = this.options.useEasing\n if (this.options.separator === '') {\n this.options.useGrouping = false\n }\n this.el = typeof target === 'string' ? document.getElementById(target) : target\n if (this.el) {\n this.printValue(this.startVal)\n } else {\n this.error = '[CountUp] target is null or undefined'\n }\n\n // scroll spy\n if (typeof window !== 'undefined' && this.options.enableScrollSpy) {\n if (!this.error) {\n // set up global array of onscroll functions to handle multiple instances\n window['onScrollFns'] = window['onScrollFns'] || []\n window['onScrollFns'].push(() => this.handleScroll(this))\n window.onscroll = () => {\n window['onScrollFns'].forEach((fn) => fn())\n }\n this.handleScroll(this)\n } else {\n console.error(this.error, target)\n }\n }\n }\n\n handleScroll(self: CountUp): void {\n if (!self || !window || self.once) return\n const bottomOfScroll = window.innerHeight + window.scrollY\n const rect = self.el.getBoundingClientRect()\n const topOfEl = rect.top + window.pageYOffset\n const bottomOfEl = rect.top + rect.height + window.pageYOffset\n if (bottomOfEl < bottomOfScroll && bottomOfEl > window.scrollY && self.paused) {\n // in view\n self.paused = false\n setTimeout(() => self.start(), self.options.scrollSpyDelay)\n if (self.options.scrollSpyOnce) self.once = true\n } else if ((window.scrollY > bottomOfEl || topOfEl > bottomOfScroll) && !self.paused) {\n // out of view\n self.reset()\n }\n }\n\n /**\n * Smart easing works by breaking the animation into 2 parts, the second part being the\n * smartEasingAmount and first part being the total amount minus the smartEasingAmount. It works\n * by disabling easing for the first part and enabling it on the second part. It is used if\n * useEasing is true and the total animation amount exceeds the smartEasingThreshold.\n */\n private determineDirectionAndSmartEasing(): void {\n const end = this.finalEndVal ? this.finalEndVal : this.endVal\n this.countDown = this.startVal > end\n const animateAmount = end - this.startVal\n if (Math.abs(animateAmount) > this.options.smartEasingThreshold && this.options.useEasing) {\n this.finalEndVal = end\n const up = this.countDown ? 1 : -1\n this.endVal = end + up * this.options.smartEasingAmount\n this.duration = this.duration / 2\n } else {\n this.endVal = end\n this.finalEndVal = null\n }\n if (this.finalEndVal !== null) {\n // setting finalEndVal indicates smart easing\n this.useEasing = false\n } else {\n this.useEasing = this.options.useEasing\n }\n }\n\n // start animation\n start(callback?: (args?: any) => any): void {\n if (this.error) {\n return\n }\n if (this.options.onStartCallback) {\n this.options.onStartCallback()\n }\n if (callback) {\n this.options.onCompleteCallback = callback\n }\n if (this.duration > 0) {\n this.determineDirectionAndSmartEasing()\n this.paused = false\n this.rAF = requestAnimationFrame(this.count)\n } else {\n this.printValue(this.endVal)\n }\n }\n\n // pause/resume animation\n pauseResume(): void {\n if (!this.paused) {\n cancelAnimationFrame(this.rAF)\n } else {\n this.startTime = null\n this.duration = this.remaining\n this.startVal = this.frameVal\n this.determineDirectionAndSmartEasing()\n this.rAF = requestAnimationFrame(this.count)\n }\n this.paused = !this.paused\n }\n\n // reset to startVal so animation can be run again\n reset(): void {\n cancelAnimationFrame(this.rAF)\n this.paused = true\n this.resetDuration()\n this.startVal = this.validateValue(this.options.startVal)\n this.frameVal = this.startVal\n this.printValue(this.startVal)\n }\n\n // pass a new endVal and start animation\n update(newEndVal: string | number): void {\n cancelAnimationFrame(this.rAF)\n this.startTime = null\n this.endVal = this.validateValue(newEndVal)\n if (this.endVal === this.frameVal) {\n return\n }\n this.startVal = this.frameVal\n if (this.finalEndVal == null) {\n this.resetDuration()\n }\n this.finalEndVal = null\n this.determineDirectionAndSmartEasing()\n this.rAF = requestAnimationFrame(this.count)\n }\n\n count = (timestamp: number): void => {\n if (!this.startTime) {\n this.startTime = timestamp\n }\n\n const progress = timestamp - this.startTime\n this.remaining = this.duration - progress\n\n // to ease or not to ease\n if (this.useEasing) {\n if (this.countDown) {\n this.frameVal = this.startVal - this.easingFn(progress, 0, this.startVal - this.endVal, this.duration)\n } else {\n this.frameVal = this.easingFn(progress, this.startVal, this.endVal - this.startVal, this.duration)\n }\n } else {\n this.frameVal = this.startVal + (this.endVal - this.startVal) * (progress / this.duration)\n }\n\n // don't go past endVal since progress can exceed duration in the last frame\n const wentPast = this.countDown ? this.frameVal < this.endVal : this.frameVal > this.endVal\n this.frameVal = wentPast ? this.endVal : this.frameVal\n\n // decimal\n this.frameVal = Number(this.frameVal.toFixed(this.options.decimalPlaces))\n\n // format and print value\n this.printValue(this.frameVal)\n\n // whether to continue\n if (progress < this.duration) {\n this.rAF = requestAnimationFrame(this.count)\n } else if (this.finalEndVal !== null) {\n // smart easing\n this.update(this.finalEndVal)\n } else {\n if (this.options.onCompleteCallback) {\n this.options.onCompleteCallback()\n }\n }\n }\n\n printValue(val: number): void {\n if (!this.el) return\n const result = this.formattingFn(val)\n if (this.options.plugin?.render) {\n this.options.plugin.render(this.el, result)\n return\n }\n if (this.el.tagName === 'INPUT') {\n const input = this.el as HTMLInputElement\n input.value = result\n } else if (this.el.tagName === 'text' || this.el.tagName === 'tspan') {\n this.el.textContent = result\n } else {\n this.el.innerHTML = result\n }\n }\n\n ensureNumber(n: any): boolean {\n return typeof n === 'number' && !isNaN(n)\n }\n\n validateValue(value: string | number): number {\n const newValue = Number(value)\n if (!this.ensureNumber(newValue)) {\n this.error = `[CountUp] invalid start or end value: ${value}`\n return null\n } else {\n return newValue\n }\n }\n\n private resetDuration(): void {\n this.startTime = null\n this.duration = Number(this.options.duration) * 1000\n this.remaining = this.duration\n }\n\n // default format and easing functions\n\n formatNumber = (num: number): string => {\n const neg = num < 0 ? '-' : ''\n let result: string, x1: string, x2: string, x3: string\n result = Math.abs(num).toFixed(this.options.decimalPlaces)\n result += ''\n const x = result.split('.')\n x1 = x[0]\n x2 = x.length > 1 ? this.options.decimal + x[1] : ''\n if (this.options.useGrouping) {\n x3 = ''\n let factor = 3,\n j = 0\n for (let i = 0, len = x1.length; i < len; ++i) {\n if (this.options.useIndianSeparators && i === 4) {\n factor = 2\n j = 1\n }\n if (i !== 0 && j % factor === 0) {\n x3 = this.options.separator + x3\n }\n j++\n x3 = x1[len - i - 1] + x3\n }\n x1 = x3\n }\n // optional numeral substitution\n if (this.options.numerals && this.options.numerals.length) {\n x1 = x1.replace(/[0-9]/g, (w) => this.options.numerals[+w])\n x2 = x2.replace(/[0-9]/g, (w) => this.options.numerals[+w])\n }\n return neg + this.options.prefix + x1 + x2 + this.options.suffix\n }\n\n // t: current time, b: beginning value, c: change in value, d: duration\n easeOutExpo = (t: number, b: number, c: number, d: number): number => (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b\n}\n"],"names":["CountUp","constructor","target","endVal","options","this","defaults","formattingFn","formatNumber","easingFn","easeOutExpo","startVal","validateValue","frameVal","decimalPlaces","Math","max","resetDuration","separator","String","useEasing","useGrouping","el","document","getElementById","printValue","error","window","enableScrollSpy","console","push","handleScroll","onscroll","forEach","fn","__name","version","duration","useIndianSeparators","smartEasingThreshold","smartEasingAmount","decimal","prefix","suffix","scrollSpyDelay","scrollSpyOnce","rAF","startTime","remaining","finalEndVal","countDown","paused","once","self","bottomOfScroll","innerHeight","scrollY","rect","getBoundingClientRect","topOfEl","top","pageYOffset","bottomOfEl","height","setTimeout","start","reset","determineDirectionAndSmartEasing","end","animateAmount","abs","up","callback","onStartCallback","onCompleteCallback","requestAnimationFrame","count","pauseResume","cancelAnimationFrame","update","newEndVal","timestamp","progress","wentPast","Number","toFixed","val","result","plugin","render","tagName","value","textContent","innerHTML","ensureNumber","n","isNaN","newValue","num","neg","x1","x2","x3","x","split","length","factor","j","i","len","numerals","replace","w","t","b","c","d","pow"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znCountTo/src/index.vue"],"sourcesContent":["<template>\r\n <div class=\"zn-count-to\">\r\n <slot name=\"prefix\">\r\n <span v-if=\"prefix\">{{ prefix }}</span>\r\n </slot>\r\n <p :class=\"`zn-count-to__content--outer`\">\r\n <span ref=\"countRef\" :class=\"[countClass]\">{{ init }}</span>\r\n <span :class=\"[unitClass]\">{{ unitText }}</span>\r\n </p>\r\n <slot name=\"suffix\">\r\n <span v-if=\"suffix\">{{ suffix }}</span>\r\n </slot>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { CountUp } from './countUp'\r\n import { ref, watch, onMounted, onUnmounted, unref } from 'vue'\r\n\r\n defineOptions({ name: 'ZnCountTo' })\r\n\r\n interface Unit {\r\n value: number\r\n label: string\r\n }\r\n\r\n interface CountToProps {\r\n init?: number /** 初始值,后面会被 startVal 覆盖 */\r\n startVal?: number /** 起始值,即动画开始前显示的数值 */\r\n endVal: number /** 结束值,即动画结束后显示的数值 */\r\n prefix?: string /** 数值的前缀 */\r\n suffix?: string /** 数值的后缀 */\r\n decimals?: number /** 保留几位小数 */\r\n decimal?: string /** 分隔整数和小数的符号,默认是小数点 */\r\n duration?: number /** 动画持续的时间,单位是秒 */\r\n delay?: number /** 动画延迟开始的时间,单位是秒 */\r\n autoplay?: boolean /** 是否自动播放 */\r\n useEasing?: boolean /** 是否使用 easing 动画效果 */\r\n useGroup?: boolean /** 是否使用分组,分组后每三位会用一个符号分隔,即 1000 位 1,000 */\r\n separator?: string /** 用于分组(useGroup)的符号 */\r\n simplify?: boolean /** 是否简化显示,设为 true 后会使用 unit 单位来做相关省略 */\r\n unit?: Unit[] /** 自定义单位,如 { value: 3, label: \"K+\" }, { value: 6, label: \"M+\" } 即大于 3 位数小于 6 位数的用 k+ 来做省略 1000 即显示为 1K+ */\r\n countClass?: string /** count 数字的 class */\r\n unitClass?: string /** 单位的 class */\r\n loop?: number /** 循环次数 */\r\n }\r\n\r\n const props = defineProps({\n init: { type: Number, required: false, default: 0 },\n startVal: { type: Number, required: false, default: 0 },\n endVal: { type: Number, required: true },\n prefix: { type: String, required: false, default: '' },\n suffix: { type: String, required: false, default: '' },\n decimals: { type: Number, required: false, default: 0 },\n decimal: { type: String, required: false, default: '.' },\n duration: { type: Number, required: false, default: 3 },\n delay: { type: Number, required: false, default: 0 },\n autoplay: { type: Boolean, required: false, default: true },\n useEasing: { type: Boolean, required: false, default: true },\n useGroup: { type: Boolean, required: false, default: true },\n separator: { type: String, required: false, default: ',' },\n simplify: { type: Boolean, required: false, default: false },\n unit: { type: Array, required: false, default: () => [\r\n { value: 3, label: 'K+' },\r\n { value: 6, label: 'M+' },\r\n { value: 9, label: 'B+' }\r\n ] },\n countClass: { type: String, required: false, default: '' },\n unitClass: { type: String, required: false, default: '' },\n loop: { type: Number, required: false, default: 1 }\n})\r\n\r\n type CountToEmits = {\r\n init: [counter: CountUp]\r\n finished: []\r\n }\r\n\r\n const emits = defineEmits([\"init\", \"finished\"])\r\n\r\n const countRef = ref()\r\n const counter = ref<CountUp>()\r\n const unitText = ref('')\r\n\r\n // endVal change & autoplay: true, restart animate\r\n watch(\r\n () => props.endVal,\r\n (value) => {\r\n if (props.autoplay) {\r\n counter.value.update(value)\r\n }\r\n }\r\n )\r\n\r\n onMounted(() => {\r\n if (props.autoplay) {\r\n initCountUp()\r\n setTimeout(() => {\r\n loopAnim()\r\n }, props.delay)\r\n }\r\n })\r\n\r\n onUnmounted(() => {\r\n cancelAnimationFrame(delayRafId)\r\n counter.value?.reset()\r\n })\r\n\r\n const initCountUp = () => {\r\n if (!unref(countRef)) return\r\n const endVal = getValue(props.endVal)\r\n counter.value = new CountUp(unref(countRef), endVal, {\r\n startVal: props.startVal,\r\n useEasing: props.useEasing,\r\n useGrouping: props.useGroup,\r\n separator: props.separator,\r\n decimal: props.decimal,\r\n duration: props.duration\r\n })\r\n if (unref(counter).error) {\r\n console.error(unref(counter).error)\r\n return\r\n }\r\n emits('init', unref(counter))\r\n }\r\n\r\n const getValue = (val: number) => {\r\n let res = 0\r\n if (props.simplify) {\r\n const { endVal, unitText: u } = transformValue(val)\r\n unitText.value = u\r\n res = endVal\r\n } else {\r\n res = val\r\n }\r\n return res\r\n }\r\n\r\n const transformValue = (val: number) => {\r\n const len = props.unit.length\r\n let res = {\r\n endVal: 0,\r\n unitText: ''\r\n }\r\n if (val < Math.pow(10, props.unit[0].value)) res.endVal = val\r\n else {\r\n for (let i = 1; i < len; i++) {\r\n if (val >= Math.pow(10, props.unit[i - 1].value) && val < Math.pow(10, props.unit[i].value)) {\r\n res = getHandleVal(val, i)\r\n }\r\n }\r\n }\r\n if (val > Math.pow(10, props.unit[len - 1].value)) {\r\n res = getHandleVal(val, len)\r\n }\r\n return res\r\n }\r\n\r\n const getHandleVal = (val: number, len: number) => {\r\n return {\r\n endVal: parseInt(val / Math.pow(10, props.unit[len - 1].value) + ''),\r\n unitText: props.unit[len - 1].label\r\n }\r\n }\r\n\r\n // loop animation\r\n const finished = ref(false)\r\n let loopCount = 0\r\n const loopAnim = () => {\r\n loopCount++\r\n counter.value.start(() => {\r\n const isTruly = typeof props.loop === 'boolean' && props.loop\r\n if (isTruly || props.loop > loopCount) {\r\n useDelay(() => {\r\n counter.value.reset()\r\n loopAnim()\r\n }, props.delay)\r\n } else {\r\n finished.value = true\r\n }\r\n })\r\n }\r\n\r\n let delayRafId: number = 0\r\n // delay to execute callback function\r\n const useDelay = (cb: () => unknown, seconds = 1) => {\r\n let startTime: number\r\n function count(timestamp: number) {\r\n if (!startTime) startTime = timestamp\r\n const diff = timestamp - startTime\r\n if (diff < seconds * 1000) {\r\n delayRafId = requestAnimationFrame(count)\r\n } else {\r\n cb()\r\n }\r\n }\r\n delayRafId = requestAnimationFrame(count)\r\n }\r\n\r\n watch(finished, (flag) => {\r\n if (flag) {\r\n emits('finished')\r\n }\r\n })\r\n\r\n const restart = () => {\r\n initCountUp()\r\n setTimeout(() => {\r\n loopAnim()\r\n }, props.delay)\r\n }\r\n\r\n const pause = () => {\r\n counter.value.pauseResume()\r\n }\r\n\r\n const reset = () => {\r\n counter.value.reset()\r\n }\r\n\r\n defineExpose({\r\n restart,\r\n pause,\r\n reset,\r\n init: initCountUp\r\n })\r\n</script>\r\n"],"names":["props","__props","emits","__emit","countRef","ref","counter","unitText","watch","endVal","value","autoplay","update","onMounted","initCountUp","setTimeout","loopAnim","delay","onUnmounted","cancelAnimationFrame","delayRafId","reset","__name","unref","getValue","CountUp","startVal","useEasing","useGrouping","useGroup","separator","decimal","duration","error","console","val","res","simplify","u","transformValue","len","unit","length","Math","pow","i","getHandleVal","parseInt","label","finished","loopCount","start","loop","useDelay","cb","seconds","startTime","count","timestamp","requestAnimationFrame","flag","__expose","restart","pause","pauseResume","init"],"mappings":"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"}
1
+ {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znCountTo/src/index.vue"],"sourcesContent":["<template>\n <div class=\"zn-count-to\">\n <slot name=\"prefix\">\n <span v-if=\"prefix\">{{ prefix }}</span>\n </slot>\n <p :class=\"`zn-count-to__content--outer`\">\n <span ref=\"countRef\" :class=\"[countClass]\">{{ init }}</span>\n <span :class=\"[unitClass]\">{{ unitText }}</span>\n </p>\n <slot name=\"suffix\">\n <span v-if=\"suffix\">{{ suffix }}</span>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { CountUp } from './countUp'\n import { ref, watch, onMounted, onUnmounted, unref } from 'vue'\n\n defineOptions({ name: 'ZnCountTo' })\n\n interface Unit {\n value: number\n label: string\n }\n\n interface CountToProps {\n init?: number /** 初始值,后面会被 startVal 覆盖 */\n startVal?: number /** 起始值,即动画开始前显示的数值 */\n endVal: number /** 结束值,即动画结束后显示的数值 */\n prefix?: string /** 数值的前缀 */\n suffix?: string /** 数值的后缀 */\n decimals?: number /** 保留几位小数 */\n decimal?: string /** 分隔整数和小数的符号,默认是小数点 */\n duration?: number /** 动画持续的时间,单位是秒 */\n delay?: number /** 动画延迟开始的时间,单位是秒 */\n autoplay?: boolean /** 是否自动播放 */\n useEasing?: boolean /** 是否使用 easing 动画效果 */\n useGroup?: boolean /** 是否使用分组,分组后每三位会用一个符号分隔,即 1000 位 1,000 */\n separator?: string /** 用于分组(useGroup)的符号 */\n simplify?: boolean /** 是否简化显示,设为 true 后会使用 unit 单位来做相关省略 */\n unit?: Unit[] /** 自定义单位,如 { value: 3, label: \"K+\" }, { value: 6, label: \"M+\" } 即大于 3 位数小于 6 位数的用 k+ 来做省略 1000 即显示为 1K+ */\n countClass?: string /** count 数字的 class */\n unitClass?: string /** 单位的 class */\n loop?: number /** 循环次数 */\n }\n\n const props = defineProps({\n init: { type: Number, required: false, default: 0 },\n startVal: { type: Number, required: false, default: 0 },\n endVal: { type: Number, required: true },\n prefix: { type: String, required: false, default: '' },\n suffix: { type: String, required: false, default: '' },\n decimals: { type: Number, required: false, default: 0 },\n decimal: { type: String, required: false, default: '.' },\n duration: { type: Number, required: false, default: 3 },\n delay: { type: Number, required: false, default: 0 },\n autoplay: { type: Boolean, required: false, default: true },\n useEasing: { type: Boolean, required: false, default: true },\n useGroup: { type: Boolean, required: false, default: true },\n separator: { type: String, required: false, default: ',' },\n simplify: { type: Boolean, required: false, default: false },\n unit: { type: Array, required: false, default: () => [\n { value: 3, label: 'K+' },\n { value: 6, label: 'M+' },\n { value: 9, label: 'B+' }\n ] },\n countClass: { type: String, required: false, default: '' },\n unitClass: { type: String, required: false, default: '' },\n loop: { type: Number, required: false, default: 1 }\n})\n\n type CountToEmits = {\n init: [counter: CountUp]\n finished: []\n }\n\n const emits = defineEmits([\"init\", \"finished\"])\n\n const countRef = ref()\n const counter = ref<CountUp>()\n const unitText = ref('')\n\n // endVal change & autoplay: true, restart animate\n watch(\n () => props.endVal,\n (value) => {\n if (props.autoplay) {\n counter.value.update(value)\n }\n }\n )\n\n onMounted(() => {\n if (props.autoplay) {\n initCountUp()\n setTimeout(() => {\n loopAnim()\n }, props.delay)\n }\n })\n\n onUnmounted(() => {\n cancelAnimationFrame(delayRafId)\n counter.value?.reset()\n })\n\n const initCountUp = () => {\n if (!unref(countRef)) return\n const endVal = getValue(props.endVal)\n counter.value = new CountUp(unref(countRef), endVal, {\n startVal: props.startVal,\n useEasing: props.useEasing,\n useGrouping: props.useGroup,\n separator: props.separator,\n decimal: props.decimal,\n duration: props.duration\n })\n if (unref(counter).error) {\n console.error(unref(counter).error)\n return\n }\n emits('init', unref(counter))\n }\n\n const getValue = (val: number) => {\n let res = 0\n if (props.simplify) {\n const { endVal, unitText: u } = transformValue(val)\n unitText.value = u\n res = endVal\n } else {\n res = val\n }\n return res\n }\n\n const transformValue = (val: number) => {\n const len = props.unit.length\n let res = {\n endVal: 0,\n unitText: ''\n }\n if (val < Math.pow(10, props.unit[0].value)) res.endVal = val\n else {\n for (let i = 1; i < len; i++) {\n if (val >= Math.pow(10, props.unit[i - 1].value) && val < Math.pow(10, props.unit[i].value)) {\n res = getHandleVal(val, i)\n }\n }\n }\n if (val > Math.pow(10, props.unit[len - 1].value)) {\n res = getHandleVal(val, len)\n }\n return res\n }\n\n const getHandleVal = (val: number, len: number) => {\n return {\n endVal: parseInt(val / Math.pow(10, props.unit[len - 1].value) + ''),\n unitText: props.unit[len - 1].label\n }\n }\n\n // loop animation\n const finished = ref(false)\n let loopCount = 0\n const loopAnim = () => {\n loopCount++\n counter.value.start(() => {\n const isTruly = typeof props.loop === 'boolean' && props.loop\n if (isTruly || props.loop > loopCount) {\n useDelay(() => {\n counter.value.reset()\n loopAnim()\n }, props.delay)\n } else {\n finished.value = true\n }\n })\n }\n\n let delayRafId: number = 0\n // delay to execute callback function\n const useDelay = (cb: () => unknown, seconds = 1) => {\n let startTime: number\n function count(timestamp: number) {\n if (!startTime) startTime = timestamp\n const diff = timestamp - startTime\n if (diff < seconds * 1000) {\n delayRafId = requestAnimationFrame(count)\n } else {\n cb()\n }\n }\n delayRafId = requestAnimationFrame(count)\n }\n\n watch(finished, (flag) => {\n if (flag) {\n emits('finished')\n }\n })\n\n const restart = () => {\n initCountUp()\n setTimeout(() => {\n loopAnim()\n }, props.delay)\n }\n\n const pause = () => {\n counter.value.pauseResume()\n }\n\n const reset = () => {\n counter.value.reset()\n }\n\n defineExpose({\n restart,\n pause,\n reset,\n init: initCountUp\n })\n</script>\n"],"names":["props","__props","emits","__emit","countRef","ref","counter","unitText","watch","endVal","value","autoplay","update","onMounted","initCountUp","setTimeout","loopAnim","delay","onUnmounted","cancelAnimationFrame","delayRafId","reset","__name","unref","getValue","CountUp","startVal","useEasing","useGrouping","useGroup","separator","decimal","duration","error","console","val","res","simplify","u","transformValue","len","unit","length","Math","pow","i","getHandleVal","parseInt","label","finished","loopCount","start","loop","useDelay","cb","seconds","startTime","count","timestamp","requestAnimationFrame","flag","__expose","restart","pause","pauseResume","init"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Test.vue2.mjs","sources":["../../../../../../../packages/components/znForm/src/components/Test.vue"],"sourcesContent":["<template>\r\n <div>\r\n 测试自定义组件<el-input v-model=\"model\" />\r\n {{ model }}\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { nextTick, ref, unref, watch } from 'vue'\r\n\r\nimport { ElInput } from 'element-plus'\r\n\r\ndefineOptions({ name: 'Test' })\r\n\r\nexport interface TestProps {\r\n data: any; \r\n}\r\nconst model=defineModel<string>()\r\n\r\nconst props = defineProps({\n data: { required: true }\n})\r\n\r\n</script>\r\n"],"names":["model","_useModel","__props"],"mappings":"iWAgBM,MAAAA,EAAMC,EAAmBC,EAAA;"}
1
+ {"version":3,"file":"Test.vue2.mjs","sources":["../../../../../../../packages/components/znForm/src/components/Test.vue"],"sourcesContent":["<template>\n <div>\n 测试自定义组件<el-input v-model=\"model\" />\n {{ model }}\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { nextTick, ref, unref, watch } from 'vue'\n\nimport { ElInput } from 'element-plus'\n\ndefineOptions({ name: 'Test' })\n\nexport interface TestProps {\n data: any; \n}\nconst model=defineModel<string>()\n\nconst props = defineProps({\n data: { required: true }\n})\n\n</script>\n"],"names":["model","_useModel","__props"],"mappings":"iWAgBM,MAAAA,EAAMC,EAAoBC,EAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znGrid/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\r\nimport index from './src/index.vue'\r\nimport gridItem from './src/components/GridItem.vue'\r\n\r\nexport { type ZnGridProps, type BreakPoint, type Responsive } from './src/index.vue'\r\nexport { type ZnGridItemProps } from './src/components/GridItem.vue'\r\nexport const ZnGrid = withInstall(index)\r\nexport const ZnGridItem = withInstall(gridItem)\r\n\r\nexport type GridInstance = InstanceType<typeof index>\r\n\r\nexport default ZnGrid\r\n"],"names":["ZnGrid","withInstall","index","ZnGridItem","gridItem"],"mappings":"kNAMa,MAAAA,EAASC,EAAYC,GACrBC,EAAaF,EAAYG"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znGrid/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\nimport index from './src/index.vue'\nimport gridItem from './src/components/GridItem.vue'\n\nexport { type ZnGridProps, type BreakPoint, type Responsive } from './src/index.vue'\nexport { type ZnGridItemProps } from './src/components/GridItem.vue'\nexport const ZnGrid = withInstall(index)\nexport const ZnGridItem = withInstall(gridItem)\n\nexport type GridInstance = InstanceType<typeof index>\n\nexport default ZnGrid\n"],"names":["ZnGrid","withInstall","index","ZnGridItem","gridItem"],"mappings":"kNAMa,MAAAA,EAASC,EAAYC,GACrBC,EAAaF,EAAYG"}
@@ -1 +1 @@
1
- {"version":3,"file":"GridItem.vue2.mjs","sources":["../../../../../../../packages/components/znGrid/src/components/GridItem.vue"],"sourcesContent":["<template>\r\n <div v-show=\"isShow\" :style=\"style\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, inject, type Ref, ref, useAttrs, watch, unref } from \"vue\";\r\nimport type { BreakPoint } from \"../index.vue\";\r\n\r\ndefineOptions({ name: \"GridItem\" });\r\n\r\nexport type Responsive = {\r\n span?: number; // 偏移量\r\n offset?: number; // 占位量\r\n};\r\n\r\nexport interface ZnGridItemProps {\r\n offset?: number; // 偏移量\r\n span?: number; // 占位量\r\n suffix?: boolean; // 最后的元素\r\n xs?: Responsive;\r\n sm?: Responsive;\r\n md?: Responsive;\r\n lg?: Responsive;\r\n xl?: Responsive;\r\n}\r\n\r\nconst props = defineProps({\n offset: { type: Number, required: false, default: 0 },\n span: { type: Number, required: false, default: 1 },\n suffix: { type: Boolean, required: false, default: false },\n xs: { type: Object, required: false, default: undefined },\n sm: { type: Object, required: false, default: undefined },\n md: { type: Object, required: false, default: undefined },\n lg: { type: Object, required: false, default: undefined },\n xl: { type: Object, required: false, default: undefined }\n});\r\n\r\nconst attrs = useAttrs() as { index: string };\r\n\r\nconst isShow = ref(true);\r\n\r\n// 引入断点\r\nconst breakPoint = inject<Ref<BreakPoint>>(\"breakPoint\", ref(\"xl\"));\r\nconst shouldHiddenIndex = inject<Ref<number>>(\"shouldHiddenIndex\", ref(-1));\r\n\r\nwatch(\r\n () => [unref(shouldHiddenIndex), unref(breakPoint)],\r\n nv => {\r\n if (attrs.index) {\r\n isShow.value = !(nv[0] !== -1 && parseInt(attrs.index) >= Number(nv[0]));\r\n }\r\n },\r\n { immediate: true }\r\n);\r\n\r\nconst gap = inject(\"gap\", 0);\r\nconst cols = inject(\"cols\", ref(4));\r\n\r\nconst style = computed(() => {\r\n const span = props[unref(breakPoint)]?.span ?? props.span;\r\n const offset = props[unref(breakPoint)]?.offset ?? props.offset;\r\n if (props.suffix) {\r\n return {\r\n gridColumnStart: unref(cols) - span - offset + 1,\r\n gridColumnEnd: `span ${span + offset}`,\r\n marginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : \"unset\",\r\n };\r\n } else {\r\n const c = unref(cols);\r\n return {\r\n gridColumn: `span ${span + offset > c ? c : span + offset}/span ${span + offset > c ? c : span + offset}`,\r\n marginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : \"unset\",\r\n };\r\n }\r\n});\r\n</script>\r\n"],"names":["props","__props","attrs","useAttrs","isShow","ref","breakPoint","inject","shouldHiddenIndex","watch","unref","nv","index","value","parseInt","Number","immediate","gap","cols","style","computed","span","offset","suffix","gridColumnStart","gridColumnEnd","marginLeft","c","gridColumn"],"mappings":"gnBA4BA,MAAMA,EAAQC,EAWRC,EAAQC,IAERC,EAASC,GAAI,GAGbC,EAAaC,EAAwB,aAAcF,EAAI,OACvDG,EAAoBD,EAAoB,oBAAqBF,OAEnEI,GACE,IAAM,CAACC,EAAMF,GAAoBE,EAAMJ,MACjCK,IACAT,EAAMU,QACRR,EAAOS,SAAoB,IAAVF,EAAG,IAAaG,SAASZ,EAAMU,QAAUG,OAAOJ,EAAG,KAAE,GAG1E,CAAEK,WAAW,IAGT,MAAAC,EAAMV,EAAO,MAAO,GACpBW,EAAOX,EAAO,OAAQF,EAAI,IAE1Bc,EAAQC,GAAS,KACrB,MAAMC,EAAOrB,EAAMU,EAAMJ,KAAce,MAAQrB,EAAMqB,KAC/CC,EAAStB,EAAMU,EAAMJ,KAAcgB,QAAUtB,EAAMsB,OACzD,GAAItB,EAAMuB,OACD,MAAA,CACLC,gBAAiBd,EAAMQ,GAAQG,EAAOC,EAAS,EAC/CG,cAAe,QAAQJ,EAAOC,IAC9BI,WAAuB,IAAXJ,EAAe,iBAAiBL,UAAYI,EAAOC,QAAaA,KAAY,SAErF,CACC,MAAAK,EAAIjB,EAAMQ,GACT,MAAA,CACLU,WAAY,QAAQP,EAAOC,EAASK,EAAIA,EAAIN,EAAOC,UAAeD,EAAOC,EAASK,EAAIA,EAAIN,EAAOC,IACjGI,WAAuB,IAAXJ,EAAe,iBAAiBL,UAAYI,EAAOC,QAAaA,KAAY,QAC1F;"}
1
+ {"version":3,"file":"GridItem.vue2.mjs","sources":["../../../../../../../packages/components/znGrid/src/components/GridItem.vue"],"sourcesContent":["<template>\n <div v-show=\"isShow\" :style=\"style\">\n <slot></slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, type Ref, ref, useAttrs, watch, unref } from \"vue\";\nimport type { BreakPoint } from \"../index.vue\";\n\ndefineOptions({ name: \"GridItem\" });\n\nexport type Responsive = {\n span?: number; // 偏移量\n offset?: number; // 占位量\n};\n\nexport interface ZnGridItemProps {\n offset?: number; // 偏移量\n span?: number; // 占位量\n suffix?: boolean; // 最后的元素\n xs?: Responsive;\n sm?: Responsive;\n md?: Responsive;\n lg?: Responsive;\n xl?: Responsive;\n}\n\nconst props = defineProps({\n offset: { type: Number, required: false, default: 0 },\n span: { type: Number, required: false, default: 1 },\n suffix: { type: Boolean, required: false, default: false },\n xs: { type: Object, required: false, default: undefined },\n sm: { type: Object, required: false, default: undefined },\n md: { type: Object, required: false, default: undefined },\n lg: { type: Object, required: false, default: undefined },\n xl: { type: Object, required: false, default: undefined }\n});\n\nconst attrs = useAttrs() as { index: string };\n\nconst isShow = ref(true);\n\n// 引入断点\nconst breakPoint = inject<Ref<BreakPoint>>(\"breakPoint\", ref(\"xl\"));\nconst shouldHiddenIndex = inject<Ref<number>>(\"shouldHiddenIndex\", ref(-1));\n\nwatch(\n () => [unref(shouldHiddenIndex), unref(breakPoint)],\n nv => {\n if (attrs.index) {\n isShow.value = !(nv[0] !== -1 && parseInt(attrs.index) >= Number(nv[0]));\n }\n },\n { immediate: true }\n);\n\nconst gap = inject(\"gap\", 0);\nconst cols = inject(\"cols\", ref(4));\n\nconst style = computed(() => {\n const span = props[unref(breakPoint)]?.span ?? props.span;\n const offset = props[unref(breakPoint)]?.offset ?? props.offset;\n if (props.suffix) {\n return {\n gridColumnStart: unref(cols) - span - offset + 1,\n gridColumnEnd: `span ${span + offset}`,\n marginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : \"unset\",\n };\n } else {\n const c = unref(cols);\n return {\n gridColumn: `span ${span + offset > c ? c : span + offset}/span ${span + offset > c ? c : span + offset}`,\n marginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : \"unset\",\n };\n }\n});\n</script>\n"],"names":["props","__props","attrs","useAttrs","isShow","ref","breakPoint","inject","shouldHiddenIndex","watch","unref","nv","index","value","parseInt","Number","immediate","gap","cols","style","computed","span","offset","suffix","gridColumnStart","gridColumnEnd","marginLeft","c","gridColumn"],"mappings":"gnBA4BA,MAAMA,EAAQC,EAWRC,EAAQC,IAERC,EAASC,GAAI,GAGbC,EAAaC,EAAwB,aAAcF,EAAI,OACvDG,EAAoBD,EAAoB,oBAAqBF,OAEnEI,GACE,IAAM,CAACC,EAAMF,GAAoBE,EAAMJ,MACjCK,IACAT,EAAMU,QACRR,EAAOS,SAAoB,IAAVF,EAAG,IAAaG,SAASZ,EAAMU,QAAUG,OAAOJ,EAAG,KAAE,GAG1E,CAAEK,WAAW,IAGT,MAAAC,EAAMV,EAAO,MAAO,GACpBW,EAAOX,EAAO,OAAQF,EAAI,IAE1Bc,EAAQC,GAAS,KACrB,MAAMC,EAAOrB,EAAMU,EAAMJ,KAAce,MAAQrB,EAAMqB,KAC/CC,EAAStB,EAAMU,EAAMJ,KAAcgB,QAAUtB,EAAMsB,OACzD,GAAItB,EAAMuB,OACD,MAAA,CACLC,gBAAiBd,EAAMQ,GAAQG,EAAOC,EAAS,EAC/CG,cAAe,QAAQJ,EAAOC,IAC9BI,WAAuB,IAAXJ,EAAe,iBAAiBL,UAAYI,EAAOC,QAAaA,KAAY,SAErF,CACC,MAAAK,EAAIjB,EAAMQ,GACT,MAAA,CACLU,WAAY,QAAQP,EAAOC,EAASK,EAAIA,EAAIN,EAAOC,UAAeD,EAAOC,EAASK,EAAIA,EAAIN,EAAOC,IACjGI,WAAuB,IAAXJ,EAAe,iBAAiBL,UAAYI,EAAOC,QAAaA,KAAY,QAC1F;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znGrid/src/index.vue"],"sourcesContent":["<template>\r\n <div :style=\"style\">\r\n <slot></slot>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport {\r\n ref,\r\n watch,\r\n useSlots,\r\n computed,\r\n provide,\r\n onBeforeMount,\r\n onMounted,\r\n onUnmounted,\r\n onDeactivated,\r\n onActivated,\r\n unref,\r\n type VNodeArrayChildren,\r\n type VNode,\r\n} from \"vue\";\r\nimport type { Responsive as responsive } from \"./components/GridItem.vue\";\r\n\r\ndefineOptions({ name: \"Grid\" });\r\n\r\nexport type Responsive = responsive;\r\n\r\nexport type BreakPoint = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n\r\nexport interface ZnGridProps {\r\n cols: number | Record<BreakPoint, number>; // 响应式布局\r\n collapsed?: boolean; // 是否开启折叠功能\r\n collapsedRows?: number; // 可见的行数\r\n gap?: [number, number] | number; // 行和列间距\r\n}\r\n\r\nconst props = defineProps({\n cols: { type: [Number, Object], required: true, default: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }) },\n collapsed: { type: Boolean, required: false, default: false },\n collapsedRows: { type: Number, required: false, default: 1 },\n gap: { type: [Array, Number], required: false, default: 0 }\n});\r\n\r\n// 注入 gap 间距\r\nprovide(\"gap\", Array.isArray(props.gap) ? props.gap[0] : props.gap);\r\n\r\n// 注入响应式断点\r\nconst breakPoint = ref<BreakPoint>(\"xl\");\r\nprovide(\"breakPoint\", breakPoint);\r\n\r\n// 注入 cols\r\nconst gridCols = computed(() => {\r\n if (typeof props.cols === \"object\") return props.cols[unref(breakPoint)] ?? props.cols;\r\n return props.cols;\r\n});\r\nprovide(\"cols\", gridCols);\r\n\r\n// 注入要开始折叠的 index\r\nconst hiddenIndex = ref(-1);\r\nprovide(\"shouldHiddenIndex\", hiddenIndex);\r\n\r\nonBeforeMount(() => props.collapsed && findHiddenIndex());\r\n\r\nonMounted(() => {\r\n resize({ target: { innerWidth: window.innerWidth } } as unknown as UIEvent);\r\n window.addEventListener(\"resize\", resize);\r\n});\r\n\r\nonActivated(() => {\r\n resize({ target: { innerWidth: window.innerWidth } } as unknown as UIEvent);\r\n window.addEventListener(\"resize\", resize);\r\n});\r\n\r\nonUnmounted(() => {\r\n window.removeEventListener(\"resize\", resize);\r\n});\r\n\r\nonDeactivated(() => {\r\n window.removeEventListener(\"resize\", resize);\r\n});\r\n\r\n// 监听屏幕变化\r\nconst resize = (e: UIEvent) => {\r\n const width = (e.target as Window).innerWidth;\r\n switch (!!width) {\r\n case width < 768:\r\n breakPoint.value = \"xs\";\r\n break;\r\n case width >= 768 && width < 992:\r\n breakPoint.value = \"sm\";\r\n break;\r\n case width >= 992 && width < 1200:\r\n breakPoint.value = \"md\";\r\n break;\r\n case width >= 1200 && width < 1920:\r\n breakPoint.value = \"lg\";\r\n break;\r\n case width >= 1920:\r\n breakPoint.value = \"xl\";\r\n break;\r\n }\r\n};\r\n\r\nconst slots = useSlots().default!();\r\n\r\n/**\r\n * 计算元素是否超出指定可见的行数,超出则折叠不可见的行数\r\n */\r\nconst findHiddenIndex = () => {\r\n const fields: VNodeArrayChildren = [];\r\n let suffix: VNode | null = null;\r\n slots.forEach((slot: any) => {\r\n // object:插槽只有一个 Children\r\n if (typeof slot.type === \"object\" && slot.type.name === \"GridItem\" && slot.props?.suffix !== undefined) {\r\n suffix = slot;\r\n }\r\n // symbol:插槽有很多 Children\r\n if (typeof slot.type === \"symbol\" && Array.isArray(slot.children)) fields.push(...slot.children);\r\n });\r\n // 计算 suffix children 所占用的列\r\n let suffixCols = 0;\r\n if (suffix) {\r\n suffixCols =\r\n ((suffix as VNode).props![unref(breakPoint)]?.span ?? (suffix as VNode).props?.span ?? 1) +\r\n ((suffix as VNode).props![unref(breakPoint)]?.offset ?? (suffix as VNode).props?.offset ?? 0);\r\n }\r\n try {\r\n let find = false;\r\n fields.reduce((prev = 0, current, index) => {\r\n // 计算每个 Children 的 span 和 offset 总和\r\n prev +=\r\n ((current as VNode)!.props![unref(breakPoint)]?.span ?? (current as VNode)!.props?.span ?? 1) +\r\n ((current as VNode)!.props![unref(breakPoint)]?.offset ?? (current as VNode)!.props?.offset ?? 0);\r\n // 当计算的多个 Children 的 span 和 offset 总和超出一行\r\n if (Number(prev) > props.collapsedRows * gridCols.value - suffixCols) {\r\n hiddenIndex.value = index;\r\n find = true;\r\n // 跳出 reduce\r\n throw new Error(\"find it\");\r\n }\r\n return prev;\r\n }, 0);\r\n if (!find) hiddenIndex.value = -1;\r\n } catch (e) {\r\n // console.warn(e);\r\n }\r\n};\r\n\r\n// 断点变化时 执行 findHiddenIndex\r\nwatch(\r\n () => [unref(breakPoint), props.collapsedRows],\r\n () => {\r\n if (props.collapsed) findHiddenIndex();\r\n }\r\n);\r\n\r\n// 监听 collapsed\r\nwatch(\r\n () => props.collapsed,\r\n value => {\r\n if (value) return findHiddenIndex();\r\n hiddenIndex.value = -1;\r\n }\r\n);\r\n\r\nconst gridGap = computed(() => {\r\n if (typeof props.gap === \"number\") return `${props.gap}px`;\r\n if (Array.isArray(props.gap)) return `${props.gap[1]}px ${props.gap[0]}px`;\r\n return \"unset\";\r\n});\r\n\r\nconst style = computed(() => {\r\n return {\r\n display: \"grid\",\r\n gap: unref(gridGap), // 行和列间距\r\n gridTemplateColumns: `repeat(${unref(gridCols)}, minmax(0, 1fr))`, // 设置网格的列数\r\n };\r\n});\r\n\r\ndefineExpose({ breakPoint });\r\n</script>\r\n"],"names":["props","__props","provide","Array","isArray","gap","breakPoint","ref","gridCols","computed","cols","unref","hiddenIndex","onBeforeMount","collapsed","findHiddenIndex","onMounted","resize","target","innerWidth","window","addEventListener","onActivated","onUnmounted","removeEventListener","onDeactivated","e","width","value","slots","useSlots","default","__name","fields","suffix","forEach","slot","type","name","children","push","suffixCols","span","offset","find","reduce","prev","current","index","Number","collapsedRows","Error","watch","gridGap","style","display","gridTemplateColumns","__expose"],"mappings":"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"}
1
+ {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znGrid/src/index.vue"],"sourcesContent":["<template>\n <div :style=\"style\">\n <slot></slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n watch,\n useSlots,\n computed,\n provide,\n onBeforeMount,\n onMounted,\n onUnmounted,\n onDeactivated,\n onActivated,\n unref,\n type VNodeArrayChildren,\n type VNode,\n} from \"vue\";\nimport type { Responsive as responsive } from \"./components/GridItem.vue\";\n\ndefineOptions({ name: \"Grid\" });\n\nexport type Responsive = responsive;\n\nexport type BreakPoint = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface ZnGridProps {\n cols: number | Record<BreakPoint, number>; // 响应式布局\n collapsed?: boolean; // 是否开启折叠功能\n collapsedRows?: number; // 可见的行数\n gap?: [number, number] | number; // 行和列间距\n}\n\nconst props = defineProps({\n cols: { type: [Number, Object], required: true, default: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }) },\n collapsed: { type: Boolean, required: false, default: false },\n collapsedRows: { type: Number, required: false, default: 1 },\n gap: { type: [Array, Number], required: false, default: 0 }\n});\n\n// 注入 gap 间距\nprovide(\"gap\", Array.isArray(props.gap) ? props.gap[0] : props.gap);\n\n// 注入响应式断点\nconst breakPoint = ref<BreakPoint>(\"xl\");\nprovide(\"breakPoint\", breakPoint);\n\n// 注入 cols\nconst gridCols = computed(() => {\n if (typeof props.cols === \"object\") return props.cols[unref(breakPoint)] ?? props.cols;\n return props.cols;\n});\nprovide(\"cols\", gridCols);\n\n// 注入要开始折叠的 index\nconst hiddenIndex = ref(-1);\nprovide(\"shouldHiddenIndex\", hiddenIndex);\n\nonBeforeMount(() => props.collapsed && findHiddenIndex());\n\nonMounted(() => {\n resize({ target: { innerWidth: window.innerWidth } } as unknown as UIEvent);\n window.addEventListener(\"resize\", resize);\n});\n\nonActivated(() => {\n resize({ target: { innerWidth: window.innerWidth } } as unknown as UIEvent);\n window.addEventListener(\"resize\", resize);\n});\n\nonUnmounted(() => {\n window.removeEventListener(\"resize\", resize);\n});\n\nonDeactivated(() => {\n window.removeEventListener(\"resize\", resize);\n});\n\n// 监听屏幕变化\nconst resize = (e: UIEvent) => {\n const width = (e.target as Window).innerWidth;\n switch (!!width) {\n case width < 768:\n breakPoint.value = \"xs\";\n break;\n case width >= 768 && width < 992:\n breakPoint.value = \"sm\";\n break;\n case width >= 992 && width < 1200:\n breakPoint.value = \"md\";\n break;\n case width >= 1200 && width < 1920:\n breakPoint.value = \"lg\";\n break;\n case width >= 1920:\n breakPoint.value = \"xl\";\n break;\n }\n};\n\nconst slots = useSlots().default!();\n\n/**\n * 计算元素是否超出指定可见的行数,超出则折叠不可见的行数\n */\nconst findHiddenIndex = () => {\n const fields: VNodeArrayChildren = [];\n let suffix: VNode | null = null;\n slots.forEach((slot: any) => {\n // object:插槽只有一个 Children\n if (typeof slot.type === \"object\" && slot.type.name === \"GridItem\" && slot.props?.suffix !== undefined) {\n suffix = slot;\n }\n // symbol:插槽有很多 Children\n if (typeof slot.type === \"symbol\" && Array.isArray(slot.children)) fields.push(...slot.children);\n });\n // 计算 suffix children 所占用的列\n let suffixCols = 0;\n if (suffix) {\n suffixCols =\n ((suffix as VNode).props![unref(breakPoint)]?.span ?? (suffix as VNode).props?.span ?? 1) +\n ((suffix as VNode).props![unref(breakPoint)]?.offset ?? (suffix as VNode).props?.offset ?? 0);\n }\n try {\n let find = false;\n fields.reduce((prev = 0, current, index) => {\n // 计算每个 Children 的 span 和 offset 总和\n prev +=\n ((current as VNode)!.props![unref(breakPoint)]?.span ?? (current as VNode)!.props?.span ?? 1) +\n ((current as VNode)!.props![unref(breakPoint)]?.offset ?? (current as VNode)!.props?.offset ?? 0);\n // 当计算的多个 Children 的 span 和 offset 总和超出一行\n if (Number(prev) > props.collapsedRows * gridCols.value - suffixCols) {\n hiddenIndex.value = index;\n find = true;\n // 跳出 reduce\n throw new Error(\"find it\");\n }\n return prev;\n }, 0);\n if (!find) hiddenIndex.value = -1;\n } catch (e) {\n // console.warn(e);\n }\n};\n\n// 断点变化时 执行 findHiddenIndex\nwatch(\n () => [unref(breakPoint), props.collapsedRows],\n () => {\n if (props.collapsed) findHiddenIndex();\n }\n);\n\n// 监听 collapsed\nwatch(\n () => props.collapsed,\n value => {\n if (value) return findHiddenIndex();\n hiddenIndex.value = -1;\n }\n);\n\nconst gridGap = computed(() => {\n if (typeof props.gap === \"number\") return `${props.gap}px`;\n if (Array.isArray(props.gap)) return `${props.gap[1]}px ${props.gap[0]}px`;\n return \"unset\";\n});\n\nconst style = computed(() => {\n return {\n display: \"grid\",\n gap: unref(gridGap), // 行和列间距\n gridTemplateColumns: `repeat(${unref(gridCols)}, minmax(0, 1fr))`, // 设置网格的列数\n };\n});\n\ndefineExpose({ breakPoint });\n</script>\n"],"names":["props","__props","provide","Array","isArray","gap","breakPoint","ref","gridCols","computed","cols","unref","hiddenIndex","onBeforeMount","collapsed","findHiddenIndex","onMounted","resize","target","innerWidth","window","addEventListener","onActivated","onUnmounted","removeEventListener","onDeactivated","e","width","value","slots","useSlots","default","__name","fields","suffix","forEach","slot","type","name","children","push","suffixCols","span","offset","find","reduce","prev","current","index","Number","collapsedRows","Error","watch","gridGap","style","display","gridTemplateColumns","__expose"],"mappings":"yoBAqCA,MAAMA,EAAQC,EAQNC,EAAA,MAAOC,MAAMC,QAAQJ,EAAMK,KAAOL,EAAMK,IAAI,GAAKL,EAAMK,KAGzD,MAAAC,EAAaC,EAAgB,MACnCL,EAAQ,aAAcI,GAGhB,MAAAE,EAAWC,GAAS,IACE,iBAAfT,EAAMU,KAA0BV,EAAMU,KAAKC,EAAML,KAAgBN,EAAMU,KAC3EV,EAAMU,OAEfR,EAAQ,OAAQM,GAGV,MAAAI,EAAcL,GAAM,GAC1BL,EAAQ,oBAAqBU,GAE7BC,GAAc,IAAMb,EAAMc,WAAaC,MAEvCC,GAAU,KACRC,EAAO,CAAEC,OAAQ,CAAEC,WAAYC,OAAOD,cAC/BC,OAAAC,iBAAiB,SAAUJ,EAAM,IAG1CK,GAAY,KACVL,EAAO,CAAEC,OAAQ,CAAEC,WAAYC,OAAOD,cAC/BC,OAAAC,iBAAiB,SAAUJ,EAAM,IAG1CM,GAAY,KACHH,OAAAI,oBAAoB,SAAUP,EAAM,IAG7CQ,GAAc,KACLL,OAAAI,oBAAoB,SAAUP,EAAM,IAIvC,MAAAA,KAAUS,IACR,MAAAC,EAASD,EAAER,OAAkBC,WAC3B,SAAEQ,GACR,KAAKA,EAAQ,IACXrB,EAAWsB,MAAQ,KACnB,MACF,KAAKD,GAAS,KAAOA,EAAQ,IAC3BrB,EAAWsB,MAAQ,KACnB,MACF,KAAKD,GAAS,KAAOA,EAAQ,KAC3BrB,EAAWsB,MAAQ,KACnB,MACF,KAAKD,GAAS,MAAQA,EAAQ,KAC5BrB,EAAWsB,MAAQ,KACnB,MACF,KAAKD,GAAS,KACZrB,EAAWsB,MAAQ,KACnB,GAjBS,UAqBTC,EAAQC,IAAWC,UAKnBhB,EAAwBiB,GAAA,KAC5B,MAAMC,EAA6B,GACnC,IAAIC,EAAuB,KACrBL,EAAAM,SAASC,IAEY,iBAAdA,EAAKC,MAAwC,aAAnBD,EAAKC,KAAKC,WAA8C,IAAvBF,EAAKpC,OAAOkC,SACvEA,EAAAE,GAGc,iBAAdA,EAAKC,MAAqBlC,MAAMC,QAAQgC,EAAKG,WAAWN,EAAOO,QAAQJ,EAAKG,SAAQ,IAGjG,IAAIE,EAAa,EACbP,IAEEO,GAAAP,EAAiBlC,MAAOW,EAAML,KAAcoC,MAASR,EAAiBlC,OAAO0C,MAAQ,IACrFR,EAAiBlC,MAAOW,EAAML,KAAcqC,QAAWT,EAAiBlC,OAAO2C,QAAU,IAE3F,IACF,IAAIC,GAAO,EACXX,EAAOY,QAAO,CAACC,EAAO,EAAGC,EAASC,KAMhC,GAHIF,IAAAC,EAAmB/C,MAAOW,EAAML,KAAcoC,MAASK,EAAmB/C,OAAO0C,MAAQ,IACzFK,EAAmB/C,MAAOW,EAAML,KAAcqC,QAAWI,EAAmB/C,OAAO2C,QAAU,GAE7FM,OAAOH,GAAQ9C,EAAMkD,cAAgB1C,EAASoB,MAAQa,EAIlD,MAHN7B,EAAYgB,MAAQoB,EACbJ,GAAA,EAED,IAAIO,MAAM,WAEX,OAAAL,CAAA,GACN,GACEF,IAAMhC,EAAYgB,OAAQ,SACxBF,GAAG,IAnCU,mBAyCxB0B,GACE,IAAM,CAACzC,EAAML,GAAaN,EAAMkD,iBAChC,KACMlD,EAAMc,WAA2BC,GAAA,IAKzCqC,GACE,IAAMpD,EAAMc,YACHc,IACH,GAAAA,SAAcb,IAClBH,EAAYgB,OAAQ,CAAA,IAIlB,MAAAyB,EAAU5C,GAAS,IACE,iBAAdT,EAAMK,IAAyB,GAAGL,EAAMK,QAC/CF,MAAMC,QAAQJ,EAAMK,KAAa,GAAGL,EAAMK,IAAI,QAAQL,EAAMK,IAAI,OAC7D,UAGHiD,EAAQ7C,GAAS,KACd,CACL8C,QAAS,OACTlD,IAAKM,EAAM0C;;AACXG,oBAAqB,UAAU7C,EAAMH,iCAI5BiD,EAAA,CAAEnD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znSearch/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\r\nimport index from './src/index.vue'\r\nexport type { ZnSearchProps, ZnSearchSchemaProps, ActionPosition, ZnSearchExpose, ZnSearchOnEmits } from './src/index.vue'\r\n\r\nexport { useZnSearch } from './src/hooks/useProSearch'\r\n\r\nexport const ZnSearch = withInstall(index)\r\n\r\nexport type ZnSearchInstance = InstanceType<typeof index>\r\n\r\nexport default ZnSearch\r\n"],"names":["ZnSearch","withInstall","index"],"mappings":"4KAMa,MAAAA,EAAWC,EAAYC"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znSearch/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\nimport index from './src/index.vue'\nexport type { ZnSearchProps, ZnSearchSchemaProps, ActionPosition, ZnSearchExpose, ZnSearchOnEmits } from './src/index.vue'\n\nexport { useZnSearch } from './src/hooks/useProSearch'\n\nexport const ZnSearch = withInstall(index)\n\nexport type ZnSearchInstance = InstanceType<typeof index>\n\nexport default ZnSearch\n"],"names":["ZnSearch","withInstall","index"],"mappings":"4KAMa,MAAAA,EAAWC,EAAYC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useProSearch.mjs","sources":["../../../../../../../packages/components/znSearch/src/hooks/useProSearch.ts"],"sourcesContent":["import { createVNode, getCurrentInstance, isRef, isShallow, nextTick, type Ref, ref, render, type ShallowRef, unref } from 'vue'\r\n\r\nimport { ElConfigProvider } from 'element-plus'\r\nimport ZnSearch, { type ZnSearchExpose, type ZnSearchOnEmits, type ZnSearchProps } from '../index.vue'\r\n\r\nimport type { ZnFormSchemaProps, FormSetProps } from '../../../znForm'\r\n\r\nexport const useZnSearch = () => {\r\n // ProSearch 实例\r\n const searchRef = ref<ZnSearchExpose>()\r\n\r\n const currentInstance = getCurrentInstance()\r\n\r\n /**\r\n * @param ref Search实例\r\n * @param elRef ElForm实例\r\n */\r\n const register = (ref: ZnSearchExpose) => {\r\n searchRef.value = ref\r\n }\r\n\r\n const getSearch = async () => {\r\n await nextTick()\r\n const search = unref(searchRef)\r\n if (!search) {\r\n console.error('The Search is not registered. Please use the register method to register')\r\n }\r\n return search\r\n }\r\n\r\n const methods = {\r\n /**\r\n * @description 切换展开收起\r\n */\r\n toggleCollapsed: async (isCollapsed?: boolean) => {\r\n const search = await getSearch()\r\n search?.toggleCollapsed(isCollapsed)\r\n },\r\n\r\n /**\r\n * @description 设置 search 组件的 props\r\n * @param prop FormItem 的 prop\r\n */\r\n setProps: async (props: ZnSearchProps = {}) => {\r\n const search = await getSearch()\r\n search?.setProps(props)\r\n if (props.modeValue) search?.setValues(props.modeValue)\r\n },\r\n\r\n /**\r\n * @description 设置 form 的值\r\n * @param data 需要设置的数据\r\n */\r\n setValues: async (data: Record<string, any>) => {\r\n const search = await getSearch()\r\n search?.setValues(data)\r\n },\r\n\r\n /**\r\n * @description 设置 schema\r\n * @param schemaProps 需要设置的 schemaProps\r\n */\r\n setSchema: async (schemaProps: FormSetProps[]) => {\r\n const search = await getSearch()\r\n search?.setSchema(schemaProps)\r\n },\r\n\r\n /**\r\n * @description 新增 schema\r\n * @param prop 在哪里新增,number 为下标,字符串为指定的 prop\r\n * @param position 如果 prop 为字符串,则指定新增到 prop 前还是后\r\n */\r\n addSchema: async (formSchema: ZnFormSchemaProps, prop?: number | string, position: 'before' | 'after' = 'after') => {\r\n const search = await getSearch()\r\n search?.addSchema(formSchema, prop, position)\r\n },\r\n\r\n /**\r\n * @description 删除 schema\r\n * @param prop 删除哪个数据\r\n */\r\n delSchema: async (prop: string) => {\r\n const search = await getSearch()\r\n search?.delSchema(prop)\r\n },\r\n\r\n /**\r\n * @description 获取表单数据\r\n * @returns form data\r\n */\r\n getFormData: async <T = Record<string, any>>(): Promise<T> => {\r\n const search = await getSearch()\r\n return search?.getFormData() as T\r\n }\r\n }\r\n\r\n const createMethods = {\r\n /**\r\n * 返回 ProSearch 组件的虚拟 DOM,直接在页面中渲染该虚拟 DOM 即可。可以理解为返回一个 Vue 组件\r\n */\r\n createSearchComponent: (proSearchProps?: ZnSearchProps & Partial<ZnSearchOnEmits>, context: Record<string, any> = {}) => {\r\n const { attrs, slots } = context\r\n const instance = createVNode(ZnSearch, { ...attrs, ...proSearchProps, onRegister: register }, { ...slots })\r\n return instance\r\n },\r\n\r\n /**\r\n * 动态创建 Search。使用该函数,控制台会有 warning: Slot \"XXX\" invoked outside of the render function,可以忽略\r\n */\r\n createSearch: async (el: string | Ref<HTMLElement> | ShallowRef<HTMLElement>, proSearchProps?: ZnSearchProps & Partial<ZnSearchOnEmits>, slots?: any) => {\r\n const proSearchInstance = createVNode(ZnSearch, { ...proSearchProps, onRegister: register }, { ...slots })\r\n const rootInstance = createVNode(ElConfigProvider, {}, { default: () => proSearchInstance })\r\n\r\n await nextTick()\r\n\r\n if (isRef(el) || isShallow(el)) return render(rootInstance, unref(el as Ref<HTMLElement>))\r\n\r\n const rootEl = currentInstance?.refs[el as string] as HTMLElement\r\n rootEl && render(rootInstance, rootEl)\r\n }\r\n }\r\n\r\n return {\r\n searchElState: {\r\n searchRef: unref(searchRef)\r\n },\r\n searchMethods: methods,\r\n searchRegister: register,\r\n createMethods\r\n }\r\n}\r\n"],"names":["useZnSearch","__name","searchRef","ref","currentInstance","getCurrentInstance","register","value","getSearch","async","nextTick","search","unref","console","error","methods","toggleCollapsed","isCollapsed","setProps","props","modeValue","setValues","data","setSchema","schemaProps","addSchema","formSchema","prop","position","delSchema","getFormData","createMethods","createSearchComponent","proSearchProps","context","attrs","slots","createVNode","ZnSearch","onRegister","createSearch","el","proSearchInstance","rootInstance","ElConfigProvider","default","isRef","isShallow","render","rootEl","refs","searchElState","searchMethods","searchRegister"],"mappings":"uTAOO,MAAMA,EAAoBC,GAAA,KAE/B,MAAMC,EAAYC,IAEZC,EAAkBC,IAMlBC,KAAYH,IAChBD,EAAUK,MAAQJ,CAAAA,GADH,YAIXK,EAAwBP,GAAAQ,gBACtBC,IACA,MAAAC,EAASC,EAAMV,GAId,OAHFS,GACHE,QAAQC,MAAM,4EAETH,CAAA,GANS,aASZI,EAAU;;;;AAIdC,yBAAwBC,IAChB,MAAAN,QAAeH,IACrBG,GAAQK,gBAAgBC,EAAW,GAFpB;;;;;AASjBC,SAAUjB,GAAAQ,MAAOU,EAAuB,MAChC,MAAAR,QAAeH,IACrBG,GAAQO,SAASC,GACbA,EAAMC,WAAmBT,GAAAU,UAAUF,EAAMC,UAAS,GAH9C;;;;;AAUVC,mBAAkBC,IACV,MAAAX,QAAeH,IACrBG,GAAQU,UAAUC,EAAI,GAFb;;;;;AASXC,mBAAkBC,IACV,MAAAb,QAAeH,IACrBG,GAAQY,UAAUC,EAAW,GAFpB;;;;;;AAUXC,UAAWxB,GAAAQ,MAAOiB,EAA+BC,EAAwBC,EAA+B,WAChG,MAAAjB,QAAeH,IACbG,GAAAc,UAAUC,EAAYC,EAAMC,EAAQ,GAFnC;;;;;AASXC,mBAAkBF,IACV,MAAAhB,QAAeH,IACrBG,GAAQkB,UAAUF,EAAI,GAFb;;;;;AASXG,YAA8D7B,GAAAQ,UACtD,MAAAE,QAAeH,IACrB,OAAOG,GAAQmB,aAAY,GAFhB,gBAMTC,EAAgB;;;;AAIpBC,sBAAuB/B,GAAA,CAACgC,EAA2DC,EAA+B,CAAA,KAC1G,MAAAC,MAAEA,EAAOC,MAAAA,GAAUF,EAElB,OADUG,EAAYC,EAAU,IAAKH,KAAUF,EAAgBM,WAAYjC,GAAY,IAAK8B,GAC5F,GAHc;;;;AASvBI,aAAcvC,GAAAQ,MAAOgC,EAAyDR,EAA2DG,KACvI,MAAMM,EAAoBL,EAAYC,EAAU,IAAKL,EAAgBM,WAAYjC,GAAY,IAAK8B,IAC5FO,EAAeN,EAAYO,EAAkB,GAAI,CAAEC,QAAS5C,GAAA,IAAMyC,GAAN,aAI9D,SAFEhC,IAEFoC,EAAML,IAAOM,EAAUN,GAAK,OAAOO,EAAOL,EAAc/B,EAAM6B,IAE5D,MAAAQ,EAAS7C,GAAiB8C,KAAKT,GAC3BQ,GAAAD,EAAOL,EAAcM,EAAM,GATzB,iBAaT,MAAA,CACLE,cAAe,CACbjD,UAAWU,EAAMV,IAEnBkD,cAAerC,EACfsC,eAAgB/C,EAChByB,gBACF,GA1HyB"}
1
+ {"version":3,"file":"useProSearch.mjs","sources":["../../../../../../../packages/components/znSearch/src/hooks/useProSearch.ts"],"sourcesContent":["import { createVNode, getCurrentInstance, isRef, isShallow, nextTick, type Ref, ref, render, type ShallowRef, unref } from 'vue'\n\nimport { ElConfigProvider } from 'element-plus'\nimport ZnSearch, { type ZnSearchExpose, type ZnSearchOnEmits, type ZnSearchProps } from '../index.vue'\n\nimport type { ZnFormSchemaProps, FormSetProps } from '../../../znForm'\n\nexport const useZnSearch = () => {\n // ProSearch 实例\n const searchRef = ref<ZnSearchExpose>()\n\n const currentInstance = getCurrentInstance()\n\n /**\n * @param ref Search实例\n * @param elRef ElForm实例\n */\n const register = (ref: ZnSearchExpose) => {\n searchRef.value = ref\n }\n\n const getSearch = async () => {\n await nextTick()\n const search = unref(searchRef)\n if (!search) {\n console.error('The Search is not registered. Please use the register method to register')\n }\n return search\n }\n\n const methods = {\n /**\n * @description 切换展开收起\n */\n toggleCollapsed: async (isCollapsed?: boolean) => {\n const search = await getSearch()\n search?.toggleCollapsed(isCollapsed)\n },\n\n /**\n * @description 设置 search 组件的 props\n * @param prop FormItem 的 prop\n */\n setProps: async (props: ZnSearchProps = {}) => {\n const search = await getSearch()\n search?.setProps(props)\n if (props.modeValue) search?.setValues(props.modeValue)\n },\n\n /**\n * @description 设置 form 的值\n * @param data 需要设置的数据\n */\n setValues: async (data: Record<string, any>) => {\n const search = await getSearch()\n search?.setValues(data)\n },\n\n /**\n * @description 设置 schema\n * @param schemaProps 需要设置的 schemaProps\n */\n setSchema: async (schemaProps: FormSetProps[]) => {\n const search = await getSearch()\n search?.setSchema(schemaProps)\n },\n\n /**\n * @description 新增 schema\n * @param prop 在哪里新增,number 为下标,字符串为指定的 prop\n * @param position 如果 prop 为字符串,则指定新增到 prop 前还是后\n */\n addSchema: async (formSchema: ZnFormSchemaProps, prop?: number | string, position: 'before' | 'after' = 'after') => {\n const search = await getSearch()\n search?.addSchema(formSchema, prop, position)\n },\n\n /**\n * @description 删除 schema\n * @param prop 删除哪个数据\n */\n delSchema: async (prop: string) => {\n const search = await getSearch()\n search?.delSchema(prop)\n },\n\n /**\n * @description 获取表单数据\n * @returns form data\n */\n getFormData: async <T = Record<string, any>>(): Promise<T> => {\n const search = await getSearch()\n return search?.getFormData() as T\n }\n }\n\n const createMethods = {\n /**\n * 返回 ProSearch 组件的虚拟 DOM,直接在页面中渲染该虚拟 DOM 即可。可以理解为返回一个 Vue 组件\n */\n createSearchComponent: (proSearchProps?: ZnSearchProps & Partial<ZnSearchOnEmits>, context: Record<string, any> = {}) => {\n const { attrs, slots } = context\n const instance = createVNode(ZnSearch, { ...attrs, ...proSearchProps, onRegister: register }, { ...slots })\n return instance\n },\n\n /**\n * 动态创建 Search。使用该函数,控制台会有 warning: Slot \"XXX\" invoked outside of the render function,可以忽略\n */\n createSearch: async (el: string | Ref<HTMLElement> | ShallowRef<HTMLElement>, proSearchProps?: ZnSearchProps & Partial<ZnSearchOnEmits>, slots?: any) => {\n const proSearchInstance = createVNode(ZnSearch, { ...proSearchProps, onRegister: register }, { ...slots })\n const rootInstance = createVNode(ElConfigProvider, {}, { default: () => proSearchInstance })\n\n await nextTick()\n\n if (isRef(el) || isShallow(el)) return render(rootInstance, unref(el as Ref<HTMLElement>))\n\n const rootEl = currentInstance?.refs[el as string] as HTMLElement\n rootEl && render(rootInstance, rootEl)\n }\n }\n\n return {\n searchElState: {\n searchRef: unref(searchRef)\n },\n searchMethods: methods,\n searchRegister: register,\n createMethods\n }\n}\n"],"names":["useZnSearch","__name","searchRef","ref","currentInstance","getCurrentInstance","register","value","getSearch","async","nextTick","search","unref","console","error","methods","toggleCollapsed","isCollapsed","setProps","props","modeValue","setValues","data","setSchema","schemaProps","addSchema","formSchema","prop","position","delSchema","getFormData","createMethods","createSearchComponent","proSearchProps","context","attrs","slots","createVNode","ZnSearch","onRegister","createSearch","el","proSearchInstance","rootInstance","ElConfigProvider","default","isRef","isShallow","render","rootEl","refs","searchElState","searchMethods","searchRegister"],"mappings":"uTAOO,MAAMA,EAAoBC,GAAA,KAE/B,MAAMC,EAAYC,IAEZC,EAAkBC,IAMlBC,KAAYH,IAChBD,EAAUK,MAAQJ,CAAAA,GADH,YAIXK,EAAwBP,GAAAQ,gBACtBC,IACA,MAAAC,EAASC,EAAMV,GAId,OAHFS,GACHE,QAAQC,MAAM,4EAETH,CAAA,GANS,aASZI,EAAU;;;;AAIdC,yBAAwBC,IAChB,MAAAN,QAAeH,IACrBG,GAAQK,gBAAgBC,EAAW,GAFpB;;;;;AASjBC,SAAUjB,GAAAQ,MAAOU,EAAuB,MAChC,MAAAR,QAAeH,IACrBG,GAAQO,SAASC,GACbA,EAAMC,WAAmBT,GAAAU,UAAUF,EAAMC,UAAS,GAH9C;;;;;AAUVC,mBAAkBC,IACV,MAAAX,QAAeH,IACrBG,GAAQU,UAAUC,EAAI,GAFb;;;;;AASXC,mBAAkBC,IACV,MAAAb,QAAeH,IACrBG,GAAQY,UAAUC,EAAW,GAFpB;;;;;;AAUXC,UAAWxB,GAAAQ,MAAOiB,EAA+BC,EAAwBC,EAA+B,WAChG,MAAAjB,QAAeH,IACbG,GAAAc,UAAUC,EAAYC,EAAMC,EAAQ,GAFnC;;;;;AASXC,mBAAkBF,IACV,MAAAhB,QAAeH,IACrBG,GAAQkB,UAAUF,EAAI,GAFb;;;;;AASXG,YAA8D7B,GAAAQ,UACtD,MAAAE,QAAeH,IACrB,OAAOG,GAAQmB,aAAY,GAFhB,gBAMTC,EAAgB;;;;AAIpBC,sBAAuB/B,GAAA,CAACgC,EAA2DC,EAA+B,CAAA,KAC1G,MAAAC,MAAEA,EAAOC,MAAAA,GAAUF,EAElB,OADUG,EAAYC,EAAU,IAAKH,KAAUF,EAAgBM,WAAYjC,GAAY,IAAK8B,GAC5F,GAHc;;;;AASvBI,aAAcvC,GAAAQ,MAAOgC,EAAyDR,EAA2DG,KACvI,MAAMM,EAAoBL,EAAYC,EAAU,IAAKL,EAAgBM,WAAYjC,GAAY,IAAK8B,IAC5FO,EAAeN,EAAYO,EAAkB,GAAI,CAAEC,QAAS5C,GAAA,IAAMyC,GAAN,aAI9D,SAFEhC,IAEFoC,EAAML,IAAOM,EAAUN,GAAK,OAAOO,EAAOL,EAAc/B,EAAM6B,IAE5D,MAAAQ,EAAS7C,GAAiB8C,KAAKT,GAC3BQ,GAAAD,EAAOL,EAAcM,EAAM,GATzB,iBAaT,MAAA,CACLE,cAAe,CACbjD,UAAWU,EAAMV,IAEnBkD,cAAerC,EACfsC,eAAgB/C,EAChByB,gBACF,GA1HyB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znSearch/src/index.vue"],"sourcesContent":["<template>\r\n <!-- <div v-if=\"schema.length\" :class=\"`card zn-search-form`\"> -->\r\n <div v-if=\"schema.length\" :class=\"` zn-search-form`\">\r\n <ZnForm :schema=\"schema\" v-model=\"model\" @register=\"formRegister\" @validate=\"onFormValidate\" :enum-map-props>\r\n <template #default=\"{ parseLabel, getComponentWidth }\">\r\n <Grid\r\n ref=\"gridRef\"\r\n :collapsed=\"getProps.useCollapsed ? getProps.collapsed : false\"\r\n :cols=\"getProps.searchCols\"\r\n :gap=\"getProps.gap\"\r\n :collapsed-rows=\"getProps.collapsedRows\">\r\n <GridItem v-for=\"item in schemaForm\" :key=\"item.prop\" v-bind=\"getResponsive(item)\" :index=\"item._index\">\r\n <el-form-item :label=\"parseLabel(item.label)\">\r\n <ZnFormItem :column=\"item\" v-model=\"model\" :style=\"getComponentWidth(item)\" />\r\n </el-form-item>\r\n </GridItem>\r\n\r\n <GridItem :suffix=\"isRightPosition\" :span=\"isBlock ? rowSpan : 1\">\r\n <div :style=\"style\">\r\n <slot name=\"action\" :model=\"model\" :show-collapse=\"showCollapse\" :toggle-collapsed=\"toggleCollapsed\">\r\n <el-button v-if=\"getProps.showSearch\" type=\"primary\" :icon=\"Search\" @click=\"search\" :loading=\"getProps.searchLoading\">搜索</el-button>\r\n <el-button v-if=\"getProps.showReset\" :icon=\"Delete\" @click=\"reset\" :loading=\"getProps.resetLoading\">重置</el-button>\r\n <el-button v-if=\"getProps.useCollapsed === false ? false : showCollapse\" type=\"primary\" link class=\"search-isOpen\" @click=\"toggleCollapsed()\">\r\n {{ getProps.collapsed ? '展开' : '折叠' }}\r\n <el-icon class=\"el-icon--right\">\r\n <component :is=\"getProps.collapsed ? ArrowDown : ArrowUp\"></component>\r\n </el-icon>\r\n </el-button>\r\n </slot>\r\n </div>\r\n </GridItem>\r\n </Grid>\r\n </template>\r\n </ZnForm>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, onMounted, ref, shallowRef, unref } from 'vue'\r\n\r\n import GridItem from '../../znGrid/src/components/GridItem.vue'\r\n import { type ZnGridItemProps } from '../../znGrid/src/components/GridItem.vue'\r\n import Grid from '../../znGrid/src/index.vue'\r\n import ZnFormItem from '../../znForm/src/components/ZnFormItem.vue'\r\n import { type BreakPoint, type GridInstance } from '../../znGrid/index'\r\n import { FormSetProps } from '../../znForm/src/interface/index'\r\n import { type ZnFormSchemaProps } from '../../znForm/index'\r\n import ZnForm from '../../znForm/index'\r\n import { setProp, useZnForm } from '../../znForm/index'\r\n import { isEmpty, isObject, isString } from '../../../functions/modules/is'\r\n import { ArrowDown, ArrowUp, Delete, Search } from '@element-plus/icons-vue'\r\n import { ElButton, ElFormItem, ElIcon, type FormItemProp } from 'element-plus'\r\n\r\n defineOptions({ name: 'ZnSearch' })\r\n export type ZnSearchExpose = typeof defaultExpose\r\n\r\n export type ActionPosition = 'left' | 'right' | 'block-left' | 'block-center' | 'block-right'\r\n\r\n export type ZnSearchSchemaProps = ZnFormSchemaProps & {\r\n grid?: Partial<ZnGridItemProps> // GridItem 的 props\r\n }\r\n\r\n export interface ZnSearchProps {\r\n modeValue?: Record<string, any> /** 搜索表单值 */\r\n schema?: ZnSearchSchemaProps[] /** 搜索配置列 */\r\n position?: ActionPosition /** Action 位置,block 代表换行 */\r\n useCollapsed?: boolean /** 是否使用折叠功能 */\r\n searchCols?: number | Record<BreakPoint, number> /** 响应式布局 */\r\n collapsed?: boolean /** 是否默认折叠搜索项 */\r\n collapsedRows?: number /** 可见的行数 */\r\n gap?: [number, number] | number /** 行和列间距 */\r\n showSearch?: boolean /** 是否展示搜索按钮 */\r\n showReset?: boolean /** 是否展示重置按钮 */\r\n searchLoading?: boolean /** 搜索按钮的 loading */\r\n resetLoading?: boolean /** 重置按钮的 loading */\r\n removeNoValue?: boolean /** 是否去除空值项 */\r\n enumMapProps?: Map<string, Record<string, any>[]> /** 存储 enum 值。该 props 是搭配 ProTable 使用,因为 ProTable 已经初始化部分字典数据,因此不需要 ZnForm 再次请求这些字典数据 */\r\n }\r\n\r\n // 默认值\r\n const props = defineProps({\n modeValue: { type: Object, required: false, default: () => ({}) },\n schema: { type: Array, required: false, default: () => [] },\n position: { type: String, required: false, default: 'right' },\n useCollapsed: { type: Boolean, required: false, default: true },\n searchCols: { type: [Number, Object], required: false, default: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }) },\n collapsed: { type: Boolean, required: false, default: true },\n collapsedRows: { type: Number, required: false, default: 1 },\n gap: { type: [Array, Number], required: false, default: () => [20, 0] },\n showSearch: { type: Boolean, required: false, default: true },\n showReset: { type: Boolean, required: false, default: true },\n searchLoading: { type: Boolean, required: false, default: false },\n resetLoading: { type: Boolean, required: false, default: false },\n removeNoValue: { type: Boolean, required: false, default: true },\n enumMapProps: { type: Map, required: false }\n})\r\n\r\n type ZnSearchEmits = {\r\n search: [params: Record<string, any>] // 搜索方法\r\n reset: [params: Record<string, any>] // 重置方法\r\n register: [expose: ZnSearchExpose] // 注册方法\r\n validate: [prop: FormItemProp, isValid: boolean, message: string] // ElForm 触发验证事件\r\n }\r\n\r\n /**\r\n * 将 ZnSearchEmits 类型的 key 变为 on{Key} 的形式\r\n * @example 返回 { onSearch: (params: Record<string, any>) => void }\r\n */\r\n export type ZnSearchOnEmits = keyOnPrefix<ZnSearchEmits>\r\n\r\n const emits = defineEmits([\"search\", \"reset\", \"register\", \"validate\"])\r\n\r\n const { formRegister, formMethods, formElState } = useZnForm()\r\n const { getElFormExpose, getFormData, getFormExpose } = formMethods\r\n\r\n const schemaForm = computed(() =>\r\n props.schema\r\n .filter((item) => {\r\n const { formRef } = formElState\r\n const destroy = formRef?.isDestroy(item) || item.destroy\r\n const hidden = formRef?.isHidden(item) || item.hidden\r\n\r\n if (destroy) delete unref(model)[item.prop]\r\n\r\n return !(destroy || hidden)\r\n })\r\n .map((item, index) => {\r\n item._index = index\r\n return item\r\n })\r\n )\r\n\r\n // 搜索参数\r\n const model = defineModel<Record<string, any>>({ default: {} })\r\n\r\n const mergeProps = ref<ZnSearchProps>({})\r\n\r\n const getProps = computed(() => {\r\n const propsObj = { ...props }\r\n Object.assign(propsObj, unref(mergeProps))\r\n return propsObj\r\n })\r\n\r\n // 获取响应式设置\r\n const getResponsive = (item: ZnSearchSchemaProps) => {\r\n return {\r\n span: item.grid?.span,\r\n offset: item.grid?.offset ?? 0,\r\n xs: item.grid?.xs,\r\n sm: item.grid?.sm,\r\n md: item.grid?.md,\r\n lg: item.grid?.lg,\r\n xl: item.grid?.xl\r\n }\r\n }\r\n\r\n // 获取响应式断点\r\n const gridRef = shallowRef<GridInstance>()\r\n const breakPoint = computed<BreakPoint>(() => unref(gridRef)?.breakPoint || 'xl')\r\n\r\n const rowSpan = computed(() => {\r\n const { searchCols } = unref(getProps)\r\n if (typeof searchCols === 'number') return searchCols\r\n return searchCols[unref(breakPoint)]\r\n })\r\n\r\n // 判断是否显示 展开/合并 按钮\r\n const showCollapse = computed(() => {\r\n const { schema, searchCols } = unref(getProps)\r\n\r\n let show = false\r\n schema.reduce((prev, current) => {\r\n prev +=\r\n ((current.grid && current.grid[unref(breakPoint)]?.span) ?? current.grid?.span ?? 1) +\r\n ((current.grid && current.grid[unref(breakPoint)]?.offset) ?? current.grid?.offset ?? 0)\r\n\r\n if (typeof searchCols !== 'number') {\r\n if (prev >= searchCols[unref(breakPoint)]) show = true\r\n } else {\r\n if (prev >= searchCols) show = true\r\n }\r\n return prev\r\n }, 0)\r\n return show\r\n })\r\n\r\n const isRightPosition = computed(() => {\r\n const { position } = unref(getProps)\r\n return position === 'right'\r\n })\r\n\r\n const isBlock = computed(() => {\r\n const { position = 'right' } = unref(getProps)\r\n return ['block-left', 'block-center', 'block-right'].includes(position)\r\n })\r\n\r\n const style = computed(() => {\r\n const { position = 'right' } = unref(getProps)\r\n const style = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n marginBottom: '18px'\r\n }\r\n if (['block-left', 'left'].includes(position)) return { ...style, justifyContent: 'flex-start' }\r\n if (['block-center'].includes(position)) return { ...style, justifyContent: 'center' }\r\n if (['block-right', 'right'].includes(position)) return { ...style, justifyContent: 'flex-end' }\r\n return style\r\n })\r\n\r\n const filterModel = async () => {\r\n const model = await getFormData()\r\n if (unref(getProps).removeNoValue) {\r\n // 使用 reduce 过滤空值,并返回一个新对象\r\n return Object.keys(model).reduce((prev: any, next: any) => {\r\n const value = model[next]\r\n if (!isEmpty(value)) {\r\n if (isObject(value)) {\r\n if (Object.keys(value).length > 0) prev[next] = value\r\n } else prev[next] = value\r\n }\r\n return prev\r\n }, {})\r\n }\r\n return model\r\n }\r\n\r\n const search = async () => {\r\n const elFormExpose = await getElFormExpose()\r\n await elFormExpose?.validate(async (isValid) => {\r\n if (isValid) {\r\n const model = await filterModel()\r\n emits('search', model)\r\n }\r\n })\r\n }\r\n\r\n const reset = async () => {\r\n const elFormExpose = await getElFormExpose()\r\n elFormExpose?.resetFields()\r\n const model = await filterModel()\r\n emits('reset', model)\r\n }\r\n\r\n const onFormValidate = (prop: FormItemProp, isValid: boolean, message: string) => {\r\n emits('validate', prop, isValid, message)\r\n }\r\n\r\n const toggleCollapsed = (isCollapsed?: boolean) => {\r\n const { collapsed } = unref(getProps)\r\n\r\n if (isCollapsed === undefined) return setProps({ collapsed: !collapsed })\r\n return setProps({ collapsed: isCollapsed })\r\n }\r\n\r\n // 设置 form 的值\r\n const setValues = async (data: Record<string, any> = {}) => {\r\n model.value = Object.assign(unref(model), data)\r\n const formExpose = await getFormExpose()\r\n formExpose?.setValues(data)\r\n }\r\n\r\n // 设置 ZnForm 组件的 props\r\n const setProps = (props: ZnSearchProps = {}) => {\r\n mergeProps.value = Object.assign(unref(mergeProps), props)\r\n }\r\n\r\n // 设置 schema\r\n const setSchema = (schemaProps: FormSetProps[]) => {\r\n const { schema } = unref(getProps)\r\n for (const v of schema) {\r\n for (const item of schemaProps) {\r\n if (v.prop === item.prop) {\r\n setProp(v, item.field, item.value)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 添加 schema\r\n const addSchema = (formSchema: ZnFormSchemaProps, prop?: number | string, position: 'before' | 'after' = 'after') => {\r\n const { schema } = unref(getProps)\r\n\r\n if (isString(prop)) {\r\n return schema.forEach((s, i) => {\r\n if (s.prop === prop) position === 'after' ? formSchema.splice(i + 1, 0, s) : formSchema.splice(i, 0, s)\r\n })\r\n }\r\n if (prop !== undefined) return schema.splice(prop, 0, formSchema)\r\n return schema.push(formSchema)\r\n }\r\n\r\n // 删除 schema\r\n const delSchema = (prop: string) => {\r\n const { schema } = unref(getProps)\r\n\r\n const index = schema.findIndex((item) => item.prop === prop)\r\n if (index > -1) {\r\n schema.splice(index, 1)\r\n }\r\n }\r\n\r\n const defaultExpose = {\r\n getElFormExpose,\r\n getFormExpose,\r\n getFormData,\r\n toggleCollapsed,\r\n setProps,\r\n setSchema,\r\n setValues,\r\n delSchema,\r\n addSchema\r\n }\r\n\r\n onMounted(() => {\r\n emits('register', defaultExpose)\r\n })\r\n\r\n defineExpose(defaultExpose)\r\n</script>\r\n"],"names":["props","__props","emits","__emit","formRegister","formMethods","formElState","useZnForm","getElFormExpose","getFormData","getFormExpose","schemaForm","computed","schema","filter","item","formRef","destroy","isDestroy","hidden","isHidden","unref","model","prop","map","index","_index","_useModel","mergeProps","ref","getProps","propsObj","Object","assign","getResponsive","span","grid","offset","xs","sm","md","lg","xl","gridRef","shallowRef","breakPoint","rowSpan","searchCols","showCollapse","show","reduce","prev","current","isRightPosition","position","isBlock","includes","style","display","alignItems","justifyContent","marginBottom","filterModel","__name","async","removeNoValue","keys","next","value","isEmpty","isObject","length","search","elFormExpose","validate","isValid","reset","resetFields","onFormValidate","message","toggleCollapsed","isCollapsed","collapsed","setProps","setValues","data","formExpose","setSchema","schemaProps","v","setProp","field","addSchema","formSchema","isString","forEach","s","i","splice","push","defaultExpose","delSchema","findIndex","onMounted","__expose"],"mappings":"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"}
1
+ {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znSearch/src/index.vue"],"sourcesContent":["<template>\n <!-- <div v-if=\"schema.length\" :class=\"`card zn-search-form`\"> -->\n <div v-if=\"schema.length\" :class=\"` zn-search-form`\">\n <ZnForm :schema=\"schema\" v-model=\"model\" @register=\"formRegister\" @validate=\"onFormValidate\" :enum-map-props>\n <template #default=\"{ parseLabel, getComponentWidth }\">\n <Grid\n ref=\"gridRef\"\n :collapsed=\"getProps.useCollapsed ? getProps.collapsed : false\"\n :cols=\"getProps.searchCols\"\n :gap=\"getProps.gap\"\n :collapsed-rows=\"getProps.collapsedRows\">\n <GridItem v-for=\"item in schemaForm\" :key=\"item.prop\" v-bind=\"getResponsive(item)\" :index=\"item._index\">\n <el-form-item :label=\"parseLabel(item.label)\">\n <ZnFormItem :column=\"item\" v-model=\"model\" :style=\"getComponentWidth(item)\" />\n </el-form-item>\n </GridItem>\n\n <GridItem :suffix=\"isRightPosition\" :span=\"isBlock ? rowSpan : 1\">\n <div :style=\"style\">\n <slot name=\"action\" :model=\"model\" :show-collapse=\"showCollapse\" :toggle-collapsed=\"toggleCollapsed\">\n <el-button v-if=\"getProps.showSearch\" type=\"primary\" :icon=\"Search\" @click=\"search\" :loading=\"getProps.searchLoading\">搜索</el-button>\n <el-button v-if=\"getProps.showReset\" :icon=\"Delete\" @click=\"reset\" :loading=\"getProps.resetLoading\">重置</el-button>\n <el-button v-if=\"getProps.useCollapsed === false ? false : showCollapse\" type=\"primary\" link class=\"search-isOpen\" @click=\"toggleCollapsed()\">\n {{ getProps.collapsed ? '展开' : '折叠' }}\n <el-icon class=\"el-icon--right\">\n <component :is=\"getProps.collapsed ? ArrowDown : ArrowUp\"></component>\n </el-icon>\n </el-button>\n </slot>\n </div>\n </GridItem>\n </Grid>\n </template>\n </ZnForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, onMounted, ref, shallowRef, unref } from 'vue'\n\n import GridItem from '../../znGrid/src/components/GridItem.vue'\n import { type ZnGridItemProps } from '../../znGrid/src/components/GridItem.vue'\n import Grid from '../../znGrid/src/index.vue'\n import ZnFormItem from '../../znForm/src/components/ZnFormItem.vue'\n import { type BreakPoint, type GridInstance } from '../../znGrid/index'\n import { FormSetProps } from '../../znForm/src/interface/index'\n import { type ZnFormSchemaProps } from '../../znForm/index'\n import ZnForm from '../../znForm/index'\n import { setProp, useZnForm } from '../../znForm/index'\n import { isEmpty, isObject, isString } from '../../../functions/modules/is'\n import { ArrowDown, ArrowUp, Delete, Search } from '@element-plus/icons-vue'\n import { ElButton, ElFormItem, ElIcon, type FormItemProp } from 'element-plus'\n\n defineOptions({ name: 'ZnSearch' })\n export type ZnSearchExpose = typeof defaultExpose\n\n export type ActionPosition = 'left' | 'right' | 'block-left' | 'block-center' | 'block-right'\n\n export type ZnSearchSchemaProps = ZnFormSchemaProps & {\n grid?: Partial<ZnGridItemProps> // GridItem 的 props\n }\n\n export interface ZnSearchProps {\n modeValue?: Record<string, any> /** 搜索表单值 */\n schema?: ZnSearchSchemaProps[] /** 搜索配置列 */\n position?: ActionPosition /** Action 位置,block 代表换行 */\n useCollapsed?: boolean /** 是否使用折叠功能 */\n searchCols?: number | Record<BreakPoint, number> /** 响应式布局 */\n collapsed?: boolean /** 是否默认折叠搜索项 */\n collapsedRows?: number /** 可见的行数 */\n gap?: [number, number] | number /** 行和列间距 */\n showSearch?: boolean /** 是否展示搜索按钮 */\n showReset?: boolean /** 是否展示重置按钮 */\n searchLoading?: boolean /** 搜索按钮的 loading */\n resetLoading?: boolean /** 重置按钮的 loading */\n removeNoValue?: boolean /** 是否去除空值项 */\n enumMapProps?: Map<string, Record<string, any>[]> /** 存储 enum 值。该 props 是搭配 ProTable 使用,因为 ProTable 已经初始化部分字典数据,因此不需要 ZnForm 再次请求这些字典数据 */\n }\n\n // 默认值\n const props = defineProps({\n modeValue: { type: Object, required: false, default: () => ({}) },\n schema: { type: Array, required: false, default: () => [] },\n position: { type: String, required: false, default: 'right' },\n useCollapsed: { type: Boolean, required: false, default: true },\n searchCols: { type: [Number, Object], required: false, default: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }) },\n collapsed: { type: Boolean, required: false, default: true },\n collapsedRows: { type: Number, required: false, default: 1 },\n gap: { type: [Array, Number], required: false, default: () => [20, 0] },\n showSearch: { type: Boolean, required: false, default: true },\n showReset: { type: Boolean, required: false, default: true },\n searchLoading: { type: Boolean, required: false, default: false },\n resetLoading: { type: Boolean, required: false, default: false },\n removeNoValue: { type: Boolean, required: false, default: true },\n enumMapProps: { type: Map, required: false }\n})\n\n type ZnSearchEmits = {\n search: [params: Record<string, any>] // 搜索方法\n reset: [params: Record<string, any>] // 重置方法\n register: [expose: ZnSearchExpose] // 注册方法\n validate: [prop: FormItemProp, isValid: boolean, message: string] // ElForm 触发验证事件\n }\n\n /**\n * 将 ZnSearchEmits 类型的 key 变为 on{Key} 的形式\n * @example 返回 { onSearch: (params: Record<string, any>) => void }\n */\n export type ZnSearchOnEmits = keyOnPrefix<ZnSearchEmits>\n\n const emits = defineEmits([\"search\", \"reset\", \"register\", \"validate\"])\n\n const { formRegister, formMethods, formElState } = useZnForm()\n const { getElFormExpose, getFormData, getFormExpose } = formMethods\n\n const schemaForm = computed(() =>\n props.schema\n .filter((item) => {\n const { formRef } = formElState\n const destroy = formRef?.isDestroy(item) || item.destroy\n const hidden = formRef?.isHidden(item) || item.hidden\n\n if (destroy) delete unref(model)[item.prop]\n\n return !(destroy || hidden)\n })\n .map((item, index) => {\n item._index = index\n return item\n })\n )\n\n // 搜索参数\n const model = defineModel<Record<string, any>>({ default: {} })\n\n const mergeProps = ref<ZnSearchProps>({})\n\n const getProps = computed(() => {\n const propsObj = { ...props }\n Object.assign(propsObj, unref(mergeProps))\n return propsObj\n })\n\n // 获取响应式设置\n const getResponsive = (item: ZnSearchSchemaProps) => {\n return {\n span: item.grid?.span,\n offset: item.grid?.offset ?? 0,\n xs: item.grid?.xs,\n sm: item.grid?.sm,\n md: item.grid?.md,\n lg: item.grid?.lg,\n xl: item.grid?.xl\n }\n }\n\n // 获取响应式断点\n const gridRef = shallowRef<GridInstance>()\n const breakPoint = computed<BreakPoint>(() => unref(gridRef)?.breakPoint || 'xl')\n\n const rowSpan = computed(() => {\n const { searchCols } = unref(getProps)\n if (typeof searchCols === 'number') return searchCols\n return searchCols[unref(breakPoint)]\n })\n\n // 判断是否显示 展开/合并 按钮\n const showCollapse = computed(() => {\n const { schema, searchCols } = unref(getProps)\n\n let show = false\n schema.reduce((prev, current) => {\n prev +=\n ((current.grid && current.grid[unref(breakPoint)]?.span) ?? current.grid?.span ?? 1) +\n ((current.grid && current.grid[unref(breakPoint)]?.offset) ?? current.grid?.offset ?? 0)\n\n if (typeof searchCols !== 'number') {\n if (prev >= searchCols[unref(breakPoint)]) show = true\n } else {\n if (prev >= searchCols) show = true\n }\n return prev\n }, 0)\n return show\n })\n\n const isRightPosition = computed(() => {\n const { position } = unref(getProps)\n return position === 'right'\n })\n\n const isBlock = computed(() => {\n const { position = 'right' } = unref(getProps)\n return ['block-left', 'block-center', 'block-right'].includes(position)\n })\n\n const style = computed(() => {\n const { position = 'right' } = unref(getProps)\n const style = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n marginBottom: '18px'\n }\n if (['block-left', 'left'].includes(position)) return { ...style, justifyContent: 'flex-start' }\n if (['block-center'].includes(position)) return { ...style, justifyContent: 'center' }\n if (['block-right', 'right'].includes(position)) return { ...style, justifyContent: 'flex-end' }\n return style\n })\n\n const filterModel = async () => {\n const model = await getFormData()\n if (unref(getProps).removeNoValue) {\n // 使用 reduce 过滤空值,并返回一个新对象\n return Object.keys(model).reduce((prev: any, next: any) => {\n const value = model[next]\n if (!isEmpty(value)) {\n if (isObject(value)) {\n if (Object.keys(value).length > 0) prev[next] = value\n } else prev[next] = value\n }\n return prev\n }, {})\n }\n return model\n }\n\n const search = async () => {\n const elFormExpose = await getElFormExpose()\n await elFormExpose?.validate(async (isValid) => {\n if (isValid) {\n const model = await filterModel()\n emits('search', model)\n }\n })\n }\n\n const reset = async () => {\n const elFormExpose = await getElFormExpose()\n elFormExpose?.resetFields()\n const model = await filterModel()\n emits('reset', model)\n }\n\n const onFormValidate = (prop: FormItemProp, isValid: boolean, message: string) => {\n emits('validate', prop, isValid, message)\n }\n\n const toggleCollapsed = (isCollapsed?: boolean) => {\n const { collapsed } = unref(getProps)\n\n if (isCollapsed === undefined) return setProps({ collapsed: !collapsed })\n return setProps({ collapsed: isCollapsed })\n }\n\n // 设置 form 的值\n const setValues = async (data: Record<string, any> = {}) => {\n model.value = Object.assign(unref(model), data)\n const formExpose = await getFormExpose()\n formExpose?.setValues(data)\n }\n\n // 设置 ZnForm 组件的 props\n const setProps = (props: ZnSearchProps = {}) => {\n mergeProps.value = Object.assign(unref(mergeProps), props)\n }\n\n // 设置 schema\n const setSchema = (schemaProps: FormSetProps[]) => {\n const { schema } = unref(getProps)\n for (const v of schema) {\n for (const item of schemaProps) {\n if (v.prop === item.prop) {\n setProp(v, item.field, item.value)\n }\n }\n }\n }\n\n // 添加 schema\n const addSchema = (formSchema: ZnFormSchemaProps, prop?: number | string, position: 'before' | 'after' = 'after') => {\n const { schema } = unref(getProps)\n\n if (isString(prop)) {\n return schema.forEach((s, i) => {\n if (s.prop === prop) position === 'after' ? formSchema.splice(i + 1, 0, s) : formSchema.splice(i, 0, s)\n })\n }\n if (prop !== undefined) return schema.splice(prop, 0, formSchema)\n return schema.push(formSchema)\n }\n\n // 删除 schema\n const delSchema = (prop: string) => {\n const { schema } = unref(getProps)\n\n const index = schema.findIndex((item) => item.prop === prop)\n if (index > -1) {\n schema.splice(index, 1)\n }\n }\n\n const defaultExpose = {\n getElFormExpose,\n getFormExpose,\n getFormData,\n toggleCollapsed,\n setProps,\n setSchema,\n setValues,\n delSchema,\n addSchema\n }\n\n onMounted(() => {\n emits('register', defaultExpose)\n })\n\n defineExpose(defaultExpose)\n</script>\n"],"names":["props","__props","emits","__emit","formRegister","formMethods","formElState","useZnForm","getElFormExpose","getFormData","getFormExpose","schemaForm","computed","schema","filter","item","formRef","destroy","isDestroy","hidden","isHidden","unref","model","prop","map","index","_index","_useModel","mergeProps","ref","getProps","propsObj","Object","assign","getResponsive","span","grid","offset","xs","sm","md","lg","xl","gridRef","shallowRef","breakPoint","rowSpan","searchCols","showCollapse","show","reduce","prev","current","isRightPosition","position","isBlock","includes","style","display","alignItems","justifyContent","marginBottom","filterModel","__name","async","removeNoValue","keys","next","value","isEmpty","isObject","length","search","elFormExpose","validate","isValid","reset","resetFields","onFormValidate","message","toggleCollapsed","isCollapsed","collapsed","setProps","setValues","data","formExpose","setSchema","schemaProps","v","setProp","field","addSchema","formSchema","isString","forEach","s","i","splice","push","defaultExpose","delSchema","findIndex","onMounted","__expose"],"mappings":"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"}
@@ -1,15 +1,15 @@
1
- import{defineComponent as e,computed as l,resolveComponent as t,createElementBlock as n,openBlock as i,createCommentVNode as o,createBlock as a,Fragment as d,renderList as r,withCtx as u,createTextVNode as s,toDisplayString as m,createVNode as c,unref as p,withDirectives as f,resolveDynamicComponent as y,vShow as v}from"vue";import{ArrowDown as b}from"@element-plus/icons-vue";var h=Object.defineProperty,w=(e,l)=>h(e,"name",{value:l,configurable:!0});const k={class:"operation-btns",style:{display:"flex","align-items":"center","justify-content":"center"}};var x=e({__name:"index",props:{btns:{type:Array,required:!1},maxCount:{type:Number,required:!1,default:3},moreText:{type:String,required:!1,default:"更多"},minWidth:{type:String,required:!1,default:"120px"},row:{required:!1}},emits:["btnClick"],setup(e,{emit:h}){const x=e,C=h,g=l((()=>x.row||{})),_=l((()=>(x.btns||[]).filter((e=>j(e))))),z=l((()=>_.value.slice(0,x.maxCount))),q=l((()=>_.value.slice(x.maxCount))),S=l((()=>q.value.length>0)),j=w((e=>void 0===e.show||null===e.show||("boolean"==typeof e.show?e.show:"function"!=typeof e.show||e.show(g.value))),"shouldShowBtn"),B=w((e=>{C("btnClick",e.name,g.value,e)}),"handleBtnClick"),T=w((e=>{C("btnClick",e.name,g.value,e)}),"handleDropdownCommand");return(e,l)=>{const h=t("el-button"),C=t("el-icon"),g=t("el-dropdown-item"),_=t("el-dropdown-menu"),W=t("el-dropdown");return i(),n("div",k,[o(" 直接显示的按钮 "),(i(!0),n(d,null,r(z.value,((e,l)=>(i(),n(d,{key:e.name},[j(e)?(i(),a(h,{key:0,type:e.type||"text",size:e.size||"small",disabled:e.disabled,icon:e.icon,link:"",onClick:w((l=>B(e)),"onClick")},{default:u((()=>[s(m(e.label),1
1
+ import{defineComponent as e,computed as l,resolveComponent as n,createElementBlock as t,openBlock as i,createCommentVNode as o,createBlock as a,Fragment as r,renderList as d,withCtx as u,createTextVNode as s,toDisplayString as m,createVNode as p,unref as c,withDirectives as f,resolveDynamicComponent as y,vShow as v}from"vue";import{ArrowDown as b}from"@element-plus/icons-vue";var h=Object.defineProperty,w=(e,l)=>h(e,"name",{value:l,configurable:!0});const k={class:"operation-btns",style:{display:"flex","align-items":"center","justify-content":"center"}};var x=e({__name:"index",props:{btns:{type:Array,required:!1},maxCount:{type:Number,required:!1,default:3},moreText:{type:String,required:!1,default:"更多"},minWidth:{type:String,required:!1,default:"120px"},row:{required:!1}},emits:["btnClick"],setup(e,{emit:h}){const x=e,C=h,g=l((()=>x.row||{})),_=l((()=>(x.btns||[]).filter((e=>j(e))))),z=l((()=>_.value.slice(0,x.maxCount))),q=l((()=>_.value.slice(x.maxCount))),S=l((()=>q.value.length>0)),j=w((e=>void 0===e.show||null===e.show||("boolean"==typeof e.show?e.show:"function"!=typeof e.show||e.show(g.value))),"shouldShowBtn"),B=w((e=>{C("btnClick",e.name,g.value,e)}),"handleBtnClick"),T=w((e=>{C("btnClick",e.name,g.value,e)}),"handleDropdownCommand");return(e,l)=>{const h=n("el-button"),C=n("el-icon"),g=n("el-dropdown-item"),_=n("el-dropdown-menu"),W=n("el-dropdown");return i(),t("div",k,[o(" 直接显示的按钮 "),(i(!0),t(r,null,d(z.value,((e,l)=>(i(),t(r,{key:e.name},[j(e)?(i(),a(h,{key:0,type:e.type||"primary",size:e.size||"small",disabled:e.disabled,icon:e.icon,link:"",onClick:w((l=>B(e)),"onClick")},{default:u((()=>[s(m(e.label),1
2
2
  /* TEXT */)])),_:2
3
3
  /* DYNAMIC */},1032,["type","size","disabled","icon","onClick"])):o("v-if",!0)],64
4
4
  /* STABLE_FRAGMENT */)))),128
5
- /* KEYED_FRAGMENT */)),o(" 更多按钮下拉菜单 "),S.value?(i(),a(W,{key:0,style:{"margin-left":"8px"},trigger:"hover","min-width":x.minWidth||"120px",onCommand:T},{dropdown:u((()=>[c(_,null,{default:u((()=>[(i(!0),n(d,null,r(q.value,(e=>f((i(),a(g,{key:e.name,command:e,disabled:e.disabled},{default:u((()=>[e.icon?(i(),a(C,{key:0,style:{"margin-right":"5px"}},{default:u((()=>[(i(),a(y(e.icon)))])),_:2
5
+ /* KEYED_FRAGMENT */)),o(" 更多按钮下拉菜单 "),S.value?(i(),a(W,{key:0,style:{"margin-left":"8px"},trigger:"hover","min-width":x.minWidth||"120px",onCommand:T},{dropdown:u((()=>[p(_,null,{default:u((()=>[(i(!0),t(r,null,d(q.value,(e=>f((i(),a(g,{key:e.name,command:e,disabled:e.disabled},{default:u((()=>[e.icon?(i(),a(C,{key:0,style:{"margin-right":"5px"}},{default:u((()=>[(i(),a(y(e.icon)))])),_:2
6
6
  /* DYNAMIC */},1024
7
7
  /* DYNAMIC_SLOTS */)):o("v-if",!0),s(" "+m(e.label),1
8
8
  /* TEXT */)])),_:2
9
9
  /* DYNAMIC */},1032,["command","disabled"])),[[v,j(e)]]))),128
10
10
  /* KEYED_FRAGMENT */))])),_:1
11
- /* STABLE */})])),default:u((()=>[c(h,{type:"text",size:x.size||"small",link:""},{default:u((()=>[s(m(x.moreText||"更多")+" ",1
12
- /* TEXT */),c(C,{class:"el-icon--right"},{default:u((()=>[c(p(b))])),_:1
11
+ /* STABLE */})])),default:u((()=>[p(h,{type:"primary",size:x.size||"small",link:""},{default:u((()=>[s(m(x.moreText||"更多")+" ",1
12
+ /* TEXT */),p(C,{class:"el-icon--right"},{default:u((()=>[p(c(b))])),_:1
13
13
  /* STABLE */})])),_:1
14
14
  /* STABLE */},8,["size"])])),_:1
15
15
  /* STABLE */},8,["min-width"])):o("v-if",!0)])}}});export{x as default};
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../../../packages/components/znTable/src/components/OperationBtns/index.vue"],"sourcesContent":["<template>\n <div class=\"operation-btns\" style=\"display: flex; align-items: center; justify-content: center\">\n <!-- 直接显示的按钮 -->\n <template v-for=\"(btn, index) in visibleBtns\" :key=\"btn.name\">\n <el-button\n v-if=\"shouldShowBtn(btn)\"\n :type=\"btn.type || 'text'\"\n :size=\"btn.size || 'small'\"\n :disabled=\"btn.disabled\"\n :icon=\"btn.icon\"\n link\n @click=\"handleBtnClick(btn)\">\n {{ btn.label }}\n </el-button>\n </template>\n\n <!-- 更多按钮下拉菜单 -->\n <el-dropdown v-if=\"hasMoreBtns\" style=\"margin-left: 8px\" trigger=\"hover\" :min-width=\"props.minWidth || '120px'\" @command=\"handleDropdownCommand\">\n <el-button :type=\"'text'\" :size=\"props.size || 'small'\" link>\n {{ props.moreText || '更多' }}\n <el-icon class=\"el-icon--right\">\n <ArrowDown />\n </el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item v-for=\"btn in moreBtns\" :key=\"btn.name\" :command=\"btn\" :disabled=\"btn.disabled\" v-show=\"shouldShowBtn(btn)\">\n <el-icon v-if=\"btn.icon\" style=\"margin-right: 5px\">\n <component :is=\"btn.icon\" />\n </el-icon>\n {{ btn.label }}\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"OperationBtns\">\n import { computed, inject } from 'vue'\n import { ArrowDown } from '@element-plus/icons-vue'\n import type { OperationBtnProps } from '../../interface'\n\n interface Props {\n /** 操作按钮配置 */\n btns?: OperationBtnProps[]\n /** 最大显示按钮数量,默认为3 */\n maxCount?: number\n /** 更多按钮文本 */\n moreText?: string\n /** 下拉菜单最小宽度 */\n minWidth?: string\n [key: string]: any\n row?: any\n }\n\n const props = defineProps({\n btns: { type: Array, required: false },\n maxCount: { type: Number, required: false, default: 3 },\n moreText: { type: String, required: false, default: '更多' },\n minWidth: { type: String, required: false, default: '120px' },\n row: { required: false }\n})\n\n const emit = defineEmits([\"btnClick\"])\n\n // 获取当前行数据的注入,用于按钮显示逻辑判断\n const currentRow = computed(() => props.row || {})\n\n // 过滤出需要显示的按钮\n const availableBtns = computed(() => {\n return (props.btns || []).filter((btn) => shouldShowBtn(btn))\n })\n\n // 直接显示的按钮\n const visibleBtns = computed(() => {\n return availableBtns.value.slice(0, props.maxCount)\n })\n\n // 更多菜单中的按钮\n const moreBtns = computed(() => {\n return availableBtns.value.slice(props.maxCount)\n })\n\n // 是否有更多按钮\n const hasMoreBtns = computed(() => {\n return moreBtns.value.length > 0\n })\n\n // 判断按钮是否应该显示\n const shouldShowBtn = (btn: OperationBtnProps): boolean => {\n if (btn.show === undefined || btn.show === null) return true\n if (typeof btn.show === 'boolean') return btn.show\n if (typeof btn.show === 'function') return btn.show(currentRow.value)\n return true\n }\n\n // 处理按钮点击事件\n const handleBtnClick = (btn: OperationBtnProps) => {\n emit('btnClick', btn.name, currentRow.value, btn)\n }\n\n // 处理下拉菜单点击事件\n const handleDropdownCommand = (btn: OperationBtnProps) => {\n emit('btnClick', btn.name, currentRow.value, btn)\n }\n</script>\n"],"names":["props","__props","emit","__emit","currentRow","computed","row","availableBtns","btns","filter","btn","shouldShowBtn","visibleBtns","value","slice","maxCount","moreBtns","hasMoreBtns","length","show","handleBtnClick","name","handleDropdownCommand"],"mappings":"qzBAwDE,MAAMA,EAAQC,EAQRC,EAAOC,EAGPC,EAAaC,GAAS,IAAML,EAAMM,KAAO,CAAA,IAGzCC,EAAgBF,GAAS,KACrBL,EAAMQ,MAAQ,IAAIC,QAAQC,GAAQC,EAAcD,OAIpDE,EAAcP,GAAS,IACpBE,EAAcM,MAAMC,MAAM,EAAGd,EAAMe,YAItCC,EAAWX,GAAS,IACjBE,EAAcM,MAAMC,MAAMd,EAAMe,YAInCE,EAAcZ,GAAS,IACpBW,EAASH,MAAMK,OAAS,IAI3BP,KAAiBD,QACJ,IAAbA,EAAIS,MAAmC,OAAbT,EAAIS,OACV,kBAAbT,EAAIS,KAA2BT,EAAIS,KACtB,mBAAbT,EAAIS,MAA4BT,EAAIS,KAAKf,EAAWS,SAH3C,iBAQhBO,KAAkBV,IACtBR,EAAK,WAAYQ,EAAIW,KAAMjB,EAAWS,MAAOH,EAAG,GAD3B,kBAKjBY,KAAyBZ,IAC7BR,EAAK,WAAYQ,EAAIW,KAAMjB,EAAWS,MAAOH,EAAG,GADpB;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../../../packages/components/znTable/src/components/OperationBtns/index.vue"],"sourcesContent":["<template>\n <div class=\"operation-btns\" style=\"display: flex; align-items: center; justify-content: center\">\n <!-- 直接显示的按钮 -->\n <template v-for=\"(btn, index) in visibleBtns\" :key=\"btn.name\">\n <el-button\n v-if=\"shouldShowBtn(btn)\"\n :type=\"btn.type || 'primary'\"\n :size=\"btn.size || 'small'\"\n :disabled=\"btn.disabled\"\n :icon=\"btn.icon\"\n link\n @click=\"handleBtnClick(btn)\">\n {{ btn.label }}\n </el-button>\n </template>\n\n <!-- 更多按钮下拉菜单 -->\n <el-dropdown v-if=\"hasMoreBtns\" style=\"margin-left: 8px\" trigger=\"hover\" :min-width=\"props.minWidth || '120px'\" @command=\"handleDropdownCommand\">\n <el-button type=\"primary\" :size=\"props.size || 'small'\" link>\n {{ props.moreText || '更多' }}\n <el-icon class=\"el-icon--right\">\n <ArrowDown />\n </el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item v-for=\"btn in moreBtns\" :key=\"btn.name\" :command=\"btn\" :disabled=\"btn.disabled\" v-show=\"shouldShowBtn(btn)\">\n <el-icon v-if=\"btn.icon\" style=\"margin-right: 5px\">\n <component :is=\"btn.icon\" />\n </el-icon>\n {{ btn.label }}\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"OperationBtns\">\n import { computed, inject } from 'vue'\n import { ArrowDown } from '@element-plus/icons-vue'\n import type { OperationBtnProps } from '../../interface'\n\n interface Props {\n /** 操作按钮配置 */\n btns?: OperationBtnProps[]\n /** 最大显示按钮数量,默认为3 */\n maxCount?: number\n /** 更多按钮文本 */\n moreText?: string\n /** 下拉菜单最小宽度 */\n minWidth?: string\n [key: string]: any\n row?: any\n }\n\n const props = defineProps({\n btns: { type: Array, required: false },\n maxCount: { type: Number, required: false, default: 3 },\n moreText: { type: String, required: false, default: '更多' },\n minWidth: { type: String, required: false, default: '120px' },\n row: { required: false }\n})\n\n const emit = defineEmits([\"btnClick\"])\n\n // 获取当前行数据的注入,用于按钮显示逻辑判断\n const currentRow = computed(() => props.row || {})\n\n // 过滤出需要显示的按钮\n const availableBtns = computed(() => {\n return (props.btns || []).filter((btn) => shouldShowBtn(btn))\n })\n\n // 直接显示的按钮\n const visibleBtns = computed(() => {\n return availableBtns.value.slice(0, props.maxCount)\n })\n\n // 更多菜单中的按钮\n const moreBtns = computed(() => {\n return availableBtns.value.slice(props.maxCount)\n })\n\n // 是否有更多按钮\n const hasMoreBtns = computed(() => {\n return moreBtns.value.length > 0\n })\n\n // 判断按钮是否应该显示\n const shouldShowBtn = (btn: OperationBtnProps): boolean => {\n if (btn.show === undefined || btn.show === null) return true\n if (typeof btn.show === 'boolean') return btn.show\n if (typeof btn.show === 'function') return btn.show(currentRow.value)\n return true\n }\n\n // 处理按钮点击事件\n const handleBtnClick = (btn: OperationBtnProps) => {\n emit('btnClick', btn.name, currentRow.value, btn)\n }\n\n // 处理下拉菜单点击事件\n const handleDropdownCommand = (btn: OperationBtnProps) => {\n emit('btnClick', btn.name, currentRow.value, btn)\n }\n</script>\n"],"names":["props","__props","emit","__emit","currentRow","computed","row","availableBtns","btns","filter","btn","shouldShowBtn","visibleBtns","value","slice","maxCount","moreBtns","hasMoreBtns","length","show","handleBtnClick","name","handleDropdownCommand"],"mappings":"qzBAwDE,MAAMA,EAAQC,EAQRC,EAAOC,EAGPC,EAAaC,GAAS,IAAML,EAAMM,KAAO,CAAA,IAGzCC,EAAgBF,GAAS,KACrBL,EAAMQ,MAAQ,IAAIC,QAAQC,GAAQC,EAAcD,OAIpDE,EAAcP,GAAS,IACpBE,EAAcM,MAAMC,MAAM,EAAGd,EAAMe,YAItCC,EAAWX,GAAS,IACjBE,EAAcM,MAAMC,MAAMd,EAAMe,YAInCE,EAAcZ,GAAS,IACpBW,EAASH,MAAMK,OAAS,IAI3BP,KAAiBD,QACJ,IAAbA,EAAIS,MAAmC,OAAbT,EAAIS,OACV,kBAAbT,EAAIS,KAA2BT,EAAIS,KACtB,mBAAbT,EAAIS,MAA4BT,EAAIS,KAAKf,EAAWS,SAH3C,iBAQhBO,KAAkBV,IACtBR,EAAK,WAAYQ,EAAIW,KAAMjB,EAAWS,MAAOH,EAAG,GAD3B,kBAKjBY,KAAyBZ,IAC7BR,EAAK,WAAYQ,EAAIW,KAAMjB,EAAWS,MAAOH,EAAG,GADpB;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znTreeFilter/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\r\nimport index from './src/index.vue'\r\n\r\nexport const ZnTreeFilter = withInstall(index) // 增加类型\r\n\r\nexport default ZnTreeFilter\r\n"],"names":["ZnTreeFilter","withInstall","index"],"mappings":"sHAGa,MAAAA,EAAeC,EAAYC"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/znTreeFilter/index.ts"],"sourcesContent":["import { withInstall } from '../../utils/install'\nimport index from './src/index.vue'\n\nexport const ZnTreeFilter = withInstall(index) // 增加类型\n\nexport default ZnTreeFilter\n"],"names":["ZnTreeFilter","withInstall","index"],"mappings":"sHAGa,MAAAA,EAAeC,EAAYC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znTreeFilter/src/index.vue"],"sourcesContent":["<template>\r\n <div class=\"zn-tree-filter\" :style=\"{ width, height }\">\r\n <h4 v-if=\"title\" class=\"title sle\">\r\n {{ title }}\r\n </h4>\r\n <div class=\"flex gap-10\">\r\n <el-input v-model=\"filterText\" placeholder=\"输入关键字进行过滤\" clearable />\r\n <slot name=\"toolButton\"></slot>\r\n </div>\r\n <el-scrollbar :style=\"{ height: title ? `calc(100% - 95px)` : `calc(100% - 56px)` }\">\r\n <el-tree\r\n ref=\"treeRef\"\r\n :default-expand-all=\"defaultExpandAll\"\r\n :node-key=\"id\"\r\n :data=\"multiple ? treeData : treeAllData\"\r\n :show-checkbox=\"multiple\"\r\n :check-strictly=\"false\"\r\n :current-node-key=\"!multiple ? selected : ''\"\r\n :highlight-current=\"!multiple\"\r\n :expand-on-click-node=\"false\"\r\n :check-on-click-node=\"multiple\"\r\n :props=\"defaultProps\"\r\n :filter-node-method=\"filterNode\"\r\n :default-checked-keys=\"multiple ? selected : []\"\r\n :default-expanded-keys=\"defaultExpandKeys\"\r\n @node-click=\"handleNodeClick\"\r\n @check=\"handleCheckChange\">\r\n <template #default=\"scope\">\r\n <component :is=\"props.render\" v-bind=\"scope\" v-if=\"props.data\" />\r\n <span class=\"el-tree-node__label\" v-else>\r\n <slot v-bind=\"scope\">\r\n {{ scope.node.label }}\r\n </slot>\r\n </span>\r\n </template>\r\n </el-tree>\r\n </el-scrollbar>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\" name=\"ZnTreeFilter\">\r\n import { nextTick, onBeforeMount, ref, watch, VNode } from 'vue'\r\n\r\n import { ElTree } from 'element-plus'\r\n import { utils } from '../../../functions'\r\n defineOptions({ name: 'ZnTreeFilter' })\r\n // 接收父组件参数并设置默认值\r\n interface TreeFilterProps {\r\n requestApi?: (data?: any) => Promise<any> /** 请求分类数据的 api ==> 非必传 */\r\n requestParams?: any /** 请求分类数据的参数 ==> 非必传 */\r\n data?: { [key: string]: any }[] /** 分类数据,如果有分类数据,则不会执行 api 请求 ==> 非必传 */\r\n title?: string /** treeFilter 标题 ==> 非必传 */\r\n id?: string /** 选择的id ==> 非必传,默认为 “id” */\r\n label?: string /** 显示的label ==> 非必传,默认为 “label” */\r\n multiple?: boolean /** 是否为多选 ==> 非必传,默认为 false */\r\n defaultValue?: any /** 默认选中的值 ==> 非必传 */\r\n transformDataToTree?: boolean /** 是否将数据转换为树形结构 ==> 非必传,默认为 true */\r\n width?: string /** 默认400px */\r\n height?: string /** 默认600px */\r\n defaultExpandAll?: boolean /** 默认全部展开 */\r\n defaultExpandKeys?: any\r\n render?: (scope: any) => VNode\r\n }\r\n const props = defineProps({\n requestApi: { type: Function, required: false },\n requestParams: { required: false, default: {} },\n data: { type: Array, required: false },\n title: { type: String, required: false },\n id: { type: String, required: false, default: 'id' },\n label: { type: String, required: false, default: 'label' },\n multiple: { type: Boolean, required: false, default: false },\n defaultValue: { required: false },\n transformDataToTree: { type: Boolean, required: false, default: true },\n width: { type: String, required: false, default: '400px' },\n height: { type: String, required: false, default: '600px' },\n defaultExpandAll: { type: Boolean, required: false, default: true },\n defaultExpandKeys: { required: false, default: [] },\n render: { type: Function, required: false }\n})\r\n\r\n const defaultProps = {\r\n children: 'children',\r\n label: props.label\r\n }\r\n\r\n const treeRef = ref<InstanceType<typeof ElTree>>()\r\n const treeData = ref<{ [key: string]: any }[]>([])\r\n const treeAllData = ref<{ [key: string]: any }[]>([])\r\n\r\n const emits = defineEmits(['dataReady', 'change'])\r\n\r\n const selected = ref()\r\n const setSelected = () => {\r\n if (props.multiple) selected.value = Array.isArray(props.defaultValue) ? props.defaultValue : [props.defaultValue]\r\n else selected.value = typeof props.defaultValue === 'string' ? props.defaultValue : ''\r\n }\r\n\r\n const getList = async () => {\r\n if (props.requestApi) {\r\n const res = await props.requestApi!(props.requestParams)\r\n let list = res.result.list ?? res.result\r\n // 后端说第六层没有id,所以补上 转树形的时候要用到\r\n list.map((item: any, index: number) => {\r\n if (!item.id) {\r\n item.id = `${item.treeLevel}-${index}`\r\n }\r\n })\r\n if (props.transformDataToTree) {\r\n treeData.value = utils.treeListUtil(list)\r\n } else {\r\n treeData.value = list\r\n }\r\n // treeAllData.value = [{ id: '', [props.label]: '全部' }, ...treeData.value]\r\n treeAllData.value = [...treeData.value]\r\n emits('dataReady', list)\r\n }\r\n }\r\n\r\n onBeforeMount(() => {\r\n setSelected()\r\n getList()\r\n })\r\n\r\n watch(\r\n () => props.requestParams,\r\n (val) => {\r\n if (val) {\r\n getList()\r\n }\r\n },\r\n {\r\n deep: true\r\n }\r\n )\r\n\r\n // 使用 nextTick 防止打包后赋值不生效,开发环境是正常的\r\n watch(\r\n () => props.defaultValue,\r\n () => nextTick(() => setSelected()),\r\n { deep: true, immediate: true }\r\n )\r\n\r\n watch(\r\n () => props.data,\r\n () => {\r\n if (props.data?.length) {\r\n treeData.value = props.data\r\n // treeAllData.value = [{ id: '', [props.label]: '全部' }, ...props.data]\r\n treeAllData.value = [...props.data]\r\n }\r\n },\r\n { deep: true, immediate: true }\r\n )\r\n\r\n const filterText = ref('')\r\n watch(filterText, (val) => {\r\n treeRef.value!.filter(val)\r\n })\r\n\r\n // 过滤\r\n const filterNode = (value: string, data: { [key: string]: any }, node: any) => {\r\n if (!value) return true\r\n let parentNode = node.parent\r\n let labels = [node.label]\r\n let level = 1\r\n while (level < node.level) {\r\n labels = [...labels, parentNode.label]\r\n parentNode = parentNode.parent\r\n level++\r\n }\r\n return labels.some((label) => label.indexOf(value) !== -1)\r\n }\r\n\r\n // emit\r\n // const emit = defineEmits<{\r\n // change: [value: any],\r\n // }>()\r\n\r\n // 单选\r\n const handleNodeClick = (data: { [key: string]: any }) => {\r\n if (props.multiple) return\r\n emits('change', data[props.id], data)\r\n }\r\n\r\n // 多选\r\n const handleCheckChange = () => {\r\n emits('change', treeRef.value?.getCheckedNodes())\r\n }\r\n\r\n const setCheckedKeys = (keys) => {\r\n treeRef.value?.setCheckedKeys(keys)\r\n }\r\n\r\n // 暴露给父组件使用\r\n defineExpose({ treeData, treeAllData, treeRef, setCheckedKeys, getList })\r\n</script>\r\n\r\n<style scoped lang=\"scss\"></style>\r\n"],"names":["props","__props","defaultProps","children","label","treeRef","ref","treeData","treeAllData","emits","__emit","selected","setSelected","__name","multiple","value","Array","isArray","defaultValue","getList","async","requestApi","res","requestParams","list","result","map","item","index","id","treeLevel","transformDataToTree","utils","treeListUtil","onBeforeMount","watch","val","deep","nextTick","immediate","data","length","filterText","filter","filterNode","node","parentNode","parent","labels","level","some","indexOf","handleNodeClick","handleCheckChange","getCheckedNodes","setCheckedKeys","keys","__expose"],"mappings":"+4CA+DE,MAAMA,EAAQC,EAiBRC,EAAe,CACnBC,SAAU,WACVC,MAAOJ,EAAMI,OAGTC,EAAUC,IACVC,EAAWD,EAA8B,IACzCE,EAAcF,EAA8B,IAE5CG,EAAQC,EAERC,EAAWL,IACXM,EAAoBC,GAAA,KACpBb,EAAMc,SAAmBH,EAAAI,MAAQC,MAAMC,QAAQjB,EAAMkB,cAAgBlB,EAAMkB,aAAe,CAAClB,EAAMkB,gBACvFH,MAAsC,iBAAvBf,EAAMkB,aAA4BlB,EAAMkB,aAAe,EAAA,GAFlE,eAKdC,EAAsBN,GAAAO,UAC1B,GAAIpB,EAAMqB,WAAY,CACpB,MAAMC,QAAYtB,EAAMqB,WAAYrB,EAAMuB,eAC1C,IAAIC,EAAOF,EAAIG,OAAOD,MAAQF,EAAIG,OAE7BD,EAAAE,KAAI,CAACC,EAAWC,KACdD,EAAKE,KACRF,EAAKE,GAAK,GAAGF,EAAKG,aAAaF,IAAK,IAGpC5B,EAAM+B,oBACCxB,EAAAQ,MAAQiB,EAAMC,aAAaT,GAEpCjB,EAASQ,MAAQS,EAGnBhB,EAAYO,MAAQ,IAAIR,EAASQ,OACjCN,EAAM,YAAae,EAAI,IAjBX,WAqBhBU,GAAc,KACAtB,IACJO,GAAA,IAGVgB,GACE,IAAMnC,EAAMuB,gBACXa,IACKA,GACMjB,GAAA,GAGZ,CACEkB,MAAM,IAKVF,GACE,IAAMnC,EAAMkB,eACZ,IAAMoB,GAAS,IAAM1B,OACrB,CAAEyB,MAAM,EAAME,WAAW,IAG3BJ,GACE,IAAMnC,EAAMwC,OACZ,KACMxC,EAAMwC,MAAMC,SACdlC,EAASQ,MAAQf,EAAMwC,KAEvBhC,EAAYO,MAAQ,IAAIf,EAAMwC,MAAI,GAGtC,CAAEH,MAAM,EAAME,WAAW,IAGrB,MAAAG,EAAapC,EAAI,IACjB6B,EAAAO,GAAaN,IACT/B,EAAAU,MAAO4B,OAAOP,EAAG,IAI3B,MAAMQ,EAAa/B,GAAA,CAACE,EAAeyB,EAA8BK,KAC3D,IAAC9B,EAAc,OAAA,EACnB,IAAI+B,EAAaD,EAAKE,OAClBC,EAAS,CAACH,EAAKzC,OACf6C,EAAQ,EACL,KAAAA,EAAQJ,EAAKI,OAClBD,EAAS,IAAIA,EAAQF,EAAW1C,OAChC0C,EAAaA,EAAWC,OACxBE,IAEK,OAAAD,EAAOE,MAAM9C,IAAqC,IAA3BA,EAAM+C,QAAQpC,IAAa,GAVxC,cAmBbqC,KAAmBZ,IACnBxC,EAAMc,UACVL,EAAM,SAAU+B,EAAKxC,EAAM6B,IAAKW,EAAI,GAFd,mBAMlBa,EAA0BxC,GAAA,KAC9BJ,EAAM,SAAUJ,EAAQU,OAAOuC,kBAAiB,GADxB,qBAIpBC,KAAkBC,IACdnD,EAAAU,OAAOwC,eAAeC,EAAI,GADb,yBAKvBC,EAAa,CAAElD,WAAUC,cAAaH,UAASkD,iBAAgBpC;;;;;;"}
1
+ {"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/components/znTreeFilter/src/index.vue"],"sourcesContent":["<template>\n <div class=\"zn-tree-filter\" :style=\"{ width, height }\">\n <h4 v-if=\"title\" class=\"title sle\">\n {{ title }}\n </h4>\n <div class=\"flex gap-10\">\n <el-input v-model=\"filterText\" placeholder=\"输入关键字进行过滤\" clearable />\n <slot name=\"toolButton\"></slot>\n </div>\n <el-scrollbar :style=\"{ height: title ? `calc(100% - 95px)` : `calc(100% - 56px)` }\">\n <el-tree\n ref=\"treeRef\"\n :default-expand-all=\"defaultExpandAll\"\n :node-key=\"id\"\n :data=\"multiple ? treeData : treeAllData\"\n :show-checkbox=\"multiple\"\n :check-strictly=\"false\"\n :current-node-key=\"!multiple ? selected : ''\"\n :highlight-current=\"!multiple\"\n :expand-on-click-node=\"false\"\n :check-on-click-node=\"multiple\"\n :props=\"defaultProps\"\n :filter-node-method=\"filterNode\"\n :default-checked-keys=\"multiple ? selected : []\"\n :default-expanded-keys=\"defaultExpandKeys\"\n @node-click=\"handleNodeClick\"\n @check=\"handleCheckChange\">\n <template #default=\"scope\">\n <component :is=\"props.render\" v-bind=\"scope\" v-if=\"props.data\" />\n <span class=\"el-tree-node__label\" v-else>\n <slot v-bind=\"scope\">\n {{ scope.node.label }}\n </slot>\n </span>\n </template>\n </el-tree>\n </el-scrollbar>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"ZnTreeFilter\">\n import { nextTick, onBeforeMount, ref, watch, VNode } from 'vue'\n\n import { ElTree } from 'element-plus'\n import { utils } from '../../../functions'\n defineOptions({ name: 'ZnTreeFilter' })\n // 接收父组件参数并设置默认值\n interface TreeFilterProps {\n requestApi?: (data?: any) => Promise<any> /** 请求分类数据的 api ==> 非必传 */\n requestParams?: any /** 请求分类数据的参数 ==> 非必传 */\n data?: { [key: string]: any }[] /** 分类数据,如果有分类数据,则不会执行 api 请求 ==> 非必传 */\n title?: string /** treeFilter 标题 ==> 非必传 */\n id?: string /** 选择的id ==> 非必传,默认为 “id” */\n label?: string /** 显示的label ==> 非必传,默认为 “label” */\n multiple?: boolean /** 是否为多选 ==> 非必传,默认为 false */\n defaultValue?: any /** 默认选中的值 ==> 非必传 */\n transformDataToTree?: boolean /** 是否将数据转换为树形结构 ==> 非必传,默认为 true */\n width?: string /** 默认400px */\n height?: string /** 默认600px */\n defaultExpandAll?: boolean /** 默认全部展开 */\n defaultExpandKeys?: any\n render?: (scope: any) => VNode\n }\n const props = defineProps({\n requestApi: { type: Function, required: false },\n requestParams: { required: false, default: {} },\n data: { type: Array, required: false },\n title: { type: String, required: false },\n id: { type: String, required: false, default: 'id' },\n label: { type: String, required: false, default: 'label' },\n multiple: { type: Boolean, required: false, default: false },\n defaultValue: { required: false },\n transformDataToTree: { type: Boolean, required: false, default: true },\n width: { type: String, required: false, default: '400px' },\n height: { type: String, required: false, default: '600px' },\n defaultExpandAll: { type: Boolean, required: false, default: true },\n defaultExpandKeys: { required: false, default: [] },\n render: { type: Function, required: false }\n})\n\n const defaultProps = {\n children: 'children',\n label: props.label\n }\n\n const treeRef = ref<InstanceType<typeof ElTree>>()\n const treeData = ref<{ [key: string]: any }[]>([])\n const treeAllData = ref<{ [key: string]: any }[]>([])\n\n const emits = defineEmits(['dataReady', 'change'])\n\n const selected = ref()\n const setSelected = () => {\n if (props.multiple) selected.value = Array.isArray(props.defaultValue) ? props.defaultValue : [props.defaultValue]\n else selected.value = typeof props.defaultValue === 'string' ? props.defaultValue : ''\n }\n\n const getList = async () => {\n if (props.requestApi) {\n const res = await props.requestApi!(props.requestParams)\n let list = res.result.list ?? res.result\n // 后端说第六层没有id,所以补上 转树形的时候要用到\n list.map((item: any, index: number) => {\n if (!item.id) {\n item.id = `${item.treeLevel}-${index}`\n }\n })\n if (props.transformDataToTree) {\n treeData.value = utils.treeListUtil(list)\n } else {\n treeData.value = list\n }\n // treeAllData.value = [{ id: '', [props.label]: '全部' }, ...treeData.value]\n treeAllData.value = [...treeData.value]\n emits('dataReady', list)\n }\n }\n\n onBeforeMount(() => {\n setSelected()\n getList()\n })\n\n watch(\n () => props.requestParams,\n (val) => {\n if (val) {\n getList()\n }\n },\n {\n deep: true\n }\n )\n\n // 使用 nextTick 防止打包后赋值不生效,开发环境是正常的\n watch(\n () => props.defaultValue,\n () => nextTick(() => setSelected()),\n { deep: true, immediate: true }\n )\n\n watch(\n () => props.data,\n () => {\n if (props.data?.length) {\n treeData.value = props.data\n // treeAllData.value = [{ id: '', [props.label]: '全部' }, ...props.data]\n treeAllData.value = [...props.data]\n }\n },\n { deep: true, immediate: true }\n )\n\n const filterText = ref('')\n watch(filterText, (val) => {\n treeRef.value!.filter(val)\n })\n\n // 过滤\n const filterNode = (value: string, data: { [key: string]: any }, node: any) => {\n if (!value) return true\n let parentNode = node.parent\n let labels = [node.label]\n let level = 1\n while (level < node.level) {\n labels = [...labels, parentNode.label]\n parentNode = parentNode.parent\n level++\n }\n return labels.some((label) => label.indexOf(value) !== -1)\n }\n\n // emit\n // const emit = defineEmits<{\n // change: [value: any],\n // }>()\n\n // 单选\n const handleNodeClick = (data: { [key: string]: any }) => {\n if (props.multiple) return\n emits('change', data[props.id], data)\n }\n\n // 多选\n const handleCheckChange = () => {\n emits('change', treeRef.value?.getCheckedNodes())\n }\n\n const setCheckedKeys = (keys) => {\n treeRef.value?.setCheckedKeys(keys)\n }\n\n // 暴露给父组件使用\n defineExpose({ treeData, treeAllData, treeRef, setCheckedKeys, getList })\n</script>\n\n<style scoped lang=\"scss\"></style>\n"],"names":["props","__props","defaultProps","children","label","treeRef","ref","treeData","treeAllData","emits","__emit","selected","setSelected","__name","multiple","value","Array","isArray","defaultValue","getList","async","requestApi","res","requestParams","list","result","map","item","index","id","treeLevel","transformDataToTree","utils","treeListUtil","onBeforeMount","watch","val","deep","nextTick","immediate","data","length","filterText","filter","filterNode","node","parentNode","parent","labels","level","some","indexOf","handleNodeClick","handleCheckChange","getCheckedNodes","setCheckedKeys","keys","__expose"],"mappings":"+4CA+DE,MAAMA,EAAQC,EAiBRC,EAAe,CACnBC,SAAU,WACVC,MAAOJ,EAAMI,OAGTC,EAAUC,IACVC,EAAWD,EAA8B,IACzCE,EAAcF,EAA8B,IAE5CG,EAAQC,EAERC,EAAWL,IACXM,EAAoBC,GAAA,KACpBb,EAAMc,SAAmBH,EAAAI,MAAQC,MAAMC,QAAQjB,EAAMkB,cAAgBlB,EAAMkB,aAAe,CAAClB,EAAMkB,gBACvFH,MAAsC,iBAAvBf,EAAMkB,aAA4BlB,EAAMkB,aAAe,EAAA,GAFlE,eAKdC,EAAsBN,GAAAO,UAC1B,GAAIpB,EAAMqB,WAAY,CACpB,MAAMC,QAAYtB,EAAMqB,WAAYrB,EAAMuB,eAC1C,IAAIC,EAAOF,EAAIG,OAAOD,MAAQF,EAAIG,OAE7BD,EAAAE,KAAI,CAACC,EAAWC,KACdD,EAAKE,KACRF,EAAKE,GAAK,GAAGF,EAAKG,aAAaF,IAAK,IAGpC5B,EAAM+B,oBACCxB,EAAAQ,MAAQiB,EAAMC,aAAaT,GAEpCjB,EAASQ,MAAQS,EAGnBhB,EAAYO,MAAQ,IAAIR,EAASQ,OACjCN,EAAM,YAAae,EAAI,IAjBX,WAqBhBU,GAAc,KACAtB,IACJO,GAAA,IAGVgB,GACE,IAAMnC,EAAMuB,gBACXa,IACKA,GACMjB,GAAA,GAGZ,CACEkB,MAAM,IAKVF,GACE,IAAMnC,EAAMkB,eACZ,IAAMoB,GAAS,IAAM1B,OACrB,CAAEyB,MAAM,EAAME,WAAW,IAG3BJ,GACE,IAAMnC,EAAMwC,OACZ,KACMxC,EAAMwC,MAAMC,SACdlC,EAASQ,MAAQf,EAAMwC,KAEvBhC,EAAYO,MAAQ,IAAIf,EAAMwC,MAAI,GAGtC,CAAEH,MAAM,EAAME,WAAW,IAGrB,MAAAG,EAAapC,EAAI,IACjB6B,EAAAO,GAAaN,IACT/B,EAAAU,MAAO4B,OAAOP,EAAG,IAI3B,MAAMQ,EAAa/B,GAAA,CAACE,EAAeyB,EAA8BK,KAC3D,IAAC9B,EAAc,OAAA,EACnB,IAAI+B,EAAaD,EAAKE,OAClBC,EAAS,CAACH,EAAKzC,OACf6C,EAAQ,EACL,KAAAA,EAAQJ,EAAKI,OAClBD,EAAS,IAAIA,EAAQF,EAAW1C,OAChC0C,EAAaA,EAAWC,OACxBE,IAEK,OAAAD,EAAOE,MAAM9C,IAAqC,IAA3BA,EAAM+C,QAAQpC,IAAa,GAVxC,cAmBbqC,KAAmBZ,IACnBxC,EAAMc,UACVL,EAAM,SAAU+B,EAAKxC,EAAM6B,IAAKW,EAAI,GAFd,mBAMlBa,EAA0BxC,GAAA,KAC9BJ,EAAM,SAAUJ,EAAQU,OAAOuC,kBAAiB,GADxB,qBAIpBC,KAAkBC,IACdnD,EAAAU,OAAOwC,eAAeC,EAAI,GADb,yBAKvBC,EAAa,CAAElD,WAAUC,cAAaH,UAASkD,iBAAgBpC;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"is.mjs","sources":["../../../../../packages/functions/modules/is.ts"],"sourcesContent":["/**\r\n * @description 是否为合法的 URL 前缀\r\n */\r\nexport const isExternal = (path: string) => /^(http?:|https?:|mailto:|tel:)/.test(path)\r\n\r\n/**\r\n * @description 是否是有效的 URL\r\n */\r\nexport const isValidURL = (url: string) => {\r\n const reg =\r\n /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/\r\n return reg.test(url)\r\n}\r\n\r\n/**\r\n * @description 判断数据类型\r\n * @param {Any} val 需要判断类型的数据\r\n * @return string\r\n */\r\nexport function isType(val: any) {\r\n if (val === null) return 'null'\r\n if (typeof val !== 'object') return typeof val\r\n else return Object.prototype.toString.call(val).slice(8, -1).toLocaleLowerCase()\r\n}\r\n\r\n/**\r\n * @description 判断值是否未某个类型\r\n */\r\nexport function is(val: unknown, type: string) {\r\n return Object.prototype.toString.call(val) === `[object ${type}]`\r\n}\r\n\r\n/**\r\n * @description 是否为函数\r\n */\r\nexport function isFunction<T = Function>(val: unknown): val is T {\r\n return is(val, 'Function')\r\n}\r\n\r\n/**\r\n * @description:是否已定义\r\n */\r\nexport const isDef = <T = unknown>(val?: T): val is T => {\r\n return typeof val !== 'undefined'\r\n}\r\n\r\nexport const isUnDef = <T = unknown>(val?: T): val is T => {\r\n return !isDef(val)\r\n}\r\n\r\n/**\r\n * @description 是否为对象\r\n */\r\nexport const isObject = (val: any): val is Record<any, any> => {\r\n return val !== null && is(val, 'Object')\r\n}\r\n\r\n/**\r\n * @description 是否为时间\r\n */\r\nexport function isDate(val: unknown): val is Date {\r\n return is(val, 'Date')\r\n}\r\n\r\n/**\r\n * 是否是有效的数字(包含正负整数,0 以及正负浮点数)\r\n */\r\nexport const isNumber = (val: string) => {\r\n const regPos = /^\\d+(\\.\\d+)?$/ // 非负浮点数\r\n const regNeg = /^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/ // 负浮点数\r\n if (regPos.test(val) || regNeg.test(val)) {\r\n return true\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * @description 是否为 AsyncFunction\r\n */\r\nexport function isAsyncFunction<T = any>(val: unknown): val is Promise<T> {\r\n return is(val, 'AsyncFunction')\r\n}\r\n\r\n/**\r\n * @description 是否为 promise\r\n */\r\nexport function isPromise<T = any>(val: unknown): val is Promise<T> {\r\n return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch)\r\n}\r\n\r\n/**\r\n * @description 是否为字符串\r\n */\r\nexport function isString(val: unknown): val is string {\r\n return is(val, 'String')\r\n}\r\n\r\n/**\r\n * @description 是否为boolean类型\r\n */\r\nexport function isBoolean(val: unknown): val is boolean {\r\n return is(val, 'Boolean')\r\n}\r\n\r\n/**\r\n * 是否为数组\r\n */\r\nexport const isArray = (arg: any) => {\r\n if (typeof Array.isArray === 'undefined') {\r\n return Object.prototype.toString.call(arg) === '[object Array]'\r\n }\r\n return Array.isArray(arg)\r\n}\r\n\r\n/**\r\n * @description 是否客户端\r\n */\r\nexport const isClient = () => {\r\n return typeof window !== 'undefined'\r\n}\r\n\r\n/**\r\n * @description 是否为浏览器\r\n */\r\nexport const isWindow = (val: any): val is Window => {\r\n return typeof window !== 'undefined' && is(val, 'Window')\r\n}\r\n\r\nexport const isElement = (val: unknown): val is Element => {\r\n return isObject(val) && !!val.tagName\r\n}\r\n\r\nexport const isServer = typeof window === 'undefined'\r\n\r\n// 是否为图片节点\r\nexport function isImageDom(o: Element) {\r\n return o && ['IMAGE', 'IMG'].includes(o.tagName)\r\n}\r\n\r\nexport function isNull(val: unknown): val is null {\r\n return val === null\r\n}\r\n\r\nexport function isNullAndUnDef(val: unknown): val is null | undefined {\r\n return isUnDef(val) && isNull(val)\r\n}\r\n\r\nexport function isNullOrUnDef(val: unknown): val is null | undefined {\r\n return isUnDef(val) || isNull(val)\r\n}\r\n\r\nexport function isPhone(val: string) {\r\n return /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$/.test(val)\r\n}\r\n\r\n/**\r\n * 是否是图片链接\r\n */\r\nexport const isImgPath = (path: string): boolean => {\r\n return /(https?:\\/\\/|data:image\\/).*?\\.(png|jpg|jpeg|gif|svg|webp|ico)/gi.test(path)\r\n}\r\n\r\n/**\r\n * @description 是否为空值项(包含数组、对象判断)\r\n * @param checkFull 是否检查数组、对象是否为空。默认 true\r\n */\r\nexport const isEmpty = (val: any, checkFull = true): boolean => {\r\n // NaN 的检查\r\n if (isNumber(val) && isNaN(val)) return true\r\n\r\n // 检查空字符串、null 和 undefined\r\n if (val === '' || val === null || val === undefined) return true\r\n\r\n if (!checkFull) return false\r\n\r\n // 检查是不是数组并且长度为 0\r\n if (isArray(val) && val.length === 0) return true\r\n\r\n // 检查是不是对象并且没有自身可枚举属性\r\n if (isObject(val) && Object.keys(val).length === 0) return true\r\n\r\n // 如果以上都不是,则不为空\r\n return false\r\n}\r\n"],"names":["isExternal","__name","path","test","isValidURL","url","isType","val","Object","prototype","toString","call","slice","toLocaleLowerCase","is","type","isFunction","isDef","isUnDef","isObject","isDate","isNumber","isAsyncFunction","isPromise","then","catch","isString","isBoolean","isArray","arg","Array","isClient","window","isWindow","isElement","tagName","isServer","isImageDom","o","includes","isNull","isNullAndUnDef","isNullOrUnDef","isPhone","isImgPath","isEmpty","checkFull","isNaN","length","keys"],"mappings":"2EAGO,MAAMA,EAAcC,GAAAC,GAAiB,iCAAiCC,KAAKD,IAAxD,cAKbE,KAAcC,GAEvB,6TACSF,KAAKE,IAHQ,cAWnB,SAASC,EAAOC,GACjB,OAAQ,OAARA,EAAqB,OACN,iBAARA,SAAgCA,EAC/BC,OAAOC,UAAUC,SAASC,KAAKJ,GAAKK,MAAM,GAAK,GAAEC,mBAC/D,CAKgB,SAAAC,EAAGP,EAAcQ,GAC/B,OAAOP,OAAOC,UAAUC,SAASC,KAAKJ,KAAS,WAAWQ,IAC5D,CAKO,SAASC,EAAyBT,GAChC,OAAAO,EAAGP,EAAK,WACjB,CAlBgBN,EAAAK,EAAA,UASAL,EAAAa,EAAA,MAOAb,EAAAe,EAAA,cAOH,MAAAC,KAAsBV,QACX,IAARA,GADK,SAIRW,KAAwBX,IAC3BU,EAAMV,IADO,WAOVY,KAAYZ,GACR,OAARA,GAAgBO,EAAGP,EAAK,WADT,YAOjB,SAASa,EAAOb,GACd,OAAAO,EAAGP,EAAK,OACjB,CAFgBN,EAAAmB,EAAA,UAOH,MAAAC,KAAYd,MACR,gBAEJJ,KAAKI,KADD,qFACgBJ,KAAKI,KAHd,YAajB,SAASe,EAAyBf,GAChC,OAAAO,EAAGP,EAAK,gBACjB,CAKO,SAASgB,EAAmBhB,GACjC,OAAOO,EAAGP,EAAK,YAAcY,EAASZ,IAAQS,EAAWT,EAAIiB,OAASR,EAAWT,EAAIkB,MACvF,CAKO,SAASC,EAASnB,GAChB,OAAAO,EAAGP,EAAK,SACjB,CAKO,SAASoB,EAAUpB,GACjB,OAAAO,EAAGP,EAAK,UACjB,CAvBgBN,EAAAqB,EAAA,mBAOArB,EAAAsB,EAAA,aAOAtB,EAAAyB,EAAA,YAOAzB,EAAA0B,EAAA,aAOH,MAAAC,KAAWC,QACO,IAAlBC,MAAMF,QACgC,mBAAxCpB,OAAOC,UAAUC,SAASC,KAAKkB,GAEjCC,MAAMF,QAAQC,IAJA,WAUVE,EAAiB9B,GAAA,IACH,oBAAX+B,QADQ,YAOXC,KAAY1B,GACE,oBAAXyB,QAA0BlB,EAAGP,EAAK,WAD1B,YAIX2B,KAAa3B,GACjBY,EAASZ,MAAUA,EAAI4B,SADP,aAIZC,EAA6B,oBAAXJ,OAGxB,SAASK,EAAWC,GACzB,OAAOA,GAAK,CAAC,QAAS,OAAOC,SAASD,EAAEH,QAC1C,CAEO,SAASK,EAAOjC,GACrB,OAAe,OAARA,CACT,CAEO,SAASkC,EAAelC,GAC7B,OAAOW,EAAQX,IAAQiC,EAAOjC,EAChC,CAEO,SAASmC,EAAcnC,GAC5B,OAAOW,EAAQX,IAAQiC,EAAOjC,EAChC,CAEO,SAASoC,EAAQpC,GACf,MAAA,+EAA+EJ,KAAKI,EAC7F,CAlBgBN,EAAAoC,EAAA,cAIApC,EAAAuC,EAAA,UAIAvC,EAAAwC,EAAA,kBAIAxC,EAAAyC,EAAA,iBAIAzC,EAAA0C,EAAA,WAOH,MAAAC,KAAa1C,GACjB,mEAAmEC,KAAKD,IADxD,aAQZ2C,EAAU5C,GAAA,CAACM,EAAUuC,GAAY,OAExCzB,EAASd,KAAQwC,MAAMxC,MAGf,KAARA,SAAcA,KAEbuC,OAGDlB,EAAQrB,IAAuB,IAAfA,EAAIyC,YAGpB7B,EAASZ,IAAoC,IAA5BC,OAAOyC,KAAK1C,GAAKyC,WAbjB"}
1
+ {"version":3,"file":"is.mjs","sources":["../../../../../packages/functions/modules/is.ts"],"sourcesContent":["/**\n * @description 是否为合法的 URL 前缀\n */\nexport const isExternal = (path: string) => /^(http?:|https?:|mailto:|tel:)/.test(path)\n\n/**\n * @description 是否是有效的 URL\n */\nexport const isValidURL = (url: string) => {\n const reg =\n /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/\n return reg.test(url)\n}\n\n/**\n * @description 判断数据类型\n * @param {Any} val 需要判断类型的数据\n * @return string\n */\nexport function isType(val: any) {\n if (val === null) return 'null'\n if (typeof val !== 'object') return typeof val\n else return Object.prototype.toString.call(val).slice(8, -1).toLocaleLowerCase()\n}\n\n/**\n * @description 判断值是否未某个类型\n */\nexport function is(val: unknown, type: string) {\n return Object.prototype.toString.call(val) === `[object ${type}]`\n}\n\n/**\n * @description 是否为函数\n */\nexport function isFunction<T = Function>(val: unknown): val is T {\n return is(val, 'Function')\n}\n\n/**\n * @description:是否已定义\n */\nexport const isDef = <T = unknown>(val?: T): val is T => {\n return typeof val !== 'undefined'\n}\n\nexport const isUnDef = <T = unknown>(val?: T): val is T => {\n return !isDef(val)\n}\n\n/**\n * @description 是否为对象\n */\nexport const isObject = (val: any): val is Record<any, any> => {\n return val !== null && is(val, 'Object')\n}\n\n/**\n * @description 是否为时间\n */\nexport function isDate(val: unknown): val is Date {\n return is(val, 'Date')\n}\n\n/**\n * 是否是有效的数字(包含正负整数,0 以及正负浮点数)\n */\nexport const isNumber = (val: string) => {\n const regPos = /^\\d+(\\.\\d+)?$/ // 非负浮点数\n const regNeg = /^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/ // 负浮点数\n if (regPos.test(val) || regNeg.test(val)) {\n return true\n } else {\n return false\n }\n}\n\n/**\n * @description 是否为 AsyncFunction\n */\nexport function isAsyncFunction<T = any>(val: unknown): val is Promise<T> {\n return is(val, 'AsyncFunction')\n}\n\n/**\n * @description 是否为 promise\n */\nexport function isPromise<T = any>(val: unknown): val is Promise<T> {\n return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch)\n}\n\n/**\n * @description 是否为字符串\n */\nexport function isString(val: unknown): val is string {\n return is(val, 'String')\n}\n\n/**\n * @description 是否为boolean类型\n */\nexport function isBoolean(val: unknown): val is boolean {\n return is(val, 'Boolean')\n}\n\n/**\n * 是否为数组\n */\nexport const isArray = (arg: any) => {\n if (typeof Array.isArray === 'undefined') {\n return Object.prototype.toString.call(arg) === '[object Array]'\n }\n return Array.isArray(arg)\n}\n\n/**\n * @description 是否客户端\n */\nexport const isClient = () => {\n return typeof window !== 'undefined'\n}\n\n/**\n * @description 是否为浏览器\n */\nexport const isWindow = (val: any): val is Window => {\n return typeof window !== 'undefined' && is(val, 'Window')\n}\n\nexport const isElement = (val: unknown): val is Element => {\n return isObject(val) && !!val.tagName\n}\n\nexport const isServer = typeof window === 'undefined'\n\n// 是否为图片节点\nexport function isImageDom(o: Element) {\n return o && ['IMAGE', 'IMG'].includes(o.tagName)\n}\n\nexport function isNull(val: unknown): val is null {\n return val === null\n}\n\nexport function isNullAndUnDef(val: unknown): val is null | undefined {\n return isUnDef(val) && isNull(val)\n}\n\nexport function isNullOrUnDef(val: unknown): val is null | undefined {\n return isUnDef(val) || isNull(val)\n}\n\nexport function isPhone(val: string) {\n return /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$/.test(val)\n}\n\n/**\n * 是否是图片链接\n */\nexport const isImgPath = (path: string): boolean => {\n return /(https?:\\/\\/|data:image\\/).*?\\.(png|jpg|jpeg|gif|svg|webp|ico)/gi.test(path)\n}\n\n/**\n * @description 是否为空值项(包含数组、对象判断)\n * @param checkFull 是否检查数组、对象是否为空。默认 true\n */\nexport const isEmpty = (val: any, checkFull = true): boolean => {\n // NaN 的检查\n if (isNumber(val) && isNaN(val)) return true\n\n // 检查空字符串、null 和 undefined\n if (val === '' || val === null || val === undefined) return true\n\n if (!checkFull) return false\n\n // 检查是不是数组并且长度为 0\n if (isArray(val) && val.length === 0) return true\n\n // 检查是不是对象并且没有自身可枚举属性\n if (isObject(val) && Object.keys(val).length === 0) return true\n\n // 如果以上都不是,则不为空\n return false\n}\n"],"names":["isExternal","__name","path","test","isValidURL","url","isType","val","Object","prototype","toString","call","slice","toLocaleLowerCase","is","type","isFunction","isDef","isUnDef","isObject","isDate","isNumber","isAsyncFunction","isPromise","then","catch","isString","isBoolean","isArray","arg","Array","isClient","window","isWindow","isElement","tagName","isServer","isImageDom","o","includes","isNull","isNullAndUnDef","isNullOrUnDef","isPhone","isImgPath","isEmpty","checkFull","isNaN","length","keys"],"mappings":"2EAGO,MAAMA,EAAcC,GAAAC,GAAiB,iCAAiCC,KAAKD,IAAxD,cAKbE,KAAcC,GAEvB,6TACSF,KAAKE,IAHQ,cAWnB,SAASC,EAAOC,GACjB,OAAQ,OAARA,EAAqB,OACN,iBAARA,SAAgCA,EAC/BC,OAAOC,UAAUC,SAASC,KAAKJ,GAAKK,MAAM,GAAK,GAAEC,mBAC/D,CAKgB,SAAAC,EAAGP,EAAcQ,GAC/B,OAAOP,OAAOC,UAAUC,SAASC,KAAKJ,KAAS,WAAWQ,IAC5D,CAKO,SAASC,EAAyBT,GAChC,OAAAO,EAAGP,EAAK,WACjB,CAlBgBN,EAAAK,EAAA,UASAL,EAAAa,EAAA,MAOAb,EAAAe,EAAA,cAOH,MAAAC,KAAsBV,QACX,IAARA,GADK,SAIRW,KAAwBX,IAC3BU,EAAMV,IADO,WAOVY,KAAYZ,GACR,OAARA,GAAgBO,EAAGP,EAAK,WADT,YAOjB,SAASa,EAAOb,GACd,OAAAO,EAAGP,EAAK,OACjB,CAFgBN,EAAAmB,EAAA,UAOH,MAAAC,KAAYd,MACR,gBAEJJ,KAAKI,KADD,qFACgBJ,KAAKI,KAHd,YAajB,SAASe,EAAyBf,GAChC,OAAAO,EAAGP,EAAK,gBACjB,CAKO,SAASgB,EAAmBhB,GACjC,OAAOO,EAAGP,EAAK,YAAcY,EAASZ,IAAQS,EAAWT,EAAIiB,OAASR,EAAWT,EAAIkB,MACvF,CAKO,SAASC,EAASnB,GAChB,OAAAO,EAAGP,EAAK,SACjB,CAKO,SAASoB,EAAUpB,GACjB,OAAAO,EAAGP,EAAK,UACjB,CAvBgBN,EAAAqB,EAAA,mBAOArB,EAAAsB,EAAA,aAOAtB,EAAAyB,EAAA,YAOAzB,EAAA0B,EAAA,aAOH,MAAAC,KAAWC,QACO,IAAlBC,MAAMF,QACgC,mBAAxCpB,OAAOC,UAAUC,SAASC,KAAKkB,GAEjCC,MAAMF,QAAQC,IAJA,WAUVE,EAAiB9B,GAAA,IACH,oBAAX+B,QADQ,YAOXC,KAAY1B,GACE,oBAAXyB,QAA0BlB,EAAGP,EAAK,WAD1B,YAIX2B,KAAa3B,GACjBY,EAASZ,MAAUA,EAAI4B,SADP,aAIZC,EAA6B,oBAAXJ,OAGxB,SAASK,EAAWC,GACzB,OAAOA,GAAK,CAAC,QAAS,OAAOC,SAASD,EAAEH,QAC1C,CAEO,SAASK,EAAOjC,GACrB,OAAe,OAARA,CACT,CAEO,SAASkC,EAAelC,GAC7B,OAAOW,EAAQX,IAAQiC,EAAOjC,EAChC,CAEO,SAASmC,EAAcnC,GAC5B,OAAOW,EAAQX,IAAQiC,EAAOjC,EAChC,CAEO,SAASoC,EAAQpC,GACf,MAAA,+EAA+EJ,KAAKI,EAC7F,CAlBgBN,EAAAoC,EAAA,cAIApC,EAAAuC,EAAA,UAIAvC,EAAAwC,EAAA,kBAIAxC,EAAAyC,EAAA,iBAIAzC,EAAA0C,EAAA,WAOH,MAAAC,KAAa1C,GACjB,mEAAmEC,KAAKD,IADxD,aAQZ2C,EAAU5C,GAAA,CAACM,EAAUuC,GAAY,OAExCzB,EAASd,KAAQwC,MAAMxC,MAGf,KAARA,SAAcA,KAEbuC,OAGDlB,EAAQrB,IAAuB,IAAfA,EAAIyC,YAGpB7B,EAASZ,IAAoC,IAA5BC,OAAOyC,KAAK1C,GAAKyC,WAbjB"}