@maxax/hooks 1.0.1 → 1.0.3
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.
- package/dist/index.cjs +87 -64
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +59 -1
- package/dist/index.d.ts +59 -1
- package/dist/index.mjs +23 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -4
package/dist/index.cjs
CHANGED
|
@@ -25,6 +25,7 @@ __export(index_exports, {
|
|
|
25
25
|
useBoolean: () => useBoolean,
|
|
26
26
|
useBreakpoint: () => useBreakpoint,
|
|
27
27
|
useBrowserLocation: () => useBrowserLocation,
|
|
28
|
+
useComposableContext: () => useComposableContext,
|
|
28
29
|
useComputed: () => useComputed,
|
|
29
30
|
useContext: () => useContext,
|
|
30
31
|
useCountDown: () => useCountDown,
|
|
@@ -347,14 +348,33 @@ function createContext(contextName) {
|
|
|
347
348
|
};
|
|
348
349
|
}
|
|
349
350
|
|
|
350
|
-
// src/use-
|
|
351
|
+
// src/use-context-composable.ts
|
|
351
352
|
var import_vue7 = require("vue");
|
|
353
|
+
function useComposableContext(contextName, composable) {
|
|
354
|
+
const key = Symbol(contextName);
|
|
355
|
+
const useInject = (consumerName, defaultValue) => {
|
|
356
|
+
const value = (0, import_vue7.inject)(key, defaultValue);
|
|
357
|
+
if (consumerName && !value) {
|
|
358
|
+
throw new Error(`\`${consumerName}\` must be used within \`${contextName}\``);
|
|
359
|
+
}
|
|
360
|
+
return value || null;
|
|
361
|
+
};
|
|
362
|
+
const useProvide = (...args) => {
|
|
363
|
+
const value = composable(...args);
|
|
364
|
+
(0, import_vue7.provide)(key, value);
|
|
365
|
+
return value;
|
|
366
|
+
};
|
|
367
|
+
return [useProvide, useInject];
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// src/use-count-down.ts
|
|
371
|
+
var import_vue8 = require("vue");
|
|
352
372
|
var import_core2 = require("@vueuse/core");
|
|
353
373
|
function useCountDown(seconds) {
|
|
354
374
|
const FPS_PER_SECOND = 60;
|
|
355
|
-
const fps = (0,
|
|
356
|
-
const count = (0,
|
|
357
|
-
const isCounting = (0,
|
|
375
|
+
const fps = (0, import_vue8.ref)(0);
|
|
376
|
+
const count = (0, import_vue8.computed)(() => Math.ceil(fps.value / FPS_PER_SECOND));
|
|
377
|
+
const isCounting = (0, import_vue8.computed)(() => fps.value > 0);
|
|
358
378
|
const { pause, resume } = (0, import_core2.useRafFn)(
|
|
359
379
|
() => {
|
|
360
380
|
if (fps.value > 0) {
|
|
@@ -373,7 +393,7 @@ function useCountDown(seconds) {
|
|
|
373
393
|
fps.value = 0;
|
|
374
394
|
pause();
|
|
375
395
|
}
|
|
376
|
-
(0,
|
|
396
|
+
(0, import_vue8.onScopeDispose)(() => {
|
|
377
397
|
pause();
|
|
378
398
|
});
|
|
379
399
|
return {
|
|
@@ -385,12 +405,12 @@ function useCountDown(seconds) {
|
|
|
385
405
|
}
|
|
386
406
|
|
|
387
407
|
// src/use-deferred-true.ts
|
|
388
|
-
var
|
|
408
|
+
var import_vue9 = require("vue");
|
|
389
409
|
function useDeferredTrue(valueRef, delay, shouldDelayRef) {
|
|
390
410
|
if (!delay) return valueRef;
|
|
391
|
-
const delayedRef = (0,
|
|
411
|
+
const delayedRef = (0, import_vue9.ref)(valueRef.value);
|
|
392
412
|
let timerId = null;
|
|
393
|
-
(0,
|
|
413
|
+
(0, import_vue9.watch)(valueRef, (value) => {
|
|
394
414
|
if (timerId !== null) window.clearTimeout(timerId);
|
|
395
415
|
if (value === true) {
|
|
396
416
|
if (shouldDelayRef && !shouldDelayRef.value) {
|
|
@@ -408,8 +428,8 @@ function useDeferredTrue(valueRef, delay, shouldDelayRef) {
|
|
|
408
428
|
}
|
|
409
429
|
|
|
410
430
|
// src/use-is-composing.ts
|
|
411
|
-
var
|
|
412
|
-
var isComposingRef = (0,
|
|
431
|
+
var import_vue10 = require("vue");
|
|
432
|
+
var isComposingRef = (0, import_vue10.ref)(false);
|
|
413
433
|
function compositionStartHandler() {
|
|
414
434
|
isComposingRef.value = true;
|
|
415
435
|
}
|
|
@@ -419,14 +439,14 @@ function compositionEndHandler() {
|
|
|
419
439
|
var mountedCount = 0;
|
|
420
440
|
function useIsComposing() {
|
|
421
441
|
if (document && window) {
|
|
422
|
-
(0,
|
|
442
|
+
(0, import_vue10.onBeforeMount)(() => {
|
|
423
443
|
if (!mountedCount) {
|
|
424
444
|
window.addEventListener("compositionstart", compositionStartHandler);
|
|
425
445
|
window.addEventListener("compositionend", compositionEndHandler);
|
|
426
446
|
}
|
|
427
447
|
mountedCount++;
|
|
428
448
|
});
|
|
429
|
-
(0,
|
|
449
|
+
(0, import_vue10.onBeforeUnmount)(() => {
|
|
430
450
|
if (mountedCount <= 1) {
|
|
431
451
|
window.removeEventListener("compositionstart", compositionStartHandler);
|
|
432
452
|
window.removeEventListener("compositionend", compositionEndHandler);
|
|
@@ -440,7 +460,7 @@ function useIsComposing() {
|
|
|
440
460
|
}
|
|
441
461
|
|
|
442
462
|
// src/use-layout-style.ts
|
|
443
|
-
var
|
|
463
|
+
var import_vue11 = require("vue");
|
|
444
464
|
var import_core3 = require("@vueuse/core");
|
|
445
465
|
var import_utils = require("@maxax/utils");
|
|
446
466
|
|
|
@@ -453,11 +473,11 @@ var CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT = "--max-footer-height";
|
|
|
453
473
|
// src/use-layout-style.ts
|
|
454
474
|
function useLayoutContentStyle(diffHeight = 0) {
|
|
455
475
|
let resizeObserver = null;
|
|
456
|
-
const contentElement = (0,
|
|
457
|
-
const visibleDomRect = (0,
|
|
476
|
+
const contentElement = (0, import_vue11.ref)(null);
|
|
477
|
+
const visibleDomRect = (0, import_vue11.ref)(null);
|
|
458
478
|
const contentHeight = (0, import_core3.useCssVar)(CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT);
|
|
459
479
|
const contentWidth = (0, import_core3.useCssVar)(CSS_VARIABLE_LAYOUT_CONTENT_WIDTH);
|
|
460
|
-
const overlayStyle = (0,
|
|
480
|
+
const overlayStyle = (0, import_vue11.computed)(() => {
|
|
461
481
|
var _a;
|
|
462
482
|
const { height, left, top, width } = (_a = visibleDomRect.value) != null ? _a : {};
|
|
463
483
|
return {
|
|
@@ -474,13 +494,13 @@ function useLayoutContentStyle(diffHeight = 0) {
|
|
|
474
494
|
contentHeight.value = `${visibleDomRect.value.height - diffHeight}px`;
|
|
475
495
|
contentWidth.value = `${visibleDomRect.value.width}px`;
|
|
476
496
|
}, 16);
|
|
477
|
-
(0,
|
|
497
|
+
(0, import_vue11.onMounted)(() => {
|
|
478
498
|
if (contentElement.value && !resizeObserver) {
|
|
479
499
|
resizeObserver = new ResizeObserver(debouncedCalcHeight);
|
|
480
500
|
resizeObserver.observe(contentElement.value);
|
|
481
501
|
}
|
|
482
502
|
});
|
|
483
|
-
(0,
|
|
503
|
+
(0, import_vue11.onUnmounted)(() => {
|
|
484
504
|
resizeObserver == null ? void 0 : resizeObserver.disconnect();
|
|
485
505
|
resizeObserver = null;
|
|
486
506
|
});
|
|
@@ -520,21 +540,21 @@ function useLoading(initValue = false) {
|
|
|
520
540
|
}
|
|
521
541
|
|
|
522
542
|
// src/use-local-page.ts
|
|
523
|
-
var
|
|
543
|
+
var import_vue12 = require("vue");
|
|
524
544
|
function pagination(list, pageNo, pageSize) {
|
|
525
545
|
const offset = (pageNo - 1) * Number(pageSize);
|
|
526
546
|
const ret = offset + Number(pageSize) >= list.length ? list.slice(offset, list.length) : list.slice(offset, offset + Number(pageSize));
|
|
527
547
|
return ret;
|
|
528
548
|
}
|
|
529
549
|
function useLocalPage(list, pageSize) {
|
|
530
|
-
const currentPage = (0,
|
|
531
|
-
const pageSizeRef = (0,
|
|
532
|
-
const listRef = (0,
|
|
533
|
-
const getPaginationList = (0,
|
|
534
|
-
return pagination((0,
|
|
550
|
+
const currentPage = (0, import_vue12.ref)(1);
|
|
551
|
+
const pageSizeRef = (0, import_vue12.ref)(pageSize);
|
|
552
|
+
const listRef = (0, import_vue12.ref)(list);
|
|
553
|
+
const getPaginationList = (0, import_vue12.computed)(() => {
|
|
554
|
+
return pagination((0, import_vue12.unref)(listRef), (0, import_vue12.unref)(currentPage), (0, import_vue12.unref)(pageSizeRef));
|
|
535
555
|
});
|
|
536
|
-
const getTotal = (0,
|
|
537
|
-
return (0,
|
|
556
|
+
const getTotal = (0, import_vue12.computed)(() => {
|
|
557
|
+
return (0, import_vue12.unref)(listRef).length;
|
|
538
558
|
});
|
|
539
559
|
function setCurrentPage(page) {
|
|
540
560
|
currentPage.value = page;
|
|
@@ -547,19 +567,19 @@ function useLocalPage(list, pageSize) {
|
|
|
547
567
|
setPageSize(page.pageSize);
|
|
548
568
|
}
|
|
549
569
|
function getPageList() {
|
|
550
|
-
return pagination((0,
|
|
570
|
+
return pagination((0, import_vue12.unref)(listRef), (0, import_vue12.unref)(currentPage), (0, import_vue12.unref)(pageSizeRef));
|
|
551
571
|
}
|
|
552
572
|
return { setCurrentPage, getTotal, setPageSize, getPaginationList, setPagination, getPageList };
|
|
553
573
|
}
|
|
554
574
|
|
|
555
575
|
// src/use-lock-html-scroll.ts
|
|
556
|
-
var
|
|
576
|
+
var import_vue13 = require("vue");
|
|
557
577
|
var lockCount = 0;
|
|
558
578
|
var originalMarginRight = "";
|
|
559
579
|
var originalOverflow = "";
|
|
560
580
|
var originalOverflowX = "";
|
|
561
581
|
var originalOverflowY = "";
|
|
562
|
-
var lockHtmlScrollRightCompensationRef = (0,
|
|
582
|
+
var lockHtmlScrollRightCompensationRef = (0, import_vue13.ref)("0px");
|
|
563
583
|
function useLockHtmlScroll(lockRef) {
|
|
564
584
|
if (typeof document === "undefined") return;
|
|
565
585
|
const el = document.documentElement;
|
|
@@ -572,8 +592,8 @@ function useLockHtmlScroll(lockRef) {
|
|
|
572
592
|
el.style.overflowY = originalOverflowY;
|
|
573
593
|
lockHtmlScrollRightCompensationRef.value = "0px";
|
|
574
594
|
};
|
|
575
|
-
(0,
|
|
576
|
-
watchStopHandle = (0,
|
|
595
|
+
(0, import_vue13.onMounted)(() => {
|
|
596
|
+
watchStopHandle = (0, import_vue13.watch)(
|
|
577
597
|
lockRef,
|
|
578
598
|
(value) => {
|
|
579
599
|
if (value) {
|
|
@@ -606,7 +626,7 @@ function useLockHtmlScroll(lockRef) {
|
|
|
606
626
|
}
|
|
607
627
|
);
|
|
608
628
|
});
|
|
609
|
-
(0,
|
|
629
|
+
(0, import_vue13.onBeforeUnmount)(() => {
|
|
610
630
|
watchStopHandle == null ? void 0 : watchStopHandle();
|
|
611
631
|
if (activated) {
|
|
612
632
|
lockCount--;
|
|
@@ -619,11 +639,11 @@ function useLockHtmlScroll(lockRef) {
|
|
|
619
639
|
}
|
|
620
640
|
|
|
621
641
|
// src/use-memo.ts
|
|
622
|
-
var
|
|
642
|
+
var import_vue14 = require("vue");
|
|
623
643
|
function useMemo(getterOrOptions) {
|
|
624
|
-
const computedValueRef = (0,
|
|
625
|
-
const valueRef = (0,
|
|
626
|
-
(0,
|
|
644
|
+
const computedValueRef = (0, import_vue14.computed)(getterOrOptions);
|
|
645
|
+
const valueRef = (0, import_vue14.ref)(computedValueRef.value);
|
|
646
|
+
(0, import_vue14.watch)(computedValueRef, (value) => {
|
|
627
647
|
valueRef.value = value;
|
|
628
648
|
});
|
|
629
649
|
if (typeof getterOrOptions === "function") {
|
|
@@ -642,14 +662,14 @@ function useMemo(getterOrOptions) {
|
|
|
642
662
|
}
|
|
643
663
|
|
|
644
664
|
// src/use-merged-state.ts
|
|
645
|
-
var
|
|
665
|
+
var import_vue15 = require("vue");
|
|
646
666
|
function useMergedState(controlledStateRef, uncontrolledStateRef) {
|
|
647
|
-
(0,
|
|
667
|
+
(0, import_vue15.watch)(controlledStateRef, (value) => {
|
|
648
668
|
if (value !== void 0) {
|
|
649
669
|
uncontrolledStateRef.value = value;
|
|
650
670
|
}
|
|
651
671
|
});
|
|
652
|
-
return (0,
|
|
672
|
+
return (0, import_vue15.computed)(() => {
|
|
653
673
|
if (controlledStateRef.value === void 0) {
|
|
654
674
|
return uncontrolledStateRef.value;
|
|
655
675
|
}
|
|
@@ -658,14 +678,14 @@ function useMergedState(controlledStateRef, uncontrolledStateRef) {
|
|
|
658
678
|
}
|
|
659
679
|
|
|
660
680
|
// src/use-script.ts
|
|
661
|
-
var
|
|
681
|
+
var import_vue16 = require("vue");
|
|
662
682
|
function useScript(opts) {
|
|
663
|
-
const isLoading = (0,
|
|
664
|
-
const error = (0,
|
|
665
|
-
const success = (0,
|
|
683
|
+
const isLoading = (0, import_vue16.ref)(false);
|
|
684
|
+
const error = (0, import_vue16.ref)(false);
|
|
685
|
+
const success = (0, import_vue16.ref)(false);
|
|
666
686
|
let script;
|
|
667
687
|
const promise = new Promise((resolve, reject) => {
|
|
668
|
-
(0,
|
|
688
|
+
(0, import_vue16.onMounted)(() => {
|
|
669
689
|
script = document.createElement("script");
|
|
670
690
|
script.type = "text/javascript";
|
|
671
691
|
script.onload = () => {
|
|
@@ -684,7 +704,7 @@ function useScript(opts) {
|
|
|
684
704
|
document.head.appendChild(script);
|
|
685
705
|
});
|
|
686
706
|
});
|
|
687
|
-
(0,
|
|
707
|
+
(0, import_vue16.onUnmounted)(() => {
|
|
688
708
|
script && script.remove();
|
|
689
709
|
});
|
|
690
710
|
return {
|
|
@@ -696,12 +716,12 @@ function useScript(opts) {
|
|
|
696
716
|
}
|
|
697
717
|
|
|
698
718
|
// src/use-scroll.ts
|
|
699
|
-
var
|
|
719
|
+
var import_vue17 = require("vue");
|
|
700
720
|
var import_core4 = require("@vueuse/core");
|
|
701
721
|
var import_utils2 = require("@maxax/utils");
|
|
702
722
|
function useScroll(refEl, options) {
|
|
703
|
-
const refX = (0,
|
|
704
|
-
const refY = (0,
|
|
723
|
+
const refX = (0, import_vue17.ref)(0);
|
|
724
|
+
const refY = (0, import_vue17.ref)(0);
|
|
705
725
|
let handler = () => {
|
|
706
726
|
if ((0, import_utils2.isWindow)(refEl.value)) {
|
|
707
727
|
refX.value = refEl.value.scrollX;
|
|
@@ -720,8 +740,8 @@ function useScroll(refEl, options) {
|
|
|
720
740
|
handler = (0, import_core4.useThrottleFn)(handler, wait);
|
|
721
741
|
}
|
|
722
742
|
let stopWatch;
|
|
723
|
-
(0,
|
|
724
|
-
stopWatch = (0,
|
|
743
|
+
(0, import_vue17.onMounted)(() => {
|
|
744
|
+
stopWatch = (0, import_vue17.watch)(
|
|
725
745
|
refEl,
|
|
726
746
|
(el, prevEl, onCleanup) => {
|
|
727
747
|
if (el) {
|
|
@@ -738,7 +758,7 @@ function useScroll(refEl, options) {
|
|
|
738
758
|
{ immediate: true }
|
|
739
759
|
);
|
|
740
760
|
});
|
|
741
|
-
(0,
|
|
761
|
+
(0, import_vue17.onUnmounted)(() => {
|
|
742
762
|
refEl.value && refEl.value.removeEventListener("scroll", handler);
|
|
743
763
|
});
|
|
744
764
|
function stop() {
|
|
@@ -748,38 +768,40 @@ function useScroll(refEl, options) {
|
|
|
748
768
|
}
|
|
749
769
|
|
|
750
770
|
// src/use-signal.ts
|
|
751
|
-
var
|
|
771
|
+
var import_vue18 = require("vue");
|
|
752
772
|
function useSignal(initialValue, options) {
|
|
753
773
|
const { useRef } = options || {};
|
|
754
|
-
const state = useRef ? (0,
|
|
774
|
+
const state = useRef ? (0, import_vue18.ref)(initialValue) : (0, import_vue18.shallowRef)(initialValue);
|
|
755
775
|
return createSignal(state);
|
|
756
776
|
}
|
|
757
777
|
function useComputed(getterOrOptions, debugOptions) {
|
|
758
778
|
const isGetter = typeof getterOrOptions === "function";
|
|
759
|
-
const computedValue = (0,
|
|
779
|
+
const computedValue = (0, import_vue18.computed)(getterOrOptions, debugOptions);
|
|
760
780
|
if (isGetter) {
|
|
761
781
|
return () => computedValue.value;
|
|
762
782
|
}
|
|
763
783
|
return createSignal(computedValue);
|
|
764
784
|
}
|
|
765
785
|
function createSignal(state) {
|
|
766
|
-
const signal = () => state.value;
|
|
786
|
+
const signal = (() => state.value);
|
|
767
787
|
signal.set = (value) => {
|
|
788
|
+
;
|
|
768
789
|
state.value = value;
|
|
769
790
|
};
|
|
770
791
|
signal.update = (updater) => {
|
|
792
|
+
;
|
|
771
793
|
state.value = updater(state.value);
|
|
772
794
|
};
|
|
773
795
|
signal.mutate = (mutator) => {
|
|
774
796
|
mutator(state.value);
|
|
775
|
-
(0,
|
|
797
|
+
(0, import_vue18.triggerRef)(state);
|
|
776
798
|
};
|
|
777
799
|
signal.getRef = () => state;
|
|
778
800
|
return signal;
|
|
779
801
|
}
|
|
780
802
|
|
|
781
803
|
// src/use-svg-icon-render.ts
|
|
782
|
-
var
|
|
804
|
+
var import_vue19 = require("vue");
|
|
783
805
|
function useSvgIconRender(SvgIcon) {
|
|
784
806
|
const SvgIconVNode = (config) => {
|
|
785
807
|
const { color, fontSize, icon, localIcon } = config;
|
|
@@ -793,7 +815,7 @@ function useSvgIconRender(SvgIcon) {
|
|
|
793
815
|
if (!icon && !localIcon) {
|
|
794
816
|
return void 0;
|
|
795
817
|
}
|
|
796
|
-
return () => (0,
|
|
818
|
+
return () => (0, import_vue19.h)(SvgIcon, { icon, localIcon, style });
|
|
797
819
|
};
|
|
798
820
|
return {
|
|
799
821
|
SvgIconVNode
|
|
@@ -801,17 +823,17 @@ function useSvgIconRender(SvgIcon) {
|
|
|
801
823
|
}
|
|
802
824
|
|
|
803
825
|
// src/use-table.ts
|
|
804
|
-
var
|
|
826
|
+
var import_vue20 = require("vue");
|
|
805
827
|
var import_utils3 = require("@maxax/utils");
|
|
806
828
|
function useHookTable(config) {
|
|
807
829
|
const { loading, startLoading, endLoading } = useLoading();
|
|
808
830
|
const { bool: empty, setBool: setEmpty } = useBoolean();
|
|
809
831
|
const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config;
|
|
810
|
-
const searchParams = (0,
|
|
811
|
-
const allColumns = (0,
|
|
812
|
-
const data = (0,
|
|
813
|
-
const columnChecks = (0,
|
|
814
|
-
const columns = (0,
|
|
832
|
+
const searchParams = (0, import_vue20.reactive)((0, import_utils3.jsonClone)({ ...apiParams }));
|
|
833
|
+
const allColumns = (0, import_vue20.ref)(config.columns());
|
|
834
|
+
const data = (0, import_vue20.ref)([]);
|
|
835
|
+
const columnChecks = (0, import_vue20.ref)(getColumnChecks(config.columns()));
|
|
836
|
+
const columns = (0, import_vue20.computed)(() => getColumns(allColumns.value, columnChecks.value));
|
|
815
837
|
function reloadColumns() {
|
|
816
838
|
allColumns.value = config.columns();
|
|
817
839
|
const checkMap = new Map(columnChecks.value.map((col) => [col.key, col.checked]));
|
|
@@ -873,6 +895,7 @@ function useHookTable(config) {
|
|
|
873
895
|
useBoolean,
|
|
874
896
|
useBreakpoint,
|
|
875
897
|
useBrowserLocation,
|
|
898
|
+
useComposableContext,
|
|
876
899
|
useComputed,
|
|
877
900
|
useContext,
|
|
878
901
|
useCountDown,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/use-boolean.ts","../src/use-breakpoint.ts","../src/enum/breakpointEnum.ts","../src/use-event-listener.ts","../src/use-browser-location.ts","../src/use-collection.ts","../src/use-context.ts","../src/use-count-down.ts","../src/use-deferred-true.ts","../src/use-is-composing.ts","../src/use-layout-style.ts","../src/const/index.ts","../src/use-loading.ts","../src/use-local-page.ts","../src/use-lock-html-scroll.ts","../src/use-memo.ts","../src/use-merged-state.ts","../src/use-script.ts","../src/use-scroll.ts","../src/use-signal.ts","../src/use-svg-icon-render.ts","../src/use-table.ts"],"sourcesContent":["export * from './use-boolean'\nexport * from './use-breakpoint'\nexport * from './use-browser-location'\nexport * from './use-collection'\nexport * from './use-context'\nexport * from './use-count-down'\nexport * from './use-deferred-true'\nexport * from './use-event-listener'\nexport * from './use-is-composing'\nexport * from './use-layout-style'\nexport * from './use-loading'\nexport * from './use-local-page'\nexport * from './use-lock-html-scroll'\nexport * from './use-memo'\nexport * from './use-merged-state'\nexport * from './use-request'\nexport * from './use-script'\nexport * from './use-scroll'\nexport * from './use-signal'\nexport * from './use-svg-icon-render'\nexport * from './use-table'\n","import { ref } from 'vue'\n\n/**\n * Boolean\n *\n * @param initValue Init value\n */\nexport function useBoolean(initValue = false) {\n const bool = ref(initValue)\n\n function setBool(value: boolean) {\n bool.value = value\n }\n function setTrue() {\n setBool(true)\n }\n function setFalse() {\n setBool(false)\n }\n function toggle() {\n setBool(!bool.value)\n }\n\n return {\n bool,\n setBool,\n setTrue,\n setFalse,\n toggle\n }\n}\n","import type { ComputedRef } from 'vue'\nimport { computed, ref, unref } from 'vue'\nimport { ScreenEnum, screenMap, SizeEnum } from './enum/breakpointEnum'\nimport { useEventListener } from './use-event-listener'\n\nlet globalScreenRef: ComputedRef<SizeEnum | undefined>\nlet globalWidthRef: ComputedRef<number>\nlet globalRealWidthRef: ComputedRef<number>\n\nexport interface CreateCallbackParams {\n screen: ComputedRef<SizeEnum | undefined>\n width: ComputedRef<number>\n realWidth: ComputedRef<number>\n screenEnum: typeof ScreenEnum\n screenMap: Map<SizeEnum, number>\n sizeEnum: typeof SizeEnum\n}\n\nexport function useBreakpoint() {\n return {\n screenRef: computed(() => unref(globalScreenRef)),\n widthRef: globalWidthRef,\n screenEnum: ScreenEnum,\n realWidthRef: globalRealWidthRef\n }\n}\n\n// Just call it once\nexport function createBreakpointListen(fn?: (opt: CreateCallbackParams) => void) {\n const screenRef = ref<SizeEnum>(SizeEnum.XL)\n const realWidthRef = ref(window.innerWidth)\n\n function getWindowWidth() {\n const width = document.body.clientWidth\n const xs = screenMap.get(SizeEnum.XS)!\n const sm = screenMap.get(SizeEnum.SM)!\n const md = screenMap.get(SizeEnum.MD)!\n const lg = screenMap.get(SizeEnum.LG)!\n const xl = screenMap.get(SizeEnum.XL)!\n if (width < xs) {\n screenRef.value = SizeEnum.XS\n } else if (width < sm) {\n screenRef.value = SizeEnum.SM\n } else if (width < md) {\n screenRef.value = SizeEnum.MD\n } else if (width < lg) {\n screenRef.value = SizeEnum.LG\n } else if (width < xl) {\n screenRef.value = SizeEnum.XL\n } else {\n screenRef.value = SizeEnum.XXL\n }\n realWidthRef.value = width\n }\n\n useEventListener({\n el: window,\n name: 'resize',\n\n listener: () => {\n getWindowWidth()\n resizeFn()\n }\n // Wait: 100,\n })\n\n getWindowWidth()\n globalScreenRef = computed(() => unref(screenRef))\n globalWidthRef = computed((): number => screenMap.get(unref(screenRef)!)!)\n globalRealWidthRef = computed((): number => unref(realWidthRef))\n\n function resizeFn() {\n fn?.({\n screen: globalScreenRef,\n width: globalWidthRef,\n realWidth: globalRealWidthRef,\n screenEnum: ScreenEnum,\n screenMap,\n sizeEnum: SizeEnum\n })\n }\n\n resizeFn()\n return {\n screenRef: globalScreenRef,\n screenEnum: ScreenEnum,\n widthRef: globalWidthRef,\n realWidthRef: globalRealWidthRef\n }\n}\n","export enum SizeEnum {\n XS = 'XS',\n SM = 'SM',\n MD = 'MD',\n LG = 'LG',\n XL = 'XL',\n XXL = 'XXL'\n}\n\nexport enum ScreenEnum {\n XS = 320,\n SM = 640,\n MD = 768,\n LG = 960,\n XL = 1280,\n XXL = 1536\n}\n\nconst screenMap = new Map<SizeEnum, number>()\n\nscreenMap.set(SizeEnum.XS, ScreenEnum.XS)\nscreenMap.set(SizeEnum.SM, ScreenEnum.SM)\nscreenMap.set(SizeEnum.MD, ScreenEnum.MD)\nscreenMap.set(SizeEnum.LG, ScreenEnum.LG)\nscreenMap.set(SizeEnum.XL, ScreenEnum.XL)\nscreenMap.set(SizeEnum.XXL, ScreenEnum.XXL)\n\nexport { screenMap }\n","import type { Ref } from 'vue'\nimport { ref, unref, watch } from 'vue'\nimport { useDebounceFn, useThrottleFn } from '@vueuse/core'\n\nexport type RemoveEventFn = () => void\nexport interface UseEventParams {\n el?: Element | Ref<Element | undefined> | Window | any\n name: string\n listener: EventListener\n options?: boolean | AddEventListenerOptions\n autoRemove?: boolean\n isDebounce?: boolean\n wait?: number\n}\nexport function useEventListener({ el = window, name, listener, options, autoRemove = true, isDebounce = true, wait = 80 }: UseEventParams): { removeEvent: RemoveEventFn } {\n /* eslint-disable-next-line */\n let remove: RemoveEventFn = () => { };\n const isAddRef = ref(false)\n\n if (el) {\n const element = ref(el as Element) as Ref<Element>\n\n const handler = isDebounce ? useDebounceFn(listener, wait) : useThrottleFn(listener, wait)\n const realHandler = wait ? handler : listener\n const removeEventListener = (e: Element) => {\n isAddRef.value = true\n e.removeEventListener(name, realHandler, options)\n }\n const addEventListener = (e: Element) => e.addEventListener(name, realHandler, options)\n\n const removeWatch = watch(\n element,\n (v, _ov, cleanUp) => {\n if (v) {\n !unref(isAddRef) && addEventListener(v)\n cleanUp(() => {\n autoRemove && removeEventListener(v)\n })\n }\n },\n { immediate: true }\n )\n\n remove = () => {\n removeEventListener(element.value)\n removeWatch()\n }\n }\n return { removeEvent: remove }\n}\n","import { onMounted, onUnmounted, type Ref, ref } from 'vue'\n\nexport interface WindowLocation {\n hash?: string\n host?: string\n hostname?: string\n href?: string\n origin?: string\n pathname?: string\n port?: string\n protocol?: string\n search?: string\n}\n\nconst isBrowser = typeof document !== 'undefined' && typeof window !== 'undefined'\n\nexport function useBrowserLocation(customWindow = isBrowser ? window : null): Ref<WindowLocation> {\n const getWindowLocation = (): WindowLocation => {\n const { hash, host, hostname, href, origin, pathname, port, protocol, search } = customWindow?.location || {}\n\n return {\n hash,\n host,\n hostname,\n href,\n origin,\n pathname,\n port,\n protocol,\n search\n }\n }\n\n const locationState = ref(getWindowLocation())\n\n const updateLocation = (): void => {\n locationState.value = getWindowLocation()\n }\n\n onMounted(() => {\n if (customWindow) {\n customWindow.addEventListener('popstate', updateLocation)\n customWindow.addEventListener('hashchange', updateLocation)\n }\n })\n\n onUnmounted(() => {\n if (customWindow) {\n customWindow.removeEventListener('popstate', updateLocation)\n customWindow.removeEventListener('hashchange', updateLocation)\n }\n })\n\n return locationState\n}\n","import type { InjectionKey, Ref } from 'vue'\nimport { getCurrentInstance, inject, onBeforeUnmount, onMounted, watch } from 'vue'\n\n// 函数的作用是管理 Vue 组件的实例集合。它通过注入的方式将组件实例注册到指定的集合中,并在组件卸载时进行清理。以下是该函数的主要功能说明:\nexport function useInjectionInstanceCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, registerKeyRef: Ref<string | undefined>): void {\n const injection = inject<Record<string, Record<string, any>> | null>(injectionName, null)\n if (injection === null) return\n const vm = getCurrentInstance()?.proxy\n watch(registerKeyRef, registerInstance)\n registerInstance(registerKeyRef.value)\n onBeforeUnmount(() => {\n registerInstance(undefined, registerKeyRef.value)\n })\n function registerInstance(key?: string, oldKey?: string): void {\n if (!injection) return\n const collection = injection[collectionKey]\n if (oldKey !== undefined) removeInstance(collection, oldKey)\n if (key !== undefined) addInstance(collection, key)\n }\n function removeInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n collection[key].splice(\n collection[key].findIndex(instance => instance === vm),\n 1\n )\n }\n function addInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n if (!~collection[key].findIndex(instance => instance === vm)) {\n collection[key].push(vm)\n }\n }\n}\n\nexport function useInjectionCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, valueRef: Ref<any>): void {\n const injection = inject<Record<any, any[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n injection[collectionKey].push(valueRef.value)\n watch(valueRef, (value, prevValue) => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === prevValue)\n if (~index) collectionArray.splice(index, 1)\n collectionArray.push(value)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === valueRef.value)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n\nexport function useInjectionElementCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, getElement: () => HTMLElement | null): void {\n const injection = inject<Record<string, HTMLElement[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n onMounted(() => {\n const el = getElement()\n if (!el) return\n injection[collectionKey].push(el)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const element = getElement()\n const index = collectionArray.findIndex(collectionElement => collectionElement === element)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\n/**\n * Use context\n *\n * @example\n * ```ts\n * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue\n *\n * // context.ts\n * import { ref } from 'vue';\n * import { useContext } from '@max/hooks';\n *\n * export const { setupStore, useStore } = useContext('demo', () => {\n * const count = ref(0);\n *\n * function increment() {\n * count.value++;\n * }\n *\n * function decrement() {\n * count.value--;\n * }\n *\n * return {\n * count,\n * increment,\n * decrement\n * };\n * })\n * ``` // A.vue\n * ```vue\n * <template>\n * <div>A</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { setupStore } from './context';\n *\n * setupStore();\n * // const { increment } = setupStore(); // also can control the store in the parent component\n * </script>\n * ``` // B.vue\n * ```vue\n * <template>\n * <div>B</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { useStore } from './context';\n *\n * const { count, increment } = useStore();\n * </script>\n * ```;\n *\n * // C.vue is same as B.vue\n *\n * @param contextName Context name\n * @param fn Context function\n */\nexport function useContext<T extends (...args: any[]) => any>(contextName: string, fn: T) {\n type Context = ReturnType<T>\n\n const { useProvide, useInject: useStore } = createContext<Context>(contextName)\n\n function setupStore(...args: Parameters<T>) {\n const context: Context = fn(...args)\n return useProvide(context)\n }\n\n return {\n /** Setup store in the parent component */\n setupStore,\n /** Use store in the child component */\n useStore\n }\n}\n\n/** Create context */\nfunction createContext<T>(contextName: string) {\n const injectKey: InjectionKey<T> = Symbol(contextName)\n\n function useProvide(context: T) {\n provide(injectKey, context)\n\n return context\n }\n\n function useInject() {\n return inject(injectKey) as T\n }\n\n return {\n useProvide,\n useInject\n }\n}\n","import { computed, onScopeDispose, ref } from 'vue'\nimport { useRafFn } from '@vueuse/core'\n\n/**\n * Count down\n *\n * @param seconds - count down seconds\n */\nexport function useCountDown(seconds: number) {\n const FPS_PER_SECOND = 60\n\n const fps = ref(0)\n\n const count = computed(() => Math.ceil(fps.value / FPS_PER_SECOND))\n\n const isCounting = computed(() => fps.value > 0)\n\n const { pause, resume } = useRafFn(\n () => {\n if (fps.value > 0) {\n fps.value -= 1\n } else {\n pause()\n }\n },\n { immediate: false }\n )\n\n function start(updateSeconds: number = seconds) {\n fps.value = FPS_PER_SECOND * updateSeconds\n resume()\n }\n\n function stop() {\n fps.value = 0\n pause()\n }\n\n onScopeDispose(() => {\n pause()\n })\n\n return {\n count,\n isCounting,\n start,\n stop\n }\n}\n","import { type Ref, ref, watch } from 'vue'\n\n// 此函数用于在指定延迟后返回一个布尔值引用,基于输入的值引用和延迟条件\nexport function useDeferredTrue(valueRef: Ref<any>, delay: number, shouldDelayRef: Ref<boolean>): Ref<boolean> {\n if (!delay) return valueRef\n const delayedRef = ref(valueRef.value)\n let timerId: number | null = null\n watch(valueRef, value => {\n if (timerId !== null) window.clearTimeout(timerId)\n if (value === true) {\n if (shouldDelayRef && !shouldDelayRef.value) {\n delayedRef.value = true\n } else {\n timerId = window.setTimeout(() => {\n delayedRef.value = true\n }, delay)\n }\n } else {\n delayedRef.value = false\n }\n })\n return delayedRef\n}\n","import { onBeforeMount, onBeforeUnmount, type Ref, ref } from 'vue'\n\nconst isComposingRef = ref(false)\nfunction compositionStartHandler(): void {\n isComposingRef.value = true\n}\nfunction compositionEndHandler(): void {\n isComposingRef.value = false\n}\nlet mountedCount = 0\n\n// 用于检测用户是否正在进行输入法的组合输入\nexport function useIsComposing(): Ref<boolean> {\n if (document && window) {\n onBeforeMount(() => {\n if (!mountedCount) {\n window.addEventListener('compositionstart', compositionStartHandler)\n window.addEventListener('compositionend', compositionEndHandler)\n }\n mountedCount++\n })\n onBeforeUnmount(() => {\n if (mountedCount <= 1) {\n window.removeEventListener('compositionstart', compositionStartHandler)\n window.removeEventListener('compositionend', compositionEndHandler)\n mountedCount = 0\n } else {\n mountedCount--\n }\n })\n }\n return isComposingRef\n}\n","import type { CSSProperties } from 'vue'\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\nimport { useCssVar, useDebounceFn } from '@vueuse/core'\nimport type { VisibleDomRect } from '@maxax/utils'\nimport { getElementVisibleRect } from '@maxax/utils'\nimport { CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT, CSS_VARIABLE_LAYOUT_CONTENT_WIDTH, CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT, CSS_VARIABLE_LAYOUT_HEADER_HEIGHT } from './const'\n\nexport function useLayoutContentStyle(diffHeight = 0) {\n let resizeObserver: null | ResizeObserver = null\n const contentElement = ref<HTMLDivElement | null>(null)\n const visibleDomRect = ref<null | VisibleDomRect>(null)\n const contentHeight = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT)\n const contentWidth = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_WIDTH)\n\n const overlayStyle = computed((): CSSProperties => {\n const { height, left, top, width } = visibleDomRect.value ?? {}\n return {\n height: `${height}px`,\n left: `${left}px`,\n position: 'fixed',\n top: `${top}px`,\n width: `${width}px`,\n zIndex: 150\n }\n })\n\n const debouncedCalcHeight = useDebounceFn((_entries: ResizeObserverEntry[]) => {\n visibleDomRect.value = getElementVisibleRect(contentElement.value)\n contentHeight.value = `${visibleDomRect.value.height - diffHeight}px`\n contentWidth.value = `${visibleDomRect.value.width}px`\n }, 16)\n\n onMounted(() => {\n if (contentElement.value && !resizeObserver) {\n resizeObserver = new ResizeObserver(debouncedCalcHeight)\n resizeObserver.observe(contentElement.value)\n }\n })\n\n onUnmounted(() => {\n resizeObserver?.disconnect()\n resizeObserver = null\n })\n\n return { contentElement, overlayStyle, visibleDomRect }\n}\n\nexport function useLayoutHeaderStyle() {\n const headerHeight = useCssVar(CSS_VARIABLE_LAYOUT_HEADER_HEIGHT)\n\n return {\n getLayoutHeaderHeight: () => {\n return Number.parseInt(`${headerHeight.value}`, 10)\n },\n setLayoutHeaderHeight: (height: number) => {\n headerHeight.value = `${height}px`\n }\n }\n}\n\nexport function useLayoutFooterStyle() {\n const footerHeight = useCssVar(CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT)\n\n return {\n getLayoutFooterHeight: () => {\n return Number.parseInt(`${footerHeight.value}`, 10)\n },\n setLayoutFooterHeight: (height: number) => {\n footerHeight.value = `${height}px`\n }\n }\n}\n","/** Layout content 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT = '--max-content-height'\n/** Layout content 组件的宽度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_WIDTH = '--max-content-width'\n/** Layout header 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_HEADER_HEIGHT = '--max-header-height'\n/** Layout footer 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT = '--max-footer-height'\n","import { useBoolean } from './use-boolean'\n\n/**\n * Loading\n *\n * @param initValue Init value\n */\nexport function useLoading(initValue = false) {\n const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(initValue)\n\n return {\n loading,\n startLoading,\n endLoading\n }\n}\n","import { computed, ref, unref } from 'vue'\n\nfunction pagination<T = any>(list: T[], pageNo: number, pageSize: number): T[] {\n const offset = (pageNo - 1) * Number(pageSize)\n const ret = offset + Number(pageSize) >= list.length ? list.slice(offset, list.length) : list.slice(offset, offset + Number(pageSize))\n return ret\n}\n\nexport function useLocalPage(list: any[], pageSize: number) {\n const currentPage = ref(1)\n const pageSizeRef = ref(pageSize)\n const listRef = ref(list)\n\n const getPaginationList = computed(() => {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n })\n\n const getTotal = computed(() => {\n return unref(listRef).length\n })\n\n function setCurrentPage(page: number) {\n currentPage.value = page\n }\n\n function setPageSize(size: number) {\n pageSizeRef.value = size\n }\n\n function setPagination(page: { currentPage: number; pageSize: number }) {\n setCurrentPage(page.currentPage)\n setPageSize(page.pageSize)\n }\n\n function getPageList() {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n }\n\n return { setCurrentPage, getTotal, setPageSize, getPaginationList, setPagination, getPageList }\n}\n","import { type Ref, type WatchStopHandle, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nlet lockCount = 0\nlet originalMarginRight: string = ''\nlet originalOverflow: string = ''\nlet originalOverflowX: string = ''\nlet originalOverflowY: string = ''\nexport const lockHtmlScrollRightCompensationRef = ref('0px')\n\nexport function useLockHtmlScroll(lockRef: Ref<boolean>): void {\n // not browser\n if (typeof document === 'undefined') return\n const el = document.documentElement\n let watchStopHandle: WatchStopHandle | undefined\n let activated = false\n const unlock = (): void => {\n el.style.marginRight = originalMarginRight\n el.style.overflow = originalOverflow\n el.style.overflowX = originalOverflowX\n el.style.overflowY = originalOverflowY\n lockHtmlScrollRightCompensationRef.value = '0px'\n }\n onMounted(() => {\n watchStopHandle = watch(\n lockRef,\n value => {\n if (value) {\n if (!lockCount) {\n const scrollbarWidth = window.innerWidth - el.offsetWidth\n if (scrollbarWidth > 0) {\n originalMarginRight = el.style.marginRight\n el.style.marginRight = `${scrollbarWidth}px`\n lockHtmlScrollRightCompensationRef.value = `${scrollbarWidth}px`\n }\n originalOverflow = el.style.overflow\n originalOverflowX = el.style.overflowX\n originalOverflowY = el.style.overflowY\n el.style.overflow = 'hidden'\n el.style.overflowX = 'hidden'\n el.style.overflowY = 'hidden'\n }\n activated = true\n lockCount++\n } else {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n },\n {\n immediate: true\n }\n )\n })\n onBeforeUnmount(() => {\n watchStopHandle?.()\n if (activated) {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n })\n}\n","import type { ComputedRef, Ref, WritableComputedRef } from 'vue'\nimport { computed, ref, watch } from 'vue'\n\ntype MemoGetter<T> = () => T\ntype MemoSetter<T> = (v: T) => void\n\ninterface WritableMemoOptions<T> {\n get: MemoGetter<T>\n set: MemoSetter<T>\n}\n\nfunction useMemo<T>(getter: MemoGetter<T>): ComputedRef<T>\nfunction useMemo<T>(options: WritableMemoOptions<T>): WritableComputedRef<T>\nfunction useMemo<T>(getterOrOptions: MemoGetter<T> | WritableMemoOptions<T>): ComputedRef<T> | WritableComputedRef<T> {\n const computedValueRef = computed(getterOrOptions as any) as WritableComputedRef<T> | ComputedRef<T>\n // Maybe it's not possible to lazy evaluate the value, since we can't make\n // render phase capture the deps behind useMemo\n const valueRef = ref(computedValueRef.value) as Ref<T>\n watch(computedValueRef, value => {\n valueRef.value = value\n })\n if (typeof getterOrOptions === 'function') {\n return valueRef as ComputedRef<T>\n }\n return {\n __v_isRef: true,\n get value() {\n return valueRef.value\n },\n set value(v: T) {\n // eslint-disable-next-line prettier/prettier\n ; (getterOrOptions as WritableMemoOptions<T>).set(v)\n }\n } as unknown as WritableComputedRef<T>\n}\n\nexport { useMemo }\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, watch } from 'vue'\n\nexport function useMergedState<T>(controlledStateRef: Ref<T | undefined>, uncontrolledStateRef: Ref<T>): ComputedRef<T> {\n watch(controlledStateRef, value => {\n if (value !== undefined) {\n uncontrolledStateRef.value = value\n }\n })\n return computed(() => {\n if (controlledStateRef.value === undefined) {\n return uncontrolledStateRef.value\n }\n return controlledStateRef.value\n })\n}\n","import { onMounted, onUnmounted, ref } from 'vue'\n\ninterface ScriptOptions {\n src: string\n}\n\nexport function useScript(opts: ScriptOptions) {\n const isLoading = ref(false)\n const error = ref(false)\n const success = ref(false)\n let script: HTMLScriptElement\n\n const promise = new Promise((resolve, reject) => {\n onMounted(() => {\n script = document.createElement('script')\n script.type = 'text/javascript'\n script.onload = () => {\n isLoading.value = false\n success.value = true\n error.value = false\n resolve('')\n }\n\n script.onerror = err => {\n isLoading.value = false\n success.value = false\n error.value = true\n reject(err)\n }\n\n script.src = opts.src\n document.head.appendChild(script)\n })\n })\n\n onUnmounted(() => {\n script && script.remove()\n })\n\n return {\n isLoading,\n error,\n success,\n toPromise: () => promise\n }\n}\n","import type { Ref } from 'vue'\n\nimport { onMounted, onUnmounted, ref, watch } from 'vue'\nimport { useThrottleFn } from '@vueuse/core'\nimport { isObject, isWindow } from '@maxax/utils'\n\nexport function useScroll(\n refEl: Ref<Element | Window | null>,\n options?: {\n wait?: number\n leading?: boolean\n trailing?: boolean\n }\n) {\n const refX = ref(0)\n const refY = ref(0)\n let handler = () => {\n if (isWindow(refEl.value)) {\n refX.value = refEl.value.scrollX\n refY.value = refEl.value.scrollY\n } else if (refEl.value) {\n refX.value = (refEl.value as Element).scrollLeft\n refY.value = (refEl.value as Element).scrollTop\n }\n }\n\n if (isObject(options)) {\n let wait = 0\n if (options && options.wait && options.wait > 0) {\n wait = options.wait\n Reflect.deleteProperty(options, 'wait')\n }\n\n handler = useThrottleFn(handler, wait)\n }\n\n let stopWatch: () => void\n onMounted(() => {\n stopWatch = watch(\n refEl,\n (el, prevEl, onCleanup) => {\n if (el) {\n el.addEventListener('scroll', handler)\n } else if (prevEl) {\n prevEl.removeEventListener('scroll', handler)\n }\n onCleanup(() => {\n refX.value = 0\n refY.value = 0\n el && el.removeEventListener('scroll', handler)\n })\n },\n { immediate: true }\n )\n })\n\n onUnmounted(() => {\n refEl.value && refEl.value.removeEventListener('scroll', handler)\n })\n\n function stop() {\n stopWatch && stopWatch()\n }\n\n return { refX, refY, stop }\n}\n","import { computed, ref, shallowRef, triggerRef } from 'vue'\nimport type { ComputedGetter, DebuggerOptions, Ref, ShallowRef, WritableComputedOptions, WritableComputedRef } from 'vue'\n\ntype Updater<T> = (value: T) => T\ntype Mutator<T> = (value: T) => void\n\n/**\n * Signal is a reactive value that can be set, updated or mutated\n *\n * @example\n * ```ts\n * const count = useSignal(0);\n *\n * // `watchEffect`\n * watchEffect(() => {\n * console.log(count());\n * });\n *\n * // watch\n * watch(count, value => {\n * console.log(value);\n * });\n *\n * // useComputed\n * const double = useComputed(() => count() * 2);\n * const writeableDouble = useComputed({\n * get: () => count() * 2,\n * set: value => count.set(value / 2)\n * });\n * ```\n */\nexport interface Signal<T> {\n (): Readonly<T>\n /**\n * Set the value of the signal\n *\n * It recommend use `set` for primitive values\n *\n * @param value\n */\n set: (value: T) => void\n /**\n * Update the value of the signal using an updater function\n *\n * It recommend use `update` for non-primitive values, only the first level of the object will be reactive.\n *\n * @param updater\n */\n update: (updater: Updater<T>) => void\n /**\n * Mutate the value of the signal using a mutator function\n *\n * this action will call `triggerRef`, so the value will be tracked on `watchEffect`.\n *\n * It recommend use `mutate` for non-primitive values, all levels of the object will be reactive.\n *\n * @param mutator\n */\n mutate: (mutator: Mutator<T>) => void\n /**\n * Get the reference of the signal\n *\n * Sometimes it can be useful to make `v-model` work with the signal\n *\n * ```vue\n * <template>\n * <input v-model=\"model.count\" />\n * </template>;\n *\n * <script setup lang=\"ts\">\n * const state = useSignal({ count: 0 }, { useRef: true });\n *\n * const model = state.getRef();\n * </script>\n * ```\n */\n getRef: () => Readonly<ShallowRef<Readonly<T>>>\n}\n\nexport interface ReadonlySignal<T> {\n (): Readonly<T>\n}\n\nexport interface SignalOptions {\n /**\n * Whether to use `ref` to store the value\n *\n * @default false use `sharedRef` to store the value\n */\n useRef?: boolean\n}\n\nexport function useSignal<T>(initialValue: T, options?: SignalOptions): Signal<T> {\n const { useRef } = options || {}\n\n const state = useRef ? (ref(initialValue) as Ref<T>) : shallowRef(initialValue)\n\n return createSignal(state)\n}\n\nexport function useComputed<T>(getter: ComputedGetter<T>, debugOptions?: DebuggerOptions): ReadonlySignal<T>\nexport function useComputed<T>(options: WritableComputedOptions<T>, debugOptions?: DebuggerOptions): Signal<T>\nexport function useComputed<T>(getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>, debugOptions?: DebuggerOptions) {\n const isGetter = typeof getterOrOptions === 'function'\n\n const computedValue = computed(getterOrOptions as any, debugOptions)\n\n if (isGetter) {\n return () => computedValue.value as ReadonlySignal<T>\n }\n\n return createSignal(computedValue)\n}\n\nfunction createSignal<T>(state: ShallowRef<T> | WritableComputedRef<T>): Signal<T> {\n const signal = () => state.value\n\n signal.set = (value: T) => {\n state.value = value\n }\n\n signal.update = (updater: Updater<T>) => {\n state.value = updater(state.value)\n }\n\n signal.mutate = (mutator: Mutator<T>) => {\n mutator(state.value)\n triggerRef(state)\n }\n\n signal.getRef = () => state as Readonly<ShallowRef<Readonly<T>>>\n\n return signal\n}\n","import { h } from 'vue'\nimport type { Component } from 'vue'\n\ninterface IconConfig {\n /** Iconify icon name */\n icon?: string\n /** Local icon name */\n localIcon?: string\n /** Icon color */\n color?: string\n /** Icon size */\n fontSize?: number\n}\n\ntype IconStyle = Partial<Pick<CSSStyleDeclaration, 'color' | 'fontSize'>>\n\n/**\n * Svg icon render hook\n *\n * @param SvgIcon Svg icon component\n */\nexport function useSvgIconRender(SvgIcon: Component) {\n /**\n * Svg icon VNode\n *\n * @param config\n */\n const SvgIconVNode = (config: IconConfig) => {\n const { color, fontSize, icon, localIcon } = config\n\n const style: IconStyle = {}\n\n if (color) {\n style.color = color\n }\n if (fontSize) {\n style.fontSize = `${fontSize}px`\n }\n\n if (!icon && !localIcon) {\n return undefined\n }\n\n return () => h(SvgIcon, { icon, localIcon, style })\n }\n\n return {\n SvgIconVNode\n }\n}\n","import { computed, reactive, ref } from 'vue'\nimport type { Ref } from 'vue'\nimport { jsonClone } from '@maxax/utils'\nimport { useBoolean } from './use-boolean'\nimport { useLoading } from './use-loading'\n\nexport type MaybePromise<T> = T | Promise<T>\n\nexport type ApiFn = (args: any) => Promise<unknown>\n\nexport interface TableColumnCheck {\n key: string\n title: string\n checked: boolean\n}\n\nexport type TableDataWithIndex<T> = T & { index: number }\n\nexport interface TransformedData<T> {\n data: TableDataWithIndex<T>[]\n pageNum: number\n pageSize: number\n total: number\n}\n\nexport type Transformer<T, Response> = (response: Response) => TransformedData<T>\n\nexport interface TableConfig<A extends ApiFn, T, C> {\n /** Api function to get table data */\n apiFn: A\n /** Api params */\n apiParams?: Parameters<A>[0]\n /** Transform api response to table data */\n transformer: Transformer<T, Awaited<ReturnType<A>>>\n /** Columns factory */\n columns: () => C[]\n /**\n * Get column checks\n *\n * @param columns\n */\n getColumnChecks: (columns: C[]) => TableColumnCheck[]\n /**\n * Get columns\n *\n * @param columns\n */\n getColumns: (columns: C[], checks: TableColumnCheck[]) => C[]\n /**\n * Callback when response fetched\n *\n * @param transformed transformed data\n */\n onFetched?: (transformed: TransformedData<T>) => MaybePromise<void>\n /**\n * Whether to get data immediately\n *\n * @default true\n */\n immediate?: boolean\n}\n\nexport function useHookTable<A extends ApiFn, T, C>(config: TableConfig<A, T, C>) {\n const { loading, startLoading, endLoading } = useLoading()\n const { bool: empty, setBool: setEmpty } = useBoolean()\n\n const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config\n\n const searchParams: NonNullable<Parameters<A>[0]> = reactive(jsonClone({ ...apiParams }))\n\n const allColumns = ref(config.columns()) as Ref<C[]>\n\n const data: Ref<TableDataWithIndex<T>[]> = ref([])\n\n const columnChecks: Ref<TableColumnCheck[]> = ref(getColumnChecks(config.columns()))\n\n const columns = computed(() => getColumns(allColumns.value, columnChecks.value))\n\n function reloadColumns() {\n allColumns.value = config.columns()\n\n const checkMap = new Map(columnChecks.value.map(col => [col.key, col.checked]))\n\n const defaultChecks = getColumnChecks(allColumns.value)\n\n columnChecks.value = defaultChecks.map(col => ({\n ...col,\n checked: checkMap.get(col.key) ?? col.checked\n }))\n }\n\n async function getData() {\n startLoading()\n\n const formattedParams = formatSearchParams(searchParams)\n\n const response = await apiFn(formattedParams)\n\n const transformed = transformer(response as Awaited<ReturnType<A>>)\n\n data.value = transformed.data\n\n setEmpty(transformed.data.length === 0)\n\n await config.onFetched?.(transformed)\n\n endLoading()\n }\n\n function formatSearchParams(params: Record<string, unknown>) {\n const formattedParams: Record<string, unknown> = {}\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n formattedParams[key] = value\n }\n })\n\n return formattedParams\n }\n\n /**\n * Update search params\n *\n * @param params\n */\n function updateSearchParams(params: Partial<Parameters<A>[0]>) {\n Object.assign(searchParams, params)\n }\n\n /** Reset search params */\n function resetSearchParams() {\n Object.assign(searchParams, jsonClone(apiParams))\n }\n\n if (immediate) {\n getData()\n }\n\n return {\n loading,\n empty,\n data,\n columns,\n columnChecks,\n reloadColumns,\n getData,\n searchParams,\n updateSearchParams,\n resetSearchParams\n }\n}\n"],"mappings":"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","names":["import_vue","SizeEnum","ScreenEnum","import_vue","import_vue","import_vue","import_vue","import_vue","import_core","import_vue","import_vue","import_vue","import_core","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_core","import_utils","import_vue","import_vue","import_vue","import_utils"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/use-boolean.ts","../src/use-breakpoint.ts","../src/enum/breakpointEnum.ts","../src/use-event-listener.ts","../src/use-browser-location.ts","../src/use-collection.ts","../src/use-context.ts","../src/use-context-composable.ts","../src/use-count-down.ts","../src/use-deferred-true.ts","../src/use-is-composing.ts","../src/use-layout-style.ts","../src/const/index.ts","../src/use-loading.ts","../src/use-local-page.ts","../src/use-lock-html-scroll.ts","../src/use-memo.ts","../src/use-merged-state.ts","../src/use-script.ts","../src/use-scroll.ts","../src/use-signal.ts","../src/use-svg-icon-render.ts","../src/use-table.ts"],"sourcesContent":["export * from './use-boolean'\nexport * from './use-breakpoint'\nexport * from './use-browser-location'\nexport * from './use-collection'\nexport * from './use-context'\nexport * from './use-context-composable'\nexport * from './use-count-down'\nexport * from './use-deferred-true'\nexport * from './use-event-listener'\nexport * from './use-is-composing'\nexport * from './use-layout-style'\nexport * from './use-loading'\nexport * from './use-local-page'\nexport * from './use-lock-html-scroll'\nexport * from './use-memo'\nexport * from './use-merged-state'\nexport * from './use-request'\nexport * from './use-script'\nexport * from './use-scroll'\nexport * from './use-signal'\nexport * from './use-svg-icon-render'\nexport * from './use-table'\n","import { ref } from 'vue'\n\n/**\n * Boolean\n *\n * @param initValue Init value\n */\nexport function useBoolean(initValue = false) {\n const bool = ref(initValue)\n\n function setBool(value: boolean) {\n bool.value = value\n }\n function setTrue() {\n setBool(true)\n }\n function setFalse() {\n setBool(false)\n }\n function toggle() {\n setBool(!bool.value)\n }\n\n return {\n bool,\n setBool,\n setTrue,\n setFalse,\n toggle\n }\n}\n","import type { ComputedRef } from 'vue'\nimport { computed, ref, unref } from 'vue'\nimport { ScreenEnum, screenMap, SizeEnum } from './enum/breakpointEnum'\nimport { useEventListener } from './use-event-listener'\n\nlet globalScreenRef: ComputedRef<SizeEnum | undefined>\nlet globalWidthRef: ComputedRef<number>\nlet globalRealWidthRef: ComputedRef<number>\n\nexport interface CreateCallbackParams {\n screen: ComputedRef<SizeEnum | undefined>\n width: ComputedRef<number>\n realWidth: ComputedRef<number>\n screenEnum: typeof ScreenEnum\n screenMap: Map<SizeEnum, number>\n sizeEnum: typeof SizeEnum\n}\n\nexport function useBreakpoint() {\n return {\n screenRef: computed(() => unref(globalScreenRef)),\n widthRef: globalWidthRef,\n screenEnum: ScreenEnum,\n realWidthRef: globalRealWidthRef\n }\n}\n\n// Just call it once\nexport function createBreakpointListen(fn?: (opt: CreateCallbackParams) => void) {\n const screenRef = ref<SizeEnum>(SizeEnum.XL)\n const realWidthRef = ref(window.innerWidth)\n\n function getWindowWidth() {\n const width = document.body.clientWidth\n const xs = screenMap.get(SizeEnum.XS)!\n const sm = screenMap.get(SizeEnum.SM)!\n const md = screenMap.get(SizeEnum.MD)!\n const lg = screenMap.get(SizeEnum.LG)!\n const xl = screenMap.get(SizeEnum.XL)!\n if (width < xs) {\n screenRef.value = SizeEnum.XS\n } else if (width < sm) {\n screenRef.value = SizeEnum.SM\n } else if (width < md) {\n screenRef.value = SizeEnum.MD\n } else if (width < lg) {\n screenRef.value = SizeEnum.LG\n } else if (width < xl) {\n screenRef.value = SizeEnum.XL\n } else {\n screenRef.value = SizeEnum.XXL\n }\n realWidthRef.value = width\n }\n\n useEventListener({\n el: window,\n name: 'resize',\n\n listener: () => {\n getWindowWidth()\n resizeFn()\n }\n // Wait: 100,\n })\n\n getWindowWidth()\n globalScreenRef = computed(() => unref(screenRef))\n globalWidthRef = computed((): number => screenMap.get(unref(screenRef)!)!)\n globalRealWidthRef = computed((): number => unref(realWidthRef))\n\n function resizeFn() {\n fn?.({\n screen: globalScreenRef,\n width: globalWidthRef,\n realWidth: globalRealWidthRef,\n screenEnum: ScreenEnum,\n screenMap,\n sizeEnum: SizeEnum\n })\n }\n\n resizeFn()\n return {\n screenRef: globalScreenRef,\n screenEnum: ScreenEnum,\n widthRef: globalWidthRef,\n realWidthRef: globalRealWidthRef\n }\n}\n","export enum SizeEnum {\n XS = 'XS',\n SM = 'SM',\n MD = 'MD',\n LG = 'LG',\n XL = 'XL',\n XXL = 'XXL'\n}\n\nexport enum ScreenEnum {\n XS = 320,\n SM = 640,\n MD = 768,\n LG = 960,\n XL = 1280,\n XXL = 1536\n}\n\nconst screenMap = new Map<SizeEnum, number>()\n\nscreenMap.set(SizeEnum.XS, ScreenEnum.XS)\nscreenMap.set(SizeEnum.SM, ScreenEnum.SM)\nscreenMap.set(SizeEnum.MD, ScreenEnum.MD)\nscreenMap.set(SizeEnum.LG, ScreenEnum.LG)\nscreenMap.set(SizeEnum.XL, ScreenEnum.XL)\nscreenMap.set(SizeEnum.XXL, ScreenEnum.XXL)\n\nexport { screenMap }\n","import type { Ref } from 'vue'\nimport { ref, unref, watch } from 'vue'\nimport { useDebounceFn, useThrottleFn } from '@vueuse/core'\n\nexport type RemoveEventFn = () => void\nexport interface UseEventParams {\n el?: Element | Ref<Element | undefined> | Window | any\n name: string\n listener: EventListener\n options?: boolean | AddEventListenerOptions\n autoRemove?: boolean\n isDebounce?: boolean\n wait?: number\n}\nexport function useEventListener({ el = window, name, listener, options, autoRemove = true, isDebounce = true, wait = 80 }: UseEventParams): { removeEvent: RemoveEventFn } {\n /* eslint-disable-next-line */\n let remove: RemoveEventFn = () => { };\n const isAddRef = ref(false)\n\n if (el) {\n const element = ref(el as Element) as Ref<Element>\n\n const handler = isDebounce ? useDebounceFn(listener, wait) : useThrottleFn(listener, wait)\n const realHandler = wait ? handler : listener\n const removeEventListener = (e: Element) => {\n isAddRef.value = true\n e.removeEventListener(name, realHandler, options)\n }\n const addEventListener = (e: Element) => e.addEventListener(name, realHandler, options)\n\n const removeWatch = watch(\n element,\n (v, _ov, cleanUp) => {\n if (v) {\n !unref(isAddRef) && addEventListener(v)\n cleanUp(() => {\n autoRemove && removeEventListener(v)\n })\n }\n },\n { immediate: true }\n )\n\n remove = () => {\n removeEventListener(element.value)\n removeWatch()\n }\n }\n return { removeEvent: remove }\n}\n","import { onMounted, onUnmounted, type Ref, ref } from 'vue'\n\nexport interface WindowLocation {\n hash?: string\n host?: string\n hostname?: string\n href?: string\n origin?: string\n pathname?: string\n port?: string\n protocol?: string\n search?: string\n}\n\nconst isBrowser = typeof document !== 'undefined' && typeof window !== 'undefined'\n\nexport function useBrowserLocation(customWindow = isBrowser ? window : null): Ref<WindowLocation> {\n const getWindowLocation = (): WindowLocation => {\n const { hash, host, hostname, href, origin, pathname, port, protocol, search } = customWindow?.location || {}\n\n return {\n hash,\n host,\n hostname,\n href,\n origin,\n pathname,\n port,\n protocol,\n search\n }\n }\n\n const locationState = ref(getWindowLocation())\n\n const updateLocation = (): void => {\n locationState.value = getWindowLocation()\n }\n\n onMounted(() => {\n if (customWindow) {\n customWindow.addEventListener('popstate', updateLocation)\n customWindow.addEventListener('hashchange', updateLocation)\n }\n })\n\n onUnmounted(() => {\n if (customWindow) {\n customWindow.removeEventListener('popstate', updateLocation)\n customWindow.removeEventListener('hashchange', updateLocation)\n }\n })\n\n return locationState\n}\n","import type { InjectionKey, Ref } from 'vue'\nimport { getCurrentInstance, inject, onBeforeUnmount, onMounted, watch } from 'vue'\n\n// 函数的作用是管理 Vue 组件的实例集合。它通过注入的方式将组件实例注册到指定的集合中,并在组件卸载时进行清理。以下是该函数的主要功能说明:\nexport function useInjectionInstanceCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, registerKeyRef: Ref<string | undefined>): void {\n const injection = inject<Record<string, Record<string, any>> | null>(injectionName, null)\n if (injection === null) return\n const vm = getCurrentInstance()?.proxy\n watch(registerKeyRef, registerInstance)\n registerInstance(registerKeyRef.value)\n onBeforeUnmount(() => {\n registerInstance(undefined, registerKeyRef.value)\n })\n function registerInstance(key?: string, oldKey?: string): void {\n if (!injection) return\n const collection = injection[collectionKey]\n if (oldKey !== undefined) removeInstance(collection, oldKey)\n if (key !== undefined) addInstance(collection, key)\n }\n function removeInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n collection[key].splice(\n collection[key].findIndex(instance => instance === vm),\n 1\n )\n }\n function addInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n if (!~collection[key].findIndex(instance => instance === vm)) {\n collection[key].push(vm)\n }\n }\n}\n\nexport function useInjectionCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, valueRef: Ref<any>): void {\n const injection = inject<Record<any, any[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n injection[collectionKey].push(valueRef.value)\n watch(valueRef, (value, prevValue) => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === prevValue)\n if (~index) collectionArray.splice(index, 1)\n collectionArray.push(value)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === valueRef.value)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n\nexport function useInjectionElementCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, getElement: () => HTMLElement | null): void {\n const injection = inject<Record<string, HTMLElement[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n onMounted(() => {\n const el = getElement()\n if (!el) return\n injection[collectionKey].push(el)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const element = getElement()\n const index = collectionArray.findIndex(collectionElement => collectionElement === element)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\n/**\n * Use context\n *\n * @example\n * ```ts\n * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue\n *\n * // context.ts\n * import { ref } from 'vue';\n * import { useContext } from '@max/hooks';\n *\n * export const { setupStore, useStore } = useContext('demo', () => {\n * const count = ref(0);\n *\n * function increment() {\n * count.value++;\n * }\n *\n * function decrement() {\n * count.value--;\n * }\n *\n * return {\n * count,\n * increment,\n * decrement\n * };\n * })\n * ``` // A.vue\n * ```vue\n * <template>\n * <div>A</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { setupStore } from './context';\n *\n * setupStore();\n * // const { increment } = setupStore(); // also can control the store in the parent component\n * </script>\n * ``` // B.vue\n * ```vue\n * <template>\n * <div>B</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { useStore } from './context';\n *\n * const { count, increment } = useStore();\n * </script>\n * ```;\n *\n * // C.vue is same as B.vue\n *\n * @param contextName Context name\n * @param fn Context function\n */\nexport function useContext<T extends (...args: any[]) => any>(contextName: string, fn: T) {\n type Context = ReturnType<T>\n\n const { useProvide, useInject: useStore } = createContext<Context>(contextName)\n\n function setupStore(...args: Parameters<T>) {\n const context: Context = fn(...args)\n return useProvide(context)\n }\n\n return {\n /** Setup store in the parent component */\n setupStore,\n /** Use store in the child component */\n useStore\n }\n}\n\n/** Create context */\nfunction createContext<T>(contextName: string) {\n const injectKey: InjectionKey<T> = Symbol(contextName)\n\n function useProvide(context: T) {\n provide(injectKey, context)\n\n return context\n }\n\n function useInject() {\n return inject(injectKey) as T\n }\n\n return {\n useProvide,\n useInject\n }\n}\n","import { inject, provide } from 'vue'\n\n/**\n * Use context\n *\n * @example\n * ```ts\n * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue\n *\n * // context.ts\n * import { ref } from 'vue';\n * import { useComposableContext } from '@/hooks';\n *\n * export const [provideDemoContext, useDemoContext] = useComposableContext('demo', () => {\n * const count = ref(0);\n *\n * function increment() {\n * count.value++;\n * }\n *\n * function decrement() {\n * count.value--;\n * }\n *\n * return {\n * count,\n * increment,\n * decrement\n * };\n * })\n * ``` // A.vue\n * ```vue\n * <template>\n * <div>A</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { provideDemoContext } from './context';\n *\n * provideDemoContext();\n * // const { increment } = provideDemoContext(); // also can control the store in the parent component\n * </script>\n * ``` // B.vue\n * ```vue\n * <template>\n * <div>B</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { useDemoContext } from './context';\n *\n * const { count, increment } = useDemoContext();\n * </script>\n * ```;\n *\n * // C.vue is same as B.vue\n *\n * @param contextName Context name\n * @param fn Context function\n */\nexport function useComposableContext<Arguments extends any[], T>(contextName: string, composable: (...args: Arguments) => T) {\n const key = Symbol(contextName)\n\n /**\n * Injects the context value.\n *\n * @param consumerName - The name of the component that is consuming the context. If provided, the component must be\n * used within the context provider.\n * @param defaultValue - The default value to return if the context is not provided.\n * @returns The context value.\n */\n const useInject = <N extends string | null | undefined = undefined>(consumerName?: N, defaultValue?: T): N extends null | undefined ? T | null : T => {\n const value = inject(key, defaultValue)\n\n if (consumerName && !value) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${contextName}\\``)\n }\n\n // @ts-expect-error - we want to return null if the value is undefined or null\n return value || null\n }\n\n const useProvide = (...args: Arguments) => {\n const value = composable(...args)\n\n provide(key, value)\n\n return value\n }\n\n return [useProvide, useInject] as const\n}\n","import { computed, onScopeDispose, ref } from 'vue'\nimport { useRafFn } from '@vueuse/core'\n\n/**\n * Count down\n *\n * @param seconds - count down seconds\n */\nexport function useCountDown(seconds: number) {\n const FPS_PER_SECOND = 60\n\n const fps = ref(0)\n\n const count = computed(() => Math.ceil(fps.value / FPS_PER_SECOND))\n\n const isCounting = computed(() => fps.value > 0)\n\n const { pause, resume } = useRafFn(\n () => {\n if (fps.value > 0) {\n fps.value -= 1\n } else {\n pause()\n }\n },\n { immediate: false }\n )\n\n function start(updateSeconds: number = seconds) {\n fps.value = FPS_PER_SECOND * updateSeconds\n resume()\n }\n\n function stop() {\n fps.value = 0\n pause()\n }\n\n onScopeDispose(() => {\n pause()\n })\n\n return {\n count,\n isCounting,\n start,\n stop\n }\n}\n","import { type Ref, ref, watch } from 'vue'\n\n// 此函数用于在指定延迟后返回一个布尔值引用,基于输入的值引用和延迟条件\nexport function useDeferredTrue(valueRef: Ref<any>, delay: number, shouldDelayRef: Ref<boolean>): Ref<boolean> {\n if (!delay) return valueRef\n const delayedRef = ref(valueRef.value)\n let timerId: number | null = null\n watch(valueRef, value => {\n if (timerId !== null) window.clearTimeout(timerId)\n if (value === true) {\n if (shouldDelayRef && !shouldDelayRef.value) {\n delayedRef.value = true\n } else {\n timerId = window.setTimeout(() => {\n delayedRef.value = true\n }, delay)\n }\n } else {\n delayedRef.value = false\n }\n })\n return delayedRef\n}\n","import { onBeforeMount, onBeforeUnmount, type Ref, ref } from 'vue'\n\nconst isComposingRef = ref(false)\nfunction compositionStartHandler(): void {\n isComposingRef.value = true\n}\nfunction compositionEndHandler(): void {\n isComposingRef.value = false\n}\nlet mountedCount = 0\n\n// 用于检测用户是否正在进行输入法的组合输入\nexport function useIsComposing(): Ref<boolean> {\n if (document && window) {\n onBeforeMount(() => {\n if (!mountedCount) {\n window.addEventListener('compositionstart', compositionStartHandler)\n window.addEventListener('compositionend', compositionEndHandler)\n }\n mountedCount++\n })\n onBeforeUnmount(() => {\n if (mountedCount <= 1) {\n window.removeEventListener('compositionstart', compositionStartHandler)\n window.removeEventListener('compositionend', compositionEndHandler)\n mountedCount = 0\n } else {\n mountedCount--\n }\n })\n }\n return isComposingRef\n}\n","import type { CSSProperties } from 'vue'\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\nimport { useCssVar, useDebounceFn } from '@vueuse/core'\nimport type { VisibleDomRect } from '@maxax/utils'\nimport { getElementVisibleRect } from '@maxax/utils'\nimport { CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT, CSS_VARIABLE_LAYOUT_CONTENT_WIDTH, CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT, CSS_VARIABLE_LAYOUT_HEADER_HEIGHT } from './const'\n\nexport function useLayoutContentStyle(diffHeight = 0) {\n let resizeObserver: null | ResizeObserver = null\n const contentElement = ref<HTMLDivElement | null>(null)\n const visibleDomRect = ref<null | VisibleDomRect>(null)\n const contentHeight = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT)\n const contentWidth = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_WIDTH)\n\n const overlayStyle = computed((): CSSProperties => {\n const { height, left, top, width } = visibleDomRect.value ?? {}\n return {\n height: `${height}px`,\n left: `${left}px`,\n position: 'fixed',\n top: `${top}px`,\n width: `${width}px`,\n zIndex: 150\n }\n })\n\n const debouncedCalcHeight = useDebounceFn((_entries: ResizeObserverEntry[]) => {\n visibleDomRect.value = getElementVisibleRect(contentElement.value)\n contentHeight.value = `${visibleDomRect.value.height - diffHeight}px`\n contentWidth.value = `${visibleDomRect.value.width}px`\n }, 16)\n\n onMounted(() => {\n if (contentElement.value && !resizeObserver) {\n resizeObserver = new ResizeObserver(debouncedCalcHeight)\n resizeObserver.observe(contentElement.value)\n }\n })\n\n onUnmounted(() => {\n resizeObserver?.disconnect()\n resizeObserver = null\n })\n\n return { contentElement, overlayStyle, visibleDomRect }\n}\n\nexport function useLayoutHeaderStyle() {\n const headerHeight = useCssVar(CSS_VARIABLE_LAYOUT_HEADER_HEIGHT)\n\n return {\n getLayoutHeaderHeight: () => {\n return Number.parseInt(`${headerHeight.value}`, 10)\n },\n setLayoutHeaderHeight: (height: number) => {\n headerHeight.value = `${height}px`\n }\n }\n}\n\nexport function useLayoutFooterStyle() {\n const footerHeight = useCssVar(CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT)\n\n return {\n getLayoutFooterHeight: () => {\n return Number.parseInt(`${footerHeight.value}`, 10)\n },\n setLayoutFooterHeight: (height: number) => {\n footerHeight.value = `${height}px`\n }\n }\n}\n","/** Layout content 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT = '--max-content-height'\n/** Layout content 组件的宽度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_WIDTH = '--max-content-width'\n/** Layout header 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_HEADER_HEIGHT = '--max-header-height'\n/** Layout footer 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT = '--max-footer-height'\n","import { useBoolean } from './use-boolean'\n\n/**\n * Loading\n *\n * @param initValue Init value\n */\nexport function useLoading(initValue = false) {\n const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(initValue)\n\n return {\n loading,\n startLoading,\n endLoading\n }\n}\n","import { computed, ref, unref } from 'vue'\n\nfunction pagination<T = any>(list: T[], pageNo: number, pageSize: number): T[] {\n const offset = (pageNo - 1) * Number(pageSize)\n const ret = offset + Number(pageSize) >= list.length ? list.slice(offset, list.length) : list.slice(offset, offset + Number(pageSize))\n return ret\n}\n\nexport function useLocalPage(list: any[], pageSize: number) {\n const currentPage = ref(1)\n const pageSizeRef = ref(pageSize)\n const listRef = ref(list)\n\n const getPaginationList = computed(() => {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n })\n\n const getTotal = computed(() => {\n return unref(listRef).length\n })\n\n function setCurrentPage(page: number) {\n currentPage.value = page\n }\n\n function setPageSize(size: number) {\n pageSizeRef.value = size\n }\n\n function setPagination(page: { currentPage: number; pageSize: number }) {\n setCurrentPage(page.currentPage)\n setPageSize(page.pageSize)\n }\n\n function getPageList() {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n }\n\n return { setCurrentPage, getTotal, setPageSize, getPaginationList, setPagination, getPageList }\n}\n","import { type Ref, type WatchStopHandle, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nlet lockCount = 0\nlet originalMarginRight: string = ''\nlet originalOverflow: string = ''\nlet originalOverflowX: string = ''\nlet originalOverflowY: string = ''\nexport const lockHtmlScrollRightCompensationRef = ref('0px')\n\nexport function useLockHtmlScroll(lockRef: Ref<boolean>): void {\n // not browser\n if (typeof document === 'undefined') return\n const el = document.documentElement\n let watchStopHandle: WatchStopHandle | undefined\n let activated = false\n const unlock = (): void => {\n el.style.marginRight = originalMarginRight\n el.style.overflow = originalOverflow\n el.style.overflowX = originalOverflowX\n el.style.overflowY = originalOverflowY\n lockHtmlScrollRightCompensationRef.value = '0px'\n }\n onMounted(() => {\n watchStopHandle = watch(\n lockRef,\n value => {\n if (value) {\n if (!lockCount) {\n const scrollbarWidth = window.innerWidth - el.offsetWidth\n if (scrollbarWidth > 0) {\n originalMarginRight = el.style.marginRight\n el.style.marginRight = `${scrollbarWidth}px`\n lockHtmlScrollRightCompensationRef.value = `${scrollbarWidth}px`\n }\n originalOverflow = el.style.overflow\n originalOverflowX = el.style.overflowX\n originalOverflowY = el.style.overflowY\n el.style.overflow = 'hidden'\n el.style.overflowX = 'hidden'\n el.style.overflowY = 'hidden'\n }\n activated = true\n lockCount++\n } else {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n },\n {\n immediate: true\n }\n )\n })\n onBeforeUnmount(() => {\n watchStopHandle?.()\n if (activated) {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n })\n}\n","import type { ComputedRef, Ref, WritableComputedRef } from 'vue'\nimport { computed, ref, watch } from 'vue'\n\ntype MemoGetter<T> = () => T\ntype MemoSetter<T> = (v: T) => void\n\ninterface WritableMemoOptions<T> {\n get: MemoGetter<T>\n set: MemoSetter<T>\n}\n\nfunction useMemo<T>(getter: MemoGetter<T>): ComputedRef<T>\nfunction useMemo<T>(options: WritableMemoOptions<T>): WritableComputedRef<T>\nfunction useMemo<T>(getterOrOptions: MemoGetter<T> | WritableMemoOptions<T>): ComputedRef<T> | WritableComputedRef<T> {\n const computedValueRef = computed(getterOrOptions as any) as WritableComputedRef<T> | ComputedRef<T>\n // Maybe it's not possible to lazy evaluate the value, since we can't make\n // render phase capture the deps behind useMemo\n const valueRef = ref(computedValueRef.value) as Ref<T>\n watch(computedValueRef, value => {\n valueRef.value = value\n })\n if (typeof getterOrOptions === 'function') {\n return valueRef as ComputedRef<T>\n }\n return {\n __v_isRef: true,\n get value() {\n return valueRef.value\n },\n set value(v: T) {\n // eslint-disable-next-line prettier/prettier\n ; (getterOrOptions as WritableMemoOptions<T>).set(v)\n }\n } as unknown as WritableComputedRef<T>\n}\n\nexport { useMemo }\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, watch } from 'vue'\n\nexport function useMergedState<T>(controlledStateRef: Ref<T | undefined>, uncontrolledStateRef: Ref<T>): ComputedRef<T> {\n watch(controlledStateRef, value => {\n if (value !== undefined) {\n uncontrolledStateRef.value = value\n }\n })\n return computed(() => {\n if (controlledStateRef.value === undefined) {\n return uncontrolledStateRef.value\n }\n return controlledStateRef.value\n })\n}\n","import { onMounted, onUnmounted, ref } from 'vue'\n\ninterface ScriptOptions {\n src: string\n}\n\nexport function useScript(opts: ScriptOptions) {\n const isLoading = ref(false)\n const error = ref(false)\n const success = ref(false)\n let script: HTMLScriptElement\n\n const promise = new Promise((resolve, reject) => {\n onMounted(() => {\n script = document.createElement('script')\n script.type = 'text/javascript'\n script.onload = () => {\n isLoading.value = false\n success.value = true\n error.value = false\n resolve('')\n }\n\n script.onerror = err => {\n isLoading.value = false\n success.value = false\n error.value = true\n reject(err)\n }\n\n script.src = opts.src\n document.head.appendChild(script)\n })\n })\n\n onUnmounted(() => {\n script && script.remove()\n })\n\n return {\n isLoading,\n error,\n success,\n toPromise: () => promise\n }\n}\n","import type { Ref } from 'vue'\n\nimport { onMounted, onUnmounted, ref, watch } from 'vue'\nimport { useThrottleFn } from '@vueuse/core'\nimport { isObject, isWindow } from '@maxax/utils'\n\nexport function useScroll(\n refEl: Ref<Element | Window | null>,\n options?: {\n wait?: number\n leading?: boolean\n trailing?: boolean\n }\n) {\n const refX = ref(0)\n const refY = ref(0)\n let handler = () => {\n if (isWindow(refEl.value)) {\n refX.value = refEl.value.scrollX\n refY.value = refEl.value.scrollY\n } else if (refEl.value) {\n refX.value = (refEl.value as Element).scrollLeft\n refY.value = (refEl.value as Element).scrollTop\n }\n }\n\n if (isObject(options)) {\n let wait = 0\n if (options && options.wait && options.wait > 0) {\n wait = options.wait\n Reflect.deleteProperty(options, 'wait')\n }\n\n handler = useThrottleFn(handler, wait)\n }\n\n let stopWatch: () => void\n onMounted(() => {\n stopWatch = watch(\n refEl,\n (el, prevEl, onCleanup) => {\n if (el) {\n el.addEventListener('scroll', handler)\n } else if (prevEl) {\n prevEl.removeEventListener('scroll', handler)\n }\n onCleanup(() => {\n refX.value = 0\n refY.value = 0\n el && el.removeEventListener('scroll', handler)\n })\n },\n { immediate: true }\n )\n })\n\n onUnmounted(() => {\n refEl.value && refEl.value.removeEventListener('scroll', handler)\n })\n\n function stop() {\n stopWatch && stopWatch()\n }\n\n return { refX, refY, stop }\n}\n","/* eslint-disable no-redeclare */\nimport type { ComputedGetter, DebuggerOptions, Ref, ShallowRef, WritableComputedOptions, WritableComputedRef } from 'vue'\nimport { computed, ref, shallowRef, triggerRef } from 'vue'\n\ntype Updater<T> = (value: T) => T\ntype Mutator<T> = (value: T) => void\n\n/**\n * Signal is a reactive value that can be set, updated or mutated\n *\n * @example\n * ```ts\n * const count = useSignal(0);\n *\n * // `watchEffect`\n * watchEffect(() => {\n * console.log(count());\n * });\n *\n * // watch\n * watch(count, value => {\n * console.log(value);\n * });\n *\n * // useComputed\n * const double = useComputed(() => count() * 2);\n * const writeableDouble = useComputed({\n * get: () => count() * 2,\n * set: value => count.set(value / 2)\n * });\n * ```\n */\nexport interface Signal<T> {\n (): Readonly<T>\n /**\n * Set the value of the signal\n *\n * It recommend use `set` for primitive values\n *\n * @param value\n */\n set: (value: T) => void\n /**\n * Update the value of the signal using an updater function\n *\n * It recommend use `update` for non-primitive values, only the first level of the object will be reactive.\n *\n * @param updater\n */\n update: (updater: Updater<T>) => void\n /**\n * Mutate the value of the signal using a mutator function\n *\n * this action will call `triggerRef`, so the value will be tracked on `watchEffect`.\n *\n * It recommend use `mutate` for non-primitive values, all levels of the object will be reactive.\n *\n * @param mutator\n */\n mutate: (mutator: Mutator<T>) => void\n /**\n * Get the reference of the signal\n *\n * Sometimes it can be useful to make `v-model` work with the signal\n *\n * ```vue\n * <template>\n * <input v-model=\"model.count\" />\n * </template>;\n *\n * <script setup lang=\"ts\">\n * const state = useSignal({ count: 0 }, { useRef: true });\n *\n * const model = state.getRef();\n * </script>\n * ```\n */\n getRef: () => Readonly<ShallowRef<Readonly<T>>>\n}\n\nexport interface ReadonlySignal<T> {\n (): Readonly<T>\n}\n\nexport interface SignalOptions {\n /**\n * Whether to use `ref` to store the value\n *\n * @default false use `sharedRef` to store the value\n */\n useRef?: boolean\n}\n\nexport function useSignal<T>(initialValue: T, options?: SignalOptions): Signal<T> {\n const { useRef } = options || {}\n\n const state = useRef ? (ref(initialValue) as Ref<T>) : shallowRef(initialValue)\n\n return createSignal(state)\n}\n\nexport function useComputed<T>(getter: ComputedGetter<T>, debugOptions?: DebuggerOptions): ReadonlySignal<T>\nexport function useComputed<T>(options: WritableComputedOptions<T>, debugOptions?: DebuggerOptions): Signal<T>\nexport function useComputed<T>(getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>, debugOptions?: DebuggerOptions) {\n const isGetter = typeof getterOrOptions === 'function'\n\n const computedValue = computed(getterOrOptions as any, debugOptions)\n\n if (isGetter) {\n return () => computedValue.value as ReadonlySignal<T>\n }\n\n return createSignal(computedValue)\n}\n\nfunction createSignal<T>(state: ShallowRef<T> | WritableComputedRef<T>): Signal<T> {\n const signal = (() => state.value as Readonly<T>) as Signal<T>\n\n signal.set = (value: T) => {\n // Vue's WritableComputedRef can have a distinct setter value type; cast to bypass\n // eslint-disable-next-line prettier/prettier\n ; (state as any).value = value\n }\n\n signal.update = (updater: Updater<T>) => {\n // eslint-disable-next-line prettier/prettier\n ; (state as any).value = updater(state.value)\n }\n\n signal.mutate = (mutator: Mutator<T>) => {\n mutator(state.value)\n triggerRef(state)\n }\n\n signal.getRef = () => state as Readonly<ShallowRef<Readonly<T>>>\n\n return signal\n}\n","import { h } from 'vue'\nimport type { Component } from 'vue'\n\ninterface IconConfig {\n /** Iconify icon name */\n icon?: string\n /** Local icon name */\n localIcon?: string\n /** Icon color */\n color?: string\n /** Icon size */\n fontSize?: number\n}\n\ntype IconStyle = Partial<Pick<CSSStyleDeclaration, 'color' | 'fontSize'>>\n\n/**\n * Svg icon render hook\n *\n * @param SvgIcon Svg icon component\n */\nexport function useSvgIconRender(SvgIcon: Component) {\n /**\n * Svg icon VNode\n *\n * @param config\n */\n const SvgIconVNode = (config: IconConfig) => {\n const { color, fontSize, icon, localIcon } = config\n\n const style: IconStyle = {}\n\n if (color) {\n style.color = color\n }\n if (fontSize) {\n style.fontSize = `${fontSize}px`\n }\n\n if (!icon && !localIcon) {\n return undefined\n }\n\n return () => h(SvgIcon, { icon, localIcon, style })\n }\n\n return {\n SvgIconVNode\n }\n}\n","import { computed, reactive, ref } from 'vue'\nimport type { Ref } from 'vue'\nimport { jsonClone } from '@maxax/utils'\nimport { useBoolean } from './use-boolean'\nimport { useLoading } from './use-loading'\n\nexport type MaybePromise<T> = T | Promise<T>\n\nexport type ApiFn = (args: any) => Promise<unknown>\n\nexport interface TableColumnCheck {\n key: string\n title: string\n checked: boolean\n}\n\nexport type TableDataWithIndex<T> = T & { index: number }\n\nexport interface TransformedData<T> {\n data: TableDataWithIndex<T>[]\n pageNum: number\n pageSize: number\n total: number\n}\n\nexport type Transformer<T, Response> = (response: Response) => TransformedData<T>\n\nexport interface TableConfig<A extends ApiFn, T, C> {\n /** Api function to get table data */\n apiFn: A\n /** Api params */\n apiParams?: Parameters<A>[0]\n /** Transform api response to table data */\n transformer: Transformer<T, Awaited<ReturnType<A>>>\n /** Columns factory */\n columns: () => C[]\n /**\n * Get column checks\n *\n * @param columns\n */\n getColumnChecks: (columns: C[]) => TableColumnCheck[]\n /**\n * Get columns\n *\n * @param columns\n */\n getColumns: (columns: C[], checks: TableColumnCheck[]) => C[]\n /**\n * Callback when response fetched\n *\n * @param transformed transformed data\n */\n onFetched?: (transformed: TransformedData<T>) => MaybePromise<void>\n /**\n * Whether to get data immediately\n *\n * @default true\n */\n immediate?: boolean\n}\n\nexport function useHookTable<A extends ApiFn, T, C>(config: TableConfig<A, T, C>) {\n const { loading, startLoading, endLoading } = useLoading()\n const { bool: empty, setBool: setEmpty } = useBoolean()\n\n const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config\n\n const searchParams: NonNullable<Parameters<A>[0]> = reactive(jsonClone({ ...apiParams }))\n\n const allColumns = ref(config.columns()) as Ref<C[]>\n\n const data: Ref<TableDataWithIndex<T>[]> = ref([])\n\n const columnChecks: Ref<TableColumnCheck[]> = ref(getColumnChecks(config.columns()))\n\n const columns = computed(() => getColumns(allColumns.value, columnChecks.value))\n\n function reloadColumns() {\n allColumns.value = config.columns()\n\n const checkMap = new Map(columnChecks.value.map(col => [col.key, col.checked]))\n\n const defaultChecks = getColumnChecks(allColumns.value)\n\n columnChecks.value = defaultChecks.map(col => ({\n ...col,\n checked: checkMap.get(col.key) ?? col.checked\n }))\n }\n\n async function getData() {\n startLoading()\n\n const formattedParams = formatSearchParams(searchParams)\n\n const response = await apiFn(formattedParams)\n\n const transformed = transformer(response as Awaited<ReturnType<A>>)\n\n data.value = transformed.data\n\n setEmpty(transformed.data.length === 0)\n\n await config.onFetched?.(transformed)\n\n endLoading()\n }\n\n function formatSearchParams(params: Record<string, unknown>) {\n const formattedParams: Record<string, unknown> = {}\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n formattedParams[key] = value\n }\n })\n\n return formattedParams\n }\n\n /**\n * Update search params\n *\n * @param params\n */\n function updateSearchParams(params: Partial<Parameters<A>[0]>) {\n Object.assign(searchParams, params)\n }\n\n /** Reset search params */\n function resetSearchParams() {\n Object.assign(searchParams, jsonClone(apiParams))\n }\n\n if (immediate) {\n getData()\n }\n\n return {\n loading,\n empty,\n data,\n columns,\n columnChecks,\n reloadColumns,\n getData,\n searchParams,\n updateSearchParams,\n resetSearchParams\n }\n}\n"],"mappings":"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","names":["import_vue","SizeEnum","ScreenEnum","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_core","import_vue","import_vue","import_vue","import_core","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_core","import_utils","import_vue","import_vue","import_vue","import_utils"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -134,6 +134,64 @@ declare function useContext<T extends (...args: any[]) => any>(contextName: stri
|
|
|
134
134
|
useStore: () => ReturnType<T>;
|
|
135
135
|
};
|
|
136
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Use context
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```ts
|
|
142
|
+
* // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue
|
|
143
|
+
*
|
|
144
|
+
* // context.ts
|
|
145
|
+
* import { ref } from 'vue';
|
|
146
|
+
* import { useComposableContext } from '@/hooks';
|
|
147
|
+
*
|
|
148
|
+
* export const [provideDemoContext, useDemoContext] = useComposableContext('demo', () => {
|
|
149
|
+
* const count = ref(0);
|
|
150
|
+
*
|
|
151
|
+
* function increment() {
|
|
152
|
+
* count.value++;
|
|
153
|
+
* }
|
|
154
|
+
*
|
|
155
|
+
* function decrement() {
|
|
156
|
+
* count.value--;
|
|
157
|
+
* }
|
|
158
|
+
*
|
|
159
|
+
* return {
|
|
160
|
+
* count,
|
|
161
|
+
* increment,
|
|
162
|
+
* decrement
|
|
163
|
+
* };
|
|
164
|
+
* })
|
|
165
|
+
* ``` // A.vue
|
|
166
|
+
* ```vue
|
|
167
|
+
* <template>
|
|
168
|
+
* <div>A</div>
|
|
169
|
+
* </template>
|
|
170
|
+
* <script setup lang="ts">
|
|
171
|
+
* import { provideDemoContext } from './context';
|
|
172
|
+
*
|
|
173
|
+
* provideDemoContext();
|
|
174
|
+
* // const { increment } = provideDemoContext(); // also can control the store in the parent component
|
|
175
|
+
* </script>
|
|
176
|
+
* ``` // B.vue
|
|
177
|
+
* ```vue
|
|
178
|
+
* <template>
|
|
179
|
+
* <div>B</div>
|
|
180
|
+
* </template>
|
|
181
|
+
* <script setup lang="ts">
|
|
182
|
+
* import { useDemoContext } from './context';
|
|
183
|
+
*
|
|
184
|
+
* const { count, increment } = useDemoContext();
|
|
185
|
+
* </script>
|
|
186
|
+
* ```;
|
|
187
|
+
*
|
|
188
|
+
* // C.vue is same as B.vue
|
|
189
|
+
*
|
|
190
|
+
* @param contextName Context name
|
|
191
|
+
* @param fn Context function
|
|
192
|
+
*/
|
|
193
|
+
declare function useComposableContext<Arguments extends any[], T>(contextName: string, composable: (...args: Arguments) => T): readonly [(...args: Arguments) => T, <N extends string | null | undefined = undefined>(consumerName?: N | undefined, defaultValue?: T) => N extends null | undefined ? T | null : T];
|
|
194
|
+
|
|
137
195
|
/**
|
|
138
196
|
* Count down
|
|
139
197
|
*
|
|
@@ -440,4 +498,4 @@ declare function useHookTable<A extends ApiFn, T, C>(config: TableConfig<A, T, C
|
|
|
440
498
|
resetSearchParams: () => void;
|
|
441
499
|
};
|
|
442
500
|
|
|
443
|
-
export { type ApiFn, type CreateCallbackParams, type HookRequestInstance, type HookRequestInstanceResponseData, type HookRequestInstanceResponseFailData, type HookRequestInstanceResponseSuccessData, type MaybePromise, type ReadonlySignal, type RemoveEventFn, type Signal, type SignalOptions, type TableColumnCheck, type TableConfig, type TableDataWithIndex, type TransformedData, type Transformer, type UseEventParams, type WindowLocation, createBreakpointListen, lockHtmlScrollRightCompensationRef, useBoolean, useBreakpoint, useBrowserLocation, useComputed, useContext, useCountDown, useDeferredTrue, useEventListener, useHookTable, useInjectionCollection, useInjectionElementCollection, useInjectionInstanceCollection, useIsComposing, useLayoutContentStyle, useLayoutFooterStyle, useLayoutHeaderStyle, useLoading, useLocalPage, useLockHtmlScroll, useMemo, useMergedState, useScript, useScroll, useSignal, useSvgIconRender };
|
|
501
|
+
export { type ApiFn, type CreateCallbackParams, type HookRequestInstance, type HookRequestInstanceResponseData, type HookRequestInstanceResponseFailData, type HookRequestInstanceResponseSuccessData, type MaybePromise, type ReadonlySignal, type RemoveEventFn, type Signal, type SignalOptions, type TableColumnCheck, type TableConfig, type TableDataWithIndex, type TransformedData, type Transformer, type UseEventParams, type WindowLocation, createBreakpointListen, lockHtmlScrollRightCompensationRef, useBoolean, useBreakpoint, useBrowserLocation, useComposableContext, useComputed, useContext, useCountDown, useDeferredTrue, useEventListener, useHookTable, useInjectionCollection, useInjectionElementCollection, useInjectionInstanceCollection, useIsComposing, useLayoutContentStyle, useLayoutFooterStyle, useLayoutHeaderStyle, useLoading, useLocalPage, useLockHtmlScroll, useMemo, useMergedState, useScript, useScroll, useSignal, useSvgIconRender };
|
package/dist/index.d.ts
CHANGED
|
@@ -134,6 +134,64 @@ declare function useContext<T extends (...args: any[]) => any>(contextName: stri
|
|
|
134
134
|
useStore: () => ReturnType<T>;
|
|
135
135
|
};
|
|
136
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Use context
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```ts
|
|
142
|
+
* // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue
|
|
143
|
+
*
|
|
144
|
+
* // context.ts
|
|
145
|
+
* import { ref } from 'vue';
|
|
146
|
+
* import { useComposableContext } from '@/hooks';
|
|
147
|
+
*
|
|
148
|
+
* export const [provideDemoContext, useDemoContext] = useComposableContext('demo', () => {
|
|
149
|
+
* const count = ref(0);
|
|
150
|
+
*
|
|
151
|
+
* function increment() {
|
|
152
|
+
* count.value++;
|
|
153
|
+
* }
|
|
154
|
+
*
|
|
155
|
+
* function decrement() {
|
|
156
|
+
* count.value--;
|
|
157
|
+
* }
|
|
158
|
+
*
|
|
159
|
+
* return {
|
|
160
|
+
* count,
|
|
161
|
+
* increment,
|
|
162
|
+
* decrement
|
|
163
|
+
* };
|
|
164
|
+
* })
|
|
165
|
+
* ``` // A.vue
|
|
166
|
+
* ```vue
|
|
167
|
+
* <template>
|
|
168
|
+
* <div>A</div>
|
|
169
|
+
* </template>
|
|
170
|
+
* <script setup lang="ts">
|
|
171
|
+
* import { provideDemoContext } from './context';
|
|
172
|
+
*
|
|
173
|
+
* provideDemoContext();
|
|
174
|
+
* // const { increment } = provideDemoContext(); // also can control the store in the parent component
|
|
175
|
+
* </script>
|
|
176
|
+
* ``` // B.vue
|
|
177
|
+
* ```vue
|
|
178
|
+
* <template>
|
|
179
|
+
* <div>B</div>
|
|
180
|
+
* </template>
|
|
181
|
+
* <script setup lang="ts">
|
|
182
|
+
* import { useDemoContext } from './context';
|
|
183
|
+
*
|
|
184
|
+
* const { count, increment } = useDemoContext();
|
|
185
|
+
* </script>
|
|
186
|
+
* ```;
|
|
187
|
+
*
|
|
188
|
+
* // C.vue is same as B.vue
|
|
189
|
+
*
|
|
190
|
+
* @param contextName Context name
|
|
191
|
+
* @param fn Context function
|
|
192
|
+
*/
|
|
193
|
+
declare function useComposableContext<Arguments extends any[], T>(contextName: string, composable: (...args: Arguments) => T): readonly [(...args: Arguments) => T, <N extends string | null | undefined = undefined>(consumerName?: N | undefined, defaultValue?: T) => N extends null | undefined ? T | null : T];
|
|
194
|
+
|
|
137
195
|
/**
|
|
138
196
|
* Count down
|
|
139
197
|
*
|
|
@@ -440,4 +498,4 @@ declare function useHookTable<A extends ApiFn, T, C>(config: TableConfig<A, T, C
|
|
|
440
498
|
resetSearchParams: () => void;
|
|
441
499
|
};
|
|
442
500
|
|
|
443
|
-
export { type ApiFn, type CreateCallbackParams, type HookRequestInstance, type HookRequestInstanceResponseData, type HookRequestInstanceResponseFailData, type HookRequestInstanceResponseSuccessData, type MaybePromise, type ReadonlySignal, type RemoveEventFn, type Signal, type SignalOptions, type TableColumnCheck, type TableConfig, type TableDataWithIndex, type TransformedData, type Transformer, type UseEventParams, type WindowLocation, createBreakpointListen, lockHtmlScrollRightCompensationRef, useBoolean, useBreakpoint, useBrowserLocation, useComputed, useContext, useCountDown, useDeferredTrue, useEventListener, useHookTable, useInjectionCollection, useInjectionElementCollection, useInjectionInstanceCollection, useIsComposing, useLayoutContentStyle, useLayoutFooterStyle, useLayoutHeaderStyle, useLoading, useLocalPage, useLockHtmlScroll, useMemo, useMergedState, useScript, useScroll, useSignal, useSvgIconRender };
|
|
501
|
+
export { type ApiFn, type CreateCallbackParams, type HookRequestInstance, type HookRequestInstanceResponseData, type HookRequestInstanceResponseFailData, type HookRequestInstanceResponseSuccessData, type MaybePromise, type ReadonlySignal, type RemoveEventFn, type Signal, type SignalOptions, type TableColumnCheck, type TableConfig, type TableDataWithIndex, type TransformedData, type Transformer, type UseEventParams, type WindowLocation, createBreakpointListen, lockHtmlScrollRightCompensationRef, useBoolean, useBreakpoint, useBrowserLocation, useComposableContext, useComputed, useContext, useCountDown, useDeferredTrue, useEventListener, useHookTable, useInjectionCollection, useInjectionElementCollection, useInjectionInstanceCollection, useIsComposing, useLayoutContentStyle, useLayoutFooterStyle, useLayoutHeaderStyle, useLoading, useLocalPage, useLockHtmlScroll, useMemo, useMergedState, useScript, useScroll, useSignal, useSvgIconRender };
|
package/dist/index.mjs
CHANGED
|
@@ -295,6 +295,25 @@ function createContext(contextName) {
|
|
|
295
295
|
};
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
+
// src/use-context-composable.ts
|
|
299
|
+
import { inject as inject3, provide as provide2 } from "vue";
|
|
300
|
+
function useComposableContext(contextName, composable) {
|
|
301
|
+
const key = Symbol(contextName);
|
|
302
|
+
const useInject = (consumerName, defaultValue) => {
|
|
303
|
+
const value = inject3(key, defaultValue);
|
|
304
|
+
if (consumerName && !value) {
|
|
305
|
+
throw new Error(`\`${consumerName}\` must be used within \`${contextName}\``);
|
|
306
|
+
}
|
|
307
|
+
return value || null;
|
|
308
|
+
};
|
|
309
|
+
const useProvide = (...args) => {
|
|
310
|
+
const value = composable(...args);
|
|
311
|
+
provide2(key, value);
|
|
312
|
+
return value;
|
|
313
|
+
};
|
|
314
|
+
return [useProvide, useInject];
|
|
315
|
+
}
|
|
316
|
+
|
|
298
317
|
// src/use-count-down.ts
|
|
299
318
|
import { computed as computed2, onScopeDispose, ref as ref5 } from "vue";
|
|
300
319
|
import { useRafFn } from "@vueuse/core";
|
|
@@ -711,11 +730,13 @@ function useComputed(getterOrOptions, debugOptions) {
|
|
|
711
730
|
return createSignal(computedValue);
|
|
712
731
|
}
|
|
713
732
|
function createSignal(state) {
|
|
714
|
-
const signal = () => state.value;
|
|
733
|
+
const signal = (() => state.value);
|
|
715
734
|
signal.set = (value) => {
|
|
735
|
+
;
|
|
716
736
|
state.value = value;
|
|
717
737
|
};
|
|
718
738
|
signal.update = (updater) => {
|
|
739
|
+
;
|
|
719
740
|
state.value = updater(state.value);
|
|
720
741
|
};
|
|
721
742
|
signal.mutate = (mutator) => {
|
|
@@ -820,6 +841,7 @@ export {
|
|
|
820
841
|
useBoolean,
|
|
821
842
|
useBreakpoint,
|
|
822
843
|
useBrowserLocation,
|
|
844
|
+
useComposableContext,
|
|
823
845
|
useComputed,
|
|
824
846
|
useContext,
|
|
825
847
|
useCountDown,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/use-boolean.ts","../src/use-breakpoint.ts","../src/enum/breakpointEnum.ts","../src/use-event-listener.ts","../src/use-browser-location.ts","../src/use-collection.ts","../src/use-context.ts","../src/use-count-down.ts","../src/use-deferred-true.ts","../src/use-is-composing.ts","../src/use-layout-style.ts","../src/const/index.ts","../src/use-loading.ts","../src/use-local-page.ts","../src/use-lock-html-scroll.ts","../src/use-memo.ts","../src/use-merged-state.ts","../src/use-script.ts","../src/use-scroll.ts","../src/use-signal.ts","../src/use-svg-icon-render.ts","../src/use-table.ts"],"sourcesContent":["import { ref } from 'vue'\n\n/**\n * Boolean\n *\n * @param initValue Init value\n */\nexport function useBoolean(initValue = false) {\n const bool = ref(initValue)\n\n function setBool(value: boolean) {\n bool.value = value\n }\n function setTrue() {\n setBool(true)\n }\n function setFalse() {\n setBool(false)\n }\n function toggle() {\n setBool(!bool.value)\n }\n\n return {\n bool,\n setBool,\n setTrue,\n setFalse,\n toggle\n }\n}\n","import type { ComputedRef } from 'vue'\nimport { computed, ref, unref } from 'vue'\nimport { ScreenEnum, screenMap, SizeEnum } from './enum/breakpointEnum'\nimport { useEventListener } from './use-event-listener'\n\nlet globalScreenRef: ComputedRef<SizeEnum | undefined>\nlet globalWidthRef: ComputedRef<number>\nlet globalRealWidthRef: ComputedRef<number>\n\nexport interface CreateCallbackParams {\n screen: ComputedRef<SizeEnum | undefined>\n width: ComputedRef<number>\n realWidth: ComputedRef<number>\n screenEnum: typeof ScreenEnum\n screenMap: Map<SizeEnum, number>\n sizeEnum: typeof SizeEnum\n}\n\nexport function useBreakpoint() {\n return {\n screenRef: computed(() => unref(globalScreenRef)),\n widthRef: globalWidthRef,\n screenEnum: ScreenEnum,\n realWidthRef: globalRealWidthRef\n }\n}\n\n// Just call it once\nexport function createBreakpointListen(fn?: (opt: CreateCallbackParams) => void) {\n const screenRef = ref<SizeEnum>(SizeEnum.XL)\n const realWidthRef = ref(window.innerWidth)\n\n function getWindowWidth() {\n const width = document.body.clientWidth\n const xs = screenMap.get(SizeEnum.XS)!\n const sm = screenMap.get(SizeEnum.SM)!\n const md = screenMap.get(SizeEnum.MD)!\n const lg = screenMap.get(SizeEnum.LG)!\n const xl = screenMap.get(SizeEnum.XL)!\n if (width < xs) {\n screenRef.value = SizeEnum.XS\n } else if (width < sm) {\n screenRef.value = SizeEnum.SM\n } else if (width < md) {\n screenRef.value = SizeEnum.MD\n } else if (width < lg) {\n screenRef.value = SizeEnum.LG\n } else if (width < xl) {\n screenRef.value = SizeEnum.XL\n } else {\n screenRef.value = SizeEnum.XXL\n }\n realWidthRef.value = width\n }\n\n useEventListener({\n el: window,\n name: 'resize',\n\n listener: () => {\n getWindowWidth()\n resizeFn()\n }\n // Wait: 100,\n })\n\n getWindowWidth()\n globalScreenRef = computed(() => unref(screenRef))\n globalWidthRef = computed((): number => screenMap.get(unref(screenRef)!)!)\n globalRealWidthRef = computed((): number => unref(realWidthRef))\n\n function resizeFn() {\n fn?.({\n screen: globalScreenRef,\n width: globalWidthRef,\n realWidth: globalRealWidthRef,\n screenEnum: ScreenEnum,\n screenMap,\n sizeEnum: SizeEnum\n })\n }\n\n resizeFn()\n return {\n screenRef: globalScreenRef,\n screenEnum: ScreenEnum,\n widthRef: globalWidthRef,\n realWidthRef: globalRealWidthRef\n }\n}\n","export enum SizeEnum {\n XS = 'XS',\n SM = 'SM',\n MD = 'MD',\n LG = 'LG',\n XL = 'XL',\n XXL = 'XXL'\n}\n\nexport enum ScreenEnum {\n XS = 320,\n SM = 640,\n MD = 768,\n LG = 960,\n XL = 1280,\n XXL = 1536\n}\n\nconst screenMap = new Map<SizeEnum, number>()\n\nscreenMap.set(SizeEnum.XS, ScreenEnum.XS)\nscreenMap.set(SizeEnum.SM, ScreenEnum.SM)\nscreenMap.set(SizeEnum.MD, ScreenEnum.MD)\nscreenMap.set(SizeEnum.LG, ScreenEnum.LG)\nscreenMap.set(SizeEnum.XL, ScreenEnum.XL)\nscreenMap.set(SizeEnum.XXL, ScreenEnum.XXL)\n\nexport { screenMap }\n","import type { Ref } from 'vue'\nimport { ref, unref, watch } from 'vue'\nimport { useDebounceFn, useThrottleFn } from '@vueuse/core'\n\nexport type RemoveEventFn = () => void\nexport interface UseEventParams {\n el?: Element | Ref<Element | undefined> | Window | any\n name: string\n listener: EventListener\n options?: boolean | AddEventListenerOptions\n autoRemove?: boolean\n isDebounce?: boolean\n wait?: number\n}\nexport function useEventListener({ el = window, name, listener, options, autoRemove = true, isDebounce = true, wait = 80 }: UseEventParams): { removeEvent: RemoveEventFn } {\n /* eslint-disable-next-line */\n let remove: RemoveEventFn = () => { };\n const isAddRef = ref(false)\n\n if (el) {\n const element = ref(el as Element) as Ref<Element>\n\n const handler = isDebounce ? useDebounceFn(listener, wait) : useThrottleFn(listener, wait)\n const realHandler = wait ? handler : listener\n const removeEventListener = (e: Element) => {\n isAddRef.value = true\n e.removeEventListener(name, realHandler, options)\n }\n const addEventListener = (e: Element) => e.addEventListener(name, realHandler, options)\n\n const removeWatch = watch(\n element,\n (v, _ov, cleanUp) => {\n if (v) {\n !unref(isAddRef) && addEventListener(v)\n cleanUp(() => {\n autoRemove && removeEventListener(v)\n })\n }\n },\n { immediate: true }\n )\n\n remove = () => {\n removeEventListener(element.value)\n removeWatch()\n }\n }\n return { removeEvent: remove }\n}\n","import { onMounted, onUnmounted, type Ref, ref } from 'vue'\n\nexport interface WindowLocation {\n hash?: string\n host?: string\n hostname?: string\n href?: string\n origin?: string\n pathname?: string\n port?: string\n protocol?: string\n search?: string\n}\n\nconst isBrowser = typeof document !== 'undefined' && typeof window !== 'undefined'\n\nexport function useBrowserLocation(customWindow = isBrowser ? window : null): Ref<WindowLocation> {\n const getWindowLocation = (): WindowLocation => {\n const { hash, host, hostname, href, origin, pathname, port, protocol, search } = customWindow?.location || {}\n\n return {\n hash,\n host,\n hostname,\n href,\n origin,\n pathname,\n port,\n protocol,\n search\n }\n }\n\n const locationState = ref(getWindowLocation())\n\n const updateLocation = (): void => {\n locationState.value = getWindowLocation()\n }\n\n onMounted(() => {\n if (customWindow) {\n customWindow.addEventListener('popstate', updateLocation)\n customWindow.addEventListener('hashchange', updateLocation)\n }\n })\n\n onUnmounted(() => {\n if (customWindow) {\n customWindow.removeEventListener('popstate', updateLocation)\n customWindow.removeEventListener('hashchange', updateLocation)\n }\n })\n\n return locationState\n}\n","import type { InjectionKey, Ref } from 'vue'\nimport { getCurrentInstance, inject, onBeforeUnmount, onMounted, watch } from 'vue'\n\n// 函数的作用是管理 Vue 组件的实例集合。它通过注入的方式将组件实例注册到指定的集合中,并在组件卸载时进行清理。以下是该函数的主要功能说明:\nexport function useInjectionInstanceCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, registerKeyRef: Ref<string | undefined>): void {\n const injection = inject<Record<string, Record<string, any>> | null>(injectionName, null)\n if (injection === null) return\n const vm = getCurrentInstance()?.proxy\n watch(registerKeyRef, registerInstance)\n registerInstance(registerKeyRef.value)\n onBeforeUnmount(() => {\n registerInstance(undefined, registerKeyRef.value)\n })\n function registerInstance(key?: string, oldKey?: string): void {\n if (!injection) return\n const collection = injection[collectionKey]\n if (oldKey !== undefined) removeInstance(collection, oldKey)\n if (key !== undefined) addInstance(collection, key)\n }\n function removeInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n collection[key].splice(\n collection[key].findIndex(instance => instance === vm),\n 1\n )\n }\n function addInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n if (!~collection[key].findIndex(instance => instance === vm)) {\n collection[key].push(vm)\n }\n }\n}\n\nexport function useInjectionCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, valueRef: Ref<any>): void {\n const injection = inject<Record<any, any[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n injection[collectionKey].push(valueRef.value)\n watch(valueRef, (value, prevValue) => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === prevValue)\n if (~index) collectionArray.splice(index, 1)\n collectionArray.push(value)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === valueRef.value)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n\nexport function useInjectionElementCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, getElement: () => HTMLElement | null): void {\n const injection = inject<Record<string, HTMLElement[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n onMounted(() => {\n const el = getElement()\n if (!el) return\n injection[collectionKey].push(el)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const element = getElement()\n const index = collectionArray.findIndex(collectionElement => collectionElement === element)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\n/**\n * Use context\n *\n * @example\n * ```ts\n * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue\n *\n * // context.ts\n * import { ref } from 'vue';\n * import { useContext } from '@max/hooks';\n *\n * export const { setupStore, useStore } = useContext('demo', () => {\n * const count = ref(0);\n *\n * function increment() {\n * count.value++;\n * }\n *\n * function decrement() {\n * count.value--;\n * }\n *\n * return {\n * count,\n * increment,\n * decrement\n * };\n * })\n * ``` // A.vue\n * ```vue\n * <template>\n * <div>A</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { setupStore } from './context';\n *\n * setupStore();\n * // const { increment } = setupStore(); // also can control the store in the parent component\n * </script>\n * ``` // B.vue\n * ```vue\n * <template>\n * <div>B</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { useStore } from './context';\n *\n * const { count, increment } = useStore();\n * </script>\n * ```;\n *\n * // C.vue is same as B.vue\n *\n * @param contextName Context name\n * @param fn Context function\n */\nexport function useContext<T extends (...args: any[]) => any>(contextName: string, fn: T) {\n type Context = ReturnType<T>\n\n const { useProvide, useInject: useStore } = createContext<Context>(contextName)\n\n function setupStore(...args: Parameters<T>) {\n const context: Context = fn(...args)\n return useProvide(context)\n }\n\n return {\n /** Setup store in the parent component */\n setupStore,\n /** Use store in the child component */\n useStore\n }\n}\n\n/** Create context */\nfunction createContext<T>(contextName: string) {\n const injectKey: InjectionKey<T> = Symbol(contextName)\n\n function useProvide(context: T) {\n provide(injectKey, context)\n\n return context\n }\n\n function useInject() {\n return inject(injectKey) as T\n }\n\n return {\n useProvide,\n useInject\n }\n}\n","import { computed, onScopeDispose, ref } from 'vue'\nimport { useRafFn } from '@vueuse/core'\n\n/**\n * Count down\n *\n * @param seconds - count down seconds\n */\nexport function useCountDown(seconds: number) {\n const FPS_PER_SECOND = 60\n\n const fps = ref(0)\n\n const count = computed(() => Math.ceil(fps.value / FPS_PER_SECOND))\n\n const isCounting = computed(() => fps.value > 0)\n\n const { pause, resume } = useRafFn(\n () => {\n if (fps.value > 0) {\n fps.value -= 1\n } else {\n pause()\n }\n },\n { immediate: false }\n )\n\n function start(updateSeconds: number = seconds) {\n fps.value = FPS_PER_SECOND * updateSeconds\n resume()\n }\n\n function stop() {\n fps.value = 0\n pause()\n }\n\n onScopeDispose(() => {\n pause()\n })\n\n return {\n count,\n isCounting,\n start,\n stop\n }\n}\n","import { type Ref, ref, watch } from 'vue'\n\n// 此函数用于在指定延迟后返回一个布尔值引用,基于输入的值引用和延迟条件\nexport function useDeferredTrue(valueRef: Ref<any>, delay: number, shouldDelayRef: Ref<boolean>): Ref<boolean> {\n if (!delay) return valueRef\n const delayedRef = ref(valueRef.value)\n let timerId: number | null = null\n watch(valueRef, value => {\n if (timerId !== null) window.clearTimeout(timerId)\n if (value === true) {\n if (shouldDelayRef && !shouldDelayRef.value) {\n delayedRef.value = true\n } else {\n timerId = window.setTimeout(() => {\n delayedRef.value = true\n }, delay)\n }\n } else {\n delayedRef.value = false\n }\n })\n return delayedRef\n}\n","import { onBeforeMount, onBeforeUnmount, type Ref, ref } from 'vue'\n\nconst isComposingRef = ref(false)\nfunction compositionStartHandler(): void {\n isComposingRef.value = true\n}\nfunction compositionEndHandler(): void {\n isComposingRef.value = false\n}\nlet mountedCount = 0\n\n// 用于检测用户是否正在进行输入法的组合输入\nexport function useIsComposing(): Ref<boolean> {\n if (document && window) {\n onBeforeMount(() => {\n if (!mountedCount) {\n window.addEventListener('compositionstart', compositionStartHandler)\n window.addEventListener('compositionend', compositionEndHandler)\n }\n mountedCount++\n })\n onBeforeUnmount(() => {\n if (mountedCount <= 1) {\n window.removeEventListener('compositionstart', compositionStartHandler)\n window.removeEventListener('compositionend', compositionEndHandler)\n mountedCount = 0\n } else {\n mountedCount--\n }\n })\n }\n return isComposingRef\n}\n","import type { CSSProperties } from 'vue'\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\nimport { useCssVar, useDebounceFn } from '@vueuse/core'\nimport type { VisibleDomRect } from '@maxax/utils'\nimport { getElementVisibleRect } from '@maxax/utils'\nimport { CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT, CSS_VARIABLE_LAYOUT_CONTENT_WIDTH, CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT, CSS_VARIABLE_LAYOUT_HEADER_HEIGHT } from './const'\n\nexport function useLayoutContentStyle(diffHeight = 0) {\n let resizeObserver: null | ResizeObserver = null\n const contentElement = ref<HTMLDivElement | null>(null)\n const visibleDomRect = ref<null | VisibleDomRect>(null)\n const contentHeight = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT)\n const contentWidth = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_WIDTH)\n\n const overlayStyle = computed((): CSSProperties => {\n const { height, left, top, width } = visibleDomRect.value ?? {}\n return {\n height: `${height}px`,\n left: `${left}px`,\n position: 'fixed',\n top: `${top}px`,\n width: `${width}px`,\n zIndex: 150\n }\n })\n\n const debouncedCalcHeight = useDebounceFn((_entries: ResizeObserverEntry[]) => {\n visibleDomRect.value = getElementVisibleRect(contentElement.value)\n contentHeight.value = `${visibleDomRect.value.height - diffHeight}px`\n contentWidth.value = `${visibleDomRect.value.width}px`\n }, 16)\n\n onMounted(() => {\n if (contentElement.value && !resizeObserver) {\n resizeObserver = new ResizeObserver(debouncedCalcHeight)\n resizeObserver.observe(contentElement.value)\n }\n })\n\n onUnmounted(() => {\n resizeObserver?.disconnect()\n resizeObserver = null\n })\n\n return { contentElement, overlayStyle, visibleDomRect }\n}\n\nexport function useLayoutHeaderStyle() {\n const headerHeight = useCssVar(CSS_VARIABLE_LAYOUT_HEADER_HEIGHT)\n\n return {\n getLayoutHeaderHeight: () => {\n return Number.parseInt(`${headerHeight.value}`, 10)\n },\n setLayoutHeaderHeight: (height: number) => {\n headerHeight.value = `${height}px`\n }\n }\n}\n\nexport function useLayoutFooterStyle() {\n const footerHeight = useCssVar(CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT)\n\n return {\n getLayoutFooterHeight: () => {\n return Number.parseInt(`${footerHeight.value}`, 10)\n },\n setLayoutFooterHeight: (height: number) => {\n footerHeight.value = `${height}px`\n }\n }\n}\n","/** Layout content 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT = '--max-content-height'\n/** Layout content 组件的宽度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_WIDTH = '--max-content-width'\n/** Layout header 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_HEADER_HEIGHT = '--max-header-height'\n/** Layout footer 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT = '--max-footer-height'\n","import { useBoolean } from './use-boolean'\n\n/**\n * Loading\n *\n * @param initValue Init value\n */\nexport function useLoading(initValue = false) {\n const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(initValue)\n\n return {\n loading,\n startLoading,\n endLoading\n }\n}\n","import { computed, ref, unref } from 'vue'\n\nfunction pagination<T = any>(list: T[], pageNo: number, pageSize: number): T[] {\n const offset = (pageNo - 1) * Number(pageSize)\n const ret = offset + Number(pageSize) >= list.length ? list.slice(offset, list.length) : list.slice(offset, offset + Number(pageSize))\n return ret\n}\n\nexport function useLocalPage(list: any[], pageSize: number) {\n const currentPage = ref(1)\n const pageSizeRef = ref(pageSize)\n const listRef = ref(list)\n\n const getPaginationList = computed(() => {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n })\n\n const getTotal = computed(() => {\n return unref(listRef).length\n })\n\n function setCurrentPage(page: number) {\n currentPage.value = page\n }\n\n function setPageSize(size: number) {\n pageSizeRef.value = size\n }\n\n function setPagination(page: { currentPage: number; pageSize: number }) {\n setCurrentPage(page.currentPage)\n setPageSize(page.pageSize)\n }\n\n function getPageList() {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n }\n\n return { setCurrentPage, getTotal, setPageSize, getPaginationList, setPagination, getPageList }\n}\n","import { type Ref, type WatchStopHandle, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nlet lockCount = 0\nlet originalMarginRight: string = ''\nlet originalOverflow: string = ''\nlet originalOverflowX: string = ''\nlet originalOverflowY: string = ''\nexport const lockHtmlScrollRightCompensationRef = ref('0px')\n\nexport function useLockHtmlScroll(lockRef: Ref<boolean>): void {\n // not browser\n if (typeof document === 'undefined') return\n const el = document.documentElement\n let watchStopHandle: WatchStopHandle | undefined\n let activated = false\n const unlock = (): void => {\n el.style.marginRight = originalMarginRight\n el.style.overflow = originalOverflow\n el.style.overflowX = originalOverflowX\n el.style.overflowY = originalOverflowY\n lockHtmlScrollRightCompensationRef.value = '0px'\n }\n onMounted(() => {\n watchStopHandle = watch(\n lockRef,\n value => {\n if (value) {\n if (!lockCount) {\n const scrollbarWidth = window.innerWidth - el.offsetWidth\n if (scrollbarWidth > 0) {\n originalMarginRight = el.style.marginRight\n el.style.marginRight = `${scrollbarWidth}px`\n lockHtmlScrollRightCompensationRef.value = `${scrollbarWidth}px`\n }\n originalOverflow = el.style.overflow\n originalOverflowX = el.style.overflowX\n originalOverflowY = el.style.overflowY\n el.style.overflow = 'hidden'\n el.style.overflowX = 'hidden'\n el.style.overflowY = 'hidden'\n }\n activated = true\n lockCount++\n } else {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n },\n {\n immediate: true\n }\n )\n })\n onBeforeUnmount(() => {\n watchStopHandle?.()\n if (activated) {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n })\n}\n","import type { ComputedRef, Ref, WritableComputedRef } from 'vue'\nimport { computed, ref, watch } from 'vue'\n\ntype MemoGetter<T> = () => T\ntype MemoSetter<T> = (v: T) => void\n\ninterface WritableMemoOptions<T> {\n get: MemoGetter<T>\n set: MemoSetter<T>\n}\n\nfunction useMemo<T>(getter: MemoGetter<T>): ComputedRef<T>\nfunction useMemo<T>(options: WritableMemoOptions<T>): WritableComputedRef<T>\nfunction useMemo<T>(getterOrOptions: MemoGetter<T> | WritableMemoOptions<T>): ComputedRef<T> | WritableComputedRef<T> {\n const computedValueRef = computed(getterOrOptions as any) as WritableComputedRef<T> | ComputedRef<T>\n // Maybe it's not possible to lazy evaluate the value, since we can't make\n // render phase capture the deps behind useMemo\n const valueRef = ref(computedValueRef.value) as Ref<T>\n watch(computedValueRef, value => {\n valueRef.value = value\n })\n if (typeof getterOrOptions === 'function') {\n return valueRef as ComputedRef<T>\n }\n return {\n __v_isRef: true,\n get value() {\n return valueRef.value\n },\n set value(v: T) {\n // eslint-disable-next-line prettier/prettier\n ; (getterOrOptions as WritableMemoOptions<T>).set(v)\n }\n } as unknown as WritableComputedRef<T>\n}\n\nexport { useMemo }\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, watch } from 'vue'\n\nexport function useMergedState<T>(controlledStateRef: Ref<T | undefined>, uncontrolledStateRef: Ref<T>): ComputedRef<T> {\n watch(controlledStateRef, value => {\n if (value !== undefined) {\n uncontrolledStateRef.value = value\n }\n })\n return computed(() => {\n if (controlledStateRef.value === undefined) {\n return uncontrolledStateRef.value\n }\n return controlledStateRef.value\n })\n}\n","import { onMounted, onUnmounted, ref } from 'vue'\n\ninterface ScriptOptions {\n src: string\n}\n\nexport function useScript(opts: ScriptOptions) {\n const isLoading = ref(false)\n const error = ref(false)\n const success = ref(false)\n let script: HTMLScriptElement\n\n const promise = new Promise((resolve, reject) => {\n onMounted(() => {\n script = document.createElement('script')\n script.type = 'text/javascript'\n script.onload = () => {\n isLoading.value = false\n success.value = true\n error.value = false\n resolve('')\n }\n\n script.onerror = err => {\n isLoading.value = false\n success.value = false\n error.value = true\n reject(err)\n }\n\n script.src = opts.src\n document.head.appendChild(script)\n })\n })\n\n onUnmounted(() => {\n script && script.remove()\n })\n\n return {\n isLoading,\n error,\n success,\n toPromise: () => promise\n }\n}\n","import type { Ref } from 'vue'\n\nimport { onMounted, onUnmounted, ref, watch } from 'vue'\nimport { useThrottleFn } from '@vueuse/core'\nimport { isObject, isWindow } from '@maxax/utils'\n\nexport function useScroll(\n refEl: Ref<Element | Window | null>,\n options?: {\n wait?: number\n leading?: boolean\n trailing?: boolean\n }\n) {\n const refX = ref(0)\n const refY = ref(0)\n let handler = () => {\n if (isWindow(refEl.value)) {\n refX.value = refEl.value.scrollX\n refY.value = refEl.value.scrollY\n } else if (refEl.value) {\n refX.value = (refEl.value as Element).scrollLeft\n refY.value = (refEl.value as Element).scrollTop\n }\n }\n\n if (isObject(options)) {\n let wait = 0\n if (options && options.wait && options.wait > 0) {\n wait = options.wait\n Reflect.deleteProperty(options, 'wait')\n }\n\n handler = useThrottleFn(handler, wait)\n }\n\n let stopWatch: () => void\n onMounted(() => {\n stopWatch = watch(\n refEl,\n (el, prevEl, onCleanup) => {\n if (el) {\n el.addEventListener('scroll', handler)\n } else if (prevEl) {\n prevEl.removeEventListener('scroll', handler)\n }\n onCleanup(() => {\n refX.value = 0\n refY.value = 0\n el && el.removeEventListener('scroll', handler)\n })\n },\n { immediate: true }\n )\n })\n\n onUnmounted(() => {\n refEl.value && refEl.value.removeEventListener('scroll', handler)\n })\n\n function stop() {\n stopWatch && stopWatch()\n }\n\n return { refX, refY, stop }\n}\n","import { computed, ref, shallowRef, triggerRef } from 'vue'\nimport type { ComputedGetter, DebuggerOptions, Ref, ShallowRef, WritableComputedOptions, WritableComputedRef } from 'vue'\n\ntype Updater<T> = (value: T) => T\ntype Mutator<T> = (value: T) => void\n\n/**\n * Signal is a reactive value that can be set, updated or mutated\n *\n * @example\n * ```ts\n * const count = useSignal(0);\n *\n * // `watchEffect`\n * watchEffect(() => {\n * console.log(count());\n * });\n *\n * // watch\n * watch(count, value => {\n * console.log(value);\n * });\n *\n * // useComputed\n * const double = useComputed(() => count() * 2);\n * const writeableDouble = useComputed({\n * get: () => count() * 2,\n * set: value => count.set(value / 2)\n * });\n * ```\n */\nexport interface Signal<T> {\n (): Readonly<T>\n /**\n * Set the value of the signal\n *\n * It recommend use `set` for primitive values\n *\n * @param value\n */\n set: (value: T) => void\n /**\n * Update the value of the signal using an updater function\n *\n * It recommend use `update` for non-primitive values, only the first level of the object will be reactive.\n *\n * @param updater\n */\n update: (updater: Updater<T>) => void\n /**\n * Mutate the value of the signal using a mutator function\n *\n * this action will call `triggerRef`, so the value will be tracked on `watchEffect`.\n *\n * It recommend use `mutate` for non-primitive values, all levels of the object will be reactive.\n *\n * @param mutator\n */\n mutate: (mutator: Mutator<T>) => void\n /**\n * Get the reference of the signal\n *\n * Sometimes it can be useful to make `v-model` work with the signal\n *\n * ```vue\n * <template>\n * <input v-model=\"model.count\" />\n * </template>;\n *\n * <script setup lang=\"ts\">\n * const state = useSignal({ count: 0 }, { useRef: true });\n *\n * const model = state.getRef();\n * </script>\n * ```\n */\n getRef: () => Readonly<ShallowRef<Readonly<T>>>\n}\n\nexport interface ReadonlySignal<T> {\n (): Readonly<T>\n}\n\nexport interface SignalOptions {\n /**\n * Whether to use `ref` to store the value\n *\n * @default false use `sharedRef` to store the value\n */\n useRef?: boolean\n}\n\nexport function useSignal<T>(initialValue: T, options?: SignalOptions): Signal<T> {\n const { useRef } = options || {}\n\n const state = useRef ? (ref(initialValue) as Ref<T>) : shallowRef(initialValue)\n\n return createSignal(state)\n}\n\nexport function useComputed<T>(getter: ComputedGetter<T>, debugOptions?: DebuggerOptions): ReadonlySignal<T>\nexport function useComputed<T>(options: WritableComputedOptions<T>, debugOptions?: DebuggerOptions): Signal<T>\nexport function useComputed<T>(getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>, debugOptions?: DebuggerOptions) {\n const isGetter = typeof getterOrOptions === 'function'\n\n const computedValue = computed(getterOrOptions as any, debugOptions)\n\n if (isGetter) {\n return () => computedValue.value as ReadonlySignal<T>\n }\n\n return createSignal(computedValue)\n}\n\nfunction createSignal<T>(state: ShallowRef<T> | WritableComputedRef<T>): Signal<T> {\n const signal = () => state.value\n\n signal.set = (value: T) => {\n state.value = value\n }\n\n signal.update = (updater: Updater<T>) => {\n state.value = updater(state.value)\n }\n\n signal.mutate = (mutator: Mutator<T>) => {\n mutator(state.value)\n triggerRef(state)\n }\n\n signal.getRef = () => state as Readonly<ShallowRef<Readonly<T>>>\n\n return signal\n}\n","import { h } from 'vue'\nimport type { Component } from 'vue'\n\ninterface IconConfig {\n /** Iconify icon name */\n icon?: string\n /** Local icon name */\n localIcon?: string\n /** Icon color */\n color?: string\n /** Icon size */\n fontSize?: number\n}\n\ntype IconStyle = Partial<Pick<CSSStyleDeclaration, 'color' | 'fontSize'>>\n\n/**\n * Svg icon render hook\n *\n * @param SvgIcon Svg icon component\n */\nexport function useSvgIconRender(SvgIcon: Component) {\n /**\n * Svg icon VNode\n *\n * @param config\n */\n const SvgIconVNode = (config: IconConfig) => {\n const { color, fontSize, icon, localIcon } = config\n\n const style: IconStyle = {}\n\n if (color) {\n style.color = color\n }\n if (fontSize) {\n style.fontSize = `${fontSize}px`\n }\n\n if (!icon && !localIcon) {\n return undefined\n }\n\n return () => h(SvgIcon, { icon, localIcon, style })\n }\n\n return {\n SvgIconVNode\n }\n}\n","import { computed, reactive, ref } from 'vue'\nimport type { Ref } from 'vue'\nimport { jsonClone } from '@maxax/utils'\nimport { useBoolean } from './use-boolean'\nimport { useLoading } from './use-loading'\n\nexport type MaybePromise<T> = T | Promise<T>\n\nexport type ApiFn = (args: any) => Promise<unknown>\n\nexport interface TableColumnCheck {\n key: string\n title: string\n checked: boolean\n}\n\nexport type TableDataWithIndex<T> = T & { index: number }\n\nexport interface TransformedData<T> {\n data: TableDataWithIndex<T>[]\n pageNum: number\n pageSize: number\n total: number\n}\n\nexport type Transformer<T, Response> = (response: Response) => TransformedData<T>\n\nexport interface TableConfig<A extends ApiFn, T, C> {\n /** Api function to get table data */\n apiFn: A\n /** Api params */\n apiParams?: Parameters<A>[0]\n /** Transform api response to table data */\n transformer: Transformer<T, Awaited<ReturnType<A>>>\n /** Columns factory */\n columns: () => C[]\n /**\n * Get column checks\n *\n * @param columns\n */\n getColumnChecks: (columns: C[]) => TableColumnCheck[]\n /**\n * Get columns\n *\n * @param columns\n */\n getColumns: (columns: C[], checks: TableColumnCheck[]) => C[]\n /**\n * Callback when response fetched\n *\n * @param transformed transformed data\n */\n onFetched?: (transformed: TransformedData<T>) => MaybePromise<void>\n /**\n * Whether to get data immediately\n *\n * @default true\n */\n immediate?: boolean\n}\n\nexport function useHookTable<A extends ApiFn, T, C>(config: TableConfig<A, T, C>) {\n const { loading, startLoading, endLoading } = useLoading()\n const { bool: empty, setBool: setEmpty } = useBoolean()\n\n const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config\n\n const searchParams: NonNullable<Parameters<A>[0]> = reactive(jsonClone({ ...apiParams }))\n\n const allColumns = ref(config.columns()) as Ref<C[]>\n\n const data: Ref<TableDataWithIndex<T>[]> = ref([])\n\n const columnChecks: Ref<TableColumnCheck[]> = ref(getColumnChecks(config.columns()))\n\n const columns = computed(() => getColumns(allColumns.value, columnChecks.value))\n\n function reloadColumns() {\n allColumns.value = config.columns()\n\n const checkMap = new Map(columnChecks.value.map(col => [col.key, col.checked]))\n\n const defaultChecks = getColumnChecks(allColumns.value)\n\n columnChecks.value = defaultChecks.map(col => ({\n ...col,\n checked: checkMap.get(col.key) ?? col.checked\n }))\n }\n\n async function getData() {\n startLoading()\n\n const formattedParams = formatSearchParams(searchParams)\n\n const response = await apiFn(formattedParams)\n\n const transformed = transformer(response as Awaited<ReturnType<A>>)\n\n data.value = transformed.data\n\n setEmpty(transformed.data.length === 0)\n\n await config.onFetched?.(transformed)\n\n endLoading()\n }\n\n function formatSearchParams(params: Record<string, unknown>) {\n const formattedParams: Record<string, unknown> = {}\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n formattedParams[key] = value\n }\n })\n\n return formattedParams\n }\n\n /**\n * Update search params\n *\n * @param params\n */\n function updateSearchParams(params: Partial<Parameters<A>[0]>) {\n Object.assign(searchParams, params)\n }\n\n /** Reset search params */\n function resetSearchParams() {\n Object.assign(searchParams, jsonClone(apiParams))\n }\n\n if (immediate) {\n getData()\n }\n\n return {\n loading,\n empty,\n data,\n columns,\n columnChecks,\n reloadColumns,\n getData,\n searchParams,\n updateSearchParams,\n resetSearchParams\n }\n}\n"],"mappings":";AAAA,SAAS,WAAW;AAOb,SAAS,WAAW,YAAY,OAAO;AAC5C,QAAM,OAAO,IAAI,SAAS;AAE1B,WAAS,QAAQ,OAAgB;AAC/B,SAAK,QAAQ;AAAA,EACf;AACA,WAAS,UAAU;AACjB,YAAQ,IAAI;AAAA,EACd;AACA,WAAS,WAAW;AAClB,YAAQ,KAAK;AAAA,EACf;AACA,WAAS,SAAS;AAChB,YAAQ,CAAC,KAAK,KAAK;AAAA,EACrB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC7BA,SAAS,UAAU,OAAAA,MAAK,SAAAC,cAAa;;;ACD9B,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,QAAK;AACL,EAAAA,UAAA,SAAM;AANI,SAAAA;AAAA,GAAA;AASL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA,QAAK,OAAL;AACA,EAAAA,wBAAA,QAAK,OAAL;AACA,EAAAA,wBAAA,QAAK,OAAL;AACA,EAAAA,wBAAA,QAAK,OAAL;AACA,EAAAA,wBAAA,QAAK,QAAL;AACA,EAAAA,wBAAA,SAAM,QAAN;AANU,SAAAA;AAAA,GAAA;AASZ,IAAM,YAAY,oBAAI,IAAsB;AAE5C,UAAU,IAAI,eAAa,YAAa;AACxC,UAAU,IAAI,eAAa,YAAa;AACxC,UAAU,IAAI,eAAa,YAAa;AACxC,UAAU,IAAI,eAAa,YAAa;AACxC,UAAU,IAAI,eAAa,aAAa;AACxC,UAAU,IAAI,iBAAc,cAAc;;;ACxB1C,SAAS,OAAAC,MAAK,OAAO,aAAa;AAClC,SAAS,eAAe,qBAAqB;AAYtC,SAAS,iBAAiB,EAAE,KAAK,QAAQ,MAAM,UAAU,SAAS,aAAa,MAAM,aAAa,MAAM,OAAO,GAAG,GAAmD;AAE1K,MAAI,SAAwB,MAAM;AAAA,EAAE;AACpC,QAAM,WAAWA,KAAI,KAAK;AAE1B,MAAI,IAAI;AACN,UAAM,UAAUA,KAAI,EAAa;AAEjC,UAAM,UAAU,aAAa,cAAc,UAAU,IAAI,IAAI,cAAc,UAAU,IAAI;AACzF,UAAM,cAAc,OAAO,UAAU;AACrC,UAAM,sBAAsB,CAAC,MAAe;AAC1C,eAAS,QAAQ;AACjB,QAAE,oBAAoB,MAAM,aAAa,OAAO;AAAA,IAClD;AACA,UAAM,mBAAmB,CAAC,MAAe,EAAE,iBAAiB,MAAM,aAAa,OAAO;AAEtF,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,CAAC,GAAG,KAAK,YAAY;AACnB,YAAI,GAAG;AACL,WAAC,MAAM,QAAQ,KAAK,iBAAiB,CAAC;AACtC,kBAAQ,MAAM;AACZ,0BAAc,oBAAoB,CAAC;AAAA,UACrC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACpB;AAEA,aAAS,MAAM;AACb,0BAAoB,QAAQ,KAAK;AACjC,kBAAY;AAAA,IACd;AAAA,EACF;AACA,SAAO,EAAE,aAAa,OAAO;AAC/B;;;AF5CA,IAAI;AACJ,IAAI;AACJ,IAAI;AAWG,SAAS,gBAAgB;AAC9B,SAAO;AAAA,IACL,WAAW,SAAS,MAAMC,OAAM,eAAe,CAAC;AAAA,IAChD,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AACF;AAGO,SAAS,uBAAuB,IAA0C;AAC/E,QAAM,YAAYC,kBAAyB;AAC3C,QAAM,eAAeA,KAAI,OAAO,UAAU;AAE1C,WAAS,iBAAiB;AACxB,UAAM,QAAQ,SAAS,KAAK;AAC5B,UAAM,KAAK,UAAU,iBAAe;AACpC,UAAM,KAAK,UAAU,iBAAe;AACpC,UAAM,KAAK,UAAU,iBAAe;AACpC,UAAM,KAAK,UAAU,iBAAe;AACpC,UAAM,KAAK,UAAU,iBAAe;AACpC,QAAI,QAAQ,IAAI;AACd,gBAAU;AAAA,IACZ,WAAW,QAAQ,IAAI;AACrB,gBAAU;AAAA,IACZ,WAAW,QAAQ,IAAI;AACrB,gBAAU;AAAA,IACZ,WAAW,QAAQ,IAAI;AACrB,gBAAU;AAAA,IACZ,WAAW,QAAQ,IAAI;AACrB,gBAAU;AAAA,IACZ,OAAO;AACL,gBAAU;AAAA,IACZ;AACA,iBAAa,QAAQ;AAAA,EACvB;AAEA,mBAAiB;AAAA,IACf,IAAI;AAAA,IACJ,MAAM;AAAA,IAEN,UAAU,MAAM;AACd,qBAAe;AACf,eAAS;AAAA,IACX;AAAA;AAAA,EAEF,CAAC;AAED,iBAAe;AACf,oBAAkB,SAAS,MAAMD,OAAM,SAAS,CAAC;AACjD,mBAAiB,SAAS,MAAc,UAAU,IAAIA,OAAM,SAAS,CAAE,CAAE;AACzE,uBAAqB,SAAS,MAAcA,OAAM,YAAY,CAAC;AAE/D,WAAS,WAAW;AAClB,6BAAK;AAAA,MACH,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,MACX,YAAY;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AAEA,WAAS;AACT,SAAO;AAAA,IACL,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AACF;;;AGzFA,SAAS,WAAW,aAAuB,OAAAE,YAAW;AActD,IAAM,YAAY,OAAO,aAAa,eAAe,OAAO,WAAW;AAEhE,SAAS,mBAAmB,eAAe,YAAY,SAAS,MAA2B;AAChG,QAAM,oBAAoB,MAAsB;AAC9C,UAAM,EAAE,MAAM,MAAM,UAAU,MAAM,QAAQ,UAAU,MAAM,UAAU,OAAO,KAAI,6CAAc,aAAY,CAAC;AAE5G,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgBA,KAAI,kBAAkB,CAAC;AAE7C,QAAM,iBAAiB,MAAY;AACjC,kBAAc,QAAQ,kBAAkB;AAAA,EAC1C;AAEA,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,mBAAa,iBAAiB,YAAY,cAAc;AACxD,mBAAa,iBAAiB,cAAc,cAAc;AAAA,IAC5D;AAAA,EACF,CAAC;AAED,cAAY,MAAM;AAChB,QAAI,cAAc;AAChB,mBAAa,oBAAoB,YAAY,cAAc;AAC3D,mBAAa,oBAAoB,cAAc,cAAc;AAAA,IAC/D;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ACrDA,SAAS,oBAAoB,QAAQ,iBAAiB,aAAAC,YAAW,SAAAC,cAAa;AAGvE,SAAS,+BAA+B,eAA+C,eAAuB,gBAA+C;AAJpK;AAKE,QAAM,YAAY,OAAmD,eAAe,IAAI;AACxF,MAAI,cAAc,KAAM;AACxB,QAAM,MAAK,wBAAmB,MAAnB,mBAAsB;AACjC,EAAAA,OAAM,gBAAgB,gBAAgB;AACtC,mBAAiB,eAAe,KAAK;AACrC,kBAAgB,MAAM;AACpB,qBAAiB,QAAW,eAAe,KAAK;AAAA,EAClD,CAAC;AACD,WAAS,iBAAiB,KAAc,QAAuB;AAC7D,QAAI,CAAC,UAAW;AAChB,UAAM,aAAa,UAAU,aAAa;AAC1C,QAAI,WAAW,OAAW,gBAAe,YAAY,MAAM;AAC3D,QAAI,QAAQ,OAAW,aAAY,YAAY,GAAG;AAAA,EACpD;AACA,WAAS,eAAe,YAAmC,KAAmB;AAC5E,QAAI,CAAC,WAAW,GAAG,EAAG,YAAW,GAAG,IAAI,CAAC;AACzC,eAAW,GAAG,EAAE;AAAA,MACd,WAAW,GAAG,EAAE,UAAU,cAAY,aAAa,EAAE;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AACA,WAAS,YAAY,YAAmC,KAAmB;AACzE,QAAI,CAAC,WAAW,GAAG,EAAG,YAAW,GAAG,IAAI,CAAC;AACzC,QAAI,CAAC,CAAC,WAAW,GAAG,EAAE,UAAU,cAAY,aAAa,EAAE,GAAG;AAC5D,iBAAW,GAAG,EAAE,KAAK,EAAE;AAAA,IACzB;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB,eAA+C,eAAuB,UAA0B;AACrI,QAAM,YAAY,OAAkC,eAAe,IAAI;AACvE,MAAI,cAAc,KAAM;AACxB,MAAI,EAAE,iBAAiB,YAAY;AACjC,cAAU,aAAa,IAAI,CAAC;AAAA,EAC9B;AACA,YAAU,aAAa,EAAE,KAAK,SAAS,KAAK;AAC5C,EAAAA,OAAM,UAAU,CAAC,OAAO,cAAc;AACpC,UAAM,kBAAkB,UAAU,aAAa;AAC/C,UAAM,QAAQ,gBAAgB,UAAU,qBAAmB,oBAAoB,SAAS;AACxF,QAAI,CAAC,MAAO,iBAAgB,OAAO,OAAO,CAAC;AAC3C,oBAAgB,KAAK,KAAK;AAAA,EAC5B,CAAC;AACD,kBAAgB,MAAM;AACpB,UAAM,kBAAkB,UAAU,aAAa;AAC/C,UAAM,QAAQ,gBAAgB,UAAU,qBAAmB,oBAAoB,SAAS,KAAK;AAC7F,QAAI,CAAC,MAAO,iBAAgB,OAAO,OAAO,CAAC;AAAA,EAC7C,CAAC;AACH;AAEO,SAAS,8BAA8B,eAA+C,eAAuB,YAA4C;AAC9J,QAAM,YAAY,OAA6C,eAAe,IAAI;AAClF,MAAI,cAAc,KAAM;AACxB,MAAI,EAAE,iBAAiB,YAAY;AACjC,cAAU,aAAa,IAAI,CAAC;AAAA,EAC9B;AACA,EAAAD,WAAU,MAAM;AACd,UAAM,KAAK,WAAW;AACtB,QAAI,CAAC,GAAI;AACT,cAAU,aAAa,EAAE,KAAK,EAAE;AAAA,EAClC,CAAC;AACD,kBAAgB,MAAM;AACpB,UAAM,kBAAkB,UAAU,aAAa;AAC/C,UAAM,UAAU,WAAW;AAC3B,UAAM,QAAQ,gBAAgB,UAAU,uBAAqB,sBAAsB,OAAO;AAC1F,QAAI,CAAC,MAAO,iBAAgB,OAAO,OAAO,CAAC;AAAA,EAC7C,CAAC;AACH;;;ACtEA,SAAS,UAAAE,SAAQ,eAAe;AA0DzB,SAAS,WAA8C,aAAqB,IAAO;AAGxF,QAAM,EAAE,YAAY,WAAW,SAAS,IAAI,cAAuB,WAAW;AAE9E,WAAS,cAAc,MAAqB;AAC1C,UAAM,UAAmB,GAAG,GAAG,IAAI;AACnC,WAAO,WAAW,OAAO;AAAA,EAC3B;AAEA,SAAO;AAAA;AAAA,IAEL;AAAA;AAAA,IAEA;AAAA,EACF;AACF;AAGA,SAAS,cAAiB,aAAqB;AAC7C,QAAM,YAA6B,OAAO,WAAW;AAErD,WAAS,WAAW,SAAY;AAC9B,YAAQ,WAAW,OAAO;AAE1B,WAAO;AAAA,EACT;AAEA,WAAS,YAAY;AACnB,WAAOA,QAAO,SAAS;AAAA,EACzB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AC/FA,SAAS,YAAAC,WAAU,gBAAgB,OAAAC,YAAW;AAC9C,SAAS,gBAAgB;AAOlB,SAAS,aAAa,SAAiB;AAC5C,QAAM,iBAAiB;AAEvB,QAAM,MAAMA,KAAI,CAAC;AAEjB,QAAM,QAAQD,UAAS,MAAM,KAAK,KAAK,IAAI,QAAQ,cAAc,CAAC;AAElE,QAAM,aAAaA,UAAS,MAAM,IAAI,QAAQ,CAAC;AAE/C,QAAM,EAAE,OAAO,OAAO,IAAI;AAAA,IACxB,MAAM;AACJ,UAAI,IAAI,QAAQ,GAAG;AACjB,YAAI,SAAS;AAAA,MACf,OAAO;AACL,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,EAAE,WAAW,MAAM;AAAA,EACrB;AAEA,WAAS,MAAM,gBAAwB,SAAS;AAC9C,QAAI,QAAQ,iBAAiB;AAC7B,WAAO;AAAA,EACT;AAEA,WAAS,OAAO;AACd,QAAI,QAAQ;AACZ,UAAM;AAAA,EACR;AAEA,iBAAe,MAAM;AACnB,UAAM;AAAA,EACR,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AChDA,SAAmB,OAAAE,MAAK,SAAAC,cAAa;AAG9B,SAAS,gBAAgB,UAAoB,OAAe,gBAA4C;AAC7G,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,aAAaD,KAAI,SAAS,KAAK;AACrC,MAAI,UAAyB;AAC7B,EAAAC,OAAM,UAAU,WAAS;AACvB,QAAI,YAAY,KAAM,QAAO,aAAa,OAAO;AACjD,QAAI,UAAU,MAAM;AAClB,UAAI,kBAAkB,CAAC,eAAe,OAAO;AAC3C,mBAAW,QAAQ;AAAA,MACrB,OAAO;AACL,kBAAU,OAAO,WAAW,MAAM;AAChC,qBAAW,QAAQ;AAAA,QACrB,GAAG,KAAK;AAAA,MACV;AAAA,IACF,OAAO;AACL,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,CAAC;AACD,SAAO;AACT;;;ACtBA,SAAS,eAAe,mBAAAC,kBAA2B,OAAAC,YAAW;AAE9D,IAAM,iBAAiBA,KAAI,KAAK;AAChC,SAAS,0BAAgC;AACvC,iBAAe,QAAQ;AACzB;AACA,SAAS,wBAA8B;AACrC,iBAAe,QAAQ;AACzB;AACA,IAAI,eAAe;AAGZ,SAAS,iBAA+B;AAC7C,MAAI,YAAY,QAAQ;AACtB,kBAAc,MAAM;AAClB,UAAI,CAAC,cAAc;AACjB,eAAO,iBAAiB,oBAAoB,uBAAuB;AACnE,eAAO,iBAAiB,kBAAkB,qBAAqB;AAAA,MACjE;AACA;AAAA,IACF,CAAC;AACD,IAAAD,iBAAgB,MAAM;AACpB,UAAI,gBAAgB,GAAG;AACrB,eAAO,oBAAoB,oBAAoB,uBAAuB;AACtE,eAAO,oBAAoB,kBAAkB,qBAAqB;AAClE,uBAAe;AAAA,MACjB,OAAO;AACL;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC/BA,SAAS,YAAAE,WAAU,aAAAC,YAAW,eAAAC,cAAa,OAAAC,YAAW;AACtD,SAAS,WAAW,iBAAAC,sBAAqB;AAEzC,SAAS,6BAA6B;;;ACH/B,IAAM,qCAAqC;AAE3C,IAAM,oCAAoC;AAE1C,IAAM,oCAAoC;AAE1C,IAAM,oCAAoC;;;ADA1C,SAAS,sBAAsB,aAAa,GAAG;AACpD,MAAI,iBAAwC;AAC5C,QAAM,iBAAiBC,KAA2B,IAAI;AACtD,QAAM,iBAAiBA,KAA2B,IAAI;AACtD,QAAM,gBAAgB,UAAU,kCAAkC;AAClE,QAAM,eAAe,UAAU,iCAAiC;AAEhE,QAAM,eAAeC,UAAS,MAAqB;AAdrD;AAeI,UAAM,EAAE,QAAQ,MAAM,KAAK,MAAM,KAAI,oBAAe,UAAf,YAAwB,CAAC;AAC9D,WAAO;AAAA,MACL,QAAQ,GAAG,MAAM;AAAA,MACjB,MAAM,GAAG,IAAI;AAAA,MACb,UAAU;AAAA,MACV,KAAK,GAAG,GAAG;AAAA,MACX,OAAO,GAAG,KAAK;AAAA,MACf,QAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,QAAM,sBAAsBC,eAAc,CAAC,aAAoC;AAC7E,mBAAe,QAAQ,sBAAsB,eAAe,KAAK;AACjE,kBAAc,QAAQ,GAAG,eAAe,MAAM,SAAS,UAAU;AACjE,iBAAa,QAAQ,GAAG,eAAe,MAAM,KAAK;AAAA,EACpD,GAAG,EAAE;AAEL,EAAAC,WAAU,MAAM;AACd,QAAI,eAAe,SAAS,CAAC,gBAAgB;AAC3C,uBAAiB,IAAI,eAAe,mBAAmB;AACvD,qBAAe,QAAQ,eAAe,KAAK;AAAA,IAC7C;AAAA,EACF,CAAC;AAED,EAAAC,aAAY,MAAM;AAChB,qDAAgB;AAChB,qBAAiB;AAAA,EACnB,CAAC;AAED,SAAO,EAAE,gBAAgB,cAAc,eAAe;AACxD;AAEO,SAAS,uBAAuB;AACrC,QAAM,eAAe,UAAU,iCAAiC;AAEhE,SAAO;AAAA,IACL,uBAAuB,MAAM;AAC3B,aAAO,OAAO,SAAS,GAAG,aAAa,KAAK,IAAI,EAAE;AAAA,IACpD;AAAA,IACA,uBAAuB,CAAC,WAAmB;AACzC,mBAAa,QAAQ,GAAG,MAAM;AAAA,IAChC;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB;AACrC,QAAM,eAAe,UAAU,iCAAiC;AAEhE,SAAO;AAAA,IACL,uBAAuB,MAAM;AAC3B,aAAO,OAAO,SAAS,GAAG,aAAa,KAAK,IAAI,EAAE;AAAA,IACpD;AAAA,IACA,uBAAuB,CAAC,WAAmB;AACzC,mBAAa,QAAQ,GAAG,MAAM;AAAA,IAChC;AAAA,EACF;AACF;;;AEhEO,SAAS,WAAW,YAAY,OAAO;AAC5C,QAAM,EAAE,MAAM,SAAS,SAAS,cAAc,UAAU,WAAW,IAAI,WAAW,SAAS;AAE3F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACfA,SAAS,YAAAC,WAAU,OAAAC,MAAK,SAAAC,cAAa;AAErC,SAAS,WAAoB,MAAW,QAAgB,UAAuB;AAC7E,QAAM,UAAU,SAAS,KAAK,OAAO,QAAQ;AAC7C,QAAM,MAAM,SAAS,OAAO,QAAQ,KAAK,KAAK,SAAS,KAAK,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,MAAM,QAAQ,SAAS,OAAO,QAAQ,CAAC;AACrI,SAAO;AACT;AAEO,SAAS,aAAa,MAAa,UAAkB;AAC1D,QAAM,cAAcD,KAAI,CAAC;AACzB,QAAM,cAAcA,KAAI,QAAQ;AAChC,QAAM,UAAUA,KAAI,IAAI;AAExB,QAAM,oBAAoBD,UAAS,MAAM;AACvC,WAAO,WAAWE,OAAM,OAAO,GAAGA,OAAM,WAAW,GAAGA,OAAM,WAAW,CAAC;AAAA,EAC1E,CAAC;AAED,QAAM,WAAWF,UAAS,MAAM;AAC9B,WAAOE,OAAM,OAAO,EAAE;AAAA,EACxB,CAAC;AAED,WAAS,eAAe,MAAc;AACpC,gBAAY,QAAQ;AAAA,EACtB;AAEA,WAAS,YAAY,MAAc;AACjC,gBAAY,QAAQ;AAAA,EACtB;AAEA,WAAS,cAAc,MAAiD;AACtE,mBAAe,KAAK,WAAW;AAC/B,gBAAY,KAAK,QAAQ;AAAA,EAC3B;AAEA,WAAS,cAAc;AACrB,WAAO,WAAWA,OAAM,OAAO,GAAGA,OAAM,WAAW,GAAGA,OAAM,WAAW,CAAC;AAAA,EAC1E;AAEA,SAAO,EAAE,gBAAgB,UAAU,aAAa,mBAAmB,eAAe,YAAY;AAChG;;;ACvCA,SAAyC,mBAAAC,kBAAiB,aAAAC,YAAW,OAAAC,OAAK,SAAAC,cAAa;AAEvF,IAAI,YAAY;AAChB,IAAI,sBAA8B;AAClC,IAAI,mBAA2B;AAC/B,IAAI,oBAA4B;AAChC,IAAI,oBAA4B;AACzB,IAAM,qCAAqCD,MAAI,KAAK;AAEpD,SAAS,kBAAkB,SAA6B;AAE7D,MAAI,OAAO,aAAa,YAAa;AACrC,QAAM,KAAK,SAAS;AACpB,MAAI;AACJ,MAAI,YAAY;AAChB,QAAM,SAAS,MAAY;AACzB,OAAG,MAAM,cAAc;AACvB,OAAG,MAAM,WAAW;AACpB,OAAG,MAAM,YAAY;AACrB,OAAG,MAAM,YAAY;AACrB,uCAAmC,QAAQ;AAAA,EAC7C;AACA,EAAAD,WAAU,MAAM;AACd,sBAAkBE;AAAA,MAChB;AAAA,MACA,WAAS;AACP,YAAI,OAAO;AACT,cAAI,CAAC,WAAW;AACd,kBAAM,iBAAiB,OAAO,aAAa,GAAG;AAC9C,gBAAI,iBAAiB,GAAG;AACtB,oCAAsB,GAAG,MAAM;AAC/B,iBAAG,MAAM,cAAc,GAAG,cAAc;AACxC,iDAAmC,QAAQ,GAAG,cAAc;AAAA,YAC9D;AACA,+BAAmB,GAAG,MAAM;AAC5B,gCAAoB,GAAG,MAAM;AAC7B,gCAAoB,GAAG,MAAM;AAC7B,eAAG,MAAM,WAAW;AACpB,eAAG,MAAM,YAAY;AACrB,eAAG,MAAM,YAAY;AAAA,UACvB;AACA,sBAAY;AACZ;AAAA,QACF,OAAO;AACL;AACA,cAAI,CAAC,WAAW;AACd,mBAAO;AAAA,UACT;AACA,sBAAY;AAAA,QACd;AAAA,MACF;AAAA,MACA;AAAA,QACE,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF,CAAC;AACD,EAAAH,iBAAgB,MAAM;AACpB;AACA,QAAI,WAAW;AACb;AACA,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,MACT;AACA,kBAAY;AAAA,IACd;AAAA,EACF,CAAC;AACH;;;ACjEA,SAAS,YAAAI,WAAU,OAAAC,OAAK,SAAAC,cAAa;AAYrC,SAAS,QAAW,iBAAkG;AACpH,QAAM,mBAAmBF,UAAS,eAAsB;AAGxD,QAAM,WAAWC,MAAI,iBAAiB,KAAK;AAC3C,EAAAC,OAAM,kBAAkB,WAAS;AAC/B,aAAS,QAAQ;AAAA,EACnB,CAAC;AACD,MAAI,OAAO,oBAAoB,YAAY;AACzC,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,WAAW;AAAA,IACX,IAAI,QAAQ;AACV,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,IAAI,MAAM,GAAM;AAEd;AAAE,MAAC,gBAA2C,IAAI,CAAC;AAAA,IACrD;AAAA,EACF;AACF;;;ACjCA,SAAS,YAAAC,WAAU,SAAAC,cAAa;AAEzB,SAAS,eAAkB,oBAAwC,sBAA8C;AACtH,EAAAA,OAAM,oBAAoB,WAAS;AACjC,QAAI,UAAU,QAAW;AACvB,2BAAqB,QAAQ;AAAA,IAC/B;AAAA,EACF,CAAC;AACD,SAAOD,UAAS,MAAM;AACpB,QAAI,mBAAmB,UAAU,QAAW;AAC1C,aAAO,qBAAqB;AAAA,IAC9B;AACA,WAAO,mBAAmB;AAAA,EAC5B,CAAC;AACH;;;ACfA,SAAS,aAAAE,YAAW,eAAAC,cAAa,OAAAC,aAAW;AAMrC,SAAS,UAAU,MAAqB;AAC7C,QAAM,YAAYA,MAAI,KAAK;AAC3B,QAAM,QAAQA,MAAI,KAAK;AACvB,QAAM,UAAUA,MAAI,KAAK;AACzB,MAAI;AAEJ,QAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/C,IAAAF,WAAU,MAAM;AACd,eAAS,SAAS,cAAc,QAAQ;AACxC,aAAO,OAAO;AACd,aAAO,SAAS,MAAM;AACpB,kBAAU,QAAQ;AAClB,gBAAQ,QAAQ;AAChB,cAAM,QAAQ;AACd,gBAAQ,EAAE;AAAA,MACZ;AAEA,aAAO,UAAU,SAAO;AACtB,kBAAU,QAAQ;AAClB,gBAAQ,QAAQ;AAChB,cAAM,QAAQ;AACd,eAAO,GAAG;AAAA,MACZ;AAEA,aAAO,MAAM,KAAK;AAClB,eAAS,KAAK,YAAY,MAAM;AAAA,IAClC,CAAC;AAAA,EACH,CAAC;AAED,EAAAC,aAAY,MAAM;AAChB,cAAU,OAAO,OAAO;AAAA,EAC1B,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,MAAM;AAAA,EACnB;AACF;;;AC3CA,SAAS,aAAAE,YAAW,eAAAC,cAAa,OAAAC,OAAK,SAAAC,cAAa;AACnD,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,UAAU,gBAAgB;AAE5B,SAAS,UACd,OACA,SAKA;AACA,QAAM,OAAOF,MAAI,CAAC;AAClB,QAAM,OAAOA,MAAI,CAAC;AAClB,MAAI,UAAU,MAAM;AAClB,QAAI,SAAS,MAAM,KAAK,GAAG;AACzB,WAAK,QAAQ,MAAM,MAAM;AACzB,WAAK,QAAQ,MAAM,MAAM;AAAA,IAC3B,WAAW,MAAM,OAAO;AACtB,WAAK,QAAS,MAAM,MAAkB;AACtC,WAAK,QAAS,MAAM,MAAkB;AAAA,IACxC;AAAA,EACF;AAEA,MAAI,SAAS,OAAO,GAAG;AACrB,QAAI,OAAO;AACX,QAAI,WAAW,QAAQ,QAAQ,QAAQ,OAAO,GAAG;AAC/C,aAAO,QAAQ;AACf,cAAQ,eAAe,SAAS,MAAM;AAAA,IACxC;AAEA,cAAUE,eAAc,SAAS,IAAI;AAAA,EACvC;AAEA,MAAI;AACJ,EAAAJ,WAAU,MAAM;AACd,gBAAYG;AAAA,MACV;AAAA,MACA,CAAC,IAAI,QAAQ,cAAc;AACzB,YAAI,IAAI;AACN,aAAG,iBAAiB,UAAU,OAAO;AAAA,QACvC,WAAW,QAAQ;AACjB,iBAAO,oBAAoB,UAAU,OAAO;AAAA,QAC9C;AACA,kBAAU,MAAM;AACd,eAAK,QAAQ;AACb,eAAK,QAAQ;AACb,gBAAM,GAAG,oBAAoB,UAAU,OAAO;AAAA,QAChD,CAAC;AAAA,MACH;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACpB;AAAA,EACF,CAAC;AAED,EAAAF,aAAY,MAAM;AAChB,UAAM,SAAS,MAAM,MAAM,oBAAoB,UAAU,OAAO;AAAA,EAClE,CAAC;AAED,WAAS,OAAO;AACd,iBAAa,UAAU;AAAA,EACzB;AAEA,SAAO,EAAE,MAAM,MAAM,KAAK;AAC5B;;;ACjEA,SAAS,YAAAI,WAAU,OAAAC,OAAK,YAAY,kBAAkB;AA4F/C,SAAS,UAAa,cAAiB,SAAoC;AAChF,QAAM,EAAE,OAAO,IAAI,WAAW,CAAC;AAE/B,QAAM,QAAQ,SAAUA,MAAI,YAAY,IAAe,WAAW,YAAY;AAE9E,SAAO,aAAa,KAAK;AAC3B;AAIO,SAAS,YAAe,iBAAiE,cAAgC;AAC9H,QAAM,WAAW,OAAO,oBAAoB;AAE5C,QAAM,gBAAgBD,UAAS,iBAAwB,YAAY;AAEnE,MAAI,UAAU;AACZ,WAAO,MAAM,cAAc;AAAA,EAC7B;AAEA,SAAO,aAAa,aAAa;AACnC;AAEA,SAAS,aAAgB,OAA0D;AACjF,QAAM,SAAS,MAAM,MAAM;AAE3B,SAAO,MAAM,CAAC,UAAa;AACzB,UAAM,QAAQ;AAAA,EAChB;AAEA,SAAO,SAAS,CAAC,YAAwB;AACvC,UAAM,QAAQ,QAAQ,MAAM,KAAK;AAAA,EACnC;AAEA,SAAO,SAAS,CAAC,YAAwB;AACvC,YAAQ,MAAM,KAAK;AACnB,eAAW,KAAK;AAAA,EAClB;AAEA,SAAO,SAAS,MAAM;AAEtB,SAAO;AACT;;;ACrIA,SAAS,SAAS;AAqBX,SAAS,iBAAiB,SAAoB;AAMnD,QAAM,eAAe,CAAC,WAAuB;AAC3C,UAAM,EAAE,OAAO,UAAU,MAAM,UAAU,IAAI;AAE7C,UAAM,QAAmB,CAAC;AAE1B,QAAI,OAAO;AACT,YAAM,QAAQ;AAAA,IAChB;AACA,QAAI,UAAU;AACZ,YAAM,WAAW,GAAG,QAAQ;AAAA,IAC9B;AAEA,QAAI,CAAC,QAAQ,CAAC,WAAW;AACvB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,MAAM,CAAC;AAAA,EACpD;AAEA,SAAO;AAAA,IACL;AAAA,EACF;AACF;;;ACjDA,SAAS,YAAAE,WAAU,UAAU,OAAAC,aAAW;AAExC,SAAS,iBAAiB;AA4DnB,SAAS,aAAoC,QAA8B;AAChF,QAAM,EAAE,SAAS,cAAc,WAAW,IAAI,WAAW;AACzD,QAAM,EAAE,MAAM,OAAO,SAAS,SAAS,IAAI,WAAW;AAEtD,QAAM,EAAE,OAAO,WAAW,aAAa,YAAY,MAAM,iBAAiB,WAAW,IAAI;AAEzF,QAAM,eAA8C,SAAS,UAAU,EAAE,GAAG,UAAU,CAAC,CAAC;AAExF,QAAM,aAAaC,MAAI,OAAO,QAAQ,CAAC;AAEvC,QAAM,OAAqCA,MAAI,CAAC,CAAC;AAEjD,QAAM,eAAwCA,MAAI,gBAAgB,OAAO,QAAQ,CAAC,CAAC;AAEnF,QAAM,UAAUC,UAAS,MAAM,WAAW,WAAW,OAAO,aAAa,KAAK,CAAC;AAE/E,WAAS,gBAAgB;AACvB,eAAW,QAAQ,OAAO,QAAQ;AAElC,UAAM,WAAW,IAAI,IAAI,aAAa,MAAM,IAAI,SAAO,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC;AAE9E,UAAM,gBAAgB,gBAAgB,WAAW,KAAK;AAEtD,iBAAa,QAAQ,cAAc,IAAI,SAAI;AArF/C;AAqFmD;AAAA,QAC7C,GAAG;AAAA,QACH,UAAS,cAAS,IAAI,IAAI,GAAG,MAApB,YAAyB,IAAI;AAAA,MACxC;AAAA,KAAE;AAAA,EACJ;AAEA,iBAAe,UAAU;AA3F3B;AA4FI,iBAAa;AAEb,UAAM,kBAAkB,mBAAmB,YAAY;AAEvD,UAAM,WAAW,MAAM,MAAM,eAAe;AAE5C,UAAM,cAAc,YAAY,QAAkC;AAElE,SAAK,QAAQ,YAAY;AAEzB,aAAS,YAAY,KAAK,WAAW,CAAC;AAEtC,YAAM,YAAO,cAAP,gCAAmB;AAEzB,eAAW;AAAA,EACb;AAEA,WAAS,mBAAmB,QAAiC;AAC3D,UAAM,kBAA2C,CAAC;AAElD,WAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,UAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,wBAAgB,GAAG,IAAI;AAAA,MACzB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAOA,WAAS,mBAAmB,QAAmC;AAC7D,WAAO,OAAO,cAAc,MAAM;AAAA,EACpC;AAGA,WAAS,oBAAoB;AAC3B,WAAO,OAAO,cAAc,UAAU,SAAS,CAAC;AAAA,EAClD;AAEA,MAAI,WAAW;AACb,YAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["ref","unref","SizeEnum","ScreenEnum","ref","unref","ref","ref","onMounted","watch","inject","computed","ref","ref","watch","onBeforeUnmount","ref","computed","onMounted","onUnmounted","ref","useDebounceFn","ref","computed","useDebounceFn","onMounted","onUnmounted","computed","ref","unref","onBeforeUnmount","onMounted","ref","watch","computed","ref","watch","computed","watch","onMounted","onUnmounted","ref","onMounted","onUnmounted","ref","watch","useThrottleFn","computed","ref","computed","ref","ref","computed"]}
|
|
1
|
+
{"version":3,"sources":["../src/use-boolean.ts","../src/use-breakpoint.ts","../src/enum/breakpointEnum.ts","../src/use-event-listener.ts","../src/use-browser-location.ts","../src/use-collection.ts","../src/use-context.ts","../src/use-context-composable.ts","../src/use-count-down.ts","../src/use-deferred-true.ts","../src/use-is-composing.ts","../src/use-layout-style.ts","../src/const/index.ts","../src/use-loading.ts","../src/use-local-page.ts","../src/use-lock-html-scroll.ts","../src/use-memo.ts","../src/use-merged-state.ts","../src/use-script.ts","../src/use-scroll.ts","../src/use-signal.ts","../src/use-svg-icon-render.ts","../src/use-table.ts"],"sourcesContent":["import { ref } from 'vue'\n\n/**\n * Boolean\n *\n * @param initValue Init value\n */\nexport function useBoolean(initValue = false) {\n const bool = ref(initValue)\n\n function setBool(value: boolean) {\n bool.value = value\n }\n function setTrue() {\n setBool(true)\n }\n function setFalse() {\n setBool(false)\n }\n function toggle() {\n setBool(!bool.value)\n }\n\n return {\n bool,\n setBool,\n setTrue,\n setFalse,\n toggle\n }\n}\n","import type { ComputedRef } from 'vue'\nimport { computed, ref, unref } from 'vue'\nimport { ScreenEnum, screenMap, SizeEnum } from './enum/breakpointEnum'\nimport { useEventListener } from './use-event-listener'\n\nlet globalScreenRef: ComputedRef<SizeEnum | undefined>\nlet globalWidthRef: ComputedRef<number>\nlet globalRealWidthRef: ComputedRef<number>\n\nexport interface CreateCallbackParams {\n screen: ComputedRef<SizeEnum | undefined>\n width: ComputedRef<number>\n realWidth: ComputedRef<number>\n screenEnum: typeof ScreenEnum\n screenMap: Map<SizeEnum, number>\n sizeEnum: typeof SizeEnum\n}\n\nexport function useBreakpoint() {\n return {\n screenRef: computed(() => unref(globalScreenRef)),\n widthRef: globalWidthRef,\n screenEnum: ScreenEnum,\n realWidthRef: globalRealWidthRef\n }\n}\n\n// Just call it once\nexport function createBreakpointListen(fn?: (opt: CreateCallbackParams) => void) {\n const screenRef = ref<SizeEnum>(SizeEnum.XL)\n const realWidthRef = ref(window.innerWidth)\n\n function getWindowWidth() {\n const width = document.body.clientWidth\n const xs = screenMap.get(SizeEnum.XS)!\n const sm = screenMap.get(SizeEnum.SM)!\n const md = screenMap.get(SizeEnum.MD)!\n const lg = screenMap.get(SizeEnum.LG)!\n const xl = screenMap.get(SizeEnum.XL)!\n if (width < xs) {\n screenRef.value = SizeEnum.XS\n } else if (width < sm) {\n screenRef.value = SizeEnum.SM\n } else if (width < md) {\n screenRef.value = SizeEnum.MD\n } else if (width < lg) {\n screenRef.value = SizeEnum.LG\n } else if (width < xl) {\n screenRef.value = SizeEnum.XL\n } else {\n screenRef.value = SizeEnum.XXL\n }\n realWidthRef.value = width\n }\n\n useEventListener({\n el: window,\n name: 'resize',\n\n listener: () => {\n getWindowWidth()\n resizeFn()\n }\n // Wait: 100,\n })\n\n getWindowWidth()\n globalScreenRef = computed(() => unref(screenRef))\n globalWidthRef = computed((): number => screenMap.get(unref(screenRef)!)!)\n globalRealWidthRef = computed((): number => unref(realWidthRef))\n\n function resizeFn() {\n fn?.({\n screen: globalScreenRef,\n width: globalWidthRef,\n realWidth: globalRealWidthRef,\n screenEnum: ScreenEnum,\n screenMap,\n sizeEnum: SizeEnum\n })\n }\n\n resizeFn()\n return {\n screenRef: globalScreenRef,\n screenEnum: ScreenEnum,\n widthRef: globalWidthRef,\n realWidthRef: globalRealWidthRef\n }\n}\n","export enum SizeEnum {\n XS = 'XS',\n SM = 'SM',\n MD = 'MD',\n LG = 'LG',\n XL = 'XL',\n XXL = 'XXL'\n}\n\nexport enum ScreenEnum {\n XS = 320,\n SM = 640,\n MD = 768,\n LG = 960,\n XL = 1280,\n XXL = 1536\n}\n\nconst screenMap = new Map<SizeEnum, number>()\n\nscreenMap.set(SizeEnum.XS, ScreenEnum.XS)\nscreenMap.set(SizeEnum.SM, ScreenEnum.SM)\nscreenMap.set(SizeEnum.MD, ScreenEnum.MD)\nscreenMap.set(SizeEnum.LG, ScreenEnum.LG)\nscreenMap.set(SizeEnum.XL, ScreenEnum.XL)\nscreenMap.set(SizeEnum.XXL, ScreenEnum.XXL)\n\nexport { screenMap }\n","import type { Ref } from 'vue'\nimport { ref, unref, watch } from 'vue'\nimport { useDebounceFn, useThrottleFn } from '@vueuse/core'\n\nexport type RemoveEventFn = () => void\nexport interface UseEventParams {\n el?: Element | Ref<Element | undefined> | Window | any\n name: string\n listener: EventListener\n options?: boolean | AddEventListenerOptions\n autoRemove?: boolean\n isDebounce?: boolean\n wait?: number\n}\nexport function useEventListener({ el = window, name, listener, options, autoRemove = true, isDebounce = true, wait = 80 }: UseEventParams): { removeEvent: RemoveEventFn } {\n /* eslint-disable-next-line */\n let remove: RemoveEventFn = () => { };\n const isAddRef = ref(false)\n\n if (el) {\n const element = ref(el as Element) as Ref<Element>\n\n const handler = isDebounce ? useDebounceFn(listener, wait) : useThrottleFn(listener, wait)\n const realHandler = wait ? handler : listener\n const removeEventListener = (e: Element) => {\n isAddRef.value = true\n e.removeEventListener(name, realHandler, options)\n }\n const addEventListener = (e: Element) => e.addEventListener(name, realHandler, options)\n\n const removeWatch = watch(\n element,\n (v, _ov, cleanUp) => {\n if (v) {\n !unref(isAddRef) && addEventListener(v)\n cleanUp(() => {\n autoRemove && removeEventListener(v)\n })\n }\n },\n { immediate: true }\n )\n\n remove = () => {\n removeEventListener(element.value)\n removeWatch()\n }\n }\n return { removeEvent: remove }\n}\n","import { onMounted, onUnmounted, type Ref, ref } from 'vue'\n\nexport interface WindowLocation {\n hash?: string\n host?: string\n hostname?: string\n href?: string\n origin?: string\n pathname?: string\n port?: string\n protocol?: string\n search?: string\n}\n\nconst isBrowser = typeof document !== 'undefined' && typeof window !== 'undefined'\n\nexport function useBrowserLocation(customWindow = isBrowser ? window : null): Ref<WindowLocation> {\n const getWindowLocation = (): WindowLocation => {\n const { hash, host, hostname, href, origin, pathname, port, protocol, search } = customWindow?.location || {}\n\n return {\n hash,\n host,\n hostname,\n href,\n origin,\n pathname,\n port,\n protocol,\n search\n }\n }\n\n const locationState = ref(getWindowLocation())\n\n const updateLocation = (): void => {\n locationState.value = getWindowLocation()\n }\n\n onMounted(() => {\n if (customWindow) {\n customWindow.addEventListener('popstate', updateLocation)\n customWindow.addEventListener('hashchange', updateLocation)\n }\n })\n\n onUnmounted(() => {\n if (customWindow) {\n customWindow.removeEventListener('popstate', updateLocation)\n customWindow.removeEventListener('hashchange', updateLocation)\n }\n })\n\n return locationState\n}\n","import type { InjectionKey, Ref } from 'vue'\nimport { getCurrentInstance, inject, onBeforeUnmount, onMounted, watch } from 'vue'\n\n// 函数的作用是管理 Vue 组件的实例集合。它通过注入的方式将组件实例注册到指定的集合中,并在组件卸载时进行清理。以下是该函数的主要功能说明:\nexport function useInjectionInstanceCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, registerKeyRef: Ref<string | undefined>): void {\n const injection = inject<Record<string, Record<string, any>> | null>(injectionName, null)\n if (injection === null) return\n const vm = getCurrentInstance()?.proxy\n watch(registerKeyRef, registerInstance)\n registerInstance(registerKeyRef.value)\n onBeforeUnmount(() => {\n registerInstance(undefined, registerKeyRef.value)\n })\n function registerInstance(key?: string, oldKey?: string): void {\n if (!injection) return\n const collection = injection[collectionKey]\n if (oldKey !== undefined) removeInstance(collection, oldKey)\n if (key !== undefined) addInstance(collection, key)\n }\n function removeInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n collection[key].splice(\n collection[key].findIndex(instance => instance === vm),\n 1\n )\n }\n function addInstance(collection: Record<string, any[]>, key: string): void {\n if (!collection[key]) collection[key] = []\n if (!~collection[key].findIndex(instance => instance === vm)) {\n collection[key].push(vm)\n }\n }\n}\n\nexport function useInjectionCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, valueRef: Ref<any>): void {\n const injection = inject<Record<any, any[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n injection[collectionKey].push(valueRef.value)\n watch(valueRef, (value, prevValue) => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === prevValue)\n if (~index) collectionArray.splice(index, 1)\n collectionArray.push(value)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const index = collectionArray.findIndex(collectionValue => collectionValue === valueRef.value)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n\nexport function useInjectionElementCollection(injectionName: string | InjectionKey<unknown>, collectionKey: string, getElement: () => HTMLElement | null): void {\n const injection = inject<Record<string, HTMLElement[]> | null>(injectionName, null)\n if (injection === null) return\n if (!(collectionKey in injection)) {\n injection[collectionKey] = []\n }\n onMounted(() => {\n const el = getElement()\n if (!el) return\n injection[collectionKey].push(el)\n })\n onBeforeUnmount(() => {\n const collectionArray = injection[collectionKey]\n const element = getElement()\n const index = collectionArray.findIndex(collectionElement => collectionElement === element)\n if (~index) collectionArray.splice(index, 1)\n })\n}\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\n/**\n * Use context\n *\n * @example\n * ```ts\n * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue\n *\n * // context.ts\n * import { ref } from 'vue';\n * import { useContext } from '@max/hooks';\n *\n * export const { setupStore, useStore } = useContext('demo', () => {\n * const count = ref(0);\n *\n * function increment() {\n * count.value++;\n * }\n *\n * function decrement() {\n * count.value--;\n * }\n *\n * return {\n * count,\n * increment,\n * decrement\n * };\n * })\n * ``` // A.vue\n * ```vue\n * <template>\n * <div>A</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { setupStore } from './context';\n *\n * setupStore();\n * // const { increment } = setupStore(); // also can control the store in the parent component\n * </script>\n * ``` // B.vue\n * ```vue\n * <template>\n * <div>B</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { useStore } from './context';\n *\n * const { count, increment } = useStore();\n * </script>\n * ```;\n *\n * // C.vue is same as B.vue\n *\n * @param contextName Context name\n * @param fn Context function\n */\nexport function useContext<T extends (...args: any[]) => any>(contextName: string, fn: T) {\n type Context = ReturnType<T>\n\n const { useProvide, useInject: useStore } = createContext<Context>(contextName)\n\n function setupStore(...args: Parameters<T>) {\n const context: Context = fn(...args)\n return useProvide(context)\n }\n\n return {\n /** Setup store in the parent component */\n setupStore,\n /** Use store in the child component */\n useStore\n }\n}\n\n/** Create context */\nfunction createContext<T>(contextName: string) {\n const injectKey: InjectionKey<T> = Symbol(contextName)\n\n function useProvide(context: T) {\n provide(injectKey, context)\n\n return context\n }\n\n function useInject() {\n return inject(injectKey) as T\n }\n\n return {\n useProvide,\n useInject\n }\n}\n","import { inject, provide } from 'vue'\n\n/**\n * Use context\n *\n * @example\n * ```ts\n * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue\n *\n * // context.ts\n * import { ref } from 'vue';\n * import { useComposableContext } from '@/hooks';\n *\n * export const [provideDemoContext, useDemoContext] = useComposableContext('demo', () => {\n * const count = ref(0);\n *\n * function increment() {\n * count.value++;\n * }\n *\n * function decrement() {\n * count.value--;\n * }\n *\n * return {\n * count,\n * increment,\n * decrement\n * };\n * })\n * ``` // A.vue\n * ```vue\n * <template>\n * <div>A</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { provideDemoContext } from './context';\n *\n * provideDemoContext();\n * // const { increment } = provideDemoContext(); // also can control the store in the parent component\n * </script>\n * ``` // B.vue\n * ```vue\n * <template>\n * <div>B</div>\n * </template>\n * <script setup lang=\"ts\">\n * import { useDemoContext } from './context';\n *\n * const { count, increment } = useDemoContext();\n * </script>\n * ```;\n *\n * // C.vue is same as B.vue\n *\n * @param contextName Context name\n * @param fn Context function\n */\nexport function useComposableContext<Arguments extends any[], T>(contextName: string, composable: (...args: Arguments) => T) {\n const key = Symbol(contextName)\n\n /**\n * Injects the context value.\n *\n * @param consumerName - The name of the component that is consuming the context. If provided, the component must be\n * used within the context provider.\n * @param defaultValue - The default value to return if the context is not provided.\n * @returns The context value.\n */\n const useInject = <N extends string | null | undefined = undefined>(consumerName?: N, defaultValue?: T): N extends null | undefined ? T | null : T => {\n const value = inject(key, defaultValue)\n\n if (consumerName && !value) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${contextName}\\``)\n }\n\n // @ts-expect-error - we want to return null if the value is undefined or null\n return value || null\n }\n\n const useProvide = (...args: Arguments) => {\n const value = composable(...args)\n\n provide(key, value)\n\n return value\n }\n\n return [useProvide, useInject] as const\n}\n","import { computed, onScopeDispose, ref } from 'vue'\nimport { useRafFn } from '@vueuse/core'\n\n/**\n * Count down\n *\n * @param seconds - count down seconds\n */\nexport function useCountDown(seconds: number) {\n const FPS_PER_SECOND = 60\n\n const fps = ref(0)\n\n const count = computed(() => Math.ceil(fps.value / FPS_PER_SECOND))\n\n const isCounting = computed(() => fps.value > 0)\n\n const { pause, resume } = useRafFn(\n () => {\n if (fps.value > 0) {\n fps.value -= 1\n } else {\n pause()\n }\n },\n { immediate: false }\n )\n\n function start(updateSeconds: number = seconds) {\n fps.value = FPS_PER_SECOND * updateSeconds\n resume()\n }\n\n function stop() {\n fps.value = 0\n pause()\n }\n\n onScopeDispose(() => {\n pause()\n })\n\n return {\n count,\n isCounting,\n start,\n stop\n }\n}\n","import { type Ref, ref, watch } from 'vue'\n\n// 此函数用于在指定延迟后返回一个布尔值引用,基于输入的值引用和延迟条件\nexport function useDeferredTrue(valueRef: Ref<any>, delay: number, shouldDelayRef: Ref<boolean>): Ref<boolean> {\n if (!delay) return valueRef\n const delayedRef = ref(valueRef.value)\n let timerId: number | null = null\n watch(valueRef, value => {\n if (timerId !== null) window.clearTimeout(timerId)\n if (value === true) {\n if (shouldDelayRef && !shouldDelayRef.value) {\n delayedRef.value = true\n } else {\n timerId = window.setTimeout(() => {\n delayedRef.value = true\n }, delay)\n }\n } else {\n delayedRef.value = false\n }\n })\n return delayedRef\n}\n","import { onBeforeMount, onBeforeUnmount, type Ref, ref } from 'vue'\n\nconst isComposingRef = ref(false)\nfunction compositionStartHandler(): void {\n isComposingRef.value = true\n}\nfunction compositionEndHandler(): void {\n isComposingRef.value = false\n}\nlet mountedCount = 0\n\n// 用于检测用户是否正在进行输入法的组合输入\nexport function useIsComposing(): Ref<boolean> {\n if (document && window) {\n onBeforeMount(() => {\n if (!mountedCount) {\n window.addEventListener('compositionstart', compositionStartHandler)\n window.addEventListener('compositionend', compositionEndHandler)\n }\n mountedCount++\n })\n onBeforeUnmount(() => {\n if (mountedCount <= 1) {\n window.removeEventListener('compositionstart', compositionStartHandler)\n window.removeEventListener('compositionend', compositionEndHandler)\n mountedCount = 0\n } else {\n mountedCount--\n }\n })\n }\n return isComposingRef\n}\n","import type { CSSProperties } from 'vue'\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\nimport { useCssVar, useDebounceFn } from '@vueuse/core'\nimport type { VisibleDomRect } from '@maxax/utils'\nimport { getElementVisibleRect } from '@maxax/utils'\nimport { CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT, CSS_VARIABLE_LAYOUT_CONTENT_WIDTH, CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT, CSS_VARIABLE_LAYOUT_HEADER_HEIGHT } from './const'\n\nexport function useLayoutContentStyle(diffHeight = 0) {\n let resizeObserver: null | ResizeObserver = null\n const contentElement = ref<HTMLDivElement | null>(null)\n const visibleDomRect = ref<null | VisibleDomRect>(null)\n const contentHeight = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT)\n const contentWidth = useCssVar(CSS_VARIABLE_LAYOUT_CONTENT_WIDTH)\n\n const overlayStyle = computed((): CSSProperties => {\n const { height, left, top, width } = visibleDomRect.value ?? {}\n return {\n height: `${height}px`,\n left: `${left}px`,\n position: 'fixed',\n top: `${top}px`,\n width: `${width}px`,\n zIndex: 150\n }\n })\n\n const debouncedCalcHeight = useDebounceFn((_entries: ResizeObserverEntry[]) => {\n visibleDomRect.value = getElementVisibleRect(contentElement.value)\n contentHeight.value = `${visibleDomRect.value.height - diffHeight}px`\n contentWidth.value = `${visibleDomRect.value.width}px`\n }, 16)\n\n onMounted(() => {\n if (contentElement.value && !resizeObserver) {\n resizeObserver = new ResizeObserver(debouncedCalcHeight)\n resizeObserver.observe(contentElement.value)\n }\n })\n\n onUnmounted(() => {\n resizeObserver?.disconnect()\n resizeObserver = null\n })\n\n return { contentElement, overlayStyle, visibleDomRect }\n}\n\nexport function useLayoutHeaderStyle() {\n const headerHeight = useCssVar(CSS_VARIABLE_LAYOUT_HEADER_HEIGHT)\n\n return {\n getLayoutHeaderHeight: () => {\n return Number.parseInt(`${headerHeight.value}`, 10)\n },\n setLayoutHeaderHeight: (height: number) => {\n headerHeight.value = `${height}px`\n }\n }\n}\n\nexport function useLayoutFooterStyle() {\n const footerHeight = useCssVar(CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT)\n\n return {\n getLayoutFooterHeight: () => {\n return Number.parseInt(`${footerHeight.value}`, 10)\n },\n setLayoutFooterHeight: (height: number) => {\n footerHeight.value = `${height}px`\n }\n }\n}\n","/** Layout content 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT = '--max-content-height'\n/** Layout content 组件的宽度 */\nexport const CSS_VARIABLE_LAYOUT_CONTENT_WIDTH = '--max-content-width'\n/** Layout header 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_HEADER_HEIGHT = '--max-header-height'\n/** Layout footer 组件的高度 */\nexport const CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT = '--max-footer-height'\n","import { useBoolean } from './use-boolean'\n\n/**\n * Loading\n *\n * @param initValue Init value\n */\nexport function useLoading(initValue = false) {\n const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(initValue)\n\n return {\n loading,\n startLoading,\n endLoading\n }\n}\n","import { computed, ref, unref } from 'vue'\n\nfunction pagination<T = any>(list: T[], pageNo: number, pageSize: number): T[] {\n const offset = (pageNo - 1) * Number(pageSize)\n const ret = offset + Number(pageSize) >= list.length ? list.slice(offset, list.length) : list.slice(offset, offset + Number(pageSize))\n return ret\n}\n\nexport function useLocalPage(list: any[], pageSize: number) {\n const currentPage = ref(1)\n const pageSizeRef = ref(pageSize)\n const listRef = ref(list)\n\n const getPaginationList = computed(() => {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n })\n\n const getTotal = computed(() => {\n return unref(listRef).length\n })\n\n function setCurrentPage(page: number) {\n currentPage.value = page\n }\n\n function setPageSize(size: number) {\n pageSizeRef.value = size\n }\n\n function setPagination(page: { currentPage: number; pageSize: number }) {\n setCurrentPage(page.currentPage)\n setPageSize(page.pageSize)\n }\n\n function getPageList() {\n return pagination(unref(listRef), unref(currentPage), unref(pageSizeRef))\n }\n\n return { setCurrentPage, getTotal, setPageSize, getPaginationList, setPagination, getPageList }\n}\n","import { type Ref, type WatchStopHandle, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nlet lockCount = 0\nlet originalMarginRight: string = ''\nlet originalOverflow: string = ''\nlet originalOverflowX: string = ''\nlet originalOverflowY: string = ''\nexport const lockHtmlScrollRightCompensationRef = ref('0px')\n\nexport function useLockHtmlScroll(lockRef: Ref<boolean>): void {\n // not browser\n if (typeof document === 'undefined') return\n const el = document.documentElement\n let watchStopHandle: WatchStopHandle | undefined\n let activated = false\n const unlock = (): void => {\n el.style.marginRight = originalMarginRight\n el.style.overflow = originalOverflow\n el.style.overflowX = originalOverflowX\n el.style.overflowY = originalOverflowY\n lockHtmlScrollRightCompensationRef.value = '0px'\n }\n onMounted(() => {\n watchStopHandle = watch(\n lockRef,\n value => {\n if (value) {\n if (!lockCount) {\n const scrollbarWidth = window.innerWidth - el.offsetWidth\n if (scrollbarWidth > 0) {\n originalMarginRight = el.style.marginRight\n el.style.marginRight = `${scrollbarWidth}px`\n lockHtmlScrollRightCompensationRef.value = `${scrollbarWidth}px`\n }\n originalOverflow = el.style.overflow\n originalOverflowX = el.style.overflowX\n originalOverflowY = el.style.overflowY\n el.style.overflow = 'hidden'\n el.style.overflowX = 'hidden'\n el.style.overflowY = 'hidden'\n }\n activated = true\n lockCount++\n } else {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n },\n {\n immediate: true\n }\n )\n })\n onBeforeUnmount(() => {\n watchStopHandle?.()\n if (activated) {\n lockCount--\n if (!lockCount) {\n unlock()\n }\n activated = false\n }\n })\n}\n","import type { ComputedRef, Ref, WritableComputedRef } from 'vue'\nimport { computed, ref, watch } from 'vue'\n\ntype MemoGetter<T> = () => T\ntype MemoSetter<T> = (v: T) => void\n\ninterface WritableMemoOptions<T> {\n get: MemoGetter<T>\n set: MemoSetter<T>\n}\n\nfunction useMemo<T>(getter: MemoGetter<T>): ComputedRef<T>\nfunction useMemo<T>(options: WritableMemoOptions<T>): WritableComputedRef<T>\nfunction useMemo<T>(getterOrOptions: MemoGetter<T> | WritableMemoOptions<T>): ComputedRef<T> | WritableComputedRef<T> {\n const computedValueRef = computed(getterOrOptions as any) as WritableComputedRef<T> | ComputedRef<T>\n // Maybe it's not possible to lazy evaluate the value, since we can't make\n // render phase capture the deps behind useMemo\n const valueRef = ref(computedValueRef.value) as Ref<T>\n watch(computedValueRef, value => {\n valueRef.value = value\n })\n if (typeof getterOrOptions === 'function') {\n return valueRef as ComputedRef<T>\n }\n return {\n __v_isRef: true,\n get value() {\n return valueRef.value\n },\n set value(v: T) {\n // eslint-disable-next-line prettier/prettier\n ; (getterOrOptions as WritableMemoOptions<T>).set(v)\n }\n } as unknown as WritableComputedRef<T>\n}\n\nexport { useMemo }\n","import type { ComputedRef, Ref } from 'vue'\nimport { computed, watch } from 'vue'\n\nexport function useMergedState<T>(controlledStateRef: Ref<T | undefined>, uncontrolledStateRef: Ref<T>): ComputedRef<T> {\n watch(controlledStateRef, value => {\n if (value !== undefined) {\n uncontrolledStateRef.value = value\n }\n })\n return computed(() => {\n if (controlledStateRef.value === undefined) {\n return uncontrolledStateRef.value\n }\n return controlledStateRef.value\n })\n}\n","import { onMounted, onUnmounted, ref } from 'vue'\n\ninterface ScriptOptions {\n src: string\n}\n\nexport function useScript(opts: ScriptOptions) {\n const isLoading = ref(false)\n const error = ref(false)\n const success = ref(false)\n let script: HTMLScriptElement\n\n const promise = new Promise((resolve, reject) => {\n onMounted(() => {\n script = document.createElement('script')\n script.type = 'text/javascript'\n script.onload = () => {\n isLoading.value = false\n success.value = true\n error.value = false\n resolve('')\n }\n\n script.onerror = err => {\n isLoading.value = false\n success.value = false\n error.value = true\n reject(err)\n }\n\n script.src = opts.src\n document.head.appendChild(script)\n })\n })\n\n onUnmounted(() => {\n script && script.remove()\n })\n\n return {\n isLoading,\n error,\n success,\n toPromise: () => promise\n }\n}\n","import type { Ref } from 'vue'\n\nimport { onMounted, onUnmounted, ref, watch } from 'vue'\nimport { useThrottleFn } from '@vueuse/core'\nimport { isObject, isWindow } from '@maxax/utils'\n\nexport function useScroll(\n refEl: Ref<Element | Window | null>,\n options?: {\n wait?: number\n leading?: boolean\n trailing?: boolean\n }\n) {\n const refX = ref(0)\n const refY = ref(0)\n let handler = () => {\n if (isWindow(refEl.value)) {\n refX.value = refEl.value.scrollX\n refY.value = refEl.value.scrollY\n } else if (refEl.value) {\n refX.value = (refEl.value as Element).scrollLeft\n refY.value = (refEl.value as Element).scrollTop\n }\n }\n\n if (isObject(options)) {\n let wait = 0\n if (options && options.wait && options.wait > 0) {\n wait = options.wait\n Reflect.deleteProperty(options, 'wait')\n }\n\n handler = useThrottleFn(handler, wait)\n }\n\n let stopWatch: () => void\n onMounted(() => {\n stopWatch = watch(\n refEl,\n (el, prevEl, onCleanup) => {\n if (el) {\n el.addEventListener('scroll', handler)\n } else if (prevEl) {\n prevEl.removeEventListener('scroll', handler)\n }\n onCleanup(() => {\n refX.value = 0\n refY.value = 0\n el && el.removeEventListener('scroll', handler)\n })\n },\n { immediate: true }\n )\n })\n\n onUnmounted(() => {\n refEl.value && refEl.value.removeEventListener('scroll', handler)\n })\n\n function stop() {\n stopWatch && stopWatch()\n }\n\n return { refX, refY, stop }\n}\n","/* eslint-disable no-redeclare */\nimport type { ComputedGetter, DebuggerOptions, Ref, ShallowRef, WritableComputedOptions, WritableComputedRef } from 'vue'\nimport { computed, ref, shallowRef, triggerRef } from 'vue'\n\ntype Updater<T> = (value: T) => T\ntype Mutator<T> = (value: T) => void\n\n/**\n * Signal is a reactive value that can be set, updated or mutated\n *\n * @example\n * ```ts\n * const count = useSignal(0);\n *\n * // `watchEffect`\n * watchEffect(() => {\n * console.log(count());\n * });\n *\n * // watch\n * watch(count, value => {\n * console.log(value);\n * });\n *\n * // useComputed\n * const double = useComputed(() => count() * 2);\n * const writeableDouble = useComputed({\n * get: () => count() * 2,\n * set: value => count.set(value / 2)\n * });\n * ```\n */\nexport interface Signal<T> {\n (): Readonly<T>\n /**\n * Set the value of the signal\n *\n * It recommend use `set` for primitive values\n *\n * @param value\n */\n set: (value: T) => void\n /**\n * Update the value of the signal using an updater function\n *\n * It recommend use `update` for non-primitive values, only the first level of the object will be reactive.\n *\n * @param updater\n */\n update: (updater: Updater<T>) => void\n /**\n * Mutate the value of the signal using a mutator function\n *\n * this action will call `triggerRef`, so the value will be tracked on `watchEffect`.\n *\n * It recommend use `mutate` for non-primitive values, all levels of the object will be reactive.\n *\n * @param mutator\n */\n mutate: (mutator: Mutator<T>) => void\n /**\n * Get the reference of the signal\n *\n * Sometimes it can be useful to make `v-model` work with the signal\n *\n * ```vue\n * <template>\n * <input v-model=\"model.count\" />\n * </template>;\n *\n * <script setup lang=\"ts\">\n * const state = useSignal({ count: 0 }, { useRef: true });\n *\n * const model = state.getRef();\n * </script>\n * ```\n */\n getRef: () => Readonly<ShallowRef<Readonly<T>>>\n}\n\nexport interface ReadonlySignal<T> {\n (): Readonly<T>\n}\n\nexport interface SignalOptions {\n /**\n * Whether to use `ref` to store the value\n *\n * @default false use `sharedRef` to store the value\n */\n useRef?: boolean\n}\n\nexport function useSignal<T>(initialValue: T, options?: SignalOptions): Signal<T> {\n const { useRef } = options || {}\n\n const state = useRef ? (ref(initialValue) as Ref<T>) : shallowRef(initialValue)\n\n return createSignal(state)\n}\n\nexport function useComputed<T>(getter: ComputedGetter<T>, debugOptions?: DebuggerOptions): ReadonlySignal<T>\nexport function useComputed<T>(options: WritableComputedOptions<T>, debugOptions?: DebuggerOptions): Signal<T>\nexport function useComputed<T>(getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>, debugOptions?: DebuggerOptions) {\n const isGetter = typeof getterOrOptions === 'function'\n\n const computedValue = computed(getterOrOptions as any, debugOptions)\n\n if (isGetter) {\n return () => computedValue.value as ReadonlySignal<T>\n }\n\n return createSignal(computedValue)\n}\n\nfunction createSignal<T>(state: ShallowRef<T> | WritableComputedRef<T>): Signal<T> {\n const signal = (() => state.value as Readonly<T>) as Signal<T>\n\n signal.set = (value: T) => {\n // Vue's WritableComputedRef can have a distinct setter value type; cast to bypass\n // eslint-disable-next-line prettier/prettier\n ; (state as any).value = value\n }\n\n signal.update = (updater: Updater<T>) => {\n // eslint-disable-next-line prettier/prettier\n ; (state as any).value = updater(state.value)\n }\n\n signal.mutate = (mutator: Mutator<T>) => {\n mutator(state.value)\n triggerRef(state)\n }\n\n signal.getRef = () => state as Readonly<ShallowRef<Readonly<T>>>\n\n return signal\n}\n","import { h } from 'vue'\nimport type { Component } from 'vue'\n\ninterface IconConfig {\n /** Iconify icon name */\n icon?: string\n /** Local icon name */\n localIcon?: string\n /** Icon color */\n color?: string\n /** Icon size */\n fontSize?: number\n}\n\ntype IconStyle = Partial<Pick<CSSStyleDeclaration, 'color' | 'fontSize'>>\n\n/**\n * Svg icon render hook\n *\n * @param SvgIcon Svg icon component\n */\nexport function useSvgIconRender(SvgIcon: Component) {\n /**\n * Svg icon VNode\n *\n * @param config\n */\n const SvgIconVNode = (config: IconConfig) => {\n const { color, fontSize, icon, localIcon } = config\n\n const style: IconStyle = {}\n\n if (color) {\n style.color = color\n }\n if (fontSize) {\n style.fontSize = `${fontSize}px`\n }\n\n if (!icon && !localIcon) {\n return undefined\n }\n\n return () => h(SvgIcon, { icon, localIcon, style })\n }\n\n return {\n SvgIconVNode\n }\n}\n","import { computed, reactive, ref } from 'vue'\nimport type { Ref } from 'vue'\nimport { jsonClone } from '@maxax/utils'\nimport { useBoolean } from './use-boolean'\nimport { useLoading } from './use-loading'\n\nexport type MaybePromise<T> = T | Promise<T>\n\nexport type ApiFn = (args: any) => Promise<unknown>\n\nexport interface TableColumnCheck {\n key: string\n title: string\n checked: boolean\n}\n\nexport type TableDataWithIndex<T> = T & { index: number }\n\nexport interface TransformedData<T> {\n data: TableDataWithIndex<T>[]\n pageNum: number\n pageSize: number\n total: number\n}\n\nexport type Transformer<T, Response> = (response: Response) => TransformedData<T>\n\nexport interface TableConfig<A extends ApiFn, T, C> {\n /** Api function to get table data */\n apiFn: A\n /** Api params */\n apiParams?: Parameters<A>[0]\n /** Transform api response to table data */\n transformer: Transformer<T, Awaited<ReturnType<A>>>\n /** Columns factory */\n columns: () => C[]\n /**\n * Get column checks\n *\n * @param columns\n */\n getColumnChecks: (columns: C[]) => TableColumnCheck[]\n /**\n * Get columns\n *\n * @param columns\n */\n getColumns: (columns: C[], checks: TableColumnCheck[]) => C[]\n /**\n * Callback when response fetched\n *\n * @param transformed transformed data\n */\n onFetched?: (transformed: TransformedData<T>) => MaybePromise<void>\n /**\n * Whether to get data immediately\n *\n * @default true\n */\n immediate?: boolean\n}\n\nexport function useHookTable<A extends ApiFn, T, C>(config: TableConfig<A, T, C>) {\n const { loading, startLoading, endLoading } = useLoading()\n const { bool: empty, setBool: setEmpty } = useBoolean()\n\n const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config\n\n const searchParams: NonNullable<Parameters<A>[0]> = reactive(jsonClone({ ...apiParams }))\n\n const allColumns = ref(config.columns()) as Ref<C[]>\n\n const data: Ref<TableDataWithIndex<T>[]> = ref([])\n\n const columnChecks: Ref<TableColumnCheck[]> = ref(getColumnChecks(config.columns()))\n\n const columns = computed(() => getColumns(allColumns.value, columnChecks.value))\n\n function reloadColumns() {\n allColumns.value = config.columns()\n\n const checkMap = new Map(columnChecks.value.map(col => [col.key, col.checked]))\n\n const defaultChecks = getColumnChecks(allColumns.value)\n\n columnChecks.value = defaultChecks.map(col => ({\n ...col,\n checked: checkMap.get(col.key) ?? col.checked\n }))\n }\n\n async function getData() {\n startLoading()\n\n const formattedParams = formatSearchParams(searchParams)\n\n const response = await apiFn(formattedParams)\n\n const transformed = transformer(response as Awaited<ReturnType<A>>)\n\n data.value = transformed.data\n\n setEmpty(transformed.data.length === 0)\n\n await config.onFetched?.(transformed)\n\n endLoading()\n }\n\n function formatSearchParams(params: Record<string, unknown>) {\n const formattedParams: Record<string, unknown> = {}\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n formattedParams[key] = value\n }\n })\n\n return formattedParams\n }\n\n /**\n * Update search params\n *\n * @param params\n */\n function updateSearchParams(params: Partial<Parameters<A>[0]>) {\n Object.assign(searchParams, params)\n }\n\n /** Reset search params */\n function resetSearchParams() {\n Object.assign(searchParams, jsonClone(apiParams))\n }\n\n if (immediate) {\n getData()\n }\n\n return {\n loading,\n empty,\n data,\n columns,\n columnChecks,\n reloadColumns,\n getData,\n searchParams,\n updateSearchParams,\n resetSearchParams\n }\n}\n"],"mappings":"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","names":["ref","unref","SizeEnum","ScreenEnum","ref","unref","ref","ref","onMounted","watch","inject","inject","provide","computed","ref","ref","watch","onBeforeUnmount","ref","computed","onMounted","onUnmounted","ref","useDebounceFn","ref","computed","useDebounceFn","onMounted","onUnmounted","computed","ref","unref","onBeforeUnmount","onMounted","ref","watch","computed","ref","watch","computed","watch","onMounted","onUnmounted","ref","onMounted","onUnmounted","ref","watch","useThrottleFn","computed","ref","computed","ref","ref","computed"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maxax/hooks",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Composable Vue hooks shared across Maxax projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -30,14 +30,15 @@
|
|
|
30
30
|
"vue": "^3.3.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@vueuse/core": "^
|
|
34
|
-
"axios": "^1.
|
|
35
|
-
"vue": "^3.
|
|
33
|
+
"@vueuse/core": "^14.1.0",
|
|
34
|
+
"axios": "^1.13.2",
|
|
35
|
+
"vue": "^3.5.25"
|
|
36
36
|
},
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
|
+
"bump-version": "maxax bump-version",
|
|
41
42
|
"dev": "tsup --watch",
|
|
42
43
|
"build": "tsup",
|
|
43
44
|
"clean": "rm -rf dist"
|