pxd 0.0.55 → 0.0.61

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 (279) hide show
  1. package/README.md +18 -4
  2. package/dist/components/_internal/fragment-container.vue +3 -2
  3. package/dist/components/active-graph/index.d.vue.ts +2 -3
  4. package/dist/components/active-graph/index.vue +23 -16
  5. package/dist/components/active-graph/types.d.ts +4 -3
  6. package/dist/components/avatar/index.vue +19 -10
  7. package/dist/components/avatar/types.d.ts +0 -12
  8. package/dist/components/avatar-group/index.d.vue.ts +2 -2
  9. package/dist/components/avatar-group/index.vue +4 -3
  10. package/dist/components/avatar-group/types.d.ts +11 -0
  11. package/dist/components/badge/index.d.vue.ts +1 -1
  12. package/dist/components/badge/index.vue +47 -3
  13. package/dist/components/badge/types.d.ts +24 -1
  14. package/dist/components/book/index.vue +3 -2
  15. package/dist/components/browser/index.vue +6 -2
  16. package/dist/components/button/index.d.vue.ts +1 -1
  17. package/dist/components/button/index.vue +60 -12
  18. package/dist/components/carousel/index.d.vue.ts +24 -2
  19. package/dist/components/carousel/index.vue +341 -28
  20. package/dist/components/carousel/types.d.ts +2 -2
  21. package/dist/components/carousel-item/index.d.vue.ts +13 -0
  22. package/dist/components/carousel-item/index.vue +49 -0
  23. package/dist/components/checkbox/index.d.vue.ts +1 -5
  24. package/dist/components/checkbox/index.vue +66 -31
  25. package/dist/components/checkbox/types.d.ts +2 -14
  26. package/dist/components/checkbox-group/index.d.vue.ts +2 -7
  27. package/dist/components/checkbox-group/index.vue +11 -29
  28. package/dist/components/checkbox-group/types.d.ts +12 -0
  29. package/dist/components/chip/index.d.vue.ts +1 -1
  30. package/dist/components/chip/index.vue +31 -2
  31. package/dist/components/choicebox/index.d.vue.ts +11 -5
  32. package/dist/components/choicebox/index.vue +36 -54
  33. package/dist/components/choicebox/types.d.ts +11 -18
  34. package/dist/components/choicebox-item/index.d.vue.ts +16 -0
  35. package/dist/components/choicebox-item/index.vue +67 -0
  36. package/dist/components/choicebox-item/types.d.ts +12 -0
  37. package/dist/components/collapse/index.d.vue.ts +5 -4
  38. package/dist/components/collapse/index.vue +47 -30
  39. package/dist/components/collapse/types.d.ts +2 -5
  40. package/dist/components/collapse-group/index.d.vue.ts +2 -4
  41. package/dist/components/collapse-group/index.vue +8 -20
  42. package/dist/components/collapse-group/types.d.ts +6 -0
  43. package/dist/components/command-menu/index.vue +6 -7
  44. package/dist/components/command-menu/types.d.ts +0 -5
  45. package/dist/components/command-menu-group/index.d.vue.ts +1 -1
  46. package/dist/components/command-menu-group/index.vue +3 -2
  47. package/dist/components/command-menu-group/types.d.ts +5 -0
  48. package/dist/components/config-provider/index.d.vue.ts +3 -3
  49. package/dist/components/config-provider/index.vue +6 -4
  50. package/dist/components/countdown/index.vue +3 -2
  51. package/dist/components/countdown/types.d.ts +2 -2
  52. package/dist/components/dash-line/index.vue +3 -1
  53. package/dist/components/description/index.d.vue.ts +1 -1
  54. package/dist/components/description/index.vue +8 -7
  55. package/dist/components/description/types.d.ts +1 -1
  56. package/dist/components/drawer/index.d.vue.ts +3 -2
  57. package/dist/components/drawer/index.vue +20 -15
  58. package/dist/components/drawer/types.d.ts +3 -3
  59. package/dist/components/ellipsis-text/index.d.vue.ts +14 -0
  60. package/dist/components/ellipsis-text/index.vue +242 -0
  61. package/dist/components/ellipsis-text/types.d.ts +14 -0
  62. package/dist/components/empty-state/index.vue +6 -2
  63. package/dist/components/error/index.d.vue.ts +1 -3
  64. package/dist/components/error/index.vue +21 -6
  65. package/dist/components/error/types.d.ts +7 -1
  66. package/dist/components/fader/index.vue +30 -11
  67. package/dist/components/fader/types.d.ts +2 -2
  68. package/dist/components/gauge/index.vue +7 -2
  69. package/dist/components/grid/index.vue +9 -4
  70. package/dist/components/grid/types.d.ts +0 -5
  71. package/dist/components/grid-item/index.d.vue.ts +1 -1
  72. package/dist/components/grid-item/index.vue +16 -8
  73. package/dist/components/grid-item/types.d.ts +6 -0
  74. package/dist/components/hold-button/index.d.vue.ts +2 -2
  75. package/dist/components/hold-button/index.vue +1 -1
  76. package/dist/components/index.d.ts +7 -3
  77. package/dist/components/index.js +7 -3
  78. package/dist/components/input/index.d.vue.ts +8 -8
  79. package/dist/components/input/index.vue +54 -21
  80. package/dist/components/input/types.d.ts +7 -10
  81. package/dist/components/intersection-observer/index.d.vue.ts +0 -1
  82. package/dist/components/intersection-observer/index.vue +12 -3
  83. package/dist/components/kbd/index.vue +1 -1
  84. package/dist/components/link-button/index.d.vue.ts +1 -1
  85. package/dist/components/link-button/index.vue +4 -6
  86. package/dist/components/link-button/types.d.ts +1 -1
  87. package/dist/components/list/index.d.vue.ts +8 -5
  88. package/dist/components/list/index.vue +50 -54
  89. package/dist/components/list/types.d.ts +3 -20
  90. package/dist/components/list-item/index.d.vue.ts +3 -2
  91. package/dist/components/list-item/index.vue +44 -18
  92. package/dist/components/list-item/types.d.ts +15 -0
  93. package/dist/components/loading-bar/index.vue +33 -2
  94. package/dist/components/loading-bar/types.d.ts +1 -1
  95. package/dist/components/loading-dots/index.vue +3 -2
  96. package/dist/components/menu/index.d.vue.ts +5 -2
  97. package/dist/components/menu/index.vue +4 -1
  98. package/dist/components/menu/types.d.ts +5 -0
  99. package/dist/components/message/index.d.vue.ts +11 -8
  100. package/dist/components/message/index.vue +4 -12
  101. package/dist/components/message/types.d.ts +1 -12
  102. package/dist/components/message-item/index.d.vue.ts +1 -3
  103. package/dist/components/message-item/index.vue +13 -7
  104. package/dist/components/message-item/types.d.ts +11 -0
  105. package/dist/components/modal/index.d.vue.ts +3 -2
  106. package/dist/components/modal/index.vue +17 -13
  107. package/dist/components/modal/types.d.ts +3 -3
  108. package/dist/components/noise-background/index.vue +4 -3
  109. package/dist/components/note/index.d.vue.ts +1 -2
  110. package/dist/components/note/index.vue +81 -29
  111. package/dist/components/note/types.d.ts +10 -2
  112. package/dist/components/number-input/index.d.vue.ts +5 -4
  113. package/dist/components/number-input/index.vue +36 -6
  114. package/dist/components/number-input/types.d.ts +2 -0
  115. package/dist/components/overlay/index.vue +1 -1
  116. package/dist/components/overlay/types.d.ts +1 -1
  117. package/dist/components/pagination/index.vue +5 -3
  118. package/dist/components/pin-input/index.d.vue.ts +6 -1
  119. package/dist/components/pin-input/index.vue +60 -23
  120. package/dist/components/pin-input/types.d.ts +0 -4
  121. package/dist/components/placeholder/index.vue +14 -11
  122. package/dist/components/popover/index.vue +116 -78
  123. package/dist/components/popover/types.d.ts +1 -0
  124. package/dist/components/progress/index.d.vue.ts +1 -1
  125. package/dist/components/progress/index.vue +15 -2
  126. package/dist/components/project-banner/index.d.vue.ts +18 -0
  127. package/dist/components/project-banner/index.vue +59 -0
  128. package/dist/components/project-banner/types.d.ts +8 -0
  129. package/dist/components/radio/index.vue +62 -20
  130. package/dist/components/radio/types.d.ts +1 -14
  131. package/dist/components/radio-group/index.d.vue.ts +2 -4
  132. package/dist/components/radio-group/index.vue +11 -16
  133. package/dist/components/radio-group/types.d.ts +12 -0
  134. package/dist/components/resizable/types.d.ts +5 -10
  135. package/dist/components/resizable-handle/index.vue +1 -1
  136. package/dist/components/resizable-panel/index.d.vue.ts +1 -1
  137. package/dist/components/resizable-panel/index.vue +7 -2
  138. package/dist/components/resizable-panel/types.d.ts +4 -0
  139. package/dist/components/scrollable/index.d.vue.ts +29 -0
  140. package/dist/components/scrollable/index.vue +98 -83
  141. package/dist/components/scrollable/types.d.ts +19 -6
  142. package/dist/components/skeleton/index.vue +24 -1
  143. package/dist/components/slider/index.d.vue.ts +6 -6
  144. package/dist/components/slider/index.vue +86 -44
  145. package/dist/components/slider/types.d.ts +1 -1
  146. package/dist/components/snippet/index.vue +28 -2
  147. package/dist/components/spinner/index.vue +4 -2
  148. package/dist/components/stack/index.d.vue.ts +2 -2
  149. package/dist/components/stack/index.vue +35 -3
  150. package/dist/components/stack/types.d.ts +1 -1
  151. package/dist/components/status-dot/index.vue +5 -1
  152. package/dist/components/switch/index.d.vue.ts +10 -1
  153. package/dist/components/switch/index.vue +35 -44
  154. package/dist/components/switch/types.d.ts +4 -12
  155. package/dist/components/switch-item/index.d.vue.ts +14 -0
  156. package/dist/components/switch-item/index.vue +79 -0
  157. package/dist/components/switch-item/types.d.ts +9 -0
  158. package/dist/components/teleport/index.d.vue.ts +1 -1
  159. package/dist/components/teleport/index.vue +1 -1
  160. package/dist/components/teleport/types.d.ts +1 -1
  161. package/dist/components/text/index.d.vue.ts +1 -2
  162. package/dist/components/text/index.vue +36 -22
  163. package/dist/components/text/types.d.ts +1 -1
  164. package/dist/components/textarea/index.d.vue.ts +4 -4
  165. package/dist/components/textarea/index.vue +33 -4
  166. package/dist/components/textarea/types.d.ts +0 -1
  167. package/dist/components/time-picker/index.d.vue.ts +1 -2
  168. package/dist/components/time-picker/index.vue +43 -9
  169. package/dist/components/time-picker/types.d.ts +1 -2
  170. package/dist/components/toggle/index.vue +11 -10
  171. package/dist/components/toggle-button/index.d.vue.ts +22 -0
  172. package/dist/components/toggle-button/index.vue +110 -0
  173. package/dist/components/toggle-button/types.d.ts +16 -0
  174. package/dist/components/{choicebox-group → toggle-button-group}/index.d.vue.ts +5 -5
  175. package/dist/components/toggle-button-group/index.vue +68 -0
  176. package/dist/components/toggle-button-group/types.d.ts +22 -0
  177. package/dist/components/tooltip/index.d.vue.ts +2 -0
  178. package/dist/components/tooltip/index.vue +9 -3
  179. package/dist/components/tooltip/types.d.ts +3 -2
  180. package/dist/components/virtual-list/index.d.vue.ts +25 -4
  181. package/dist/components/virtual-list/index.vue +66 -10
  182. package/dist/components/virtual-list/types.d.ts +9 -4
  183. package/dist/composables/index.d.ts +2 -2
  184. package/dist/composables/index.js +2 -2
  185. package/dist/composables/use-browser-observer.d.ts +5 -5
  186. package/dist/composables/use-browser-observer.js +23 -20
  187. package/dist/composables/use-copy-click.js +4 -0
  188. package/dist/composables/use-countdown.d.ts +2 -2
  189. package/dist/composables/use-delay-destroy.d.ts +1 -1
  190. package/dist/composables/use-focus-trap.d.ts +7 -3
  191. package/dist/composables/use-focus-trap.js +19 -7
  192. package/dist/composables/use-forward-ref-expose.d.ts +2 -0
  193. package/dist/composables/use-forward-ref-expose.js +41 -0
  194. package/dist/composables/use-message.d.ts +4 -7
  195. package/dist/composables/use-model-value.d.ts +9 -8
  196. package/dist/composables/use-popover-responsive.d.ts +2 -2
  197. package/dist/composables/use-popover-responsive.js +3 -3
  198. package/dist/composables/use-repeat-action.d.ts +1 -1
  199. package/dist/composables/use-repeat-action.js +2 -2
  200. package/dist/composables/use-virtual-list.d.ts +21 -12
  201. package/dist/composables/use-virtual-list.js +90 -158
  202. package/dist/composables/use-window-size.d.ts +4 -0
  203. package/dist/composables/use-window-size.js +27 -0
  204. package/dist/contexts/avatar.d.ts +5 -2
  205. package/dist/contexts/carousel.d.ts +4 -4
  206. package/dist/contexts/carousel.js +1 -1
  207. package/dist/contexts/checkbox.d.ts +7 -2
  208. package/dist/contexts/choicebox.d.ts +8 -4
  209. package/dist/contexts/choicebox.js +1 -4
  210. package/dist/contexts/collapse.d.ts +5 -6
  211. package/dist/contexts/collapse.js +1 -1
  212. package/dist/contexts/config-provider.d.ts +5 -0
  213. package/dist/{composables/use-config-provider-context.js → contexts/config-provider.js} +8 -5
  214. package/dist/contexts/list.d.ts +1 -1
  215. package/dist/contexts/radio.d.ts +8 -2
  216. package/dist/contexts/resizable.d.ts +1 -1
  217. package/dist/contexts/switch.d.ts +8 -4
  218. package/dist/contexts/switch.js +1 -2
  219. package/dist/contexts/toggle-button.d.ts +7 -0
  220. package/dist/contexts/toggle-button.js +2 -0
  221. package/dist/styles/source.css +14 -2
  222. package/dist/styles/styles.css +2 -2
  223. package/dist/styles/tw.css +14 -2
  224. package/dist/types/shared/props.d.ts +1 -3
  225. package/dist/types/shared/utils.d.ts +0 -3
  226. package/dist/utils/context.d.ts +1 -0
  227. package/dist/utils/get.d.ts +1 -0
  228. package/dist/utils/get.js +14 -0
  229. package/dist/utils/ref.d.ts +1 -1
  230. package/dist/utils/responsive.js +2 -1
  231. package/dist/utils/throttle.js +9 -7
  232. package/dist/utils/uid.d.ts +1 -1
  233. package/dist/utils/uid.js +2 -2
  234. package/package.json +23 -21
  235. package/volar.d.ts +7 -3
  236. package/dist/components/badge/cn.d.ts +0 -90
  237. package/dist/components/badge/cn.js +0 -44
  238. package/dist/components/button/cn.d.ts +0 -121
  239. package/dist/components/button/cn.js +0 -55
  240. package/dist/components/carousel-group/index.d.vue.ts +0 -35
  241. package/dist/components/carousel-group/index.vue +0 -368
  242. package/dist/components/checkbox/cn.d.ts +0 -67
  243. package/dist/components/checkbox/cn.js +0 -31
  244. package/dist/components/chip/cn.d.ts +0 -49
  245. package/dist/components/chip/cn.js +0 -26
  246. package/dist/components/choicebox-group/index.vue +0 -65
  247. package/dist/components/error/cn.d.ts +0 -22
  248. package/dist/components/error/cn.js +0 -15
  249. package/dist/components/input/cn.d.ts +0 -73
  250. package/dist/components/input/cn.js +0 -36
  251. package/dist/components/list-item/cn.d.ts +0 -22
  252. package/dist/components/list-item/cn.js +0 -15
  253. package/dist/components/loading-bar/cn.d.ts +0 -70
  254. package/dist/components/loading-bar/cn.js +0 -32
  255. package/dist/components/note/cn.d.ts +0 -121
  256. package/dist/components/note/cn.js +0 -66
  257. package/dist/components/pin-input/cn.d.ts +0 -46
  258. package/dist/components/pin-input/cn.js +0 -25
  259. package/dist/components/progress/cn.d.ts +0 -19
  260. package/dist/components/progress/cn.js +0 -14
  261. package/dist/components/radio/cn.d.ts +0 -46
  262. package/dist/components/radio/cn.js +0 -42
  263. package/dist/components/skeleton/cn.d.ts +0 -43
  264. package/dist/components/skeleton/cn.js +0 -24
  265. package/dist/components/snippet/cn.d.ts +0 -52
  266. package/dist/components/snippet/cn.js +0 -27
  267. package/dist/components/stack/cn.d.ts +0 -70
  268. package/dist/components/stack/cn.js +0 -33
  269. package/dist/components/switch/cn.d.ts +0 -16
  270. package/dist/components/switch/cn.js +0 -13
  271. package/dist/components/switch-group/index.d.vue.ts +0 -23
  272. package/dist/components/switch-group/index.vue +0 -54
  273. package/dist/components/text/cn.d.ts +0 -67
  274. package/dist/components/text/cn.js +0 -34
  275. package/dist/components/textarea/cn.d.ts +0 -58
  276. package/dist/components/textarea/cn.js +0 -30
  277. package/dist/composables/use-config-provider-context.d.ts +0 -3
  278. package/dist/composables/use-unique-id-context.d.ts +0 -2
  279. package/dist/composables/use-unique-id-context.js +0 -11
