@maxax/hooks 1.0.0 → 1.0.2

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 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-count-down.ts
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, import_vue7.ref)(0);
356
- const count = (0, import_vue7.computed)(() => Math.ceil(fps.value / FPS_PER_SECOND));
357
- const isCounting = (0, import_vue7.computed)(() => fps.value > 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, import_vue7.onScopeDispose)(() => {
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 import_vue8 = require("vue");
408
+ var import_vue9 = require("vue");
389
409
  function useDeferredTrue(valueRef, delay, shouldDelayRef) {
390
410
  if (!delay) return valueRef;
391
- const delayedRef = (0, import_vue8.ref)(valueRef.value);
411
+ const delayedRef = (0, import_vue9.ref)(valueRef.value);
392
412
  let timerId = null;
393
- (0, import_vue8.watch)(valueRef, (value) => {
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 import_vue9 = require("vue");
412
- var isComposingRef = (0, import_vue9.ref)(false);
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, import_vue9.onBeforeMount)(() => {
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, import_vue9.onBeforeUnmount)(() => {
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 import_vue10 = require("vue");
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, import_vue10.ref)(null);
457
- const visibleDomRect = (0, import_vue10.ref)(null);
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, import_vue10.computed)(() => {
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, import_vue10.onMounted)(() => {
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, import_vue10.onUnmounted)(() => {
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 import_vue11 = require("vue");
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, import_vue11.ref)(1);
531
- const pageSizeRef = (0, import_vue11.ref)(pageSize);
532
- const listRef = (0, import_vue11.ref)(list);
533
- const getPaginationList = (0, import_vue11.computed)(() => {
534
- return pagination((0, import_vue11.unref)(listRef), (0, import_vue11.unref)(currentPage), (0, import_vue11.unref)(pageSizeRef));
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, import_vue11.computed)(() => {
537
- return (0, import_vue11.unref)(listRef).length;
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, import_vue11.unref)(listRef), (0, import_vue11.unref)(currentPage), (0, import_vue11.unref)(pageSizeRef));
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 import_vue12 = require("vue");
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, import_vue12.ref)("0px");
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, import_vue12.onMounted)(() => {
576
- watchStopHandle = (0, import_vue12.watch)(
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, import_vue12.onBeforeUnmount)(() => {
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 import_vue13 = require("vue");
642
+ var import_vue14 = require("vue");
623
643
  function useMemo(getterOrOptions) {
624
- const computedValueRef = (0, import_vue13.computed)(getterOrOptions);
625
- const valueRef = (0, import_vue13.ref)(computedValueRef.value);
626
- (0, import_vue13.watch)(computedValueRef, (value) => {
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 import_vue14 = require("vue");
665
+ var import_vue15 = require("vue");
646
666
  function useMergedState(controlledStateRef, uncontrolledStateRef) {
647
- (0, import_vue14.watch)(controlledStateRef, (value) => {
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, import_vue14.computed)(() => {
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 import_vue15 = require("vue");
681
+ var import_vue16 = require("vue");
662
682
  function useScript(opts) {
663
- const isLoading = (0, import_vue15.ref)(false);
664
- const error = (0, import_vue15.ref)(false);
665
- const success = (0, import_vue15.ref)(false);
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, import_vue15.onMounted)(() => {
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, import_vue15.onUnmounted)(() => {
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 import_vue16 = require("vue");
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, import_vue16.ref)(0);
704
- const refY = (0, import_vue16.ref)(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, import_vue16.onMounted)(() => {
724
- stopWatch = (0, import_vue16.watch)(
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, import_vue16.onUnmounted)(() => {
761
+ (0, import_vue17.onUnmounted)(() => {
742
762
  refEl.value && refEl.value.removeEventListener("scroll", handler);
743
763
  });
744
764
  function stop() {
@@ -748,15 +768,15 @@ function useScroll(refEl, options) {
748
768
  }
749
769
 
750
770
  // src/use-signal.ts
751
- var import_vue17 = require("vue");
771
+ var import_vue18 = require("vue");
752
772
  function useSignal(initialValue, options) {
753
773
  const { useRef } = options || {};
754
- const state = useRef ? (0, import_vue17.ref)(initialValue) : (0, import_vue17.shallowRef)(initialValue);
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, import_vue17.computed)(getterOrOptions, debugOptions);
779
+ const computedValue = (0, import_vue18.computed)(getterOrOptions, debugOptions);
760
780
  if (isGetter) {
761
781
  return () => computedValue.value;
762
782
  }
@@ -772,14 +792,14 @@ function createSignal(state) {
772
792
  };
773
793
  signal.mutate = (mutator) => {
774
794
  mutator(state.value);
775
- (0, import_vue17.triggerRef)(state);
795
+ (0, import_vue18.triggerRef)(state);
776
796
  };
777
797
  signal.getRef = () => state;
778
798
  return signal;
779
799
  }
780
800
 
781
801
  // src/use-svg-icon-render.ts
782
- var import_vue18 = require("vue");
802
+ var import_vue19 = require("vue");
783
803
  function useSvgIconRender(SvgIcon) {
784
804
  const SvgIconVNode = (config) => {
785
805
  const { color, fontSize, icon, localIcon } = config;
@@ -793,7 +813,7 @@ function useSvgIconRender(SvgIcon) {
793
813
  if (!icon && !localIcon) {
794
814
  return void 0;
795
815
  }
796
- return () => (0, import_vue18.h)(SvgIcon, { icon, localIcon, style });
816
+ return () => (0, import_vue19.h)(SvgIcon, { icon, localIcon, style });
797
817
  };
798
818
  return {
799
819
  SvgIconVNode
@@ -801,17 +821,17 @@ function useSvgIconRender(SvgIcon) {
801
821
  }
802
822
 
803
823
  // src/use-table.ts
804
- var import_vue19 = require("vue");
824
+ var import_vue20 = require("vue");
805
825
  var import_utils3 = require("@maxax/utils");
806
826
  function useHookTable(config) {
807
827
  const { loading, startLoading, endLoading } = useLoading();
808
828
  const { bool: empty, setBool: setEmpty } = useBoolean();
809
829
  const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config;
810
- const searchParams = (0, import_vue19.reactive)((0, import_utils3.jsonClone)({ ...apiParams }));
811
- const allColumns = (0, import_vue19.ref)(config.columns());
812
- const data = (0, import_vue19.ref)([]);
813
- const columnChecks = (0, import_vue19.ref)(getColumnChecks(config.columns()));
814
- const columns = (0, import_vue19.computed)(() => getColumns(allColumns.value, columnChecks.value));
830
+ const searchParams = (0, import_vue20.reactive)((0, import_utils3.jsonClone)({ ...apiParams }));
831
+ const allColumns = (0, import_vue20.ref)(config.columns());
832
+ const data = (0, import_vue20.ref)([]);
833
+ const columnChecks = (0, import_vue20.ref)(getColumnChecks(config.columns()));
834
+ const columns = (0, import_vue20.computed)(() => getColumns(allColumns.value, columnChecks.value));
815
835
  function reloadColumns() {
816
836
  allColumns.value = config.columns();
817
837
  const checkMap = new Map(columnChecks.value.map((col) => [col.key, col.checked]));
@@ -873,6 +893,7 @@ function useHookTable(config) {
873
893
  useBoolean,
874
894
  useBreakpoint,
875
895
  useBrowserLocation,
896
+ useComposableContext,
876
897
  useComputed,
877
898
  useContext,
878
899
  useCountDown,
@@ -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","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_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, 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, 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";
@@ -820,6 +839,7 @@ export {
820
839
  useBoolean,
821
840
  useBreakpoint,
822
841
  useBrowserLocation,
842
+ useComposableContext,
823
843
  useComputed,
824
844
  useContext,
825
845
  useCountDown,
@@ -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":"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","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","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":["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.0",
3
+ "version": "1.0.2",
4
4
  "description": "Composable Vue hooks shared across Maxax projects",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -25,10 +25,6 @@
25
25
  ],
26
26
  "author": "",
27
27
  "license": "MIT",
28
- "dependencies": {
29
- "@maxax/axios": "1.0.0",
30
- "@maxax/utils": "1.0.0"
31
- },
32
28
  "peerDependencies": {
33
29
  "@vueuse/core": "^10.0.0",
34
30
  "vue": "^3.3.0"