comfy-tool 1.0.4 → 1.0.5

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.
@@ -1,4 +1,4 @@
1
1
  export * from './layout/Column';
2
2
  export * from './layout/Row';
3
- export * from './layout/Expended';
3
+ export * from './layout/Expanded';
4
4
  export * from './utils/layer';
@@ -1,7 +1,7 @@
1
1
  import './index.scss';
2
2
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
3
  reverse: BooleanConstructor;
4
- }>, import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
4
+ }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
5
5
  reverse: BooleanConstructor;
6
6
  }>> & Readonly<{}>, {
7
7
  reverse: boolean;
@@ -1,7 +1,7 @@
1
1
  import _Column from './Column';
2
2
  export declare const Column: import("../../../utils/app/component").WithInstall<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
3
  reverse: BooleanConstructor;
4
- }>, import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
4
+ }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
5
5
  reverse: BooleanConstructor;
6
6
  }>> & Readonly<{}>, {
7
7
  reverse: boolean;
@@ -1,5 +1,5 @@
1
- import _Expended from './Expended';
2
- export declare const Expended: import("../../../utils/app/component").WithInstall<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
1
+ import _Expanded from './Expanded';
2
+ export declare const Expanded: import("../../../utils/app/component").WithInstall<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
3
  flex: {
4
4
  type: import("vue").PropType<"-" | "100%" | number>;
5
5
  default: number;
@@ -30,9 +30,9 @@ export declare const Expended: import("../../../utils/app/component").WithInstal
30
30
  row: boolean;
31
31
  flex: number | "-" | "100%";
32
32
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
33
- export default Expended;
33
+ export default Expanded;
34
34
  declare module 'vue' {
35
35
  interface GlobalComponents {
36
- expended: typeof _Expended;
36
+ expanded: typeof _Expanded;
37
37
  }
38
38
  }
@@ -1,4 +1,4 @@
1
- import type { Ref, CSSProperties } from "vue";
1
+ import type { Ref, CSSProperties, PropType } from "vue";
2
2
  import { LayerOptions } from "./layer";
3
3
  type GetVueProps<T> = {
4
4
  [P in keyof T]: T[P] | Ref<T[P]>;
@@ -29,11 +29,21 @@ export interface LayerState<C extends VueComponentConstructor, B extends VueComp
29
29
  content: C;
30
30
  contentProps?: GetComponentProps<C>;
31
31
  }
32
- declare const _default: import("vue").DefineComponent<{}, () => "" | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
33
- [key: string]: any;
34
- }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("cancel" | "close" | "confirm")[], "cancel" | "close" | "confirm", import("vue").PublicProps, Readonly<{}> & Readonly<{
32
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
33
+ baseContent: {
34
+ type: PropType<VueComponentConstructor>;
35
+ default: null;
36
+ };
37
+ }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("cancel" | "close" | "confirm")[], "cancel" | "close" | "confirm", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
38
+ baseContent: {
39
+ type: PropType<VueComponentConstructor>;
40
+ default: null;
41
+ };
42
+ }>> & Readonly<{
35
43
  onCancel?: ((...args: any[]) => any) | undefined;
36
44
  onClose?: ((...args: any[]) => any) | undefined;
37
45
  onConfirm?: ((...args: any[]) => any) | undefined;
38
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
46
+ }>, {
47
+ baseContent: VueComponentConstructor;
48
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
39
49
  export default _default;
@@ -9,7 +9,7 @@ export type LayerInstance<T, C extends LayerComponent, B extends LayerComponent>
9
9
  declare class _Layer<T, C extends LayerComponent, B extends LayerComponent> extends PopupCreator<LayerProps, LayerState<C, B>> {
10
10
  constructor(component: VueComponent, props: Partial<LayerProps>);
11
11
  open(options: LayerOptions<T, C>): any;
12
- static create<T, C extends LayerComponent, B extends LayerComponent>(props?: Partial<LayerProps>, isNew?: boolean): _Layer<T, C, B>;
12
+ static create<T, C extends LayerComponent, B extends LayerComponent>(props?: LayerOptions<T, C, B>, isNew?: boolean): _Layer<T, C, B>;
13
13
  }
14
14
  /**
15
15
  * 创建并打开一个弹层组件
@@ -3,3 +3,22 @@ export declare function elLayer<C extends LayerComponent>(options: {
3
3
  content: C;
4
4
  contentProps: LayerComponentProps<C>;
5
5
  } & Parameters<typeof Layer>[0]): void;
6
+ export declare function appLayer<C extends LayerComponent>(options: {
7
+ content: C;
8
+ contentProps: LayerComponentProps<C>;
9
+ } & Parameters<typeof Layer>[0]): Promise<unknown>;
10
+ export declare namespace appLayer {
11
+ var create: (options: Parameters<typeof Layer>[0]) => {
12
+ open(options: import("../../index").LayerOptions<unknown, abstract new (...args: any) => any, any>): any;
13
+ component: import("../../plugins/PopupCreator.js").VueComponent;
14
+ appDOM: HTMLDivElement;
15
+ instance: import("vue").ComponentPublicInstance<any, any, S>;
16
+ container: HTMLDivElement;
17
+ properties: Partial<import("../../index").LayerProps>;
18
+ init(): void;
19
+ mount(): void;
20
+ unmount(): void;
21
+ close(): void;
22
+ toggle(show: boolean, options?: any): void;
23
+ };
24
+ }
@@ -0,0 +1,6 @@
1
+ export declare function useTestWorldLayer(): {
2
+ open: (props?: {
3
+ title: string;
4
+ }) => Promise<void>;
5
+ close: () => void;
6
+ };
@@ -8,38 +8,24 @@ declare global {
8
8
  function parseFloat(string: string|number): number
9
9
  function parseInt(string: string|number): number
10
10
 
11
- type ObjectKeyType = string|number|symbol;
12
- //通用图表
13
- interface ChartData {
14
- title: string;
15
- data: string[];
16
- series: {
17
- name: string;
18
- data: number[];
19
- [key:string]:any
20
- }[];
21
- [key:string]:any
22
- }
23
- // 选项通用类型
24
- type SelectedData<T=string|number> = {
25
- text:string,
26
- value:T
27
- children?:SelectedData<T>[],
28
- [key:Exclude<string, 'text'|'value'|'children'>]:any
29
- }
30
11
  /**
31
- * 补充工具类
12
+ * 对象属性类型
13
+ */
14
+ type ObjectKeyType = string|symbol;
15
+ /**
16
+ * 获取对象属性,排除指定属性
32
17
  */
33
18
  type PickEx<T, K extends keyof T> = { [P in Exclude<keyof T, K>]: T[P]; }
19
+ /**
20
+ * 获取Promise函数返回值类型
21
+ */
34
22
  type PromiseReturnType<T> = T extends (...arg:any[]) => Promise<infer R> ? R : T;
35
- type GetArguments<T> = T extends (...arg:(infer R)) => any ? R : T;
36
- type GetFirstArguments<T extends (...args: any[]) => any> = GetArguments<T>[0];
23
+ /** 部分属性可选 */
37
24
  type PartialOf<T, U extends keyof T> = PickEx<T, U>&Partial<T>
25
+ /** 部分属性必填 */
38
26
  type RequiredOf<T, U extends keyof T> = Required<Pick<T, U>>&Partial<T>
39
27
  /** 获(对象或数组)取子属性 */
40
28
  type PickChild<T, K extends keyof T> = T extends (infer R)[] ? R : T[K];
41
- /** 获取数组中的元素类型 */
42
- type GetElementType<T> = T extends (infer R)[] ? R : never;
43
29
  interface ScrollToOptions {
44
30
  target?: Ref<any>|any
45
31
  right?: number
@@ -8,13 +8,14 @@ export declare abstract class PopupCreator<P extends {
8
8
  show: boolean;
9
9
  }> {
10
10
  component: VueComponent;
11
- appDOM: any;
11
+ appDOM: HTMLDivElement;
12
12
  instance: ComponentPublicInstance<any, any, S>;
13
13
  container: HTMLDivElement;
14
14
  properties: Partial<P>;
15
15
  constructor(Component: VueComponent, properties: Partial<P>);
16
16
  private init;
17
17
  static use(options: typeof Config): void;
18
+ mount(): void;
18
19
  unmount(): void;
19
20
  abstract open(...args: ParamsType<P>[]): void;
20
21
  close(): void;
@@ -31,7 +31,7 @@ export type WithInstall<T> = T & {
31
31
  * @return {*}
32
32
  */
33
33
  export declare function withInstall<T>(plugin: T): WithInstall<T>;
34
- export type VNodeProps = GetArguments<typeof h>[1];
34
+ export type VNodeProps = Parameters<typeof h>[1];
35
35
  export declare function renderComponent<T extends VNodeProps>(comp?: any, defaultComp?: any, props?: T): any;
36
36
  export declare function isVueComponent(target: any): boolean;
37
37
  export {};
@@ -1,7 +1,7 @@
1
1
  /** 通用函数在此导入 */
2
2
  export * from './util/url';
3
3
  export * from './util/cloneObject';
4
- export * from './util/formate';
4
+ export * from './util/format';
5
5
  export * from './util/basic';
6
6
  export * from './util/array';
7
7
  export * from './util/number';
@@ -1,3 +1,4 @@
1
+ import type { SelectedData } from "@/types/data";
1
2
  /**
2
3
  * 移除数组中为某项
3
4
  *
@@ -1,3 +1,4 @@
1
+ import type { SelectedData } from "@/types/data";
1
2
  /**
2
3
  * 横杠转大写
3
4
  * `my-vue` => `MyVue`
@@ -35,5 +35,5 @@ export declare function throttleAsync<T extends (...a: any[]) => Promise<any>>(f
35
35
  */
36
36
  export declare function methodApply<T extends Function | Function[]>(target: T, args?: any[]): void;
37
37
  export declare const Fn: {
38
- cacheResult<T extends (...args: any) => any>(fn: T): (this: any, ...args: GetArguments<T>) => any;
38
+ cacheResult<T extends (...args: any) => any>(fn: T): (this: any, ...args: Parameters<T>) => any;
39
39
  };
package/README.md CHANGED
@@ -37,7 +37,7 @@ pnpm add comfy-tool
37
37
  - 导入
38
38
  - ESM
39
39
  ```js
40
- import 'comfy-tool/dist/index.css';
40
+ import 'comfy-tool/style.css';
41
41
  import { useComfyTool } from 'comfy-tool';
42
42
  ```
43
43
  只导入工具函数(无需安装直接使用)
@@ -49,7 +49,7 @@ pnpm add comfy-tool
49
49
  - CommonJS
50
50
  ```js
51
51
 
52
- require('comfy-tool/dist/index.css');
52
+ require('comfy-tool/style.css');
53
53
  const { useComfyTool } = require("comfy-tool");
54
54
  ```
55
55
 
@@ -94,22 +94,22 @@ export const Util = {
94
94
  ```
95
95
 
96
96
  ## 扩展组件 (以Element-Plus为例)
97
- ### 1. `<expended>`
97
+ ### 1. `<expanded>`
98
98
  自动填充剩余空间,与 `flexbox` 的 `flex:1` 一样
99
99
  ```html
100
100
  <el-row style="width:240px">
101
101
  <el-col :span="6">60px</el-col>
102
102
  <el-col :span="8">80px</el-col>
103
- <expended>100px</expended>
103
+ <expanded>100px</expanded>
104
104
  </el-row>
105
105
  ```
106
106
  用 `flex="-"` 可以定义尺寸,不然设置了width、height都会无效。
107
107
  ```html
108
108
  <!-- 使用 flex="-" 可以定义尺寸 -->
109
109
  <el-row style="width:240px">
110
- <expended flex="-" :width="60">60px</expended>
111
- <expended>90px</expended>
112
- <expended>90px</expended>
110
+ <expanded flex="-" :width="60">60px</expanded>
111
+ <expanded>90px</expanded>
112
+ <expanded>90px</expanded>
113
113
  </el-row>
114
114
  ```
115
115
  ...待续
@@ -185,40 +185,58 @@ export const Util = {
185
185
  })
186
186
  }
187
187
  ```
188
- <div style="color:#39f">简单的封装示例</div>
188
+ <div style="color:#39f">封装示例</div>
189
189
 
190
190
  ```ts
191
- import { Layer, LayerComponent, LayerComponentProps } from "comfy-tool";
192
- // ElDialog原组件
191
+ // appLayer.ts
192
+ import { Util } from "@/utils";
193
193
  import { ElDialog } from "element-plus";
194
- // 业务中对ElDialog二次封装的组件
195
- import AppDialog from "@/components/AppDialog.vue";
196
-
197
- export function appLayer<C extends LayerComponent>(options:{
194
+ import AppDialog from "@/components/public/common/AppDialog.vue";
195
+ import { Layer } from "comfy-tool";
196
+ import type { LayerComponent, LayerComponentProps, LayerInstance as _LayerInstance, LayerOptions } from "comfy-tool";
197
+ import type { DialogProps } from "element-plus";
198
+ export type LayerInstance<T, C extends LayerComponent> = _LayerInstance<T, C, typeof ElDialog>;
199
+ function _Layer<T, C extends LayerComponent=any>(options:{
198
200
  content:C,
199
- contentProps?:LayerComponentProps<C>
200
- }&Parameters<typeof Layer>[0]){
201
- return Layer({
201
+ contentProps:LayerComponentProps<C>
202
+ }&RequiredOf<LayerOptions<T, C, typeof AppDialog>, 'content'>&Partial<DialogProps>){
203
+ return Layer<T, C, typeof AppDialog>({
202
204
  ...options,
203
- baseContent: AppDialog, // 也可以是ElDialog,如果不需要二次封装的话
205
+ baseContent: AppDialog,
204
206
  baseContentProps: {
205
- // AppDialog二次封装后的ElDialog可通过show属性控制显示
206
- show: true,
207
- ...
207
+ ...Util.pickEx(options, ['content', 'contentProps', 'baseContent', 'baseContentProps']),
208
+ show: true,
209
+ ...options.baseContentProps,
208
210
  }
209
211
  })
210
212
  }
213
+ _Layer.create = function <T, C extends LayerComponent=any>(options:Partial<{
214
+ content:C,
215
+ contentProps:LayerComponentProps<C>
216
+ }&LayerOptions<T, C, typeof AppDialog>&DialogProps>){
217
+ return Layer.create<T, C, typeof AppDialog>({
218
+ ...options,
219
+ baseContent: AppDialog,
220
+ baseContentProps: {
221
+ ...Util.pickEx(options, ['content', 'contentProps', 'baseContent', 'baseContentProps']),
222
+ show: true,
223
+ ...options.baseContentProps,
224
+ }
225
+ } as any)
226
+ }
227
+ _Layer.close = Layer.close
228
+ export const AppLayer = _Layer;
211
229
  ```
212
230
 
213
231
  在业务中你需要对函数进行封装,可以达到以下使用效果
214
232
  ```ts
215
233
  // 假设已经封装好了
216
- import appLayer from '@/utils/appLayer';
234
+ import AppLayer from '@/utils/appLayer';
217
235
  import HelloWorld from '@/components/HelloWorld.vue'
218
236
 
219
237
  // 常用示例
220
238
  // 示例一
221
- appLayer({
239
+ AppLayer<string>({
222
240
  content:HelloWorld,
223
241
  contentProps:{
224
242
  taskId:'123'
@@ -231,7 +249,7 @@ export const Util = {
231
249
 
232
250
  // 示例二
233
251
  // 先创建实例
234
- const $layer1 = appLayer.create({
252
+ const $layer1 = AppLayer.create<string>({
235
253
  content:HelloWorld,
236
254
  onConfirm(res, close){
237
255
  console.log(res); // 这是HelloWorld组件中回传的数据
@@ -249,7 +267,7 @@ export const Util = {
249
267
  回调的形式与promise的形式的区别。(只能使用一种回调,都写的话只在回调生效)
250
268
  ```ts
251
269
  // 较完整示例
252
- appLayer({
270
+ AppLayer<string>({
253
271
  // 业务组件
254
272
  content:HelloWorld,
255
273
  // 传给HelloWorld的属性
@@ -257,7 +275,7 @@ export const Util = {
257
275
  content:'Hello World'
258
276
  },
259
277
  // 回调的形式可以控制弹层关闭,默认也会自动关闭,return true 则不会自动关闭
260
- onConfirm(res, close){
278
+ onConfirm(res, close){ // res:string
261
279
  console.log(res); // 这是HelloWorld组件中回传的数据
262
280
  setTimeout(()=>{
263
281
  close();// 手动关闭弹层
@@ -273,6 +291,47 @@ export const Util = {
273
291
  console.log(action);
274
292
  })
275
293
  ```
294
+
295
+ - 继续封装成Hooks
296
+ ```ts
297
+ // use-hello-world-Layer.ts
298
+ let $layer:LayerInstance<string, typeof HelloWorld, typeof ElDialog>;
299
+ // 单独实例
300
+ export function useHelloWorldLayer(){
301
+ function open(props: {title:string}={title:'测试'}){
302
+ if (!$layer) {
303
+ $layer = AppLayer.create<string>({
304
+ content: HelloWorld
305
+ })
306
+ }
307
+
308
+ return new Promise<string>((resolve, reject) => {
309
+ $layer.open({
310
+ contentProps: props,
311
+ onConfirm(data){ // type:string
312
+ console.log('confirm:',data)
313
+ resolve()
314
+ },
315
+ onClose(action){
316
+ console.log('close:',action)
317
+ reject()
318
+ }
319
+ })
320
+ }).then(res => {
321
+ console.log('res:',res)
322
+ })
323
+ }
324
+ function close(){
325
+ $layer?.close()
326
+ }
327
+ return { open, close }
328
+ }
329
+ ```
330
+ 使用
331
+ ```ts
332
+ const HelloWorldLayer = useHelloWorldLayer();
333
+ HelloWorldLayer.open({title:'Hello World'});
334
+ ```
276
335
  ...
277
336
  ## 扩展指令
278
337
  ...
@@ -317,13 +376,5 @@ export const Util = {
317
376
  |...|||
318
377
  ### 2.内外边距
319
378
  优先级遵循 `u-m-l/r/t/b-*` > `u-m-x/y-*` > `u-m-*`
320
- ### 3.文字字体
321
- ...
322
- ### 4.容器尺寸/类型
323
- ...
324
- ### 5.定位
325
- ...
326
- ### 6.动画
327
- ...
328
- ### 7.其他
329
- ...
379
+
380
+ 只打算做部分常用的css扩展,所以不是一个全面的样式库
package/dist/index.min.js CHANGED
@@ -1 +1 @@
1
- (function(s,f){typeof exports=="object"&&typeof module!="undefined"?f(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],f):(s=typeof globalThis!="undefined"?globalThis:s||self,f(s.ComfyTool={},s.Vue))})(this,function(s,f){"use strict";var Vt=Object.defineProperty,jt=Object.defineProperties;var Ut=Object.getOwnPropertyDescriptors;var _e=Object.getOwnPropertySymbols;var Wt=Object.prototype.hasOwnProperty,Ft=Object.prototype.propertyIsEnumerable;var Q=Math.pow,Se=(s,f,h)=>f in s?Vt(s,f,{enumerable:!0,configurable:!0,writable:!0,value:h}):s[f]=h,w=(s,f)=>{for(var h in f||(f={}))Wt.call(f,h)&&Se(s,h,f[h]);if(_e)for(var h of _e(f))Ft.call(f,h)&&Se(s,h,f[h]);return s},W=(s,f)=>jt(s,Ut(f));var Le=(s,f,h)=>new Promise((A,T)=>{var F=C=>{try{_(h.next(C))}catch(S){T(S)}},M=C=>{try{_(h.throw(C))}catch(S){T(S)}},_=C=>C.done?A(C.value):Promise.resolve(C.value).then(F,M);_((h=h.apply(s,f)).next())});function h(e){try{return decodeURI(e)}catch(t){return console.warn("[Decode Error]",e),e}}function A(e){try{return decodeURIComponent(e)}catch(t){return console.warn("[Decode Error]",e),e}}function T(e){return Array.isArray(e)?e[e.length-1]:e}function F(e,t={}){var o;t.allParam=(o=t.allParam)!=null?o:!0,e=h(h(e));let n=null;if(t.allParam){let r=e.match(/\?([^\?#]*)/g);if(!r)return null;for(const i of r)i.includes("=")&&(n||(n={}),Object.assign(n,q(i.substring(1))))}else{let r=e.match(/\?([^\?]*$)/);if(!r&&!e.includes("="))return null;n=q(r?r[1]:e)}return n&&!t.repeat&&Object.entries(n).forEach(([r,i])=>{n[r]=T(i)}),n}function M(e,t){return decodeURI(Me(e,w({sort:(n,o)=>n>o?0:-1},t)))}function _(e,t){return t?(typeof t!="string"&&(t=M(t)),t?e+(/^([^#]*\?[^#]*$)|(.*#.*\?.*$)/.test(e)?"&":"?")+t:e):e}function C(e){return/^https?:\/\//.test(e)}function S(e){return/^(https?:\/\/|blob:|data:)/.test(e)}function Ie(e){let[t,n]=e.split("//"),[o,r]=n.split("/");return[t+"//",o,r]}function q(e){return e?(e.startsWith("?")&&(e=e.slice(1)),e.split("&").reduce((t,n)=>{if(!n)return t;const[o,r]=n.split("="),i=A(o||""),l=A(r||"");return t[i]!==void 0?(Array.isArray(t[i])||(t[i]=[t[i]]),t[i].push(l)):t[i]=l,t},{})):{}}function Me(e,t={}){if(!e||typeof e!="object")return"";const{sort:n}=t;let o=Object.keys(e);return typeof n=="function"&&o.sort(n),o.map(r=>{const i=e[r];return Array.isArray(i)?i.map(l=>`${encodeURIComponent(r)}=${encodeURIComponent(String(l))}`).join("&"):`${encodeURIComponent(r)}=${encodeURIComponent(String(i))}`}).join("&")}const Y=Object.assign;function ee(e){return Object.keys(e)}function $e(e){return Object.values(e)}function te(e){return Object.entries(e)}function ne(e,t,n=!1){return t.reduce((o,r)=>((!n||e[r]!==void 0)&&(o[r]=e[r]),o),{})}function $(e,t,n=!1){return Object.keys(e).filter(r=>!t.includes(r)).reduce((r,i)=>((!n||e[i]!==void 0)&&(r[i]=e[i]),r),{})}function N(e){return Object.prototype.toString.call(e).match(/\[object (.+)\]/)[1]}function Ne(e,t){let n=e;if(t){const o=typeof t=="string"?t.split("."):t;for(const r of o)if(n&&typeof n=="object"&&r in n)n=n[r];else return}return n}function P(e,t,{arrayMergeStrategy:n,deepMerge:o}={}){if(!t||Object.keys(t).length===0)return O(e);if(!e||Object.keys(e).length===0)return O(t);let r=O(e);for(const i of Object.keys(t)){let l=e[i],a=t[i];if(o&&N(l)=="Object"&&N(a)=="Object")r[i]=P(l,a);else if(o&&Array.isArray(l)&&Array.isArray(a))switch(n){case"concat":r[i]=[...l,...a];break;case"merge":r[i]=l.map((d,c)=>c<a.length?P({value:d},{value:a[c]}).value:d);break;case"replace":default:r[i]=[...a];break}else r[i]=a}return r}const re=e=>JSON.parse(JSON.stringify(e)),O=function(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.length?e.map(n=>O(n)):[];if(N(e)==="Object"){var t={};return Object.keys(e).forEach(n=>{t[n]=O(e[n])}),t}return e};function oe(e){return e.replace(/^-(\w)/g,(t,n)=>n.toLocaleUpperCase())}function Pe(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"")}function ie(e,t=2){for(var n=e+"";n.length<t;)n="0"+n;return n}function Re(e,t=2){if(e.length===0||!t)return[];const n=[];let o=[];for(let r=0;r<e.length;r++)o.push(e[r]),o.length===t&&(n.push(o),o=[]);return o.length>0&&n.push(o),n}function ke(e){let t=[];for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push({text:e[n],label:e[n],value:n});return t}function He(e){let t={};return e.forEach(n=>{t[n.value]=n.text}),t}function Ve(e){let t=new FormData;return Object.entries(e).forEach(([n,o])=>{t.append(n,o)}),t}function le(e,t={}){let{labelKey:n,valueKey:o,childrenKey:r,keepEmptyChildren:i}=t;return n=n||"label",o=o||"value",r=r||"children",i=i!==!1,e.map(l=>{const a=W(w({},l),{label:l[n]||l.label||"",value:l[o]||l.value||"",text:l[o]||l.value||""});return l[r]&&Array.isArray(l[r])&&(i||l[r].length)&&(a.children=le(l[r],t)),a})}function je(e,t){if(!t)return e;const n=e.indexOf(t);return n===-1?e:e.filter((o,r)=>r!==n)}function Ue(e,t){if(!t)return;let n=e.indexOf(t);n>=0&&e.splice(n,1)}function We(e){return e.filter(t=>t!=null)}function Fe(e){return e.filter(t=>!!t)}function Ye(e){e.splice(0,e.length)}function Ke(e,t){if(!e||!t||!e.length||!t.length)return!1;var n=t.some(o=>e.includes(o));return n}function Be(e,t=2){return n(e,t);function n(o,r){return r--,o.map(i=>(r<=0?delete i.children:i.children=i.children?n(i.children,r):[],i))}}function Je(e,t=1,n=!0){let o=[...e];return t>=o.length&&n?o:fe(o).slice(0,t)}function fe(e){const t=[...e];for(let n=t.length;--n;){const o=Math.floor(Math.random()*(n+1));[t[n],t[o]]=[t[o],t[n]]}return t}function Ge(e,t){const[n,o,r]=t;let i={};l(e,[]);function l(a,d){a.forEach((c,g)=>{let p=re(d);if(p.push(g),Array.isArray(c))l(c,p);else{let y=c[n]||o&&c[o]||r&&c[r];y&&(i[y]=p)}})}return i}function ae(e){return typeof e=="number"||/^[+-]?\d*(\.\d+)?$/.test(e)}function D(e,t){return typeof e=="number"?e+t:e+(ae(e)?t:"")}function ze(e,t,n=2){return Math.floor(e/t*100*Q(10,n))/Q(10,n)}const ue=["一","二","三","四","五","六","七","八","九","十"],Xe=[["天",...ue.slice(0,6),"天"].map(e=>`星期${e}`),["日",...ue.slice(0,6),"日"].map(e=>`周${e}`)];function ce(e,t){return se(R(e).getDay(),t)}function se(e,t=0){return typeof e=="string"&&(e=parseInt(e)),Xe[t][e]}function m(e,t="YYYY-MM-DD"){(typeof e=="number"||typeof e=="string")&&(e=R(e));const n={"Y+":e.getFullYear(),"M+":e.getMonth()+1,"D+":e.getDate(),"H+":e.getHours(),"m+":e.getMinutes(),"[Ss]+":e.getSeconds()};return Object.keys(n).forEach(o=>{const r=new RegExp(o),i=t.match(r);if(i){const l=n[o],a=ie(l,i[0].length);t=t.replace(r,a)}}),t}function R(e){return e?(typeof e=="string"&&(e=e.replace(/\-/g,"/")),e=new Date(e),e.getTime()?e:new Date):new Date}function Ze(e){let t=new Date,n=t.getDay(),o=t.getDate(),r=new Date,i=new Date,l=new Date,a=new Date,d=new Date,c,g,p=t.getFullYear(),y=t.getMonth();return r=new Date(p,y,o-(n||7)+1),i=new Date(r),i.setDate(r.getDate()-7),l=new Date(i),l.setDate(i.getDate()+6),c=new Date(p,y,1),g=new Date(p,y+1,0),a=new Date(p,y-1,1),d=new Date(p,y,0),e&&(t=m(t),r=m(r),i=m(i),l=m(l),c=m(c),g=m(g),a=m(a),d=m(d)),{today:t,thisWeekFirst:r,lastWeekFirst:i,lastWeekEnd:l,thisMonthFirst:c,thisMonthEnd:g,lastMonthFirst:a,lastMonthEnd:d}}function Qe(e,t,n){typeof e=="string"&&(e=e.replace(/\-/g,"/"));let o=60*1e3,r=60*o,i=24*r,l=new Date(e),a=new Date().getTime()-l.getTime(),d=new Date().toString().slice(0,15)===l.toString().slice(0,15),c=ce(l),g=t?"今天":"",p=Math.floor(a/i),y=Math.floor(a/r),V=Math.floor(a/o);return n=n||7,p>n?m(l,"MM月DD日 HH:mm"):p>2?c+" "+m(l,"HH:mm"):p>1?"前天 "+m(l,"HH:mm"):p>0?"昨天 "+m(l,"HH:mm"):y>=11?(d?g:"昨天 ")+m(l,"HH:mm"):y>=1?d?y+"小时前":"昨天 "+m(l,"HH:mm"):V>=1?V+"分钟前":"刚刚"}function qe(e,t){let n=R(e);return m(n.setDate(n.getDate()+t))}function et(e,t=1e3){let n=null;return function(){let o=this,r=arguments;n&&clearTimeout(n),n=setTimeout(function(){e.apply(o,r)},t)}}function tt(e,t=1e3){let n;return function(){(!n||Date.now()-n>t)&&(e.apply(this,arguments),n=Date.now())}}function nt(e,t=1e3){let n;return function(...o){return Le(this,null,function*(){if(!n||Date.now()-n>t)return n=Date.now(),yield e.apply(this,o)})}}function de(e,t=[]){Array.isArray(e)?e.forEach(n=>{n&&typeof n=="function"&&n.apply(void 0,t)}):e&&typeof e=="function"&&e.apply(void 0,t)}const rt={cacheResult(e){let t=null,n=null;return function(...o){return t&&o&&t===JSON.stringify(o)?n:(t=JSON.stringify(o),n=e.apply(this,o))}}};function he(e){return e?/^\[.*\]$/.test(e):!1}function pe(e){return e?/^\{.*\}$/.test(e):!1}function me(e){return/^\/.+\/[img]{0,3}$/.test(e)}function ot(e){return typeof e=="string"?he(e)?JSON.parse(e||"[]"):[]:e||[]}function it(e){return typeof e=="string"?pe(e)?JSON.parse(e||"{}"):{}:e||{}}function lt(e){if(typeof e=="string"&&me(e)){let t=e.match(/^\/(.+)\/([img]{0,3})$/);return new RegExp(t[1],t[2])}else return new RegExp("")}function ft(e,t="i"){return e=`^${e.replace(/\b|\B/g,".*")}$`,new RegExp(e,t)}function at(e){const t=e.split(";base64,"),n=t[0].split(":")[1],o=window.atob(t[1]),r=o.length,i=new Uint8Array(r);for(let l=0;l<r;l+=1)i[l]=o.charCodeAt(l);return new Blob([i],{type:n})}function K(e){return e.install=t=>{let{name:n}=e;t.component(n,e),t.component(oe("-"+n),e)},e}function ut(e,t=f.h("div"),n){return e?typeof e=="function"?e()||t:f.h(e,n&&f.reactive(n)):t}function ct(e){return!!(e&&e.$el&&e.$props&&e.$options&&e.$emit)}function st(e){let t=ye(e);t&&(t.scrollTop=0)}function ye(e){return document.getElementById(e)}function ge(e){let t=f.unref(e);return ct(t)?t.$el:t instanceof HTMLElement?t:null}function dt(e,t){return getComputedStyle(e).getPropertyValue(t)}function ht(e,t,n=!0){e.classList.remove(...t.split(" ")),n&&e.classList.add(t)}const v={rootId:"app",app:void 0};function pt(e={}){e.rootId&&(v.rootId=e.rootId),e.app&&(v.app=e.app)}const L={toast(e){},alert(e){alert(e)},showLoading(e){},hideLoading(){}};function we(e){let t=ee(v);pt(ne(e,t)),P(L,$(e,t),{deepMerge:!0,arrayMergeStrategy:"concat"})}function mt(){}function yt(e){}function gt(e){B(e)}function B(e){L.toast(e)}function wt(e){L.alert(e)}const k={show(e=""){L.showLoading(e)},hide(){L.hideLoading()}};let J;try{J=document.createElement("a")}catch(e){}function bt(e,t="未获取到联系电话"){if(!e)return B(t);e=typeof e=="number"?e.toString():e,J.href=/^tel:.*/.test(e)?e:"tel:"+e,J.click()}const Ct=Object.freeze(Object.defineProperty({__proto__:null,$:ye,$alert:wt,$loading:k,$refDOM:ge,$toast:B,Fn:rt,addUnit:D,arrayToGroup:Re,base64ToBlob:at,camelize:oe,cloneJSON:re,dateGo:qe,dealTime:Qe,debounce:et,decodeURIComponentSafe:A,decodeURISafe:h,deepClone:O,deleteItemForArr:Ue,emptyArray:Ye,entriesOf:te,errorCatch:gt,extend:Y,formatDate:m,formatSelectedData:Be,formatToSelectData:le,getArrayDataIndex:Ge,getDateConfig:Ze,getElementPropertyValue:dt,getFuzzyMatchRegExp:ft,getPercentage:ze,getProperty:Ne,getRandomElements:Je,getUniqueParam:T,getWeek:ce,getWeekByNo:se,hasSameItem:Ke,isArrayString:he,isFullUrl:S,isNumber:ae,isObjectString:pe,isRegExpString:me,isWebUrl:C,kebabCase:Pe,keysOf:ee,merge:P,methodApply:de,noop:mt,noopCatch:yt,padZero:ie,parseArray:ot,parseDate:R,parseObject:it,parseRegExp:lt,parseUrl:Ie,pick:ne,pickEx:$,queryParse:F,queryStringify:M,removeEmptyForArr:We,removeFalseForArr:Fe,removeItemForArr:je,scrollToTop:st,selectDataToObj:He,shuffleArray:fe,telephoneCall:bt,throttle:tt,throttleAsync:nt,toFormData:Ve,toSelectData:ke,toggleClass:ht,typeOf:N,urlAddParams:_,valuesOf:$e},Symbol.toStringTag,{value:"Module"})),b={};function be(e){return b[e.url]&&b[e.url].status===1?Promise.resolve("The resource is already loaded!"):b[e.url]&&b[e.url].status===2?new Promise((t,n)=>{b[e.url].waiters.push(t)}):e.production?Promise.resolve("Ignored in development environment!"):(k.show("资源加载中"),b[e.url]?b[e.url].status=2:b[e.url]={status:2,waiters:[]},new Promise((t,n)=>{const o=()=>{l(),d()},r=()=>{a(),d()};let i=null;e.type==="js"?(i=document.createElement("script"),i.src=e.url,i.onload=o,i.onerror=r):e.type==="css"&&(i=document.createElement("link"),i.rel="stylesheet",i.href=e.url,i.onload=o,i.onerror=r),i&&document.head.appendChild(i);function l(){b[e.url].status=1,k.hide(),t(e.url),de(b[e.url].waiters,[e.url])}function a(){b[e.url].status=0,k.hide(),n(new Error("Failed to load "+e.url))}function d(){i&&(i.onload=null,i.onerror=null)}}))}function vt(e){return Array.isArray(e)?Promise.all(e.map(t=>be(t))):be(e)}const Ce=Symbol("INSTALLED_KEY"),ve=Symbol("COMPONENT_INSTALLED_KEY"),De=Symbol("DIRECTIVES_INSTALLED_KEY"),Dt={mounted(e,t,n,o){typeof t.value=="function"&&t.value(e)},unmounted(e,t,n,o){typeof t.value=="function"&&t.value(null)}},Et={mounted(e,t,n,o){e.focus()},updated(e,t,n,o){}},Ot=function(t,n,o,r){t.style.height=t.parentElement.offsetHeight+"px",t.style.minHeight="100%"};function xt(e,t,n,o){if(t.value.__used)return;let r=w({},t.value);if(r.behavior=r.behavior||"smooth",typeof r.right=="number"&&(r.left=e.scrollWidth-r.right),typeof r.bottom=="number"&&(r.top=e.scrollHeight-r.bottom),r.target){let i=ge(r.target);if(i){let{offsetTop:l,offsetLeft:a}=i.offsetParent||{offsetTop:0,offsetLeft:0};r.left=i.offsetLeft-e.offsetLeft+a,r.top=i.offsetTop-e.offsetTop+l}}r.left&&typeof r.offsetX=="number"&&(r.left+=r.offsetX),r.top&&typeof r.offsetY=="number"&&(r.top+=r.offsetY),Object.defineProperty(t.value,"__used",{value:!0,enumerable:!1,writable:!0}),r.beforeScroll?r.beforeScroll(()=>{e.scrollTo(r)},r,e):e.scrollTo(r)}const G={dom:Dt,focus:Et,maxHeight:Ot,scroll:xt};function At(e){if(!e[De]){e[De]=!0;for(const t of Object.keys(G))e.directive(G[t].name||t,G[t])}}const Tt={reverse:Boolean},Ee=K(f.defineComponent({name:"column",inheritAttrs:!1,props:Tt,setup(e,{attrs:t,slots:n}){var o,r,i,l,a;return f.createVNode("div",f.mergeProps({class:{"comfy-tool--column":!0,reverse:e.reverse}},t),[((o=n.before)==null?void 0:o.call(n))||"",((r=n["before-content"])==null?void 0:r.call(n))||"",f.createVNode("div",{class:"main-content"},[((i=n.default)==null?void 0:i.call(n))||""]),((l=n["after-content"])==null?void 0:l.call(n))||"",((a=n.after)==null?void 0:a.call(n))||""])}})),_t={reverse:Boolean},Oe=K(f.defineComponent({name:"row",inheritAttrs:!1,props:_t,setup(e,{attrs:t,slots:n}){return()=>{var o,r,i,l,a;return f.createVNode("div",f.mergeProps({class:{"comfy-tool--row":!0,reverse:e.reverse}},t),[((o=n.before)==null?void 0:o.call(n))||"",((r=n["before-content"])==null?void 0:r.call(n))||"",f.createVNode("div",{class:"main-content"},[((i=n.default)==null?void 0:i.call(n))||""]),((l=n["after-content"])==null?void 0:l.call(n))||"",((a=n.after)==null?void 0:a.call(n))||""])}}})),St={flex:{type:[Number,String],default:1},width:[Number,String],height:[Number,String],minWidth:[Number,String],minHeight:[Number,String],maxWidth:[Number,String],maxHeight:[Number,String],row:Boolean,column:Boolean},xe=K(f.defineComponent({name:"expended",inheritAttrs:!1,props:St,setup(e,{attrs:t,slots:n}){const o={flex:""},r=[];if(e.flex)switch(e.flex){case"100%":o.flex="unset",o.width="100%";break;case"-":o.flex="unset";break;default:o.flex=e.flex;break}return e.minWidth&&(o.minWidth=D(e.minWidth,"px")),e.minHeight&&(o.minHeight=D(e.minHeight,"px")),e.maxWidth&&(o.maxWidth=D(e.maxWidth,"px")),e.maxHeight&&(o.maxHeight=D(e.maxHeight,"px")),e.width&&(o.width=D(e.width,"px")),e.height&&(o.height=D(e.height,"px")),e.column?r.push("u-flex-nowrap u-box-flex-col"):e.row&&r.push("u-flex-wrap"),()=>{var i;return f.createVNode("div",f.mergeProps({style:o,class:f.mergeProps({class:["comfy-tool--expended",...r]})},t),[((i=n.default)==null?void 0:i.call(n))||""])}}})),Lt={Column:Ee,Row:Oe,Expended:xe};function It(e){e[ve]||(e[ve]=!0,te(Lt).forEach(([t,n])=>{e.component(t,n)}))}function Ae(e){we({app:e}),At(e),It(e)}class Mt{constructor(t,n){this.properties=n,this.component=t,this.container=document.createElement("div");const o=f.createVNode(t,this.properties);v.app&&(o.appContext=v.app._context),f.render(o,this.container),this.instance=o.component,this.appDOM=this.container.firstChild,this.init()}init(){this.properties.teleport?this.properties.teleport:v.rootId,this.appDOM&&!this.appDOM.nodeName.startsWith("#")&&document.body.appendChild(this.appDOM)}static use(t){Object.assign(v,t)}unmount(){this.properties.teleport?this.properties.teleport:v.rootId,document.body.removeChild(this.appDOM),this.instance.unmount()}close(){this.toggle(!1)}toggle(t,n){t?this.instance.open(n):this.instance.close(n)}}const Te={show:!1,keepAlive:!1},$t=f.defineComponent({name:"comfy-tool-layer",components:{},emits:["confirm","close","cancel"],setup(e,{attrs:t,emit:n,slots:o,expose:r}){const i=f.shallowRef(null),l=f.shallowRef(null),a=f.ref(!0);let d;const c=f.shallowReactive(w(w(w({},Te),t),e)),g={onConfirm(){},onClose(){}},p=f.createVNode("div",{style:{height:"150px"}},null);function y(u){c.show=u}function V(){return d=ut(l.value,p,W(w({},c.contentProps),{LAYERSHOW:c.show})),d}function kt(){let u;return!c.keepAlive&&!c.show&&!a.value?u=()=>p:u=o.default?o.default:V,()=>u()}function Ht(){x.cancel()}function j(u){if(d&&d.component){let{ctx:I,exposed:Z}=d.component;Z&&Z[u]?Z[u]():I&&I[u]&&I[u]()}}let U;function X(u){c.show=u,c.show||c.keepAlive?(a.value=!0,U&&clearTimeout(U),U=null):U=setTimeout(()=>{a.value=!1},500),f.nextTick(()=>{c.show&&(j("onLayerShow"),j("queryData"))})}const x={init(u={},I=Te){Y(c,I,u&&$(u,["content","baseContent"])),u.onConfirm&&(g.onConfirm=u.onConfirm),u.onClose&&(g.onClose=u.onClose),u.baseContent&&(i.value=u.baseContent),l.value=u.content},open(u){x.init(u,{}),X(!0)},confirm(u){n("confirm"),X(!!g.onConfirm(u,x.close))},close(u="complete"){g.onClose(u),n("close"),X(!1),j("onClose")},cancel(){x.close("cancel"),n("cancel"),j("onCancel")}};return f.watch(()=>t,u=>{Y(c,{},u)}),r(x),f.provide("Layer",x),()=>{var u;return i.value?f.h(i.value,W(w(w(w({class:["comfy-tool--layer",(u=c.class)!=null?u:""],style:w({},c.style)},t),c.baseContentProps),$(c,["content","contentProps","onClose","width","height","class","style","baseContent","baseContentProps"])),{"onUpdate:show":y,onClose:Ht}),{default:kt(),overlayContent:o.overlayContent}):""}}});var E;class H extends Mt{constructor(t,n){super(t,n)}open(t){return this.appDOM&&document.body.appendChild(this.appDOM),this.instance.exposed.open(t)}static create(t={},n=!0){if(!E||n){let o=new H($t,t);if(n)return o;E||(E=o)}else E.instance.exposed.init(t);return E}}function z(e,t=!1){return new Promise((n,o)=>{H.create({},t).open(w({onConfirm(r,i){n(r)},onClose(r){o(r)}},e))})}z.create=H.create,z.close=()=>{E&&E.close()};const Nt="1.0.4",Pt=Ct,Rt={install(e){e[Ce]||(e[Ce]=!0,Ae(e))}};s.Column=Ee,s.ComfyTool=Pt,s.Expended=xe,s.Layer=z,s.Row=Oe,s.configComfyTool=we,s.default=Rt,s.resourceLoader=vt,s.useComfyTool=Ae,s.version=Nt,Object.defineProperties(s,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(s,f){typeof exports=="object"&&typeof module!="undefined"?f(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],f):(s=typeof globalThis!="undefined"?globalThis:s||self,f(s.ComfyTool={},s.Vue))})(this,function(s,f){"use strict";var Vt=Object.defineProperty,jt=Object.defineProperties;var Ut=Object.getOwnPropertyDescriptors;var _e=Object.getOwnPropertySymbols;var Wt=Object.prototype.hasOwnProperty,Ft=Object.prototype.propertyIsEnumerable;var Q=Math.pow,Se=(s,f,h)=>f in s?Vt(s,f,{enumerable:!0,configurable:!0,writable:!0,value:h}):s[f]=h,b=(s,f)=>{for(var h in f||(f={}))Wt.call(f,h)&&Se(s,h,f[h]);if(_e)for(var h of _e(f))Ft.call(f,h)&&Se(s,h,f[h]);return s},W=(s,f)=>jt(s,Ut(f));var Le=(s,f,h)=>new Promise((A,T)=>{var F=C=>{try{_(h.next(C))}catch(S){T(S)}},N=C=>{try{_(h.throw(C))}catch(S){T(S)}},_=C=>C.done?A(C.value):Promise.resolve(C.value).then(F,N);_((h=h.apply(s,f)).next())});function h(e){try{return decodeURI(e)}catch(t){return console.warn("[Decode Error]",e),e}}function A(e){try{return decodeURIComponent(e)}catch(t){return console.warn("[Decode Error]",e),e}}function T(e){return Array.isArray(e)?e[e.length-1]:e}function F(e,t={}){var o;t.allParam=(o=t.allParam)!=null?o:!0,e=h(h(e));let n=null;if(t.allParam){let r=e.match(/\?([^\?#]*)/g);if(!r)return null;for(const i of r)i.includes("=")&&(n||(n={}),Object.assign(n,q(i.substring(1))))}else{let r=e.match(/\?([^\?]*$)/);if(!r&&!e.includes("="))return null;n=q(r?r[1]:e)}return n&&!t.repeat&&Object.entries(n).forEach(([r,i])=>{n[r]=T(i)}),n}function N(e,t){return decodeURI(Me(e,b({sort:(n,o)=>n>o?0:-1},t)))}function _(e,t){return t?(typeof t!="string"&&(t=N(t)),t?e+(/^([^#]*\?[^#]*$)|(.*#.*\?.*$)/.test(e)?"&":"?")+t:e):e}function C(e){return/^https?:\/\//.test(e)}function S(e){return/^(https?:\/\/|blob:|data:)/.test(e)}function Ie(e){let[t,n]=e.split("//"),[o,r]=n.split("/");return[t+"//",o,r]}function q(e){return e?(e.startsWith("?")&&(e=e.slice(1)),e.split("&").reduce((t,n)=>{if(!n)return t;const[o,r]=n.split("="),i=A(o||""),l=A(r||"");return t[i]!==void 0?(Array.isArray(t[i])||(t[i]=[t[i]]),t[i].push(l)):t[i]=l,t},{})):{}}function Me(e,t={}){if(!e||typeof e!="object")return"";const{sort:n}=t;let o=Object.keys(e);return typeof n=="function"&&o.sort(n),o.map(r=>{const i=e[r];return Array.isArray(i)?i.map(l=>`${encodeURIComponent(r)}=${encodeURIComponent(String(l))}`).join("&"):`${encodeURIComponent(r)}=${encodeURIComponent(String(i))}`}).join("&")}const Y=Object.assign;function ee(e){return Object.keys(e)}function Ne(e){return Object.values(e)}function te(e){return Object.entries(e)}function ne(e,t,n=!1){return t.reduce((o,r)=>((!n||e[r]!==void 0)&&(o[r]=e[r]),o),{})}function L(e,t,n=!1){return Object.keys(e).filter(r=>!t.includes(r)).reduce((r,i)=>((!n||e[i]!==void 0)&&(r[i]=e[i]),r),{})}function P(e){return Object.prototype.toString.call(e).match(/\[object (.+)\]/)[1]}function Pe(e,t){let n=e;if(t){const o=typeof t=="string"?t.split("."):t;for(const r of o)if(n&&typeof n=="object"&&r in n)n=n[r];else return}return n}function $(e,t,{arrayMergeStrategy:n,deepMerge:o}={}){if(!t||Object.keys(t).length===0)return O(e);if(!e||Object.keys(e).length===0)return O(t);let r=O(e);for(const i of Object.keys(t)){let l=e[i],a=t[i];if(o&&P(l)=="Object"&&P(a)=="Object")r[i]=$(l,a);else if(o&&Array.isArray(l)&&Array.isArray(a))switch(n){case"concat":r[i]=[...l,...a];break;case"merge":r[i]=l.map((d,c)=>c<a.length?$({value:d},{value:a[c]}).value:d);break;case"replace":default:r[i]=[...a];break}else r[i]=a}return r}const re=e=>JSON.parse(JSON.stringify(e)),O=function(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.length?e.map(n=>O(n)):[];if(P(e)==="Object"){var t={};return Object.keys(e).forEach(n=>{t[n]=O(e[n])}),t}return e};function oe(e){return e.replace(/^-(\w)/g,(t,n)=>n.toLocaleUpperCase())}function $e(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"")}function ie(e,t=2){for(var n=e+"";n.length<t;)n="0"+n;return n}function Re(e,t=2){if(e.length===0||!t)return[];const n=[];let o=[];for(let r=0;r<e.length;r++)o.push(e[r]),o.length===t&&(n.push(o),o=[]);return o.length>0&&n.push(o),n}function ke(e){let t=[];for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push({text:e[n],label:e[n],value:n});return t}function He(e){let t={};return e.forEach(n=>{t[n.value]=n.text}),t}function Ve(e){let t=new FormData;return Object.entries(e).forEach(([n,o])=>{t.append(n,o)}),t}function le(e,t={}){let{labelKey:n,valueKey:o,childrenKey:r,keepEmptyChildren:i}=t;return n=n||"label",o=o||"value",r=r||"children",i=i!==!1,e.map(l=>{const a=W(b({},l),{label:l[n]||l.label||"",value:l[o]||l.value||"",text:l[o]||l.value||""});return l[r]&&Array.isArray(l[r])&&(i||l[r].length)&&(a.children=le(l[r],t)),a})}function je(e,t){if(!t)return e;const n=e.indexOf(t);return n===-1?e:e.filter((o,r)=>r!==n)}function Ue(e,t){if(!t)return;let n=e.indexOf(t);n>=0&&e.splice(n,1)}function We(e){return e.filter(t=>t!=null)}function Fe(e){return e.filter(t=>!!t)}function Ye(e){e.splice(0,e.length)}function Ke(e,t){if(!e||!t||!e.length||!t.length)return!1;var n=t.some(o=>e.includes(o));return n}function Be(e,t=2){return n(e,t);function n(o,r){return r--,o.map(i=>(r<=0?delete i.children:i.children=i.children?n(i.children,r):[],i))}}function Je(e,t=1,n=!0){let o=[...e];return t>=o.length&&n?o:fe(o).slice(0,t)}function fe(e){const t=[...e];for(let n=t.length;--n;){const o=Math.floor(Math.random()*(n+1));[t[n],t[o]]=[t[o],t[n]]}return t}function Ge(e,t){const[n,o,r]=t;let i={};l(e,[]);function l(a,d){a.forEach((c,g)=>{let p=re(d);if(p.push(g),Array.isArray(c))l(c,p);else{let y=c[n]||o&&c[o]||r&&c[r];y&&(i[y]=p)}})}return i}function ae(e){return typeof e=="number"||/^[+-]?\d*(\.\d+)?$/.test(e)}function D(e,t){return typeof e=="number"?e+t:e+(ae(e)?t:"")}function ze(e,t,n=2){return Math.floor(e/t*100*Q(10,n))/Q(10,n)}const ue=["一","二","三","四","五","六","七","八","九","十"],Xe=[["天",...ue.slice(0,6),"天"].map(e=>`星期${e}`),["日",...ue.slice(0,6),"日"].map(e=>`周${e}`)];function ce(e,t){return se(R(e).getDay(),t)}function se(e,t=0){return typeof e=="string"&&(e=parseInt(e)),Xe[t][e]}function m(e,t="YYYY-MM-DD"){(typeof e=="number"||typeof e=="string")&&(e=R(e));const n={"Y+":e.getFullYear(),"M+":e.getMonth()+1,"D+":e.getDate(),"H+":e.getHours(),"m+":e.getMinutes(),"[Ss]+":e.getSeconds()};return Object.keys(n).forEach(o=>{const r=new RegExp(o),i=t.match(r);if(i){const l=n[o],a=ie(l,i[0].length);t=t.replace(r,a)}}),t}function R(e){return e?(typeof e=="string"&&(e=e.replace(/\-/g,"/")),e=new Date(e),e.getTime()?e:new Date):new Date}function Ze(e){let t=new Date,n=t.getDay(),o=t.getDate(),r=new Date,i=new Date,l=new Date,a=new Date,d=new Date,c,g,p=t.getFullYear(),y=t.getMonth();return r=new Date(p,y,o-(n||7)+1),i=new Date(r),i.setDate(r.getDate()-7),l=new Date(i),l.setDate(i.getDate()+6),c=new Date(p,y,1),g=new Date(p,y+1,0),a=new Date(p,y-1,1),d=new Date(p,y,0),e&&(t=m(t),r=m(r),i=m(i),l=m(l),c=m(c),g=m(g),a=m(a),d=m(d)),{today:t,thisWeekFirst:r,lastWeekFirst:i,lastWeekEnd:l,thisMonthFirst:c,thisMonthEnd:g,lastMonthFirst:a,lastMonthEnd:d}}function Qe(e,t,n){typeof e=="string"&&(e=e.replace(/\-/g,"/"));let o=60*1e3,r=60*o,i=24*r,l=new Date(e),a=new Date().getTime()-l.getTime(),d=new Date().toString().slice(0,15)===l.toString().slice(0,15),c=ce(l),g=t?"今天":"",p=Math.floor(a/i),y=Math.floor(a/r),V=Math.floor(a/o);return n=n||7,p>n?m(l,"MM月DD日 HH:mm"):p>2?c+" "+m(l,"HH:mm"):p>1?"前天 "+m(l,"HH:mm"):p>0?"昨天 "+m(l,"HH:mm"):y>=11?(d?g:"昨天 ")+m(l,"HH:mm"):y>=1?d?y+"小时前":"昨天 "+m(l,"HH:mm"):V>=1?V+"分钟前":"刚刚"}function qe(e,t){let n=R(e);return m(n.setDate(n.getDate()+t))}function et(e,t=1e3){let n=null;return function(){let o=this,r=arguments;n&&clearTimeout(n),n=setTimeout(function(){e.apply(o,r)},t)}}function tt(e,t=1e3){let n;return function(){(!n||Date.now()-n>t)&&(e.apply(this,arguments),n=Date.now())}}function nt(e,t=1e3){let n;return function(...o){return Le(this,null,function*(){if(!n||Date.now()-n>t)return n=Date.now(),yield e.apply(this,o)})}}function de(e,t=[]){Array.isArray(e)?e.forEach(n=>{n&&typeof n=="function"&&n.apply(void 0,t)}):e&&typeof e=="function"&&e.apply(void 0,t)}const rt={cacheResult(e){let t=null,n=null;return function(...o){return t&&o&&t===JSON.stringify(o)?n:(t=JSON.stringify(o),n=e.apply(this,o))}}};function he(e){return e?/^\[.*\]$/.test(e):!1}function pe(e){return e?/^\{.*\}$/.test(e):!1}function me(e){return/^\/.+\/[img]{0,3}$/.test(e)}function ot(e){return typeof e=="string"?he(e)?JSON.parse(e||"[]"):[]:e||[]}function it(e){return typeof e=="string"?pe(e)?JSON.parse(e||"{}"):{}:e||{}}function lt(e){if(typeof e=="string"&&me(e)){let t=e.match(/^\/(.+)\/([img]{0,3})$/);return new RegExp(t[1],t[2])}else return new RegExp("")}function ft(e,t="i"){return e=`^${e.replace(/\b|\B/g,".*")}$`,new RegExp(e,t)}function at(e){const t=e.split(";base64,"),n=t[0].split(":")[1],o=window.atob(t[1]),r=o.length,i=new Uint8Array(r);for(let l=0;l<r;l+=1)i[l]=o.charCodeAt(l);return new Blob([i],{type:n})}function K(e){return e.install=t=>{let{name:n}=e;t.component(n,e),t.component(oe("-"+n),e)},e}function ut(e,t=f.h("div"),n){return e?typeof e=="function"?e()||t:f.h(e,n&&f.reactive(n)):t}function ct(e){return!!(e&&e.$el&&e.$props&&e.$options&&e.$emit)}function st(e){let t=ye(e);t&&(t.scrollTop=0)}function ye(e){return document.getElementById(e)}function ge(e){let t=f.unref(e);return ct(t)?t.$el:t instanceof HTMLElement?t:null}function dt(e,t){return getComputedStyle(e).getPropertyValue(t)}function ht(e,t,n=!0){e.classList.remove(...t.split(" ")),n&&e.classList.add(t)}const v={rootId:"app",app:void 0};function pt(e={}){e.rootId&&(v.rootId=e.rootId),e.app&&(v.app=e.app)}const I={toast(e){},alert(e){alert(e)},showLoading(e){},hideLoading(){}};function be(e){let t=ee(v);pt(ne(e,t)),$(I,L(e,t),{deepMerge:!0,arrayMergeStrategy:"concat"})}function mt(){}function yt(e){}function gt(e){B(e)}function B(e){I.toast(e)}function bt(e){I.alert(e)}const k={show(e=""){I.showLoading(e)},hide(){I.hideLoading()}};let J;try{J=document.createElement("a")}catch(e){}function wt(e,t="未获取到联系电话"){if(!e)return B(t);e=typeof e=="number"?e.toString():e,J.href=/^tel:.*/.test(e)?e:"tel:"+e,J.click()}const Ct=Object.freeze(Object.defineProperty({__proto__:null,$:ye,$alert:bt,$loading:k,$refDOM:ge,$toast:B,Fn:rt,addUnit:D,arrayToGroup:Re,base64ToBlob:at,camelize:oe,cloneJSON:re,dateGo:qe,dealTime:Qe,debounce:et,decodeURIComponentSafe:A,decodeURISafe:h,deepClone:O,deleteItemForArr:Ue,emptyArray:Ye,entriesOf:te,errorCatch:gt,extend:Y,formatDate:m,formatSelectedData:Be,formatToSelectData:le,getArrayDataIndex:Ge,getDateConfig:Ze,getElementPropertyValue:dt,getFuzzyMatchRegExp:ft,getPercentage:ze,getProperty:Pe,getRandomElements:Je,getUniqueParam:T,getWeek:ce,getWeekByNo:se,hasSameItem:Ke,isArrayString:he,isFullUrl:S,isNumber:ae,isObjectString:pe,isRegExpString:me,isWebUrl:C,kebabCase:$e,keysOf:ee,merge:$,methodApply:de,noop:mt,noopCatch:yt,padZero:ie,parseArray:ot,parseDate:R,parseObject:it,parseRegExp:lt,parseUrl:Ie,pick:ne,pickEx:L,queryParse:F,queryStringify:N,removeEmptyForArr:We,removeFalseForArr:Fe,removeItemForArr:je,scrollToTop:st,selectDataToObj:He,shuffleArray:fe,telephoneCall:wt,throttle:tt,throttleAsync:nt,toFormData:Ve,toSelectData:ke,toggleClass:ht,typeOf:P,urlAddParams:_,valuesOf:Ne},Symbol.toStringTag,{value:"Module"})),w={};function we(e){return w[e.url]&&w[e.url].status===1?Promise.resolve("The resource is already loaded!"):w[e.url]&&w[e.url].status===2?new Promise((t,n)=>{w[e.url].waiters.push(t)}):e.production?Promise.resolve("Ignored in development environment!"):(k.show("资源加载中"),w[e.url]?w[e.url].status=2:w[e.url]={status:2,waiters:[]},new Promise((t,n)=>{const o=()=>{l(),d()},r=()=>{a(),d()};let i=null;e.type==="js"?(i=document.createElement("script"),i.src=e.url,i.onload=o,i.onerror=r):e.type==="css"&&(i=document.createElement("link"),i.rel="stylesheet",i.href=e.url,i.onload=o,i.onerror=r),i&&document.head.appendChild(i);function l(){w[e.url].status=1,k.hide(),t(e.url),de(w[e.url].waiters,[e.url])}function a(){w[e.url].status=0,k.hide(),n(new Error("Failed to load "+e.url))}function d(){i&&(i.onload=null,i.onerror=null)}}))}function vt(e){return Array.isArray(e)?Promise.all(e.map(t=>we(t))):we(e)}const Ce=Symbol("INSTALLED_KEY"),ve=Symbol("COMPONENT_INSTALLED_KEY"),De=Symbol("DIRECTIVES_INSTALLED_KEY"),Dt={mounted(e,t,n,o){typeof t.value=="function"&&t.value(e)},unmounted(e,t,n,o){typeof t.value=="function"&&t.value(null)}},Et={mounted(e,t,n,o){e.focus()},updated(e,t,n,o){}},Ot=function(t,n,o,r){t.style.height=t.parentElement.offsetHeight+"px",t.style.minHeight="100%"};function xt(e,t,n,o){if(t.value.__used)return;let r=b({},t.value);if(r.behavior=r.behavior||"smooth",typeof r.right=="number"&&(r.left=e.scrollWidth-r.right),typeof r.bottom=="number"&&(r.top=e.scrollHeight-r.bottom),r.target){let i=ge(r.target);if(i){let{offsetTop:l,offsetLeft:a}=i.offsetParent||{offsetTop:0,offsetLeft:0};r.left=i.offsetLeft-e.offsetLeft+a,r.top=i.offsetTop-e.offsetTop+l}}r.left&&typeof r.offsetX=="number"&&(r.left+=r.offsetX),r.top&&typeof r.offsetY=="number"&&(r.top+=r.offsetY),Object.defineProperty(t.value,"__used",{value:!0,enumerable:!1,writable:!0}),r.beforeScroll?r.beforeScroll(()=>{e.scrollTo(r)},r,e):e.scrollTo(r)}const G={dom:Dt,focus:Et,maxHeight:Ot,scroll:xt};function At(e){if(!e[De]){e[De]=!0;for(const t of Object.keys(G))e.directive(G[t].name||t,G[t])}}const Tt={reverse:Boolean},Ee=K(f.defineComponent({name:"column",inheritAttrs:!1,props:Tt,setup(e,{attrs:t,slots:n}){return()=>{var o,r,i,l,a;return f.createVNode("div",f.mergeProps({class:{"comfy-tool--column":!0,reverse:e.reverse}},t),[((o=n.before)==null?void 0:o.call(n))||"",((r=n["before-content"])==null?void 0:r.call(n))||"",f.createVNode("div",{class:"main-content"},[((i=n.default)==null?void 0:i.call(n))||""]),((l=n["after-content"])==null?void 0:l.call(n))||"",((a=n.after)==null?void 0:a.call(n))||""])}}})),_t={reverse:Boolean},Oe=K(f.defineComponent({name:"row",inheritAttrs:!1,props:_t,setup(e,{attrs:t,slots:n}){return()=>{var o,r,i,l,a;return f.createVNode("div",f.mergeProps({class:{"comfy-tool--row":!0,reverse:e.reverse}},t),[((o=n.before)==null?void 0:o.call(n))||"",((r=n["before-content"])==null?void 0:r.call(n))||"",f.createVNode("div",{class:"main-content"},[((i=n.default)==null?void 0:i.call(n))||""]),((l=n["after-content"])==null?void 0:l.call(n))||"",((a=n.after)==null?void 0:a.call(n))||""])}}})),St={flex:{type:[Number,String],default:1},width:[Number,String],height:[Number,String],minWidth:[Number,String],minHeight:[Number,String],maxWidth:[Number,String],maxHeight:[Number,String],row:Boolean,column:Boolean},xe=K(f.defineComponent({name:"expended",inheritAttrs:!1,props:St,setup(e,{attrs:t,slots:n}){const o={flex:""},r=[];if(e.flex)switch(e.flex){case"100%":o.flex="unset",o.width="100%";break;case"-":o.flex="unset";break;default:o.flex=e.flex;break}return e.minWidth&&(o.minWidth=D(e.minWidth,"px")),e.minHeight&&(o.minHeight=D(e.minHeight,"px")),e.maxWidth&&(o.maxWidth=D(e.maxWidth,"px")),e.maxHeight&&(o.maxHeight=D(e.maxHeight,"px")),e.width&&(o.width=D(e.width,"px")),e.height&&(o.height=D(e.height,"px")),e.column?r.push("u-flex-nowrap u-box-flex-col"):e.row&&r.push("u-flex-wrap"),()=>{var i;return f.createVNode("div",f.mergeProps({style:o,class:f.mergeProps({class:["comfy-tool--expended",...r]})},t),[((i=n.default)==null?void 0:i.call(n))||""])}}})),Lt={Column:Ee,Row:Oe,Expanded:xe};function It(e){e[ve]||(e[ve]=!0,te(Lt).forEach(([t,n])=>{e.component(t,n)}))}function Ae(e){be({app:e}),At(e),It(e)}class Mt{constructor(t,n){this.properties=n,this.component=t,this.container=document.createElement("div");const o=f.createVNode(t,this.properties);v.app&&(o.appContext=v.app._context),f.render(o,this.container),this.instance=o.component,this.appDOM=this.container,this.init()}init(){this.mount()}static use(t){Object.assign(v,t)}mount(){if(this.properties.teleport?this.properties.teleport:v.rootId,this.appDOM&&!this.appDOM.isConnected)for(const t of Array.from(this.appDOM.childNodes))document.body.appendChild(t)}unmount(){var t;this.properties.teleport?this.properties.teleport:v.rootId,f.render(null,this.container),(t=this.appDOM.parentNode)==null||t.removeChild(this.appDOM)}close(){this.toggle(!1)}toggle(t,n){t?this.instance.open(n):this.instance.close(n)}}const Te={show:!1,keepAlive:!1},Nt=f.defineComponent({name:"comfy-tool-layer",inheritAttrs:!1,components:{},props:{baseContent:{type:Object,default:null}},emits:["confirm","close","cancel"],setup(e,{attrs:t,emit:n,slots:o,expose:r}){const i=f.shallowRef(e.baseContent),l=f.shallowRef(null),a=f.ref(!0);let d;const c=f.shallowReactive(b(b(b({},Te),t),e)),g={onConfirm(){},onClose(){}},p=f.createVNode("div",{style:{height:"150px"}},null);function y(u){c.show=u}function V(){return d=ut(l.value,p,W(b({},c.contentProps),{LAYERSHOW:c.show})),d}function kt(){let u;return!c.keepAlive&&!c.show&&!a.value?u=()=>p:u=o.default?o.default:V,()=>u()}function Ht(){x.cancel()}function j(u){if(d&&d.component){let{ctx:M,exposed:Z}=d.component;Z&&Z[u]?Z[u]():M&&M[u]&&M[u]()}}let U;function X(u){c.show=u,c.show||c.keepAlive?(a.value=!0,U&&clearTimeout(U),U=null):U=setTimeout(()=>{a.value=!1},500),f.nextTick(()=>{c.show&&(j("onLayerShow"),j("queryData"))})}const x={init(u={},M=Te){Y(c,M,u&&L(u,["content","baseContent"])),u.onConfirm&&(g.onConfirm=u.onConfirm),u.onClose&&(g.onClose=u.onClose),u.baseContent&&(i.value=u.baseContent),l.value=u.content},open(u){x.init(u,{}),X(!0)},confirm(u){n("confirm"),X(!!g.onConfirm(u,x.close))},close(u="complete"){g.onClose(u),n("close"),X(!1),j("onClose")},cancel(){x.close("cancel"),n("cancel"),j("onCancel")}};return f.watch(()=>t,u=>{Y(c,{},u)}),r(x),f.provide("Layer",x),()=>{var u;return f.createVNode(f.Fragment,null,[i.value?f.h(i.value,W(b(b(b({class:["comfy-tool--layer",(u=c.class)!=null?u:""],style:b({},c.style)},L(t,["content","contentProps","baseContent","baseContentProps"])),c.baseContentProps),L(c,["content","contentProps","onClose","width","height","class","style","baseContent","baseContentProps"])),{"onUpdate:show":y,onClose:Ht}),{default:kt(),overlayContent:o.overlayContent}):""])}}});var E;class H extends Mt{constructor(t,n){super(t,n)}open(t){return super.mount(),this.instance.exposed.open(t)}static create(t={},n=!0){if(!E||n){let o=new H(Nt,t);if(n)return o;E||(E=o)}else E.instance.exposed.init(t);return E}}function z(e,t=!1){return new Promise((n,o)=>{H.create({},t).open(b({onConfirm(r,i){n(r)},onClose(r){o(r)}},e))})}z.create=H.create,z.close=()=>{E&&E.close()};const Pt="1.0.5",$t=Ct,Rt={install(e){e[Ce]||(e[Ce]=!0,Ae(e))}};s.Column=Ee,s.ComfyTool=$t,s.Expanded=xe,s.Layer=z,s.Row=Oe,s.configComfyTool=be,s.default=Rt,s.resourceLoader=vt,s.useComfyTool=Ae,s.version=Pt,Object.defineProperties(s,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});