@@ -1,7 +1,12 @@
1
+ import type { ComponentPosition } from '../../types/shared'
2
+ import type { ListOption, ListOptionSelected } from '../list/types'
3
+
1
4
  export interface MenuProps {
2
5
  width?: string | number
3
6
  options?: ListOption[]
4
7
  position?: ComponentPosition
8
+ showDelay?: number
9
+ hideDelay?: number
5
10
  closeOnPressEscape?: boolean
6
11
  }
7
12
 
@@ -1,11 +1,12 @@
1
- import type { MessageItemType } from '../../composables/use-message';
1
+ import type { MessageItemConfig } from '../../composables/use-message';
2
2
  import type { MessageProps } from './types';
3
- declare function getMessageById(id: MessageItemType['id']): {
3
+ declare function getMessageById(id: MessageItemConfig['id']): {
4
4
  index: number;
5
5
  message: null;
6
6
  } | {
7
7
  index: number;
8
8
  message: {
9
+ height?: number | undefined;
9
10
  _timerId?: {
10
11
  close: () => NodeJS.Timeout;
11
12
  hasRef: () => boolean;
@@ -53,12 +54,13 @@ declare function getMessageById(id: MessageItemType['id']): {
53
54
  }>)) | undefined;
54
55
  };
55
56
  };
