persagy-vant 0.0.41 → 0.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/es/action-sheet/ActionSheet.d.ts +4 -0
  2. package/es/action-sheet/ActionSheet.mjs +4 -1
  3. package/es/action-sheet/index.css +1 -1
  4. package/es/action-sheet/index.d.ts +3 -0
  5. package/es/action-sheet/index.less +4 -0
  6. package/es/blue-mark/BlueMarkHeader.d.ts +13 -0
  7. package/es/blue-mark/BlueMarkHeader.mjs +3 -1
  8. package/es/blue-mark/CollapseToggle.d.ts +13 -0
  9. package/es/blue-mark/CollapseToggle.mjs +5 -1
  10. package/es/blue-mark/index.d.ts +18 -0
  11. package/es/checkbox-panel/CheckboxPanel.d.ts +41 -1
  12. package/es/checkbox-panel/CheckboxPanel.mjs +87 -25
  13. package/es/checkbox-panel/index.css +1 -1
  14. package/es/checkbox-panel/index.d.ts +29 -1
  15. package/es/checkbox-panel/index.less +82 -1
  16. package/es/index.d.ts +2 -1
  17. package/es/index.mjs +4 -1
  18. package/es/locale/lang/en-US.d.ts +9 -0
  19. package/es/locale/lang/en-US.mjs +9 -0
  20. package/es/locale/lang/zh-CN.d.ts +9 -0
  21. package/es/locale/lang/zh-CN.mjs +9 -0
  22. package/es/material-action-bar/MaterialActionBar.mjs +3 -1
  23. package/es/material-action-bar/index.css +1 -1
  24. package/es/material-action-bar/index.less +1 -1
  25. package/es/material-add/index.css +1 -1
  26. package/es/notice-bar/index.css +1 -1
  27. package/es/notice-bar/index.less +13 -0
  28. package/es/tabs/Tabs.mjs +3 -2
  29. package/es/tabs/index.css +1 -1
  30. package/es/tabs/index.less +15 -5
  31. package/es/tabs/var.less +1 -0
  32. package/es/title-bar/TitleBar.d.ts +15 -1
  33. package/es/title-bar/TitleBar.mjs +2 -0
  34. package/es/title-bar/index.css +1 -1
  35. package/es/title-bar/index.d.ts +10 -1
  36. package/es/title-bar/index.less +6 -1
  37. package/es/title-bar/var.less +2 -1
  38. package/es/tree-select/TreeSelect.d.ts +3 -0
  39. package/es/tree-select/TreeSelect.mjs +18 -2
  40. package/es/tree-select/index.d.ts +2 -0
  41. package/es/tree-select-panel/TreeSelectPanel.d.ts +181 -0
  42. package/es/tree-select-panel/TreeSelectPanel.mjs +213 -0
  43. package/es/tree-select-panel/index.css +1 -0
  44. package/es/tree-select-panel/index.d.ts +134 -0
  45. package/es/tree-select-panel/index.less +107 -0
  46. package/es/tree-select-panel/index.mjs +8 -0
  47. package/es/tree-select-panel/style/index.mjs +23 -0
  48. package/es/tree-select-panel/style/less.mjs +23 -0
  49. package/es/uploader/Uploader.d.ts +6 -1
  50. package/es/uploader/Uploader.mjs +80 -19
  51. package/es/uploader/index.css +1 -1
  52. package/es/uploader/index.d.ts +6 -2
  53. package/es/uploader/index.less +4 -0
  54. package/es/uploader/style/index.mjs +3 -0
  55. package/es/uploader/style/less.mjs +3 -0
  56. package/es/uploader/types.d.ts +2 -1
  57. package/lib/action-sheet/ActionSheet.d.ts +4 -0
  58. package/lib/action-sheet/ActionSheet.js +4 -1
  59. package/lib/action-sheet/index.css +1 -1
  60. package/lib/action-sheet/index.d.ts +3 -0
  61. package/lib/action-sheet/index.less +4 -0
  62. package/lib/blue-mark/BlueMarkHeader.d.ts +13 -0
  63. package/lib/blue-mark/BlueMarkHeader.js +2 -0
  64. package/lib/blue-mark/CollapseToggle.d.ts +13 -0
  65. package/lib/blue-mark/CollapseToggle.js +5 -1
  66. package/lib/blue-mark/index.d.ts +18 -0
  67. package/lib/checkbox-panel/CheckboxPanel.d.ts +41 -1
  68. package/lib/checkbox-panel/CheckboxPanel.js +86 -24
  69. package/lib/checkbox-panel/index.css +1 -1
  70. package/lib/checkbox-panel/index.d.ts +29 -1
  71. package/lib/checkbox-panel/index.less +82 -1
  72. package/lib/index.css +1 -1
  73. package/lib/index.d.ts +2 -1
  74. package/lib/index.js +4 -1
  75. package/lib/index.less +1 -0
  76. package/lib/locale/lang/en-US.d.ts +9 -0
  77. package/lib/locale/lang/en-US.js +9 -0
  78. package/lib/locale/lang/zh-CN.d.ts +9 -0
  79. package/lib/locale/lang/zh-CN.js +9 -0
  80. package/lib/material-action-bar/MaterialActionBar.js +3 -1
  81. package/lib/material-action-bar/index.css +1 -1
  82. package/lib/material-action-bar/index.less +1 -1
  83. package/lib/material-add/index.css +1 -1
  84. package/lib/notice-bar/index.css +1 -1
  85. package/lib/notice-bar/index.less +13 -0
  86. package/lib/tabs/Tabs.js +3 -2
  87. package/lib/tabs/index.css +1 -1
  88. package/lib/tabs/index.less +15 -5
  89. package/lib/tabs/var.less +1 -0
  90. package/lib/title-bar/TitleBar.d.ts +15 -1
  91. package/lib/title-bar/TitleBar.js +2 -0
  92. package/lib/title-bar/index.css +1 -1
  93. package/lib/title-bar/index.d.ts +10 -1
  94. package/lib/title-bar/index.less +6 -1
  95. package/lib/title-bar/var.less +2 -1
  96. package/lib/tree-select/TreeSelect.d.ts +3 -0
  97. package/lib/tree-select/TreeSelect.js +18 -2
  98. package/lib/tree-select/index.d.ts +2 -0
  99. package/lib/tree-select-panel/TreeSelectPanel.d.ts +181 -0
  100. package/lib/tree-select-panel/TreeSelectPanel.js +232 -0
  101. package/lib/tree-select-panel/index.css +1 -0
  102. package/lib/tree-select-panel/index.d.ts +134 -0
  103. package/lib/tree-select-panel/index.js +37 -0
  104. package/lib/tree-select-panel/index.less +107 -0
  105. package/lib/tree-select-panel/style/index.js +23 -0
  106. package/lib/tree-select-panel/style/less.js +23 -0
  107. package/lib/uploader/Uploader.d.ts +6 -1
  108. package/lib/uploader/Uploader.js +79 -18
  109. package/lib/uploader/index.css +1 -1
  110. package/lib/uploader/index.d.ts +6 -2
  111. package/lib/uploader/index.less +4 -0
  112. package/lib/uploader/style/index.js +3 -0
  113. package/lib/uploader/style/less.js +3 -0
  114. package/lib/uploader/types.d.ts +2 -1
  115. package/lib/vant.cjs.js +1663 -1300
  116. package/lib/vant.es.js +1663 -1300
  117. package/lib/vant.js +1663 -1300
  118. package/lib/vant.min.js +1 -1
  119. package/lib/web-types.json +1 -1
  120. package/package.json +1 -1
  121. package/skills/use-persagy-vant/references/component-catalog.md +1 -1
