@ptengine/design-components 0.6.0 → 0.7.0

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 (75) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/COMPONENTS-DESIGN-SYSTEM.md +14 -2
  3. package/README.md +32 -13
  4. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  5. package/dist/components/ui/dialog.d.ts.map +1 -1
  6. package/dist/components/ui/drawer.d.ts.map +1 -1
  7. package/dist/components/ui/input-otp.d.ts.map +1 -1
  8. package/dist/components/ui/prompt-picker.d.ts +2 -2
  9. package/dist/components/ui/search-input.d.ts +3 -3
  10. package/dist/components/ui/select.d.ts +2 -2
  11. package/dist/components/ui/select.d.ts.map +1 -1
  12. package/dist/components/ui/sheet.d.ts.map +1 -1
  13. package/dist/components/ui/skeleton.d.ts.map +1 -1
  14. package/dist/index.cjs +2 -2
  15. package/dist/index.js +472 -467
  16. package/dist/style.css +398 -0
  17. package/package.json +8 -4
  18. package/src/components/ui/accordion.tsx +6 -6
  19. package/src/components/ui/alert-dialog.tsx +9 -7
  20. package/src/components/ui/alert.tsx +5 -5
  21. package/src/components/ui/attachment.tsx +15 -15
  22. package/src/components/ui/avatar.tsx +6 -6
  23. package/src/components/ui/badge.tsx +8 -8
  24. package/src/components/ui/breadcrumb.tsx +8 -8
  25. package/src/components/ui/bubble.tsx +15 -15
  26. package/src/components/ui/button-group.tsx +5 -5
  27. package/src/components/ui/button.tsx +16 -16
  28. package/src/components/ui/calendar.tsx +23 -23
  29. package/src/components/ui/card.tsx +6 -6
  30. package/src/components/ui/carousel.tsx +16 -16
  31. package/src/components/ui/chart.tsx +21 -21
  32. package/src/components/ui/checkbox.tsx +3 -3
  33. package/src/components/ui/command.tsx +12 -12
  34. package/src/components/ui/context-menu.tsx +16 -16
  35. package/src/components/ui/dialog.tsx +12 -10
  36. package/src/components/ui/drawer.tsx +9 -7
  37. package/src/components/ui/dropdown-menu.tsx +17 -17
  38. package/src/components/ui/empty.tsx +7 -7
  39. package/src/components/ui/field.tsx +18 -18
  40. package/src/components/ui/hover-card.tsx +1 -1
  41. package/src/components/ui/input-group.tsx +11 -11
  42. package/src/components/ui/input-otp.tsx +9 -9
  43. package/src/components/ui/input.tsx +1 -1
  44. package/src/components/ui/item.tsx +18 -18
  45. package/src/components/ui/kbd.tsx +2 -2
  46. package/src/components/ui/label.tsx +1 -1
  47. package/src/components/ui/marker.tsx +5 -5
  48. package/src/components/ui/menubar.tsx +18 -18
  49. package/src/components/ui/message-scroller.tsx +6 -6
  50. package/src/components/ui/message.tsx +6 -6
  51. package/src/components/ui/native-select.tsx +3 -3
  52. package/src/components/ui/navigation-menu.tsx +9 -9
  53. package/src/components/ui/pagination.tsx +9 -9
  54. package/src/components/ui/popover.tsx +1 -1
  55. package/src/components/ui/progress.tsx +2 -2
  56. package/src/components/ui/prompt-picker.tsx +25 -25
  57. package/src/components/ui/radio-group.tsx +4 -4
  58. package/src/components/ui/resizable.tsx +4 -4
  59. package/src/components/ui/scroll-area.tsx +6 -6
  60. package/src/components/ui/search-input.tsx +12 -12
  61. package/src/components/ui/select.tsx +17 -17
  62. package/src/components/ui/separator.tsx +2 -2
  63. package/src/components/ui/sheet.tsx +15 -13
  64. package/src/components/ui/sidebar.tsx +70 -70
  65. package/src/components/ui/skeleton.tsx +12 -1
  66. package/src/components/ui/slider.tsx +4 -4
  67. package/src/components/ui/sonner.tsx +4 -4
  68. package/src/components/ui/spinner.tsx +1 -1
  69. package/src/components/ui/switch.tsx +2 -2
  70. package/src/components/ui/table.tsx +9 -9
  71. package/src/components/ui/tabs.tsx +16 -16
  72. package/src/components/ui/textarea.tsx +1 -1
  73. package/src/components/ui/toggle-group.tsx +1 -1
  74. package/src/components/ui/toggle.tsx +6 -6
  75. package/src/components/ui/tooltip.tsx +1 -1
@@ -25,14 +25,14 @@ const DropdownMenuSubTrigger = React.forwardRef<
25
25
  <DropdownMenuPrimitive.SubTrigger
26
26
  ref={ref}
27
27
  className={cn(
28
- 'flex cursor-default select-none items-center rounded-[var(--pt-radius-sm)] px-[8px] py-[6px] text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',
29
- inset && 'pl-[32px]',
28
+ 'ptx-flex ptx-cursor-default ptx-select-none ptx-items-center ptx-rounded-[var(--pt-radius-sm)] ptx-px-[8px] ptx-py-[6px] ptx-text-sm ptx-outline-none focus:ptx-bg-accent data-[state=open]:ptx-bg-accent',
29
+ inset && 'ptx-pl-[32px]',
30
30
  className
31
31
  )}
32
32
  {...props}
33
33
  >
34
34
  {children}
