pxd 0.0.55 → 0.0.60

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 (275) 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 +2 -2
  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 +7 -4
  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 +5 -4
  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 +4 -3
  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 +7 -2
  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 +2 -1
  122. package/dist/components/popover/index.d.vue.ts +1 -1
  123. package/dist/components/popover/index.vue +116 -78
  124. package/dist/components/popover/types.d.ts +2 -0
  125. package/dist/components/progress/index.d.vue.ts +1 -1
  126. package/dist/components/progress/index.vue +15 -2
  127. package/dist/components/project-banner/index.d.vue.ts +18 -0
  128. package/dist/components/project-banner/index.vue +59 -0
  129. package/dist/components/project-banner/types.d.ts +8 -0
  130. package/dist/components/radio/index.vue +62 -20
  131. package/dist/components/radio/types.d.ts +1 -14
  132. package/dist/components/radio-group/index.d.vue.ts +2 -4
  133. package/dist/components/radio-group/index.vue +11 -16
  134. package/dist/components/radio-group/types.d.ts +12 -0
  135. package/dist/components/resizable/types.d.ts +5 -10
  136. package/dist/components/resizable-handle/index.vue +1 -1
  137. package/dist/components/resizable-panel/index.d.vue.ts +1 -1
  138. package/dist/components/resizable-panel/index.vue +7 -2
  139. package/dist/components/resizable-panel/types.d.ts +4 -0
  140. package/dist/components/scrollable/index.d.vue.ts +29 -0
  141. package/dist/components/scrollable/index.vue +98 -83
  142. package/dist/components/scrollable/types.d.ts +19 -5
  143. package/dist/components/skeleton/index.vue +24 -1
  144. package/dist/components/slider/index.d.vue.ts +6 -6
  145. package/dist/components/slider/index.vue +86 -44
  146. package/dist/components/slider/types.d.ts +1 -1
  147. package/dist/components/snippet/index.vue +28 -2
  148. package/dist/components/spinner/index.vue +4 -2
  149. package/dist/components/stack/index.d.vue.ts +2 -2
  150. package/dist/components/stack/index.vue +35 -3
  151. package/dist/components/stack/types.d.ts +1 -1
  152. package/dist/components/status-dot/index.vue +5 -1
  153. package/dist/components/switch/index.d.vue.ts +10 -1
  154. package/dist/components/switch/index.vue +35 -44
  155. package/dist/components/switch/types.d.ts +4 -12
  156. package/dist/components/switch-item/index.d.vue.ts +14 -0
  157. package/dist/components/switch-item/index.vue +79 -0
  158. package/dist/components/switch-item/types.d.ts +9 -0
  159. package/dist/components/teleport/index.d.vue.ts +1 -1
  160. package/dist/components/teleport/index.vue +1 -1
  161. package/dist/components/teleport/types.d.ts +1 -1
  162. package/dist/components/text/index.d.vue.ts +1 -2
  163. package/dist/components/text/index.vue +36 -22
  164. package/dist/components/text/types.d.ts +1 -1
  165. package/dist/components/textarea/index.d.vue.ts +4 -4
  166. package/dist/components/textarea/index.vue +33 -4
  167. package/dist/components/textarea/types.d.ts +0 -1
  168. package/dist/components/time-picker/index.d.vue.ts +1 -2
  169. package/dist/components/time-picker/index.vue +43 -9
  170. package/dist/components/time-picker/types.d.ts +1 -2
  171. package/dist/components/toggle/index.vue +11 -10
  172. package/dist/components/toggle-button/index.d.vue.ts +22 -0
  173. package/dist/components/toggle-button/index.vue +110 -0
  174. package/dist/components/toggle-button/types.d.ts +16 -0
  175. package/dist/components/{choicebox-group → toggle-button-group}/index.d.vue.ts +5 -5
  176. package/dist/components/toggle-button-group/index.vue +68 -0
  177. package/dist/components/toggle-button-group/types.d.ts +22 -0
  178. package/dist/components/tooltip/index.d.vue.ts +2 -0
  179. package/dist/components/tooltip/index.vue +9 -3
  180. package/dist/components/tooltip/types.d.ts +2 -0
  181. package/dist/components/virtual-list/index.d.vue.ts +25 -4
  182. package/dist/components/virtual-list/index.vue +66 -10
  183. package/dist/components/virtual-list/types.d.ts +9 -4
  184. package/dist/composables/index.d.ts +2 -2
  185. package/dist/composables/index.js +2 -2
  186. package/dist/composables/use-browser-observer.d.ts +5 -5
  187. package/dist/composables/use-browser-observer.js +23 -20
  188. package/dist/composables/use-copy-click.js +4 -0
  189. package/dist/composables/use-countdown.d.ts +2 -2
  190. package/dist/composables/use-focus-trap.d.ts +6 -2
  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 +3 -6
  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.js +2 -2
  199. package/dist/composables/use-virtual-list.d.ts +21 -12
  200. package/dist/composables/use-virtual-list.js +90 -158
  201. package/dist/composables/use-window-size.d.ts +4 -0
  202. package/dist/composables/use-window-size.js +27 -0
  203. package/dist/contexts/avatar.d.ts +5 -2
  204. package/dist/contexts/carousel.d.ts +4 -4
  205. package/dist/contexts/carousel.js +1 -1
  206. package/dist/contexts/checkbox.d.ts +7 -2
  207. package/dist/contexts/choicebox.d.ts +8 -4
  208. package/dist/contexts/choicebox.js +1 -4
  209. package/dist/contexts/collapse.d.ts +5 -6
  210. package/dist/contexts/collapse.js +1 -1
  211. package/dist/contexts/config-provider.d.ts +5 -0
  212. package/dist/{composables/use-config-provider-context.js → contexts/config-provider.js} +8 -5
  213. package/dist/contexts/radio.d.ts +8 -2
  214. package/dist/contexts/switch.d.ts +8 -4
  215. package/dist/contexts/switch.js +1 -2
  216. package/dist/contexts/toggle-button.d.ts +7 -0
  217. package/dist/contexts/toggle-button.js +2 -0
  218. package/dist/styles/source.css +14 -2
  219. package/dist/styles/styles.css +2 -2
  220. package/dist/styles/tw.css +14 -2
  221. package/dist/types/shared/props.d.ts +1 -3
  222. package/dist/types/shared/utils.d.ts +0 -3
  223. package/dist/utils/context.d.ts +1 -0
  224. package/dist/utils/get.d.ts +1 -0
  225. package/dist/utils/get.js +14 -0
  226. package/dist/utils/responsive.js +2 -1
  227. package/dist/utils/throttle.js +9 -7
  228. package/dist/utils/uid.d.ts +1 -1
  229. package/dist/utils/uid.js +2 -2
  230. package/package.json +23 -21
  231. package/volar.d.ts +7 -3
  232. package/dist/components/badge/cn.d.ts +0 -90
  233. package/dist/components/badge/cn.js +0 -44
  234. package/dist/components/button/cn.d.ts +0 -121
  235. package/dist/components/button/cn.js +0 -55
  236. package/dist/components/carousel-group/index.d.vue.ts +0 -35
  237. package/dist/components/carousel-group/index.vue +0 -368
  238. package/dist/components/checkbox/cn.d.ts +0 -67
  239. package/dist/components/checkbox/cn.js +0 -31
  240. package/dist/components/chip/cn.d.ts +0 -49
  241. package/dist/components/chip/cn.js +0 -26
  242. package/dist/components/choicebox-group/index.vue +0 -65
  243. package/dist/components/error/cn.d.ts +0 -22
  244. package/dist/components/error/cn.js +0 -15
  245. package/dist/components/input/cn.d.ts +0 -73
  246. package/dist/components/input/cn.js +0 -36
  247. package/dist/components/list-item/cn.d.ts +0 -22
  248. package/dist/components/list-item/cn.js +0 -15
  249. package/dist/components/loading-bar/cn.d.ts +0 -70
  250. package/dist/components/loading-bar/cn.js +0 -32
  251. package/dist/components/note/cn.d.ts +0 -121
  252. package/dist/components/note/cn.js +0 -66
  253. package/dist/components/pin-input/cn.d.ts +0 -46
  254. package/dist/components/pin-input/cn.js +0 -25
  255. package/dist/components/progress/cn.d.ts +0 -19
  256. package/dist/components/progress/cn.js +0 -14
  257. package/dist/components/radio/cn.d.ts +0 -46
  258. package/dist/components/radio/cn.js +0 -42
  259. package/dist/components/skeleton/cn.d.ts +0 -43
  260. package/dist/components/skeleton/cn.js +0 -24
  261. package/dist/components/snippet/cn.d.ts +0 -52
  262. package/dist/components/snippet/cn.js +0 -27
  263. package/dist/components/stack/cn.d.ts +0 -70
  264. package/dist/components/stack/cn.js +0 -33
  265. package/dist/components/switch/cn.d.ts +0 -16
  266. package/dist/components/switch/cn.js +0 -13
  267. package/dist/components/switch-group/index.d.vue.ts +0 -23
  268. package/dist/components/switch-group/index.vue +0 -54
  269. package/dist/components/text/cn.d.ts +0 -67
  270. package/dist/components/text/cn.js +0 -34
  271. package/dist/components/textarea/cn.d.ts +0 -58
  272. package/dist/components/textarea/cn.js +0 -30
  273. package/dist/composables/use-config-provider-context.d.ts +0 -3
  274. package/dist/composables/use-unique-id-context.d.ts +0 -2
  275. package/dist/composables/use-unique-id-context.js +0 -11
