h2o-library 1.0.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 (86) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/components/index.d.ts +21 -0
  4. package/dist/components/src/accordion.d.ts +9 -0
  5. package/dist/components/src/button.d.ts +14 -0
  6. package/dist/components/src/checkbox.d.ts +17 -0
  7. package/dist/components/src/content-switch.d.ts +14 -0
  8. package/dist/components/src/date-picker.d.ts +13 -0
  9. package/dist/components/src/dropdown.d.ts +19 -0
  10. package/dist/components/src/expandable.d.ts +8 -0
  11. package/dist/components/src/icon.d.ts +9 -0
  12. package/dist/components/src/input.d.ts +16 -0
  13. package/dist/components/src/modal.d.ts +10 -0
  14. package/dist/components/src/multi-select.d.ts +16 -0
  15. package/dist/components/src/popover.d.ts +14 -0
  16. package/dist/components/src/radio-group.d.ts +17 -0
  17. package/dist/components/src/radio.d.ts +6 -0
  18. package/dist/components/src/side-panel.d.ts +10 -0
  19. package/dist/components/src/status.d.ts +8 -0
  20. package/dist/components/src/tabs.d.ts +10 -0
  21. package/dist/components/src/tag.d.ts +9 -0
  22. package/dist/components/src/textarea.d.ts +13 -0
  23. package/dist/components/src/toggle.d.ts +8 -0
  24. package/dist/components/src/tooltip.d.ts +9 -0
  25. package/dist/css/index.css +1 -0
  26. package/dist/css/src/accordion.css +45 -0
  27. package/dist/css/src/button.css +195 -0
  28. package/dist/css/src/calendar.css +16 -0
  29. package/dist/css/src/checkbox.css +150 -0
  30. package/dist/css/src/content-switch.css +77 -0
  31. package/dist/css/src/dropdown.css +220 -0
  32. package/dist/css/src/index.css +56 -0
  33. package/dist/css/src/input.css +192 -0
  34. package/dist/css/src/modal.css +86 -0
  35. package/dist/css/src/multi-select.css +84 -0
  36. package/dist/css/src/popover.css +17 -0
  37. package/dist/css/src/radio-group.css +44 -0
  38. package/dist/css/src/radio.css +146 -0
  39. package/dist/css/src/search.css +148 -0
  40. package/dist/css/src/side-panel.css +76 -0
  41. package/dist/css/src/status.css +31 -0
  42. package/dist/css/src/tabs.css +33 -0
  43. package/dist/css/src/tag.css +52 -0
  44. package/dist/css/src/textarea.css +156 -0
  45. package/dist/css/src/toggle.css +122 -0
  46. package/dist/css/src/tooltip.css +103 -0
  47. package/dist/esm/components/index.d.ts +21 -0
  48. package/dist/esm/components/src/accordion.d.ts +9 -0
  49. package/dist/esm/components/src/button.d.ts +14 -0
  50. package/dist/esm/components/src/checkbox.d.ts +17 -0
  51. package/dist/esm/components/src/content-switch.d.ts +14 -0
  52. package/dist/esm/components/src/date-picker.d.ts +13 -0
  53. package/dist/esm/components/src/dropdown.d.ts +19 -0
  54. package/dist/esm/components/src/expandable.d.ts +8 -0
  55. package/dist/esm/components/src/icon.d.ts +9 -0
  56. package/dist/esm/components/src/input.d.ts +16 -0
  57. package/dist/esm/components/src/modal.d.ts +10 -0
  58. package/dist/esm/components/src/multi-select.d.ts +16 -0
  59. package/dist/esm/components/src/popover.d.ts +14 -0
  60. package/dist/esm/components/src/radio-group.d.ts +17 -0
  61. package/dist/esm/components/src/radio.d.ts +6 -0
  62. package/dist/esm/components/src/side-panel.d.ts +10 -0
  63. package/dist/esm/components/src/status.d.ts +8 -0
  64. package/dist/esm/components/src/tabs.d.ts +10 -0
  65. package/dist/esm/components/src/tag.d.ts +9 -0
  66. package/dist/esm/components/src/textarea.d.ts +13 -0
  67. package/dist/esm/components/src/toggle.d.ts +8 -0
  68. package/dist/esm/components/src/tooltip.d.ts +9 -0
  69. package/dist/esm/css/index.css +1 -0
  70. package/dist/esm/hooks/index.d.ts +1 -0
  71. package/dist/esm/hooks/src/use-click-outside.d.ts +4 -0
  72. package/dist/esm/index.d.ts +5 -0
  73. package/dist/esm/index.js +2 -0
  74. package/dist/esm/index.js.map +1 -0
  75. package/dist/esm/types/index.d.ts +2 -0
  76. package/dist/esm/types/src/icon.d.ts +1 -0
  77. package/dist/esm/utils/index.d.ts +2 -0
  78. package/dist/hooks/index.d.ts +1 -0
  79. package/dist/hooks/src/use-click-outside.d.ts +4 -0
  80. package/dist/index.cjs.js +2 -0
  81. package/dist/index.cjs.js.map +1 -0
  82. package/dist/index.d.ts +5 -0
  83. package/dist/types/index.d.ts +2 -0
  84. package/dist/types/src/icon.d.ts +1 -0
  85. package/dist/utils/index.d.ts +2 -0
  86. package/package.json +43 -0