35
- <ChevronRight className="ml-auto h-[16px] w-[16px]" />
35
+ <ChevronRight className="ptx-ml-auto ptx-h-[16px] ptx-w-[16px]" />
36
36
  </DropdownMenuPrimitive.SubTrigger>
37
37
  ));
38
38
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
@@ -44,7 +44,7 @@ const DropdownMenuSubContent = React.forwardRef<
44
44
  <DropdownMenuPrimitive.SubContent
45
45
  ref={ref}
46
46
  className={cn(
47
- 'z-[var(--pt-z-popup,50)] min-w-[8rem] overflow-hidden rounded-[var(--pt-radius-md)] border bg-popover p-[4px] text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
47
+ 'ptx-z-[var(--pt-z-popup,50)] ptx-min-w-[8rem] ptx-overflow-hidden ptx-rounded-[var(--pt-radius-md)] ptx-border ptx-bg-popover ptx-p-[4px] ptx-text-popover-foreground ptx-shadow-lg data-[state=open]:ptx-animate-in data-[state=closed]:ptx-animate-out data-[state=closed]:ptx-fade-out-0 data-[state=open]:ptx-fade-in-0 data-[state=closed]:ptx-zoom-out-95 data-[state=open]:ptx-zoom-in-95 data-[side=bottom]:ptx-slide-in-from-top-2 data-[side=left]:ptx-slide-in-from-right-2 data-[side=right]:ptx-slide-in-from-left-2 data-[side=top]:ptx-slide-in-from-bottom-2',
48
48
  className
49
49
  )}
50
50
  {...props}
@@ -61,8 +61,8 @@ const DropdownMenuContent = React.forwardRef<
61
61
  ref={ref}
62
62
  sideOffset={sideOffset}
63
63
  className={cn(
64
- 'z-[var(--pt-z-popup,50)] min-w-[8rem] overflow-hidden rounded-[var(--pt-radius-md)] border bg-popover p-[4px] text-popover-foreground shadow-md',
65
- 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
64
+ 'ptx-z-[var(--pt-z-popup,50)] ptx-min-w-[8rem] ptx-overflow-hidden ptx-rounded-[var(--pt-radius-md)] ptx-border ptx-bg-popover ptx-p-[4px] ptx-text-popover-foreground ptx-shadow-md',
65
+ 'data-[state=open]:ptx-animate-in data-[state=closed]:ptx-animate-out data-[state=closed]:ptx-fade-out-0 data-[state=open]:ptx-fade-in-0 data-[state=closed]:ptx-zoom-out-95 data-[state=open]:ptx-zoom-in-95 data-[side=bottom]:ptx-slide-in-from-top-2 data-[side=left]:ptx-slide-in-from-right-2 data-[side=right]:ptx-slide-in-from-left-2 data-[side=top]:ptx-slide-in-from-bottom-2',
66
66
  className
67
67
  )}
68
68
  {...props}
@@ -80,8 +80,8 @@ const DropdownMenuItem = React.forwardRef<
80
80
  <DropdownMenuPrimitive.Item
81
81
  ref={ref}
82
82
  className={cn(
83
- 'relative flex cursor-default select-none items-center gap-[8px] rounded-[var(--pt-radius-sm)] px-[8px] py-[6px] text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-[16px] [&>svg]:shrink-0',
84
- inset && 'pl-[32px]',
83
+ 'ptx-relative ptx-flex ptx-cursor-default ptx-select-none ptx-items-center ptx-gap-[8px] ptx-rounded-[var(--pt-radius-sm)] ptx-px-[8px] ptx-py-[6px] ptx-text-sm ptx-outline-none ptx-transition-colors focus:ptx-bg-accent focus:ptx-text-accent-foreground data-[disabled]:ptx-pointer-events-none data-[disabled]:ptx-opacity-50 [&>svg]:ptx-size-[16px] [&>svg]:ptx-shrink-0',
84
+ inset && 'ptx-pl-[32px]',
85
85
  className
86
86
  )}
87
87
  {...props}
@@ -96,15 +96,15 @@ const DropdownMenuCheckboxItem = React.forwardRef<
96
96
  <DropdownMenuPrimitive.CheckboxItem
97
97
  ref={ref}
98
98
  className={cn(
99
- 'relative flex cursor-default select-none items-center rounded-[var(--pt-radius-sm)] py-[6px] pl-[32px] pr-[8px] text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
99
+ 'ptx-relative ptx-flex ptx-cursor-default ptx-select-none ptx-items-center ptx-rounded-[var(--pt-radius-sm)] ptx-py-[6px] ptx-pl-[32px] ptx-pr-[8px] ptx-text-sm ptx-outline-none ptx-transition-colors focus:ptx-bg-accent focus:ptx-text-accent-foreground data-[disabled]:ptx-pointer-events-none data-[disabled]:ptx-opacity-50',
100
100
  className
101
101
  )}
102
102
  checked={checked}
103
103
  {...props}
104
104
  >
105
- <span className="absolute left-[8px] flex h-[14px] w-[14px] items-center justify-center">
105
+ <span className="ptx-absolute ptx-left-[8px] ptx-flex ptx-h-[14px] ptx-w-[14px] ptx-items-center ptx-justify-center">
106
106
  <DropdownMenuPrimitive.ItemIndicator>
107
- <Check className="h-[16px] w-[16px]" />
107
+ <Check className="ptx-h-[16px] ptx-w-[16px]" />
108
108
  </DropdownMenuPrimitive.ItemIndicator>
109
109
  </span>
110
110
  {children}
