@yuva-devlab/ui 1.1.0 → 1.3.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 (85) hide show
  1. package/dist/common.css +158 -0
  2. package/dist/components/accordion/accordion.css +49 -0
  3. package/dist/components/alert/alert.css +63 -0
  4. package/dist/components/alert/alert.mdx +26 -0
  5. package/dist/components/alert-dialog/alert-dialog.css +84 -0
  6. package/dist/components/avatar/avatar.css +26 -0
  7. package/dist/components/avatar/avatar.mdx +18 -0
  8. package/dist/components/badge/badge.css +76 -0
  9. package/dist/components/badge/badge.mdx +24 -0
  10. package/dist/components/breadcrumb/breadcrumb.css +63 -0
  11. package/dist/components/button/button.css +106 -0
  12. package/dist/components/button/button.mdx +40 -0
  13. package/dist/components/card/card.css +30 -0
  14. package/dist/components/card/card.mdx +18 -0
  15. package/dist/components/carousel/carousel.css +67 -0
  16. package/dist/components/chart/chart.css +38 -0
  17. package/dist/components/checkbox/checkbox.css +27 -0
  18. package/dist/components/checkbox/checkbox.mdx +22 -0
  19. package/dist/components/command/command.css +125 -0
  20. package/dist/components/context-menu/context-menu.css +19 -0
  21. package/dist/components/date-picker/date-picker.css +30 -0
  22. package/dist/components/dialog/dialog.css +145 -0
  23. package/dist/components/dialog/dialog.mdx +18 -0
  24. package/dist/components/drawer/drawer.css +64 -0
  25. package/dist/components/dropdown-menu/dropdown-menu.css +82 -0
  26. package/dist/components/form/form.css +17 -0
  27. package/dist/components/hover-card/hover-card.css +23 -0
  28. package/dist/components/input/input.css +89 -0
  29. package/dist/components/input/input.mdx +30 -0
  30. package/dist/components/input-otp/input-otp.css +70 -0
  31. package/dist/components/label/label.css +9 -0
  32. package/dist/components/loading-state/loading-state.css +26 -0
  33. package/dist/components/menubar/menubar.css +36 -0
  34. package/dist/components/navigation-menu/navigation-menu.css +137 -0
  35. package/dist/components/pagination/pagination.css +43 -0
  36. package/dist/components/panel/panel.css +24 -0
  37. package/dist/components/popover/popover.css +17 -0
  38. package/dist/components/progress/progress.css +15 -0
  39. package/dist/components/progress/progress.mdx +18 -0
  40. package/dist/components/radio-group/radio-group.css +37 -0
  41. package/dist/components/resizable/resizable.css +67 -0
  42. package/dist/components/scroll-area/scroll-area.css +32 -0
  43. package/dist/components/searchable-select/searchable-select.css +128 -0
  44. package/dist/components/select/select.css +97 -0
  45. package/dist/components/select/select.mdx +18 -0
  46. package/dist/components/separator/separator.css +14 -0
  47. package/dist/components/sheet/sheet.css +83 -0
  48. package/dist/components/sidebar/sidebar.css +18 -0
  49. package/dist/components/skeleton/skeleton.css +5 -0
  50. package/dist/components/skeleton/skeleton.mdx +18 -0
  51. package/dist/components/slider/slider.css +37 -0
  52. package/dist/components/sonner/sonner.css +25 -0
  53. package/dist/components/sonner/sonner.mdx +22 -0
  54. package/dist/components/status-badge/status-badge.css +53 -0
  55. package/dist/components/status-badge/status-badge.mdx +24 -0
  56. package/dist/components/status-chip/status-chip.css +44 -0
  57. package/dist/components/switch/switch.css +45 -0
  58. package/dist/components/switch/switch.mdx +22 -0
  59. package/dist/components/table/table.css +46 -0
  60. package/dist/components/table/table.mdx +18 -0
  61. package/dist/components/tabs/tabs.css +46 -0
  62. package/dist/components/tabs/tabs.mdx +18 -0
  63. package/dist/components/textarea/textarea.css +30 -0
  64. package/dist/components/toggle/toggle.css +91 -0
  65. package/dist/components/tooltip/tooltip.css +17 -0
  66. package/dist/components.css +2618 -0
  67. package/dist/index.cjs +1447 -1836
  68. package/dist/index.cjs.map +1 -1
  69. package/dist/index.d.cts +1819 -202
  70. package/dist/index.d.ts +1819 -202
  71. package/dist/index.js +1442 -1837
  72. package/dist/index.js.map +1 -1
  73. package/dist/preset.css +6 -157
  74. package/dist/root.css +1 -0
  75. package/dist/styles/common.css +158 -0
  76. package/dist/styles/components.css +2618 -0
  77. package/dist/styles/preset.css +6 -157
  78. package/dist/styles/root.css +1 -0
  79. package/dist/styles/styles.css +17 -5
  80. package/dist/styles/themes/finai.css +1 -114
  81. package/dist/styles/themes/orchestrai.css +1 -75
  82. package/dist/styles.css +17 -5
  83. package/dist/themes/finai.css +1 -114
  84. package/dist/themes/orchestrai.css +1 -75
  85. package/package.json +11 -5