@@ -3,12 +3,12 @@ import CrossIcon from "@gdsicon/vue/cross";
3
3
  import EyeIcon from "@gdsicon/vue/eye";
4
4
  import EyeOffIcon from "@gdsicon/vue/eye-off";
5
5
  import { computed, shallowRef } from "vue";
6
- import { useConfigProvider } from "../../composables/use-config-provider-context";
6
+ import { useConfigProvider } from "../../contexts/config-provider";
7
7
  import { useModelValue } from "../../composables/use-model-value";
8
8
  import { NOOP } from "../../utils/event";
9
9
  import { isTruthyProp } from "../../utils/format";
10
10
  import { getUniqueId } from "../../utils/uid";
11
- import { inputVariant } from "./cn";
11
+ import { tv } from "tailwind-variants";
12
12
  defineOptions({
13
13
  name: "PInput",
14
14
  inheritAttrs: false,
@@ -18,7 +18,7 @@ defineOptions({
18
18
  }
19
19
  });
20
20
  const props = defineProps({
21
- size: { type: null, required: false },
21
+ size: { type: String, required: false },
22
22
  error: { type: [Boolean, String], required: false },
23
23
  min: { type: [Number, String], required: false },
24
24
  max: { type: [Number, String], required: false },
@@ -26,23 +26,57 @@ const props = defineProps({
26
26
  readonly: { type: Boolean, required: false },
27
27
  disabled: { type: Boolean, required: false },
28
28
  password: { type: Boolean, required: false },
29
- required: { type: Boolean, required: false },
30
29
  autofocus: { type: Boolean, required: false },
31
- inputType: { type: null, required: false },
32
- inputmode: { type: null, required: false },
30
+ inputType: { type: String, required: false },
31
+ inputmode: { type: String, required: false },
33
32
  minlength: { type: [Number, String], required: false },
34
33
  maxlength: { type: [Number, String], required: false },
35
34
  clearable: { type: Boolean, required: false },
36
- clearValue: { type: null, required: false },
37
- modelValue: { type: null, required: false },
35
+ clearValue: { type: [String, Number, null], required: false },
36
+ modelValue: { type: [String, Number, null], required: false },
38
37
  placeholder: { type: String, required: false },
39
- prefixStyle: { type: Boolean, required: false, default: true },
40
- suffixStyle: { type: Boolean, required: false, default: true },
41
- prefixClass: { type: null, required: false },
42
- suffixClass: { type: null, required: false },
43
- selectOnFocus: { type: Boolean, required: false }
38
+ prefixClass: { type: [String, Array, Object], required: false },
39
+ suffixClass: { type: [String, Array, Object], required: false },
40
+ selectOnFocus: { type: Boolean, required: false },
41
+ defaultPrefixStyle: { type: Boolean, required: false, default: true },
42
+ defaultSuffixStyle: { type: Boolean, required: false, default: true }
44
43
  });
45
44
  const emits = defineEmits(["click", "input", "change", "focus", "blur", "keydown", "update:modelValue", "compositionstart", "compositionupdate", "compositionend"]);
45
+ const inputVariant = tv({
46
+ base: "pxd-input pxd-input--border group relative flex w-full max-w-full items-center overflow-hidden bg-background-100 data-[disabled=true]:cursor-not-allowed data-[disabled=true]:bg-gray-100 motion-safe:transition-all",
47
+ variants: {
48
+ size: {
49
+ xs: "h-6 text-xs rounded-sm",
50
+ sm: "h-7.5 text-sm rounded-md",
51
+ md: "h-9 text-sm rounded-md",
52
+ lg: "h-10 text-base rounded-lg"
53
+ },
54
+ align: {
55
+ left: "text-left",
56
+ center: "text-center",
57
+ right: "text-right"
58
+ },
59
+ disabled: {
60
+ true: "is-disabled",
61
+ false: ""
62
+ },
63
+ readonly: {
64
+ true: "is-readonly",
65
+ false: ""
66
+ },
67
+ error: {
68
+ true: "is-error",
69
+ false: ""
70
+ }
71
+ },
72
+ defaultVariants: {
73
+ size: "md",
74
+ align: "left",
75
+ disabled: false,
76
+ readonly: false,
77
+ error: false
78
+ }
79
+ });
46
80
  const uniqueId = getUniqueId();
47
81
  const inputRef = shallowRef();
48
82
  const configProvider = useConfigProvider();
@@ -150,7 +184,7 @@ defineExpose({
150
184
  v-if="$slots.prefix"
151
185
  class="pxd-input--prefix text-sm flex h-full items-center text-foreground-secondary"
152
186
  :class="[
153
- { 'px-3 rounded-l-inherit border-r border-gray-300 bg-background-200': prefixStyle },
187
+ { 'px-3 rounded-l-inherit border-r border-gray-300 bg-background-200': defaultPrefixStyle },
154
188
  prefixClass
155
189
  ]"
156
190
  @pointerdown.prevent="NOOP"
@@ -161,7 +195,7 @@ defineExpose({
161
195
  <input
162
196
  :id="uniqueId"
163
197
  ref="inputRef"
164
- class="px-3 py-0 file:font-medium size-full appearance-none rounded-inherit border-none bg-transparent [text-align:inherit] font-inherit outline-none select-auto file:border-0 file:bg-transparent placeholder:text-gray-600 placeholder:select-none read-only:cursor-default disabled:cursor-not-allowed disabled:text-gray-700 disabled:placeholder:text-gray-500"
198
+ class="px-3 py-0 file:font-medium size-full appearance-none rounded-none border-none bg-transparent [text-align:inherit] font-inherit outline-none select-auto file:border-0 file:bg-transparent placeholder:text-gray-600 placeholder:select-none read-only:cursor-default disabled:cursor-not-allowed disabled:text-gray-700 disabled:placeholder:text-gray-500"
165
199
  autocorrect="off"
166
200
  autocomplete="off"
167
201
  autocapitalize="off"
@@ -171,7 +205,6 @@ defineExpose({
171
205
  :value="modelValue"
172
206
  :readonly="readonly"
173
207
  :disabled="disabled"
174
- :required="required"
175
208
  :inputmode="inputmode"
176
209
  :minlength="minlength"
177
210
  :maxlength="maxlength"
@@ -192,12 +225,12 @@ defineExpose({
192
225
  v-if="password || clearable"
193
226
  v-show="modelValue"
194
227
  :class="{ 'pr-2': password && clearable }"
195
- class="pxd-input--icon top-0 right-0 gap-1 flex aspect-square h-full cursor-pointer items-center justify-center rounded-r-inherit text-foreground-secondary"
228
+ class="pxd-input--icon top-0 right-0 gap-1 flex aspect-square h-full items-center justify-center rounded-r-inherit text-foreground-secondary"
196
229
  @pointerdown.prevent="NOOP"
197
230
  >
198
231
  <button
199
232
  v-if="password"
200
- class="p-1 appearance-none rounded-sm font-inherit self-focus-ring outline-none hover:bg-background-hover hover:text-foreground active:bg-background-active motion-safe:transition-colors"
233
+ class="p-1 cursor-pointer appearance-none rounded-sm font-inherit self-focus-ring outline-none hover:bg-background-hover hover:text-foreground active:bg-background-active motion-safe:transition-colors"
201
234
  @click.stop.prevent="toggleType"
202
235
  >
203
236
  <EyeOffIcon v-if="isPasswordVisible" class="size-3 pointer-events-none" />
@@ -205,7 +238,7 @@ defineExpose({
205
238
  </button>
206
239
  <button
207
240
  v-if="clearable"
208
- class="p-1 appearance-none rounded-sm font-inherit self-focus-ring outline-none hover:bg-background-hover hover:text-foreground active:bg-background-active motion-safe:transition-colors"
241
+ class="p-1 cursor-pointer appearance-none rounded-sm font-inherit self-focus-ring outline-none hover:bg-background-hover hover:text-foreground active:bg-background-active motion-safe:transition-colors"
209
242
  @click.stop.prevent="clear"
210
243
  >
211
244
  <CrossIcon class="size-3 pointer-events-none" />
@@ -216,7 +249,7 @@ defineExpose({
216
249
  v-if="$slots.suffix"
217
250
  class="pxd-input--suffix text-sm flex h-full items-center text-foreground-secondary"
218
251
  :class="[
219
- { 'px-3 rounded-r-inherit border-l border-gray-300 bg-background-200': suffixStyle },
252
+ { 'px-3 rounded-r-inherit border-l border-gray-300 bg-background-200': defaultSuffixStyle },
220
253
  suffixClass
221
254
  ]"
222
255
  @pointerdown.prevent="NOOP"
@@ -227,5 +260,5 @@ defineExpose({
227
260
  </template>
228
261
 
229
262
  <style>
230
- .pxd-input:has(.pxd-input--prefix) input{border-bottom-left-radius:0;border-top-left-radius:0}.pxd-input:has(.pxd-input--suffix) input{border-bottom-right-radius:0;border-top-right-radius:0}
263
+ input:-webkit-autofill,input:-webkit-autofill:active,input:-webkit-autofill:focus,input:-webkit-autofill:hover{--autofill-delay:calc(infinity*1s);-webkit-transition:background-color var(--autofill-delay) ease-in-out 0s,color var(--autofill-delay) ease-in-out 0s;transition:background-color var(--autofill-delay) ease-in-out 0s,color var(--autofill-delay) ease-in-out 0s}
231
264
  </style>
@@ -1,6 +1,4 @@
1
- import type { HTMLAttributes } from 'vue'
2
-
3
- import type { ComponentSizeWithXs } from '../shared/props'
1
+ import type { ComponentSizeWithXs, ComponentClass } from '../../types/shared'
4
2
 
5
3
  export interface InputProps {
6
4
  size?: ComponentSizeWithXs
@@ -11,21 +9,20 @@ export interface InputProps {
11
9
  readonly?: boolean
12
10
  disabled?: boolean
13
11
  password?: boolean
14
- required?: boolean
15
12
  autofocus?: boolean
16
- inputType?: HTMLInputElement['type']
17
- inputmode?: HTMLAttributes['inputmode']
13
+ inputType?: string
14
+ inputmode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'
18
15
  minlength?: number | string
19
16
  maxlength?: number | string
20
17
  clearable?: boolean
21
- clearValue?: string | number | null | undefined
22
- modelValue?: string | number | null | undefined
18
+ clearValue?: string | number | null
19
+ modelValue?: string | number | null
23
20
  placeholder?: string
24
- prefixStyle?: boolean
25
- suffixStyle?: boolean
26
21
  prefixClass?: ComponentClass
27
22
  suffixClass?: ComponentClass
28
23
  selectOnFocus?: boolean
24
+ defaultPrefixStyle?: boolean
25
+ defaultSuffixStyle?: boolean
29
26
  }
30
27
 
31
28
  export interface InputEmits {
@@ -19,7 +19,6 @@ declare const __VLS_base: import("vue").DefineComponent<IntersectionObserverProp
19
19
  "onBefore-hide"?: (() => any) | undefined;
20
20
  }>, {
21
21
  threshold: number | number[];
22
- root: Element | Document | null;
23
22
  rootMargin: string;
24
23
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
25
24
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -4,13 +4,14 @@ import { useIntersectionObserver } from "../../composables/use-browser-observer"
4
4
  import { getCssUnitValue } from "../../utils/format";
5
5
  import FragmentContainer from "../_internal/fragment-container.vue";
6
6
  defineOptions({
7
- name: "PIntersectionObserver"
7
+ name: "PIntersectionObserver",
8
+ inheritAttrs: false
8
9
  });
9
10
  const props = defineProps({
10
11
  width: { type: [Number, String], required: false },
11
12
  height: { type: [Number, String], required: false },
12
13
  keepAlive: { type: Boolean, required: false },
13
- root: { type: null, required: false, default: null },
14
+ root: { type: null, required: false },
14
15
  rootMargin: { type: String, required: false, default: "20%" },
15
16
  threshold: { type: [Number, Array], required: false, default: 0 }
16
17
  });
@@ -18,12 +19,14 @@ const emits = defineEmits(["visible-change", "before-show", "before-hide", "show
18
19
  const isVisible = shallowRef(false);
19
20
  const containerRef = shallowRef();
20
21
  const containerSize = shallowRef({
22
+ "contain-intrinsic-size": `auto ${getCssUnitValue(props.height)}`,
21
23
  "--slot-estimated-width": getCssUnitValue(props.width),
22
24
  "--slot-estimated-height": getCssUnitValue(props.height)
23
25
  });
24
26
  function getRenderedSlotSize() {
25
27
  const rect = containerRef.value.getBoundingClientRect();
26
28
  containerSize.value = {
29
+ "contain-intrinsic-size": `auto ${rect.height}px`,
27
30
  "--slot-estimated-width": `${rect.width}px`,
28
31
  "--slot-estimated-height": `${rect.height}px`
29
32
  };
@@ -55,12 +58,18 @@ useIntersectionObserver(
55
58
  </script>
56
59
 
57
60
  <template>
58
- <div ref="containerRef" class="pxd-intersection-observer" :style="containerSize">
61
+ <div
62
+ ref="containerRef"
63
+ class="pxd-intersection-observer content-visibility-auto"
64
+ :style="containerSize"
65
+ v-bind="$attrs"
66
+ >
59
67
  <KeepAlive v-if="keepAlive">
60
68
  <FragmentContainer v-if="isVisible">
61
69
  <slot />
62
70
  </FragmentContainer>
63
71
  </KeepAlive>
72
+
64
73
  <template v-else>
65
74
  <slot v-if="isVisible" />
66
75
  </template>
@@ -1,5 +1,5 @@
1
1
  <script setup>
2
- import { useConfigProvider } from "pxd";
2
+ import { useConfigProvider } from "../../contexts/config-provider";
3
3
  import { computed } from "vue";
4
4
  import { getFallbackValue } from "../../utils/get";
5
5
  defineOptions({
@@ -13,7 +13,7 @@ declare const __VLS_base: import("vue").DefineComponent<LinkButtonProps, {}, {},
13
13
  onClick?: ((args_0: MouseEvent) => any) | undefined;
14
14
  }>, {
15
15
  align: "left" | "center" | "right";
16
- target: HTMLAnchorElement["target"];
16
+ target: "_blank" | "_self" | "_parent" | "_top";
17
17
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
18
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
19
19
  declare const _default: typeof __VLS_export;
@@ -4,19 +4,20 @@ import { computed, useAttrs } from "vue";
4
4
  import { isExternalLink } from "../../utils/format";
5
5
  import PButton from "../button/index.vue";
6
6
  defineOptions({
7
- name: "PLinkButton"
7
+ name: "PLinkButton",
8
+ inheritAttrs: false
8
9
  });
9
10
  const props = defineProps({
10
11
  href: { type: String, required: true },
11
12
  text: { type: String, required: false },
12
13
  align: { type: String, required: false, default: "left" },
13
- target: { type: null, required: false, default: "_self" },
14
+ target: { type: String, required: false, default: "_self" },
14
15
  variant: { type: String, required: false },
15
16
  externalIcon: { type: Boolean, required: false }
16
17
  });
17
18
  const emits = defineEmits(["click"]);
18
19
  const attrs = useAttrs();
19
- const linkButtonAttrs = computed(() => {
20
+ const computedAttrs = computed(() => {
20
21
  const { externalIcon, text, href, ...restProps } = props;
21
22
  const baseAttrs = {
22
23
  ...attrs,
@@ -47,7 +48,7 @@ function onLinkClick(ev) {
47
48
  </script>
48
49
 
49
50
  <template>
50
- <PButton v-bind="linkButtonAttrs">
51
+ <PButton v-bind="computedAttrs">
51
52
  <template #prefix>
52
53
  <slot name="prefix" />
53
54
  </template>
@@ -4,7 +4,7 @@ export interface LinkButtonProps {
4
4
  href: string
5
5
  text?: string
6
6
  align?: 'left' | 'center' | 'right'
7
- target?: HTMLAnchorElement['target']
7
+ target?: '_blank' | '_self' | '_parent' | '_top'
8
8
  variant?: ButtonVariant
9
9
  externalIcon?: boolean
10
10
  }
@@ -2,16 +2,20 @@ import type { ListProps, ListOptionSelected } from './types';
2
2
  declare function updateListItem(): void;
3
3
  declare function isNoVisibleItem(): boolean;
4
4
  declare function setActiveValue(newValue?: string): void;
5
- declare function setActiveValueToFirst(): void;
6
- declare var __VLS_7: {};
5
+ declare function setFirstAsActive(): void;
6
+ declare var __VLS_7: {}, __VLS_15: {
7
+ item: import("./types").ListOption;
8
+ };
7
9
  type __VLS_Slots = {} & {
8
10
  default?: (props: typeof __VLS_7) => any;
11
+ } & {
12
+ item?: (props: typeof __VLS_15) => any;
9
13
  };
10
14
  declare const __VLS_base: import("vue").DefineComponent<ListProps, {
11
15
  setActiveValue: typeof setActiveValue;
12
16
  updateListItem: typeof updateListItem;
13
17
  isNoVisibleItem: typeof isNoVisibleItem;
14
- setActiveValueToFirst: typeof setActiveValueToFirst;
18
+ setFirstAsActive: typeof setFirstAsActive;
15
19
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
16
20
  select: (args_0: MouseEvent, args_1: ListOptionSelected) => any;
17
21
  toggle: () => any;
@@ -23,8 +27,7 @@ declare const __VLS_base: import("vue").DefineComponent<ListProps, {
23
27
  }>, {
24
28
  options: import("./types").ListOption[];
25
29
  loop: boolean;
26
- keyListener: boolean;
27
- itemTransition: boolean;
30
+ toggleOnKeyPress: boolean;
28
31
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
32
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
30
33
  declare const _default: typeof __VLS_export;
@@ -13,8 +13,7 @@ defineOptions({
13
13
  const props = defineProps({
14
14
  loop: { type: Boolean, required: false, default: true },
15
15
  options: { type: Array, required: false, default: () => [] },
16
- keyListener: { type: Boolean, required: false, default: true },
17
- itemTransition: { type: Boolean, required: false, default: true },
16
+ toggleOnKeyPress: { type: Boolean, required: false, default: true },
18
17
  closeOnPressEscape: { type: Boolean, required: false }
19
18
  });
20
19
  const emits = defineEmits(["toggle", "escape", "select"]);
@@ -28,15 +27,37 @@ const FUNCTION_KEYS = ["Enter", "Tab", "Home", "End"];
28
27
  const PREVENT_DEFAULT_KEYS = [...FUNCTION_KEYS, ...PREV_KEYS, ...NEXT_KEYS];
29
28
  const listItemKeys = [];
30
29
  const listItemsMap = /* @__PURE__ */ new Map();
30
+ function resolveNavigationTarget(key) {
31
+ const len = listItemKeys.length;
32
+ if (key === "Home") {
33
+ return listItemKeys[0];
34
+ }
35
+ if (key === "End") {
36
+ return listItemKeys[len - 1];
37
+ }
38
+ const dir = PREV_KEYS.includes(key) ? -1 : NEXT_KEYS.includes(key) ? 1 : void 0;
39
+ if (dir === void 0) {
40
+ return void 0;
41
+ }
42
+ if (!activeValue.value) {
43
+ return dir === -1 ? listItemKeys[len - 1] : listItemKeys[0];
44
+ }
45
+ const index = listItemKeys.indexOf(activeValue.value);
46
+ if (index === -1) {
47
+ return dir === -1 ? listItemKeys[len - 1] : listItemKeys[0];
48
+ }
49
+ if (props.loop) {
50
+ return listItemKeys[(index + dir + len) % len];
51
+ }
52
+ const nextIndex = index + dir;
53
+ return nextIndex >= 0 && nextIndex < len ? listItemKeys[nextIndex] : void 0;
54
+ }
31
55
  const containerKeydownThrottled = throttle(
32
56
  (ev) => {
33
57
  if (ev.ctrlKey || ev.metaKey || ev.altKey || ev.shiftKey) {
34
58
  return;
35
59
  }
36
60
  const { key } = ev;
37
- if (key === "Tab") {
38
- return;
39
- }
40
61
  if (key === "Enter") {
41
62
  listItemsMap.get(activeValue.value)?.click();
42
63
  return;
@@ -45,38 +66,8 @@ const containerKeydownThrottled = throttle(
45
66
  emits("escape", ev);
46
67
  return;
47
68
  }
48
- let newActiveValue = "";
49
- const listItemKeyLength = listItemKeys.length;
50
- if (PREV_KEYS.includes(key)) {
51
- if (activeValue.value) {
52
- const index = listItemKeys.indexOf(activeValue.value);
53
- if (props.loop) {
54
- const prevIndex = (index - 1 + listItemKeys.length) % listItemKeys.length;
55
- newActiveValue = listItemKeys[prevIndex];
56
- } else if (index > 0) {
57
- newActiveValue = listItemKeys[index - 1];
58
- }
59
- } else {
60
- newActiveValue = listItemKeys[listItemKeyLength - 1];
61
- }
62
- } else if (NEXT_KEYS.includes(key)) {
63
- if (activeValue.value) {
64
- const index = listItemKeys.indexOf(activeValue.value);
65
- if (props.loop) {
66
- const nextIndex = (index + 1) % listItemKeys.length;
67
- newActiveValue = listItemKeys[nextIndex];
68
- } else if (index < listItemKeys.length - 1) {
69
- newActiveValue = listItemKeys[index + 1];
70
- }
71
- } else {
72
- newActiveValue = listItemKeys[0];
73
- }
74
- } else if (key === "Home") {
75
- newActiveValue = listItemKeys[0];
76
- } else if (key === "End") {
77
- newActiveValue = listItemKeys[listItemKeyLength - 1];
78
- }
79
- if (!newActiveValue) {
69
+ const newActiveValue = resolveNavigationTarget(key);
70
+ if (newActiveValue === void 0) {
80
71
  return;
81
72
  }
82
73
  if (activeValue.value !== newActiveValue) {
@@ -89,7 +80,7 @@ const containerKeydownThrottled = throttle(
89
80
  { edges: ["leading"] }
90
81
  );
91
82
  function onContainerKeydown(ev) {
92
- if (!props.keyListener || listItemKeys.length === 0) {
83
+ if (!props.toggleOnKeyPress || listItemKeys.length === 0) {
93
84
  return;
94
85
  }
95
86
  if (PREVENT_DEFAULT_KEYS.includes(ev.key)) {
@@ -108,26 +99,31 @@ function onPointerOver(ev) {
108
99
  activeValue.value = itemValue;
109
100
  }
110
101
  function onOptionClick(item, ev) {
111
- const { as, onClick, ...option } = item;
112
102
  activeValue.value = "";
113
- emits("select", ev, option);
103
+ emits("select", ev, item);
114
104
  }
115
105
  function updateListItem() {
116
- listItemsMap.clear();
117
- listItemKeys.splice(0);
106
+ cleanupListItem();
107
+ if (!containerRef.value) {
108
+ return;
109
+ }
118
110
  Array.from(containerRef.value.querySelectorAll(itemSelector)).forEach((el) => {
119
111
  const key = el.dataset.value;
120
112
  listItemsMap.set(key, el);
121
113
  listItemKeys.push(key);
122
114
  });
123
115
  }
116
+ function cleanupListItem() {
117
+ listItemsMap.clear();
118
+ listItemKeys.splice(0);
119
+ }
124
120
  function isNoVisibleItem() {
125
121
  return listItemsMap.size === 0;
126
122
  }
127
123
  function setActiveValue(newValue = "") {
128
124
  activeValue.value = newValue;
129
125
  }
130
- function setActiveValueToFirst() {
126
+ function setFirstAsActive() {
131
127
  setActiveValue(listItemKeys[0]);
132
128
  }
133
129
  provideListContext({
@@ -143,15 +139,14 @@ onMounted(async () => {
143
139
  cachedOn(document, "keydown", onContainerKeydown);
144
140
  });
145
141
  onBeforeUnmount(() => {
146
- listItemsMap.clear();
147
- listItemKeys.splice(0);
142
+ cleanupListItem();
148
143
  cachedOff(document, "keydown", onContainerKeydown);
149
144
  });
150
145
  defineExpose({
151
146
  setActiveValue,
152
147
  updateListItem,
153
148
  isNoVisibleItem,
154
- setActiveValueToFirst
149
+ setFirstAsActive
155
150
  });
156
151
  </script>
157
152
 
@@ -160,18 +155,19 @@ defineExpose({
160
155
  ref="containerRef"
161
156
  role="list"
162
157
  tabindex="-1"
163
- :data-transition="itemTransition"
164
- class="pxd-list group/list m-0 p-0 max-w-full list-none bg-background-100 outline-none"
158
+ class="pxd-list m-0 p-0 max-w-full list-none bg-background-100 outline-none"
165
159
  v-bind="$attrs"
166
160
  @pointerover="onPointerOver"
167
161
  >
168
- <PScrollable class="p-2 h-full max-h-inherit rounded-inherit" fader-direction="vertical">
162
+ <PScrollable
163
+ class="h-full max-h-inherit rounded-inherit"
164
+ content-class="p-2"
165
+ fader-direction="vertical"
166
+ >
169
167
  <slot>
170
- <PListItem
171
- v-for="(option, index) in options"
172
- :key="option.value ?? index"
173
- v-bind="option"
174
- />
168
+ <PListItem v-for="(option, index) in options" :key="option.value ?? index" v-bind="option">
169
+ <slot name="item" :item="option" />
170
+ </PListItem>
175
171
  </slot>
176
172
  </PScrollable>
177
173
  </ul>
@@ -1,11 +1,8 @@
1
- import type { ComponentAs, ComponentLabel } from '../shared'
1
+ import type { ComponentAs, ComponentLabel, ComponentOption } from '../../types/shared'
2
2
 
3
- export interface ListOption extends Record<string, any> {
3
+ export interface ListOption extends Partial<ComponentOption> {
4
4
  as?: ComponentAs
5
5
  type?: 'default' | 'error' | 'warning' | 'separator'
6
- label?: ComponentLabel
7
- value?: any
8
- disabled?: boolean
9
6
  description?: ComponentLabel
10
7
  onClick?: (item: ListOptionSelected, ev: MouseEvent) => void
11
8
  }
@@ -15,8 +12,7 @@ export type ListOptionSelected = Omit<ListOption, 'as' | 'onClick'>
15
12
  export interface ListProps {
16
13
  loop?: boolean
17
14
  options?: ListOption[]
18
- keyListener?: boolean
19
- itemTransition?: boolean
15
+ toggleOnKeyPress?: boolean
20
16
  closeOnPressEscape?: boolean
21
17
  }
22
18
 
@@ -25,16 +21,3 @@ export interface ListEmits {
25
21
  escape: [KeyboardEvent]
26
22
  select: [MouseEvent, ListOptionSelected]
27
23
  }
28
-
29
- export interface ListItemProps {
30
- as?: ListOption['as']
31
- type?: ListOption['type']
32
- label?: ListOption['label']
33
- value?: ListOption['value']
34
- disabled?: ListOption['disabled']
35
- description?: ListOption['description']
36
- }
37
-
38
- export interface ListItemEmits {
39
- click: [ListOptionSelected, MouseEvent]
40
- }
@@ -1,4 +1,4 @@
1
- import type { ListItemProps } from '../list/types';
1
+ import type { ListItemProps } from './types';
2
2
  declare var __VLS_11: {};
3
3
  type __VLS_Slots = {} & {
4
4
  default?: (props: typeof __VLS_11) => any;
@@ -8,9 +8,10 @@ declare const __VLS_base: import("vue").DefineComponent<ListItemProps, {}, {}, {
8
8
  }, string, import("vue").PublicProps, Readonly<ListItemProps> & Readonly<{
9
9
  onClick?: ((args_0: import("../list/types").ListOptionSelected, args_1: MouseEvent) => any) | undefined;
10
10
  }>, {
11
- type: "default" | "error" | "warning" | "separator";
11
+ type: "error" | "default" | "warning" | "separator";
12
+ as: import("../../types/shared").ComponentAs;
12
13
  disabled: boolean;
13
- as: import("../list/types").ListOption["as"];
14
+ keywords: string[];
14
15
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
16
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
16
17
  declare const _default: typeof __VLS_export;