pxd 0.0.52 → 0.0.53

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 (258) hide show
  1. package/README.md +6 -3
  2. package/dist/components/active-graph/index.d.vue.ts +0 -2
  3. package/dist/components/active-graph/index.vue +35 -37
  4. package/dist/components/avatar/index.d.vue.ts +2 -2
  5. package/dist/components/avatar/index.vue +17 -16
  6. package/dist/components/avatar-group/index.d.vue.ts +1 -1
  7. package/dist/components/avatar-group/index.vue +4 -1
  8. package/dist/components/badge/cn.d.ts +90 -0
  9. package/dist/components/badge/cn.js +44 -0
  10. package/dist/components/badge/index.d.vue.ts +5 -33
  11. package/dist/components/badge/index.vue +10 -56
  12. package/dist/components/book/index.vue +90 -17
  13. package/dist/components/browser/index.vue +21 -6
  14. package/dist/components/button/cn.d.ts +121 -0
  15. package/dist/components/button/cn.js +55 -0
  16. package/dist/components/button/index.d.vue.ts +8 -14
  17. package/dist/components/button/index.vue +22 -74
  18. package/dist/components/carousel-group/index.d.vue.ts +1 -1
  19. package/dist/components/carousel-group/index.vue +32 -28
  20. package/dist/components/checkbox/cn.d.ts +67 -0
  21. package/dist/components/checkbox/cn.js +31 -0
  22. package/dist/components/checkbox/index.vue +9 -19
  23. package/dist/components/chip/cn.d.ts +49 -0
  24. package/dist/components/chip/cn.js +26 -0
  25. package/dist/components/chip/index.vue +13 -21
  26. package/dist/components/choicebox/index.vue +1 -1
  27. package/dist/components/choicebox-group/index.vue +6 -3
  28. package/dist/components/collapse/index.vue +7 -1
  29. package/dist/components/collapse-group/index.vue +7 -7
  30. package/dist/components/command-menu/index.vue +9 -8
  31. package/dist/components/command-menu-group/index.vue +4 -1
  32. package/dist/components/config-provider/index.d.vue.ts +1 -0
  33. package/dist/components/config-provider/index.vue +2 -1
  34. package/dist/components/countdown/index.vue +2 -10
  35. package/dist/components/dash-line/index.vue +22 -16
  36. package/dist/components/description/index.vue +4 -2
  37. package/dist/components/drawer/index.vue +19 -11
  38. package/dist/components/empty-state/index.vue +3 -1
  39. package/dist/components/error/cn.d.ts +22 -0
  40. package/dist/components/error/cn.js +15 -0
  41. package/dist/components/error/index.vue +13 -14
  42. package/dist/components/fader/index.vue +30 -14
  43. package/dist/components/gauge/index.vue +6 -6
  44. package/dist/components/grid/index.vue +16 -12
  45. package/dist/components/grid-item/index.vue +4 -4
  46. package/dist/components/hold-button/index.vue +19 -13
  47. package/dist/components/input/cn.d.ts +73 -0
  48. package/dist/components/input/cn.js +36 -0
  49. package/dist/components/input/index.d.vue.ts +14 -16
  50. package/dist/components/input/index.vue +74 -101
  51. package/dist/components/intersection-observer/index.vue +7 -3
  52. package/dist/components/kbd/index.vue +2 -2
  53. package/dist/components/link-button/index.d.vue.ts +8 -8
  54. package/dist/components/link-button/index.vue +17 -25
  55. package/dist/components/list/index.d.vue.ts +0 -1
  56. package/dist/components/list/index.vue +58 -57
  57. package/dist/components/list-item/cn.d.ts +22 -0
  58. package/dist/components/list-item/cn.js +15 -0
  59. package/dist/components/list-item/index.d.vue.ts +3 -3
  60. package/dist/components/list-item/index.vue +14 -25
  61. package/dist/components/loading-bar/cn.d.ts +70 -0
  62. package/dist/components/loading-bar/cn.js +32 -0
  63. package/dist/components/loading-bar/index.d.vue.ts +2 -0
  64. package/dist/components/loading-bar/index.vue +68 -61
  65. package/dist/components/loading-dots/index.vue +12 -4
  66. package/dist/components/menu/index.d.vue.ts +2 -2
  67. package/dist/components/menu/index.vue +4 -4
  68. package/dist/components/message/index.vue +82 -48
  69. package/dist/components/message-item/index.vue +7 -2
  70. package/dist/components/modal/index.vue +20 -12
  71. package/dist/components/more-button/index.d.vue.ts +1 -3
  72. package/dist/components/more-button/index.vue +7 -17
  73. package/dist/components/note/cn.d.ts +121 -0
  74. package/dist/components/note/cn.js +66 -0
  75. package/dist/components/note/index.d.vue.ts +3 -39
  76. package/dist/components/note/index.vue +18 -37
  77. package/dist/components/number-input/index.d.vue.ts +19 -10
  78. package/dist/components/number-input/index.vue +121 -75
  79. package/dist/components/overlay/index.vue +4 -20
  80. package/dist/components/pagination/index.vue +25 -8
  81. package/dist/components/pin-input/cn.d.ts +46 -0
  82. package/dist/components/pin-input/cn.js +25 -0
  83. package/dist/components/pin-input/index.vue +11 -20
  84. package/dist/components/placeholder/index.vue +11 -4
  85. package/dist/components/popover/index.d.vue.ts +4 -3
  86. package/dist/components/popover/index.vue +107 -54
  87. package/dist/components/progress/cn.d.ts +19 -0
  88. package/dist/components/progress/cn.js +14 -0
  89. package/dist/components/progress/index.d.vue.ts +1 -1
  90. package/dist/components/progress/index.vue +21 -14
  91. package/dist/components/radio/cn.d.ts +46 -0
  92. package/dist/components/radio/cn.js +42 -0
  93. package/dist/components/radio/index.vue +11 -18
  94. package/dist/components/resizable/index.vue +8 -2
  95. package/dist/components/resizable-handle/index.vue +1 -0
  96. package/dist/components/resizable-panel/index.vue +12 -11
  97. package/dist/components/skeleton/cn.d.ts +43 -0
  98. package/dist/components/skeleton/cn.js +24 -0
  99. package/dist/components/skeleton/index.d.vue.ts +4 -3
  100. package/dist/components/skeleton/index.vue +11 -20
  101. package/dist/components/slider/index.d.vue.ts +1 -1
  102. package/dist/components/slider/index.vue +14 -12
  103. package/dist/components/snippet/cn.d.ts +52 -0
  104. package/dist/components/snippet/cn.js +27 -0
  105. package/dist/components/snippet/index.vue +21 -29
  106. package/dist/components/spinner/index.vue +3 -1
  107. package/dist/components/stack/cn.d.ts +70 -0
  108. package/dist/components/stack/cn.js +33 -0
  109. package/dist/components/stack/index.d.vue.ts +2 -2
  110. package/dist/components/stack/index.vue +16 -31
  111. package/dist/components/status-dot/index.vue +5 -1
  112. package/dist/components/switch/cn.d.ts +16 -0
  113. package/dist/components/switch/cn.js +13 -0
  114. package/dist/components/switch/index.vue +5 -11
  115. package/dist/components/switch-group/index.vue +7 -4
  116. package/dist/components/text/cn.d.ts +67 -0
  117. package/dist/components/text/cn.js +34 -0
  118. package/dist/components/text/index.d.vue.ts +1 -1
  119. package/dist/components/text/index.vue +16 -25
  120. package/dist/components/textarea/cn.d.ts +58 -0
  121. package/dist/components/textarea/cn.js +30 -0
  122. package/dist/components/textarea/index.d.vue.ts +2 -0
  123. package/dist/components/textarea/index.vue +17 -24
  124. package/dist/components/theme-switcher/index.vue +6 -3
  125. package/dist/components/time-picker/index.d.vue.ts +2 -2
  126. package/dist/components/time-picker/index.vue +45 -25
  127. package/dist/components/toggle/index.vue +10 -6
  128. package/dist/components/tooltip/index.vue +3 -3
  129. package/dist/components/virtual-list/index.vue +1 -7
  130. package/dist/composables/use-browser-observer.d.ts +1 -1
  131. package/dist/composables/use-browser-observer.js +19 -15
  132. package/dist/composables/use-config-provider-context.d.ts +1 -0
  133. package/dist/composables/use-config-provider-context.js +5 -10
  134. package/dist/composables/use-countdown.js +1 -3
  135. package/dist/composables/use-deferred-value.js +1 -5
  136. package/dist/composables/use-delay-change.js +1 -4
  137. package/dist/composables/use-delay-destroy.js +1 -5
  138. package/dist/composables/use-loading-bar.d.ts +6 -14
  139. package/dist/composables/use-loading-bar.js +3 -14
  140. package/dist/composables/use-message.d.ts +9 -3
  141. package/dist/composables/use-message.js +9 -9
  142. package/dist/composables/use-model-value.d.ts +1 -0
  143. package/dist/composables/use-model-value.js +4 -2
  144. package/dist/composables/use-outside-click.js +12 -8
  145. package/dist/composables/use-pointer-gesture.js +5 -1
  146. package/dist/composables/use-toggle-value.js +1 -4
  147. package/dist/composables/use-virtual-list.js +14 -7
  148. package/dist/contexts/avatar.js +4 -4
  149. package/dist/contexts/carousel.js +1 -4
  150. package/dist/contexts/checkbox.js +1 -4
  151. package/dist/contexts/choicebox.js +2 -8
  152. package/dist/contexts/collapse.js +1 -4
  153. package/dist/contexts/list.js +5 -8
  154. package/dist/contexts/radio.js +4 -4
  155. package/dist/contexts/resizable.js +1 -4
  156. package/dist/contexts/switch.js +2 -8
  157. package/dist/index.d.ts +1 -0
  158. package/dist/styles/source.css +106 -59
  159. package/dist/styles/styles.css +1 -1
  160. package/dist/styles/tw.css +106 -59
  161. package/dist/types/components/avatar.d.ts +2 -2
  162. package/dist/types/components/button.d.ts +11 -4
  163. package/dist/types/components/index.d.ts +12 -0
  164. package/dist/types/components/input.d.ts +4 -5
  165. package/dist/types/components/list.d.ts +1 -1
  166. package/dist/types/components/switch.d.ts +1 -1
  167. package/dist/types/shared/props.d.ts +6 -4
  168. package/dist/types/shared/utils.d.ts +3 -1
  169. package/dist/utils/context.d.ts +2 -8
  170. package/dist/utils/date.d.ts +1 -1
  171. package/dist/utils/date.js +1 -5
  172. package/dist/utils/event.js +6 -18
  173. package/dist/utils/format.d.ts +1 -1
  174. package/dist/utils/format.js +1 -1
  175. package/dist/utils/is.d.ts +0 -1
  176. package/dist/utils/is.js +3 -2
  177. package/dist/utils/responsive.js +7 -4
  178. package/dist/utils/throttle.js +4 -2
  179. package/package.json +45 -43
  180. package/dist/components/_internal/fragment-container.vue.d.ts +0 -13
  181. package/dist/components/active-graph/index.vue.d.ts +0 -51
  182. package/dist/components/avatar/index.vue.d.ts +0 -34
  183. package/dist/components/avatar-group/index.vue.d.ts +0 -8
  184. package/dist/components/backtop/index.vue.d.ts +0 -21
  185. package/dist/components/badge/index.vue.d.ts +0 -52
  186. package/dist/components/book/index.vue.d.ts +0 -28
  187. package/dist/components/browser/index.vue.d.ts +0 -16
  188. package/dist/components/button/index.vue.d.ts +0 -29
  189. package/dist/components/carousel/index.vue.d.ts +0 -13
  190. package/dist/components/carousel-group/index.vue.d.ts +0 -35
  191. package/dist/components/checkbox/index.vue.d.ts +0 -26
  192. package/dist/components/checkbox-group/index.vue.d.ts +0 -28
  193. package/dist/components/chip/index.vue.d.ts +0 -24
  194. package/dist/components/choicebox/index.vue.d.ts +0 -16
  195. package/dist/components/choicebox-group/index.vue.d.ts +0 -24
  196. package/dist/components/collapse/index.vue.d.ts +0 -22
  197. package/dist/components/collapse-group/index.vue.d.ts +0 -20
  198. package/dist/components/command-menu/index.vue.d.ts +0 -42
  199. package/dist/components/command-menu-group/index.vue.d.ts +0 -17
  200. package/dist/components/command-menu-item/index.vue.d.ts +0 -13
  201. package/dist/components/config-provider/index.vue.d.ts +0 -22
  202. package/dist/components/countdown/index.vue.d.ts +0 -51
  203. package/dist/components/dash-line/index.vue.d.ts +0 -13
  204. package/dist/components/description/index.vue.d.ts +0 -20
  205. package/dist/components/drawer/index.vue.d.ts +0 -60
  206. package/dist/components/empty-state/index.vue.d.ts +0 -23
  207. package/dist/components/error/index.vue.d.ts +0 -22
  208. package/dist/components/fader/index.vue.d.ts +0 -12
  209. package/dist/components/gauge/index.vue.d.ts +0 -14
  210. package/dist/components/grid/index.vue.d.ts +0 -19
  211. package/dist/components/grid-item/index.vue.d.ts +0 -18
  212. package/dist/components/hold-button/index.vue.d.ts +0 -42
  213. package/dist/components/input/index.vue.d.ts +0 -55
  214. package/dist/components/intersection-observer/index.vue.d.ts +0 -39
  215. package/dist/components/kbd/index.vue.d.ts +0 -24
  216. package/dist/components/label/index.vue.d.ts +0 -13
  217. package/dist/components/link-button/index.vue.d.ts +0 -33
  218. package/dist/components/list/index.vue.d.ts +0 -44
  219. package/dist/components/list-item/index.vue.d.ts +0 -29
  220. package/dist/components/loading-bar/index.vue.d.ts +0 -15
  221. package/dist/components/loading-dots/index.vue.d.ts +0 -15
  222. package/dist/components/material/index.vue.d.ts +0 -18
  223. package/dist/components/menu/index.vue.d.ts +0 -33
  224. package/dist/components/message/index.vue.d.ts +0 -176
  225. package/dist/components/message-item/index.vue.d.ts +0 -15
  226. package/dist/components/modal/index.vue.d.ts +0 -58
  227. package/dist/components/more-button/index.vue.d.ts +0 -20
  228. package/dist/components/noise-background/index.vue.d.ts +0 -19
  229. package/dist/components/note/index.vue.d.ts +0 -64
  230. package/dist/components/number-input/index.vue.d.ts +0 -39
  231. package/dist/components/overlay/index.vue.d.ts +0 -35
  232. package/dist/components/pagination/index.vue.d.ts +0 -21
  233. package/dist/components/pin-input/index.vue.d.ts +0 -28
  234. package/dist/components/placeholder/index.vue.d.ts +0 -18
  235. package/dist/components/popover/index.vue.d.ts +0 -73
  236. package/dist/components/progress/index.vue.d.ts +0 -34
  237. package/dist/components/radio/index.vue.d.ts +0 -20
  238. package/dist/components/radio-group/index.vue.d.ts +0 -22
  239. package/dist/components/resizable/index.vue.d.ts +0 -19
  240. package/dist/components/resizable-handle/index.vue.d.ts +0 -3
  241. package/dist/components/resizable-panel/index.vue.d.ts +0 -20
  242. package/dist/components/scrollable/index.vue.d.ts +0 -0
  243. package/dist/components/skeleton/index.vue.d.ts +0 -26
  244. package/dist/components/slider/index.vue.d.ts +0 -26
  245. package/dist/components/snippet/index.vue.d.ts +0 -18
  246. package/dist/components/spinner/index.vue.d.ts +0 -3
  247. package/dist/components/stack/index.vue.d.ts +0 -30
  248. package/dist/components/status-dot/index.vue.d.ts +0 -11
  249. package/dist/components/switch/index.vue.d.ts +0 -20
  250. package/dist/components/switch-group/index.vue.d.ts +0 -23
  251. package/dist/components/teleport/index.vue.d.ts +0 -21
  252. package/dist/components/text/index.vue.d.ts +0 -26
  253. package/dist/components/textarea/index.vue.d.ts +0 -28
  254. package/dist/components/theme-switcher/index.vue.d.ts +0 -8
  255. package/dist/components/time-picker/index.vue.d.ts +0 -35
  256. package/dist/components/toggle/index.vue.d.ts +0 -41
  257. package/dist/components/tooltip/index.vue.d.ts +0 -32
  258. package/dist/components/virtual-list/index.vue.d.ts +0 -24
