sard-uniapp 1.1.4 → 1.1.6

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/changelog.md CHANGED
@@ -1,3 +1,21 @@
1
+ ## [1.1.6](https://github.com/sutras/sard-uniapp/compare/v1.1.5...v1.1.6) (2024-05-19)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * 修复 notify 组件显示问题、优化文档 ([7ed66fd](https://github.com/sutras/sard-uniapp/commit/7ed66fd09870b24d485fd82ed6f152373b665f3c))
7
+
8
+
9
+
10
+ ## [1.1.5](https://github.com/sutras/sard-uniapp/compare/v1.1.4...v1.1.5) (2024-05-18)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * 修复toast&dialog不显示问题 ([9e49c67](https://github.com/sutras/sard-uniapp/commit/9e49c6772e7d0cff8976133b1dc05fa69b51d7ea))
16
+
17
+
18
+
1
19
  ## [1.1.4](https://github.com/sutras/sard-uniapp/compare/v1.1.3...v1.1.4) (2024-05-17)
2
20
 
3
21
 
@@ -10,6 +10,10 @@ page {
10
10
  --sar-accordion-item-title-font-size: var(--sar-text-base);
11
11
  --sar-accordion-item-title-line-height: var(--sar-leading-snug);
12
12
 
13
+ --sar-accordion-item-arrow-margin-left: 16rpx;
14
+ --sar-accordion-item-arrow-font-size: var(--sar-text-base);
15
+ --sar-accordion-item-arrow-color: var(--sar-tertiary-color);
16
+
13
17
  --sar-accordion-item-body-padding-x: 32rpx;
14
18
  --sar-accordion-item-body-padding-y: 32rpx;
15
19
  }
@@ -8,8 +8,8 @@
8
8
  >
9
9
  <view :class="bem.e('title')">{{ title }}</view>
10
10
  <view v-if="value" :class="bem.e('value')">{{ value }}</view>
11
- <view :class="bem.e('icon')">
12
- <sar-icon :name="iconName" />
11
+ <view :class="bem.e('arrow')">
12
+ <sar-icon :name="arrowName" />
13
13
  </view>
14
14
  </view>
15
15
  <sar-collapse :visible="visible">