@@ -50,6 +50,7 @@ declare const actionSheetProps: {
50
50
  };
51
51
  cancelText: StringConstructor;
52
52
  description: StringConstructor;
53
+ contentAdaptive: BooleanConstructor;
53
54
  closeOnPopstate: {
54
55
  type: BooleanConstructor;
55
56
  default: true;
@@ -102,6 +103,7 @@ declare const _default: import("vue").DefineComponent<{
102
103
  };
103
104
  cancelText: StringConstructor;
104
105
  description: StringConstructor;
106
+ contentAdaptive: BooleanConstructor;
105
107
  closeOnPopstate: {
106
108
  type: BooleanConstructor;
107
109
  default: true;
@@ -152,6 +154,7 @@ declare const _default: import("vue").DefineComponent<{
152
154
  };
153
155
  cancelText: StringConstructor;
154
156
  description: StringConstructor;
157
+ contentAdaptive: BooleanConstructor;
155
158
  closeOnPopstate: {
156
159
  type: BooleanConstructor;
157
160
  default: true;
@@ -178,5 +181,6 @@ declare const _default: import("vue").DefineComponent<{
178
181
  closeOnPopstate: boolean;
179
182
  actions: ActionSheetAction[];
180
183
  closeOnClickAction: boolean;
184
+ contentAdaptive: boolean;
181
185
  }>;
182
186
  export default _default;
@@ -13,6 +13,7 @@ const actionSheetProps = extend({}, popupSharedProps, {
13
13
  closeable: truthProp,
14
14
  cancelText: String,
15
15
  description: String,
16
+ contentAdaptive: Boolean,
16
17
  closeOnPopstate: truthProp,
17
18
  closeOnClickAction: Boolean,
18
19
  safeAreaInsetBottom: truthProp
@@ -121,7 +122,9 @@ var stdin_default = defineComponent({
121
122
  }
122
123
  };
123
124
  return () => _createVNode(Popup, _mergeProps({
124
- "class": bem(),
125
+ "class": bem({
126
+ "content-adaptive": props.contentAdaptive
127
+ }),
125
128
  "position": "bottom",
126
129
  "onUpdate:show": updateShow
127
130
  }, pick(props, popupInheritKeys)), {
@@ -1 +1 @@
1
- :root{--van-action-sheet-max-height:calc(100% - 96px);--van-action-sheet-header-height: 48px;--van-action-sheet-header-font-size: var(--van-font-size-lg);--van-action-sheet-description-color: var(--van-text-color-2);--van-action-sheet-description-font-size: var(--van-font-size-md);--van-action-sheet-description-line-height: var(--van-line-height-md);--van-action-sheet-item-background: var(--van-background-color-light);--van-action-sheet-item-font-size: var(--van-font-size-lg);--van-action-sheet-item-line-height: var(--van-line-height-lg);--van-action-sheet-item-text-color: var(--van-text-color);--van-action-sheet-item-disabled-text-color: var(--van-text-color-3);--van-action-sheet-subname-color: var(--van-text-color-2);--van-action-sheet-subname-font-size: var(--van-font-size-sm);--van-action-sheet-subname-line-height: var(--van-line-height-sm);--van-action-sheet-cancel-text-color: var(--van-gray-7);--van-action-sheet-cancel-padding-top: var(--van-padding-xs);--van-action-sheet-cancel-padding-color: var(--van-background-color);--van-action-sheet-loading-icon-size: 22px}.van-action-sheet{display:flex;flex-direction:column;max-height:var(--van-action-sheet-max-height);height:var(--van-action-sheet-max-height);overflow:hidden;color:var(--van-action-sheet-item-text-color);background:var(--van-gray-2)}.van-action-sheet__content{flex:1 auto;display:flex;flex-direction:column;gap:0;padding:0 var(--van-padding-md) var(--van-padding-md);overflow-y:auto;-webkit-overflow-scrolling:touch}.van-action-sheet__action-card{overflow:hidden;background:var(--van-white);border-radius:8px}.van-action-sheet__item,.van-action-sheet__cancel{display:block;width:100%;padding:14px var(--van-padding-md);font-size:var(--van-action-sheet-item-font-size);background:transparent;border:none;cursor:pointer}.van-action-sheet__item:active,.van-action-sheet__cancel:active{background-color:var(--van-active-color)}.van-action-sheet__item{position:relative;line-height:var(--van-action-sheet-item-line-height);text-align:left}.van-action-sheet__item--selected{font-weight:var(--van-font-weight-bold)}.van-action-sheet__item:not(:last-child):after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--van-padding-md);bottom:0;left:var(--van-padding-md);border-bottom:1px solid var(--van-border-color);transform:scaleY(.5)}.van-action-sheet__item--loading,.van-action-sheet__item--disabled{color:var(--van-action-sheet-item-disabled-text-color)}.van-action-sheet__item--loading:active,.van-action-sheet__item--disabled:active{background-color:var(--van-action-sheet-item-background)}.van-action-sheet__item--disabled{cursor:not-allowed}.van-action-sheet__item--loading{cursor:default}.van-action-sheet__cancel{flex-shrink:0;box-sizing:border-box;color:var(--van-action-sheet-cancel-text-color)}.van-action-sheet__subname{margin-top:var(--van-padding-xs);color:var(--van-action-sheet-subname-color);font-size:var(--van-action-sheet-subname-font-size);line-height:var(--van-action-sheet-subname-line-height)}.van-action-sheet__gap{display:block;height:var(--van-action-sheet-cancel-padding-top);background:var(--van-action-sheet-cancel-padding-color)}.van-action-sheet__header{flex-shrink:0;background:transparent}.van-action-sheet__nav-left{display:flex;align-items:center;height:var(--van-nav-bar-height);padding:0 6px 0 var(--van-padding-md)}.van-action-sheet__description{position:relative;flex-shrink:0;padding:20px var(--van-padding-md);color:var(--van-action-sheet-description-color);font-size:var(--van-action-sheet-description-font-size);line-height:var(--van-action-sheet-description-line-height);text-align:center}.van-action-sheet__description:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--van-padding-md);bottom:0;left:var(--van-padding-md);border-bottom:1px solid var(--van-border-color);transform:scaleY(.5)}.van-action-sheet__loading-icon .van-loading__spinner{width:var(--van-action-sheet-loading-icon-size);height:var(--van-action-sheet-loading-icon-size)}
1
+ :root{--van-action-sheet-max-height:calc(100% - 96px);--van-action-sheet-header-height: 48px;--van-action-sheet-header-font-size: var(--van-font-size-lg);--van-action-sheet-description-color: var(--van-text-color-2);--van-action-sheet-description-font-size: var(--van-font-size-md);--van-action-sheet-description-line-height: var(--van-line-height-md);--van-action-sheet-item-background: var(--van-background-color-light);--van-action-sheet-item-font-size: var(--van-font-size-lg);--van-action-sheet-item-line-height: var(--van-line-height-lg);--van-action-sheet-item-text-color: var(--van-text-color);--van-action-sheet-item-disabled-text-color: var(--van-text-color-3);--van-action-sheet-subname-color: var(--van-text-color-2);--van-action-sheet-subname-font-size: var(--van-font-size-sm);--van-action-sheet-subname-line-height: var(--van-line-height-sm);--van-action-sheet-cancel-text-color: var(--van-gray-7);--van-action-sheet-cancel-padding-top: var(--van-padding-xs);--van-action-sheet-cancel-padding-color: var(--van-background-color);--van-action-sheet-loading-icon-size: 22px}.van-action-sheet{display:flex;flex-direction:column;max-height:var(--van-action-sheet-max-height);height:var(--van-action-sheet-max-height);overflow:hidden;color:var(--van-action-sheet-item-text-color);background:var(--van-gray-2)}.van-action-sheet--content-adaptive{height:auto}.van-action-sheet__content{flex:1 auto;display:flex;flex-direction:column;gap:0;padding:0 var(--van-padding-md) var(--van-padding-md);overflow-y:auto;-webkit-overflow-scrolling:touch}.van-action-sheet__action-card{overflow:hidden;background:var(--van-white);border-radius:8px}.van-action-sheet__item,.van-action-sheet__cancel{display:block;width:100%;padding:14px var(--van-padding-md);font-size:var(--van-action-sheet-item-font-size);background:transparent;border:none;cursor:pointer}.van-action-sheet__item:active,.van-action-sheet__cancel:active{background-color:var(--van-active-color)}.van-action-sheet__item{position:relative;line-height:var(--van-action-sheet-item-line-height);text-align:left}.van-action-sheet__item--selected{font-weight:var(--van-font-weight-bold)}.van-action-sheet__item:not(:last-child):after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--van-padding-md);bottom:0;left:var(--van-padding-md);border-bottom:1px solid var(--van-border-color);transform:scaleY(.5)}.van-action-sheet__item--loading,.van-action-sheet__item--disabled{color:var(--van-action-sheet-item-disabled-text-color)}.van-action-sheet__item--loading:active,.van-action-sheet__item--disabled:active{background-color:var(--van-action-sheet-item-background)}.van-action-sheet__item--disabled{cursor:not-allowed}.van-action-sheet__item--loading{cursor:default}.van-action-sheet__cancel{flex-shrink:0;box-sizing:border-box;color:var(--van-action-sheet-cancel-text-color)}.van-action-sheet__subname{margin-top:var(--van-padding-xs);color:var(--van-action-sheet-subname-color);font-size:var(--van-action-sheet-subname-font-size);line-height:var(--van-action-sheet-subname-line-height)}.van-action-sheet__gap{display:block;height:var(--van-action-sheet-cancel-padding-top);background:var(--van-action-sheet-cancel-padding-color)}.van-action-sheet__header{flex-shrink:0;background:transparent}.van-action-sheet__nav-left{display:flex;align-items:center;height:var(--van-nav-bar-height);padding:0 6px 0 var(--van-padding-md)}.van-action-sheet__description{position:relative;flex-shrink:0;padding:20px var(--van-padding-md);color:var(--van-action-sheet-description-color);font-size:var(--van-action-sheet-description-font-size);line-height:var(--van-action-sheet-description-line-height);text-align:center}.van-action-sheet__description:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--van-padding-md);bottom:0;left:var(--van-padding-md);border-bottom:1px solid var(--van-border-color);transform:scaleY(.5)}.van-action-sheet__loading-icon .van-loading__spinner{width:var(--van-action-sheet-loading-icon-size);height:var(--van-action-sheet-loading-icon-size)}
@@ -39,6 +39,7 @@ export declare const ActionSheet: import("../utils").WithInstall<import("vue").D
39
39
  };