@@ -119,14 +119,14 @@ const DropdownMenuRadioItem = React.forwardRef<
119
119
  <DropdownMenuPrimitive.RadioItem
120
120
  ref={ref}
121
121
  className={cn(
122
- 'relative flex cursor-default select-none items-center rounded-[var(--pt-radius-sm)] py-[6px] pl-[32px] pr-[8px] text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
122
+ 'ptx-relative ptx-flex ptx-cursor-default ptx-select-none ptx-items-center ptx-rounded-[var(--pt-radius-sm)] ptx-py-[6px] ptx-pl-[32px] ptx-pr-[8px] ptx-text-sm ptx-outline-none ptx-transition-colors focus:ptx-bg-accent focus:ptx-text-accent-foreground data-[disabled]:ptx-pointer-events-none data-[disabled]:ptx-opacity-50',
123
123
  className
124
124
  )}
125
125
  {...props}
126
126
  >
127
- <span className="absolute left-[8px] flex h-[14px] w-[14px] items-center justify-center">
127
+ <span className="ptx-absolute ptx-left-[8px] ptx-flex ptx-h-[14px] ptx-w-[14px] ptx-items-center ptx-justify-center">
128
128
  <DropdownMenuPrimitive.ItemIndicator>
129
- <Circle className="h-[8px] w-[8px] fill-current" />
129
+ <Circle className="ptx-h-[8px] ptx-w-[8px] ptx-fill-current" />
130
130
  </DropdownMenuPrimitive.ItemIndicator>
131
131
  </span>
132
132
  {children}
@@ -142,7 +142,7 @@ const DropdownMenuLabel = React.forwardRef<
142
142
  >(({ className, inset, ...props }, ref) => (
143
143
  <DropdownMenuPrimitive.Label
144
144
  ref={ref}
145
- className={cn('px-[8px] py-[6px] text-sm font-semibold', inset && 'pl-[32px]', className)}
145
+ className={cn('ptx-px-[8px] ptx-py-[6px] ptx-text-sm ptx-font-semibold', inset && 'ptx-pl-[32px]', className)}
146
146
  {...props}
147
147
  />
148
148
  ));
@@ -154,7 +154,7 @@ const DropdownMenuSeparator = React.forwardRef<
154
154
  >(({ className, ...props }, ref) => (
155
155
  <DropdownMenuPrimitive.Separator
156
156
  ref={ref}
157
- className={cn('-mx-[4px] my-[4px] h-px bg-muted', className)}
157
+ className={cn('-ptx-mx-[4px] ptx-my-[4px] ptx-h-px ptx-bg-muted', className)}
158
158
  {...props}
159
159
  />
160
160
  ));
@@ -162,7 +162,7 @@ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
162
162
 
163
163
  const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {
164
164
  return (
165
- <span className={cn('ml-auto text-xs tracking-widest opacity-60', className)} {...props} />
165
+ <span className={cn('ptx-ml-auto ptx-text-xs ptx-tracking-widest ptx-opacity-60', className)} {...props} />
166
166
  );
167
167
  };
168
168
  DropdownMenuShortcut.displayName = 'DropdownMenuShortcut';