@@ -0,0 +1,158 @@
1
+ /**
2
+ * @file src/styles/common.css
3
+ * @description Shared keyframes, animations, feedback states, and surface utilities.
4
+ */
5
+
6
+ /* ── Keyframe Animations ─────────────────────────────────────────────────── */
7
+ @keyframes dl-fade-in {
8
+ from {
9
+ opacity: 0;
10
+ }
11
+ to {
12
+ opacity: 1;
13
+ }
14
+ }
15
+ @keyframes dl-fade-out {
16
+ from {
17
+ opacity: 1;
18
+ }
19
+ to {
20
+ opacity: 0;
21
+ }
22
+ }
23
+ @keyframes dl-zoom-in {
24
+ from {
25
+ opacity: 0;
26
+ transform: translate(-50%, -50%) scale(0.95);
27
+ }
28
+ to {
29
+ opacity: 1;
30
+ transform: translate(-50%, -50%) scale(1);
31
+ }
32
+ }
33
+ @keyframes dl-zoom-out {
34
+ from {
35
+ opacity: 1;
36
+ transform: translate(-50%, -50%) scale(1);
37
+ }
38
+ to {
39
+ opacity: 0;
40
+ transform: translate(-50%, -50%) scale(0.95);
41
+ }
42
+ }
43
+ @keyframes dl-pulse {
44
+ 0%,
45
+ 100% {
46
+ opacity: 1;
47
+ }
48
+ 50% {
49
+ opacity: 0.5;
50
+ }
51
+ }
52
+ @keyframes dl-spin {
53
+ from {
54
+ transform: rotate(0deg);
55
+ }
56
+ to {
57
+ transform: rotate(360deg);
58
+ }
59
+ }
60
+ @keyframes dl-slide-in-right {
61
+ from {
62
+ transform: translateX(100%);
63
+ }
64
+ to {
65
+ transform: translateX(0);
66
+ }
67
+ }
68
+ @keyframes dl-slide-out-right {
69
+ from {
70
+ transform: translateX(0);
71
+ }
72
+ to {
73
+ transform: translateX(100%);
74
+ }
75
+ }
76
+ @keyframes dl-slide-in-left {
77
+ from {
78
+ transform: translateX(-100%);
79
+ }
80
+ to {
81
+ transform: translateX(0);
82
+ }
83
+ }
84
+ @keyframes dl-slide-out-left {
85
+ from {
86
+ transform: translateX(0);
87
+ }
88
+ to {
89
+ transform: translateX(-100%);
90
+ }
91
+ }
92
+ @keyframes dl-accordion-down {
93
+ from {
94
+ height: 0;
95
+ }
96
+ to {
97
+ height: var(--radix-accordion-content-height);
98
+ }
99
+ }
100
+ @keyframes dl-accordion-up {
101
+ from {
102
+ height: var(--radix-accordion-content-height);
103
+ }
104
+ to {
105
+ height: 0;
106
+ }
107
+ }
108
+
109
+ @keyframes dl-spin {
110
+ from {
111
+ transform: rotate(0deg);
112
+ }
113
+ to {
114
+ transform: rotate(360deg);
115
+ }
116
+ }
117
+
118
+ /* ── Sonner Toast Semantic Feedback ──────────────────────────────────────── */
119
+ [data-sonner-toaster] [data-sonner-toast] {
120
+ border-radius: var(--radius-md, 0.375rem);
121
+ }
122
+ [data-sonner-toaster] [data-sonner-toast][data-type="success"] {
123
+ border-color: color-mix(in oklch, var(--success) 35%, transparent);
124
+ }
125
+ [data-sonner-toaster] [data-sonner-toast][data-type="success"] [data-icon] {
126
+ color: var(--success);
127
+ }
128
+ [data-sonner-toaster] [data-sonner-toast][data-type="error"],
129
+ [data-sonner-toaster] [data-sonner-toast][data-type="destructive"] {
130
+ border-color: color-mix(in oklch, var(--destructive) 35%, transparent);
131
+ }
132
+ [data-sonner-toaster] [data-sonner-toast][data-type="error"] [data-icon],
133
+ [data-sonner-toaster] [data-sonner-toast][data-type="destructive"] [data-icon] {
134
+ color: var(--destructive);
135
+ }
136
+ [data-sonner-toaster] [data-sonner-toast][data-type="warning"] {
137
+ border-color: color-mix(in oklch, var(--warning) 35%, transparent);
138
+ }
139
+ [data-sonner-toaster] [data-sonner-toast][data-type="warning"] [data-icon] {
140
+ color: var(--warning);
141
+ }
142
+ [data-sonner-toaster] [data-sonner-toast][data-type="info"] {
143
+ border-color: color-mix(in oklch, var(--info) 35%, transparent);
144
+ }
145
+ [data-sonner-toaster] [data-sonner-toast][data-type="info"] [data-icon] {
146
+ color: var(--info);
147
+ }
148
+
149
+ /* ── Shared Glass & Surface Utilities ────────────────────────────────────── */
150
+ .dl-glass {
151
+ background-color: var(
152
+ --surface,
153
+ color-mix(in oklch, var(--card) 80%, transparent)
154
+ );
155
+ backdrop-filter: blur(16px) saturate(140%);
156
+ -webkit-backdrop-filter: blur(16px) saturate(140%);
157
+ border: 1px solid var(--border);
158
+ }
@@ -0,0 +1,49 @@
1
+ .dl-accordion-item {
2
+ border-bottom: 1px solid var(--border);
3
+ }
4
+ .dl-accordion-header {
5
+ display: flex;
6
+ }
7
+ .dl-accordion-trigger {
8
+ display: flex;
9
+ flex: 1;
10
+ width: 100%;
11
+ align-items: center;
12
+ justify-content: space-between;
13
+ padding: 1rem 0;
14
+ font-size: 0.875rem;
15
+ font-weight: 500;
16
+ cursor: pointer;
17
+ background: transparent;
18
+ border: none;
19
+ text-align: left;
20
+ font-family: inherit;
21
+ transition: color 0.15s ease;
22
+ }
23
+ .dl-accordion-trigger:hover {
24
+ text-decoration: underline;
25
+ }
26
+ .dl-accordion-trigger svg {
27
+ height: 1rem;
28
+ width: 1rem;
29
+ flex-shrink: 0;
30
+ color: var(--muted-foreground);
31
+ transition: transform 0.2s ease;
32
+ }
33
+ .dl-accordion-trigger[data-state="open"] svg {
34
+ transform: rotate(180deg);
35
+ }
36
+ .dl-accordion-content {
37
+ overflow: hidden;
38
+ font-size: 0.875rem;
39
+ }
40
+ .dl-accordion-content[data-state="open"] {
41
+ animation: dl-accordion-down 200ms ease;
42
+ }
43
+ .dl-accordion-content[data-state="closed"] {
44
+ animation: dl-accordion-up 200ms ease;
45
+ }
46
+ .dl-accordion-content__inner {
47
+ padding-bottom: 1rem;
48
+ padding-top: 0;
49
+ }
@@ -0,0 +1,63 @@
1
+ .dl-alert {
2
+ position: relative;
3
+ width: 100%;
4
+ border-radius: var(--radius-lg, 0.5rem);
5
+ border: 1px solid var(--border);
6
+ padding: 0.875rem 1rem;
7
+ font-size: 0.875rem;
8
+ display: grid;
9
+ grid-template-columns: 1fr;
10
+ row-gap: 0.25rem;
11
+ align-items: start;
12
+ }
13
+
14
+ .dl-alert:has(> svg) {
15
+ grid-template-columns: 1rem 1fr;
16
+ column-gap: 0.75rem;
17
+ }
18
+
19
+ .dl-alert > svg {
20
+ grid-column: 1;
21
+ grid-row: 1 / span 2;
22
+ width: 1rem;
23
+ height: 1rem;
24
+ margin-top: 0.125rem;
25
+ color: currentColor;
26
+ flex-shrink: 0;
27
+ }
28
+
29
+ .dl-alert:has(> svg) .dl-alert__title,
30
+ .dl-alert:has(> svg) .dl-alert__desc {
31
+ grid-column: 2;
32
+ }
33
+
34
+ .dl-alert--default {
35
+ background-color: var(--card, var(--background));
36
+ color: var(--foreground);
37
+ }
38
+
39
+ .dl-alert--destructive {
40
+ border-color: color-mix(in oklch, var(--destructive) 45%, transparent);
41
+ color: var(--destructive);
42
+ background-color: color-mix(
43
+ in oklch,
44
+ var(--destructive) 8%,
45
+ var(--background)
46
+ );
47
+ }
48
+
49
+ .dl-alert__title {
50
+ font-weight: 600;
51
+ line-height: 1.35;
52
+ letter-spacing: -0.01em;
53
+ }
54
+
55
+ .dl-alert__desc {
56
+ font-size: 0.875rem;
57
+ color: var(--muted-foreground);
58
+ line-height: 1.5;
59
+ }
60
+
61
+ .dl-alert--destructive .dl-alert__desc {
62
+ color: color-mix(in oklch, var(--destructive) 80%, var(--foreground));
63
+ }
@@ -0,0 +1,26 @@
1
+ import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import * as AlertStories from "./alert.stories";
3
+
4
+ <Meta of={AlertStories} />
5
+
6
+ <Title />
7
+
8
+ # Alert
9
+
10
+ The `Alert` component displays contextual feedback, announcements, or critical system errors to users with accessible ARIA semantics and high-contrast color styling.
11
+
12
+ ## Default Alert
13
+
14
+ Used for neutral announcements, system notices, and informational messages.
15
+
16
+ <Canvas of={AlertStories.Default} />
17
+
18
+ ## Destructive Alert
19
+
20
+ Used for critical runtime exceptions, failed agent steps, or irreversible actions.
21
+
22
+ <Canvas of={AlertStories.Destructive} />
23
+
24
+ ## Component Properties
25
+
26
+ <Controls />
@@ -0,0 +1,84 @@
1
+ .dl-alert-dialog-overlay {
2
+ position: fixed;
3
+ inset: 0;
4
+ z-index: 50;
5
+ background-color: rgb(0 0 0 / 0.8);
6
+ }
7
+
8
+ .dl-alert-dialog-overlay[data-state="open"] {
9
+ animation: dl-fade-in 150ms ease;
10
+ }
11
+
12
+ .dl-alert-dialog-overlay[data-state="closed"] {
13
+ animation: dl-fade-out 150ms ease;
14
+ }
15
+
16
+ .dl-alert-dialog-content {
17
+ position: fixed;
18
+ left: 50%;
19
+ top: 50%;
20
+ transform: translate(-50%, -50%);
21
+ z-index: 50;
22
+ display: flex;
23
+ flex-direction: column;
24
+ width: calc(100% - 2rem);
25
+ max-width: var(--dl-dialog-max-width, 32rem);
26
+ max-height: calc(100dvh - 3rem);
27
+ gap: 1rem;
28
+ border: 1px solid var(--border);
29
+ background-color: var(--background);
30
+ padding: 1.5rem;
31
+ box-shadow: 0 8px 32px rgb(0 0 0 / 0.2);
32
+ border-radius: var(--radius-lg, 0.5rem);
33
+ overflow-y: auto;
34
+ overscroll-behavior: contain;
35
+ }
36
+
37
+ .dl-alert-dialog-content[data-state="open"] {
38
+ animation: dl-zoom-in 150ms ease;
39
+ }
40
+
41
+ .dl-alert-dialog-content[data-state="closed"] {
42
+ animation: dl-zoom-out 150ms ease;
43
+ }
44
+
45
+ .dl-alert-dialog-header {
46
+ display: flex;
47
+ flex-direction: column;
48
+ gap: 0.5rem;
49
+ text-align: center;
50
+ flex-shrink: 0;
51
+ }
52
+
53
+ @media (min-width: 640px) {
54
+ .dl-alert-dialog-header {
55
+ text-align: left;
56
+ }
57
+ }
58
+
59
+ .dl-alert-dialog-footer {
60
+ display: flex;
61
+ flex-direction: column-reverse;
62
+ gap: 0.5rem;
63
+ flex-shrink: 0;
64
+ }
65
+
66
+ @media (min-width: 640px) {
67
+ .dl-alert-dialog-footer {
68
+ flex-direction: row;
69
+ justify-content: flex-end;
70
+ }
71
+ }
72
+
73
+ .dl-alert-dialog-title {
74
+ font-size: 1.125rem;
75
+ font-weight: 600;
76
+ line-height: 1.25;
77
+ color: var(--foreground);
78
+ }
79
+
80
+ .dl-alert-dialog-desc {
81
+ font-size: 0.875rem;
82
+ color: var(--muted-foreground);
83
+ line-height: 1.5;
84
+ }
@@ -0,0 +1,26 @@
1
+ .dl-avatar {
2
+ position: relative;
3
+ display: flex;
4
+ height: 2.5rem;
5
+ width: 2.5rem;
6
+ flex-shrink: 0;
7
+ overflow: hidden;
8
+ border-radius: 9999px;
9
+ }
10
+ .dl-avatar__img {
11
+ aspect-ratio: 1;
12
+ width: 100%;
13
+ height: 100%;
14
+ object-fit: cover;
15
+ }
16
+ .dl-avatar__fallback {
17
+ display: flex;
18
+ height: 100%;
19
+ width: 100%;
20
+ align-items: center;
21
+ justify-content: center;
22
+ border-radius: 9999px;
23
+ background-color: var(--muted);
24
+ font-size: 0.875rem;
25
+ font-weight: 500;
26
+ }
@@ -0,0 +1,18 @@
1
+ import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import * as AvatarStories from "./avatar.stories";
3
+
4
+ <Meta of={AvatarStories} />
5
+
6
+ <Title />
7
+
8
+ # Avatar
9
+
10
+ Image element with fallback text initials for representing users, agents, or entities.
11
+
12
+ ## Default
13
+
14
+ <Canvas of={AvatarStories.Default} />
15
+
16
+ ## Component Properties
17
+
18
+ <Controls />
@@ -0,0 +1,76 @@
1
+ .dl-badge {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ border-radius: 0.375rem;
5
+ border: 1px solid transparent;
6
+ padding: 0.125rem 0.625rem;
7
+ font-size: 0.75rem;
8
+ font-weight: 600;
9
+ transition: background-color 0.15s ease;
10
+ }
11
+ .dl-badge--default {
12
+ background-color: var(--primary);
13
+ color: var(--primary-foreground);
14
+ box-shadow: 0 1px 2px rgb(0 0 0/0.08);
15
+ }
16
+ .dl-badge--secondary {
17
+ background-color: var(--secondary);
18
+ color: var(--secondary-foreground);
19
+ }
20
+ .dl-badge--destructive {
21
+ background-color: var(--destructive);
22
+ color: var(--destructive-foreground);
23
+ box-shadow: 0 1px 2px rgb(0 0 0/0.08);
24
+ }
25
+ .dl-badge--success {
26
+ background-color: var(--success);
27
+ color: var(--success-foreground);
28
+ }
29
+ .dl-badge--warning {
30
+ background-color: var(--warning);
31
+ color: var(--warning-foreground);
32
+ }
33
+ .dl-badge--info {
34
+ background-color: var(--info);
35
+ color: var(--info-foreground);
36
+ }
37
+ .dl-badge--outline {
38
+ color: var(--foreground);
39
+ border-color: var(--border);
40
+ }
41
+
42
+ .dl-status-badge {
43
+ display: inline-flex;
44
+ align-items: center;
45
+ gap: 0.375rem;
46
+ border-radius: 9999px;
47
+ padding: 0.25rem 0.625rem;
48
+ font-size: 0.75rem;
49
+ font-weight: 500;
50
+ }
51
+ .dl-status-badge__dot {
52
+ width: 0.5rem;
53
+ height: 0.5rem;
54
+ border-radius: 9999px;
55
+ flex-shrink: 0;
56
+ }
57
+ .dl-status-badge--success {
58
+ background-color: color-mix(in oklch, var(--success) 15%, transparent);
59
+ color: var(--success);
60
+ }
61
+ .dl-status-badge--destructive {
62
+ background-color: color-mix(in oklch, var(--destructive) 15%, transparent);
63
+ color: var(--destructive);
64
+ }
65
+ .dl-status-badge--warning {
66
+ background-color: color-mix(in oklch, var(--warning) 15%, transparent);
67
+ color: var(--warning);
68
+ }
69
+ .dl-status-badge--info {
70
+ background-color: color-mix(in oklch, var(--info) 15%, transparent);
71
+ color: var(--info);
72
+ }
73
+ .dl-status-badge--muted {
74
+ background-color: var(--muted);
75
+ color: var(--muted-foreground);
76
+ }
@@ -0,0 +1,24 @@
1
+ import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import * as BadgeStories from "./badge.stories";
3
+
4
+ <Meta of={BadgeStories} />
5
+
6
+ <Title />
7
+
8
+ # Badge
9
+
10
+ Displays metadata, statuses, count indicators, or short labels with semantic color tokens.
11
+
12
+ ## Default
13
+
14
+ <Canvas of={BadgeStories.Default} />
15
+
16
+ ## Variants
17
+
18
+ Available in `default`, `secondary`, `outline`, `destructive`, `success`, `warning`, and `info`.
19
+
20
+ <Canvas of={BadgeStories.AllVariants} />
21
+
22
+ ## Component Properties
23
+
24
+ <Controls />
@@ -0,0 +1,63 @@
1
+ .dl-breadcrumb-list {
2
+ display: flex;
3
+ flex-wrap: wrap;
4
+ align-items: center;
5
+ gap: 0.375rem;
6
+ overflow-wrap: break-word;
7
+ font-size: 0.875rem;
8
+ color: var(--muted-foreground);
9
+ list-style: none;
10
+ margin: 0;
11
+ padding: 0;
12
+ }
13
+
14
+ @media (min-width: 640px) {
15
+ .dl-breadcrumb-list {
16
+ gap: 0.625rem;
17
+ }
18
+ }
19
+
20
+ .dl-breadcrumb-item {
21
+ display: inline-flex;
22
+ align-items: center;
23
+ gap: 0.375rem;
24
+ }
25
+
26
+ .dl-breadcrumb-link {
27
+ cursor: pointer;
28
+ color: inherit;
29
+ text-decoration: none;
30
+ transition: color 0.15s ease;
31
+ }
32
+
33
+ .dl-breadcrumb-link:hover {
34
+ color: var(--foreground);
35
+ }
36
+
37
+ .dl-breadcrumb-page {
38
+ font-weight: 400;
39
+ color: var(--foreground);
40
+ }
41
+
42
+ .dl-breadcrumb-separator {
43
+ display: inline-flex;
44
+ align-items: center;
45
+ }
46
+
47
+ .dl-breadcrumb-separator svg {
48
+ width: 0.875rem;
49
+ height: 0.875rem;
50
+ }
51
+
52
+ .dl-breadcrumb-ellipsis {
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ width: 2.25rem;
57
+ height: 2.25rem;
58
+ }
59
+
60
+ .dl-breadcrumb-ellipsis svg {
61
+ width: 1rem;
62
+ height: 1rem;
63
+ }
@@ -0,0 +1,106 @@
1
+ .dl-btn {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ gap: 0.5rem;
6
+ white-space: nowrap;
7
+ border-radius: var(--radius-md, 0.375rem);
8
+ font-size: 0.875rem;
9
+ font-weight: 500;
10
+ cursor: pointer;
11
+ transition:
12
+ background-color 0.15s ease,
13
+ opacity 0.15s ease,
14
+ color 0.15s ease;
15
+ border: none;
16
+ text-decoration: none;
17
+ font-family: inherit;
18
+ }
19
+ .dl-btn:focus-visible {
20
+ outline: 2px solid var(--ring);
21
+ outline-offset: 2px;
22
+ }
23
+ .dl-btn:disabled,
24
+ .dl-btn[aria-disabled="true"] {
25
+ pointer-events: none;
26
+ opacity: 0.5;
27
+ cursor: not-allowed;
28
+ }
29
+ .dl-btn svg {
30
+ pointer-events: none;
31
+ width: 1rem;
32
+ height: 1rem;
33
+ flex-shrink: 0;
34
+ }
35
+
36
+ /* Sizes */
37
+ .dl-btn--sm {
38
+ height: 2rem;
39
+ padding: 0 0.75rem;
40
+ font-size: 0.75rem;
41
+ }
42
+ .dl-btn--md {
43
+ height: 2.25rem;
44
+ padding: 0 1rem;
45
+ }
46
+ .dl-btn--lg {
47
+ height: 2.5rem;
48
+ padding: 0 2rem;
49
+ }
50
+ .dl-btn--icon {
51
+ width: 2.25rem;
52
+ height: 2.25rem;
53
+ padding: 0;
54
+ }
55
+
56
+ /* Variants */
57
+ .dl-btn--default {
58
+ background-color: var(--primary);
59
+ color: var(--primary-foreground);
60
+ box-shadow: 0 1px 2px rgb(0 0 0/0.08);
61
+ }
62
+ .dl-btn--default:hover {
63
+ background-color: color-mix(in oklch, var(--primary) 88%, black);
64
+ }
65
+ .dl-btn--destructive {
66
+ background-color: var(--destructive);
67
+ color: var(--destructive-foreground);
68
+ box-shadow: 0 1px 2px rgb(0 0 0/0.08);
69
+ }
70
+ .dl-btn--destructive:hover {
71
+ background-color: color-mix(in oklch, var(--destructive) 88%, black);
72
+ }
73
+ .dl-btn--outline {
74
+ background-color: var(--background);
75
+ border: 1px solid var(--input);
76
+ color: var(--foreground);
77
+ box-shadow: 0 1px 2px rgb(0 0 0/0.05);
78
+ }
79
+ .dl-btn--outline:hover {
80
+ background-color: var(--accent);
81
+ color: var(--accent-foreground);
82
+ }
83
+ .dl-btn--secondary {
84
+ background-color: var(--secondary);
85
+ color: var(--secondary-foreground);
86
+ box-shadow: 0 1px 2px rgb(0 0 0/0.05);
87
+ }
88
+ .dl-btn--secondary:hover {
89
+ background-color: color-mix(in oklch, var(--secondary) 80%, black);
90
+ }
91
+ .dl-btn--ghost {
92
+ background-color: transparent;
93
+ color: var(--foreground);
94
+ }
95
+ .dl-btn--ghost:hover {
96
+ background-color: var(--accent);
97
+ color: var(--accent-foreground);
98
+ }
99
+ .dl-btn--link {
100
+ background-color: transparent;
101
+ color: var(--primary);
102
+ text-underline-offset: 4px;
103
+ }
104
+ .dl-btn--link:hover {
105
+ text-decoration: underline;
106
+ }