@@ -0,0 +1,13 @@
1
+ import { tv } from "tailwind-variants";
2
+ export const switchVariant = tv({
3
+ base: "pxd-switch--label px-3 text-sm font-medium flex size-full items-center justify-center truncate rounded-sm text-foreground-secondary peer-focus-ring select-none peer-checked:bg-gray-100 peer-disabled:cursor-not-allowed peer-disabled:text-gray-800 empty:hidden motion-safe:transition-all",
4
+ variants: {
5
+ disabled: {
6
+ true: "",
7
+ false: "peer-checked:text-foreground"
8
+ }
9
+ },
10
+ defaultVariants: {
11
+ disabled: false
12
+ }
13
+ });
@@ -3,6 +3,7 @@ import { computed } from "vue";
3
3
  import { useUniqueId } from "../../composables/use-unique-id-context";
4
4
  import { useSwitchGroupContext, useSwitchGroupModelValue } from "../../contexts/switch";
5
5
  import { getUniqueId } from "../../utils/uid";
6
+ import { switchVariant } from "./cn";
6
7
  defineOptions({
7
8
  name: "PSwitch",
8
9
  model: {
@@ -23,15 +24,8 @@ const switchGroupModelValue = useSwitchGroupModelValue();
23
24
  const isChecked = computed(() => switchGroupModelValue.value === props.value);
24
25
  const computedDisabled = computed(() => props.disabled || switchGroupContext.disabled);
25
26
  const computedRequired = computed(() => props.required || switchGroupContext.required);
26
- const computedClass = computed(() => {
27
- const classes = [
28
- "pxd-switch--label px-3 text-sm flex size-full items-center justify-center truncate rounded-sm text-foreground-secondary peer-focus-ring",
29
- "font-medium select-none peer-checked:bg-gray-100 peer-disabled:cursor-not-allowed peer-disabled:text-gray-800 empty:hidden motion-safe:transition-all"
30
- ];
31
- if (!computedDisabled.value) {
32
- classes.push("peer-checked:text-foreground");
33
- }
34
- return classes.join(" ");
27
+ const computedClasses = computed(() => {
28
+ return switchVariant({ disabled: computedDisabled.value });
35
29
  });
36
30
  function onSwitchFocusIn() {
37
31
  if (computedDisabled.value) {
@@ -57,9 +51,9 @@ function onSwitchFocusIn() {
57
51
  :name="switchGroupName"
58
52
  :disabled="computedDisabled"
59
53
  :required="computedRequired"
60
- >
54
+ />
61
55
 
62
- <div :class="computedClass" @focusin="onSwitchFocusIn">
56
+ <div :class="computedClasses" @focusin="onSwitchFocusIn">
63
57
  <slot>
64
58
  {{ label }}
65
59
  </slot>
@@ -14,9 +14,9 @@ defineOptions({
14
14
  }
15
15
  });
16
16
  const props = defineProps({
17
- block: { type: Boolean, required: false },
18
17
  disabled: { type: Boolean, required: false },
19
18
  required: { type: Boolean, required: false },
19
+ fullWidth: { type: Boolean, required: false },
20
20
  size: { type: String, required: false },
21
21
  options: { type: Array, required: false, default: () => [] },
22
22
  modelValue: { type: [String, Number], required: false, default: "" }
@@ -27,16 +27,19 @@ const SIZES = {
27
27
  md: "h-9",
28
28
  lg: "h-10"
29
29
  };
30
- const config = useConfigProvider();
30
+ const configProvider = useConfigProvider();
31
31
  const modelValue = useModelValue(props, emits);
32
- const computedSize = computed(() => getFallbackValue(props.size, SIZES, config.size));
32
+ const computedSize = computed(() => getFallbackValue(props.size, SIZES, configProvider.size));
33
33
  provideUniqueId("SwitchGroupName");
34
34
  provideSwitchGroupContext(props);
35
35
  provideSwitchGroupModelValue(modelValue);
36
36
  </script>
37
37
 
38
38
  <template>
39
- <div class="pxd-switch-group p-1 flex touch-manipulation rounded-md border" :class="[block ? 'w-full' : 'w-max', computedSize]">
39
+ <div
40
+ class="pxd-switch-group p-1 flex touch-manipulation rounded-md border"
41
+ :class="[fullWidth ? 'w-full' : 'w-max', computedSize]"
42
+ >
40
43
  <slot>
41
44
  <PSwitch
42
45
  v-for="option in options"
@@ -0,0 +1,67 @@
1
+ export declare const textVariant: import("tailwind-variants").TVReturnType<{
2
+ align: {
3
+ left: string;
4
+ center: string;
5
+ right: string;
6
+ };
7
+ monospace: {
8
+ true: string;
9
+ false: string;
10
+ };
11
+ secondary: {
12
+ true: string;
13
+ false: string;
14
+ };
15
+ truncate: {
16
+ true: string;
17
+ false: string;
18
+ };
19
+ lineClamp: {
20
+ true: string;
21
+ false: string;
22
+ };
23
+ }, undefined, "pxd-text m-0", {
24
+ align: {
25
+ left: string;
26
+ center: string;
27
+ right: string;
28
+ };
29
+ monospace: {
30
+ true: string;
31
+ false: string;
32
+ };
33
+ secondary: {
34
+ true: string;
35
+ false: string;
36
+ };
37
+ truncate: {
38
+ true: string;
39
+ false: string;
40
+ };
41
+ lineClamp: {
42
+ true: string;
43
+ false: string;
44
+ };
45
+ }, undefined, import("tailwind-variants").TVReturnType<{
46
+ align: {
47
+ left: string;
48
+ center: string;
49
+ right: string;
50
+ };
51
+ monospace: {
52
+ true: string;
53
+ false: string;
54
+ };
55
+ secondary: {
56
+ true: string;
57
+ false: string;
58
+ };
59
+ truncate: {
60
+ true: string;
61
+ false: string;
62
+ };
63
+ lineClamp: {
64
+ true: string;
65
+ false: string;
66
+ };
67
+ }, undefined, "pxd-text m-0", unknown, unknown, undefined>>;
@@ -0,0 +1,34 @@
1
+ import { tv } from "tailwind-variants";
2
+ export const textVariant = tv({
3
+ base: "pxd-text m-0",
4
+ variants: {
5
+ align: {
6
+ left: "text-left",
7
+ center: "text-center",
8
+ right: "text-right"
9
+ },
10
+ monospace: {
11
+ true: "font-mono",
12
+ false: ""
13
+ },
14
+ secondary: {
15
+ true: "text-foreground-secondary",
16
+ false: ""
17
+ },
18
+ truncate: {
19
+ true: "truncate",
20
+ false: ""
21
+ },
22
+ lineClamp: {
23
+ true: "line-clamp",
24
+ false: ""
25
+ }
26
+ },
27
+ defaultVariants: {
28
+ align: "left",
29
+ monospace: false,
30
+ secondary: false,
31
+ truncate: false,
32
+ lineClamp: false
33
+ }
34
+ });
@@ -12,8 +12,8 @@ type __VLS_Slots = {} & {
12
12
  default?: (props: typeof __VLS_8) => any;
13
13
  };
14
14
  declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
15
- as: ComponentAs;
16
15
  align: "left" | "center" | "right";
16
+ as: ComponentAs;
17
17
  truncate: boolean | number | string;
18
18
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
19
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,7 +1,8 @@
1
1
  <script setup>
2
2
  import { computed } from "vue";
3
- import { getCssUnitValue, isTruthyProp } from "../../utils/format";
3
+ import { getCssUnitValue } from "../../utils/format";
4
4
  import { getResponsiveValue } from "../../utils/responsive";
5
+ import { textVariant } from "./cn";
5
6
  defineOptions({
6
7
  name: "PText"
7
8
  });
@@ -13,12 +14,7 @@ const props = defineProps({
13
14
  monospace: { type: Boolean, required: false },
14
15
  secondary: { type: Boolean, required: false }
15
16
  });
16
- const presetAlignClasses = {
17
- left: "text-left",
18
- center: "text-center",
19
- right: "text-right"
20
- };
21
- const presetSizeClasses = {
17
+ const presetSize = {
22
18
  "--text-xs": "text-xs",
23
19
  "--text-sm": "sm:text-sm",
24
20
  "--text-md": "md:text-md",
@@ -43,30 +39,25 @@ const computedStyle = computed(() => {
43
39
  }
44
40
  return styles;
45
41
  });
46
- const computedClass = computed(() => {
42
+ const computedClasses = computed(() => {
47
43
  const { truncate, monospace, secondary } = props;
44
+ const baseClass = textVariant({
45
+ align: props.align,
46
+ monospace,
47
+ secondary,
48
+ truncate: truncate === true,
49
+ lineClamp: typeof truncate === "number"
50
+ });
48
51
  const classes = [
49
- "pxd-text m-0",
50
- presetAlignClasses[props.align],
51
- ...Object.keys(formattedSize.value).map((bp) => presetSizeClasses[bp])
52
- ];
53
- if (monospace) {
54
- classes.push("font-mono");
55
- }
56
- if (secondary) {
57
- classes.push("text-foreground-secondary");
58
- }
59
- if (isTruthyProp(truncate)) {
60
- classes.push("truncate");
61
- } else if (truncate) {
62
- classes.push(`line-clamp`);
63
- }
64
- return classes.join(" ");
52
+ baseClass,
53
+ ...Object.keys(formattedSize.value).map((bp) => presetSize[bp])
54
+ ].filter(Boolean).join(" ");
55
+ return classes;
65
56
  });
66
57
  </script>
67
58
 
68
59
  <template>
69
- <Component :is="as" :class="computedClass" :style="computedStyle">
60
+ <Component :is="as" :class="computedClasses" :style="computedStyle">
70
61
  <slot />
71
62
  </Component>
72
63
  </template>
@@ -0,0 +1,58 @@
1
+ export declare const textareaVariant: import("tailwind-variants").TVReturnType<{
2
+ size: {
3
+ xs: string;
4
+ sm: string;
5
+ md: string;
6
+ lg: string;
7
+ };
8
+ disabled: {
9
+ true: string;
10
+ false: string;
11
+ };
12
+ readonly: {
13
+ true: string;
14
+ false: string;
15
+ };
16
+ error: {
17
+ true: string;
18
+ false: string;
19
+ };
20
+ }, undefined, "", {
21
+ size: {
22
+ xs: string;
23
+ sm: string;
24
+ md: string;
25
+ lg: string;
26
+ };
27
+ disabled: {
28
+ true: string;
29
+ false: string;
30
+ };
31
+ readonly: {
32
+ true: string;
33
+ false: string;
34
+ };
35
+ error: {
36
+ true: string;
37
+ false: string;
38
+ };
39
+ }, undefined, import("tailwind-variants").TVReturnType<{
40
+ size: {
41
+ xs: string;
42
+ sm: string;
43
+ md: string;
44
+ lg: string;
45
+ };
46
+ disabled: {
47
+ true: string;
48
+ false: string;
49
+ };
50
+ readonly: {
51
+ true: string;
52
+ false: string;
53
+ };
54
+ error: {
55
+ true: string;
56
+ false: string;
57
+ };
58
+ }, undefined, "", unknown, unknown, undefined>>;
@@ -0,0 +1,30 @@
1
+ import { tv } from "tailwind-variants";
2
+ export const textareaVariant = tv({
3
+ base: "",
4
+ variants: {
5
+ size: {
6
+ xs: "text-xs",
7
+ sm: "text-sm",
8
+ md: "text-sm",
9
+ lg: "text-base"
10
+ },
11
+ disabled: {
12
+ true: "is-disabled",
13
+ false: ""
14
+ },
15
+ readonly: {
16
+ true: "is-readonly",
17
+ false: ""
18
+ },
19
+ error: {
20
+ true: "is-error",
21
+ false: ""
22
+ }
23
+ },
24
+ defaultVariants: {
25
+ size: "md",
26
+ disabled: false,
27
+ readonly: false,
28
+ error: false
29
+ }
30
+ });
@@ -1,5 +1,7 @@
1
1
  import type { ComponentLabel, ComponentSizeWithXs } from '../../types/shared';
2
2
  interface Props {
3
+ rows?: string | number;
4
+ cols?: string | number;
3
5
  size?: ComponentSizeWithXs;
4
6
  error?: boolean | string;
5
7
  readonly?: boolean;
@@ -2,8 +2,9 @@
2
2
  import { computed } from "vue";
3
3
  import { useConfigProvider } from "../../composables/use-config-provider-context";
4
4
  import { useModelValue } from "../../composables/use-model-value";
5
- import { getFallbackValue } from "../../utils/get";
5
+ import { isTruthyProp } from "../../utils/format";
6
6
  import { getUniqueId } from "../../utils/uid";
7
+ import { textareaVariant } from "./cn";
7
8
  defineOptions({
8
9
  name: "PTextarea",
9
10
  model: {
@@ -12,6 +13,8 @@ defineOptions({
12
13
  }
13
14
  });
14
15
  const props = defineProps({
16
+ rows: { type: [String, Number], required: false },
17
+ cols: { type: [String, Number], required: false },
15
18
  size: { type: String, required: false },
16
19
  error: { type: [Boolean, String], required: false },
17
20
  readonly: { type: Boolean, required: false },
@@ -25,27 +28,15 @@ const props = defineProps({
25
28
  });
26
29
  const emits = defineEmits(["update:modelValue", "change", "focus", "blur"]);
27
30
  const uniqueId = getUniqueId();
28
- const SIZES = {
29
- xs: "text-xs",
30
- sm: "text-sm",
31
- md: "text-sm",
32
- lg: "text-base"
33
- };
34
31
  const modelValue = useModelValue(props, emits);
35
- const config = useConfigProvider();
36
- const computedClass = computed(() => {
37
- const classes = [];
38
- classes.push(getFallbackValue(props.size, SIZES, config.size));
39
- if (props.disabled) {
40
- classes.push("is-disabled");
41
- }
42
- if (props.readonly) {
43
- classes.push("is-readonly");
44
- }
45
- if (props.error) {
46
- classes.push("is-error");
47
- }
48
- return classes.join(" ");
32
+ const configProvider = useConfigProvider();
33
+ const computedClasses = computed(() => {
34
+ return textareaVariant({
35
+ size: props.size || configProvider.size,
36
+ error: isTruthyProp(props.error),
37
+ disabled: isTruthyProp(props.disabled),
38
+ readonly: isTruthyProp(props.readonly)
39
+ });
49
40
  });
50
41
  function onInputFocus(event) {
51
42
  emits("focus", event);
@@ -61,16 +52,18 @@ function onInputChange(event) {
61
52
  <template>
62
53
  <label
63
54
  :for="uniqueId"
64
- class="pxd-textarea pxd-input--border flex size-full min-h-[inherit] max-w-full items-center justify-center overflow-hidden rounded-md bg-background-100 motion-safe:transition-all"
65
- :class="computedClass"
55
+ class="pxd-textarea pxd-input--border flex size-full min-h-inherit max-w-full items-center justify-center overflow-hidden rounded-md bg-background-100 motion-safe:transition-all"
56
+ :class="computedClasses"
66
57
  >
67
58
  <textarea
68
59
  :id="uniqueId"
69
60
  v-model="modelValue"
70
- class="py-2.5 px-3 size-full min-h-[inherit] resize-none appearance-none rounded-inherit border-none bg-transparent font-inherit outline-none placeholder:text-gray-600 placeholder:select-none disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-700 disabled:placeholder:text-gray-400"
61
+ class="py-2.5 px-3 size-full min-h-inherit resize-none appearance-none rounded-inherit border-none bg-transparent font-inherit outline-none placeholder:text-gray-600 placeholder:select-none disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-700 disabled:placeholder:text-gray-400"
71
62
  autocorrect="off"
72
63
  autocomplete="off"
73
64
  autocapitalize="off"
65
+ :rows="rows"
66
+ :cols="cols"
74
67
  :readonly="readonly"
75
68
  :disabled="disabled"
76
69
  :required="required"
@@ -13,9 +13,12 @@ const { isDark, toggleDarkMode } = useColorScheme({
13
13
  syncStatus: true
14
14
  });
15
15
  const renderIcon = computed(() => isDark.value ? MoonIcon : SunIcon);
16
- watch(() => isDark.value, (newVal) => {
17
- emits("toggle", newVal ? "dark" : "light");
18
- });
16
+ watch(
17
+ () => isDark.value,
18
+ (newVal) => {
19
+ emits("toggle", newVal ? "dark" : "light");
20
+ }
21
+ );
19
22
  </script>
20
23
 
21
24
  <template>
@@ -6,7 +6,7 @@ interface Props {
6
6
  presets?: DateTimePreset[];
7
7
  disabled?: boolean;
8
8
  clearable?: boolean;
9
- modelValue?: Date | string | number;
9
+ modelValue?: Date | string | number | null;
10
10
  prefixIcon?: boolean;
11
11
  placeholder?: string;
12
12
  showSeconds?: boolean;
@@ -24,7 +24,7 @@ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {},
24
24
  "onUpdate:modelValue"?: ((args_0: string) => any) | undefined;
25
25
  }>, {
26
26
  format: string;
27
- modelValue: Date | string | number;
27
+ modelValue: Date | string | number | null;
28
28
  closeOnPressEscape: boolean;
29
29
  presets: DateTimePreset[];
30
30
  prefixIcon: boolean;
@@ -22,7 +22,7 @@ const props = defineProps({
22
22
  presets: { type: Array, required: false, default: () => [] },
23
23
  disabled: { type: Boolean, required: false },
24
24
  clearable: { type: Boolean, required: false },
25
- modelValue: { type: [Date, String, Number], required: false, default: "" },
25
+ modelValue: { type: [Date, String, Number, null], required: false, default: "" },
26
26
  prefixIcon: { type: Boolean, required: false, default: true },
27
27
  placeholder: { type: String, required: false },
28
28
  showSeconds: { type: Boolean, required: false, default: true },
@@ -38,7 +38,7 @@ const VALUE_POSITION_MAP = {
38
38
  second: 2
39
39
  };
40
40
  const popoverTrigger = ["click"];
41
- const config = useConfigProvider();
41
+ const configProvider = useConfigProvider();
42
42
  const { isXs, attrs } = usePopoverResponsive();
43
43
  const timeHoursRef = shallowRef();
44
44
  const timeMinutesRef = shallowRef();
@@ -106,7 +106,11 @@ async function setTimesScrollTop() {
106
106
  dayjsDateTime.value = dayjs();
107
107
  }
108
108
  const elList = [timeHoursRef.value, timeMinutesRef.value, timeSecondsRef.value];
109
- const modelValueList = [dayjsDateTime.value.hour(), dayjsDateTime.value.minute(), dayjsDateTime.value.second()];
109
+ const modelValueList = [
110
+ dayjsDateTime.value.hour(),
111
+ dayjsDateTime.value.minute(),
112
+ dayjsDateTime.value.second()
113
+ ];
110
114
  elList.forEach((el, i) => {
111
115
  const scrollTop = modelValueList[i] * HEIGHT;
112
116
  el?.scrollTo({ top: scrollTop });
@@ -138,9 +142,6 @@ function updateModelValue() {
138
142
  function onInputValueChange(value) {
139
143
  updateDayjsDateTime(value);
140
144
  updateModelValue();
141
- }
142
- function onInputBlurChange() {
143
- updateModelValue();
144
145
  hidePopover();
145
146
  }
146
147
  function onPresetClick(ev) {
@@ -156,7 +157,8 @@ function onPresetClick(ev) {
156
157
  if (!presetValue) {
157
158
  return;
158
159
  }
159
- onInputValueChange(presetValue);
160
+ updateDayjsDateTime(presetValue);
161
+ updateModelValue();
160
162
  hidePopover();
161
163
  }
162
164
  function onConfirmClick() {
@@ -173,14 +175,11 @@ watch(() => props.modelValue, updateDayjsDateTime, { immediate: true });
173
175
 
174
176
  <template>
175
177
  <PPopover
176
- enterable
177
178
  :trigger="popoverTrigger"
178
- :show-delay="0"
179
- :hide-delay="0"
180
179
  :disabled="disabled"
181
180
  :class="$attrs.class"
182
181
  :style="$attrs.style"
183
- :toggle-click="false"
182
+ :toggle-on-trigger="false"
184
183
  :visible="popoverVisible"
185
184
  :unset-position="isXs"
186
185
  :wrapper-class="attrs.wrapperClass"
@@ -208,55 +207,76 @@ watch(() => props.modelValue, updateDayjsDateTime, { immediate: true });
208
207
  v-bind="$attrs"
209
208
  @clear="onInputValueChange"
210
209
  @change="onInputValueChange"
211
- @keydown.enter="onInputBlurChange"
212
210
  >
213
211
  <template v-if="prefixIcon" #prefix>
214
- <CalendarIcon />
212
+ <CalendarIcon class="ml-3" />
215
213
  </template>
216
214
  </PInput>
217
215
 
218
216
  <template #content>
219
217
  <div class="max-sm:p-2 p-1 gap-1 flex items-center justify-between border-b" @click.stop>
220
218
  <PButton size="xs" variant="ghost" class="sm:px-0! text-13px" @click="onCancelClick">
221
- {{ config.locale.confirm.cancel }}
219
+ {{ configProvider.locale.confirm.cancel }}
222
220
  </PButton>
223
221
 
224
222
  <PButton size="xs" variant="ghost" class="sm:px-0! text-13px" @click="onConfirmClick">
225
- {{ config.locale.date.now }}
223
+ {{ configProvider.locale.date.now }}
226
224
  </PButton>
227
225
  </div>
228
226
 
229
- <div class="sm:text-sm flex max-w-full transform-gpu items-stretch tabular-nums outline-none select-none max-sm:text-15px" @click.stop="onTimeListClick">
227
+ <div
228
+ class="sm:text-sm max-sm:text-15px flex max-w-full transform-gpu items-stretch tabular-nums outline-none select-none"
229
+ @click.stop="onTimeListClick"
230
+ >
230
231
  <div class="p-2 gap-1 relative mx-auto flex items-center">
231
232
  <div class="pxd-time-picker--list relative">
232
- <ul ref="timeHoursRef" data-type="hour" class="w-8 h-40 px-0 m-0 py-16 scrollbar-hidden list-none overflow-x-hidden overflow-y-scroll overscroll-contain text-center outline-none [-webkit-overflow-scrolling:auto]" @scroll.stop="onTimeListScroll">
233
- <li v-for="_, i of 24" :key="i" class="h-8 leading-8 cursor-pointer">
233
+ <ul
234
+ ref="timeHoursRef"
235
+ data-type="hour"
236
+ class="w-8 h-40 px-0 m-0 py-16 scrollbar-hidden list-none overflow-x-hidden overflow-y-scroll overscroll-contain text-center outline-none [-webkit-overflow-scrolling:auto]"
237
+ @scroll.stop="onTimeListScroll"
238
+ >
239
+ <li v-for="(_, i) of 24" :key="i" class="h-8 leading-8 cursor-pointer">
234
240
  {{ padStringZero(i) }}
235
241
  </li>
236
242
  </ul>
237
243
  </div>
238
244
  <div class="pxd-time-picker--list relative">
239
- <ul ref="timeMinutesRef" data-type="minute" class="w-8 h-40 px-0 m-0 py-16 scrollbar-hidden list-none overflow-x-hidden overflow-y-scroll overscroll-contain text-center outline-none [-webkit-overflow-scrolling:auto]" @scroll.stop="onTimeListScroll">
240
- <li v-for="_, i of 60" :key="i" class="h-8 leading-8 cursor-pointer">
245
+ <ul
246
+ ref="timeMinutesRef"
247
+ data-type="minute"
248
+ class="w-8 h-40 px-0 m-0 py-16 scrollbar-hidden list-none overflow-x-hidden overflow-y-scroll overscroll-contain text-center outline-none [-webkit-overflow-scrolling:auto]"
249
+ @scroll.stop="onTimeListScroll"
250
+ >
251
+ <li v-for="(_, i) of 60" :key="i" class="h-8 leading-8 cursor-pointer">
241
252
  {{ padStringZero(i) }}
242
253
  </li>
243
254
  </ul>
244
255
  </div>
245
256
  <div v-if="showSeconds" class="pxd-time-picker--list relative">
246
- <ul ref="timeSecondsRef" data-type="second" class="w-8 h-40 px-0 m-0 py-16 scrollbar-hidden list-none overflow-x-hidden overflow-y-scroll overscroll-contain text-center outline-none [-webkit-overflow-scrolling:auto]" @scroll.stop="onTimeListScroll">
247
- <li v-for="_, i of 60" :key="i" class="h-8 leading-8 cursor-pointer">
257
+ <ul
258
+ ref="timeSecondsRef"
259
+ data-type="second"
260
+ class="w-8 h-40 px-0 m-0 py-16 scrollbar-hidden list-none overflow-x-hidden overflow-y-scroll overscroll-contain text-center outline-none [-webkit-overflow-scrolling:auto]"
261
+ @scroll.stop="onTimeListScroll"
262
+ >
263
+ <li v-for="(_, i) of 60" :key="i" class="h-8 leading-8 cursor-pointer">
248
264
  {{ padStringZero(i) }}
249
265
  </li>
250
266
  </ul>
251
267
  </div>
252
268
  </div>
253
269
 
254
- <div v-if="presets?.length" class="max-sm:w-36 sm:w-25 p-2 gap-1 scrollbar-hidden flex flex-wrap content-start self-stretch overflow-auto border-l outline-none" @click="onPresetClick">
270
+ <div
271
+ v-if="presets?.length"
272
+ class="max-sm:w-36 sm:w-25 p-2 gap-1 scrollbar-hidden flex flex-wrap content-start self-stretch overflow-auto border-l outline-none"
273
+ @click="onPresetClick"
274
+ >
255
275
  <button
256
- v-for="preset, i in presets"
276
+ v-for="(preset, i) in presets"
257
277
  :key="preset.label"
258
278
  :data-index="i"
259
- class="px-1.5 py-0.5 sm:text-13px sm:leading-4 cursor-pointer appearance-none rounded-sm border-none bg-gray-300 font-inherit whitespace-nowrap text-foreground self-focus-ring outline-none max-sm:leading-5 max-sm:text-sm hover:bg-gray-400 active:bg-gray-500 motion-safe:transition-all"
279
+ class="px-1.5 py-0.5 sm:text-13px sm:leading-4 max-sm:leading-5 max-sm:text-sm cursor-pointer appearance-none rounded-sm border-none bg-gray-300 font-inherit whitespace-nowrap text-foreground self-focus-ring outline-none hover:bg-gray-400 active:bg-gray-500 motion-safe:transition-all"
260
280
  >
261
281
  {{ preset.label }}
262
282
  </button>