adata-ui 2.1.40-beta.12 → 2.1.40-beta.14

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.
@@ -30,7 +30,7 @@ const classes = computed(() =>
30
30
  props.disabled ? 'text-gray-500 bg-deepblue-900/5' : typeSwitchValues[props.view][props.type],
31
31
  'inline-flex items-center justify-center font-medium rounded-full select-none inline-flex outline-none',
32
32
  sizeSwitchValues[props.size],
33
- props.value && props.value.toString().length > 2 ? 'w-auto' : '',
33
+ props.value && props.value.toString().length > 1 ? 'w-auto' : '',
34
34
  ])
35
35
 
36
36
  export type StateType = {
@@ -70,8 +70,8 @@ const typeSwitchValues: ViewType = {
70
70
  }
71
71
 
72
72
  const sizeSwitchValues: SizeSwitchValues = {
73
- sm: 'w-4 h-4 px-1 text-[9.5px]',
74
- md: 'w-5 h-5 px-1 text-[10px]',
73
+ sm: 'w-4 h-4 px-1 text-body-sm',
74
+ md: 'w-5 h-5 px-1 text-body-sm',
75
75
  lg: 'px-2 w-6 h-6 text-body-sm font-semibold',
76
76
  }
77
77
  </script>
@@ -64,14 +64,14 @@ const CHIP_CLASS: Record<Color, Record<View | 'selected', string>> = {
64
64
  }
65
65
 
66
66
  const DOT_CLASS: Record<Color, Record<View, string>> = {
67
- gray: { outline: 'bg-[#4A5565] dark:bg-gray-400', solid: 'bg-[#4A5565] dark:bg-gray-400' },
67
+ gray: { outline: 'bg-[#6A7282] dark:bg-gray-300', solid: 'bg-[#6A7282] dark:bg-gray-300' },
68
68
  blue: { outline: 'bg-[#068DFF] dark:bg-blue-400', solid: 'bg-[#068DFF] dark:bg-blue-400' },
69
69
  green: { outline: 'bg-[#00A63E] dark:bg-green-400', solid: 'bg-[#00A63E] dark:bg-green-400' },
70
70
  yellow: { outline: 'bg-[#E17100] dark:bg-orange-400', solid: 'bg-[#E17100] dark:bg-orange-400' },
71
71
  red: { outline: 'bg-[#E7000B] dark:bg-red-400', solid: 'bg-[#E7000B] dark:bg-red-400' },
72
72
  }
73
73
 
74
- const DOT_SELECTED_CLASS = 'bg-white dark:bg-gray-100'
74
+ const DOT_SELECTED_CLASS = 'bg-white'
75
75
 
76
76
  function dotColorName(option: Option): Color {
77
77
  return option.color ?? props.color
@@ -1,31 +1,36 @@
1
1
  <script lang="ts" setup>
2
- import {twMerge} from '#adata-ui/utils/twMerge';
2
+ type BadgeType = 'primary' | 'success' | 'danger' | 'gray' | 'warning'
3
+ type BadgeView = 'default' | 'inverted' | 'transparent'
4
+ type BadgeSize = 'xs' | 'sm' | 'lg'
3
5
 
4
- defineOptions({ name: 'AStatusBadge' })
6
+ type StateType = {
7
+ [key in BadgeType]?: string
8
+ }
9
+
10
+ interface ViewType {
11
+ default: StateType
12
+ inverted: StateType
13
+ transparent: StateType
14
+ }
5
15
 
6
16
  interface Props {
7
- type?: 'primary' | 'success' | 'danger' | 'gray' | 'orange' | 'warning'
8
- view?: 'default' | 'inverted' | 'transparent'
9
- size?: 'xs' | 'sm' | 'lg'
17
+ type?: BadgeType
18
+ view?: BadgeView
19
+ size?: BadgeSize
20
+ point?: boolean
10
21
  customClasses?: string
11
22
  }
12
23
 
24
+ defineOptions({ name: 'AStatusBadge' })
25
+
13
26
  const props = withDefaults(defineProps<Props>(), {
14
27
  type: 'primary',
15
28
  view: 'default',
16
29
  size: 'lg',
17
- customClasses: ''
30
+ point: false,
31
+ customClasses: '',
18
32
  })
19
33
 
20
- const classes = computed(() =>
21
- [
22
- 'text-body-md rounded-sm select-none inline-flex gap-[5.5px] justify-center items-center border',
23
- typeSwitchValues[props.view][props.type],
24
- props.size === 'xs'? 'px-4 py-[2px] text-body-sm font-bold' : '',
25
- props.size === 'sm'? 'text-body-sm font-semibold px-4 py-[2px] h-6' : '',
26
- props.size === 'lg'? 'px-4 py-[7.5px] font-semibold' : '',
27
- ])
28
-
29
34
  const typeSwitchValues: ViewType = {
30
35
  default: {
31
36
  primary: 'bg-[#068DFF] text-white border-transparent dark:bg-[#068DFF]/30 dark:text-blue-100',
@@ -33,45 +38,68 @@ const typeSwitchValues: ViewType = {
33
38
  danger: 'bg-[#E7000B] text-white border-transparent dark:bg-[#E7000B]/30 dark:text-red-100',
34
39
  warning: 'bg-[#E17100] text-white border-transparent dark:bg-[#E17100]/30 dark:text-orange-100',
35
40
  gray: 'bg-[#4A5565] text-white border-transparent dark:bg-[#4A5565]/30 dark:text-gray-100',
36
- orange: 'bg-[#E17100] text-white border-transparent dark:bg-[#E17100]/30 dark:text-orange-100'
37
41
  },
38
42
  inverted: {
39
43
  primary: 'bg-[#F0F8FF] text-[#068DFF] border-transparent dark:bg-[#068DFF]/10 dark:text-blue-400',
40
- success: 'bg-[#DCFCE7] text-[#00A63E] border-transparent dark:bg-[#00A63E]/10 dark:text-green-400',
41
- danger: 'bg-[#FFE2E2] text-[#E7000B] border-transparent dark:bg-[#E7000B]/10 dark:text-red-400',
42
- warning: 'bg-[#FEF3C6] text-[#E17100] border-transparent dark:bg-[#E17100]/10 dark:text-orange-400',
43
- gray: 'bg-[#F3F4F6] text-[#4A5565] border-transparent dark:bg-[#4A5565]/10 dark:text-gray-300',
44
- orange: 'bg-[#FEF3C6] text-[#E17100] border-transparent dark:bg-[#E17100]/10 dark:text-orange-400'
44
+ success: 'bg-[#DCFCE7] text-[#008236] border-transparent dark:bg-[#00A63E]/10 dark:text-green-400',
45
+ danger: 'bg-[#FFE2E2] text-[#C10007] border-transparent dark:bg-[#E7000B]/10 dark:text-red-400',
46
+ warning: 'bg-[#FEF3C6] text-[#9A5800] border-transparent dark:bg-[#E17100]/10 dark:text-orange-400',
47
+ gray: 'bg-[#F3F4F6] text-[#364153] border-transparent dark:bg-[#4A5565]/10 dark:text-gray-300',
45
48
  },
46
49
  transparent: {
47
- primary: 'bg-white border-[#B3DCFF] text-[#068DFF] dark:bg-transparent dark:border-[#068DFF]/50 dark:text-blue-400',
48
- success: 'bg-white border-[#7BF1A8] text-[#00A63E] dark:bg-transparent dark:border-[#00A63E]/50 dark:text-green-400',
49
- danger: 'bg-white border-[#FFA2A2] text-[#E7000B] dark:bg-transparent dark:border-[#E7000B]/50 dark:text-red-400',
50
- warning: 'bg-white border-[#FFD230] text-[#E17100] dark:bg-transparent dark:border-[#E17100]/50 dark:text-orange-400',
51
- gray: 'bg-white border-[#D1D5DC] text-[#4A5565] dark:bg-transparent dark:border-[#4A5565]/50 dark:text-gray-300',
52
- orange: 'bg-white border-[#FFD230] text-[#E17100] dark:bg-transparent dark:border-[#E17100]/50 dark:text-orange-400'
53
- }
50
+ primary: 'bg-white border-[#B3DCFF] text-[#0066BD] dark:bg-transparent dark:border-[#068DFF]/50 dark:text-blue-400',
51
+ success: 'bg-white border-[#7BF1A8] text-[#008236] dark:bg-transparent dark:border-[#00A63E]/50 dark:text-green-400',
52
+ danger: 'bg-white border-[#FFA2A2] text-[#C10007] dark:bg-transparent dark:border-[#E7000B]/50 dark:text-red-400',
53
+ warning: 'bg-white border-[#FFD230] text-[#9A5800] dark:bg-transparent dark:border-[#E17100]/50 dark:text-orange-400',
54
+ gray: 'bg-white border-[#D1D5DC] text-[#364153] dark:bg-transparent dark:border-[#4A5565]/50 dark:text-gray-300',
55
+ },
54
56
  }
55
57
 
56
-
57
-
58
-
59
- type StateType = {
60
- [key in 'primary' | 'success' | 'danger' | 'gray' | 'orange' | 'warning']?: string
58
+ const pointSwitchValues: ViewType = {
59
+ default: {
60
+ primary: 'bg-white',
61
+ success: 'bg-white',
62
+ danger: 'bg-white',
63
+ warning: 'bg-white',
64
+ gray: 'bg-white',
65
+ },
66
+ inverted: {
67
+ primary: 'bg-[#068DFF] dark:bg-blue-400',
68
+ success: 'bg-[#00A63E] dark:bg-green-400',
69
+ danger: 'bg-[#E7000B] dark:bg-red-400',
70
+ warning: 'bg-[#E17100] dark:bg-orange-400',
71
+ gray: 'bg-[#6A7282] dark:bg-gray-300',
72
+ },
73
+ transparent: {
74
+ primary: 'bg-[#068DFF] dark:bg-blue-400',
75
+ success: 'bg-[#00A63E] dark:bg-green-400',
76
+ danger: 'bg-[#E7000B] dark:bg-red-400',
77
+ warning: 'bg-[#E17100] dark:bg-orange-400',
78
+ gray: 'bg-[#6A7282] dark:bg-gray-300',
79
+ },
61
80
  }
62
81
 
63
- type ViewType = {
64
- default: StateType
65
- inverted: StateType
66
- transparent: StateType
67
- };
68
-
69
-
82
+ const classes = computed(() =>
83
+ [
84
+ 'text-body-md rounded-sm select-none inline-flex gap-[5.5px] justify-center items-center border',
85
+ typeSwitchValues[props.view][props.type],
86
+ props.size === 'xs' ? 'px-4 py-[2px] text-body-sm font-bold' : '',
87
+ props.size === 'sm' ? 'text-body-sm font-semibold px-4 py-[2px] h-6' : '',
88
+ props.size === 'lg' ? 'px-4 py-[7.5px] font-semibold' : '',
89
+ ])
70
90
 
91
+ const pointClasses = computed(() =>
92
+ [
93
+ 'w-1.5 h-1.5 rounded-full shrink-0',
94
+ pointSwitchValues[props.view][props.type],
95
+ ])
71
96
  </script>
97
+
72
98
  <template>
73
99
  <div :class="[[classes], customClasses]">
74
- <slot name="point"/>
100
+ <slot name="point">
101
+ <span v-if="point" :class="pointClasses" />
102
+ </slot>
75
103
  <slot />
76
104
  </div>
77
105
  </template>
@@ -50,8 +50,8 @@ function onSelectToggle() {
50
50
  <a-checkbox-v2
51
51
  v-if="type === 'checkbox'"
52
52
  size="lg"
53
- side="left"
54
- class="flex w-full items-center justify-between text-left"
53
+ side="right"
54
+ class="flex w-full items-center text-left"
55
55
  :model-value="node.state === 'checked'"
56
56
  :intermediate="node.state === 'indeterminate'"
57
57
  :disabled="isDisabled"
@@ -30,17 +30,33 @@ watch(percent, (value) => {
30
30
  displayPercent.value = value
31
31
  })
32
32
 
33
- const isLow = computed(() => percent.value < 20)
33
+ const usageLevel = computed<'normal' | 'warning' | 'critical'>(() => {
34
+ if (percent.value < 20) return 'critical'
35
+ if (percent.value < 40) return 'warning'
36
+ return 'normal'
37
+ })
34
38
 
35
- const barColorClass = computed(() =>
36
- isLow.value
37
- ? 'bg-red-500 dark:bg-red-400'
38
- : 'bg-blue-600 dark:bg-blue-500',
39
- )
39
+ const barColorClass = computed(() => {
40
+ switch (usageLevel.value) {
41
+ case 'critical':
42
+ return 'bg-red-500 dark:bg-red-400'
43
+ case 'warning':
44
+ return 'bg-yellow-500 dark:bg-yellow-400'
45
+ default:
46
+ return 'bg-blue-600 dark:bg-blue-500'
47
+ }
48
+ })
40
49
 
41
- const valueColorClass = computed(() =>
42
- isLow.value ? 'text-red-600 dark:text-red-400' : 'text-gray-900 dark:text-gray-100',
43
- )
50
+ const valueColorClass = computed(() => {
51
+ switch (usageLevel.value) {
52
+ case 'critical':
53
+ return 'text-red-600 dark:text-red-400'
54
+ case 'warning':
55
+ return 'text-yellow-600 dark:text-yellow-400'
56
+ default:
57
+ return 'text-gray-900 dark:text-gray-100'
58
+ }
59
+ })
44
60
  </script>
45
61
 
46
62
  <template>
@@ -20,6 +20,8 @@ const props = withDefaults(defineProps<{
20
20
  swipeToClose?: boolean
21
21
  swipeThreshold?: number
22
22
  showDragHandle?: boolean
23
+ dataTestId?: string
24
+ iconXMarkTestId?: string
23
25
  }>(), {
24
26
  size: 'md',
25
27
  closeOnOverlay: true,
@@ -34,6 +36,8 @@ const props = withDefaults(defineProps<{
34
36
  swipeToClose: true,
35
37
  swipeThreshold: 65,
36
38
  showDragHandle: true,
39
+ dataTestId: undefined,
40
+ iconXMarkTestId: undefined,
37
41
  })
38
42
 
39
43
  const emit = defineEmits<{
@@ -286,6 +290,7 @@ function onTouchEnd() {
286
290
  ref="contentRef"
287
291
  :class="contentBaseClass"
288
292
  :style="sizeStyle"
293
+ :data-test-id="dataTestId"
289
294
  @mousedown.stop
290
295
  >
291
296
  <div
@@ -316,6 +321,7 @@ function onTouchEnd() {
316
321
  v-if="!hideClose"
317
322
  type="button"
318
323
  class="ml-auto rounded-sm p-1 transition hover:bg-gray-100 dark:hover:bg-gray-800 dark:hover:text-gray-200"
324
+ :data-test-id="iconXMarkTestId"
319
325
  @click="closeIfAllowed"
320
326
  >
321
327
  <a-icon-x-mark class="size-4" />
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "adata-ui",
3
3
  "type": "module",
4
- "version": "2.1.40-beta.12",
4
+ "version": "2.1.40-beta.14",
5
5
  "main": "./nuxt.config.ts",
6
6
  "scripts": {
7
7
  "dev": "nuxi dev .playground",
@@ -1,76 +0,0 @@
1
- <script lang="ts" setup>
2
- import { twMerge } from '#adata-ui/utils/twMerge'
3
-
4
- defineOptions({ name: 'StatusBadgeV2', inheritAttrs: false })
5
-
6
- type BadgeType = 'primary' | 'success' | 'danger' | 'gray' | 'orange' | 'warning'
7
- type BadgeView = 'default' | 'inverted' | 'transparent'
8
- type BadgeSize = 'xs' | 'sm' | 'md' | 'lg'
9
-
10
- interface Props {
11
- type?: BadgeType
12
- view?: BadgeView
13
- size?: BadgeSize
14
- }
15
-
16
- const props = withDefaults(defineProps<Props>(), {
17
- type: 'primary',
18
- view: 'inverted',
19
- size: 'sm',
20
- })
21
-
22
- const base
23
- = 'inline-flex w-fit items-center justify-center gap-1.5 rounded-full font-semibold select-none'
24
-
25
- const sizeClasses: Record<BadgeSize, string> = {
26
- xs: 'px-2 py-0.5 text-[11px] leading-none',
27
- sm: 'px-2.5 py-1 text-xs leading-none',
28
- md: 'px-3 py-1.5 text-sm',
29
- lg: 'px-4 py-2 text-base',
30
- }
31
-
32
- const typeClasses: Record<BadgeView, Partial<Record<BadgeType, string>>> = {
33
- default: {
34
- primary: 'bg-blue-700 text-white dark:bg-blue-500 dark:text-gray-900',
35
- success: 'bg-green-500 text-white dark:bg-green-400 dark:text-gray-900',
36
- danger: 'bg-red-500 text-white dark:text-gray-100',
37
- warning: 'bg-yellow-400 text-white dark:text-gray-900',
38
- gray: 'bg-deepblue-900 text-white dark:bg-gray-200/10 dark:text-gray-200',
39
- orange: 'bg-orange-600 text-white dark:text-gray-100',
40
- },
41
- inverted: {
42
- primary: 'bg-blue-700/10 text-blue-700 dark:bg-blue-500/10 dark:text-blue-500',
43
- success: 'bg-green-500/15 text-green-600 dark:bg-green-400/15 dark:text-green-400',
44
- danger: 'bg-red-500/10 text-red-500 dark:bg-red-400/10 dark:text-red-400',
45
- warning: 'bg-yellow-400/15 text-yellow-500 dark:bg-yellow-400/15 dark:text-yellow-400',
46
- gray: 'bg-deepblue-900/10 text-gray-600 dark:bg-gray-200/10 dark:text-gray-300',
47
- orange: 'bg-orange-600/10 text-orange-600 dark:text-orange-500',
48
- },
49
- transparent: {
50
- primary: 'bg-transparent text-blue-700 dark:text-blue-500',
51
- success: 'bg-transparent text-green-600 dark:text-green-400',
52
- danger: 'bg-transparent text-red-500 dark:text-red-400',
53
- warning: 'bg-transparent text-yellow-500 dark:text-yellow-400',
54
- gray: 'bg-transparent text-gray-600 dark:text-gray-300',
55
- orange: 'bg-transparent text-orange-600 dark:text-orange-500',
56
- },
57
- }
58
-
59
- const attrs = useAttrs()
60
-
61
- const classes = computed(() =>
62
- twMerge(
63
- base,
64
- sizeClasses[props.size],
65
- typeClasses[props.view][props.type],
66
- attrs.class as string,
67
- ),
68
- )
69
- </script>
70
-
71
- <template>
72
- <div :class="classes" v-bind="{ ...$attrs, class: undefined }">
73
- <slot name="point" />
74
- <slot />
75
- </div>
76
- </template>