40
40
  cancelText: StringConstructor;
41
41
  description: StringConstructor;
42
+ contentAdaptive: BooleanConstructor;
42
43
  closeOnPopstate: {
43
44
  type: BooleanConstructor;
44
45
  default: true;
@@ -89,6 +90,7 @@ export declare const ActionSheet: import("../utils").WithInstall<import("vue").D
89
90
  };
90
91
  cancelText: StringConstructor;
91
92
  description: StringConstructor;
93
+ contentAdaptive: BooleanConstructor;
92
94
  closeOnPopstate: {
93
95
  type: BooleanConstructor;
94
96
  default: true;
@@ -115,6 +117,7 @@ export declare const ActionSheet: import("../utils").WithInstall<import("vue").D
115
117
  closeOnPopstate: boolean;
116
118
  actions: import("./ActionSheet").ActionSheetAction[];
117
119
  closeOnClickAction: boolean;
120
+ contentAdaptive: boolean;
118
121
  }>>;
119
122
  export default ActionSheet;
120
123
  export type { ActionSheetProps, ActionSheetAction } from './ActionSheet';
@@ -31,6 +31,10 @@
31
31
  color: var(--van-action-sheet-item-text-color);
32
32
  background: var(--van-gray-2);
33
33
 
34
+ &--content-adaptive {
35
+ height: auto;
36
+ }
37
+
34
38
  &__content {
35
39
  flex: 1 auto;
36
40
  display: flex;
@@ -9,6 +9,10 @@ declare const blueMarkHeaderProps: {
9
9
  required: BooleanConstructor;
10
10
  actionText: StringConstructor;
11
11
  expandable: BooleanConstructor;
12
+ showExpandIcon: {
13
+ type: BooleanConstructor;
14
+ default: true;
15
+ };
12
16
  modelValue: BooleanConstructor;
13
17
  expandText: StringConstructor;
14
18
  collapseText: StringConstructor;
@@ -23,6 +27,10 @@ declare const _default: import("vue").DefineComponent<{
23
27
  required: BooleanConstructor;
24
28
  actionText: StringConstructor;
25
29
  expandable: BooleanConstructor;
30
+ showExpandIcon: {
31
+ type: BooleanConstructor;
32
+ default: true;
33
+ };
26
34
  modelValue: BooleanConstructor;
27
35
  expandText: StringConstructor;
28
36
  collapseText: StringConstructor;
@@ -35,6 +43,10 @@ declare const _default: import("vue").DefineComponent<{
35
43
  required: BooleanConstructor;
36
44
  actionText: StringConstructor;
37
45
  expandable: BooleanConstructor;
46
+ showExpandIcon: {
47
+ type: BooleanConstructor;
48
+ default: true;
49
+ };
38
50
  modelValue: BooleanConstructor;
39
51
  expandText: StringConstructor;
40
52
  collapseText: StringConstructor;
@@ -47,5 +59,6 @@ declare const _default: import("vue").DefineComponent<{
47
59
  size: BlueMarkSize;
48
60
  modelValue: boolean;
49
61
  expandable: boolean;
62
+ showExpandIcon: boolean;
50
63
  }>;
51
64
  export default _default;
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, createVNode as _createVNode, createTextVNode as _createTextVNode } from "vue";
2
- import { createNamespace, numericProp } from "../utils/index.mjs";
2
+ import { createNamespace, numericProp, truthProp } from "../utils/index.mjs";
3
3
  import BlueMark from "./BlueMark.mjs";
4
4
  import CollapseToggle from "./CollapseToggle.mjs";
5
5
  const [name, bem] = createNamespace("blue-mark-header");
@@ -12,6 +12,7 @@ const blueMarkHeaderProps = {
12
12
  required: Boolean,
13
13
  actionText: String,
14
14
  expandable: Boolean,
15
+ showExpandIcon: truthProp,
15
16
  modelValue: Boolean,
16
17
  expandText: String,
17
18
  collapseText: String
@@ -73,6 +74,7 @@ var stdin_default = defineComponent({
73
74
  "modelValue": props.modelValue,
74
75
  "expandText": props.expandText,
75
76
  "collapseText": props.collapseText,
77
+ "showIcon": props.showExpandIcon,
76
78
  "onUpdate:modelValue": onChange
77
79
  }, null)]);
78
80
  };
@@ -2,6 +2,10 @@ import { type ExtractPropTypes } from 'vue';
2
2
  declare const collapseToggleProps: {
3
3
  modelValue: BooleanConstructor;
4
4
  divider: BooleanConstructor;
5
+ showIcon: {
6
+ type: BooleanConstructor;
7
+ default: boolean;
8
+ };
5
9
  expandText: {
6
10
  type: import("vue").PropType<string>;
7
11
  default: string;
@@ -15,6 +19,10 @@ export declare type CollapseToggleProps = ExtractPropTypes<typeof collapseToggle
15
19
  declare const _default: import("vue").DefineComponent<{
16
20
  modelValue: BooleanConstructor;
17
21
  divider: BooleanConstructor;
22
+ showIcon: {
23
+ type: BooleanConstructor;
24
+ default: boolean;
25
+ };
18
26
  expandText: {
19
27
  type: import("vue").PropType<string>;
20
28
  default: string;
@@ -26,6 +34,10 @@ declare const _default: import("vue").DefineComponent<{
26
34
  }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("change" | "update:modelValue")[], "change" | "update:modelValue", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
27
35
  modelValue: BooleanConstructor;
28
36
  divider: BooleanConstructor;
37
+ showIcon: {
38
+ type: BooleanConstructor;
39
+ default: boolean;
40
+ };
29
41
  expandText: {
30
42
  type: import("vue").PropType<string>;
31
43
  default: string;
@@ -38,6 +50,7 @@ declare const _default: import("vue").DefineComponent<{
38
50
  onChange?: ((...args: any[]) => any) | undefined;
39
51
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
40
52
  }, {
53
+ showIcon: boolean;
41
54
  modelValue: boolean;
42
55
  divider: boolean;
43
56
  expandText: string;
@@ -6,6 +6,10 @@ const [name, bem] = createNamespace("collapse-toggle");
6
6
  const collapseToggleProps = {
7
7
  modelValue: Boolean,
8
8
  divider: Boolean,
9
+ showIcon: {
10
+ type: Boolean,
11
+ default: true
12
+ },
9
13
  expandText: makeStringProp("\u5C55\u5F00"),
10
14
  collapseText: makeStringProp("\u6536\u8D77")
11
15
  };
@@ -37,7 +41,7 @@ var stdin_default = defineComponent({
37
41
  }, [_createVNode("span", null, [((_a = slots.default) == null ? void 0 : _a.call(slots, {
38
42
  expanded,
39
43
  text
40
- })) || text]), _createVNode(Icon, {
44
+ })) || text]), props.showIcon && _createVNode(Icon, {
41
45
  "name": "arrow-down",
42
46
  "class": bem("icon")
43
47
  }, null)]);
@@ -37,6 +37,10 @@ export declare const BlueMarkHeader: import("../utils").WithInstall<import("vue"
37
37
  required: BooleanConstructor;
38
38
  actionText: StringConstructor;
39
39
  expandable: BooleanConstructor;
40
+ showExpandIcon: {
41
+ type: BooleanConstructor;
42
+ default: true;
43
+ };
40
44
  modelValue: BooleanConstructor;
41
45
  expandText: StringConstructor;
42
46
  collapseText: StringConstructor;
@@ -49,6 +53,10 @@ export declare const BlueMarkHeader: import("../utils").WithInstall<import("vue"
49
53
  required: BooleanConstructor;
50
54
  actionText: StringConstructor;
51
55
  expandable: BooleanConstructor;
56
+ showExpandIcon: {
57
+ type: BooleanConstructor;
58
+ default: true;
59
+ };
52
60
  modelValue: BooleanConstructor;
53
61
  expandText: StringConstructor;
54
62
  collapseText: StringConstructor;
@@ -61,10 +69,15 @@ export declare const BlueMarkHeader: import("../utils").WithInstall<import("vue"
61
69
  size: import("./BlueMark").BlueMarkSize;
62
70
  modelValue: boolean;
63
71
  expandable: boolean;
72
+ showExpandIcon: boolean;
64
73
  }>>;
65
74
  export declare const CollapseToggle: import("../utils").WithInstall<import("vue").DefineComponent<{
66
75
  modelValue: BooleanConstructor;
67
76
  divider: BooleanConstructor;
77
+ showIcon: {
78
+ type: BooleanConstructor;
79
+ default: boolean;
80
+ };
68
81
  expandText: {
69
82
  type: import("vue").PropType<string>;
70
83
  default: string;
@@ -76,6 +89,10 @@ export declare const CollapseToggle: import("../utils").WithInstall<import("vue"
76
89
  }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("change" | "update:modelValue")[], "change" | "update:modelValue", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
77
90
  modelValue: BooleanConstructor;
78
91
  divider: BooleanConstructor;
92
+ showIcon: {
93
+ type: BooleanConstructor;
94
+ default: boolean;
95
+ };
79
96
  expandText: {
80
97
  type: import("vue").PropType<string>;
81
98
  default: string;
@@ -88,6 +105,7 @@ export declare const CollapseToggle: import("../utils").WithInstall<import("vue"
88
105
  onChange?: ((...args: any[]) => any) | undefined;
89
106
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
90
107
  }, {
108
+ showIcon: boolean;
91
109
  modelValue: boolean;
92
110
  divider: boolean;
93
111
  expandText: string;
@@ -35,6 +35,18 @@ declare const checkboxPanelProps: {
35
35
  type: PropType<string>;
36
36
  default: string;
37
37
  };
38
+ selectedText: {
39
+ type: PropType<string>;
40
+ default: string;
41
+ };
42
+ collapseSelectedText: {
43
+ type: PropType<string>;
44
+ default: string;
45
+ };
46
+ clearSelectedText: {
47
+ type: PropType<string>;
48
+ default: string;
49
+ };
38
50
  };
39
51
  export declare type CheckboxPanelProps = ExtractPropTypes<typeof checkboxPanelProps>;
40
52
  declare const _default: import("vue").DefineComponent<{
@@ -68,7 +80,19 @@ declare const _default: import("vue").DefineComponent<{
68
80
  type: PropType<string>;
69
81
  default: string;
70
82
  };
71
- }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("search" | "update:modelValue" | "load" | "update:show" | "confirm" | "filter" | "update:error" | "update:loading")[], "search" | "filter" | "update:modelValue" | "load" | "update:show" | "confirm" | "update:error" | "update:loading", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
83
+ selectedText: {
84
+ type: PropType<string>;
85
+ default: string;
86
+ };
87
+ collapseSelectedText: {
88
+ type: PropType<string>;
89
+ default: string;
90
+ };
91
+ clearSelectedText: {
92
+ type: PropType<string>;
93
+ default: string;
94
+ };
95
+ }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("search" | "update:modelValue" | "load" | "update:show" | "confirm" | "filter" | "update:error" | "update:loading" | "show-selected")[], "search" | "filter" | "update:modelValue" | "load" | "update:show" | "confirm" | "update:error" | "update:loading" | "show-selected", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
72
96
  show: BooleanConstructor;
73
97
  title: StringConstructor;
74
98
  options: {
@@ -99,6 +123,18 @@ declare const _default: import("vue").DefineComponent<{
99
123
  type: PropType<string>;
100
124
  default: string;
101
125
  };
126
+ selectedText: {
127
+ type: PropType<string>;
128
+ default: string;
129
+ };
130
+ collapseSelectedText: {
131
+ type: PropType<string>;
132
+ default: string;
133
+ };
134
+ clearSelectedText: {
135
+ type: PropType<string>;
136
+ default: string;
137
+ };
102
138
  }>> & {
103
139
  onLoad?: ((...args: any[]) => any) | undefined;
104
140
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
@@ -108,6 +144,7 @@ declare const _default: import("vue").DefineComponent<{
108
144
  "onUpdate:loading"?: ((...args: any[]) => any) | undefined;
109
145
  onSearch?: ((...args: any[]) => any) | undefined;
110
146
  onFilter?: ((...args: any[]) => any) | undefined;
147
+ "onShow-selected"?: ((...args: any[]) => any) | undefined;
111
148
  }, {
112
149
  show: boolean;
113
150
  error: boolean;
@@ -121,5 +158,8 @@ declare const _default: import("vue").DefineComponent<{
121
158
  lazy: boolean;
122
159
  selectAllText: string;
123
160
  cancelSelectAllText: string;
161
+ selectedText: string;
162
+ collapseSelectedText: string;
163
+ clearSelectedText: string;
124
164
  }>;
125
165
  export default _default;
@@ -1,4 +1,4 @@
1
- import { computed, defineComponent, ref, createVNode as _createVNode } from "vue";
1
+ import { computed, defineComponent, ref, watch, createVNode as _createVNode } from "vue";
2
2
  import { createNamespace, makeArrayProp, makeStringProp } from "../utils/index.mjs";
3
3
  import { ActionSheet } from "../action-sheet/index.mjs";
4
4
  import { NavBar } from "../nav-bar/index.mjs";
@@ -31,18 +31,23 @@ const checkboxPanelProps = {
31
31
  errorText: String,
32
32
  confirmText: makeStringProp("\u786E\u5B9A"),
33
33
  selectAllText: makeStringProp("\u5168\u9009"),
34
- cancelSelectAllText: makeStringProp("\u53D6\u6D88\u5168\u9009")
34
+ cancelSelectAllText: makeStringProp("\u53D6\u6D88\u5168\u9009"),
35
+ selectedText: makeStringProp("\u5C55\u5F00\u5DF2\u9009"),
36
+ collapseSelectedText: makeStringProp("\u6536\u8D77\u5DF2\u9009"),
37
+ clearSelectedText: makeStringProp("\u6E05\u7A7A\u5DF2\u9009")
35
38
  };
36
39
  var stdin_default = defineComponent({
37
40
  name,
38
41
  props: checkboxPanelProps,
39
- emits: ["update:show", "update:modelValue", "update:loading", "update:error", "confirm", "search", "filter", "load"],
42
+ emits: ["update:show", "update:modelValue", "update:loading", "update:error", "confirm", "search", "filter", "load", "show-selected"],
40
43
  setup(props, {
41
44
  emit,
42
45
  slots
43
46
  }) {
44
47
  const keyword = ref("");
48
+ const expandedSelected = ref(false);
45
49
  const selectedValues = computed(() => props.modelValue || []);
50
+ const selectedOptions = computed(() => props.options.filter((option) => selectedValues.value.includes(option.value)));
46
51
  const filteredOptions = computed(() => {
47
52
  const query = keyword.value.trim().toLocaleLowerCase();
48
53
  if (!query)
@@ -52,23 +57,51 @@ var stdin_default = defineComponent({
52
57
  const selectableOptions = computed(() => filteredOptions.value.filter((option) => !option.disabled));
53
58
  const isAllSelected = computed(() => selectableOptions.value.length > 0 && selectableOptions.value.every((option) => selectedValues.value.includes(option.value)));
54
59
  const close = () => emit("update:show", false);
60
+ const updateSelectedValues = (values) => {
61
+ if (!values.length)
62
+ expandedSelected.value = false;
63
+ emit("update:modelValue", values);
64
+ };
55
65
  const toggleOption = (option) => {
56
66
  if (option.disabled)
57
67
  return;
58
68
  const values = [...selectedValues.value];
59
69
  const index = values.indexOf(option.value);
60
70
  index === -1 ? values.push(option.value) : values.splice(index, 1);
61
- emit("update:modelValue", values);
71
+ updateSelectedValues(values);
62
72
  };
63
73
  const toggleAll = () => {
64
74
  const selectableValues = selectableOptions.value.map((option) => option.value);
65
75
  const values = isAllSelected.value ? selectedValues.value.filter((value) => !selectableValues.includes(value)) : [.../* @__PURE__ */ new Set([...selectedValues.value, ...selectableValues])];
66
- emit("update:modelValue", values);
76
+ updateSelectedValues(values);
67
77
  };
78
+ const removeSelected = (option) => {
79
+ updateSelectedValues(selectedValues.value.filter((value) => value !== option.value));
80
+ };
81
+ const clearSelected = () => updateSelectedValues([]);
68
82
  const confirm = () => {
69
83
  emit("confirm", selectedValues.value);
70
84
  close();
71
85
  };
86
+ const renderFilterAction = () => {
87
+ if (slots.filter)
88
+ return slots.filter();
89
+ if (!props.filterable)
90
+ return;
91
+ return _createVNode("button", {
92
+ "type": "button",
93
+ "class": bem("filter"),
94
+ "aria-label": "\u7B5B\u9009",
95
+ "onClick": () => emit("filter")
96
+ }, [_createVNode(Badge, {
97
+ "dot": props.filterActive
98
+ }, {
99
+ default: () => [_createVNode(Icon, {
100
+ "name": "filter-o",
101
+ "size": "22"
102
+ }, null)]
103
+ })]);
104
+ };
72
105
  const renderOptionLabel = (label) => {
73
106
  const query = keyword.value.trim();
74
107
  if (!query)
@@ -105,6 +138,10 @@ var stdin_default = defineComponent({
105
138
  }))]
106
139
  });
107
140
  };
141
+ watch(selectedValues, (values) => {
142
+ if (!values.length)
143
+ expandedSelected.value = false;
144
+ });
108
145
  return () => _createVNode(ActionSheet, {
109
146
  "show": props.show,
110
147
  "class": bem(),
@@ -124,25 +161,7 @@ var stdin_default = defineComponent({
124
161
  "size": "22",
125
162
  "onClick": close
126
163
  }, null),
127
- right: () => {
128
- if (slots.filter)
129
- return slots.filter();
130
- if (!props.filterable)
131
- return;
132
- return _createVNode("button", {
133
- "type": "button",
134
- "class": bem("filter"),
135
- "aria-label": "\u7B5B\u9009",
136
- "onClick": () => emit("filter")
137
- }, [_createVNode(Badge, {
138
- "dot": props.filterActive
139
- }, {
140
- default: () => [_createVNode(Icon, {
141
- "name": "filter-o",
142
- "size": "22"
143
- }, null)]
144
- })]);
145
- }
164
+ right: renderFilterAction
146
165
  })]), props.searchable && _createVNode(Search, {
147
166
  "modelValue": keyword.value,
148
167
  "class": bem("search"),
@@ -173,11 +192,54 @@ var stdin_default = defineComponent({
173
192
  "class": bem("footer")
174
193
  }, [_createVNode(BottomActionBar, {
175
194
  "fixed": false,
195
+ "moreIcon": "passed",
196
+ "moreText": expandedSelected.value ? props.collapseSelectedText : props.selectedText,
197
+ "moreBadge": selectedValues.value.length,
198
+ "moreBadgeMax": 99,
176
199
  "secondaryText": isAllSelected.value ? props.cancelSelectAllText : props.selectAllText,
200
+ "secondaryDisabled": !selectableOptions.value.length,
177
201
  "confirmText": props.confirmText,
202
+ "moreDisabled": !selectedValues.value.length,
203
+ "confirmDisabled": !selectedValues.value.length,
178
204
  "onSecondary": toggleAll,
205
+ "onMore": () => {
206
+ expandedSelected.value = !expandedSelected.value;
207
+ emit("show-selected", selectedValues.value);
208
+ },
179
209
  "onConfirm": confirm
180
- }, null)])])]
210
+ }, null), expandedSelected.value && _createVNode("div", {
211
+ "class": bem("selected-panel")
212
+ }, [_createVNode("div", {
213
+ "class": bem("selected-header")
214
+ }, [_createVNode("button", {
215
+ "type": "button",
216
+ "class": bem("clear"),
217
+ "onClick": clearSelected
218
+ }, [props.clearSelectedText]), _createVNode("button", {
219
+ "type": "button",
220
+ "class": bem("collapse"),
221
+ "onClick": () => {
222
+ expandedSelected.value = false;
223
+ }
224
+ }, [props.collapseSelectedText, _createVNode(Icon, {
225
+ "name": "arrow-down"
226
+ }, null)])]), _createVNode("div", {
227
+ "class": bem("selected-list")
228
+ }, [selectedOptions.value.map((option) => _createVNode(Cell, {
229
+ "key": option.value,
230
+ "title": option.label,
231
+ "class": bem("selected-item"),
232
+ "border": false
233
+ }, {
234
+ "right-icon": () => _createVNode("button", {
235
+ "type": "button",
236
+ "class": bem("remove"),
237
+ "aria-label": `\u79FB\u9664${option.label}`,
238
+ "onClick": () => removeSelected(option)
239
+ }, [_createVNode(Icon, {
240
+ "name": "cross"
241
+ }, null)])
242
+ }))])])])])]
181
243
  });
182
244
  }