@@ -7,7 +7,7 @@ function Empty({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
7
7
  return (
8
8
  <div
9
9
  className={cn(
10
- 'flex min-w-0 flex-1 flex-col items-center justify-center gap-[24px] text-balance rounded-[var(--pt-radius)] border border-dashed p-[24px] text-center text-foreground md:p-[48px]',
10
+ 'ptx-flex ptx-min-w-0 ptx-flex-1 ptx-flex-col ptx-items-center ptx-justify-center ptx-gap-[24px] ptx-text-balance ptx-rounded-[var(--pt-radius)] ptx-border ptx-border-dashed ptx-p-[24px] ptx-text-center ptx-text-foreground md:ptx-p-[48px]',
11
11
  className
12
12
  )}
13
13
  {...props}
@@ -18,17 +18,17 @@ function Empty({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
18
18
  function EmptyHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
19
19
  return (
20
20
  <div
21
- className={cn('flex max-w-sm flex-col items-center gap-[8px] text-center', className)}
21
+ className={cn('ptx-flex ptx-max-w-sm ptx-flex-col ptx-items-center ptx-gap-[8px] ptx-text-center', className)}
22
22
  {...props}
23
23
  />
24
24
  );
25
25
  }
26
26
 
27
- const emptyMediaVariants = cva('flex shrink-0 items-center justify-center', {
27
+ const emptyMediaVariants = cva('ptx-flex ptx-shrink-0 ptx-items-center ptx-justify-center', {
28
28
  variants: {
29
29
  variant: {
30
30
  default: '',
31
- icon: 'size-[40px] rounded-[var(--pt-radius)] bg-secondary text-foreground [&_svg]:size-[24px]'
31
+ icon: 'ptx-size-[40px] ptx-rounded-[var(--pt-radius)] ptx-bg-secondary ptx-text-foreground [&_svg]:ptx-size-[24px]'
32
32
  }
33
33
  },
34
34
  defaultVariants: {
@@ -45,14 +45,14 @@ function EmptyMedia({
45
45
  }
46
46
 
47
47
  function EmptyTitle({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
48
- return <div className={cn('text-lg font-medium tracking-tight', className)} {...props} />;
48
+ return <div className={cn('ptx-text-lg ptx-font-medium ptx-tracking-tight', className)} {...props} />;
49
49
  }
50
50
 
51
51
  function EmptyDescription({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
52
52
  return (
53
53
  <div
54
54
  className={cn(
55
- 'text-sm leading-relaxed text-muted-foreground [&>a]:text-primary [&>a]:underline [&>a]:underline-offset-4',
55
+ 'ptx-text-sm ptx-leading-relaxed ptx-text-muted-foreground [&>a]:ptx-text-primary [&>a]:ptx-underline [&>a]:ptx-underline-offset-4',
56
56
  className
57
57
  )}
58
58
  {...props}
@@ -64,7 +64,7 @@ function EmptyContent({ className, ...props }: React.HTMLAttributes<HTMLDivEleme
64
64
  return (
65
65
  <div
66
66
  className={cn(
67
- 'flex w-full max-w-sm min-w-0 flex-col items-center gap-[16px] text-balance text-sm',
67
+ 'ptx-flex ptx-w-full ptx-max-w-sm ptx-min-w-0 ptx-flex-col ptx-items-center ptx-gap-[16px] ptx-text-balance ptx-text-sm',
68
68
  className
69
69
  )}
70
70
  {...props}
@@ -6,14 +6,14 @@ import { Label } from './label';
6
6
  import { Separator } from './separator';
7
7
 
8
8
  function FieldSet({ className, ...props }: React.FieldsetHTMLAttributes<HTMLFieldSetElement>) {
9
- return <fieldset className={cn('flex flex-col gap-[24px]', className)} {...props} />;
9
+ return <fieldset className={cn('ptx-flex ptx-flex-col ptx-gap-[24px]', className)} {...props} />;
10
10
  }
11
11
 
12
- const fieldLegendVariants = cva('mb-[12px] font-medium text-foreground', {
12
+ const fieldLegendVariants = cva('ptx-mb-[12px] ptx-font-medium ptx-text-foreground', {
13
13
  variants: {
14
14
  variant: {
15
- legend: 'text-base',
16
- label: 'text-sm'
15
+ legend: 'ptx-text-base',
16
+ label: 'ptx-text-sm'
17
17
  }
18
18
  },
19
19
  defaultVariants: {
@@ -30,15 +30,15 @@ function FieldLegend({
30
30
  }
31
31
 
32
32
  function FieldGroup({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
33
- return <div className={cn('group/field-group flex w-full flex-col gap-[28px]', className)} {...props} />;
33
+ return <div className={cn('group/field-group ptx-flex ptx-w-full ptx-flex-col ptx-gap-[28px]', className)} {...props} />;
34
34
  }
35
35
 
36
- const fieldVariants = cva('group/field flex w-full gap-[8px] data-[invalid=true]:text-destructive', {
36
+ const fieldVariants = cva('group/field ptx-flex ptx-w-full ptx-gap-[8px] data-[invalid=true]:ptx-text-destructive', {
37
37
  variants: {
38
38
  orientation: {
39
- vertical: 'flex-col',
40
- horizontal: 'flex-row items-center',
41
- responsive: 'flex-col md:flex-row md:items-center'
39
+ vertical: 'ptx-flex-col',
40
+ horizontal: 'ptx-flex-row ptx-items-center',
41
+ responsive: 'ptx-flex-col md:ptx-flex-row md:ptx-items-center'
42
42
  }
43
43
  },
44
44
  defaultVariants: {
@@ -64,7 +64,7 @@ function Field({
64
64
  function FieldContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
65
65
  return (
66
66
  <div
67
- className={cn('group/field-content flex flex-1 flex-col gap-[6px] leading-snug', className)}
67
+ className={cn('group/field-content ptx-flex ptx-flex-1 ptx-flex-col ptx-gap-[6px] ptx-leading-snug', className)}
68
68
  {...props}
69
69
  />
70
70
  );
@@ -74,7 +74,7 @@ function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>)
74
74
  return (
75
75
  <Label
76
76
  data-slot="field-label"
77
- className={cn('flex w-fit gap-[8px] leading-snug', className)}
77
+ className={cn('ptx-flex ptx-w-fit ptx-gap-[8px] ptx-leading-snug', className)}
78
78
  {...props}
79
79
  />
80
80
  );
@@ -84,7 +84,7 @@ function FieldTitle({ className, ...props }: React.HTMLAttributes<HTMLDivElement
84
84
  return (
85
85
  <div
86
86
  className={cn(
87
- 'flex w-fit items-center gap-[8px] text-sm font-medium leading-snug text-foreground',
87
+ 'ptx-flex ptx-w-fit ptx-items-center ptx-gap-[8px] ptx-text-sm ptx-font-medium ptx-leading-snug ptx-text-foreground',
88
88
  className
89
89
  )}
90
90
  {...props}
@@ -95,7 +95,7 @@ function FieldTitle({ className, ...props }: React.HTMLAttributes<HTMLDivElement
95
95
  function FieldDescription({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {
96
96
  return (
97
97
  <p
98
- className={cn('text-sm font-normal leading-normal text-muted-foreground', className)}
98
+ className={cn('ptx-text-sm ptx-font-normal ptx-leading-normal ptx-text-muted-foreground', className)}
99
99
  {...props}
100
100
  />
101
101
  );
@@ -107,10 +107,10 @@ function FieldSeparator({
107
107
  ...props
108
108
  }: React.HTMLAttributes<HTMLDivElement>) {
109
109
  return (
110
- <div className={cn('relative -my-[8px] h-[20px] text-sm', className)} {...props}>
111
- <Separator className="absolute inset-0 top-1/2" />
110
+ <div className={cn('ptx-relative -ptx-my-[8px] ptx-h-[20px] ptx-text-sm', className)} {...props}>
111
+ <Separator className="ptx-absolute ptx-inset-0 ptx-top-1/2" />
112
112
  {children && (
113
- <span className="relative mx-auto flex w-fit items-center justify-center bg-background px-[8px] text-muted-foreground">
113
+ <span className="ptx-relative ptx-mx-auto ptx-flex ptx-w-fit ptx-items-center ptx-justify-center ptx-bg-background ptx-px-[8px] ptx-text-muted-foreground">
114
114
  {children}
115
115
  </span>
116
116
  )}
@@ -138,7 +138,7 @@ function FieldError({
138
138
  return messages[0];
139
139
  }
140
140
  return (
141
- <ul className="ml-[16px] flex list-disc flex-col gap-[4px]">
141
+ <ul className="ptx-ml-[16px] ptx-flex ptx-list-disc ptx-flex-col ptx-gap-[4px]">
142
142
  {messages.map((message, index) => (
143
143
  <li key={index}>{message}</li>
144
144
  ))}
@@ -153,7 +153,7 @@ function FieldError({
153
153
  return (
154
154
  <div
155
155
  role="alert"
156
- className={cn('text-sm font-normal text-destructive', className)}
156
+ className={cn('ptx-text-sm ptx-font-normal ptx-text-destructive', className)}
157
157
  {...props}
158
158
  >
159
159
  {content}
@@ -16,7 +16,7 @@ const HoverCardContent = React.forwardRef<
16
16
  align={align}
17
17
  sideOffset={sideOffset}
18
18
  className={cn(
19
- 'z-[var(--pt-z-popup,50)] w-[256px] rounded-[var(--pt-radius-md)] border bg-popover p-[16px] text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
19
+ 'ptx-z-[var(--pt-z-popup,50)] ptx-w-[256px] ptx-rounded-[var(--pt-radius-md)] ptx-border ptx-bg-popover ptx-p-[16px] ptx-text-popover-foreground ptx-shadow-md ptx-outline-none data-[state=open]:ptx-animate-in data-[state=closed]:ptx-animate-out data-[state=closed]:ptx-fade-out-0 data-[state=open]:ptx-fade-in-0 data-[state=closed]:ptx-zoom-out-95 data-[state=open]:ptx-zoom-in-95 data-[side=bottom]:ptx-slide-in-from-top-2 data-[side=left]:ptx-slide-in-from-right-2 data-[side=right]:ptx-slide-in-from-left-2 data-[side=top]:ptx-slide-in-from-bottom-2',
20
20
  className
21
21
  )}
22
22
  {...props}
@@ -9,11 +9,11 @@ function InputGroup({ className, ...props }: React.HTMLAttributes<HTMLDivElement
9
9
  <div
10
10
  role="group"
11
11
  className={cn(
12
- 'group/input-group relative flex h-[32px] w-full items-center gap-[8px] rounded-[var(--pt-radius-md)] border border-input px-[12px] transition-colors',
13
- 'hover:border-neutral',
14
- 'has-[input:focus-visible]:ring-1 has-[input:focus-visible]:ring-ring',
15
- 'has-[input[aria-invalid=true]]:border-destructive has-[input[aria-invalid=true]]:hover:border-destructive',
16
- 'has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-50 has-[input:disabled]:hover:border-input',
12
+ 'group/input-group ptx-relative ptx-flex ptx-h-[32px] ptx-w-full ptx-items-center ptx-gap-[8px] ptx-rounded-[var(--pt-radius-md)] ptx-border ptx-border-input ptx-px-[12px] ptx-transition-colors',
13
+ 'hover:ptx-border-neutral',
14
+ 'has-[input:focus-visible]:ptx-ring-1 has-[input:focus-visible]:ptx-ring-ring',
15
+ 'has-[input[aria-invalid=true]]:ptx-border-destructive has-[input[aria-invalid=true]]:hover:ptx-border-destructive',
16
+ 'has-[input:disabled]:ptx-cursor-not-allowed has-[input:disabled]:ptx-opacity-50 has-[input:disabled]:hover:ptx-border-input',
17
17
  className
18
18
  )}
19
19
  {...props}
@@ -28,7 +28,7 @@ const InputGroupInput = React.forwardRef<
28
28
  <input
29
29
  ref={ref}
30
30
  className={cn(
31
- 'h-full w-full flex-1 bg-transparent text-xs text-foreground placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed',
31
+ 'ptx-h-full ptx-w-full ptx-flex-1 ptx-bg-transparent ptx-text-xs ptx-text-foreground placeholder:ptx-text-muted-foreground focus-visible:ptx-outline-none disabled:ptx-cursor-not-allowed',
32
32
  className
33
33
  )}
34
34
  {...props}
@@ -37,12 +37,12 @@ const InputGroupInput = React.forwardRef<
37
37
  InputGroupInput.displayName = 'InputGroupInput';
38
38
 
39
39
  const inputGroupAddonVariants = cva(
40
- 'flex items-center gap-[8px] text-sm text-muted-foreground [&_svg]:size-[16px] [&_svg]:shrink-0',
40
+ 'ptx-flex ptx-items-center ptx-gap-[8px] ptx-text-sm ptx-text-muted-foreground [&_svg]:ptx-size-[16px] [&_svg]:ptx-shrink-0',
41
41
  {
42
42
  variants: {
43
43
  align: {
44
- 'inline-start': 'order-first',
45
- 'inline-end': 'order-last'
44
+ 'inline-start': 'ptx-order-first',
45
+ 'inline-end': 'ptx-order-last'
46
46
  }
47
47
  },
48
48
  defaultVariants: {
@@ -62,7 +62,7 @@ function InputGroupAddon({
62
62
  function InputGroupText({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {
63
63
  return (
64
64
  <span
65
- className={cn('flex items-center gap-[8px] text-sm text-muted-foreground', className)}
65
+ className={cn('ptx-flex ptx-items-center ptx-gap-[8px] ptx-text-sm ptx-text-muted-foreground', className)}
66
66
  {...props}
67
67
  />
68
68
  );
@@ -74,7 +74,7 @@ function InputGroupButton({
74
74
  variant = 'ghost',
75
75
  ...props
76
76
  }: React.ComponentProps<typeof Button>) {
77
- return <Button size={size} variant={variant} className={cn('shrink-0', className)} {...props} />;
77
+ return <Button size={size} variant={variant} className={cn('ptx-shrink-0', className)} {...props} />;
78
78
  }
79
79
 
80
80
  export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText };
@@ -11,10 +11,10 @@ const InputOTP = React.forwardRef<
11
11
  <OTPInput
12
12
  ref={ref}
13
13
  containerClassName={cn(
14
- 'group/input-otp flex items-center gap-[8px] has-[:disabled]:opacity-50',
14
+ 'group/input-otp ptx-flex ptx-items-center ptx-gap-[8px] has-[:disabled]:ptx-opacity-50',
15
15
  containerClassName
16
16
  )}
17
- className={cn('disabled:cursor-not-allowed', className)}
17
+ className={cn('disabled:ptx-cursor-not-allowed', className)}
18
18
  {...props}
19
19
  />
20
20
  ));
@@ -22,7 +22,7 @@ InputOTP.displayName = 'InputOTP';
22
22
 
23
23
  const InputOTPGroup = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>(
24
24
  ({ className, ...props }, ref) => (
25
- <div ref={ref} className={cn('flex items-center', className)} {...props} />
25
+ <div ref={ref} className={cn('ptx-flex ptx-items-center', className)} {...props} />
26
26
  )
27
27
  );
28
28
  InputOTPGroup.displayName = 'InputOTPGroup';
@@ -38,16 +38,16 @@ const InputOTPSlot = React.forwardRef<
38
38
  <div
39
39
  ref={ref}
40
40
  className={cn(
41
- 'relative flex h-[32px] w-[36px] items-center justify-center border-y border-r border-input text-xs text-foreground transition-all first:rounded-l-[var(--pt-radius-md)] first:border-l last:rounded-r-[var(--pt-radius-md)] group-hover/input-otp:border-neutral',
42
- isActive && 'z-10 ring-1 ring-ring',
41
+ 'ptx-relative ptx-flex ptx-h-[32px] ptx-w-[36px] ptx-items-center ptx-justify-center ptx-border-y ptx-border-r ptx-border-input ptx-text-xs ptx-text-foreground ptx-transition-all first:ptx-rounded-l-[var(--pt-radius-md)] first:ptx-border-l last:ptx-rounded-r-[var(--pt-radius-md)] group-hover/input-otp:ptx-border-neutral',
42
+ isActive && 'ptx-z-10 ptx-ring-1 ptx-ring-ring',
43
43
  className
44
44
  )}
45
45
  {...props}
46
46
  >
47
47
  {char}
48
48
  {hasFakeCaret && (
49
- <div className="pointer-events-none absolute inset-0 flex items-center justify-center">
50
- <div className="h-[16px] w-px animate-caret-blink bg-foreground duration-1000" />
49
+ <div className="ptx-pointer-events-none ptx-absolute ptx-inset-0 ptx-flex ptx-items-center ptx-justify-center">
50
+ <div className="ptx-h-[16px] ptx-w-px ptx-animate-caret-blink ptx-bg-foreground ptx-duration-1000" />
51
51
  </div>
52
52
  )}
53
53
  </div>
@@ -57,8 +57,8 @@ InputOTPSlot.displayName = 'InputOTPSlot';
57
57
 
58
58
  const InputOTPSeparator = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>(
59
59
  ({ ...props }, ref) => (
60
- <div ref={ref} role="separator" className="text-muted-foreground" {...props}>
61
- <Minus className="h-[16px] w-[16px]" />
60
+ <div ref={ref} role="separator" className="ptx-text-muted-foreground" {...props}>
61
+ <Minus className="ptx-h-[16px] ptx-w-[16px]" />
62
62
  </div>
63
63
  )
64
64
  );
@@ -10,7 +10,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
10
10
  <input
11
11
  type={type}
12
12
  className={cn(
13
- 'flex h-[32px] w-full rounded-[var(--pt-radius-md)] border border-input bg-transparent px-[12px] py-[4px] text-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground enabled:hover:border-neutral focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid=true]:border-destructive aria-[invalid=true]:enabled:hover:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/30',
13
+ 'ptx-flex ptx-h-[32px] ptx-w-full ptx-rounded-[var(--pt-radius-md)] ptx-border ptx-border-input ptx-bg-transparent ptx-px-[12px] ptx-py-[4px] ptx-text-xs ptx-transition-colors file:ptx-border-0 file:ptx-bg-transparent file:ptx-text-sm file:ptx-font-medium placeholder:ptx-text-muted-foreground enabled:hover:ptx-border-neutral focus-visible:ptx-outline-none focus-visible:ptx-ring-1 focus-visible:ptx-ring-ring disabled:ptx-cursor-not-allowed disabled:ptx-opacity-50 aria-[invalid=true]:ptx-border-destructive aria-[invalid=true]:enabled:hover:ptx-border-destructive aria-[invalid=true]:focus-visible:ptx-ring-destructive/30',
14
14
  className
15
15
  )}
16
16
  ref={ref}
@@ -6,25 +6,25 @@ import { cn } from '../../lib/utils';
6
6
  import { Separator } from './separator';
7
7
 
8
8
  function ItemGroup({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
9
- return <div role="list" className={cn('group/item-group flex flex-col', className)} {...props} />;
9
+ return <div role="list" className={cn('group/item-group ptx-flex ptx-flex-col', className)} {...props} />;
10
10
  }
11
11
 
12
12
  function ItemSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {
13
- return <Separator orientation="horizontal" className={cn('my-0', className)} {...props} />;
13
+ return <Separator orientation="horizontal" className={cn('ptx-my-0', className)} {...props} />;
14
14
  }
15
15
 
16
16
  const itemVariants = cva(
17
- 'group/item flex flex-wrap items-center rounded-[var(--pt-radius-md)] border text-sm text-foreground outline-none transition-colors',
17
+ 'group/item ptx-flex ptx-flex-wrap ptx-items-center ptx-rounded-[var(--pt-radius-md)] ptx-border ptx-text-sm ptx-text-foreground ptx-outline-none ptx-transition-colors',
18
18
  {
19
19
  variants: {
20
20
  variant: {
21
- default: 'border-transparent',
22
- outline: 'border-border',
23
- muted: 'border-transparent bg-muted'
21
+ default: 'ptx-border-transparent',
22
+ outline: 'ptx-border-border',
23
+ muted: 'ptx-border-transparent ptx-bg-muted'
24
24
  },
25
25
  size: {
26
- default: 'gap-[16px] p-[16px]',
27
- sm: 'gap-[10px] px-[16px] py-[12px]'
26
+ default: 'ptx-gap-[16px] ptx-p-[16px]',
27
+ sm: 'ptx-gap-[10px] ptx-px-[16px] ptx-py-[12px]'
28
28
  }
29
29
  },
30
30
  defaultVariants: {
@@ -45,12 +45,12 @@ function Item({
45
45
  return <Comp className={cn(itemVariants({ variant, size }), className)} {...props} />;
46
46
  }
47
47
 
48
- const itemMediaVariants = cva('flex shrink-0 items-center justify-center gap-[8px] [&_svg]:pointer-events-none', {
48
+ const itemMediaVariants = cva('ptx-flex ptx-shrink-0 ptx-items-center ptx-justify-center ptx-gap-[8px] [&_svg]:ptx-pointer-events-none', {
49
49
  variants: {
50
50
  variant: {
51
- default: 'bg-transparent [&_svg]:size-[20px] [&_svg]:text-muted-foreground',
52
- icon: 'size-[32px] rounded-[var(--pt-radius-sm)] border bg-secondary [&_svg]:size-[16px] [&_svg]:text-foreground',
53
- image: 'size-[40px] overflow-hidden rounded-[var(--pt-radius-sm)] [&_img]:size-full [&_img]:object-cover'
51
+ default: 'ptx-bg-transparent [&_svg]:ptx-size-[20px] [&_svg]:ptx-text-muted-foreground',
52
+ icon: 'ptx-size-[32px] ptx-rounded-[var(--pt-radius-sm)] ptx-border ptx-bg-secondary [&_svg]:ptx-size-[16px] [&_svg]:ptx-text-foreground',
53
+ image: 'ptx-size-[40px] ptx-overflow-hidden ptx-rounded-[var(--pt-radius-sm)] [&_img]:ptx-size-full [&_img]:ptx-object-cover'
54
54
  }
55
55
  },
56
56
  defaultVariants: {
@@ -67,13 +67,13 @@ function ItemMedia({
67
67
  }
68
68
 
69
69
  function ItemContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
70
- return <div className={cn('flex flex-1 flex-col gap-[4px]', className)} {...props} />;
70
+ return <div className={cn('ptx-flex ptx-flex-1 ptx-flex-col ptx-gap-[4px]', className)} {...props} />;
71
71
  }
72
72
 
73
73
  function ItemTitle({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
74
74
  return (
75
75
  <div
76
- className={cn('flex w-fit items-center gap-[8px] text-sm font-medium leading-snug', className)}
76
+ className={cn('ptx-flex ptx-w-fit ptx-items-center ptx-gap-[8px] ptx-text-sm ptx-font-medium ptx-leading-snug', className)}
77
77
  {...props}
78
78
  />
79
79
  );
@@ -82,25 +82,25 @@ function ItemTitle({ className, ...props }: React.HTMLAttributes<HTMLDivElement>
82
82
  function ItemDescription({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {
83
83
  return (
84
84
  <p
85
- className={cn('line-clamp-2 text-sm leading-normal text-muted-foreground', className)}
85
+ className={cn('ptx-line-clamp-2 ptx-text-sm ptx-leading-normal ptx-text-muted-foreground', className)}
86
86
  {...props}
87
87
  />
88
88
  );
89
89
  }
90
90
 
91
91
  function ItemActions({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
92
- return <div className={cn('flex items-center gap-[8px]', className)} {...props} />;
92
+ return <div className={cn('ptx-flex ptx-items-center ptx-gap-[8px]', className)} {...props} />;
93
93
  }
94
94
 
95
95
  function ItemHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
96
96
  return (
97
- <div className={cn('flex basis-full items-center justify-between gap-[8px]', className)} {...props} />
97
+ <div className={cn('ptx-flex ptx-basis-full ptx-items-center ptx-justify-between ptx-gap-[8px]', className)} {...props} />
98
98
  );
99
99
  }
100
100
 
101
101
  function ItemFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
102
102
  return (
103
- <div className={cn('flex basis-full items-center justify-between gap-[8px]', className)} {...props} />
103
+ <div className={cn('ptx-flex ptx-basis-full ptx-items-center ptx-justify-between ptx-gap-[8px]', className)} {...props} />
104
104
  );
105
105
  }
106
106
 
@@ -6,7 +6,7 @@ function Kbd({ className, ...props }: React.HTMLAttributes<HTMLElement>) {
6
6
  return (
7
7
  <kbd
8
8
  className={cn(
9
- 'pointer-events-none inline-flex h-[20px] w-fit min-w-[20px] select-none items-center justify-center gap-[4px] rounded-[var(--pt-radius-sm)] bg-muted px-[4px] font-sans text-2xs font-medium text-muted-foreground [&_svg]:size-[12px]',
9
+ 'ptx-pointer-events-none ptx-inline-flex ptx-h-[20px] ptx-w-fit ptx-min-w-[20px] ptx-select-none ptx-items-center ptx-justify-center ptx-gap-[4px] ptx-rounded-[var(--pt-radius-sm)] ptx-bg-muted ptx-px-[4px] ptx-font-sans ptx-text-2xs ptx-font-medium ptx-text-muted-foreground [&_svg]:ptx-size-[12px]',
10
10
  className
11
11
  )}
12
12
  {...props}
@@ -15,7 +15,7 @@ function Kbd({ className, ...props }: React.HTMLAttributes<HTMLElement>) {
15
15
  }
16
16
 
17
17
  function KbdGroup({ className, ...props }: React.HTMLAttributes<HTMLElement>) {
18
- return <span className={cn('inline-flex items-center gap-[4px]', className)} {...props} />;
18
+ return <span className={cn('ptx-inline-flex ptx-items-center ptx-gap-[4px]', className)} {...props} />;
19
19
  }
20
20
 
21
21
  export { Kbd, KbdGroup };
@@ -5,7 +5,7 @@ import { cva, type VariantProps } from 'class-variance-authority';
5
5
  import { cn } from '../../lib/utils';
6
6
 
7
7
  const labelVariants = cva(
8
- 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50'
8
+ 'ptx-text-sm ptx-font-medium ptx-leading-none peer-disabled:ptx-cursor-not-allowed peer-disabled:ptx-opacity-50'
9
9
  );
10
10
 
11
11
  const Label = React.forwardRef<
@@ -5,14 +5,14 @@ import { cva, type VariantProps } from 'class-variance-authority';
5
5
  import { cn } from '../../lib/utils';
6
6
 
7
7
  const markerVariants = cva(
8
- "group/marker relative flex min-h-[16px] w-full items-center gap-[8px] text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-[16px] [&:is(a)]:underline [&:is(a)]:underline-offset-4 [&:is(a):hover]:text-foreground",
8
+ "group/marker ptx-relative ptx-flex ptx-min-h-[16px] ptx-w-full ptx-items-center ptx-gap-[8px] ptx-text-left ptx-text-sm ptx-text-muted-foreground [&_svg:not([class*='size-'])]:ptx-size-[16px] [&:is(a)]:ptx-underline [&:is(a)]:ptx-underline-offset-4 [&:is(a):hover]:ptx-text-foreground",
9
9
  {
10
10
  variants: {
11
11
  variant: {
12
12
  default: '',
13
13
  separator:
14
- 'before:mr-[4px] before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-[4px] after:h-px after:min-w-0 after:flex-1 after:bg-border',
15
- border: 'border-b border-border pb-[8px]'
14
+ 'before:ptx-mr-[4px] before:ptx-h-px before:ptx-min-w-0 before:ptx-flex-1 before:ptx-bg-border after:ptx-ml-[4px] after:ptx-h-px after:ptx-min-w-0 after:ptx-flex-1 after:ptx-bg-border',
15
+ border: 'ptx-border-b ptx-border-border ptx-pb-[8px]'
16
16
  }
17
17
  }
18
18
  }
@@ -45,7 +45,7 @@ function MarkerIcon({ className, ...props }: React.HTMLAttributes<HTMLSpanElemen
45
45
  <span
46
46
  data-slot="marker-icon"
47
47
  aria-hidden="true"
48
- className={cn("size-[16px] shrink-0 [&_svg:not([class*='size-'])]:size-[16px]", className)}
48
+ className={cn("ptx-size-[16px] ptx-shrink-0 [&_svg:not([class*='size-'])]:ptx-size-[16px]", className)}
49
49
  {...props}
50
50
  />
51
51
  );
@@ -56,7 +56,7 @@ function MarkerContent({ className, ...props }: React.HTMLAttributes<HTMLSpanEle
56
56
  <span
57
57
  data-slot="marker-content"
58
58
  className={cn(
59
- 'min-w-0 break-words group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center [&_a]:underline [&_a]:underline-offset-4 [&_a:hover]:text-foreground',
59
+ 'ptx-min-w-0 ptx-break-words group-data-[variant=separator]/marker:ptx-flex-none group-data-[variant=separator]/marker:ptx-text-center [&_a]:ptx-underline [&_a]:ptx-underline-offset-4 [&_a:hover]:ptx-text-foreground',
60
60
  className
61
61
  )}
62
62
  {...props}