@svkit/styles 0.0.2-beta.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 (179) hide show
  1. package/dist/components/accordion.css +82 -0
  2. package/dist/components/accordion.js +1 -0
  3. package/dist/components/alert-dialog.css +26 -0
  4. package/dist/components/alert-dialog.js +1 -0
  5. package/dist/components/alert.css +21 -0
  6. package/dist/components/alert.js +1 -0
  7. package/dist/components/avatar.css +158 -0
  8. package/dist/components/avatar.js +1 -0
  9. package/dist/components/badge.css +125 -0
  10. package/dist/components/badge.js +1 -0
  11. package/dist/components/breadcrumb.css +30 -0
  12. package/dist/components/breadcrumb.js +1 -0
  13. package/dist/components/button-group.css +99 -0
  14. package/dist/components/button-group.js +1 -0
  15. package/dist/components/button.css +205 -0
  16. package/dist/components/button.js +1 -0
  17. package/dist/components/calendar.css +34 -0
  18. package/dist/components/calendar.js +1 -0
  19. package/dist/components/card.css +114 -0
  20. package/dist/components/card.js +1 -0
  21. package/dist/components/carousel.css +5 -0
  22. package/dist/components/carousel.js +1 -0
  23. package/dist/components/chart.css +5 -0
  24. package/dist/components/chart.js +1 -0
  25. package/dist/components/checkbox.css +20 -0
  26. package/dist/components/checkbox.js +1 -0
  27. package/dist/components/command.css +14 -0
  28. package/dist/components/command.js +1 -0
  29. package/dist/components/context-menu.css +43 -0
  30. package/dist/components/context-menu.js +1 -0
  31. package/dist/components/data-table.css +5 -0
  32. package/dist/components/data-table.js +1 -0
  33. package/dist/components/dialog.css +30 -0
  34. package/dist/components/dialog.js +1 -0
  35. package/dist/components/drawer.css +10 -0
  36. package/dist/components/drawer.js +1 -0
  37. package/dist/components/dropdown-menu.css +195 -0
  38. package/dist/components/dropdown-menu.js +1 -0
  39. package/dist/components/empty.css +25 -0
  40. package/dist/components/empty.js +1 -0
  41. package/dist/components/field.css +25 -0
  42. package/dist/components/field.js +1 -0
  43. package/dist/components/form.css +7 -0
  44. package/dist/components/form.js +1 -0
  45. package/dist/components/hover-card.css +3 -0
  46. package/dist/components/hover-card.js +1 -0
  47. package/dist/components/index.css +55 -0
  48. package/dist/components/index.js +1 -0
  49. package/dist/components/input-group.css +42 -0
  50. package/dist/components/input-group.js +1 -0
  51. package/dist/components/input-otp.css +33 -0
  52. package/dist/components/input-otp.js +1 -0
  53. package/dist/components/input.css +65 -0
  54. package/dist/components/input.js +1 -0
  55. package/dist/components/item.css +62 -0
  56. package/dist/components/item.js +1 -0
  57. package/dist/components/kbd.css +12 -0
  58. package/dist/components/kbd.js +1 -0
  59. package/dist/components/label.css +20 -0
  60. package/dist/components/label.js +1 -0
  61. package/dist/components/menu.css +110 -0
  62. package/dist/components/menu.js +1 -0
  63. package/dist/components/menubar.css +54 -0
  64. package/dist/components/menubar.js +1 -0
  65. package/dist/components/native-select.css +23 -0
  66. package/dist/components/native-select.js +1 -0
  67. package/dist/components/navigation-menu.css +48 -0
  68. package/dist/components/navigation-menu.js +1 -0
  69. package/dist/components/pagination.css +33 -0
  70. package/dist/components/pagination.js +1 -0
  71. package/dist/components/popover.css +6 -0
  72. package/dist/components/popover.js +1 -0
  73. package/dist/components/progress.css +9 -0
  74. package/dist/components/progress.js +1 -0
  75. package/dist/components/radio-group.css +24 -0
  76. package/dist/components/radio-group.js +1 -0
  77. package/dist/components/range-calendar.css +34 -0
  78. package/dist/components/range-calendar.js +1 -0
  79. package/dist/components/resizable.css +4 -0
  80. package/dist/components/resizable.js +1 -0
  81. package/dist/components/scroll-area.css +18 -0
  82. package/dist/components/scroll-area.js +1 -0
  83. package/dist/components/select.css +57 -0
  84. package/dist/components/select.js +1 -0
  85. package/dist/components/separator.css +13 -0
  86. package/dist/components/separator.js +1 -0
  87. package/dist/components/sheet.css +45 -0
  88. package/dist/components/sheet.js +1 -0
  89. package/dist/components/sidebar.css +71 -0
  90. package/dist/components/sidebar.js +1 -0
  91. package/dist/components/skeleton.css +33 -0
  92. package/dist/components/skeleton.js +1 -0
  93. package/dist/components/slider.css +43 -0
  94. package/dist/components/slider.js +1 -0
  95. package/dist/components/spinner.css +5 -0
  96. package/dist/components/spinner.js +1 -0
  97. package/dist/components/switch.css +46 -0
  98. package/dist/components/switch.js +1 -0
  99. package/dist/components/table.css +10 -0
  100. package/dist/components/table.js +1 -0
  101. package/dist/components/tabs.css +40 -0
  102. package/dist/components/tabs.js +1 -0
  103. package/dist/components/textarea.css +11 -0
  104. package/dist/components/textarea.js +1 -0
  105. package/dist/components/toast.css +156 -0
  106. package/dist/components/toast.js +1 -0
  107. package/dist/components/toggle-group.css +13 -0
  108. package/dist/components/toggle-group.js +1 -0
  109. package/dist/components/toggle.css +25 -0
  110. package/dist/components/toggle.js +1 -0
  111. package/dist/components/tooltip.css +90 -0
  112. package/dist/components/tooltip.js +1 -0
  113. package/dist/index-full.css +11 -0
  114. package/dist/index.css +9 -0
  115. package/dist/index.js +1 -0
  116. package/dist/styles.css +5344 -0
  117. package/index-full.css +11 -0
  118. package/index.css +9 -0
  119. package/package.json +37 -0
  120. package/src/base/base.css +161 -0
  121. package/src/components/accordion.css +82 -0
  122. package/src/components/alert-dialog.css +26 -0
  123. package/src/components/alert.css +21 -0
  124. package/src/components/avatar.css +158 -0
  125. package/src/components/badge.css +125 -0
  126. package/src/components/breadcrumb.css +30 -0
  127. package/src/components/button-group.css +99 -0
  128. package/src/components/button.css +205 -0
  129. package/src/components/calendar.css +34 -0
  130. package/src/components/card.css +114 -0
  131. package/src/components/carousel.css +5 -0
  132. package/src/components/chart.css +5 -0
  133. package/src/components/checkbox.css +20 -0
  134. package/src/components/command.css +14 -0
  135. package/src/components/context-menu.css +43 -0
  136. package/src/components/data-table.css +5 -0
  137. package/src/components/dialog.css +30 -0
  138. package/src/components/drawer.css +10 -0
  139. package/src/components/dropdown-menu.css +195 -0
  140. package/src/components/empty.css +25 -0
  141. package/src/components/field.css +25 -0
  142. package/src/components/form.css +7 -0
  143. package/src/components/hover-card.css +3 -0
  144. package/src/components/index.css +55 -0
  145. package/src/components/input-group.css +42 -0
  146. package/src/components/input-otp.css +33 -0
  147. package/src/components/input.css +65 -0
  148. package/src/components/item.css +62 -0
  149. package/src/components/kbd.css +12 -0
  150. package/src/components/label.css +20 -0
  151. package/src/components/menu.css +110 -0
  152. package/src/components/menubar.css +54 -0
  153. package/src/components/native-select.css +23 -0
  154. package/src/components/navigation-menu.css +48 -0
  155. package/src/components/pagination.css +33 -0
  156. package/src/components/popover.css +6 -0
  157. package/src/components/progress.css +9 -0
  158. package/src/components/radio-group.css +24 -0
  159. package/src/components/range-calendar.css +34 -0
  160. package/src/components/resizable.css +4 -0
  161. package/src/components/scroll-area.css +18 -0
  162. package/src/components/select.css +57 -0
  163. package/src/components/separator.css +13 -0
  164. package/src/components/sheet.css +45 -0
  165. package/src/components/sidebar.css +71 -0
  166. package/src/components/skeleton.css +33 -0
  167. package/src/components/slider.css +43 -0
  168. package/src/components/spinner.css +5 -0
  169. package/src/components/switch.css +46 -0
  170. package/src/components/table.css +10 -0
  171. package/src/components/tabs.css +40 -0
  172. package/src/components/textarea.css +11 -0
  173. package/src/components/toast.css +156 -0
  174. package/src/components/toggle-group.css +13 -0
  175. package/src/components/toggle.css +25 -0
  176. package/src/components/tooltip.css +90 -0
  177. package/src/themes/default.css +91 -0
  178. package/src/tokens/interactions.css +72 -0
  179. package/src/tokens/variables.css +111 -0
