@rark-ui/themes 1.1.0 → 1.2.1

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 (88) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/default/crafts/message.js +1 -1
  3. package/dist/default/crafts/toast.js +1 -1
  4. package/dist/razer/index.css +4 -4
  5. package/package.json +10 -8
  6. package/src/default/crafts/badge.ts +56 -0
  7. package/src/default/crafts/button.ts +68 -0
  8. package/src/default/crafts/checkbox.ts +75 -0
  9. package/src/default/crafts/collapsible.ts +61 -0
  10. package/src/default/crafts/date-picker.ts +261 -0
  11. package/src/default/crafts/dialog.ts +103 -0
  12. package/src/default/crafts/editable.ts +108 -0
  13. package/src/default/crafts/floating-panel.ts +71 -0
  14. package/src/default/crafts/hotkey.ts +24 -0
  15. package/src/default/crafts/hover-card.ts +83 -0
  16. package/src/default/crafts/icon.ts +15 -0
  17. package/src/default/crafts/index.ts +62 -0
  18. package/src/default/crafts/input.ts +50 -0
  19. package/src/default/crafts/menu.ts +118 -0
  20. package/src/default/crafts/message.ts +66 -0
  21. package/src/default/crafts/number-input.ts +51 -0
  22. package/src/default/crafts/pagination.ts +120 -0
  23. package/src/default/crafts/popover.ts +74 -0
  24. package/src/default/crafts/progress.ts +131 -0
  25. package/src/default/crafts/radio-group.ts +100 -0
  26. package/src/default/crafts/rating-group.ts +46 -0
  27. package/src/default/crafts/scroll-area.ts +116 -0
  28. package/src/default/crafts/select.ts +122 -0
  29. package/src/default/crafts/skeleton.ts +23 -0
  30. package/src/default/crafts/slider.ts +93 -0
  31. package/src/default/crafts/spin.ts +64 -0
  32. package/src/default/crafts/switch.ts +71 -0
  33. package/src/default/crafts/tabs.ts +122 -0
  34. package/src/default/crafts/tags-input.ts +81 -0
  35. package/src/default/crafts/toast.ts +70 -0
  36. package/src/default/crafts/toggle-group.ts +57 -0
  37. package/src/default/crafts/toggle.ts +34 -0
  38. package/src/default/crafts/tooltip.ts +63 -0
  39. package/src/default/crafts/tree.ts +165 -0
  40. package/src/default/index.css +3 -0
  41. package/src/default/index.ts +4 -0
  42. package/src/default/tailwind.config.ts +9 -0
  43. package/src/razer/components/arrow.css +20 -0
  44. package/src/razer/components/badge.css +13 -0
  45. package/src/razer/components/button.css +40 -0
  46. package/src/razer/components/checkbox.css +39 -0
  47. package/src/razer/components/collapsible.css +16 -0
  48. package/src/razer/components/date-picker.css +46 -0
  49. package/src/razer/components/dialog.css +29 -0
  50. package/src/razer/components/editable.css +27 -0
  51. package/src/razer/components/floating-panel.css +11 -0
  52. package/src/razer/components/hotkey.css +5 -0
  53. package/src/razer/components/hover-card.css +14 -0
  54. package/src/razer/components/input.css +29 -0
  55. package/src/razer/components/menu.css +47 -0
  56. package/src/razer/components/message.css +41 -0
  57. package/src/razer/components/number-input.css +9 -0
  58. package/src/razer/components/pagination.css +14 -0
  59. package/src/razer/components/popover.css +19 -0
  60. package/src/razer/components/progress.css +78 -0
  61. package/src/razer/components/radio-group.css +44 -0
  62. package/src/razer/components/rating-group.css +26 -0
  63. package/src/razer/components/scroll-area.css +14 -0
  64. package/src/razer/components/select.css +31 -0
  65. package/src/razer/components/skeleton.css +11 -0
  66. package/src/razer/components/slider.css +27 -0
  67. package/src/razer/components/spin.css +15 -0
  68. package/src/razer/components/switch.css +24 -0
  69. package/src/razer/components/tabs.css +11 -0
  70. package/src/razer/components/tags-input.css +16 -0
  71. package/src/razer/components/toast.css +41 -0
  72. package/src/razer/components/toggle-group.css +19 -0
  73. package/src/razer/components/toggle.css +17 -0
  74. package/src/razer/components/tooltip.css +16 -0
  75. package/src/razer/components/tree.css +19 -0
  76. package/src/razer/components/virtual.css +17 -0
  77. package/src/razer/components.css +33 -0
  78. package/src/razer/crafts/index.ts +16 -0
  79. package/src/razer/index.css +6 -0
  80. package/src/razer/index.ts +4 -0
  81. package/src/razer/preset.css +261 -0
  82. package/src/razer/tailwind.config.ts +10 -0
  83. package/src/shared/css/animation-easing.css +21 -0
  84. package/src/shared/css/animations.css +252 -0
  85. package/src/shared/css/index.css +2 -0
  86. package/src/shared/css/static.css +31 -0
  87. package/src/shared/utils/cn.ts +1 -0
  88. package/src/shared/utils/tv.ts +91 -0
