@omnikit-js/ui 0.5.4 → 0.6.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 (48) hide show
  1. package/README.md +100 -255
  2. package/dist/components/client/index.d.mts +7 -0
  3. package/dist/components/client/index.mjs +6 -0
  4. package/dist/components/client/index.mjs.map +1 -0
  5. package/dist/components/server/index.d.mts +2 -0
  6. package/dist/components/server/index.mjs +201 -0
  7. package/dist/components/server/index.mjs.map +1 -0
  8. package/dist/index-D-5etDTV.d.mts +80 -0
  9. package/dist/index.d.mts +48 -0
  10. package/dist/index.mjs +204 -0
  11. package/dist/index.mjs.map +1 -0
  12. package/package.json +41 -77
  13. package/LICENSE +0 -21
  14. package/dist/styles.css +0 -2486
  15. package/dist/styles.isolated.css +0 -2643
  16. package/dist/styles.prefixed.css +0 -248
  17. package/src/components/BillingClient.tsx +0 -686
  18. package/src/components/BillingServer.tsx +0 -129
  19. package/src/components/PaymentMethodForm.tsx +0 -125
  20. package/src/components/SubscriptionConfirmModal.tsx +0 -213
  21. package/src/components/theme-provider.tsx +0 -11
  22. package/src/components/ui/alert.tsx +0 -59
  23. package/src/components/ui/avatar.tsx +0 -53
  24. package/src/components/ui/badge.tsx +0 -46
  25. package/src/components/ui/button.tsx +0 -59
  26. package/src/components/ui/card-brand-icon.tsx +0 -88
  27. package/src/components/ui/card.tsx +0 -92
  28. package/src/components/ui/chart.tsx +0 -353
  29. package/src/components/ui/dialog.tsx +0 -122
  30. package/src/components/ui/dropdown-menu.tsx +0 -257
  31. package/src/components/ui/input.tsx +0 -21
  32. package/src/components/ui/label.tsx +0 -24
  33. package/src/components/ui/navigation-menu.tsx +0 -168
  34. package/src/components/ui/progress.tsx +0 -31
  35. package/src/components/ui/radio-group.tsx +0 -44
  36. package/src/components/ui/select.tsx +0 -185
  37. package/src/components/ui/separator.tsx +0 -28
  38. package/src/components/ui/switch.tsx +0 -31
  39. package/src/components/ui/tabs.tsx +0 -66
  40. package/src/components/ui/textarea.tsx +0 -18
  41. package/src/components/ui/tooltip.tsx +0 -30
  42. package/src/index.ts +0 -13
  43. package/src/lib/utils.ts +0 -6
  44. package/src/styles/globals.css +0 -1
  45. package/src/styles/isolated.css +0 -316
  46. package/src/styles/main.css +0 -95
  47. package/src/styles/prefixed-main.css +0 -95
  48. package/src/styles/prefixed.css +0 -1