@@ -0,0 +1,54 @@
1
+ @layer components {
2
+ .sv-menubar {
3
+ @apply flex h-8 items-center gap-0.5 rounded-lg border border-border bg-surface p-[3px];
4
+ }
5
+
6
+ .sv-menubar-trigger {
7
+ @apply rounded-sm px-1.5 py-[2px] text-sm font-medium outline-none transition-colors;
8
+ @apply hover:bg-muted;
9
+ @apply aria-expanded:bg-muted;
10
+ @apply focus-visible:ring-ring/50 focus-visible:ring-3;
11
+ }
12
+
13
+ .sv-menubar-content {
14
+ @apply min-w-36;
15
+ }
16
+
17
+ .sv-menubar-item {
18
+ @apply cursor-default rounded-sm px-2 py-1.5 text-sm outline-none select-none;
19
+ @apply data-highlighted:bg-surface data-highlighted:text-surface-foreground;
20
+ @apply data-disabled:pointer-events-none data-disabled:opacity-50;
21
+ }
22
+
23
+ .sv-menubar-checkbox-item,
24
+ .sv-menubar-radio-item {
25
+ @apply cursor-default rounded-sm py-1 pr-8 pl-6 text-sm outline-none select-none;
26
+ @apply data-highlighted:bg-surface data-highlighted:text-surface-foreground;
27
+ @apply data-disabled:pointer-events-none data-disabled:opacity-50;
28
+ }
29
+
30
+ .sv-menubar-label {
31
+ @apply text-muted-foreground px-2 py-1.5 text-xs font-medium;
32
+ }
33
+
34
+ .sv-menubar-separator {
35
+ @apply bg-border -mx-1 my-1 h-px;
36
+ }
37
+
38
+ .sv-menubar-shortcut {
39
+ @apply text-muted-foreground ml-auto text-xs tracking-widest;
40
+ }
41
+
42
+ .sv-menubar-sub-trigger {
43
+ @apply cursor-default rounded-sm px-2 py-1.5 text-sm outline-none select-none;
44
+ @apply data-highlighted:bg-surface data-highlighted:text-surface-foreground;
45
+ }
46
+
47
+ .sv-menubar-sub-content {
48
+ @apply min-w-36;
49
+ }
50
+
51
+ .sv-menubar-group-heading {
52
+ @apply text-muted-foreground px-2 py-1.5 text-xs font-medium;
53
+ }
54
+ }
@@ -0,0 +1,23 @@
1
+ @layer components {
2
+ .sv-native-select-wrapper {
3
+ @apply relative w-fit;
4
+ }
5
+
6
+ .sv-native-select {
7
+ @apply border-border h-8 w-full min-w-0 appearance-none rounded-lg border bg-transparent py-1 pr-8 pl-2.5 text-sm outline-none transition-colors select-none;
8
+ @apply focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3;
9
+ @apply disabled:pointer-events-none disabled:cursor-not-allowed;
10
+ }
11
+
12
+ .sv-native-select[data-size='sm'] {
13
+ @apply h-7;
14
+ }
15
+
16
+ .sv-native-select[aria-invalid='true'] {
17
+ @apply border-danger ring-danger/20 ring-3;
18
+ }
19
+
20
+ .sv-native-select-icon {
21
+ @apply text-muted-foreground pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 select-none;
22
+ }
23
+ }
@@ -0,0 +1,48 @@
1
+ @layer components {
2
+ .sv-navigation-menu {
3
+ @apply relative flex max-w-max flex-1 items-center justify-center;
4
+ }
5
+
6
+ .sv-navigation-menu-list {
7
+ @apply flex flex-1 list-none items-center justify-center;
8
+ }
9
+
10
+ .sv-navigation-menu-trigger {
11
+ @apply inline-flex h-9 w-max items-center justify-center gap-1 rounded-sm px-2.5 py-1 text-sm font-medium outline-none transition-colors;
12
+ @apply hover:bg-surface;
13
+ @apply focus-visible:ring-ring/50 focus-visible:ring-3;
14
+ @apply disabled:pointer-events-none;
15
+ }
16
+
17
+ .sv-navigation-menu-trigger-icon {
18
+ @apply size-3.5;
19
+ }
20
+
21
+ .sv-navigation-menu-content {
22
+ @apply absolute top-0 left-0 w-full md:absolute md:w-auto;
23
+ }
24
+
25
+ .sv-navigation-menu-item {
26
+ @apply relative;
27
+ }
28
+
29
+ .sv-navigation-menu-link {
30
+ @apply text-sm;
31
+ }
32
+
33
+ .sv-navigation-menu-indicator {
34
+ @apply top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden;
35
+ }
36
+
37
+ .sv-navigation-menu-indicator-arrow {
38
+ @apply relative top-[60%] h-2 w-2 rotate-45 bg-surface;
39
+ }
40
+
41
+ .sv-navigation-menu-viewport-wrapper {
42
+ @apply absolute start-0 top-full z-50 flex justify-center;
43
+ }
44
+
45
+ .sv-navigation-menu-viewport {
46
+ @apply relative mt-1.5 h-(--bits-navigation-menu-viewport-height) w-full overflow-hidden rounded-lg border border-border bg-surface shadow-lg md:w-(--bits-navigation-menu-viewport-width);
47
+ }
48
+ }
@@ -0,0 +1,33 @@
1
+ @layer components {
2
+ .sv-pagination {
3
+ @apply mx-auto flex w-full justify-center;
4
+ }
5
+
6
+ .sv-pagination-content {
7
+ @apply flex items-center gap-0.5;
8
+ }
9
+
10
+ .sv-pagination-link {
11
+ @apply inline-flex size-8 items-center justify-center rounded-lg text-sm font-medium transition-colors;
12
+ @apply hover:bg-surface;
13
+ }
14
+
15
+ .sv-pagination-link[data-active] {
16
+ @apply border-border border bg-transparent;
17
+ }
18
+
19
+ .sv-pagination-ellipsis {
20
+ @apply inline-flex size-8 items-center justify-center;
21
+ & > svg {
22
+ @apply size-4;
23
+ }
24
+ }
25
+
26
+ .sv-pagination-previous {
27
+ @apply gap-1 pl-1.5;
28
+ }
29
+
30
+ .sv-pagination-next {
31
+ @apply gap-1 pr-1.5;
32
+ }
33
+ }
@@ -0,0 +1,6 @@
1
+ @layer components {
2
+ .sv-popover-content {
3
+ @apply bg-surface text-surface-foreground z-50 w-72 rounded-lg border border-border p-2.5 text-sm shadow-md outline-hidden;
4
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95;
5
+ }
6
+ }
@@ -0,0 +1,9 @@
1
+ @layer components {
2
+ .sv-progress {
3
+ @apply bg-muted relative flex h-1 w-full items-center overflow-x-hidden rounded-full;
4
+ }
5
+
6
+ .sv-progress-indicator {
7
+ @apply bg-primary size-full flex-1 rounded-full transition-all;
8
+ }
9
+ }
@@ -0,0 +1,24 @@
1
+ @layer components {
2
+ .sv-radio-group {
3
+ @apply grid w-full gap-2;
4
+ }
5
+
6
+ .sv-radio-group-item {
7
+ @apply border-border relative aspect-square size-4 shrink-0 rounded-full border outline-none;
8
+ @apply focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3;
9
+ @apply disabled:cursor-not-allowed disabled:opacity-50;
10
+ @apply data-checked:bg-primary data-checked:border-primary;
11
+ }
12
+
13
+ .sv-radio-group-item[aria-invalid='true'] {
14
+ @apply border-danger ring-danger/20 ring-3;
15
+ }
16
+
17
+ .sv-radio-group-indicator {
18
+ @apply flex size-4 items-center justify-center;
19
+ }
20
+
21
+ .sv-radio-group-indicator-icon {
22
+ @apply text-primary-foreground size-2 fill-current;
23
+ }
24
+ }
@@ -0,0 +1,34 @@
1
+ @layer components {
2
+ .sv-range-calendar {
3
+ @apply p-2;
4
+ }
5
+
6
+ .sv-range-calendar-header {
7
+ @apply flex items-center justify-between pb-2;
8
+ }
9
+
10
+ .sv-range-calendar-heading {
11
+ @apply text-sm font-medium;
12
+ }
13
+
14
+ .sv-range-calendar-grid {
15
+ @apply w-full border-collapse;
16
+ }
17
+
18
+ .sv-range-calendar-head-cell {
19
+ @apply text-muted-foreground w-8 rounded-md text-xs font-normal;
20
+ }
21
+
22
+ .sv-range-calendar-cell {
23
+ @apply text-center text-sm p-0 relative [&:has([data-selected])]:bg-primary [&:has([data-selected])]:rounded-md;
24
+ }
25
+
26
+ .sv-range-calendar-day {
27
+ @apply h-8 w-8 p-0 font-normal aria-selected:opacity-100 rounded-md hover:bg-surface data-selected:bg-primary data-selected:text-primary-foreground data-today:bg-surface data-disabled:opacity-50 data-disabled:pointer-events-none data-outside-month:opacity-30;
28
+ }
29
+
30
+ .sv-range-calendar-prev-button,
31
+ .sv-range-calendar-next-button {
32
+ @apply size-7 bg-transparent p-0 opacity-50 hover:opacity-100;
33
+ }
34
+ }
@@ -0,0 +1,4 @@
1
+ @layer components {
2
+ .sv-resizable-pane-group { @apply flex h-full w-full data-direction-vertical:flex-col; }
3
+ .sv-resizable-handle { @apply bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-direction-vertical:h-px data-direction-vertical:w-full; }
4
+ }
@@ -0,0 +1,18 @@
1
+ @layer components {
2
+ .sv-scroll-area {
3
+ @apply relative;
4
+ }
5
+
6
+ .sv-scroll-area-viewport {
7
+ @apply size-full rounded-[inherit] outline-none transition-[color,box-shadow];
8
+ @apply focus-visible:ring-ring/50 focus-visible:ring-3;
9
+ }
10
+
11
+ .sv-scroll-area-scrollbar {
12
+ @apply flex touch-none select-none p-px transition-colors;
13
+ }
14
+
15
+ .sv-scroll-area-thumb {
16
+ @apply bg-border relative flex-1 rounded-full;
17
+ }
18
+ }
@@ -0,0 +1,57 @@
1
+ @layer components {
2
+ .sv-select-trigger {
3
+ @apply flex w-fit items-center justify-between gap-1.5 whitespace-nowrap rounded-lg border border-border bg-transparent py-2 pr-2 pl-2.5 text-sm outline-none transition-colors select-none;
4
+ @apply focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3;
5
+ @apply disabled:cursor-not-allowed disabled:opacity-50;
6
+ }
7
+
8
+ .sv-select-trigger[data-size='md'] {
9
+ @apply h-8;
10
+ }
11
+
12
+ .sv-select-trigger[data-size='sm'] {
13
+ @apply h-7;
14
+ }
15
+
16
+ .sv-select-trigger-icon {
17
+ @apply text-muted-foreground size-4 pointer-events-none;
18
+ }
19
+
20
+ .sv-select-content {
21
+ @apply relative z-50 overflow-x-hidden overflow-y-auto;
22
+ }
23
+
24
+ .sv-select-item {
25
+ @apply relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-none select-none;
26
+ @apply focus:bg-surface focus:text-surface-foreground;
27
+ @apply data-disabled:pointer-events-none data-disabled:opacity-50;
28
+ }
29
+
30
+ .sv-select-item-indicator {
31
+ @apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;
32
+ }
33
+
34
+ .sv-select-label {
35
+ @apply text-muted-foreground px-1.5 py-1 text-xs;
36
+ }
37
+
38
+ .sv-select-separator {
39
+ @apply bg-border -mx-1 my-1 h-px;
40
+ }
41
+
42
+ .sv-select-group {
43
+ @apply scroll-my-1 p-1;
44
+ }
45
+
46
+ .sv-select-group-heading {
47
+ @apply text-muted-foreground px-2 py-1.5 text-xs;
48
+ }
49
+
50
+ .sv-select-scroll-up-button,
51
+ .sv-select-scroll-down-button {
52
+ @apply z-10 flex cursor-default items-center justify-center py-1;
53
+ & > svg {
54
+ @apply size-4;
55
+ }
56
+ }
57
+ }
@@ -0,0 +1,13 @@
1
+ @layer components {
2
+ .sv-separator {
3
+ @apply bg-border shrink-0;
4
+
5
+ &[data-orientation="horizontal"] {
6
+ @apply h-px w-full;
7
+ }
8
+
9
+ &[data-orientation="vertical"] {
10
+ @apply w-px h-full;
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,45 @@
1
+ @layer components {
2
+ .sv-sheet-overlay {
3
+ @apply fixed inset-0 z-50 bg-black/10;
4
+ }
5
+
6
+ .sv-sheet-content {
7
+ @apply bg-surface text-surface-foreground fixed z-50 flex flex-col gap-4 border-border bg-clip-padding p-4 text-sm shadow-lg transition duration-200 ease-in-out;
8
+ }
9
+
10
+ .sv-sheet-content[data-side='bottom'] {
11
+ @apply inset-x-0 bottom-0 h-auto border-t;
12
+ }
13
+
14
+ .sv-sheet-content[data-side='left'] {
15
+ @apply inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm;
16
+ }
17
+
18
+ .sv-sheet-content[data-side='right'] {
19
+ @apply inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm;
20
+ }
21
+
22
+ .sv-sheet-content[data-side='top'] {
23
+ @apply inset-x-0 top-0 h-auto border-b;
24
+ }
25
+
26
+ .sv-sheet-close {
27
+ @apply absolute top-3 right-3;
28
+ }
29
+
30
+ .sv-sheet-header {
31
+ @apply flex flex-col gap-0.5 p-4;
32
+ }
33
+
34
+ .sv-sheet-footer {
35
+ @apply mt-auto flex flex-col gap-2 p-4;
36
+ }
37
+
38
+ .sv-sheet-title {
39
+ @apply text-foreground text-base font-medium;
40
+ }
41
+
42
+ .sv-sheet-description {
43
+ @apply text-muted-foreground text-sm;
44
+ }
45
+ }
@@ -0,0 +1,71 @@
1
+ @layer components {
2
+ .sv-sidebar {
3
+ @apply bg-surface text-surface-foreground flex h-full w-[16rem] flex-col border-r border-border transition-[width] duration-200;
4
+ }
5
+ .sv-sidebar[data-state=closed] {
6
+ @apply w-[3rem];
7
+ }
8
+ .sv-sidebar-header {
9
+ @apply flex flex-col gap-2 p-2;
10
+ }
11
+ .sv-sidebar-footer {
12
+ @apply flex flex-col gap-2 p-2;
13
+ }
14
+ .sv-sidebar-content {
15
+ @apply flex flex-1 flex-col gap-2 overflow-auto p-2;
16
+ }
17
+ .sv-sidebar-group {
18
+ @apply flex flex-col gap-1;
19
+ }
20
+ .sv-sidebar-group-label {
21
+ @apply text-muted-foreground px-2 text-xs font-medium;
22
+ }
23
+ .sv-sidebar-menu {
24
+ @apply flex flex-col gap-1;
25
+ }
26
+ .sv-sidebar-menu-item {
27
+ @apply relative;
28
+ }
29
+ .sv-sidebar-menu-button {
30
+ @apply flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm font-medium outline-none transition-colors hover:bg-muted data-active:bg-muted;
31
+ }
32
+ .sv-sidebar-menu-button[data-size=sm] {
33
+ @apply text-xs;
34
+ }
35
+ .sv-sidebar-menu-button[data-size=lg] {
36
+ @apply text-base;
37
+ }
38
+ .sv-sidebar-group-content {
39
+ @apply flex flex-col gap-1;
40
+ }
41
+ .sv-sidebar-group-action {
42
+ @apply opacity-0 group-hover/sidebar-group:opacity-100;
43
+ }
44
+ .sv-sidebar-menu-sub {
45
+ @apply flex flex-col gap-1 pl-4;
46
+ }
47
+ .sv-sidebar-menu-sub-button {
48
+ @apply flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none transition-colors hover:bg-muted;
49
+ }
50
+ .sv-sidebar-menu-sub-item {
51
+ @apply flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none transition-colors hover:bg-muted;
52
+ }
53
+ .sv-sidebar-menu-action {
54
+ @apply opacity-0 group-hover/sidebar-menu-item:opacity-100;
55
+ }
56
+ .sv-sidebar-menu-badge {
57
+ @apply pointer-events-none absolute right-2 flex h-5 min-w-5 items-center justify-center rounded-full px-1 text-xs;
58
+ }
59
+ .sv-sidebar-rail {
60
+ @apply w-[3rem];
61
+ }
62
+ .sv-sidebar-trigger {
63
+ @apply absolute top-2 right-2;
64
+ }
65
+ .sv-sidebar-inset {
66
+ @apply p-4;
67
+ }
68
+ .sv-sidebar-separator {
69
+ @apply mx-2;
70
+ }
71
+ }
@@ -0,0 +1,33 @@
1
+ @layer components {
2
+ .sv-skeleton {
3
+ @apply bg-surface rounded-md;
4
+ }
5
+
6
+ .sv-skeleton:is(.sv-animation-type--none, [data-animation-type="none"]) {
7
+ /* No animation styles applied */
8
+ }
9
+
10
+ .sv-skeleton:is(.sv-animation-type--pulse, [data-animation-type="pulse"]) {
11
+ @apply animate-pulse;
12
+ }
13
+
14
+ .sv-skeleton:is(
15
+ .sv-animation-type--shimmer,
16
+ [data-animation-type="shimmer"]
17
+ ) {
18
+ @apply relative overflow-hidden;
19
+
20
+ &::before {
21
+ --animate-skeleton: skeleton 1.5s linear infinite;
22
+
23
+ @apply animate-(--animate-skeleton) via-muted absolute inset-0 -translate-x-full
24
+ bg-linear-to-r from-transparent to-transparent content-[''];
25
+ }
26
+ }
27
+
28
+ @keyframes skeleton {
29
+ 100% {
30
+ transform: translateX(200%);
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,43 @@
1
+ @layer components {
2
+ .sv-slider {
3
+ @apply relative flex w-full touch-none items-center select-none;
4
+ @apply data-disabled:opacity-50;
5
+ @apply data-vertical:h-full data-vertical:w-auto data-vertical:flex-col;
6
+ }
7
+
8
+ .sv-slider[data-orientation='vertical'] {
9
+ @apply min-h-40;
10
+ }
11
+
12
+ .sv-slider-track {
13
+ @apply bg-muted relative grow overflow-hidden rounded-full;
14
+ }
15
+
16
+ .sv-slider-track[data-orientation='horizontal'] {
17
+ @apply h-1 w-full;
18
+ }
19
+
20
+ .sv-slider-track[data-orientation='vertical'] {
21
+ @apply h-full w-1;
22
+ }
23
+
24
+ .sv-slider-range {
25
+ @apply bg-primary absolute select-none;
26
+ }
27
+
28
+ .sv-slider-track[data-orientation='horizontal'] .sv-slider-range {
29
+ @apply h-full;
30
+ }
31
+
32
+ .sv-slider-track[data-orientation='vertical'] .sv-slider-range {
33
+ @apply w-full;
34
+ }
35
+
36
+ .sv-slider-thumb {
37
+ @apply relative block size-3 shrink-0 rounded-full border bg-white transition-[color,box-shadow] select-none;
38
+ @apply border-ring ring-ring/50;
39
+ @apply focus-visible:ring-3 focus-visible:outline-hidden;
40
+ @apply disabled:pointer-events-none disabled:opacity-50;
41
+ @apply hover:ring-3 active:ring-3;
42
+ }
43
+ }
@@ -0,0 +1,5 @@
1
+ @layer components {
2
+ .sv-spinner {
3
+ @apply size-4 animate-spin;
4
+ }
5
+ }
@@ -0,0 +1,46 @@
1
+ @layer components {
2
+ .sv-switch {
3
+ @apply shrink-0 rounded-full border border-transparent transition-colors;
4
+ @apply focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3;
5
+ @apply bg-surface;
6
+ @apply data-state-checked:bg-primary;
7
+ @apply data-disabled:cursor-not-allowed data-disabled:opacity-50;
8
+ }
9
+
10
+ .sv-switch[data-size='sm'] {
11
+ @apply h-[14px] w-[24px];
12
+ }
13
+
14
+ .sv-switch[data-size='md'] {
15
+ @apply h-[18px] w-[32px];
16
+ }
17
+
18
+ .sv-switch-thumb {
19
+ @apply bg-background block rounded-full transition-transform;
20
+ @apply pointer-events-none ring-0;
21
+ }
22
+
23
+ .sv-switch[data-size='sm'] .sv-switch-thumb {
24
+ @apply size-3;
25
+ }
26
+
27
+ .sv-switch[data-size='md'] .sv-switch-thumb {
28
+ @apply size-4;
29
+ }
30
+
31
+ .sv-switch[data-size='sm'][data-state='checked'] .sv-switch-thumb {
32
+ transform: translateX(calc(100% - 2px));
33
+ }
34
+
35
+ .sv-switch[data-size='md'][data-state='checked'] .sv-switch-thumb {
36
+ transform: translateX(calc(100% - 2px));
37
+ }
38
+
39
+ .sv-switch[data-state='unchecked'] .sv-switch-thumb {
40
+ transform: translateX(0);
41
+ }
42
+
43
+ .sv-switch[aria-invalid='true'] {
44
+ @apply border-danger ring-danger/20 ring-3;
45
+ }
46
+ }
@@ -0,0 +1,10 @@
1
+ @layer components {
2
+ .sv-table-container { @apply relative w-full overflow-x-auto; }
3
+ .sv-table { @apply w-full caption-bottom text-sm; }
4
+ .sv-table-header { @apply [&_tr]:border-b; }
5
+ .sv-table-body { @apply [&_tr:last-child]:border-0; }
6
+ .sv-table-row { @apply border-b border-border transition-colors hover:bg-muted/50 data-state-selected:bg-muted; }
7
+ .sv-table-head { @apply h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0; }
8
+ .sv-table-cell { @apply p-2 align-middle [&:has([role=checkbox])]:pr-0; }
9
+ .sv-table-caption { @apply text-muted-foreground mt-4 text-sm; }
10
+ }
@@ -0,0 +1,40 @@
1
+ @layer components {
2
+ .sv-tabs {
3
+ @apply flex gap-2 data-orientation-horizontal:flex-col;
4
+ }
5
+
6
+ .sv-tabs-list {
7
+ @apply text-muted-foreground inline-flex h-8 w-fit items-center justify-center rounded-lg p-[3px];
8
+ @apply bg-muted;
9
+ }
10
+
11
+ .sv-tabs-list[data-variant='line'] {
12
+ @apply gap-1 rounded-none bg-transparent;
13
+ }
14
+
15
+ .sv-tabs-trigger {
16
+ @apply text-foreground/60 hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap transition-all;
17
+ @apply focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3;
18
+ @apply disabled:pointer-events-none disabled:opacity-50;
19
+
20
+ &[data-state='active'] {
21
+ @apply bg-background text-foreground shadow-sm;
22
+ }
23
+ }
24
+
25
+ .sv-tabs-list[data-variant='line'] .sv-tabs-trigger[data-state='active'] {
26
+ @apply bg-transparent shadow-none;
27
+ }
28
+
29
+ .sv-tabs-list:not([data-variant='line']) .sv-tabs-trigger::after {
30
+ @apply bg-foreground absolute inset-x-0 bottom-[-5px] h-0.5 rounded-full opacity-0 transition-opacity content-[''];
31
+ }
32
+
33
+ .sv-tabs-list:not([data-variant='line']) .sv-tabs-trigger[data-state='active']::after {
34
+ @apply opacity-100;
35
+ }
36
+
37
+ .sv-tabs-content {
38
+ @apply flex-1 text-sm outline-none;
39
+ }
40
+ }
@@ -0,0 +1,11 @@
1
+ @layer components {
2
+ .sv-textarea {
3
+ @apply placeholder:text-muted-foreground border-border flex field-sizing-content min-h-16 w-full rounded-lg border bg-transparent px-2.5 py-2 text-base transition-colors outline-none md:text-sm;
4
+ @apply focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3;
5
+ @apply disabled:cursor-not-allowed disabled:opacity-50;
6
+ }
7
+
8
+ .sv-textarea[aria-invalid='true'] {
9
+ @apply border-danger ring-danger/20 ring-3;
10
+ }
11
+ }