@@ -0,0 +1,122 @@
1
+ import type { VariantProps } from '../../shared/utils/tv'
2
+ import { tv } from '../../shared/utils/tv'
3
+
4
+ const prefix = 'rui-select'
5
+
6
+ export const tvSelect = tv(
7
+ {
8
+ slots: {
9
+ root: '',
10
+ trigger: [
11
+ 'group',
12
+ 'flex',
13
+ 'items-center',
14
+ 'min-w-[10.875rem]',
15
+ 'rounded',
16
+ 'gap-1.5',
17
+ 'px-2',
18
+ 'py-1.5',
19
+ 'text-start',
20
+ 'transition-colors',
21
+ 'data-[disabled]:pointer-events-none',
22
+ 'data-[disabled]:opacity-(--disabled-opacity)',
23
+ ],
24
+ indicator: ['data-[state=open]:rotate-180', 'transition-transform'],
25
+ value: 'flex-1 flex items-center [&>span]:truncate',
26
+ content: [
27
+ 'relative',
28
+ 'z-auto',
29
+ 'min-w-(--reference-width)',
30
+ 'rounded',
31
+ 'p-0',
32
+ 'z-(--z-popover)',
33
+ 'data-[state=open]:motion-opacity-in',
34
+ 'data-[state=open]:motion-scale-in-95',
35
+ 'data-[state=open]:data-[placement^=bottom]:motion-translate-y-in-[.25rem]',
36
+ 'data-[state=open]:data-[placement^=top]:-motion-translate-y-in-[.25rem]',
37
+ 'data-[state=open]:data-[placement^=left]:-motion-translate-x-in-[.25rem]',
38
+ 'data-[state=open]:data-[placement^=right]:motion-translate-x-in-[.25rem]',
39
+ 'data-[state=closed]:motion-opacity-out',
40
+ 'data-[state=closed]:motion-scale-out-95',
41
+ 'data-[state=closed]:data-[placement^=bottom]:motion-translate-y-out-[.25rem]',
42
+ 'data-[state=closed]:data-[placement^=top]:-motion-translate-y-out-[.25rem]',
43
+ 'data-[state=closed]:data-[placement^=left]:-motion-translate-x-out-[.25rem]',
44
+ 'data-[state=closed]:data-[placement^=right]:motion-translate-x-out-[.25rem]',
45
+ ],
46
+ contentInner: '',
47
+ item: [
48
+ 'w-full',
49
+ 'relative',
50
+ 'flex',
51
+ 'items-center',
52
+ 'justify-between',
53
+ 'gap-2',
54
+ 'rounded',
55
+ 'cursor-default',
56
+ 'select-none',
57
+ 'data-[disabled]:pointer-events-none',
58
+ 'data-[disabled]:opacity-(--disabled-opacity)',
59
+ ],
60
+ itemIndicator: '[&_path]:animate-check-dash',
61
+ itemGroup: '',
62
+ itemGroupLabel: 'relative border-b',
63
+ clearTrigger: ['flex', 'items-center', 'justify-center'],
64
+ },
65
+ variants: {
66
+ size: {
67
+ xs: {
68
+ trigger: 'text-xs',
69
+ item: 'text-xs px-1.5 py-1',
70
+ contentInner: 'px-1.5 py-1',
71
+ itemGroupLabel: 'text-sm px-1.5 py-1.5 mb-1.5',
72
+ },
73
+ sm: {
74
+ trigger: 'text-sm',
75
+ item: 'text-sm px-2 py-1.5',
76
+ contentInner: 'px-2 py-1.5',
77
+ itemGroupLabel: 'text-base px-2 py-2 mb-2',
78
+ },
79
+ base: {
80
+ trigger: 'text-base',
81
+ item: 'text-base px-2.5 py-1.5',
82
+ contentInner: 'px-2.5 py-1.5',
83
+ itemGroupLabel: 'text-xl px-2.5 py-2.5 mb-2.5',
84
+ },
85
+ lg: {
86
+ trigger: 'text-lg',
87
+ item: 'text-lg px-3 py-2',
88
+ contentInner: 'px-3 py-2',
89
+ itemGroupLabel: 'text-xl px-3 py-3 mb-3',
90
+ },
91
+ },
92
+ bordered: {
93
+ true: {
94
+ trigger: 'border',
95
+ content: 'border',
96
+ },
97
+ false: '',
98
+ },
99
+ },
100
+ defaultVariants: {
101
+ size: 'base',
102
+ bordered: true,
103
+ },
104
+ },
105
+ {
106
+ slots: {
107
+ root: prefix,
108
+ trigger: `${prefix}-trigger`,
109
+ indicator: `${prefix}-indicator`,
110
+ content: `${prefix}-content`,
111
+ contentInner: `${prefix}-content-inner`,
112
+ value: `${prefix}-value`,
113
+ item: `${prefix}-item`,
114
+ itemIndicator: `${prefix}-item-indicator`,
115
+ itemGroup: `${prefix}-item-group`,
116
+ itemGroupLabel: `${prefix}-item-group-label`,
117
+ clearTrigger: `${prefix}-clear-trigger`,
118
+ },
119
+ },
120
+ )
121
+
122
+ export type SelectVariants = VariantProps<typeof tvSelect>
@@ -0,0 +1,23 @@
1
+ import type { VariantProps } from '../../shared/utils/tv'
2
+ import { tv } from '../../shared/utils/tv'
3
+
4
+ const prefix = 'rui-skeleton'
5
+
6
+ export const tvSkeleton = tv(
7
+ {
8
+ base: '',
9
+ variants: {
10
+ variant: {
11
+ pulse: 'animate-pulse',
12
+ wave: 'animate-skeleton-wave animate-infinite',
13
+ },
14
+ shape: {
15
+ rect: 'rounded',
16
+ circle: 'rounded-full',
17
+ },
18
+ },
19
+ },
20
+ { class: prefix },
21
+ )
22
+
23
+ export type SkeletonVariants = VariantProps<typeof tvSkeleton>
@@ -0,0 +1,93 @@
1
+ import type { VariantProps } from '../../shared/utils/tv'
2
+ import { tv } from '../../shared/utils/tv'
3
+
4
+ const prefix = 'rui-slider'
5
+
6
+ export const tvSlider = tv(
7
+ {
8
+ slots: {
9
+ root: '',
10
+ control: '',
11
+ track: '',
12
+ range: '',
13
+ thumb: 'z-10 rounded-full data-dragging:scale-120 transition-transform',
14
+ marker: '',
15
+ markerDot: 'absolute left-1/2 -translate-x-1/2 rounded-full',
16
+ },
17
+ variants: {
18
+ size: {
19
+ xs: {
20
+ control: 'h-[max(var(--slider-thumb-height),.5rem)]',
21
+ track: 'h-0.5 rounded',
22
+ range: 'rounded',
23
+ thumb: [
24
+ 'w-[max(var(--slider-thumb-width),.5rem)]',
25
+ 'h-[max(var(--slider-thumb-height),.5rem)]',
26
+ ],
27
+ markerDot: 'size-1.5 -top-[calc(max(var(--slider-thumb-height),.5rem)/2+var(--spacing)*0.75)]',
28
+ },
29
+ sm: {
30
+ control: 'h-[max(var(--slider-thumb-height),.75rem)]',
31
+ track: 'h-1 rounded-md',
32
+ range: 'rounded-md',
33
+ thumb: [
34
+ 'w-[max(var(--slider-thumb-width),.75rem)]',
35
+ 'h-[max(var(--slider-thumb-height),.75rem)]',
36
+ ],
37
+ markerDot: 'size-2 -top-[calc(max(var(--slider-thumb-height),.75rem)/2+var(--spacing))]',
38
+ },
39
+ base: {
40
+ control: 'h-[max(var(--slider-thumb-height),1rem)]',
41
+ track: 'h-1.5 rounded-lg',
42
+ range: 'rounded-lg',
43
+ thumb: [
44
+ 'w-[max(var(--slider-thumb-width),1rem)]',
45
+ 'h-[max(var(--slider-thumb-height),1rem)]',
46
+ ],
47
+ markerDot: 'size-2.5 -top-[calc(max(var(--slider-thumb-height),1rem)/2+var(--spacing)*1.25)]',
48
+ },
49
+ lg: {
50
+ control: 'h-[max(var(--slider-thumb-height),1.25rem)]',
51
+ track: 'h-2 rounded-xl',
52
+ range: 'rounded-xl',
53
+ thumb: [
54
+ 'w-[max(var(--slider-thumb-width),1.25rem)]',
55
+ 'h-[max(var(--slider-thumb-height),1.25rem)]',
56
+ ],
57
+ markerDot: 'size-3 -top-[calc(max(var(--slider-thumb-height),1.25rem)/2+var(--spacing)*1.5)]',
58
+ },
59
+ },
60
+ orientation: {
61
+ horizontal: {
62
+ root: 'flex flex-col',
63
+ control: 'w-full flex items-center',
64
+ track: 'w-full',
65
+ range: 'h-full',
66
+ },
67
+ vertical: {
68
+ root: 'flex items-center justify-center',
69
+ control: 'h-full flex items-center',
70
+ track: 'h-full',
71
+ range: 'w-full',
72
+ },
73
+ },
74
+ },
75
+ defaultVariants: {
76
+ size: 'base',
77
+ orientation: 'horizontal',
78
+ },
79
+ },
80
+ {
81
+ slots: {
82
+ root: prefix,
83
+ control: `${prefix}-control`,
84
+ track: `${prefix}-track`,
85
+ range: `${prefix}-range`,
86
+ thumb: `${prefix}-thumb`,
87
+ marker: `${prefix}-marker`,
88
+ markerDot: `${prefix}-marker-dot`,
89
+ },
90
+ },
91
+ )
92
+
93
+ export type SliderVariants = VariantProps<typeof tvSlider>
@@ -0,0 +1,64 @@
1
+ import type { VariantProps } from '../../shared/utils/tv'
2
+ import { tv } from '../../shared/utils/tv'
3
+
4
+ const prefix = 'rui-spin'
5
+
6
+ export const tvSpin = tv(
7
+ {
8
+ slots: {
9
+ root: '',
10
+ mask: ['absolute', 'top-0', 'left-0', 'size-full'],
11
+ indicator: [
12
+ 'absolute',
13
+ 'top-1/2',
14
+ 'left-1/2',
15
+ 'transform',
16
+ 'translate-x-[-50%]',
17
+ 'translate-y-[-50%]',
18
+ 'flex',
19
+ 'items-center',
20
+ 'justify-center',
21
+ 'gap-2',
22
+ ],
23
+ icon: ['inline-block', 'size-6'],
24
+ text: ['text-xs'],
25
+ },
26
+ variants: {
27
+ mode: {
28
+ fullscreen: {
29
+ root: ['fixed', 'top-0', 'left-0', 'w-screen', 'h-screen', 'z-(--z-loading)'],
30
+ },
31
+ inline: ['absolute', 'inset-0'],
32
+ },
33
+ size: {
34
+ xs: {
35
+ icon: ['size-6'],
36
+ text: ['text-xs'],
37
+ },
38
+ sm: {
39
+ icon: ['size-8'],
40
+ text: ['text-sm'],
41
+ },
42
+ base: {
43
+ icon: ['size-10'],
44
+ text: ['text-base'],
45
+ },
46
+ lg: {
47
+ icon: ['size-12'],
48
+ text: ['text-lg'],
49
+ },
50
+ },
51
+ },
52
+ },
53
+ {
54
+ slots: {
55
+ root: prefix,
56
+ mask: `${prefix}-mask`,
57
+ indicator: `${prefix}-indicator`,
58
+ icon: `${prefix}-icon`,
59
+ text: `${prefix}-text`,
60
+ },
61
+ },
62
+ )
63
+
64
+ export interface SpinVariants extends VariantProps<typeof tvSpin> {}
@@ -0,0 +1,71 @@
1
+ import type { VariantProps } from '../../shared/utils/tv'
2
+ import { tv } from '../../shared/utils/tv'
3
+
4
+ const prefix = 'rui-switch'
5
+
6
+ export const tvSwitch = tv({
7
+ slots: {
8
+ root: [
9
+ 'inline-flex',
10
+ 'items-center',
11
+ 'gap-2',
12
+ 'w-fit',
13
+ 'group/switch',
14
+ ],
15
+ control: [
16
+ 'block',
17
+ 'shrink-0',
18
+ 'rounded-full',
19
+ 'border-2',
20
+ 'transition-colors',
21
+ 'disabled:opacity-(--disabled-opacity)',
22
+ ],
23
+ thumb: [
24
+ 'pointer-events-none',
25
+ 'block',
26
+ 'size-3.5',
27
+ 'rounded-full',
28
+ 'origin-center',
29
+ 'transition-transform',
30
+ 'data-[state=checked]:translate-x-full',
31
+ 'data-[state=unchecked]:translate-x-0',
32
+ ],
33
+ label: '',
34
+ },
35
+ variants: {
36
+ size: {
37
+ xs: {
38
+ control: 'w-7 h-4',
39
+ thumb: 'size-3',
40
+ label: 'text-xs',
41
+ },
42
+ sm: {
43
+ control: 'w-8 h-4.5',
44
+ thumb: 'size-3.5',
45
+ label: 'text-sm',
46
+ },
47
+ base: {
48
+ control: 'w-9 h-5',
49
+ thumb: 'size-4',
50
+ label: 'text-base',
51
+ },
52
+ lg: {
53
+ control: 'w-10 h-5.5',
54
+ thumb: 'size-4.5',
55
+ label: 'text-lg',
56
+ },
57
+ },
58
+ },
59
+ defaultVariants: {
60
+ size: 'base',
61
+ },
62
+ }, {
63
+ slots: {
64
+ root: prefix,
65
+ control: `${prefix}-control`,
66
+ thumb: `${prefix}-thumb`,
67
+ label: `${prefix}-label`,
68
+ },
69
+ })
70
+
71
+ export type SwitchVariants = VariantProps<typeof tvSwitch>
@@ -0,0 +1,122 @@
1
+ import type { VariantProps } from '../../shared/utils/tv'
2
+ import { tv } from '../../shared/utils/tv'
3
+
4
+ const prefix = 'rui-tabs'
5
+
6
+ export const tvTabs = tv({
7
+ slots: {
8
+ root: '',
9
+ list: ['flex', 'items-center', 'relative', 'overflow-hidden'],
10
+ trigger: [
11
+ 'inline-flex',
12
+ 'items-center',
13
+ 'justify-center',
14
+ 'whitespace-nowrap',
15
+ 'rounded',
16
+ 'transition-all',
17
+ 'outline-offset-[-2px]',
18
+ 'disabled:pointer-events-none',
19
+ 'disabled:opacity-(--disabled-opacity)',
20
+ ],
21
+ content: ['mt-2'],
22
+ indicator: [],
23
+ },
24
+
25
+ variants: {
26
+ size: {
27
+ xs: {
28
+ trigger: 'text-xs',
29
+ },
30
+ sm: {
31
+ trigger: 'text-sm',
32
+ },
33
+ base: {
34
+ trigger: 'text-base',
35
+ },
36
+ lg: {
37
+ trigger: 'text-lg',
38
+ },
39
+ },
40
+ orientation: {
41
+ horizontal: {
42
+ indicator: 'w-(--width) bottom-0',
43
+ },
44
+ vertical: {
45
+ indicator: 'h-(--height)',
46
+ },
47
+ },
48
+ prev: {
49
+ true: '',
50
+ false: '',
51
+ },
52
+ next: {
53
+ true: '',
54
+ false: '',
55
+ },
56
+ },
57
+ compoundVariants: [
58
+ // horizontal
59
+ {
60
+ orientation: 'horizontal',
61
+ size: 'xs',
62
+ class: {
63
+ trigger: 'px-3 py-2',
64
+ indicator: 'h-0.5',
65
+ },
66
+ },
67
+ {
68
+ orientation: 'horizontal',
69
+ size: 'sm',
70
+ class: {
71
+ trigger: 'px-3.5 py-2.5',
72
+ indicator: 'h-0.75',
73
+ },
74
+ },
75
+ {
76
+ orientation: 'horizontal',
77
+ size: 'base',
78
+ class: {
79
+ trigger: 'px-4 py-3',
80
+ indicator: 'h-1',
81
+ },
82
+ },
83
+ {
84
+ orientation: 'horizontal',
85
+ size: 'lg',
86
+ class: {
87
+ trigger: 'px-4.5 py-3.5',
88
+ indicator: 'h-1.25',
89
+ },
90
+ },
91
+ {
92
+ orientation: 'horizontal',
93
+ prev: true,
94
+ class: {
95
+ content: 'data-[state=open]:-motion-translate-x-in data-[state=open]:motion-opacity-in',
96
+ },
97
+ },
98
+ {
99
+ orientation: 'horizontal',
100
+ next: true,
101
+ class: {
102
+ content: 'data-[state=open]:motion-translate-x-in data-[state=open]:motion-opacity-in',
103
+ },
104
+ },
105
+ ],
106
+ defaultVariants: {
107
+ size: 'base',
108
+ orientation: 'horizontal',
109
+ prev: false,
110
+ next: false,
111
+ },
112
+ }, {
113
+ slots: {
114
+ root: prefix,
115
+ list: `${prefix}-list`,
116
+ trigger: `${prefix}-trigger`,
117
+ content: `${prefix}-content`,
118
+ indicator: `${prefix}-indicator`,
119
+ },
120
+ })
121
+
122
+ export type TabsVariants = VariantProps<typeof tvTabs>
@@ -0,0 +1,81 @@
1
+ import type { VariantProps } from '../../shared/utils/tv'
2
+ import { tv } from '../../shared/utils/tv'
3
+
4
+ const prefix = 'rui-tags-input'
5
+
6
+ export const tvTagsInput = tv(
7
+ {
8
+ slots: {
9
+ root: ['flex flex-col'],
10
+ control: ['flex', 'items-center'],
11
+ scrollArea: '',
12
+ scrollAreaContent: '',
13
+ input: ['focus:outline-none', 'bg-transparent'],
14
+ item: '',
15
+ itemPreview: 'flex items-center gap-1 rounded-full cursor-default',
16
+ itemInput: 'p-0 w-fit min-w-0 outline-none',
17
+ itemText: '',
18
+ },
19
+
20
+ variants: {
21
+ size: {
22
+ xs: {
23
+ input: 'text-xs',
24
+ itemPreview: 'text-xs px-1.5',
25
+ itemInput: 'text-xs px-0.5',
26
+ },
27
+ sm: {
28
+ input: 'text-sm',
29
+ itemPreview: 'text-sm px-2',
30
+ itemInput: 'text-sm px-1',
31
+ },
32
+ base: {
33
+ input: 'text-base',
34
+ itemPreview: 'text-base px-2.5',
35
+ itemInput: 'text-base px-1.5',
36
+ },
37
+ lg: {
38
+ input: 'text-lg',
39
+ itemPreview: 'text-lg px-2.5',
40
+ itemInput: 'text-lg px-1.5',
41
+ },
42
+ },
43
+ inline: {
44
+ true: {
45
+ control: ['flex-nowrap', 'p-0', 'gap-0'],
46
+ scrollArea: ['flex-shrink-0', 'py-1.5', 'px-2', 'max-w-[calc(100%-var(--spacing)*10)]'],
47
+ scrollAreaContent: ['flex', 'flex-nowrap', 'gap-2'],
48
+ input: ['flex-shrink-1', 'py-1.5', 'px-2', 'min-w-5'],
49
+ itemText: 'whitespace-nowrap',
50
+ },
51
+ false: {
52
+ control: 'flex-wrap',
53
+ },
54
+ },
55
+ empty: {
56
+ true: {
57
+ scrollArea: 'p-0',
58
+ },
59
+ },
60
+ },
61
+ defaultVariants: {
62
+ size: 'base',
63
+ inline: true,
64
+ },
65
+ },
66
+ {
67
+ slots: {
68
+ root: prefix,
69
+ control: `${prefix}-control`,
70
+ input: `${prefix}-input`,
71
+ scrollArea: `${prefix}-scroll-area`,
72
+ scrollAreaContent: `${prefix}-scroll-area-content`,
73
+ item: `${prefix}-item`,
74
+ itemPreview: `${prefix}-item-preview`,
75
+ itemInput: `${prefix}-item-input`,
76
+ itemText: `${prefix}-item-text`,
77
+ },
78
+ },
79
+ )
80
+
81
+ export type TagsInputVariants = VariantProps<typeof tvTagsInput>
@@ -0,0 +1,70 @@
1
+ import type { VariantProps } from '../../shared/utils/tv'
2
+ import { tv } from '../../shared/utils/tv'
3
+
4
+ const prefix = 'rui-toast'
5
+
6
+ export const tvToast = tv(
7
+ {
8
+ slots: {
9
+ root: ['group/toast'],
10
+ content: ['flex', 'items-center', 'border-l-3', 'rounded-md'],
11
+ inner: 'flex flex-col w-max',
12
+ title: '',
13
+ description: '',
14
+ icon: 'size-[1lh]',
15
+ close: '',
16
+ },
17
+ variants: {
18
+ size: {
19
+ xs: {
20
+ content: 'py-3 px-4 space-x-3',
21
+ inner: 'gap-0.5',
22
+ icon: 'text-sm',
23
+ close: 'text-xs',
24
+ title: 'text-sm',
25
+ description: 'text-xs',
26
+ },
27
+ sm: {
28
+ content: 'py-4 px-6 space-x-4',
29
+ inner: 'gap-1',
30
+ icon: 'text-base',
31
+ close: 'text-sm',
32
+ title: 'text-base',
33
+ description: 'text-sm',
34
+ },
35
+ base: {
36
+ content: 'py-5 px-8 space-x-5',
37
+ inner: 'gap-1.5',
38
+ icon: 'text-base',
39
+ close: 'text-base',
40
+ title: 'text-lg',
41
+ description: 'text-base',
42
+ },
43
+ lg: {
44
+ content: 'py-6 px-10 space-x-6',
45
+ inner: 'gap-2',
46
+ icon: 'text-lg',
47
+ close: 'text-base',
48
+ title: 'text-lg',
49
+ description: 'text-base',
50
+ },
51
+ },
52
+ },
53
+ defaultVariants: {
54
+ size: 'base',
55
+ },
56
+ },
57
+ {
58
+ slots: {
59
+ root: prefix,
60
+ content: `${prefix}-content`,
61
+ inner: `${prefix}-inner`,
62
+ title: `${prefix}-title`,
63
+ description: `${prefix}-description`,
64
+ icon: `${prefix}-icon`,
65
+ close: `${prefix}-close`,
66
+ },
67
+ },
68
+ )
69
+
70
+ export type ToastVariants = VariantProps<typeof tvToast>
@@ -0,0 +1,57 @@
1
+ import type { VariantProps } from '../../shared/utils/tv'
2
+ import { tv } from '../../shared/utils/tv'
3
+
4
+ const prefix = 'rui-toggle-group'
5
+
6
+ export const tvToggleGroup = tv(
7
+ {
8
+ slots: {
9
+ root: ['w-fit', 'inline-flex', 'items-center', 'group/toggle-group', 'border', 'rounded'],
10
+ item: ['flex', 'items-center', 'justify-center', 'aspect-square'],
11
+ },
12
+ variants: {
13
+ size: {
14
+ xs: {
15
+ item: 'size-6 text-xs',
16
+ },
17
+ sm: {
18
+ item: 'size-7 text-sm',
19
+ },
20
+ base: {
21
+ item: 'size-8 text-base',
22
+ },
23
+ lg: {
24
+ item: 'size-9 text-lg',
25
+ },
26
+ },
27
+ orientation: {
28
+ horizontal: {
29
+ root: 'flex-row',
30
+ item: [
31
+ '[&:not([hidden])~:not([hidden])]:border-s',
32
+ '[&:not([hidden])~:not([hidden])]:border-e-0',
33
+ ],
34
+ },
35
+ vertical: {
36
+ root: 'flex-col',
37
+ item: [
38
+ '[&:not([hidden])~:not([hidden])]:border-t',
39
+ '[&:not([hidden])~:not([hidden])]:border-b-0',
40
+ ],
41
+ },
42
+ },
43
+ },
44
+ defaultVariants: {
45
+ size: 'base',
46
+ orientation: 'horizontal',
47
+ },
48
+ },
49
+ {
50
+ slots: {
51
+ root: prefix,
52
+ item: `${prefix}-item`,
53
+ },
54
+ },
55
+ )
56
+
57
+ export type ToggleGroupVariants = VariantProps<typeof tvToggleGroup>