183
245
  });
@@ -1 +1 @@
1
- .van-checkbox-panel{box-sizing:border-box;display:flex;height:calc(100% - 96px);max-height:calc(100% - 96px);overflow:hidden;background:var(--van-gray-1)}.van-checkbox-panel .van-action-sheet__content{display:flex;flex:1;min-height:0;gap:0;padding:0;overflow:hidden}.van-checkbox-panel__content{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden;background:var(--van-gray-1)}.van-checkbox-panel__nav-wrapper{flex:none;width:100%;min-width:0;max-width:100%;overflow:hidden}.van-checkbox-panel__nav{box-sizing:border-box;width:100%;min-width:0;max-width:100%;overflow:hidden;--van-nav-bar-background-color: var(--van-gray-1)}.van-checkbox-panel__nav .van-nav-bar__content{box-sizing:border-box;width:100%;overflow:hidden}.van-checkbox-panel__nav .van-nav-bar__left--slot,.van-checkbox-panel__nav .van-nav-bar__right--slot{padding:0}.van-checkbox-panel__nav .van-nav-bar__left--slot{left:var(--van-padding-md)}.van-checkbox-panel__nav .van-nav-bar__right--slot{right:var(--van-padding-md)}.van-checkbox-panel__filter{display:flex;align-items:center;justify-content:center;width:34px;height:46px;padding:0;color:inherit;background:transparent;border:0}.van-checkbox-panel__search{--van-search-padding: 8px var(--van-padding-md);--van-search-background-color: var(--van-gray-1);--van-search-content-background-color: var(--van-white)}.van-checkbox-panel__match{color:var(--van-primary-color)}.van-checkbox-panel__body{flex:1;min-height:0;padding:0 var(--van-padding-md);overflow-y:auto}.van-checkbox-panel__card{overflow:hidden;background:var(--van-white);border-radius:var(--van-border-radius-lg)}.van-checkbox-panel__footer{flex:none}.van-checkbox-panel .van-cell{min-height:44px}.van-checkbox-panel .van-checkbox{margin:0}
1
+ .van-checkbox-panel{box-sizing:border-box;display:flex;height:calc(100% - 96px);max-height:calc(100% - 96px);overflow:hidden;background:var(--van-gray-1)}.van-checkbox-panel .van-action-sheet__content{display:flex;flex:1;min-height:0;gap:0;padding:0;overflow:hidden}.van-checkbox-panel__content{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden;background:var(--van-gray-1)}.van-checkbox-panel__nav-wrapper{flex:none;width:100%;min-width:0;max-width:100%;overflow:hidden}.van-checkbox-panel__nav{box-sizing:border-box;width:100%;min-width:0;max-width:100%;overflow:hidden;--van-nav-bar-background-color: var(--van-gray-1)}.van-checkbox-panel__nav .van-nav-bar__content{box-sizing:border-box;width:100%;overflow:hidden}.van-checkbox-panel__nav .van-nav-bar__left--slot,.van-checkbox-panel__nav .van-nav-bar__right--slot{padding:0}.van-checkbox-panel__nav .van-nav-bar__left--slot{left:var(--van-padding-md)}.van-checkbox-panel__nav .van-nav-bar__right--slot{right:var(--van-padding-md)}.van-checkbox-panel__filter{display:flex;align-items:center;justify-content:center;width:34px;height:46px;padding:0;color:inherit;background:transparent;border:0}.van-checkbox-panel__search{--van-search-padding: 8px var(--van-padding-md);--van-search-background-color: var(--van-gray-1);--van-search-content-background-color: var(--van-white)}.van-checkbox-panel__match{color:var(--van-primary-color)}.van-checkbox-panel__body{flex:1;min-height:0;padding:0 var(--van-padding-md);overflow-y:auto}.van-checkbox-panel__card{overflow:hidden;background:var(--van-white);border-radius:var(--van-border-radius-lg)}.van-checkbox-panel__footer{position:relative;flex:none;background:var(--van-white);box-shadow:0 -2px 5px rgba(27,33,41,.1)}.van-checkbox-panel__footer .van-bottom-action-bar{box-shadow:none}.van-checkbox-panel__footer .van-bottom-action-bar__secondary{flex:0 0 auto;width:auto;padding:0 var(--van-padding-md)}.van-checkbox-panel__selected-panel{position:absolute;right:0;bottom:60px;left:0;display:flex;flex-direction:column;max-height:min(340px,calc(100vh - 156px));overflow:hidden;background:var(--van-white);box-shadow:0 -2px 5px rgba(27,33,41,.1)}.van-checkbox-panel__selected-header{display:flex;flex:none;align-items:center;justify-content:space-between;padding:12px var(--van-padding-md) 4px}.van-checkbox-panel__clear,.van-checkbox-panel__collapse{display:inline-flex;align-items:center;padding:0;font:inherit;font-size:var(--van-font-size-md);line-height:var(--van-line-height-lg);background:transparent;border:0}.van-checkbox-panel__clear{color:var(--van-primary-color)}.van-checkbox-panel__collapse,.van-checkbox-panel__remove,.van-checkbox-panel__collapse .van-icon,.van-checkbox-panel__remove .van-icon{color:var(--van-gray-6)}.van-checkbox-panel__collapse{gap:2px}.van-checkbox-panel__selected-list{display:flex;flex:0 1 auto;flex-direction:column;gap:6px;min-height:0;padding:var(--van-padding-xs) var(--van-padding-md);overflow-y:auto;overscroll-behavior:contain}.van-checkbox-panel__selected-item{flex:none;min-height:44px;padding:11px var(--van-padding-md);background:var(--van-gray-1);border-radius:8px}.van-checkbox-panel__remove{display:inline-flex;align-self:flex-start;align-items:center;justify-content:center;width:22px;height:22px;padding:0;background:transparent;border:0}.van-checkbox-panel .van-cell{min-height:44px}.van-checkbox-panel .van-checkbox{margin:0}
@@ -29,7 +29,19 @@ export declare const CheckboxPanel: import("../utils").WithInstall<import("vue")
29
29
  type: import("vue").PropType<string>;
