@rvx/ui 0.1.7 → 0.1.8
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/dist/common/theme-test.js +1 -2
- package/dist/common/theme-test.js.map +1 -1
- package/dist/common/theme.d.ts +4 -2
- package/dist/common/theme.js +2 -1
- package/dist/common/theme.js.map +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/button.js +2 -2
- package/dist/components/button.js.map +1 -1
- package/dist/components/checkbox-test.d.ts +3 -0
- package/dist/components/checkbox-test.js +30 -0
- package/dist/components/checkbox-test.js.map +1 -0
- package/dist/components/checkbox.js +5 -8
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/collapse.d.ts +2 -1
- package/dist/components/collapse.js +2 -2
- package/dist/components/collapse.js.map +1 -1
- package/dist/components/column.js +2 -2
- package/dist/components/column.js.map +1 -1
- package/dist/components/control-group.js +1 -2
- package/dist/components/control-group.js.map +1 -1
- package/dist/components/dialog.js +23 -21
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/dropdown-input.js.map +1 -1
- package/dist/components/dropdown.js +4 -3
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/flex-space.js +2 -2
- package/dist/components/flex-space.js.map +1 -1
- package/dist/components/heading.d.ts +4 -0
- package/dist/components/heading.js +6 -2
- package/dist/components/heading.js.map +1 -1
- package/dist/components/label.js +2 -2
- package/dist/components/label.js.map +1 -1
- package/dist/components/layer.d.ts +4 -4
- package/dist/components/layer.js +7 -13
- package/dist/components/layer.js.map +1 -1
- package/dist/components/link.js +2 -2
- package/dist/components/link.js.map +1 -1
- package/dist/components/page.js +1 -2
- package/dist/components/page.js.map +1 -1
- package/dist/components/popout.d.ts +2 -1
- package/dist/components/popout.js +59 -58
- package/dist/components/popout.js.map +1 -1
- package/dist/components/popover.js +6 -5
- package/dist/components/popover.js.map +1 -1
- package/dist/components/radio-buttons.js +3 -2
- package/dist/components/radio-buttons.js.map +1 -1
- package/dist/components/row.js +2 -2
- package/dist/components/row.js.map +1 -1
- package/dist/components/scroll-view.js +2 -2
- package/dist/components/scroll-view.js.map +1 -1
- package/dist/components/text-input.js +2 -2
- package/dist/components/text-input.js.map +1 -1
- package/dist/components/text.js +1 -2
- package/dist/components/text.js.map +1 -1
- package/dist/components/validation.d.ts +4 -3
- package/dist/components/validation.js +6 -7
- package/dist/components/validation.js.map +1 -1
- package/dist/components/value.js +1 -2
- package/dist/components/value.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/test.d.ts +1 -0
- package/dist/test.js +1 -0
- package/dist/test.js.map +1 -1
- package/dist/theme.module.css +108 -41
- package/dist/theme.module.css.map +1 -1
- package/package.json +2 -2
- package/src/common/theme-test.tsx +1 -3
- package/src/common/theme.tsx +4 -2
- package/src/components/button.tsx +3 -4
- package/src/components/checkbox-test.tsx +34 -0
- package/src/components/checkbox.tsx +5 -7
- package/src/components/collapse.tsx +3 -3
- package/src/components/column.tsx +2 -3
- package/src/components/control-group.tsx +2 -3
- package/src/components/dialog.tsx +23 -22
- package/src/components/dropdown-input.tsx +0 -1
- package/src/components/dropdown.tsx +4 -4
- package/src/components/flex-space.tsx +2 -3
- package/src/components/heading.tsx +10 -3
- package/src/components/label.tsx +3 -2
- package/src/components/layer.tsx +13 -19
- package/src/components/link.tsx +2 -3
- package/src/components/page.tsx +2 -3
- package/src/components/popout.tsx +68 -67
- package/src/components/popover.tsx +5 -5
- package/src/components/radio-buttons.tsx +3 -3
- package/src/components/row.tsx +2 -3
- package/src/components/scroll-view.tsx +2 -3
- package/src/components/text-input.tsx +2 -3
- package/src/components/text.tsx +2 -3
- package/src/components/validation.tsx +7 -9
- package/src/components/value.tsx +2 -3
- package/src/index.tsx +2 -2
- package/src/test.tsx +1 -0
- package/src/theme/base.scss +10 -5
- package/src/theme/components/button.scss +58 -31
- package/src/theme/components/control-group.scss +6 -1
- package/src/theme/components/link.scss +1 -1
- package/src/theme/components/text-input.scss +2 -2
package/dist/theme.module.css
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
|
|
3
3
|
font-size: 0.875rem;
|
|
4
4
|
line-height: 1;
|
|
5
|
+
--accent: rgb(0, 192, 255);
|
|
6
|
+
accent-color: var(--accent);
|
|
5
7
|
--content-column-gap: 1.1428571429rem;
|
|
6
8
|
--content-row-gap: 1.1428571429rem;
|
|
7
9
|
--content-radius: 0.5714285714rem;
|
|
@@ -12,8 +14,9 @@
|
|
|
12
14
|
--content-pad-inline-end: 1.4285714286rem;
|
|
13
15
|
--control-column-gap: 0.5714285714rem;
|
|
14
16
|
--control-row-gap: 0.5714285714rem;
|
|
15
|
-
--control-radius: 0.
|
|
16
|
-
--control-border: 0.
|
|
17
|
+
--control-radius: 0.3571428571rem;
|
|
18
|
+
--control-border: 0.1428571429rem;
|
|
19
|
+
--control-shadow: 0 0 0.2142857143rem rgba(0, 0, 0, .5);
|
|
17
20
|
--control-disabled: opacity(.5);
|
|
18
21
|
--control-pad-block-start: 0.5714285714rem;
|
|
19
22
|
--control-pad-inline-start: 0.7142857143rem;
|
|
@@ -24,13 +27,14 @@
|
|
|
24
27
|
--line-gap: 0.4285714286rem;
|
|
25
28
|
--space-gap: 0.4285714286rem;
|
|
26
29
|
--layout-transition: .15s ease;
|
|
30
|
+
--color-transition: .1s ease;
|
|
27
31
|
}
|
|
28
32
|
|
|
29
33
|
@media (prefers-color-scheme: dark) {
|
|
30
34
|
:root {
|
|
31
|
-
--bg: rgb(
|
|
35
|
+
--bg: rgb(36, 36, 36);
|
|
32
36
|
--fg: white;
|
|
33
|
-
--focus-outline: var(--control-border) dashed
|
|
37
|
+
--focus-outline: var(--control-border) dashed var(--accent);
|
|
34
38
|
color-scheme: dark;
|
|
35
39
|
}
|
|
36
40
|
}
|
|
@@ -53,35 +57,39 @@ body {
|
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
::selection {
|
|
56
|
-
background-color: rgba(0,
|
|
60
|
+
background-color: rgba(0, 150, 200, 0.6);
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
@media (prefers-color-scheme: dark) {
|
|
60
64
|
:root {
|
|
61
|
-
--button-default-bg: rgb(
|
|
62
|
-
--button-default-bg-
|
|
65
|
+
--button-default-bg: rgb(64, 64, 64);
|
|
66
|
+
--button-default-bg-hover: rgb(90, 90, 90);
|
|
63
67
|
--button-default-fg: var(--fg);
|
|
64
|
-
--button-
|
|
65
|
-
--button-primary-bg: rgb(
|
|
66
|
-
--button-primary-
|
|
67
|
-
--button-primary-
|
|
68
|
-
--button-primary-border: rgb(0, 100, 200);
|
|
68
|
+
--button-primary-bg: rgb(0, 192, 255);
|
|
69
|
+
--button-primary-bg-hover: rgb(92, 214, 255);
|
|
70
|
+
--button-primary-fg: black;
|
|
71
|
+
--button-primary-focus: rgb(200, 241, 255);
|
|
69
72
|
--button-success-bg: rgb(0, 200, 100);
|
|
70
|
-
--button-success-bg-
|
|
73
|
+
--button-success-bg-hover: rgb(0, 242, 121);
|
|
71
74
|
--button-success-fg: black;
|
|
72
|
-
--button-success-
|
|
73
|
-
--button-warning-bg: rgb(
|
|
74
|
-
--button-warning-bg-
|
|
75
|
+
--button-success-focus: rgb(200, 255, 228);
|
|
76
|
+
--button-warning-bg: rgb(230, 180, 0);
|
|
77
|
+
--button-warning-bg-hover: rgb(255, 220, 105);
|
|
75
78
|
--button-warning-fg: black;
|
|
76
|
-
--button-warning-
|
|
79
|
+
--button-warning-focus: rgb(255, 243, 200);
|
|
77
80
|
--button-danger-bg: rgb(255, 0, 64);
|
|
78
|
-
--button-danger-bg-
|
|
81
|
+
--button-danger-bg-hover: rgb(255, 70, 100);
|
|
79
82
|
--button-danger-fg: black;
|
|
80
|
-
--button-danger-
|
|
83
|
+
--button-danger-focus: rgb(255, 200, 214);
|
|
81
84
|
--button-input-bg: rgb(16, 16, 16);
|
|
82
|
-
--button-input-bg-
|
|
85
|
+
--button-input-bg-hover: rgb(60, 60, 60);
|
|
86
|
+
--button-input-bg-active: rgb(80, 80, 80);
|
|
83
87
|
--button-input-fg: white;
|
|
84
88
|
--button-input-border: rgb(80, 80, 80);
|
|
89
|
+
--button-text-bg: transparent;
|
|
90
|
+
--button-text-bg-hover: rgb(80, 80, 80);
|
|
91
|
+
--button-text-bg-active: rgb(100, 100, 100);
|
|
92
|
+
--button-text-fg: var(--fg);
|
|
85
93
|
color-scheme: dark;
|
|
86
94
|
}
|
|
87
95
|
}
|
|
@@ -95,6 +103,10 @@ body {
|
|
|
95
103
|
padding-block: calc(var(--control-pad-block-start) - var(--control-border)) calc(var(--control-pad-block-end) - var(--control-border));
|
|
96
104
|
padding-inline: calc(var(--control-pad-inline-start) - var(--control-border)) calc(var(--control-pad-inline-end) - var(--control-border));
|
|
97
105
|
border-radius: var(--control-radius);
|
|
106
|
+
transition: var(--color-transition) background-color, var(--color-transition) border-color;
|
|
107
|
+
}
|
|
108
|
+
.button:not(.button_text) {
|
|
109
|
+
box-shadow: var(--control-shadow);
|
|
98
110
|
}
|
|
99
111
|
.button[disabled] {
|
|
100
112
|
cursor: default;
|
|
@@ -104,55 +116,106 @@ body {
|
|
|
104
116
|
.button_default {
|
|
105
117
|
background-color: var(--button-default-bg);
|
|
106
118
|
color: var(--button-default-fg);
|
|
107
|
-
border: var(--
|
|
119
|
+
border: var(--button-default-border, transparent) solid var(--control-border);
|
|
120
|
+
}
|
|
121
|
+
.button_default:hover:not(:active):not([disabled]) {
|
|
122
|
+
background-color: var(--button-default-bg-hover);
|
|
123
|
+
}
|
|
124
|
+
.button_default:focus-visible {
|
|
125
|
+
border-color: var(--button-default-focus, var(--accent));
|
|
108
126
|
}
|
|
109
|
-
.button_default:
|
|
110
|
-
background-color: var(--button-default-bg-
|
|
127
|
+
.button_default:active {
|
|
128
|
+
background-color: var(--button-default-bg-active, var(--button-default-bg));
|
|
111
129
|
}
|
|
112
130
|
|
|
113
131
|
.button_primary {
|
|
114
132
|
background-color: var(--button-primary-bg);
|
|
115
133
|
color: var(--button-primary-fg);
|
|
116
|
-
border: var(--
|
|
134
|
+
border: var(--button-primary-border, transparent) solid var(--control-border);
|
|
135
|
+
}
|
|
136
|
+
.button_primary:hover:not(:active):not([disabled]) {
|
|
137
|
+
background-color: var(--button-primary-bg-hover);
|
|
138
|
+
}
|
|
139
|
+
.button_primary:focus-visible {
|
|
140
|
+
border-color: var(--button-primary-focus, var(--accent));
|
|
117
141
|
}
|
|
118
|
-
.button_primary:
|
|
119
|
-
background-color: var(--button-primary-bg-
|
|
142
|
+
.button_primary:active {
|
|
143
|
+
background-color: var(--button-primary-bg-active, var(--button-primary-bg));
|
|
120
144
|
}
|
|
121
145
|
|
|
122
146
|
.button_success {
|
|
123
147
|
background-color: var(--button-success-bg);
|
|
124
148
|
color: var(--button-success-fg);
|
|
125
|
-
border: var(--
|
|
149
|
+
border: var(--button-success-border, transparent) solid var(--control-border);
|
|
126
150
|
}
|
|
127
|
-
.button_success:hover:not(:active):not([disabled])
|
|
128
|
-
background-color: var(--button-success-bg-
|
|
151
|
+
.button_success:hover:not(:active):not([disabled]) {
|
|
152
|
+
background-color: var(--button-success-bg-hover);
|
|
153
|
+
}
|
|
154
|
+
.button_success:focus-visible {
|
|
155
|
+
border-color: var(--button-success-focus, var(--accent));
|
|
156
|
+
}
|
|
157
|
+
.button_success:active {
|
|
158
|
+
background-color: var(--button-success-bg-active, var(--button-success-bg));
|
|
129
159
|
}
|
|
130
160
|
|
|
131
161
|
.button_warning {
|
|
132
162
|
background-color: var(--button-warning-bg);
|
|
133
163
|
color: var(--button-warning-fg);
|
|
134
|
-
border: var(--
|
|
164
|
+
border: var(--button-warning-border, transparent) solid var(--control-border);
|
|
165
|
+
}
|
|
166
|
+
.button_warning:hover:not(:active):not([disabled]) {
|
|
167
|
+
background-color: var(--button-warning-bg-hover);
|
|
135
168
|
}
|
|
136
|
-
.button_warning:
|
|
137
|
-
|
|
169
|
+
.button_warning:focus-visible {
|
|
170
|
+
border-color: var(--button-warning-focus, var(--accent));
|
|
171
|
+
}
|
|
172
|
+
.button_warning:active {
|
|
173
|
+
background-color: var(--button-warning-bg-active, var(--button-warning-bg));
|
|
138
174
|
}
|
|
139
175
|
|
|
140
176
|
.button_danger {
|
|
141
177
|
background-color: var(--button-danger-bg);
|
|
142
178
|
color: var(--button-danger-fg);
|
|
143
|
-
border: var(--
|
|
179
|
+
border: var(--button-danger-border, transparent) solid var(--control-border);
|
|
180
|
+
}
|
|
181
|
+
.button_danger:hover:not(:active):not([disabled]) {
|
|
182
|
+
background-color: var(--button-danger-bg-hover);
|
|
144
183
|
}
|
|
145
|
-
.button_danger:
|
|
146
|
-
|
|
184
|
+
.button_danger:focus-visible {
|
|
185
|
+
border-color: var(--button-danger-focus, var(--accent));
|
|
186
|
+
}
|
|
187
|
+
.button_danger:active {
|
|
188
|
+
background-color: var(--button-danger-bg-active, var(--button-danger-bg));
|
|
147
189
|
}
|
|
148
190
|
|
|
149
191
|
.button_input {
|
|
150
192
|
background-color: var(--button-input-bg);
|
|
151
193
|
color: var(--button-input-fg);
|
|
152
|
-
border: var(--
|
|
194
|
+
border: var(--button-input-border, transparent) solid var(--control-border);
|
|
195
|
+
}
|
|
196
|
+
.button_input:hover:not(:active):not([disabled]) {
|
|
197
|
+
background-color: var(--button-input-bg-hover);
|
|
198
|
+
}
|
|
199
|
+
.button_input:focus-visible {
|
|
200
|
+
border-color: var(--button-input-focus, var(--accent));
|
|
201
|
+
}
|
|
202
|
+
.button_input:active {
|
|
203
|
+
background-color: var(--button-input-bg-active, var(--button-input-bg));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.button_text {
|
|
207
|
+
background-color: var(--button-text-bg);
|
|
208
|
+
color: var(--button-text-fg);
|
|
209
|
+
border: var(--button-text-border, transparent) solid var(--control-border);
|
|
210
|
+
}
|
|
211
|
+
.button_text:hover:not(:active):not([disabled]) {
|
|
212
|
+
background-color: var(--button-text-bg-hover);
|
|
213
|
+
}
|
|
214
|
+
.button_text:focus-visible {
|
|
215
|
+
border-color: var(--button-text-focus, var(--accent));
|
|
153
216
|
}
|
|
154
|
-
.
|
|
155
|
-
background-color: var(--button-
|
|
217
|
+
.button_text:active {
|
|
218
|
+
background-color: var(--button-text-bg-active, var(--button-text-bg));
|
|
156
219
|
}
|
|
157
220
|
|
|
158
221
|
.button_input {
|
|
@@ -269,7 +332,10 @@ body {
|
|
|
269
332
|
.control_group {
|
|
270
333
|
display: flex;
|
|
271
334
|
flex-direction: row;
|
|
272
|
-
|
|
335
|
+
box-shadow: var(--control-shadow);
|
|
336
|
+
}
|
|
337
|
+
.control_group * {
|
|
338
|
+
--control-shadow: none;
|
|
273
339
|
}
|
|
274
340
|
.control_group > :not(:first-child) {
|
|
275
341
|
border-start-start-radius: 0;
|
|
@@ -421,7 +487,7 @@ h6.heading {
|
|
|
421
487
|
|
|
422
488
|
@media (prefers-color-scheme: dark) {
|
|
423
489
|
:root {
|
|
424
|
-
--link-fg: rgb(64,
|
|
490
|
+
--link-fg: rgb(64, 208, 255);
|
|
425
491
|
color-scheme: dark;
|
|
426
492
|
}
|
|
427
493
|
}
|
|
@@ -619,7 +685,7 @@ h6.heading {
|
|
|
619
685
|
--text-input-bg: rgb(16, 16, 16);
|
|
620
686
|
--text-input-fg: white;
|
|
621
687
|
--text-input-border: rgb(80, 80, 80);
|
|
622
|
-
--text-input-border-lit:
|
|
688
|
+
--text-input-border-lit: var(--accent);
|
|
623
689
|
color-scheme: dark;
|
|
624
690
|
}
|
|
625
691
|
}
|
|
@@ -633,6 +699,7 @@ h6.heading {
|
|
|
633
699
|
padding-inline: var(--control-pad-inline-start) var(--control-pad-inline-end);
|
|
634
700
|
border: var(--control-border) solid var(--text-input-border);
|
|
635
701
|
border-radius: var(--control-radius);
|
|
702
|
+
box-shadow: var(--control-shadow);
|
|
636
703
|
background-color: var(--text-input-bg);
|
|
637
704
|
color: var(--text-input-fg);
|
|
638
705
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../src/theme/base.scss","../src/theme/common.scss","../src/theme/components/button.scss","../src/theme/components/checkbox.scss","../src/theme/components/collapse.scss","../src/theme/components/column.scss","../src/theme/components/control-group.scss","../src/theme/components/dialog.scss","../src/theme/components/dropdown.scss","../src/theme/components/flex-space.scss","../src/theme/components/heading.scss","../src/theme/components/label.scss","../src/theme/components/link.scss","../src/theme/components/page.scss","../src/theme/components/popover.scss","../src/theme/components/radio-buttons.scss","../src/theme/components/row.scss","../src/theme/components/scroll-view.scss","../src/theme/components/text-input.scss","../src/theme/components/text.scss","../src/theme/components/validation.scss","../src/theme/components/value.scss"],"names":[],"mappings":"AASA;EACC;EACA;EACA;EAEA;EACA;EACA;EACA;
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../src/theme/base.scss","../src/theme/common.scss","../src/theme/components/button.scss","../src/theme/components/checkbox.scss","../src/theme/components/collapse.scss","../src/theme/components/column.scss","../src/theme/components/control-group.scss","../src/theme/components/dialog.scss","../src/theme/components/dropdown.scss","../src/theme/components/flex-space.scss","../src/theme/components/heading.scss","../src/theme/components/label.scss","../src/theme/components/link.scss","../src/theme/components/page.scss","../src/theme/components/popover.scss","../src/theme/components/radio-buttons.scss","../src/theme/components/row.scss","../src/theme/components/scroll-view.scss","../src/theme/components/text-input.scss","../src/theme/components/text.scss","../src/theme/components/validation.scss","../src/theme/components/value.scss"],"names":[],"mappings":"AASA;EACC;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;ECQA;EACA;EACA;EACA;EDRA;EACA;EACA;EACA;EACA;EACA;ECAA;EACA;EACA;EACA;EDAA;EAEA;EAEA;EACA;EAEA;EACA;;;AC1BC;EAFD;IANE;IAAA;IAAA;IAUA;;;ADuCH;EACC;EACA;EAEA;;AACA;EALD;IAME;;;;AAIF;EACC;EACA;EACA;EACA;;;AAGD;EACC;;;AC3DC;EAFD;IANE;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAUA;;;ACgFH;EACC;EACA;EACA;EACA;EAEA;EAEA;EDnEC,eACC;EAED,gBACC;ECkEF;EACA;;AAGA;EACC;;AAGD;EACC;EACA;;;AAKD;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAdF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAdF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAdF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAdF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAdF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAdF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;;;AAKH;EACC;;;AC5ID;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;EACA;;;AAIF;EACC;EACA;EACA;;;ACtBD;EACC;EACA;EACA;;;AAGD;EACC,YACC;;;AAIF;EACC;IAAO;;EACP;IAAM;;EACN;IAAM;;EACN;IAAK;;;AAGN;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;AAEA;EACC,YACC;;AAIF;EACC;EACA;;;AAIF;EACC;EACA;EACA;EACA;;AAEA;EACC,YACC;;AAKF;EACC;EACA;EACA;;;AC5DF;EACC;EACA;;AAEA;EACC;;AAMD;EACC;;;AAQD;EACC;;AACA;EACC;;;AAHF;EACC;;AACA;EACC;;;ACvBH;EACC;EACA;EAEA;;AACA;EACC;;AAGD;EACC;EACA;;AAED;EACC;EACA;;;ALHA;EAFD;IANE;IAAA;IAAA;IAAA;IAUA;;;AMEH;EACC;EACA;EAEA;EAEA;EACA;EACA;EAEA;;;AAGD;EACC;EACA;EAEA;EACA;EACA;EACA;ENDC,eACC;EAED,gBACC;;;AMCH;EACC;;;AN7BC;EAFD;IANE;IAAA;IAAA;IAAA;IAUA;;;AOEH;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EPPC,eACC;EAED,gBACC;;AOMF;EACC;;;AC9CF;EACC;EACA;EACA;;;ACHD;EACC;EACA;;AAEA;EAEC;EACA;EACA;EACA;;;AAIF;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;AAAA;AAAA;EAGC;EACA;EACA;;;ATxBC;EAFD;IANE;IAUA;;;AUPH;EACC;EACA;EAEA;EACA;EACA;;AAEA;EAEC;EACA;EACA;EACA;;;AVRA;EAFD;IANE;IAUA;;;AWPH;EACC;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;;ACrBF;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AZPC;EAFD;IANE;IAAA;IAAA;IAUA;;;AaDH;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EbnBC,eACC;EAED,gBACC;;;AcvCH;EACC;EACA;EACA;;AAEA;EACC;EACA;;;AAIF;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;;;AC5BD;EACC;EACA;EACA;;;AAIA;EACC;EACA;;AACA;EACC;EACA;;;AALF;EACC;EACA;;AACA;EACC;EACA;;;AfAD;EAFD;IANE;IAAA;IAUA;;;AgBJH;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AhBpCC;EAFD;IANE;IAAA;IAAA;IAAA;IAUA;;;AiBEH;EACC;EACA;EACA;EAEA;EAEA;EjBmBC,eACC;EAED,gBACC;EiBrBF;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;;;AAIF;EACC;;;AC1CD;EACC;;AAEA;EAEC;EACA;EACA;EACA;;;AlBIA;EAFD;IANE;IAUA;;;AmBPH;EACC;;;AAGD;EACC;;;ACZD;EACC","file":"theme.module.css"}
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"rvx"
|
|
13
13
|
],
|
|
14
14
|
"license": "MIT",
|
|
15
|
-
"version": "0.1.
|
|
15
|
+
"version": "0.1.8",
|
|
16
16
|
"type": "module",
|
|
17
17
|
"main": "./dist/index.js",
|
|
18
18
|
"sideEffects": false,
|
|
@@ -28,6 +28,6 @@
|
|
|
28
28
|
"./dist/": "./dist/"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"rvx": "^
|
|
31
|
+
"rvx": "^18.0.1"
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { extract } from "rvx";
|
|
2
|
-
|
|
3
1
|
import { THEME, Theme } from "./theme.js";
|
|
4
2
|
|
|
5
3
|
/**
|
|
@@ -8,7 +6,7 @@ import { THEME, Theme } from "./theme.js";
|
|
|
8
6
|
* @throws An error if the current theme doesn't support the specified key.
|
|
9
7
|
*/
|
|
10
8
|
export function themeClass(key: keyof Theme): string {
|
|
11
|
-
const theme =
|
|
9
|
+
const theme = THEME.current;
|
|
12
10
|
if (!theme) {
|
|
13
11
|
throw new Error("theme is not available in the current context");
|
|
14
12
|
}
|
package/src/common/theme.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Context } from "rvx";
|
|
2
2
|
|
|
3
|
-
export const THEME =
|
|
3
|
+
export const THEME = new Context<Theme>();
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* A collection of class names that is used as the theme.
|
|
@@ -37,6 +37,8 @@ export interface Theme {
|
|
|
37
37
|
button_warning?: string;
|
|
38
38
|
/** Additional class for buttons with the "input" variant */
|
|
39
39
|
button_input?: string;
|
|
40
|
+
/** Additional class for buttons with the "text" variant */
|
|
41
|
+
button_text?: string;
|
|
40
42
|
|
|
41
43
|
/** Class for all checkbox containing labels */
|
|
42
44
|
checkbox_label?: string;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { ClassValue, Expression,
|
|
1
|
+
import { ClassValue, Expression, get, optionalString, StyleValue } from "rvx";
|
|
2
2
|
import { isPending } from "rvx/async";
|
|
3
|
-
|
|
4
3
|
import { Action, handleActionEvent, keyFor } from "../common/events.js";
|
|
5
4
|
import { THEME } from "../common/theme.js";
|
|
6
5
|
import { Validator } from "./validation.js";
|
|
7
6
|
|
|
8
7
|
export type ButtonType = "button" | "submit" | "reset" | "menu";
|
|
9
|
-
export type ButtonVariant = "default" | "primary" | "success" | "danger" | "warning" | "input";
|
|
8
|
+
export type ButtonVariant = "default" | "primary" | "success" | "danger" | "warning" | "input" | "text";
|
|
10
9
|
|
|
11
10
|
export function Button(props: {
|
|
12
11
|
/**
|
|
@@ -50,7 +49,7 @@ export function Button(props: {
|
|
|
50
49
|
|
|
51
50
|
children?: unknown;
|
|
52
51
|
}): unknown {
|
|
53
|
-
const theme =
|
|
52
|
+
const theme = THEME.current;
|
|
54
53
|
const disabled = () => isPending() || get(props.disabled);
|
|
55
54
|
|
|
56
55
|
function action(event: Event) {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { themeClass } from "../common/theme-test.js";
|
|
2
|
+
|
|
3
|
+
function assertCheckbox(checkbox: Element): asserts checkbox is HTMLElement {
|
|
4
|
+
if (!checkbox.matches(`.${themeClass("checkbox_label")}`)) {
|
|
5
|
+
throw new Error("checkbox must be a checkbox root element.");
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function getInput(checkbox: HTMLElement): HTMLInputElement {
|
|
10
|
+
return checkbox.querySelector("input")!;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function isCheckboxChecked(checkbox: Element): boolean | undefined {
|
|
14
|
+
assertCheckbox(checkbox);
|
|
15
|
+
const input = getInput(checkbox);
|
|
16
|
+
return input.indeterminate ? undefined : input.checked;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function toggleCheckbox(checkbox: Element, checked?: boolean): void {
|
|
20
|
+
assertCheckbox(checkbox);
|
|
21
|
+
const input = getInput(checkbox);
|
|
22
|
+
if (input.disabled) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
checked ??= !input.checked;
|
|
26
|
+
input.indeterminate = false;
|
|
27
|
+
input.checked = checked;
|
|
28
|
+
input.dispatchEvent(new CustomEvent("input"));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function getCheckboxContent(checkbox: Element): HTMLElement {
|
|
32
|
+
assertCheckbox(checkbox);
|
|
33
|
+
return checkbox.querySelector(`.${themeClass("checkbox_content")}`) as HTMLElement;
|
|
34
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { ClassValue, Expression,
|
|
1
|
+
import { ClassValue, Expression, get, optionalString, Signal, string, StyleValue, watch } from "rvx";
|
|
2
2
|
import { isPending } from "rvx/async";
|
|
3
|
+
import { uniqueId } from "rvx/id";
|
|
3
4
|
|
|
4
5
|
import { THEME } from "../common/theme.js";
|
|
5
6
|
import { Text } from "./text.js";
|
|
@@ -16,7 +17,7 @@ export function Checkbox(props: {
|
|
|
16
17
|
children?: unknown;
|
|
17
18
|
}): unknown {
|
|
18
19
|
const id = uniqueId();
|
|
19
|
-
const theme =
|
|
20
|
+
const theme = THEME.current;
|
|
20
21
|
|
|
21
22
|
const disabled = props.checked instanceof Signal
|
|
22
23
|
? () => isPending() || get(props.disabled)
|
|
@@ -41,11 +42,8 @@ export function Checkbox(props: {
|
|
|
41
42
|
/> as HTMLInputElement;
|
|
42
43
|
|
|
43
44
|
watch(props.checked, checked => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
} else {
|
|
47
|
-
input.checked = checked;
|
|
48
|
-
}
|
|
45
|
+
input.indeterminate = checked === undefined;
|
|
46
|
+
input.checked = checked === true;
|
|
49
47
|
});
|
|
50
48
|
|
|
51
49
|
return <label
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ClassValue,
|
|
2
|
-
|
|
1
|
+
import { ClassValue, Expression, get, map, optionalString, sig, StyleValue, teardown } from "rvx";
|
|
2
|
+
import { Event } from "rvx/event";
|
|
3
3
|
import { THEME } from "../common/theme.js";
|
|
4
4
|
import { AriaLive, AriaRelevant } from "../common/types.js";
|
|
5
5
|
|
|
@@ -14,7 +14,7 @@ export function Collapse(props: {
|
|
|
14
14
|
"aria-relevant"?: Expression<AriaRelevant | undefined>;
|
|
15
15
|
"aria-atomic"?: Expression<boolean | undefined>;
|
|
16
16
|
}): unknown {
|
|
17
|
-
const theme =
|
|
17
|
+
const theme = THEME.current;
|
|
18
18
|
const visible = map(props.visible, v => v ?? false);
|
|
19
19
|
const alert = sig(false);
|
|
20
20
|
const size = sig<number | undefined>(undefined);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ClassValue, Expression,
|
|
2
|
-
|
|
1
|
+
import { ClassValue, Expression, map, StyleValue } from "rvx";
|
|
3
2
|
import { THEME } from "../common/theme.js";
|
|
4
3
|
import { SizeContext } from "../common/types.js";
|
|
5
4
|
|
|
@@ -13,7 +12,7 @@ export function Column(props: {
|
|
|
13
12
|
id?: Expression<string | undefined>;
|
|
14
13
|
children?: unknown;
|
|
15
14
|
}): unknown {
|
|
16
|
-
const theme =
|
|
15
|
+
const theme = THEME.current;
|
|
17
16
|
return <div
|
|
18
17
|
class={[
|
|
19
18
|
theme?.column,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ClassValue, Expression,
|
|
2
|
-
|
|
1
|
+
import { ClassValue, Expression, StyleValue } from "rvx";
|
|
3
2
|
import { THEME } from "../common/theme.js";
|
|
4
3
|
|
|
5
4
|
export function ControlGroup(props: {
|
|
@@ -8,7 +7,7 @@ export function ControlGroup(props: {
|
|
|
8
7
|
id?: Expression<string | undefined>;
|
|
9
8
|
children?: unknown;
|
|
10
9
|
}): unknown {
|
|
11
|
-
const theme =
|
|
10
|
+
const theme = THEME.current;
|
|
12
11
|
return <div
|
|
13
12
|
class={[
|
|
14
13
|
theme?.control_group,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { captureSelf, ClassValue, Expression,
|
|
1
|
+
import { captureSelf, ClassValue, Expression, map, mount, StyleValue } from "rvx";
|
|
2
2
|
import { TASKS, Tasks } from "rvx/async";
|
|
3
|
-
|
|
3
|
+
import { uniqueId } from "rvx/id";
|
|
4
4
|
import { FlexSpace, Heading, Row, Text, THEME } from "../index.js";
|
|
5
5
|
import { LAYER, Layer } from "./layer.js";
|
|
6
6
|
|
|
@@ -23,24 +23,25 @@ export function showDialog<T = void>(init: DialogInit<T>, options?: DialogOption
|
|
|
23
23
|
mount(
|
|
24
24
|
document.body,
|
|
25
25
|
<Layer modal>
|
|
26
|
-
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
26
|
+
{() => {
|
|
27
|
+
return TASKS.inject(new Tasks(), () => {
|
|
28
|
+
const dialog: Dialog<T> = {
|
|
29
|
+
resolve(value) {
|
|
30
|
+
dispose();
|
|
31
|
+
resolve(value);
|
|
32
|
+
},
|
|
33
|
+
reject(reason) {
|
|
34
|
+
dispose();
|
|
35
|
+
reject(reason);
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
if (options?.cancellable ?? true) {
|
|
39
|
+
LAYER.current!.useHotkey("escape", () => {
|
|
40
|
+
dialog.reject(new DialogAbortError());
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return init(dialog);
|
|
44
|
+
});
|
|
44
45
|
}}
|
|
45
46
|
</Layer>
|
|
46
47
|
);
|
|
@@ -66,7 +67,7 @@ export function DialogBody(props: {
|
|
|
66
67
|
"aria-labelledby"?: Expression<string | undefined>;
|
|
67
68
|
"aria-describedby"?: Expression<string | undefined>;
|
|
68
69
|
}): unknown {
|
|
69
|
-
const theme =
|
|
70
|
+
const theme = THEME.current;
|
|
70
71
|
|
|
71
72
|
let titleId: string | undefined;
|
|
72
73
|
let descriptionId: string | undefined;
|
|
@@ -116,7 +117,7 @@ export function DialogFooter(props: {
|
|
|
116
117
|
links?: unknown;
|
|
117
118
|
children?: unknown;
|
|
118
119
|
}): unknown {
|
|
119
|
-
const theme =
|
|
120
|
+
const theme = THEME.current;
|
|
120
121
|
return <Row
|
|
121
122
|
size="control"
|
|
122
123
|
class={[
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ClassValue, Expression,
|
|
2
|
-
|
|
1
|
+
import { ClassValue, Expression, For, get, map, memo, optionalString, render, sig, StyleValue, View, watch } from "rvx";
|
|
2
|
+
import { uniqueId } from "rvx/id";
|
|
3
3
|
import { Action, createPassiveActionEvent, handleActionEvent, keyFor, startDelayedHoverOnMouseenter } from "../common/events.js";
|
|
4
4
|
import { THEME } from "../common/theme.js";
|
|
5
5
|
import { LAYER } from "./layer.js";
|
|
@@ -89,8 +89,8 @@ export function createDropdown(props: {
|
|
|
89
89
|
alignment: map(props.alignment, v => v ?? "start"),
|
|
90
90
|
foreignEvents: props.foreignEvents,
|
|
91
91
|
content: ({ popout, placement }) => {
|
|
92
|
-
const theme =
|
|
93
|
-
const layer =
|
|
92
|
+
const theme = THEME.current;
|
|
93
|
+
const layer = LAYER.current!;
|
|
94
94
|
|
|
95
95
|
const activeItem = sig<DropdownItem | undefined>(undefined);
|
|
96
96
|
const instances = new WeakMap<DropdownItem, {
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { Expression,
|
|
2
|
-
|
|
1
|
+
import { Expression, get } from "rvx";
|
|
3
2
|
import { THEME } from "../common/theme.js";
|
|
4
3
|
|
|
5
4
|
export function FlexSpace(props: {
|
|
6
5
|
grow?: Expression<number | undefined>;
|
|
7
6
|
}): unknown {
|
|
8
|
-
const theme =
|
|
7
|
+
const theme = THEME.current;
|
|
9
8
|
return <div
|
|
10
9
|
class={theme?.flex_space}
|
|
11
10
|
style={{
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ClassValue, createElement, Expression,
|
|
2
|
-
|
|
1
|
+
import { ClassValue, createElement, Expression, StyleValue } from "rvx";
|
|
3
2
|
import { THEME } from "../common/theme.js";
|
|
4
3
|
|
|
5
4
|
export type HeadingLevel = "1" | "2" | "3" | "4" | "5" | "6";
|
|
@@ -11,7 +10,7 @@ export function Heading(props: {
|
|
|
11
10
|
id?: Expression<string | undefined>;
|
|
12
11
|
children?: unknown;
|
|
13
12
|
}): unknown {
|
|
14
|
-
const theme =
|
|
13
|
+
const theme = THEME.current;
|
|
15
14
|
return createElement(`h${props.level}`, {
|
|
16
15
|
class: [
|
|
17
16
|
theme?.heading,
|
|
@@ -21,3 +20,11 @@ export function Heading(props: {
|
|
|
21
20
|
id: props.id,
|
|
22
21
|
}, props.children);
|
|
23
22
|
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Get the next nested heading level.
|
|
26
|
+
*/
|
|
27
|
+
export function getNestedHeadingLevel(level: HeadingLevel): HeadingLevel {
|
|
28
|
+
const l = Number(level) + 1;
|
|
29
|
+
return l > 6 ? "6" : String(l) as HeadingLevel;
|
|
30
|
+
}
|
package/src/components/label.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { ClassValue, Expression,
|
|
1
|
+
import { ClassValue, Expression, StyleValue } from "rvx";
|
|
2
2
|
|
|
3
3
|
import { THEME } from "../common/theme.js";
|
|
4
|
+
import { uniqueId } from "rvx/id";
|
|
4
5
|
|
|
5
6
|
export function Label(props: {
|
|
6
7
|
class?: ClassValue;
|
|
@@ -9,7 +10,7 @@ export function Label(props: {
|
|
|
9
10
|
id?: Expression<string | undefined>;
|
|
10
11
|
children?: unknown;
|
|
11
12
|
}): unknown {
|
|
12
|
-
const theme =
|
|
13
|
+
const theme = THEME.current;
|
|
13
14
|
return <label
|
|
14
15
|
class={[
|
|
15
16
|
theme?.label,
|