@@ -66,7 +66,7 @@ export default _defineComponent({
66
66
  const visible = computed(() => {
67
67
  return context.multiple ? (context.value || []).includes(props.name) : context.value === props.name;
68
68
  });
69
- const iconName = computed(() => {
69
+ const arrowName = computed(() => {
70
70
  return visible.value ? "up" : "down";
71
71
  });
72
72
  const accordionItemClass = computed(() => {
@@ -75,7 +75,7 @@ export default _defineComponent({
75
75
  const accordionItemStyle = computed(() => {
76
76
  return stringifyStyle(props.rootStyle);
77
77
  });
78
- const __returned__ = { props, emit, bem, context, onClick, visible, iconName, accordionItemClass, accordionItemStyle, get classNames() {
78
+ const __returned__ = { props, emit, bem, context, onClick, visible, arrowName, accordionItemClass, accordionItemStyle, get classNames() {
79
79
  return classNames;
80
80
  }, SarCollapse, SarIcon };
81
81
  return __returned__;
@@ -42,6 +42,15 @@
42
42
  line-height: var(--sar-accordion-item-title-line-height);
43
43
  }
44
44
 
45
+ @include e(arrow) {
46
+ @include universal;
47
+ align-items: center;
48
+ justify-content: center;
49
+ margin-left: var(--sar-accordion-item-arrow-margin-left);
50
+ font-size: var(--sar-accordion-item-arrow-font-size);
51
+ color: var(--sar-accordion-item-arrow-color);
52
+ }
53
+
45
54
  @include e(body) {
46
55
  @include universal;
47
56
  padding: var(--sar-accordion-item-body-padding-y)
@@ -11,10 +11,11 @@ export declare const dialogAgentPropsDefaults: {
11
11
  overlayClosable: boolean;
12
12
  duration: number;
13
13
  };
14
- export declare const mapIdImperatives: Record<string, {
15
- show(props: Record<string, any>): void;
14
+ export declare const imperativeName = "dialog";
15
+ export interface DialogImperative {
16
+ show(newProps: Record<string, any>): void;
16
17
  hide(): void;
17
- }[]>;
18
+ }
18
19
  export type DialogOptions = DialogAgentProps;
19
20
  export interface DialogSimpleShowFunction {
20
21
  (options: DialogOptions): void;
@@ -1,10 +1,11 @@
1
1
  import { dialogPropsDefaults } from '../dialog/common';
2
2
  import { defaultConfig } from '../config';
3
+ import { getAllImperatives, getAvailableImperative, getImperatives, } from '../../use/useImperative';
3
4
  export const dialogAgentPropsDefaults = {
4
5
  ...dialogPropsDefaults,
5
6
  ...defaultConfig.dialogAgent,
6
7
  };
7
- export const mapIdImperatives = {};
8
+ export const imperativeName = 'dialog';
8
9
  const defaultDialogOptions = {
9
10
  headed: false,
10
11
  buttonType: 'text',
@@ -19,9 +20,9 @@ const show = (optionsOrTitle, options = {}, internalOptions) => {
19
20
  }
20
21
  options = Object.assign({}, defaultDialogOptions, options, internalOptions);
21
22
  const { id = defaultConfig.dialogAgent.id } = options;
22
- const imperatives = mapIdImperatives[id];
23
- if (imperatives && imperatives.length > 0) {
24
- imperatives[imperatives.length - 1].show(options);
23
+ const imperative = getAvailableImperative(imperativeName, id);
24
+ if (imperative) {
25
+ imperative.show(options);
25
26
  }
26
27
  };
27
28
  const dialog = (optionsOrTitle, options) => {
@@ -36,15 +37,18 @@ const confirm = (optionsOrTitle, options) => {
36
37
  });
37
38
  };
38
39
  const hide = (id = defaultConfig.dialogAgent.id) => {
39
- const imperatives = mapIdImperatives[id];
40
+ const imperatives = getImperatives(imperativeName, id);
40
41
  if (imperatives && imperatives.length > 0) {
41
- imperatives.forEach((imperative) => {
42
- imperative.hide();
42
+ imperatives.forEach((item) => {
43
+ item.imperative.hide();
43
44
  });
44
45
  }
45
46
  };
46
47
  const hideAll = () => {
47
- Object.keys(mapIdImperatives).forEach(hide);
48
+ const mapImperatives = getAllImperatives()[imperativeName];
49
+ if (mapImperatives) {
50
+ Object.keys(mapImperatives).forEach(hide);
51
+ }
48
52
  };
49
53
  dialog.alert = alert;
50
54
  dialog.confirm = confirm;
@@ -18,12 +18,13 @@
18
18
 
19
19
  <script>
20
20
  import { mergeDefaults as _mergeDefaults, defineComponent as _defineComponent } from "vue";
21
- import { onMounted, onUnmounted, ref } from "vue";
21
+ import { computed, ref } from "vue";
22
22
  import SarDialog from "../dialog/dialog.vue";
23
23
  import {
24
24
  dialogAgentPropsDefaults,
25
- mapIdImperatives
25
+ imperativeName
26
26
  } from "./common";
27
+ import { useImperative } from "../../use/useImperative";
27
28
  export default _defineComponent({
28
29
  ...{
29
30
  options: {
@@ -68,23 +69,11 @@ export default _defineComponent({
68
69
  };
69
70
  }
70
71
  };
71
- onMounted(() => {
72
- const id = innerProps.value.id;
73
- if (id) {
74
- mapIdImperatives[id] ??= [];
75
- mapIdImperatives[id].push(imperative);
76
- }
77
- });
78
- onUnmounted(() => {
79
- const id = innerProps.value.id;
80
- if (id) {
81
- const imperatives = mapIdImperatives[id];
82
- const index = imperatives.indexOf(imperative);
83
- if (index !== -1) {
84
- imperatives.splice(imperatives.indexOf(imperative), 1);
85
- }
86
- }
87
- });
72
+ useImperative(
73
+ imperativeName,
74
+ imperative,
75
+ computed(() => innerProps.value.id)
76
+ );
88
77
  const __returned__ = { props, innerProps, imperative, SarDialog };
89
78
  return __returned__;
90
79
  }
@@ -9,10 +9,11 @@ export declare const notifyAgentPropsDefaults: {
9
9
  duration: number;
10
10
  timeout: number;
11
11
  };
12
- export declare const mapIdImperative: Record<string, {
13
- show(props: Record<string, any>): void;
12
+ export declare const imperativeName = "notify";
13
+ export interface NotifyImperative {
14
+ show(newProps: Record<string, any>): void;
14
15
  hide(): void;
15
- }>;
16
+ }
16
17
  export type NotifyOptions = NotifyAgentProps;
17
18
  export interface NotifySimpleShowFunction {
18
19
  (options: NotifyOptions): void;
@@ -1,9 +1,11 @@
1
+ import { notifyPropsDefaults } from '../notify/common';
1
2
  import { defaultConfig } from '../config';
3
+ import { getAllImperatives, getAvailableImperative, getImperatives, } from '../../use/useImperative';
2
4
  export const notifyAgentPropsDefaults = {
3
- ...defaultConfig.notify,
5
+ ...notifyPropsDefaults,
4
6
  ...defaultConfig.notifyAgent,
5
7
  };
6
- export const mapIdImperative = {};
8
+ export const imperativeName = 'notify';
7
9
  const show = (optionsOrMessage, options = {}, internalType) => {
8
10
  if (optionsOrMessage && typeof optionsOrMessage === 'object') {
9
11
  options = optionsOrMessage;
@@ -12,8 +14,8 @@ const show = (optionsOrMessage, options = {}, internalType) => {
12
14
  options.message = optionsOrMessage;
13
15
  }
14
16
  options.type = internalType;
15
- const { id = 'notify' } = options;
16
- const imperative = mapIdImperative[id];
17
+ const { id = defaultConfig.notifyAgent.id } = options;
18
+ const imperative = getAvailableImperative(imperativeName, id);
17
19
  if (imperative) {
18
20
  imperative.show(options);
19
21
  }
@@ -30,14 +32,19 @@ const warning = (optionsOrMessage, options) => {
30
32
  const error = (optionsOrMessage, options) => {
31
33
  show(optionsOrMessage, options, 'error');
32
34
  };
33
- const hide = (id = 'notify') => {
34
- const imperative = mapIdImperative[id];
35
- if (imperative) {
36
- imperative.hide();
35
+ const hide = (id = defaultConfig.notifyAgent.id) => {
36
+ const imperatives = getImperatives(imperativeName, id);
37
+ if (imperatives && imperatives.length > 0) {
38
+ imperatives.forEach((item) => {
39
+ item.imperative.hide();
40
+ });
37
41
  }
38
42
  };
39
43
  const hideAll = () => {
40
- Object.keys(mapIdImperative).forEach(hide);
44
+ const mapImperatives = getAllImperatives()[imperativeName];
45
+ if (mapImperatives) {
46
+ Object.keys(mapImperatives).forEach(hide);
47
+ }
41
48
  };
42
49
  notify.success = success;
43
50
  notify.warning = warning;
@@ -15,12 +15,13 @@
15
15
 
16
16
  <script>
17
17
  import { mergeDefaults as _mergeDefaults, defineComponent as _defineComponent } from "vue";
18
- import { onMounted, onUnmounted, ref } from "vue";
18
+ import { computed, ref } from "vue";
19
19
  import SarNotify from "../notify/notify.vue";
20
20
  import {
21
- mapIdImperative,
21
+ imperativeName,
22
22
  notifyAgentPropsDefaults
23
23
  } from "./common";
24
+ import { useImperative } from "../../use/useImperative";
24
25
  export default _defineComponent({
25
26
  ...{
26
27
  options: {
@@ -64,16 +65,11 @@ export default _defineComponent({
64
65
  elRef.value?.cancelHide();
65
66
  }
66
67
  };
67
- onMounted(() => {
68
- if (innerProps.value.id) {
69
- mapIdImperative[innerProps.value.id] = imperative;
70
- }
71
- });
72
- onUnmounted(() => {
73
- if (innerProps.value.id) {
74
- delete mapIdImperative[innerProps.value.id];
75
- }
76
- });
68
+ useImperative(
69
+ imperativeName,
70
+ imperative,
71
+ computed(() => innerProps.value.id)
72
+ );
77
73
  const __returned__ = { props, innerProps, elRef, imperative, SarNotify };
78
74
  return __returned__;
79
75
  }
@@ -1,3 +1,3 @@
1
- import { Position } from './utils';
1
+ import type { Position } from './utils';
2
2
  export { usePopover } from './usePopover';
3
3
  export type PopoverPosition = Position;
@@ -19,7 +19,7 @@ export declare const toastPropsDefaults: {
19
19
  duration: number;
20
20
  };
21
21
  export interface ToastEmits {
22
- (e: 'update:visible', event: any): void;
22
+ (e: 'update:visible', visible: boolean): void;
23
23
  }
24
24
  export interface ToastExpose {
25
25
  reHideLater: () => void;
@@ -9,7 +9,7 @@ declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_T
9
9
  reHideLater: () => void;
10
10
  cancelHide: () => void;
11
11
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
- "update:visible": (event: any) => void;
12
+ "update:visible": (visible: boolean) => void;
13
13
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<ToastProps>, {
14
14
  type: "text";
15
15
  position: "center";
@@ -17,7 +17,7 @@ declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_T
17
17
  timeout: number;
18
18
  duration: number;
19
19
  }>>> & {
20
- "onUpdate:visible"?: ((event: any) => any) | undefined;
20
+ "onUpdate:visible"?: ((visible: boolean) => any) | undefined;
21
21
  }, {
22
22
  type: "success" | "text" | "loading" | "fail";
23
23
  overlay: boolean;
@@ -10,10 +10,11 @@ export declare const toastAgentPropsDefaults: {
10
10
  timeout: number;
11
11
  duration: number;
12
12
  };
13
- export declare const mapIdImperatives: Record<string, {
14
- show(props: Record<string, any>): void;
13
+ export declare const imperativeName = "toast";
14
+ export interface ToastImperative {
15
+ show(newProps: Record<string, any>): void;
15
16
  hide(): void;
16
- }[]>;
17
+ }
17
18
  export type ToastOptions = ToastAgentProps;
18
19
  export interface ToastSimpleShowFunction {
19
20
  (options: ToastOptions): void;
@@ -1,10 +1,11 @@
1
+ import { getAllImperatives, getAvailableImperative, getImperatives, } from '../../use/useImperative';
1
2
  import { defaultConfig } from '../config';
2
3
  import { toastPropsDefaults } from '../toast/common';
3
4
  export const toastAgentPropsDefaults = {
4
5
  ...toastPropsDefaults,
5
6
  ...defaultConfig.toastAgent,
6
7
  };
7
- export const mapIdImperatives = {};
8
+ export const imperativeName = 'toast';
8
9
  const show = (optionsOrTitle, options = {}, internalType) => {
9
10
  if (optionsOrTitle && typeof optionsOrTitle === 'object') {
10
11
  options = optionsOrTitle;
@@ -14,9 +15,9 @@ const show = (optionsOrTitle, options = {}, internalType) => {
14
15
  }
15
16
  options.type = internalType;
16
17
  const { id = defaultConfig.toastAgent.id } = options;
17
- const imperatives = mapIdImperatives[id];
18
- if (imperatives && imperatives.length > 0) {
19
- imperatives[imperatives.length - 1].show(options);
18
+ const imperative = getAvailableImperative(imperativeName, id);
19
+ if (imperative) {
20
+ imperative.show(options);
20
21
  }
21
22
  };
22
23
  const toast = (optionsOrTitle, options) => {
@@ -32,15 +33,18 @@ const loading = (optionsOrTitle, options) => {
32
33
  show(optionsOrTitle, options, 'loading');
33
34
  };
34
35
  const hide = (id = defaultConfig.toastAgent.id) => {
35
- const imperatives = mapIdImperatives[id];
36
+ const imperatives = getImperatives(imperativeName, id);
36
37
  if (imperatives && imperatives.length > 0) {
37
- imperatives.forEach((imperative) => {
38
- imperative.hide();
38
+ imperatives.forEach((item) => {
39
+ item.imperative.hide();
39
40
  });
40
41
  }
41
42
  };
42
43
  const hideAll = () => {
43
- Object.keys(mapIdImperatives).forEach(hide);
44
+ const mapImperatives = getAllImperatives()[imperativeName];
45
+ if (mapImperatives) {
46
+ Object.keys(mapImperatives).forEach(hide);
47
+ }
44
48
  };
45
49
  toast.success = success;
46
50
  toast.fail = fail;
@@ -14,12 +14,13 @@
14
14
 
15
15
  <script>
16
16
  import { mergeDefaults as _mergeDefaults, defineComponent as _defineComponent } from "vue";
17
- import { onMounted, onUnmounted, ref } from "vue";
17
+ import { computed, ref } from "vue";
18
18
  import SarToast from "../toast/toast.vue";
19
19
  import {
20
- mapIdImperatives,
20
+ imperativeName,
21
21
  toastAgentPropsDefaults
22
22
  } from "./common";
23
+ import { useImperative } from "../../use/useImperative";
23
24
  export default _defineComponent({
24
25
  ...{
25
26
  options: {
@@ -63,23 +64,11 @@ export default _defineComponent({
63
64
  elRef.value?.cancelHide();
64
65
  }
65
66
  };
66
- onMounted(() => {
67
- const id = innerProps.value.id;
68
- if (id) {
69
- mapIdImperatives[id] ??= [];
70
- mapIdImperatives[id].push(imperative);
71
- }
72
- });
73
- onUnmounted(() => {
74
- const id = innerProps.value.id;
75
- if (id) {
76
- const imperatives = mapIdImperatives[id];
77
- const index = imperatives.indexOf(imperative);
78
- if (index !== -1) {
79
- imperatives.splice(imperatives.indexOf(imperative), 1);
80
- }
81
- }
82
- });
67
+ useImperative(
68
+ imperativeName,
69
+ imperative,
70
+ computed(() => innerProps.value.id)
71
+ );
83
72
  const __returned__ = { props, innerProps, elRef, imperative, SarToast };
84
73
  return __returned__;
85
74
  }
package/package.json CHANGED
@@ -2,7 +2,8 @@
2
2
  "id": "sard-uniapp",
3
3
  "name": "sard-uniapp",
4
4
  "displayName": "sard-uniapp",
5
- "version": "1.1.4",
5
+ "version": "1.1.6",
6
+ "type": "module",
6
7
  "description": "sard-uniapp 是一套基于 Uniapp + Vue3 框架开发的兼容多端的 UI 组件库",
7
8
  "keywords": [
8
9
  "uniapp",
@@ -24,8 +25,8 @@
24
25
  "test": "vitest"
25
26
  },
26
27
  "peerDependencies": {
27
- "@dcloudio/types": "^3.3.2",
28
- "vue": "^3.3.11"
28
+ "@dcloudio/types": "^3.4.8",
29
+ "vue": "^3.4.27"
29
30
  },
30
31
  "devDependencies": {
31
32
  "@sard/uniapp-cli": "workspace:*",
package/use/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './useTransition';
2
2
  export * from './useSetTimeout';
3
3
  export * from './useZIndex';
4
+ export * from './useImperative';
package/use/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './useTransition';
2
2
  export * from './useSetTimeout';
3
3
  export * from './useZIndex';
4
+ export * from './useImperative';
@@ -0,0 +1,11 @@
1
+ import { Ref } from 'vue';
2
+ type ImperativeItem<T = any> = {
3
+ show: boolean;
4
+ imperative: T;
5
+ };
6
+ type AllImperatives<T = any> = Record<string, Record<string, ImperativeItem<T>[] | undefined> | undefined>;
7
+ export declare function useImperative<T = any>(name: string, imperative: T, id: Ref<string>): void;
8
+ export declare function getAvailableImperative<T = any>(name: string, id: string): T | void;
9
+ export declare function getImperatives<T = any>(name: string, id: string): ImperativeItem<T>[] | undefined;
10
+ export declare function getAllImperatives<T = any>(): AllImperatives<T>;
11
+ export {};
@@ -0,0 +1,70 @@
1
+ import { onMounted, onUnmounted } from 'vue';
2
+ import { onHide, onShow } from '@dcloudio/uni-app';
3
+ const allImperatives = {};
4
+ export function useImperative(name, imperative, id) {
5
+ onMounted(() => {
6
+ if (id.value) {
7
+ const imperativeItems = ((allImperatives[name] ??= {})[id.value] ??= []);
8
+ const index = imperativeItems.findIndex((item) => item.imperative === imperative);
9
+ if (index === -1) {
10
+ imperativeItems.push({
11
+ imperative,
12
+ show: true,
13
+ });
14
+ }
15
+ }
16
+ });
17
+ onUnmounted(() => {
18
+ if (id.value) {
19
+ const imperativeItems = allImperatives[name]?.[id.value];
20
+ if (imperativeItems) {
21
+ const index = imperativeItems.findIndex((item) => item.imperative === imperative);
22
+ if (index !== -1) {
23
+ imperativeItems.splice(index, 1);
24
+ if (imperativeItems.length === 0) {
25
+ delete allImperatives[name]?.[id.value];
26
+ }
27
+ }
28
+ }
29
+ }
30
+ });
31
+ onShow(() => {
32
+ if (id.value) {
33
+ const imperativeItems = allImperatives[name]?.[id.value];
34
+ if (imperativeItems) {
35
+ const imperativeItem = imperativeItems.find((item) => item.imperative === imperative);
36
+ if (imperativeItem) {
37
+ imperativeItem.show = true;
38
+ }
39
+ }
40
+ }
41
+ });
42
+ onHide(() => {
43
+ if (id.value) {
44
+ const imperativeItems = allImperatives[name]?.[id.value];
45
+ if (imperativeItems) {
46
+ const imperativeItem = imperativeItems.find((item) => item.imperative === imperative);
47
+ if (imperativeItem) {
48
+ imperativeItem.show = false;
49
+ }
50
+ }
51
+ }
52
+ });
53
+ }
54
+ export function getAvailableImperative(name, id) {
55
+ const imperativeItems = allImperatives[name]?.[id];
56
+ if (imperativeItems) {
57
+ for (let i = imperativeItems.length - 1; i >= 0; i--) {
58
+ const imperativeItem = imperativeItems[i];
59
+ if (imperativeItem.show) {
60
+ return imperativeItem.imperative;
61
+ }
62
+ }
63
+ }
64
+ }
65
+ export function getImperatives(name, id) {
66
+ return allImperatives[name]?.[id];
67
+ }
68
+ export function getAllImperatives() {
69
+ return allImperatives;
70
+ }