oat-glassed 0.1.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.
package/css/button.css ADDED
@@ -0,0 +1,155 @@
1
+ @layer base {
2
+ :is(button, [type=submit], [type=reset], [type=button], a.button), ::file-selector-button {
3
+ --_hov: color-mix(in srgb, var(--primary), white 20%);
4
+
5
+ display: inline-flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ gap: var(--space-2);
9
+ padding: var(--space-2) var(--space-4);
10
+ font-size: var(--text-7);
11
+ font-weight: var(--font-medium);
12
+ line-height: var(--leading-normal);
13
+ white-space: nowrap;
14
+ text-decoration: none;
15
+ background-color: var(--primary);
16
+ color: var(--primary-foreground);
17
+ border-radius: var(--radius-medium);
18
+ border: 1px solid rgb(from #fff r g b / 0.15);
19
+ box-shadow:
20
+ inset 0 1px 0 rgb(255 255 255 / 0.12),
21
+ 0 1px 4px rgb(0 0 0 / 0.08);
22
+ transition: background-color var(--transition-fast), opacity var(--transition-fast), transform var(--transition-fast), box-shadow var(--transition-fast);
23
+
24
+ &:not(:disabled) {
25
+ cursor: pointer;
26
+ }
27
+
28
+ &:hover:not(:disabled) {
29
+ background-color: var(--_hov);
30
+ box-shadow:
31
+ inset 0 1px 0 rgb(255 255 255 / 0.15),
32
+ 0 2px 8px rgb(0 0 0 / 0.12);
33
+ }
34
+
35
+ &:active:not(:disabled) {
36
+ transform: translateY(1px);
37
+ box-shadow: inset 0 1px 2px rgb(0 0 0 / 0.1);
38
+ }
39
+
40
+ &[data-variant="secondary"] {
41
+ --_hov: color-mix(in srgb, var(--secondary), black 5%);
42
+ background-color: var(--secondary);
43
+ color: var(--secondary-foreground);
44
+ border-color: light-dark(rgb(255 255 255 / 0.08), rgb(255 255 255 / 0.06));
45
+ box-shadow:
46
+ inset 0 1px 0 rgb(255 255 255 / 0.08),
47
+ var(--shadow-small);
48
+ }
49
+
50
+ &[data-variant="danger"] {
51
+ --_hov: color-mix(in srgb, var(--danger), black 12%);
52
+ background-color: var(--danger);
53
+ color: var(--danger-foreground);
54
+ }
55
+
56
+ &:is(.outline, .ghost) {
57
+ --_hov: var(--accent);
58
+ background-color: transparent;
59
+ color: var(--foreground);
60
+ box-shadow: none;
61
+ border-color: transparent;
62
+
63
+ &:hover:not(:disabled) {
64
+ box-shadow: var(--shadow-small);
65
+ }
66
+
67
+ &[data-variant="danger"] {
68
+ --_hov: color-mix(in srgb, var(--danger), transparent 90%);
69
+ color: var(--danger);
70
+ }
71
+
72
+ &[data-variant="secondary"] {
73
+ --_hov: color-mix(in srgb, var(--secondary), transparent 80%);
74
+ color: var(--secondary-foreground);
75
+ }
76
+ }
77
+
78
+ &.outline {
79
+ border-color: var(--border);
80
+
81
+ &[data-variant="danger"] {
82
+ border-color: var(--danger);
83
+ }
84
+
85
+ &[data-variant="secondary"] {
86
+ border-color: var(--border);
87
+ }
88
+ }
89
+
90
+ &.ghost {
91
+ border-color: transparent;
92
+ }
93
+
94
+ &.small {
95
+ padding: var(--space-1) var(--space-3);
96
+ font-size: var(--text-8);
97
+ }
98
+
99
+ &.large {
100
+ height: 3rem;
101
+ padding: 0 var(--space-6);
102
+ font-size: var(--text-regular);
103
+ }
104
+
105
+ &.icon {
106
+ width: 2.5rem;
107
+ padding: 0;
108
+
109
+ &.small {
110
+ width: 2rem;
111
+ }
112
+
113
+ &.large {
114
+ width: 3rem;
115
+ }
116
+ }
117
+ }
118
+
119
+ ::file-selector-button {
120
+ background-color: transparent;
121
+ color: var(--foreground);
122
+ border: 1px solid var(--border);
123
+ }
124
+ ::file-selector-button:hover {
125
+ background-color: var(--accent);
126
+ }
127
+ }
128
+
129
+ @layer components {
130
+ menu.buttons {
131
+ list-style-type: none;
132
+ padding-inline-start: 0;
133
+ display: inline-flex;
134
+
135
+ & > li {
136
+ &:first-child > * {
137
+ border-start-start-radius: var(--radius-medium);
138
+ border-end-start-radius: var(--radius-medium);
139
+ }
140
+
141
+ &:last-child > * {
142
+ border-start-end-radius: var(--radius-medium);
143
+ border-end-end-radius: var(--radius-medium);
144
+ }
145
+
146
+ & > * {
147
+ border-radius: 0;
148
+ }
149
+
150
+ &:not(:last-child) > * {
151
+ border-inline-end: 1px solid rgb(from var(--primary-foreground) r g b / 0.15);
152
+ }
153
+ }
154
+ }
155
+ }
package/css/card.css ADDED
@@ -0,0 +1,21 @@
1
+ @layer components {
2
+ .card {
3
+ background-color: var(--card);
4
+ background-image: var(--glass-highlight);
5
+ color: var(--card-foreground);
6
+ border: 1px solid var(--glass-border);
7
+ border-radius: var(--radius-large);
8
+ box-shadow: var(--glass-edge);
9
+ padding: var(--space-6);
10
+ overflow: hidden;
11
+ contain: paint;
12
+
13
+ > * + * {
14
+ margin-block-start: var(--space-4);
15
+ }
16
+
17
+ > header > * + * {
18
+ margin-block-start: var(--space-2);
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,107 @@
1
+ @layer components {
2
+ ot-command {
3
+ display: contents;
4
+ }
5
+
6
+ ot-command dialog {
7
+ width: min(100% - 2rem, 28rem);
8
+ max-height: min(60vh, 24rem);
9
+ margin-block-start: 15vh;
10
+ margin-inline: auto;
11
+ margin-block-end: auto;
12
+ padding: 0;
13
+ flex-direction: column;
14
+ overflow: hidden;
15
+
16
+ &[open] {
17
+ display: flex;
18
+ }
19
+ }
20
+
21
+ ot-command input[type="search"] {
22
+ margin: 0;
23
+ padding: var(--space-3) var(--space-4);
24
+ font-size: var(--text-6);
25
+ background: transparent;
26
+ border: none;
27
+ border-bottom: 1px solid var(--border);
28
+ border-radius: 0;
29
+ box-shadow: none;
30
+
31
+ &:focus {
32
+ outline: none;
33
+ border-color: var(--border);
34
+ background: transparent;
35
+ box-shadow: none;
36
+ }
37
+
38
+ &::-webkit-search-cancel-button {
39
+ display: none;
40
+ }
41
+ }
42
+
43
+ ot-command [role="listbox"] {
44
+ flex: 1;
45
+ overflow-y: auto;
46
+ padding: var(--space-2);
47
+
48
+ & > :not([role="option"]) {
49
+ display: block;
50
+ padding: var(--space-2) var(--space-3);
51
+ padding-block-start: var(--space-3);
52
+ font-size: var(--text-8);
53
+ font-weight: var(--font-semibold);
54
+ color: var(--muted-foreground);
55
+
56
+ &:first-child {
57
+ padding-block-start: var(--space-1);
58
+ }
59
+ }
60
+ }
61
+
62
+ ot-command [role="option"] {
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: flex-start;
66
+ gap: var(--space-2);
67
+ width: 100%;
68
+ padding: var(--space-2) var(--space-3);
69
+ font-size: var(--text-7);
70
+ text-align: start;
71
+ background: none;
72
+ color: var(--foreground);
73
+ border: none;
74
+ border-radius: var(--radius-small);
75
+ box-shadow: none;
76
+ cursor: pointer;
77
+ transition: background-color var(--transition-fast);
78
+
79
+ &:hover, &[aria-selected="true"] {
80
+ background-color: var(--accent);
81
+ box-shadow: none;
82
+ }
83
+
84
+ &:active {
85
+ transform: none;
86
+ box-shadow: none;
87
+ }
88
+
89
+ & > kbd {
90
+ margin-inline-start: auto;
91
+ padding: var(--space-1) var(--space-2);
92
+ font-family: var(--font-mono);
93
+ font-size: var(--text-8);
94
+ color: var(--muted-foreground);
95
+ background-color: var(--muted);
96
+ border: 1px solid var(--glass-border);
97
+ border-radius: var(--radius-small);
98
+ }
99
+
100
+ & > svg {
101
+ width: 1rem;
102
+ height: 1rem;
103
+ flex-shrink: 0;
104
+ opacity: 0.7;
105
+ }
106
+ }
107
+ }
package/css/dialog.css ADDED
@@ -0,0 +1,94 @@
1
+ @layer components {
2
+ dialog {
3
+ position: fixed;
4
+ inset: 0;
5
+ z-index: var(--z-modal);
6
+ width: min(100% - 2rem, 32rem);
7
+ max-height: 85vh;
8
+ margin: auto;
9
+ padding: 0;
10
+ background-color: var(--card);
11
+ background-image: var(--glass-highlight);
12
+ border: 1px solid var(--glass-border);
13
+ border-radius: var(--radius-large);
14
+ box-shadow: var(--glass-edge), var(--shadow-large);
15
+ backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate));
16
+ -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-saturate));
17
+ will-change: transform, opacity;
18
+ contain: layout style paint;
19
+ opacity: 0;
20
+ transform: translateY(8px) scale(0.97);
21
+ transition:
22
+ opacity 250ms cubic-bezier(0.175, 0.885, 0.32, 1.075),
23
+ transform 250ms cubic-bezier(0.175, 0.885, 0.32, 1.075),
24
+ display 250ms allow-discrete,
25
+ overlay 250ms allow-discrete;
26
+
27
+ &[open] {
28
+ opacity: 1;
29
+ transform: translateY(0) scale(1);
30
+ }
31
+
32
+ @starting-style {
33
+ &[open] {
34
+ opacity: 0;
35
+ transform: translateY(8px) scale(0.97);
36
+ }
37
+ }
38
+
39
+ &::backdrop {
40
+ background-color: light-dark(rgb(0 0 0 / 0.2), rgb(0 0 0 / 0.45));
41
+ backdrop-filter: blur(6px) saturate(var(--glass-saturate));
42
+ -webkit-backdrop-filter: blur(6px) saturate(var(--glass-saturate));
43
+ opacity: 0;
44
+ transition:
45
+ opacity 250ms ease,
46
+ display 250ms allow-discrete,
47
+ overlay 250ms allow-discrete;
48
+ }
49
+
50
+ &[open]::backdrop {
51
+ opacity: 1;
52
+ }
53
+
54
+ @starting-style {
55
+ &[open]::backdrop {
56
+ opacity: 0;
57
+ }
58
+ }
59
+
60
+ & > header,
61
+ & > form > header {
62
+ display: flex;
63
+ flex-direction: column;
64
+ gap: var(--space-1);
65
+ padding: var(--space-6);
66
+ padding-block-end: 0;
67
+
68
+ & > h1, & > h2, & > h3, & > h4, & > h5, & > h6 {
69
+ margin-block-end: 0;
70
+ }
71
+
72
+ & > p {
73
+ font-size: var(--text-7);
74
+ color: var(--muted-foreground);
75
+ margin-block-end: 0;
76
+ }
77
+ }
78
+
79
+ & > p, & > div, & > section,
80
+ & > form > p, & > form > div, & > form > section {
81
+ padding: var(--space-6);
82
+ overflow-y: auto;
83
+ }
84
+
85
+ & > footer,
86
+ & > form > footer {
87
+ display: flex;
88
+ justify-content: flex-end;
89
+ gap: var(--space-2);
90
+ padding: var(--space-6);
91
+ padding-block-start: 0;
92
+ }
93
+ }
94
+ }
@@ -0,0 +1,59 @@
1
+ @layer components {
2
+ ot-dropdown {
3
+ [popover] {
4
+ position: fixed;
5
+ margin: 0;
6
+ min-width: 12rem;
7
+ background-color: light-dark(rgb(255 255 255 / 0.72), rgb(17 24 39 / 0.65));
8
+ background-image: var(--glass-highlight);
9
+ backdrop-filter: blur(16px) saturate(140%);
10
+ -webkit-backdrop-filter: blur(16px) saturate(140%);
11
+ border: 1px solid light-dark(rgb(255 255 255 / 0.7), rgb(255 255 255 / 0.12));
12
+ border-radius: var(--radius-medium);
13
+ box-shadow: var(--glass-edge), var(--shadow-large);
14
+ will-change: transform, opacity;
15
+ opacity: 0;
16
+ transform: translateY(-6px) scale(0.96);
17
+ transition:
18
+ opacity 200ms cubic-bezier(0.175, 0.885, 0.32, 1.075),
19
+ transform 200ms cubic-bezier(0.175, 0.885, 0.32, 1.075),
20
+ display 200ms allow-discrete,
21
+ overlay 200ms allow-discrete;
22
+
23
+ &:popover-open {
24
+ opacity: 1;
25
+ transform: translateY(0) scale(1);
26
+ }
27
+
28
+ @starting-style {
29
+ &:popover-open {
30
+ opacity: 0;
31
+ transform: translateY(-6px) scale(0.96);
32
+ }
33
+ }
34
+ }
35
+
36
+ [role="menuitem"] {
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: start;
40
+ gap: var(--space-2);
41
+ width: 100%;
42
+ padding: var(--space-2) var(--space-3);
43
+ font-size: var(--text-7);
44
+ text-align: start;
45
+ color: var(--foreground);
46
+ background: none;
47
+ border: none;
48
+ border-radius: var(--radius-small);
49
+ box-shadow: none;
50
+ cursor: pointer;
51
+ transition: background-color var(--transition-fast);
52
+
53
+ &:hover, &:focus {
54
+ background-color: var(--accent);
55
+ outline: none;
56
+ }
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,38 @@
1
+ @layer components {
2
+ [data-empty] {
3
+ display: flex;
4
+ flex-direction: column;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: var(--space-3);
8
+ padding: var(--space-12) var(--space-6);
9
+ text-align: center;
10
+ color: var(--muted-foreground);
11
+ background-color: light-dark(rgb(255 255 255 / 0.2), rgb(255 255 255 / 0.01));
12
+ border: 1px solid var(--glass-border);
13
+ border-radius: var(--radius-large);
14
+ box-shadow: var(--glass-edge);
15
+ contain: paint;
16
+
17
+ & > svg, & > img {
18
+ width: 3rem;
19
+ height: 3rem;
20
+ opacity: 0.4;
21
+ }
22
+
23
+ & > :is(h1, h2, h3, h4, h5, h6) {
24
+ margin: 0;
25
+ color: var(--foreground);
26
+ }
27
+
28
+ & > p {
29
+ max-width: 28rem;
30
+ margin: 0;
31
+ font-size: var(--text-7);
32
+ }
33
+
34
+ & > :is(button, a.button) {
35
+ margin-block-start: var(--space-2);
36
+ }
37
+ }
38
+ }