56
- declare function pauseMessageById(id: MessageItemType['id']): void;
57
- declare function resumeMessageById(id: MessageItemType['id']): void;
58
- declare function closeMessageById(id: MessageItemType['id']): void;
57
+ declare function pauseMessageById(id: MessageItemConfig['id']): void;
58
+ declare function resumeMessageById(id: MessageItemConfig['id']): void;
59
+ declare function closeMessageById(id: MessageItemConfig['id']): void;
59
60
  declare function clearMessage(): void;
60
61
  declare const __VLS_export: import("vue").DefineComponent<MessageProps, {
61
62
  messages: import("vue").Ref<{
63
+ height?: number | undefined;
62
64
  _timerId?: {
63
65
  close: () => NodeJS.Timeout;
64
66
  hasRef: () => boolean;
@@ -104,7 +106,8 @@ declare const __VLS_export: import("vue").DefineComponent<MessageProps, {
104
106
  }>) | ((data: unknown) => string | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
105
107
  [key: string]: any;
106
108
  }>)) | undefined;
107
- }[], MessageItemType[] | {
109
+ }[], MessageItemConfig[] | {
110
+ height?: number | undefined;
108
111
  _timerId?: {
109
112
  close: () => NodeJS.Timeout;
110
113
  hasRef: () => boolean;
@@ -157,9 +160,9 @@ declare const __VLS_export: import("vue").DefineComponent<MessageProps, {
157
160
  close: typeof closeMessageById;
158
161
  clear: typeof clearMessage;
159
162
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
160
- close: (id: string | number | undefined) => any;
163
+ close: (id: MessageItemType) => any;
161
164
  }, string, import("vue").PublicProps, Readonly<MessageProps> & Readonly<{
162
- onClose?: ((id: string | number | undefined) => any) | undefined;
165
+ onClose?: ((id: MessageItemType) => any) | undefined;
163
166
  }>, {
164
167
  max: number;
165
168
  group: string;
@@ -8,7 +8,8 @@ import { isServer } from "../../utils/is";
8
8
  import PMessageItem from "../message-item/index.vue";
9
9
  import PTeleport from "../teleport/index.vue";
10
10
  defineOptions({
11
- name: "PMessage"
11
+ name: "PMessage",
12
+ inheritAttrs: false
12
13
  });
13
14
  const props = defineProps({
14
15
  max: { type: Number, required: false, default: 3 },
@@ -27,9 +28,8 @@ useDocumentHidden((isHidden) => {
27
28
  });
28
29
  const groupExpand = ref(props.expand);
29
30
  const groupMessages = ref([]);
30
- const messageItemsHeight = ref([]);
31
31
  const messageGroupStyle = computed(() => {
32
- const frontHeight = messageItemsHeight.value[0]?.height || 0;
32
+ const frontHeight = groupMessages.value[0]?.height || 0;
33
33
  const visibleItemCounts = Math.min(props.max, groupMessages.value.length);
34
34
  return {
35
35
  "--message-width": getCssUnitValue(props.width),
@@ -116,18 +116,11 @@ function closeMessageById(id) {
116
116
  message._timerId = void 0;
117
117
  }
118
118
  groupMessages.value.splice(index, 1);
119
- const heightIndex = messageItemsHeight.value.findIndex((h) => h.id === id);
120
- if (heightIndex !== -1) {
121
- messageItemsHeight.value.splice(heightIndex, 1);
122
- }
123
119
  if (!props.expand && groupMessages.value.length === 0) {
124
120
  groupExpand.value = false;
125
121
  }
126
122
  emits("close", id);
127
123
  }
128
- function setItemHeight(info) {
129
- messageItemsHeight.value.unshift(info);
130
- }
131
124
  function clearMessage() {
132
125
  groupMessages.value.forEach((m) => {
133
126
  if (m._timerId) {
@@ -136,7 +129,6 @@ function clearMessage() {
136
129
  }
137
130
  });
138
131
  groupMessages.value = [];
139
- messageItemsHeight.value = [];
140
132
  }
141
133
  function resolvePromiseMessage(handler, data) {
142
134
  if (!handler) {
@@ -299,6 +291,7 @@ defineExpose({
299
291
  :data-expand="groupExpand"
300
292
  :data-position="position"
301
293
  :style="messageGroupStyle"
294
+ v-bind="$attrs"
302
295
  >
303
296
  <TransitionGroup
304
297
  appear
@@ -316,7 +309,6 @@ defineExpose({
316
309
  :index="index"
317
310
  :item-data="item"
318
311
  @close="closeMessageById"
319
- @set-height="setItemHeight"
320
312
  />
321
313
  </TransitionGroup>
322
314
  </section>
@@ -1,5 +1,5 @@
1
1
  import type { MessageItemType } from '../../composables/use-message'
2
- import type { ComponentPosition } from '../../types/shared/props'
2
+ import type { ComponentPosition } from '../../types/shared'
3
3
 
4
4
  export interface MessageProps {
5
5
  max?: number
@@ -12,14 +12,3 @@ export interface MessageProps {
12
12
  export interface MessageEmits {
13
13
  close: [id: MessageItemType['id']]
14
14
  }
15
-
16
- export interface MessageItemProps {
17
- max: number
18
- index: number
19
- itemData: MessageItemType
20
- }
21
-
22
- export interface MessageItemEmits {
23
- close: [key: MessageItemType['id']]
24
- 'set-height': [info: MessageItemHeightType]
25
- }
@@ -1,10 +1,8 @@
1
- import type { MessageItemProps } from '../message/types';
1
+ import type { MessageItemProps } from './types';
2
2
  declare const __VLS_export: import("vue").DefineComponent<MessageItemProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
3
3
  close: (key: string | number | undefined) => any;
4
- "set-height": (info: MessageItemHeightType) => any;
5
4
  }, string, import("vue").PublicProps, Readonly<MessageItemProps> & Readonly<{
6
5
  onClose?: ((key: string | number | undefined) => any) | undefined;
7
- "onSet-height"?: ((info: MessageItemHeightType) => any) | undefined;
8
6
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
7
  declare const _default: typeof __VLS_export;
10
8
  export default _default;
@@ -5,7 +5,7 @@ import ErrorFillIcon from "@gdsicon/vue/cross-circle-fill";
5
5
  import InformationFillIcon from "@gdsicon/vue/information-fill";
6
6
  import LoadingIcon from "@gdsicon/vue/loader-circle";
7
7
  import WarningFillIcon from "@gdsicon/vue/warning-fill";
8
- import { computed, onMounted, shallowRef } from "vue";
8
+ import { computed, onMounted, shallowRef, watch } from "vue";
9
9
  import PButton from "../button/index.vue";
10
10
  defineOptions({
11
11
  name: "PMessageItem",
@@ -16,7 +16,7 @@ const props = defineProps({
16
16
  index: { type: Number, required: true },
17
17
  itemData: { type: Object, required: true }
18
18
  });
19
- const emits = defineEmits(["close", "set-height"]);
19
+ const emits = defineEmits(["close"]);
20
20
  const TYPE_ICONS = {
21
21
  info: InformationFillIcon,
22
22
  success: SuccessFillIcon,
@@ -46,12 +46,17 @@ function setItemHeightInfo() {
46
46
  return;
47
47
  }
48
48
  const rect = itemRef.value.getBoundingClientRect();
49
- const info = {
50
- id: props.itemData.id,
51
- height: rect.height
52
- };
53
- emits("set-height", info);
49
+ props.itemData.height = rect.height;
54
50
  }
51
+ watch(
52
+ () => props.itemData.message,
53
+ () => {
54
+ if (!itemRef.value) {
55
+ return;
56
+ }
57
+ setItemHeightInfo();
58
+ }
59
+ );
55
60
  onMounted(() => {
56
61
  setItemHeightInfo();
57
62
  });
@@ -66,6 +71,7 @@ onMounted(() => {
66
71
  :style="computedStyle"
67
72
  class="pxd-message--item px-3 py-2 text-sm flex w-full max-w-full shrink-0 transform-(--message-item-transform) rounded-lg bg-background-100 break-all whitespace-pre-wrap shadow-border-modal outline-none motion-safe:transition-(--message-item-transition)"
68
73
  :class="[itemData.class, { 'pr-9': itemData.closeable }]"
74
+ v-bind="$attrs"
69
75
  >
70
76
  <Component
71
77
  :is="TYPE_ICONS[itemData.type]"
@@ -0,0 +1,11 @@
1
+ import type { MessageItemConfig } from '../../composables/use-message'
2
+
3
+ export interface MessageItemProps {
4
+ max: number
5
+ index: number
6
+ itemData: MessageItemConfig
7
+ }
8
+
9
+ export interface MessageItemEmits {
10
+ close: [key: MessageItemConfig['id']]
11
+ }
@@ -28,10 +28,11 @@ declare const __VLS_base: import("vue").DefineComponent<ModalProps, {}, {}, {},
28
28
  }>, {
29
29
  modelValue: boolean;
30
30
  closeOnPressEscape: boolean;
31
+ autoFocusElement: string | boolean;
31
32
  appendToBody: boolean;
32
33
  closeOnClickOverlay: boolean;
33
- headerStylize: boolean;
34
- footerStylize: boolean;
34
+ defaultHeaderStyle: boolean;
35
+ defaultFooterStyle: boolean;
35
36
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
36
37
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
37
38
  declare const _default: typeof __VLS_export;
@@ -19,13 +19,13 @@ const props = defineProps({
19
19
  loading: { type: Boolean, required: false },
20
20
  modelValue: { type: Boolean, required: false, default: false },
21
21
  appendToBody: { type: Boolean, required: false, default: true },
22
- headerStylize: { type: Boolean, required: false, default: false },
23
- footerStylize: { type: Boolean, required: false, default: true },
24
22
  wrapperClass: { type: [String, Array, Object], required: false },
25
23
  contentClass: { type: [String, Array, Object], required: false },
24
+ autoFocusElement: { type: [String, Boolean], required: false, default: false },
25
+ defaultHeaderStyle: { type: Boolean, required: false, default: false },
26
+ defaultFooterStyle: { type: Boolean, required: false, default: true },
26
27
  closeOnPressEscape: { type: Boolean, required: false, default: false },
27
- closeOnClickOverlay: { type: Boolean, required: false, default: false },
28
- initialFocus: { type: [String, Boolean], required: false }
28
+ closeOnClickOverlay: { type: Boolean, required: false, default: false }
29
29
  });
30
30
  const emits = defineEmits(["show", "hide", "change", "visible-change", "outside-click", "update:modelValue"]);
31
31
  const modalRef = shallowRef();
@@ -33,11 +33,16 @@ const isVisible = useModelValue(props, emits);
33
33
  const computedStyle = computed(() => {
34
34
  return { "--modal-width": getCssUnitValue(props.width) };
35
35
  });
36
- useFocusTrap(modalRef, {
37
- initialFocus: props.initialFocus,
36
+ const defaultStyles = computed(() => ({
37
+ headerClass: props.defaultHeaderStyle ? "pb-4 sm:pb-6 border-b bg-background-200 dark:bg-background-100" : "",
38
+ footerClass: props.defaultFooterStyle ? "border-t pt-4 bg-background-200 dark:bg-background-100" : ""
39
+ }));
40
+ const focusTrapOptions = computed(() => ({
41
+ autoFocusElement: props.autoFocusElement,
38
42
  escapeDeactivates: props.closeOnPressEscape,
39
43
  clickOutsideDeactivates: props.closeOnClickOverlay
40
- });
44
+ }));
45
+ useFocusTrap(modalRef, focusTrapOptions);
41
46
  function closeOverlayIfNeed() {
42
47
  if (isTruthyProp(props.loading)) {
43
48
  return;
@@ -76,9 +81,10 @@ watch(
76
81
  <div
77
82
  v-if="isVisible"
78
83
  ref="modalRef"
79
- aria-modal="true"
80
84
  role="dialog"
81
85
  tabindex="-1"
86
+ aria-modal="true"
87
+ :aria-expanded="isVisible"
82
88
  class="pxd-modal group/modal left-0 translate-z-0 sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-xl sm:[--o:0] sm:[--t:scale(0.98)] sm:w-[var(--modal-width,540px)] max-sm:bottom-0 pointer-events-auto fixed z-10 flex w-full max-w-full flex-col overflow-hidden rounded-t-lg bg-background-100 shadow-border-modal outline-none motion-safe:transition-all dark:bg-background-200"
83
89
  :class="wrapperClass"
84
90
  :style="computedStyle"
@@ -86,9 +92,7 @@ watch(
86
92
  >
87
93
  <header
88
94
  class="pxd-modal--header px-6 pt-4 sm:pt-6 empty:py-3 relative shrink-0"
89
- :class="{
90
- 'pb-4 sm:pb-6 border-b bg-background-200 dark:bg-background-100': headerStylize
91
- }"
95
+ :class="defaultStyles.headerClass"
92
96
  >
93
97
  <slot name="header">
94
98
  <h3
@@ -117,8 +121,8 @@ watch(
117
121
 
118
122
  <footer
119
123
  v-if="$slots.footer"
120
- class="pxd-modal--footer p-4 gap-2 relative flex shrink-0 items-center justify-between"
121
- :class="{ 'border-t bg-background-200 dark:bg-background-100': footerStylize }"
124
+ class="pxd-modal--footer px-4 pb-4 gap-2 relative flex shrink-0 items-center justify-between"
125
+ :class="defaultStyles.footerClass"
122
126
  >
123
127
  <slot name="footer" />
124
128
  </footer>
@@ -7,13 +7,13 @@ export interface ModalProps {
7
7
  loading?: boolean
8
8
  modelValue?: boolean
9
9
  appendToBody?: boolean
10
- headerStylize?: boolean
11
- footerStylize?: boolean
12
10
  wrapperClass?: ComponentClass
13
11
  contentClass?: ComponentClass
12
+ autoFocusElement?: string | boolean
13
+ defaultHeaderStyle?: boolean
14
+ defaultFooterStyle?: boolean
14
15
  closeOnPressEscape?: boolean
15
16
  closeOnClickOverlay?: boolean
16
- initialFocus?: string | false
17
17
  }
18
18
 
19
19
  export interface ModalEmits {
@@ -1,14 +1,15 @@
1
1
  <script setup>
2
2
  defineOptions({
3
- name: "PNoiseBackground"
3
+ name: "PNoiseBackground",
4
+ inheritAttrs: false
4
5
  });
5
6
  defineProps({
6
- as: { type: null, required: false, default: "div" }
7
+ as: { type: [String, Object], required: false, default: "div" }
7
8
  });
8
9
  </script>
9
10
 
10
11
  <template>
11
- <Component :is="as" class="pxd-noise-background relative">
12
+ <Component :is="as" class="pxd-noise-background relative" v-bind="$attrs">
12
13
  <slot />
13
14
  </Component>
14
15
  </template>
@@ -1,4 +1,3 @@
1
- import { noteVariant } from './cn';
2
1
  import type { NoteProps } from './types';
3
2
  declare var __VLS_1: {}, __VLS_8: {}, __VLS_10: {};
4
3
  type __VLS_Slots = {} & {
@@ -10,7 +9,7 @@ type __VLS_Slots = {} & {
10
9
  };
11
10
  declare const __VLS_base: import("vue").DefineComponent<NoteProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<NoteProps> & Readonly<{}>, {
12
11
  label: boolean | import("../../types/shared").ComponentLabel;
13
- variant: keyof typeof noteVariant.variants.variant;
12
+ variant: import("./types").NoteVariant;
14
13
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
14
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
16
15
  declare const _default: typeof __VLS_export;
@@ -3,47 +3,99 @@ import CheckCircleIcon from "@gdsicon/vue/check-circle";
3
3
  import InformationIcon from "@gdsicon/vue/information";
4
4
  import StopIcon from "@gdsicon/vue/stop";
5
5
  import WarningIcon from "@gdsicon/vue/warning";
6
+ import { tv } from "tailwind-variants";
6
7
  import { computed, h } from "vue";
7
- import { useConfigProvider } from "../../composables/use-config-provider-context";
8
+ import { useConfigProvider } from "../../contexts/config-provider";
8
9
  import { isTruthyProp } from "../../utils/format";
9
- import { noteVariant } from "./cn";
10
10
  defineOptions({
11
- name: "PNote"
11
+ name: "PNote",
12
+ inheritAttrs: false
12
13
  });
13
14
  const props = defineProps({
14
- variant: { type: null, required: false, default: "default" },
15
+ variant: { type: String, required: false, default: "default" },
15
16
  size: { type: String, required: false },
16
17
  fill: { type: Boolean, required: false },
17
18
  label: { type: [Boolean, String, Number, Array, null], required: false, default: true }
18
19
  });
19
- const configProvider = useConfigProvider();
20
- const VARIANTS = {
21
- success: {
22
- icon: CheckCircleIcon
23
- },
24
- error: {
25
- icon: StopIcon
26
- },
27
- warning: {
28
- icon: WarningIcon
29
- },
30
- default: {
31
- icon: InformationIcon
20
+ const noteVariant = tv({
21
+ base: "pxd-note gap-2 sm:items-center max-sm:flex-col flex max-w-full rounded-md border",
22
+ variants: {
23
+ size: {
24
+ sm: "px-2 py-1.5 text-xs",
25
+ md: "px-3 py-2 text-sm",
26
+ lg: "px-4 py-2.5 text-base"
27
+ },
28
+ variant: {
29
+ success: {
30
+ base: "border-blue-500 text-blue-900",
31
+ fill: "border-blue-100 bg-blue-200 text-blue-900"
32
+ },
33
+ error: {
34
+ base: "border-red-500 text-red-900",
35
+ fill: "border-red-100 bg-red-200 text-red-900"
36
+ },
37
+ warning: {
38
+ base: "border-amber-500 text-amber-900",
39
+ fill: "border-amber-100 bg-amber-200 text-amber-900"
40
+ },
41
+ default: {
42
+ base: "border-input text-gray-900",
43
+ fill: "border-gray-100 bg-gray-200 text-gray-900"
44
+ },
45
+ primary: {
46
+ base: "border-gray-alpha-400 text-primary",
47
+ fill: "border-gray-100 bg-primary text-gray-100"
48
+ },
49
+ violet: {
50
+ base: "text-violet-900 border-violet-400",
51
+ fill: "text-violet-900 bg-violet-200 border-violet-100"
52
+ },
53
+ cyan: {
54
+ base: "border-teal-400 text-teal-900",
55
+ fill: "border-teal-100 bg-teal-200 text-teal-900"
56
+ }
57
+ },
58
+ fill: {
59
+ true: {},
60
+ false: {}
61
+ }
32
62
  },
33
- primary: {
34
- icon: InformationIcon
35
- },
36
- violet: {
37
- icon: InformationIcon
38
- },
39
- cyan: {
40
- icon: InformationIcon
63
+ compoundVariants: [
64
+ { variant: "success", fill: true, class: "border-blue-100 bg-blue-200 text-blue-900" },
65
+ { variant: "success", fill: false, class: "border-blue-500 text-blue-900" },
66
+ { variant: "error", fill: true, class: "border-red-100 bg-red-200 text-red-900" },
67
+ { variant: "error", fill: false, class: "border-red-500 text-red-900" },
68
+ { variant: "warning", fill: true, class: "border-amber-100 bg-amber-200 text-amber-900" },
69
+ { variant: "warning", fill: false, class: "border-amber-500 text-amber-900" },
70
+ { variant: "default", fill: true, class: "border-gray-100 bg-gray-200 text-gray-900" },
71
+ { variant: "default", fill: false, class: "border-input text-gray-900" },
72
+ { variant: "primary", fill: true, class: "border-gray-100 bg-primary text-gray-100" },
73
+ { variant: "primary", fill: false, class: "border-gray-alpha-400 text-primary" },
74
+ { variant: "violet", fill: true, class: "text-violet-900 bg-violet-200 border-violet-100" },
75
+ { variant: "violet", fill: false, class: "text-violet-900 border-violet-400" },
76
+ { variant: "cyan", fill: true, class: "border-teal-100 bg-teal-200 text-teal-900" },
77
+ { variant: "cyan", fill: false, class: "border-teal-400 text-teal-900" }
78
+ ],
79
+ defaultVariants: {
80
+ size: "md",
81
+ variant: "default",
82
+ fill: false
41
83
  }
84
+ });
85
+ const configProvider = useConfigProvider();
86
+ const VARIANTS_ICON = {
87
+ success: CheckCircleIcon,
88
+ error: StopIcon,
89
+ warning: WarningIcon,
90
+ default: InformationIcon,
91
+ primary: InformationIcon,
92
+ violet: InformationIcon,
93
+ cyan: InformationIcon
42
94
  };
43
95
  const computedLabel = computed(() => {
44
96
  const { label } = props;
45
97
  if (isTruthyProp(label)) {
46
- return VARIANTS[props.variant]?.icon || InformationIcon;
98
+ return VARIANTS_ICON[props.variant] || InformationIcon;
47
99
  }
48
100
  if (typeof label === "string" && label) {
49
101
  return h("span", null, label);
@@ -60,8 +112,8 @@ const computedClasses = computed(() => {
60
112
  </script>
61
113
 
62
114
  <template>
63
- <div :class="computedClasses">
64
- <div class="gap-3 flex flex-1">
115
+ <div :class="computedClasses" v-bind="$attrs">
116
+ <div class="gap-3 flex flex-1 shrink-0">
65
117
  <slot v-if="computedLabel" name="label">
66
118
  <Component :is="computedLabel" class="size-4 font-medium h-lh shrink-0" />
67
119
  </slot>
@@ -71,7 +123,7 @@ const computedClasses = computed(() => {
71
123
  </span>
72
124
  </div>
73
125
 
74
- <div v-if="$slots.action" class="pxd-note--action">
126
+ <div v-if="$slots.action" class="pxd-note--action max-sm:pl-7 shrink-0">
75
127
  <slot name="action" />
76
128
  </div>
77
129
  </div>
@@ -1,8 +1,16 @@
1
1
  import type { ComponentLabel, ComponentSize } from '../../types/shared'
2
- import type { noteVariant } from './cn'
2
+
3
+ export type NoteVariant =
4
+ | 'success'
5
+ | 'error'
6
+ | 'warning'
7
+ | 'default'
8
+ | 'primary'
9
+ | 'violet'
10
+ | 'cyan'
3
11
 
4
12
  export interface NoteProps {
5
- variant?: keyof typeof noteVariant.variants.variant
13
+ variant?: NoteVariant
6
14
  size?: ComponentSize
7
15
  fill?: boolean
8
16
  label?: boolean | ComponentLabel
@@ -11,21 +11,22 @@ type __VLS_Slots = {} & {
11
11
  };
12
12
  declare const __VLS_base: import("vue").DefineComponent<NumberInputProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
13
  input: (args_0: number | null | undefined) => any;
14
- blur: (args_0: FocusEvent) => any;
15
14
  change: (args_0: number | null | undefined, args_1: Event) => any;
16
- focus: (args_0: FocusEvent) => any;
17
15
  "update:modelValue": (args_0: number | null | undefined) => any;
16
+ blur: (args_0: FocusEvent) => any;
17
+ focus: (args_0: FocusEvent) => any;
18
18
  }, string, import("vue").PublicProps, Readonly<NumberInputProps> & Readonly<{
19
19
  onInput?: ((args_0: number | null | undefined) => any) | undefined;
20
- onBlur?: ((args_0: FocusEvent) => any) | undefined;
21
20
  onChange?: ((args_0: number | null | undefined, args_1: Event) => any) | undefined;
22
- onFocus?: ((args_0: FocusEvent) => any) | undefined;
23
21
  "onUpdate:modelValue"?: ((args_0: number | null | undefined) => any) | undefined;
22
+ onBlur?: ((args_0: FocusEvent) => any) | undefined;
23
+ onFocus?: ((args_0: FocusEvent) => any) | undefined;
24
24
  }>, {
25
25
  max: number;
26
26
  min: number;
27
27
  clearValue: number | null;
28
28
  step: number;
29
+ thousandsSeparator: string;
29
30
  scientific: boolean;
30
31
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
31
32
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -2,7 +2,7 @@
2
2
  import MinusIcon from "@gdsicon/vue/minus";
3
3
  import PlusIcon from "@gdsicon/vue/plus";
4
4
  import { isNil, isNumber, isUndefined } from "es-toolkit";
5
- import { computed, reactive, watch } from "vue";
5
+ import { computed, reactive, shallowRef, watch } from "vue";
6
6
  import { useRepeatAction } from "../../composables/use-repeat-action";
7
7
  import { NOOP } from "../../utils/event";
8
8
  import PInput from "../input/index.vue";
@@ -21,6 +21,8 @@ const props = defineProps({
21
21
  readonly: { type: Boolean, required: false },
22
22
  disabled: { type: Boolean, required: false },
23
23
  precision: { type: Number, required: false },
24
+ thousands: { type: Boolean, required: false },
25
+ thousandsSeparator: { type: String, required: false, default: "," },
24
26
  scientific: { type: Boolean, required: false, default: true },
25
27
  clearValue: { type: [Number, null], required: false, default: null },
26
28
  modelValue: { type: [Number, null], required: false }
@@ -35,10 +37,22 @@ const modelValue = computed({
35
37
  emits("update:modelValue", value);
36
38
  }
37
39
  });
40
+ const REGEXPS = {
41
+ "remove-leading-zeros": /^(-?)0+(?=\d)/,
42
+ "thousands-separator": /\B(?=(\d{3})+(?!\d))/g
43
+ };
44
+ const isFocused = shallowRef(false);
38
45
  const inputData = reactive({
39
46
  currentValue: props.modelValue,
40
47
  userInput: null
41
48
  });
49
+ function formatWithThousands(value) {
50
+ const str = String(value);
51
+ const dotIndex = str.indexOf(".");
52
+ const intPart = dotIndex === -1 ? str : str.slice(0, dotIndex);
53
+ const decPart = dotIndex === -1 ? "" : str.slice(dotIndex);
54
+ return intPart.replace(REGEXPS["thousands-separator"], props.thousandsSeparator) + decPart;
55
+ }
42
56
  const inputValue = computed(() => {
43
57
  if (inputData.userInput !== null) {
44
58
  return inputData.userInput;
@@ -55,6 +69,9 @@ const inputValue = computed(() => {
55
69
  currentValue = currentValue.toFixed(props.precision);
56
70
  }
57
71
  }
72
+ if (props.thousands && !isFocused.value) {
73
+ return formatWithThousands(currentValue);
74
+ }
58
75
  return currentValue;
59
76
  });
60
77
  const decreaseDisabled = computed(
@@ -138,10 +155,19 @@ function onInputKeydown(ev) {
138
155
  }
139
156
  }
140
157
  function onInputFocus(event) {
158
+ isFocused.value = true;
141
159
  emits("focus", event);
142
160
  }
143
161
  function onInputBlur(event) {
162
+ isFocused.value = false;
144
163
  inputData.userInput = null;
164
+ if (isNumber(inputData.currentValue)) {
165
+ const clamped = clampToRange(inputData.currentValue);
166
+ if (clamped !== inputData.currentValue) {
167
+ inputData.currentValue = clamped;
168
+ modelValue.value = clamped;
169
+ }
170
+ }
145
171
  if (inputData.currentValue === null) {
146
172
  ;
147
173
  event.target.value = "";
@@ -149,13 +175,17 @@ function onInputBlur(event) {
149
175
  emits("blur", event);
150
176
  }
151
177
  function onInputInput(value) {
152
- inputData.userInput = value;
153
- const newValue = value === "" ? null : Number.parseFloat(value);
178
+ const normalized = value.replace(REGEXPS["remove-leading-zeros"], "$1");
179
+ inputData.userInput = normalized;
180
+ const newValue = normalized === "" ? null : Number.parseFloat(normalized);
154
181
  inputData.currentValue = toPrecision(newValue ?? 0);
155
182
  modelValue.value = inputData.currentValue;
156
183
  }
157
184
  function onInputChange(value, event) {
158
- const newValue = toPrecision(value === "" ? null : Number.parseFloat(value));
185
+ let newValue = toPrecision(value === "" ? null : Number.parseFloat(value));
186
+ if (isNumber(newValue)) {
187
+ newValue = clampToRange(newValue);
188
+ }
159
189
  emits("change", newValue, event);
160
190
  }
161
191
  watch(
@@ -179,10 +209,10 @@ watch(
179
209
  input-type="number"
180
210
  :disabled="disabled"
181
211
  :readonly="readonly"
182
- :prefix-style="false"
183
- :suffix-style="false"
184
212
  :clear-value="clearValue"
185
213
  :model-value="inputValue"
214
+ :default-prefix-style="false"
215
+ :default-suffix-style="false"
186
216
  @blur="onInputBlur"
187
217
  @focus="onInputFocus"
188
218
  @input="onInputInput"