@@ -1,185 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as SelectPrimitive from "@radix-ui/react-select"
5
- import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react"
6
-
7
- import { cn } from "../../lib/utils"
8
-
9
- function Select({
10
- ...props
11
- }: React.ComponentProps<typeof SelectPrimitive.Root>) {
12
- return <SelectPrimitive.Root data-slot="select" {...props} />
13
- }
14
-
15
- function SelectGroup({
16
- ...props
17
- }: React.ComponentProps<typeof SelectPrimitive.Group>) {
18
- return <SelectPrimitive.Group data-slot="select-group" {...props} />
19
- }
20
-
21
- function SelectValue({
22
- ...props
23
- }: React.ComponentProps<typeof SelectPrimitive.Value>) {
24
- return <SelectPrimitive.Value data-slot="select-value" {...props} />
25
- }
26
-
27
- function SelectTrigger({
28
- className,
29
- size = "default",
30
- children,
31
- ...props
32
- }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
33
- size?: "sm" | "default"
34
- }) {
35
- return (
36
- <SelectPrimitive.Trigger
37
- data-slot="select-trigger"
38
- data-size={size}
39
- className={cn(
40
- "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
41
- className
42
- )}
43
- {...props}
44
- >
45
- {children}
46
- <SelectPrimitive.Icon asChild>
47
- <ChevronDownIcon className="size-4 opacity-50" />
48
- </SelectPrimitive.Icon>
49
- </SelectPrimitive.Trigger>
50
- )
51
- }
52
-
53
- function SelectContent({
54
- className,
55
- children,
56
- position = "popper",
57
- ...props
58
- }: React.ComponentProps<typeof SelectPrimitive.Content>) {
59
- return (
60
- <SelectPrimitive.Portal>
61
- <SelectPrimitive.Content
62
- data-slot="select-content"
63
- className={cn(
64
- "bg-popover text-popover-foreground 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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border shadow-md",
65
- position === "popper" &&
66
- "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
67
- className
68
- )}
69
- position={position}
70
- {...props}
71
- >
72
- <SelectScrollUpButton />
73
- <SelectPrimitive.Viewport
74
- className={cn(
75
- "p-1",
76
- position === "popper" &&
77
- "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
78
- )}
79
- >
80
- {children}
81
- </SelectPrimitive.Viewport>
82
- <SelectScrollDownButton />
83
- </SelectPrimitive.Content>
84
- </SelectPrimitive.Portal>
85
- )
86
- }
87
-
88
- function SelectLabel({
89
- className,
90
- ...props
91
- }: React.ComponentProps<typeof SelectPrimitive.Label>) {
92
- return (
93
- <SelectPrimitive.Label
94
- data-slot="select-label"
95
- className={cn("text-muted-foreground px-2 py-1.5 text-xs", className)}
96
- {...props}
97
- />
98
- )
99
- }
100
-
101
- function SelectItem({
102
- className,
103
- children,
104
- ...props
105
- }: React.ComponentProps<typeof SelectPrimitive.Item>) {
106
- return (
107
- <SelectPrimitive.Item
108
- data-slot="select-item"
109
- className={cn(
110
- "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-xs py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
111
- className
112
- )}
113
- {...props}
114
- >
115
- <span className="absolute right-2 flex size-3.5 items-center justify-center">
116
- <SelectPrimitive.ItemIndicator>
117
- <CheckIcon className="size-4" />
118
- </SelectPrimitive.ItemIndicator>
119
- </span>
120
- <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
121
- </SelectPrimitive.Item>
122
- )
123
- }
124
-
125
- function SelectSeparator({
126
- className,
127
- ...props
128
- }: React.ComponentProps<typeof SelectPrimitive.Separator>) {
129
- return (
130
- <SelectPrimitive.Separator
131
- data-slot="select-separator"
132
- className={cn("bg-border pointer-events-none -mx-1 my-1 h-px", className)}
133
- {...props}
134
- />
135
- )
136
- }
137
-
138
- function SelectScrollUpButton({
139
- className,
140
- ...props
141
- }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {
142
- return (
143
- <SelectPrimitive.ScrollUpButton
144
- data-slot="select-scroll-up-button"
145
- className={cn(
146
- "flex cursor-default items-center justify-center py-1",
147
- className
148
- )}
149
- {...props}
150
- >
151
- <ChevronUpIcon className="size-4" />
152
- </SelectPrimitive.ScrollUpButton>
153
- )
154
- }
155
-
156
- function SelectScrollDownButton({
157
- className,
158
- ...props
159
- }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {
160
- return (
161
- <SelectPrimitive.ScrollDownButton
162
- data-slot="select-scroll-down-button"
163
- className={cn(
164
- "flex cursor-default items-center justify-center py-1",
165
- className
166
- )}
167
- {...props}
168
- >
169
- <ChevronDownIcon className="size-4" />
170
- </SelectPrimitive.ScrollDownButton>
171
- )
172
- }
173
-
174
- export {
175
- Select,
176
- SelectContent,
177
- SelectGroup,
178
- SelectItem,
179
- SelectLabel,
180
- SelectScrollDownButton,
181
- SelectScrollUpButton,
182
- SelectSeparator,
183
- SelectTrigger,
184
- SelectValue,
185
- }
@@ -1,28 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as SeparatorPrimitive from "@radix-ui/react-separator"
5
-
6
- import { cn } from "../../lib/utils"
7
-
8
- function Separator({
9
- className,
10
- orientation = "horizontal",
11
- decorative = true,
12
- ...props
13
- }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {
14
- return (
15
- <SeparatorPrimitive.Root
16
- data-slot="separator"
17
- decorative={decorative}
18
- orientation={orientation}
19
- className={cn(
20
- "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
21
- className
22
- )}
23
- {...props}
24
- />
25
- )
26
- }
27
-
28
- export { Separator }
@@ -1,31 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as SwitchPrimitive from "@radix-ui/react-switch"
5
-
6
- import { cn } from "../../lib/utils"
7
-
8
- function Switch({
9
- className,
10
- ...props
11
- }: React.ComponentProps<typeof SwitchPrimitive.Root>) {
12
- return (
13
- <SwitchPrimitive.Root
14
- data-slot="switch"
15
- className={cn(
16
- "peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
17
- className
18
- )}
19
- {...props}
20
- >
21
- <SwitchPrimitive.Thumb
22
- data-slot="switch-thumb"
23
- className={cn(
24
- "bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
25
- )}
26
- />
27
- </SwitchPrimitive.Root>
28
- )
29
- }
30
-
31
- export { Switch }
@@ -1,66 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as TabsPrimitive from "@radix-ui/react-tabs"
5
-
6
- import { cn } from "../../lib/utils"
7
-
8
- function Tabs({
9
- className,
10
- ...props
11
- }: React.ComponentProps<typeof TabsPrimitive.Root>) {
12
- return (
13
- <TabsPrimitive.Root
14
- data-slot="tabs"
15
- className={cn("flex flex-col gap-2", className)}
16
- {...props}
17
- />
18
- )
19
- }
20
-
21
- function TabsList({
22
- className,
23
- ...props
24
- }: React.ComponentProps<typeof TabsPrimitive.List>) {
25
- return (
26
- <TabsPrimitive.List
27
- data-slot="tabs-list"
28
- className={cn(
29
- "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",
30
- className
31
- )}
32
- {...props}
33
- />
34
- )
35
- }
36
-
37
- function TabsTrigger({
38
- className,
39
- ...props
40
- }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {
41
- return (
42
- <TabsPrimitive.Trigger
43
- data-slot="tabs-trigger"
44
- className={cn(
45
- "data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-xs [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
46
- className
47
- )}
48
- {...props}
49
- />
50
- )
51
- }
52
-
53
- function TabsContent({
54
- className,
55
- ...props
56
- }: React.ComponentProps<typeof TabsPrimitive.Content>) {
57
- return (
58
- <TabsPrimitive.Content
59
- data-slot="tabs-content"
60
- className={cn("flex-1 outline-hidden", className)}
61
- {...props}
62
- />
63
- )
64
- }
65
-
66
- export { Tabs, TabsList, TabsTrigger, TabsContent }
@@ -1,18 +0,0 @@
1
- import * as React from "react"
2
-
3
- import { cn } from "../../lib/utils"
4
-
5
- function Textarea({ className, ...props }: React.ComponentProps<"textarea">) {
6
- return (
7
- <textarea
8
- data-slot="textarea"
9
- className={cn(
10
- "border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
11
- className
12
- )}
13
- {...props}
14
- />
15
- )
16
- }
17
-
18
- export { Textarea }
@@ -1,30 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as TooltipPrimitive from "@radix-ui/react-tooltip"
5
-
6
- import { cn } from "../../lib/utils"
7
-
8
- const TooltipProvider = TooltipPrimitive.Provider
9
-
10
- const Tooltip = TooltipPrimitive.Root
11
-
12
- const TooltipTrigger = TooltipPrimitive.Trigger
13
-
14
- const TooltipContent = React.forwardRef<
15
- React.ElementRef<typeof TooltipPrimitive.Content>,
16
- React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
17
- >(({ className, sideOffset = 4, ...props }, ref) => (
18
- <TooltipPrimitive.Content
19
- ref={ref}
20
- sideOffset={sideOffset}
21
- className={cn(
22
- "z-50 overflow-hidden rounded-md border border-border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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",
23
- className
24
- )}
25
- {...props}
26
- />
27
- ))
28
- TooltipContent.displayName = TooltipPrimitive.Content.displayName
29
-
30
- export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
package/src/index.ts DELETED
@@ -1,13 +0,0 @@
1
- // Server component export (for Next.js App Router)
2
- export { default as Billing } from './components/BillingServer';
3
-
4
- // Client component export (for pages that need client-side only)
5
- export { default as BillingClient } from './components/BillingClient';
6
-
7
- // Re-export types for convenience
8
- export interface BillingProps {
9
- userId: string;
10
- apiUrl?: string;
11
- apiKey?: string;
12
- projectId?: string;
13
- }
package/src/lib/utils.ts DELETED
@@ -1,6 +0,0 @@
1
- import { type ClassValue, clsx } from "clsx"
2
- import { twMerge } from "tailwind-merge"
3
-
4
- export function cn(...inputs: ClassValue[]) {
5
- return twMerge(clsx(inputs))
6
- }
@@ -1 +0,0 @@
1
- @import "tailwindcss";
@@ -1,316 +0,0 @@
1
- /* Isolated styles for @omnikit-js/ui to prevent conflicts */
2
-
3
- /* Reset and scope all component styles */
4
- .omnikit-billing-component {
5
- /* Create a new stacking context */
6
- isolation: isolate;
7
- /* Reset inherited styles */
8
- font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
9
- line-height: 1.5;
10
- color: #111827;
11
- }
12
-
13
- /* Progress bar specific fixes */
14
- .omnikit-billing-component .omnikit-progress {
15
- width: 100%;
16
- height: 0.5rem;
17
- background-color: #e5e7eb !important;
18
- border-radius: 9999px;
19
- overflow: hidden;
20
- position: relative;
21
- }
22
-
23
- .omnikit-billing-component .omnikit-progress-fill {
24
- height: 100%;
25
- background-color: #10b981 !important; /* Green for success */
26
- transition: width 0.3s ease;
27
- position: relative;
28
- z-index: 1;
29
- }
30
-
31
- /* Different states for progress */
32
- .omnikit-billing-component .omnikit-progress-fill.warning {
33
- background-color: #f59e0b !important; /* Amber for warning */
34
- }
35
-
36
- .omnikit-billing-component .omnikit-progress-fill.danger {
37
- background-color: #ef4444 !important; /* Red for danger */
38
- }
39
-
40
- /* Override any conflicting progress styles */
41
- .omnikit-billing-component [role="progressbar"] {
42
- background-color: #e5e7eb !important;
43
- }
44
-
45
- .omnikit-billing-component [role="progressbar"] > div:first-child {
46
- background-color: #10b981 !important;
47
- }
48
-
49
- /* Fix border issues */
50
- .omnikit-billing-component .border {
51
- border-width: 1px !important;
52
- border-style: solid !important;
53
- border-color: #e5e7eb !important;
54
- }
55
-
56
- .omnikit-billing-component .border-border {
57
- border-color: #e5e7eb !important;
58
- }
59
-
60
- /* Card styles - removed large borders */
61
- .omnikit-billing-component .omnikit-card,
62
- .omnikit-billing-component [data-slot="card"] {
63
- background-color: transparent;
64
- border: none !important;
65
- border-radius: 0.75rem;
66
- box-shadow: none !important;
67
- padding: 0 !important;
68
- }
69
-
70
- /* Pricing card specific styles */
71
- .omnikit-billing-component .pricing-card {
72
- background-color: rgba(255, 255, 255, 0.05);
73
- border: 1px solid rgba(255, 255, 255, 0.1) !important;
74
- border-radius: 0.75rem;
75
- padding: 0 !important;
76
- overflow: hidden;
77
- }
78
-
79
- .omnikit-billing-component .pricing-card.current {
80
- border-color: #3b82f6 !important;
81
- background-color: rgba(59, 130, 246, 0.1);
82
- }
83
-
84
- /* Card content padding */
85
- .omnikit-billing-component .pricing-card [data-slot="card-header"],
86
- .omnikit-billing-component .pricing-card [data-slot="card-content"],
87
- .omnikit-billing-component .pricing-card [data-slot="card-footer"] {
88
- padding: 1.5rem !important;
89
- }
90
-
91
- /* Text colors for dark mode */
92
- .omnikit-billing-component .text-foreground {
93
- color: #f9fafb !important;
94
- }
95
-
96
- .omnikit-billing-component .text-muted-foreground {
97
- color: #9ca3af !important;
98
- }
99
-
100
- .omnikit-billing-component .text-gray-500 {
101
- color: #9ca3af !important;
102
- }
103
-
104
- /* Dark mode support */
105
- @media (prefers-color-scheme: dark) {
106
- .omnikit-billing-component {
107
- color: #f9fafb;
108
- }
109
-
110
- .omnikit-billing-component .pricing-card {
111
- background-color: rgba(31, 41, 55, 0.5);
112
- border-color: rgba(255, 255, 255, 0.1) !important;
113
- }
114
-
115
- .omnikit-billing-component .border,
116
- .omnikit-billing-component .border-border {
117
- border-color: #374151 !important;
118
- }
119
-
120
- .omnikit-billing-component .omnikit-progress {
121
- background-color: #374151 !important;
122
- }
123
- }
124
-
125
- /* Layout fixes */
126
- .omnikit-billing-component .flex {
127
- display: flex !important;
128
- }
129
-
130
- .omnikit-billing-component .inline-flex {
131
- display: inline-flex !important;
132
- }
133
-
134
- .omnikit-billing-component .flex-col {
135
- flex-direction: column !important;
136
- }
137
-
138
- .omnikit-billing-component .flex-1 {
139
- flex: 1 1 0% !important;
140
- }
141
-
142
- .omnikit-billing-component .items-center {
143
- align-items: center !important;
144
- }
145
-
146
- .omnikit-billing-component .items-start {
147
- align-items: flex-start !important;
148
- }
149
-
150
- .omnikit-billing-component .justify-center {
151
- justify-content: center !important;
152
- }
153
-
154
- .omnikit-billing-component .justify-between {
155
- justify-content: space-between !important;
156
- }
157
-
158
- /* Grid layout fixes */
159
- .omnikit-billing-component .grid {
160
- display: grid !important;
161
- }
162
-
163
- .omnikit-billing-component .gap-1 {
164
- gap: 0.25rem !important;
165
- }
166
-
167
- .omnikit-billing-component .gap-2 {
168
- gap: 0.5rem !important;
169
- }
170
-
171
- .omnikit-billing-component .gap-3 {
172
- gap: 0.75rem !important;
173
- }
174
-
175
- .omnikit-billing-component .gap-4 {
176
- gap: 1rem !important;
177
- }
178
-
179
- .omnikit-billing-component .gap-6 {
180
- gap: 1.5rem !important;
181
- }
182
-
183
- /* Space utilities */
184
- .omnikit-billing-component .space-y-1 > * + * {
185
- margin-top: 0.25rem !important;
186
- }
187
-
188
- .omnikit-billing-component .space-y-2 > * + * {
189
- margin-top: 0.5rem !important;
190
- }
191
-
192
- .omnikit-billing-component .space-y-3 > * + * {
193
- margin-top: 0.75rem !important;
194
- }
195
-
196
- .omnikit-billing-component .space-y-4 > * + * {
197
- margin-top: 1rem !important;
198
- }
199
-
200
- .omnikit-billing-component .space-x-2 > * + * {
201
- margin-left: 0.5rem !important;
202
- }
203
-
204
- .omnikit-billing-component .space-x-4 > * + * {
205
- margin-left: 1rem !important;
206
- }
207
-
208
- /* Responsive grid */
209
- @media (min-width: 768px) {
210
- .omnikit-billing-component .md\:grid-cols-2 {
211
- grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
212
- }
213
-
214
- .omnikit-billing-component .md\:grid-cols-3 {
215
- grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
216
- }
217
- }
218
-
219
- @media (min-width: 1024px) {
220
- .omnikit-billing-component .lg\:grid-cols-3 {
221
- grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
222
- }
223
- }
224
-
225
- /* Tab styles */
226
- .omnikit-billing-component [data-slot="tabs"] {
227
- display: flex !important;
228
- flex-direction: column !important;
229
- gap: 0.5rem !important;
230
- }
231
-
232
- .omnikit-billing-component [data-slot="tabs-list"] {
233
- display: inline-flex !important;
234
- align-items: center !important;
235
- justify-content: center !important;
236
- border-radius: 0.375rem !important;
237
- background-color: rgba(255, 255, 255, 0.05) !important;
238
- padding: 0.25rem !important;
239
- }
240
-
241
- .omnikit-billing-component [data-slot="tabs-trigger"] {
242
- padding: 0.375rem 0.75rem !important;
243
- font-size: 0.875rem !important;
244
- font-weight: 500 !important;
245
- color: rgba(255, 255, 255, 0.6) !important;
246
- transition: all 0.2s !important;
247
- }
248
-
249
- .omnikit-billing-component [data-slot="tabs-trigger"][data-state="active"] {
250
- background-color: rgba(255, 255, 255, 0.1) !important;
251
- color: white !important;
252
- box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1) !important;
253
- }
254
-
255
- /* Section background override */
256
- .omnikit-billing-component > div {
257
- background-color: transparent !important;
258
- }
259
-
260
- /* Button styles */
261
- .omnikit-billing-component button {
262
- font-weight: 500 !important;
263
- }
264
-
265
- .omnikit-billing-component button[data-variant="secondary"],
266
- .omnikit-billing-component .bg-secondary {
267
- background-color: rgba(255, 255, 255, 0.1) !important;
268
- color: #f9fafb !important;
269
- }
270
-
271
- .omnikit-billing-component button[data-variant="secondary"]:hover,
272
- .omnikit-billing-component .bg-secondary:hover {
273
- background-color: rgba(255, 255, 255, 0.15) !important;
274
- }
275
-
276
- /* Badge styles */
277
- .omnikit-billing-component [data-slot="badge"] {
278
- background-color: rgba(255, 255, 255, 0.1) !important;
279
- color: #f9fafb !important;
280
- }
281
-
282
- /* Import base Tailwind styles */
283
- @import "tailwindcss";
284
-
285
- /* Component-specific overrides that need higher specificity */
286
- .omnikit-billing-component .shadow-xs {
287
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
288
- }
289
-
290
- .omnikit-billing-component .shadow-sm {
291
- box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06) !important;
292
- }
293
-
294
- .omnikit-billing-component .shadow-md {
295
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06) !important;
296
- }
297
-
298
- .omnikit-billing-component .rounded-xs {
299
- border-radius: 0.125rem !important;
300
- }
301
-
302
- .omnikit-billing-component .rounded-sm {
303
- border-radius: 0.25rem !important;
304
- }
305
-
306
- .omnikit-billing-component .rounded-md {
307
- border-radius: 0.375rem !important;
308
- }
309
-
310
- .omnikit-billing-component .rounded-lg {
311
- border-radius: 0.5rem !important;
312
- }
313
-
314
- .omnikit-billing-component .rounded-xl {
315
- border-radius: 0.75rem !important;
316
- }