30
30
  default: string;
31
31
  };
32
- }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("search" | "update:modelValue" | "load" | "update:show" | "confirm" | "filter" | "update:error" | "update:loading")[], "search" | "filter" | "update:modelValue" | "load" | "update:show" | "confirm" | "update:error" | "update:loading", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
32
+ selectedText: {
33
+ type: import("vue").PropType<string>;
34
+ default: string;
35
+ };
36
+ collapseSelectedText: {
37
+ type: import("vue").PropType<string>;
38
+ default: string;
39
+ };
40
+ clearSelectedText: {
41
+ type: import("vue").PropType<string>;
42
+ default: string;
43
+ };
44
+ }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("search" | "update:modelValue" | "load" | "update:show" | "confirm" | "filter" | "update:error" | "update:loading" | "show-selected")[], "search" | "filter" | "update:modelValue" | "load" | "update:show" | "confirm" | "update:error" | "update:loading" | "show-selected", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
33
45
  show: BooleanConstructor;
34
46
  title: StringConstructor;
35
47
  options: {
@@ -60,6 +72,18 @@ export declare const CheckboxPanel: import("../utils").WithInstall<import("vue")
60
72
  type: import("vue").PropType<string>;
61
73
  default: string;
62
74
  };
75
+ selectedText: {
76
+ type: import("vue").PropType<string>;
77
+ default: string;
78
+ };
79
+ collapseSelectedText: {
80
+ type: import("vue").PropType<string>;
81
+ default: string;
82
+ };
83
+ clearSelectedText: {
84
+ type: import("vue").PropType<string>;
85
+ default: string;
86
+ };
63
87
  }>> & {
64
88
  onLoad?: ((...args: any[]) => any) | undefined;
65
89
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
@@ -69,6 +93,7 @@ export declare const CheckboxPanel: import("../utils").WithInstall<import("vue")
69
93
  "onUpdate:loading"?: ((...args: any[]) => any) | undefined;
70
94
  onSearch?: ((...args: any[]) => any) | undefined;
71
95
  onFilter?: ((...args: any[]) => any) | undefined;
96
+ "onShow-selected"?: ((...args: any[]) => any) | undefined;
72
97
  }, {
73
98
  show: boolean;
74
99
  error: boolean;
@@ -82,6 +107,9 @@ export declare const CheckboxPanel: import("../utils").WithInstall<import("vue")
82
107
  lazy: boolean;
83
108
  selectAllText: string;
84
109
  cancelSelectAllText: string;
110
+ selectedText: string;
111
+ collapseSelectedText: string;
112
+ clearSelectedText: string;
85
113
  }>>;
86
114
  export default CheckboxPanel;
87
115
  export type { CheckboxPanelProps, CheckboxPanelOption } from './CheckboxPanel';