@@ -0,0 +1,86 @@
1
+ .modal-overlay {
2
+ position: fixed;
3
+ inset: 0;
4
+ background-color: rgba(0, 0, 0, 0.5);
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ z-index: 50;
9
+ animation: overlayShow 0.15s ease-out;
10
+ }
11
+
12
+ .modal {
13
+ background-color: hsl(var(--background));
14
+ border-radius: 0.5rem;
15
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
16
+ width: 90%;
17
+ max-width: 32rem;
18
+ max-height: 85vh;
19
+ animation: modalShow 0.3s cubic-bezier(0.16, 1, 0.3, 1);
20
+ }
21
+
22
+ .modal-header {
23
+ display: flex;
24
+ justify-content: space-between;
25
+ align-items: flex-start;
26
+ padding: 1.5rem;
27
+ }
28
+
29
+ .modal-title-container {
30
+ flex: 1;
31
+ margin-right: 1rem;
32
+ }
33
+
34
+ .modal-title {
35
+ font-size: 1.25rem;
36
+ font-weight: 600;
37
+ color: hsl(var(--foreground));
38
+ margin: 0;
39
+ }
40
+
41
+ .modal-description {
42
+ margin: 0.5rem 0 0;
43
+ font-size: 0.875rem;
44
+ color: hsl(var(--muted-100));
45
+ }
46
+
47
+ .modal-close {
48
+ padding: 0.5rem;
49
+ background: none;
50
+ border: none;
51
+ border-radius: 0.375rem;
52
+ color: hsl(var(--muted-100));
53
+ cursor: pointer;
54
+ transition: all 0.2s;
55
+ }
56
+
57
+ .modal-close:hover {
58
+ background-color: hsl(var(--primary-disabled));
59
+ color: hsl(var(--primary));
60
+ }
61
+
62
+ .modal-content {
63
+ padding: 1.5rem;
64
+ overflow-y: auto;
65
+ max-height: calc(85vh - 4rem);
66
+ }
67
+
68
+ @keyframes overlayShow {
69
+ from {
70
+ opacity: 0;
71
+ }
72
+ to {
73
+ opacity: 1;
74
+ }
75
+ }
76
+
77
+ @keyframes modalShow {
78
+ from {
79
+ opacity: 0;
80
+ transform: scale(0.95);
81
+ }
82
+ to {
83
+ opacity: 1;
84
+ transform: scale(1);
85
+ }
86
+ }
@@ -0,0 +1,84 @@
1
+ .multi-select-container {
2
+ position: relative;
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 0.5rem;
6
+ transition: all 0.3s;
7
+ border-radius: var(--radius-md);
8
+ }
9
+
10
+ .multi-select-trigger-container {
11
+ display: flex;
12
+ align-items: center;
13
+ justify-content: space-between;
14
+ border: 1.5px solid hsl(var(--muted));
15
+ border-radius: 0.5rem;
16
+ height: 2.5rem;
17
+ padding: 0.2rem 0.3rem 0.2rem 0.3rem;
18
+ cursor: pointer;
19
+ transition: all 0.2s;
20
+ }
21
+
22
+ .multi-select-trigger-container-open {
23
+ border-color: hsl(var(--primary));
24
+ border-radius: 0.5rem 0.5rem 0 0;
25
+ padding: 0 0.8rem;
26
+ }
27
+
28
+ .multi-select-trigger {
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: space-between;
32
+ gap: 0.5rem;
33
+ }
34
+
35
+ .multi-select-trigger-container:hover {
36
+ border-color: hsl(var(--primary));
37
+ }
38
+
39
+ .multi-select-trigger-container:hover .multi-select-trigger-icon {
40
+ color: hsl(var(--primary));
41
+ }
42
+
43
+ .multi-select-trigger-placeholder {
44
+ color: hsl(var(--muted));
45
+ font-size: 0.875rem;
46
+ padding-left: 0.3rem;
47
+ }
48
+
49
+ .multi-select-trigger-icon {
50
+ color: hsl(var(--muted-100));
51
+ }
52
+
53
+ .multi-select-options-container {
54
+ position: absolute;
55
+ top: 100%;
56
+ left: 0;
57
+ width: 100%;
58
+ border-radius: 0 0 0.5rem 0.5rem;
59
+ border: 1.5px solid hsl(var(--primary));
60
+ border-top: none;
61
+ background-color: hsl(var(--background));
62
+ z-index: 100;
63
+ padding: 0.5rem;
64
+ display: flex;
65
+ flex-direction: column;
66
+ gap: 0.2rem;
67
+ }
68
+
69
+ .multi-select-selected-options-container {
70
+ display: grid;
71
+ grid-template-columns: repeat(3, 1fr);
72
+ gap: 0.3rem;
73
+ max-height: 6rem;
74
+ overflow-y: auto;
75
+ padding: 0.2rem 0;
76
+ }
77
+
78
+ .multi-select-options-list {
79
+ display: flex;
80
+ flex-direction: column;
81
+ gap: 0.2rem;
82
+ max-height: 18rem;
83
+ overflow-y: auto;
84
+ }
@@ -0,0 +1,17 @@
1
+ .popover-content {
2
+ z-index: 50;
3
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
4
+ animation: popoverShow 0.2s cubic-bezier(0.16, 1, 0.3, 1);
5
+ transform-origin: var(--origin, top);
6
+ }
7
+
8
+ @keyframes popoverShow {
9
+ from {
10
+ opacity: 0;
11
+ transform: scale(0.95);
12
+ }
13
+ to {
14
+ opacity: 1;
15
+ transform: scale(1);
16
+ }
17
+ }
@@ -0,0 +1,44 @@
1
+ .radio-group {
2
+ display: flex;
3
+ gap: 0.5rem;
4
+ flex-wrap: wrap;
5
+ }
6
+
7
+ .radio-group-option {
8
+ display: flex;
9
+ align-items: center;
10
+ gap: 0.5rem;
11
+ padding: 0.5rem 1rem;
12
+ border-radius: var(--radius-md);
13
+ border: 1px solid hsl(var(--muted));
14
+ background: transparent;
15
+ color: hsl(var(--text));
16
+ cursor: pointer;
17
+ transition: all 0.2s;
18
+ }
19
+
20
+ .radio-group-option:hover {
21
+ border-color: hsl(var(--primary));
22
+ color: hsl(var(--primary));
23
+ }
24
+
25
+ .radio-group-option-selected {
26
+ background-color: hsl(var(--primary));
27
+ color: white;
28
+ border-color: hsl(var(--primary));
29
+ }
30
+
31
+ .radio-group-option-selected:hover {
32
+ background-color: hsl(var(--primary-200));
33
+ border-color: hsl(var(--primary-200));
34
+ }
35
+
36
+ .radio-group-option-label {
37
+ font-size: 0.875rem;
38
+ }
39
+
40
+ .radio-group-option-icon {
41
+ width: 1.25rem;
42
+ height: 1.25rem;
43
+ flex-shrink: 0;
44
+ }
@@ -0,0 +1,146 @@
1
+ .radio-label {
2
+ position: relative;
3
+ display: inline-flex;
4
+ align-items: center;
5
+ cursor: pointer;
6
+ user-select: none;
7
+ }
8
+
9
+ .radio-label input {
10
+ position: absolute;
11
+ opacity: 0;
12
+ width: 0;
13
+ height: 0;
14
+ }
15
+
16
+ .radio-button {
17
+ position: relative;
18
+ display: inline-block;
19
+ width: 20px;
20
+ height: 20px;
21
+ border: 2px solid hsl(var(--muted));
22
+ border-radius: 50%;
23
+ transition: all 0.2s;
24
+ }
25
+
26
+ .radio-label:not(:has(input:disabled)):hover .radio-button {
27
+ border-color: hsl(var(--primary));
28
+ }
29
+
30
+ .radio-button::after {
31
+ content: "";
32
+ position: absolute;
33
+ top: 50%;
34
+ left: 50%;
35
+ width: 8px;
36
+ height: 8px;
37
+ border-radius: 50%;
38
+ background-color: white;
39
+ transform: translate(-50%, -50%) scale(0);
40
+ transition: transform 0.2s;
41
+ }
42
+
43
+ .radio-label:not(:has(input:disabled)):hover input:checked + .radio-button {
44
+ border-color: hsl(var(--primary-300));
45
+ background-color: hsl(var(--primary-300));
46
+ }
47
+
48
+ .radio-label input:checked + .radio-button::after {
49
+ transform: translate(-50%, -50%) scale(1);
50
+ }
51
+
52
+ .radio-label:has(input:disabled) {
53
+ cursor: not-allowed;
54
+ }
55
+
56
+ .radio-label input:disabled + .radio-button {
57
+ border-color: hsl(var(--muted));
58
+ }
59
+
60
+ .radio-label input:disabled + .radio-button + .radio-text {
61
+ color: hsl(var(--muted));
62
+ }
63
+
64
+ .radio-label input:checked + .radio-button {
65
+ border-color: hsl(var(--primary));
66
+ background-color: hsl(var(--primary));
67
+ }
68
+
69
+ .radio-label input:checked:disabled + .radio-button {
70
+ opacity: 0.5;
71
+ }
72
+
73
+ .radio-text {
74
+ margin-left: 8px;
75
+ color: hsl(var(--foreground));
76
+ }
77
+
78
+ /* Radio Group */
79
+
80
+ .radio-group {
81
+ display: flex;
82
+ width: fit-content;
83
+ border-radius: var(--radius-md);
84
+ overflow: hidden;
85
+ border: 1px solid hsl(var(--muted));
86
+ }
87
+
88
+ .radio-group-option {
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ gap: 0.5rem;
93
+ padding: 0 1rem;
94
+ height: 2.5rem;
95
+ background: none;
96
+ border: none;
97
+ cursor: pointer;
98
+ transition: all 0.3s ease-in-out;
99
+ color: hsl(var(--foreground));
100
+ }
101
+
102
+ .radio-group-option:not(:last-child) {
103
+ border-right: 1px solid hsl(var(--muted));
104
+ }
105
+
106
+ .radio-group-option:hover {
107
+ background-color: hsl(var(--primary-disabled));
108
+ }
109
+
110
+ .radio-group-option-selected {
111
+ background-color: hsl(var(--primary));
112
+ color: white;
113
+ font-weight: 500;
114
+ }
115
+
116
+ .radio-group-option-selected:hover {
117
+ background-color: hsl(var(--primary-200));
118
+ color: white;
119
+ }
120
+
121
+ .radio-group-option-icon {
122
+ color: currentColor;
123
+ }
124
+
125
+ .radio-group-option-dot {
126
+ width: 0.8rem;
127
+ aspect-ratio: 1/1;
128
+ border-radius: 50%;
129
+ flex-shrink: 0;
130
+ }
131
+
132
+ .radio-group-option-dot--active {
133
+ background-color: hsl(var(--success-bg));
134
+ }
135
+
136
+ .radio-group-option-dot--inactive {
137
+ background-color: hsl(var(--destructive-bg));
138
+ }
139
+
140
+ .radio-group-option-selected > .radio-group-option-dot--active {
141
+ background-color: hsl(var(--success));
142
+ }
143
+
144
+ .radio-group-option-selected > .radio-group-option-dot--inactive {
145
+ background-color: hsl(var(--destructive));
146
+ }
@@ -0,0 +1,148 @@
1
+ .expandable-search {
2
+ position: relative;
3
+ width: fit-content;
4
+ overflow: hidden;
5
+ border: 1px solid transparent;
6
+ border-radius: 8px;
7
+ transition: border-color 0.3s ease-in-out;
8
+ }
9
+
10
+ .expandable-search.expanded {
11
+ border: 1px solid hsl(var(--primary));
12
+ }
13
+
14
+ .expandable-search.expanded
15
+ .expandable-search-container
16
+ .expandable-search-button:hover {
17
+ background-color: transparent;
18
+ color: hsl(var(--primary-300));
19
+ transition: background-color 0.3s ease-in-out;
20
+ }
21
+
22
+ .expandable-search-container {
23
+ position: relative;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: flex-end;
27
+ border-radius: 8px;
28
+ transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
29
+ width: 40px;
30
+ overflow: hidden;
31
+ }
32
+
33
+ .expandable-search-button {
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: center;
37
+ width: 40px;
38
+ height: 40px;
39
+ border: none;
40
+ border-radius: 8px;
41
+ background-color: transparent;
42
+ color: hsl(var(--primary));
43
+ cursor: pointer;
44
+ flex-shrink: 0;
45
+ position: relative;
46
+ z-index: 2;
47
+ }
48
+
49
+ .expandable-search-button:hover {
50
+ background-color: hsl(var(--primary-disabled));
51
+ transition: background-color 0.3s ease-in-out;
52
+ }
53
+
54
+ /* Magic Icon Animation */
55
+ .magic-icon-search {
56
+ position: relative;
57
+ display: inline-block;
58
+ width: 20px;
59
+ height: 20px;
60
+ transform-origin: center;
61
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
62
+ }
63
+
64
+ .magic-icon-search::before {
65
+ content: "";
66
+ position: absolute;
67
+ width: 2px;
68
+ height: 8px;
69
+ background: currentColor;
70
+ left: 70%;
71
+ top: 80%;
72
+ transform-origin: top center;
73
+ transform: translate(-50%, -50%) rotate(-45deg);
74
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
75
+ }
76
+
77
+ .magic-icon-search::after {
78
+ content: "";
79
+ position: absolute;
80
+ width: 14px;
81
+ height: 14px;
82
+ border: 2px solid currentColor;
83
+ border-radius: 50%;
84
+ top: 40%;
85
+ left: 40%;
86
+ transform-origin: center;
87
+ transform: translate(-50%, -50%);
88
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
89
+ }
90
+
91
+ .magic-icon-search.close {
92
+ transform: rotate(90deg);
93
+ }
94
+
95
+ .magic-icon-search.close::before {
96
+ height: 18px;
97
+ left: 82%;
98
+ top: 60%;
99
+ transform: translate(-50%, -50%) rotate(45deg);
100
+ }
101
+
102
+ .magic-icon-search.close::after {
103
+ width: 18px;
104
+ height: 2px;
105
+ border: none;
106
+ border-radius: 0;
107
+ background: currentColor;
108
+ left: 50%;
109
+ top: 45%;
110
+ transform: translate(-50%, -50%) rotate(45deg);
111
+ }
112
+
113
+ .expandable-search-button:hover {
114
+ color: hsl(var(--primary));
115
+ }
116
+
117
+ .expandable-search-input {
118
+ position: absolute;
119
+ top: 0;
120
+ right: 40px;
121
+ width: 200px;
122
+ height: 40px;
123
+ padding: 0 16px;
124
+ border: none;
125
+ outline: none;
126
+ background: transparent;
127
+ color: hsl(var(--foreground));
128
+ font-size: 1rem;
129
+ transform: translateX(100%);
130
+ opacity: 0;
131
+ visibility: hidden;
132
+ pointer-events: none;
133
+ transition: transform 0.1s cubic-bezier(0.4, 0, 0.2, 1),
134
+ opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), visibility 0s linear 0.3s;
135
+ }
136
+
137
+ .expandable-search.expanded .expandable-search-container {
138
+ width: calc(200px + 40px);
139
+ }
140
+
141
+ .expandable-search.expanded .expandable-search-input {
142
+ transform: translateX(0);
143
+ opacity: 1;
144
+ visibility: visible;
145
+ pointer-events: all;
146
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1) 0.1s,
147
+ opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1) 0.1s, visibility 0s linear 0.1s;
148
+ }
@@ -0,0 +1,76 @@
1
+ .side-panel-overlay {
2
+ position: fixed;
3
+ inset: 0;
4
+ background-color: rgba(0, 0, 0, 0.5);
5
+ display: flex;
6
+ justify-content: flex-end;
7
+ z-index: 50;
8
+ animation: overlayShow 0.15s ease-out;
9
+ }
10
+
11
+ .side-panel {
12
+ background-color: hsl(var(--background));
13
+ width: 100%;
14
+ max-width: 32rem;
15
+ height: 100vh;
16
+ display: flex;
17
+ flex-direction: column;
18
+ animation: sidePanelShow 0.3s cubic-bezier(0.16, 1, 0.3, 1);
19
+ }
20
+
21
+ .side-panel-header {
22
+ display: flex;
23
+ justify-content: space-between;
24
+ align-items: flex-start;
25
+ padding: 1.5rem;
26
+ }
27
+
28
+ .side-panel-title-container {
29
+ flex: 1;
30
+ margin-right: 1rem;
31
+ }
32
+
33
+ .side-panel-title {
34
+ font-size: 1.25rem;
35
+ font-weight: 600;
36
+ color: hsl(var(--foreground));
37
+ margin: 0;
38
+ }
39
+
40
+ .side-panel-description {
41
+ margin: 0.5rem 0 0;
42
+ font-size: 0.875rem;
43
+ color: hsl(var(--muted-100));
44
+ }
45
+
46
+ .side-panel-close {
47
+ padding: 0.5rem;
48
+ background: none;
49
+ border: none;
50
+ border-radius: 0.375rem;
51
+ color: hsl(var(--muted-100));
52
+ cursor: pointer;
53
+ transition: all 0.2s;
54
+ }
55
+
56
+ .side-panel-close:hover {
57
+ background-color: hsl(var(--primary-disabled));
58
+ color: hsl(var(--primary));
59
+ }
60
+
61
+ .side-panel-content {
62
+ padding: 1.5rem;
63
+ overflow-y: auto;
64
+ flex: 1;
65
+ }
66
+
67
+ @keyframes sidePanelShow {
68
+ from {
69
+ opacity: 0;
70
+ transform: translateX(100%);
71
+ }
72
+ to {
73
+ opacity: 1;
74
+ transform: translateX(0);
75
+ }
76
+ }
@@ -0,0 +1,31 @@
1
+ .status {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ gap: 0.5rem;
5
+ padding: 0.25rem 0.75rem;
6
+ border-radius: 1rem;
7
+ font-size: 0.875rem;
8
+ font-weight: 500;
9
+ }
10
+
11
+ .status.active {
12
+ background-color: hsl(var(--success-bg));
13
+ color: hsl(var(--success));
14
+ }
15
+
16
+ .status.muted {
17
+ background-color: hsl(var(--muted-25));
18
+ color: hsl(var(--muted-200));
19
+ }
20
+
21
+ .status.destructive {
22
+ background-color: hsl(var(--destructive-bg));
23
+ color: hsl(var(--destructive));
24
+ }
25
+
26
+ .status-dot {
27
+ width: 0.5rem;
28
+ height: 0.5rem;
29
+ border-radius: 50%;
30
+ background-color: currentColor;
31
+ }
@@ -0,0 +1,33 @@
1
+ .tabs {
2
+ display: flex;
3
+ gap: 1.5rem;
4
+ }
5
+
6
+ .tab {
7
+ position: relative;
8
+ padding: 0.2rem;
9
+ background: none;
10
+ border: none;
11
+ color: hsl(var(--muted-100));
12
+ font-weight: 500;
13
+ cursor: pointer;
14
+ transition: color 0.2s;
15
+ }
16
+
17
+ .tab:hover {
18
+ color: hsl(var(--foreground));
19
+ }
20
+
21
+ .tab-selected {
22
+ color: hsl(var(--foreground));
23
+ }
24
+
25
+ .tab-selected::after {
26
+ content: "";
27
+ position: absolute;
28
+ bottom: -1px;
29
+ left: 0;
30
+ width: 100%;
31
+ height: 2px;
32
+ background-color: hsl(var(--primary));
33
+ }
@@ -0,0 +1,52 @@
1
+ .tag-base {
2
+ display: flex;
3
+ align-items: center;
4
+ font-size: 14px;
5
+ justify-content: space-between;
6
+ padding: 0.3rem 0.3rem 0.3rem 0.6rem;
7
+ border-radius: var(--radius-sm);
8
+ transition: all 0.2s;
9
+ }
10
+
11
+ .tag-primary {
12
+ border: 1.5px solid hsl(var(--primary));
13
+ color: hsl(var(--primary));
14
+ &:hover {
15
+ color: hsl(var(--primary-200));
16
+ }
17
+ }
18
+
19
+ .tag-label {
20
+ text-overflow: ellipsis;
21
+ overflow: hidden;
22
+ white-space: nowrap;
23
+ }
24
+
25
+ .tag-secondary {
26
+ border: 1.5px solid hsl(var(--muted));
27
+ background-color: hsl(var(--muted-25));
28
+ }
29
+
30
+ .tag-primary .tag-remove {
31
+ color: hsl(var(--primary));
32
+ border-radius: 0.2rem;
33
+ transition: all 0.3s ease-in-out;
34
+ &:hover {
35
+ color: hsl(var(--primary-300));
36
+ background-color: hsl(var(--primary-disabled));
37
+ }
38
+ }
39
+
40
+ .tag-secondary .tag-remove {
41
+ color: hsl(var(--muted-200));
42
+ transition: all 0.3s ease-in-out;
43
+ &:hover {
44
+ color: hsl(var(--foreground));
45
+ }
46
+ }
47
+
48
+ .tag-remove {
49
+ background: none;
50
+ border: none;
51
+ cursor: pointer;
52
+ }