@zylem/ui 0.9.0 → 0.9.1
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/chunk-YJVLOHJL.js +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.js +1 -1
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.tsx +2 -0
- package/src/components/Button/Button.css.ts +85 -66
- package/src/components/Button/Button.tsx +9 -3
- package/src/components/Callout/Callout.css.ts +1 -1
- package/src/components/Console/Console.css.ts +1 -1
- package/src/components/FrameStrip/FrameStrip.css.ts +1 -0
- package/src/components/MenuButton/MenuButton.css.ts +49 -46
- package/src/components/MenuButton/MenuButton.tsx +16 -5
- package/src/components/Menubar/Menubar.css.ts +1 -1
- package/src/components/Mixer/Mixer.css.ts +2 -0
- package/src/components/NumberField/NumberField.css.ts +32 -26
- package/src/components/NumberField/NumberField.tsx +4 -2
- package/src/components/Progress/Progress.css.ts +1 -1
- package/src/components/Select/Select.css.ts +7 -1
- package/src/components/Select/Select.tsx +4 -1
- package/src/components/Slider/Slider.css.ts +1 -1
- package/src/components/SpriteSizePicker/SpriteSizePicker.css.ts +2 -0
- package/src/components/TimelineLanes/TimelineLanes.css.ts +1 -0
- package/src/components/TimelineTrack/TimelineTrack.css.ts +3 -2
- package/src/components/TransportBar/TransportBar.css.ts +5 -0
- package/src/components/WindowControls/WindowControls.css.ts +46 -63
- package/src/components/WindowControls/WindowControls.tsx +3 -2
- package/src/fonts.css +1 -1
- package/src/global/accordion.css.ts +6 -7
- package/src/global/editor-base.css.ts +9 -0
- package/src/sprinkles.css.ts +4 -1
- package/src/theme.css.ts +6 -0
- package/dist/chunk-V47CGFWX.js +0 -1
package/dist/styles.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-
|
|
1
|
+
import"./chunk-YJVLOHJL.js";
|
package/package.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Accordion as KAccordion } from '@kobalte/core';
|
|
2
|
+
import ChevronDown from 'lucide-solid/icons/chevron-down';
|
|
2
3
|
import { For } from 'solid-js';
|
|
3
4
|
import type { JSX } from 'solid-js';
|
|
4
5
|
import { headingTag, type HeadingLevel } from '../shared/Heading';
|
|
@@ -53,6 +54,7 @@ export function Accordion(props: AccordionProps) {
|
|
|
53
54
|
<KAccordion.Header as={headingTag(props.headingLevel ?? 3)} class="accordion-header">
|
|
54
55
|
<KAccordion.Trigger class="accordion-trigger">
|
|
55
56
|
{item.title}
|
|
57
|
+
<ChevronDown class="accordion-chevron" aria-hidden="true" />
|
|
56
58
|
</KAccordion.Trigger>
|
|
57
59
|
</KAccordion.Header>
|
|
58
60
|
<KAccordion.Content
|
|
@@ -9,119 +9,138 @@ import { vars } from '../../theme.css';
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
globalStyle('.zylem-button', {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
12
|
+
boxSizing: 'border-box',
|
|
13
|
+
display: 'inline-flex',
|
|
14
|
+
alignItems: 'center',
|
|
15
|
+
justifyContent: 'center',
|
|
16
|
+
gap: vars.spacing.xs,
|
|
17
|
+
minHeight: '28px',
|
|
18
|
+
padding: `0 ${vars.spacing.md}`,
|
|
19
|
+
cursor: 'pointer',
|
|
20
|
+
userSelect: 'none',
|
|
21
|
+
whiteSpace: 'nowrap',
|
|
22
|
+
borderRadius: vars.radii.button,
|
|
23
|
+
border: '1px solid rgba(150, 210, 255, 0.55)',
|
|
24
|
+
color: '#F4FAFF',
|
|
25
|
+
background: vars.material.buttonGlass,
|
|
26
|
+
boxShadow: vars.effects.shadowButton,
|
|
27
|
+
textShadow: '0 1px 1px rgba(0,0,0,0.72)',
|
|
28
|
+
fontFamily: vars.typography.fontFamily,
|
|
29
|
+
fontSize: vars.typography.fontSize,
|
|
30
|
+
fontWeight: 600,
|
|
31
|
+
transition: `transform ${vars.motion.fast} ${vars.motion.easeOut}, box-shadow ${vars.motion.fast} ${vars.motion.easeOut}, filter ${vars.motion.fast} ${vars.motion.easeOut}, background ${vars.motion.fast} ${vars.motion.easeOut}`,
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
globalStyle('.zylem-button:hover:not([disabled])', {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
background: vars.material.buttonGlassHover,
|
|
36
|
+
boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowPrimary}`,
|
|
37
|
+
transform: 'translateY(-1px)',
|
|
38
|
+
color: '#F4FAFF',
|
|
39
39
|
});
|
|
40
40
|
|
|
41
41
|
globalStyle('.zylem-button:active:not([disabled])', {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
transform: 'translateY(1px)',
|
|
43
|
+
filter: 'brightness(0.92)',
|
|
44
|
+
// CodePen-inspired press: compressed drop shadow + bright bottom rim flash.
|
|
45
|
+
boxShadow:
|
|
46
|
+
'inset 0 1px 0 rgba(255,255,255,0.22), inset 0 -1px 0 rgba(255,255,255,0.55), inset 0 2px 3px rgba(0,0,0,0.28), 0 1px 3px rgba(0,0,0,0.28)',
|
|
47
47
|
});
|
|
48
48
|
|
|
49
49
|
globalStyle('.zylem-button:focus-visible', {
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
outline: 'none',
|
|
51
|
+
boxShadow: `${vars.effects.shadowButton}, ${vars.effects.focusRing}`,
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
globalStyle('.zylem-button[disabled], .zylem-button[data-disabled]', {
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
opacity: 0.45,
|
|
56
|
+
cursor: 'not-allowed',
|
|
57
57
|
});
|
|
58
58
|
|
|
59
59
|
// Variants
|
|
60
60
|
|
|
61
61
|
globalStyle('.zylem-button[data-variant="primary"]', {
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
borderColor: 'rgba(178, 219, 255, 0.8)',
|
|
63
|
+
background: vars.material.buttonGlassHover,
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
globalStyle('.zylem-button[data-variant="primary"]:hover:not([disabled])', {
|
|
67
|
-
|
|
67
|
+
filter: 'brightness(1.08)',
|
|
68
68
|
});
|
|
69
69
|
|
|
70
70
|
globalStyle('.zylem-button[data-variant="active"]', {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
borderColor: 'rgba(20, 255, 60, 0.78)',
|
|
72
|
+
background: vars.material.buttonGlassActive,
|
|
73
|
+
boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowActive}`,
|
|
74
74
|
});
|
|
75
75
|
|
|
76
76
|
globalStyle('.zylem-button[data-variant="active"]:hover:not([disabled])', {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
background: vars.material.buttonGlassActive,
|
|
78
|
+
boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowActive}`,
|
|
79
|
+
filter: 'brightness(1.1)',
|
|
80
80
|
});
|
|
81
81
|
|
|
82
82
|
globalStyle('.zylem-button[data-variant="danger"]', {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
borderColor: 'rgba(255, 132, 114, 0.78)',
|
|
84
|
+
background: vars.material.buttonGlassDanger,
|
|
85
|
+
boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowDanger}`,
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
globalStyle('.zylem-button[data-variant="danger"]:hover:not([disabled])', {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
background: vars.material.buttonGlassDanger,
|
|
90
|
+
boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowDanger}`,
|
|
91
|
+
filter: 'brightness(1.1)',
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
globalStyle('.zylem-button[data-variant="ghost"]', {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
border: '1px solid rgba(97, 166, 232, 0.35)',
|
|
96
|
+
background: 'transparent',
|
|
97
|
+
boxShadow: 'none',
|
|
98
|
+
color: vars.colors.primary,
|
|
99
|
+
textShadow: 'none',
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
globalStyle('.zylem-button[data-variant="ghost"]:hover:not([disabled])', {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
background: 'rgba(97, 166, 232, 0.12)',
|
|
104
|
+
boxShadow: vars.effects.glowPrimary,
|
|
105
|
+
color: vars.colors.primary,
|
|
106
106
|
});
|
|
107
107
|
|
|
108
108
|
// Sizes
|
|
109
109
|
|
|
110
110
|
globalStyle('.zylem-button[data-size="sm"]', {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
minHeight: '22px',
|
|
112
|
+
padding: `0 ${vars.spacing.sm}`,
|
|
113
|
+
fontSize: `calc(${vars.typography.fontSize} - 2px)`,
|
|
114
114
|
});
|
|
115
115
|
|
|
116
116
|
globalStyle('.zylem-button[data-size="lg"]', {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
minHeight: '36px',
|
|
118
|
+
padding: `0 ${vars.spacing.lg}`,
|
|
119
|
+
fontSize: `calc(${vars.typography.fontSize} + 4px)`,
|
|
120
120
|
});
|
|
121
121
|
|
|
122
122
|
globalStyle('.zylem-button[data-size="icon"]', {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
minHeight: '24px',
|
|
124
|
+
minWidth: '28px',
|
|
125
|
+
padding: vars.spacing.xs,
|
|
126
|
+
borderRadius: vars.radii.control,
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
globalStyle('.zylem-button-icon', {
|
|
130
|
+
display: 'inline-flex',
|
|
131
|
+
alignItems: 'center',
|
|
132
|
+
justifyContent: 'center',
|
|
133
|
+
flexShrink: 0,
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
globalStyle('.zylem-button svg', {
|
|
137
|
+
width: '16px',
|
|
138
|
+
height: '16px',
|
|
139
|
+
flexShrink: 0,
|
|
140
|
+
stroke: 'currentColor',
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
globalStyle('.zylem-button[data-size="sm"] svg', {
|
|
144
|
+
width: '14px',
|
|
145
|
+
height: '14px',
|
|
127
146
|
});
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { splitProps } from 'solid-js';
|
|
1
|
+
import { Show, splitProps, type JSX } from 'solid-js';
|
|
3
2
|
|
|
4
3
|
export type ButtonVariant = 'default' | 'primary' | 'active' | 'danger' | 'ghost';
|
|
5
4
|
export type ButtonSize = 'sm' | 'md' | 'lg' | 'icon';
|
|
@@ -8,6 +7,8 @@ export interface ButtonProps
|
|
|
8
7
|
extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
9
8
|
variant?: ButtonVariant;
|
|
10
9
|
size?: ButtonSize;
|
|
10
|
+
/** Icon drawn before the label. Omitted, the button is label only. */
|
|
11
|
+
icon?: JSX.Element | undefined;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
/**
|
|
@@ -19,7 +20,7 @@ export interface ButtonProps
|
|
|
19
20
|
* `@zylem/ui/styles.css`), selected via `data-variant` / `data-size`.
|
|
20
21
|
*/
|
|
21
22
|
export function Button(props: ButtonProps) {
|
|
22
|
-
const [local, rest] = splitProps(props, ['variant', 'size', 'class', 'children']);
|
|
23
|
+
const [local, rest] = splitProps(props, ['variant', 'size', 'class', 'children', 'icon']);
|
|
23
24
|
return (
|
|
24
25
|
<button
|
|
25
26
|
type="button"
|
|
@@ -28,6 +29,11 @@ export function Button(props: ButtonProps) {
|
|
|
28
29
|
data-size={local.size ?? 'md'}
|
|
29
30
|
{...rest}
|
|
30
31
|
>
|
|
32
|
+
<Show when={local.icon}>
|
|
33
|
+
<span class="zylem-button-icon" aria-hidden="true">
|
|
34
|
+
{local.icon}
|
|
35
|
+
</span>
|
|
36
|
+
</Show>
|
|
31
37
|
{local.children}
|
|
32
38
|
</button>
|
|
33
39
|
);
|
|
@@ -35,7 +35,7 @@ globalStyle('.zylem-console', {
|
|
|
35
35
|
background: 'rgba(4, 12, 20, 0.72)',
|
|
36
36
|
boxShadow: vars.effects.shadowInset,
|
|
37
37
|
color: vars.colors.consoleText,
|
|
38
|
-
fontFamily:
|
|
38
|
+
fontFamily: vars.typography.fontFamilyMono,
|
|
39
39
|
fontSize: `calc(${vars.typography.fontSize} - 1px)`,
|
|
40
40
|
lineHeight: 1.45,
|
|
41
41
|
outline: 'none',
|
|
@@ -7,15 +7,15 @@ import { vars } from '../../theme.css';
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
globalStyle('.zylem-menu-button', {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
position: 'relative',
|
|
11
|
+
display: 'inline-flex',
|
|
12
|
+
alignItems: 'stretch',
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
globalStyle('.zylem-menu-button__face', {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
display: 'inline-flex',
|
|
17
|
+
alignItems: 'center',
|
|
18
|
+
justifyContent: 'center',
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
/*
|
|
@@ -24,23 +24,27 @@ globalStyle('.zylem-menu-button__face', {
|
|
|
24
24
|
* rhythm.
|
|
25
25
|
*/
|
|
26
26
|
globalStyle('.zylem-menu-button__chevron', {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
27
|
+
position: 'absolute',
|
|
28
|
+
right: '-5px',
|
|
29
|
+
bottom: '-5px',
|
|
30
|
+
display: 'flex',
|
|
31
|
+
alignItems: 'center',
|
|
32
|
+
justifyContent: 'center',
|
|
33
|
+
width: '18px',
|
|
34
|
+
height: '18px',
|
|
35
|
+
padding: 0,
|
|
36
|
+
color: vars.colors.text,
|
|
37
|
+
background: vars.colors.border,
|
|
38
|
+
border: `0.5px solid ${vars.colors.surface}`,
|
|
39
|
+
borderRadius: '50%',
|
|
40
|
+
cursor: 'pointer',
|
|
41
|
+
transition: `color ${vars.motion.fast} ${vars.motion.easeOut}`,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
globalStyle('.zylem-menu-button__chevron svg', {
|
|
45
|
+
width: '18px',
|
|
46
|
+
height: '18px',
|
|
47
|
+
stroke: 'currentColor',
|
|
44
48
|
});
|
|
45
49
|
|
|
46
50
|
/*
|
|
@@ -49,43 +53,42 @@ globalStyle('.zylem-menu-button__chevron', {
|
|
|
49
53
|
* control, and lets clicks through to the face beneath.
|
|
50
54
|
*/
|
|
51
55
|
globalStyle('.zylem-menu-button__chevron--static', {
|
|
52
|
-
|
|
56
|
+
pointerEvents: 'none',
|
|
53
57
|
});
|
|
54
58
|
|
|
55
59
|
globalStyle('.zylem-menu-button__chevron:hover:not([disabled])', {
|
|
56
|
-
|
|
57
|
-
borderColor: 'rgba(255, 255, 255, 0.4)',
|
|
60
|
+
color: '#fff',
|
|
58
61
|
});
|
|
59
62
|
|
|
60
63
|
globalStyle('.zylem-menu-button__chevron:focus-visible', {
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
outline: 'none',
|
|
65
|
+
boxShadow: vars.effects.focusRing,
|
|
63
66
|
});
|
|
64
67
|
|
|
65
68
|
globalStyle('.zylem-menu-button__chevron[disabled]', {
|
|
66
|
-
|
|
67
|
-
|
|
69
|
+
opacity: 0.45,
|
|
70
|
+
cursor: 'not-allowed',
|
|
68
71
|
});
|
|
69
72
|
|
|
70
73
|
globalStyle('.zylem-menu-button__panel', {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
74
|
+
zIndex: vars.layers.menu,
|
|
75
|
+
color: vars.colors.text,
|
|
76
|
+
fontFamily: vars.typography.fontFamily,
|
|
77
|
+
borderRadius: vars.radii.panel,
|
|
78
|
+
border: '1px solid rgba(97, 166, 232, 0.45)',
|
|
79
|
+
background: vars.material.glassPanelDark,
|
|
80
|
+
boxShadow: vars.effects.shadowPanel,
|
|
81
|
+
backdropFilter: `blur(${vars.effects.blurMd}) saturate(1.22)`,
|
|
82
|
+
outline: 'none',
|
|
83
|
+
'@supports': {
|
|
84
|
+
'not (backdrop-filter: blur(1px))': {
|
|
85
|
+
background: vars.colors.surface,
|
|
86
|
+
},
|
|
87
|
+
},
|
|
85
88
|
});
|
|
86
89
|
|
|
87
90
|
/** Icon glyphs supplied as inline SVG markup rather than components. */
|
|
88
91
|
globalStyle('.zylem-menu-button__face svg', {
|
|
89
|
-
|
|
90
|
-
|
|
92
|
+
width: '18px',
|
|
93
|
+
height: '18px',
|
|
91
94
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Popover as KPopover } from '@kobalte/core';
|
|
2
|
+
import CircleChevronDown from 'lucide-solid/icons/circle-chevron-down';
|
|
2
3
|
import { Show, createSignal, type JSX } from 'solid-js';
|
|
3
4
|
import { createDismissGuard, useLayer } from '../../layers';
|
|
4
5
|
import { Tooltip } from '../Tooltip/Tooltip';
|
|
@@ -40,9 +41,12 @@ export interface MenuButtonProps {
|
|
|
40
41
|
|
|
41
42
|
/**
|
|
42
43
|
* Shown in both modes, because a chevron means "this has a menu" and that is
|
|
43
|
-
* true whether or not the face carries its own action.
|
|
44
|
+
* true whether or not the face carries its own action. The circle is the icon's
|
|
45
|
+
* own stroke, so the badge does not draw a second plate behind it.
|
|
44
46
|
*/
|
|
45
|
-
|
|
47
|
+
function MenuChevron() {
|
|
48
|
+
return <CircleChevronDown aria-hidden="true" />;
|
|
49
|
+
}
|
|
46
50
|
|
|
47
51
|
/**
|
|
48
52
|
* A toolbar button that owns a menu, optionally split.
|
|
@@ -70,11 +74,18 @@ export function MenuButton(props: MenuButtonProps) {
|
|
|
70
74
|
const isSplit = () => props.onAction !== undefined;
|
|
71
75
|
const tooltipText = () =>
|
|
72
76
|
props.tooltip === null ? null : props.tooltip ?? props.label;
|
|
77
|
+
/** The menu takes one side of the button, so the label takes the other. */
|
|
78
|
+
const tooltipPlacement = () =>
|
|
79
|
+
(props.placement ?? 'bottom-start').startsWith('top') ? 'bottom' : 'top';
|
|
73
80
|
|
|
74
81
|
/** Wrap in a tooltip only when there is text for one. */
|
|
75
82
|
const described = (content: JSX.Element) => (
|
|
76
83
|
<Show when={tooltipText()} fallback={content} keyed>
|
|
77
|
-
{(text) =>
|
|
84
|
+
{(text) => (
|
|
85
|
+
<Tooltip content={text} placement={tooltipPlacement()}>
|
|
86
|
+
{content}
|
|
87
|
+
</Tooltip>
|
|
88
|
+
)}
|
|
78
89
|
</Show>
|
|
79
90
|
);
|
|
80
91
|
|
|
@@ -107,7 +118,7 @@ export function MenuButton(props: MenuButtonProps) {
|
|
|
107
118
|
class="zylem-menu-button__chevron zylem-menu-button__chevron--static"
|
|
108
119
|
aria-hidden="true"
|
|
109
120
|
>
|
|
110
|
-
|
|
121
|
+
<MenuChevron />
|
|
111
122
|
</span>
|
|
112
123
|
</KPopover.Trigger>,
|
|
113
124
|
)}
|
|
@@ -130,7 +141,7 @@ export function MenuButton(props: MenuButtonProps) {
|
|
|
130
141
|
aria-label={`${props.label} options`}
|
|
131
142
|
disabled={props.disabled}
|
|
132
143
|
>
|
|
133
|
-
<
|
|
144
|
+
<MenuChevron />
|
|
134
145
|
</KPopover.Trigger>
|
|
135
146
|
</Show>
|
|
136
147
|
|
|
@@ -33,7 +33,7 @@ globalStyle('.zylem-menubar-trigger', {
|
|
|
33
33
|
|
|
34
34
|
globalStyle('.zylem-menubar-trigger:hover', {
|
|
35
35
|
background: 'rgba(97, 166, 232, 0.12)',
|
|
36
|
-
color: vars.colors.
|
|
36
|
+
color: vars.colors.text,
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
globalStyle('.zylem-menubar-trigger[data-expanded]', {
|
|
@@ -73,6 +73,7 @@ globalStyle('.zylem-knob-label', {
|
|
|
73
73
|
});
|
|
74
74
|
|
|
75
75
|
globalStyle('.zylem-knob-value', {
|
|
76
|
+
fontFamily: vars.typography.fontFamilyMono,
|
|
76
77
|
fontSize: '10px',
|
|
77
78
|
fontVariantNumeric: 'tabular-nums',
|
|
78
79
|
color: vars.colors.text,
|
|
@@ -216,6 +217,7 @@ globalStyle('.zylem-mixer-meter-fill', {
|
|
|
216
217
|
});
|
|
217
218
|
|
|
218
219
|
globalStyle('.zylem-mixer-readout', {
|
|
220
|
+
fontFamily: vars.typography.fontFamilyMono,
|
|
219
221
|
fontSize: '10px',
|
|
220
222
|
fontVariantNumeric: 'tabular-nums',
|
|
221
223
|
color: vars.colors.textSecondary,
|
|
@@ -3,45 +3,51 @@ import { vars } from '../../theme.css';
|
|
|
3
3
|
import '../shared/field.css';
|
|
4
4
|
|
|
5
5
|
globalStyle('.zylem-numberfield-group', {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
display: 'inline-flex',
|
|
7
|
+
alignItems: 'stretch',
|
|
8
|
+
position: 'relative',
|
|
9
|
+
width: '100%',
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
globalStyle('.zylem-numberfield-input', {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
width: '100%',
|
|
14
|
+
height: '28px',
|
|
15
|
+
paddingRight: '26px',
|
|
16
|
+
fontFamily: vars.typography.fontFamilyMono,
|
|
17
|
+
fontVariantNumeric: 'tabular-nums',
|
|
17
18
|
});
|
|
18
19
|
|
|
19
20
|
globalStyle('.zylem-numberfield-stepper', {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
transition: `filter ${vars.motion.fast} ${vars.motion.easeOut}`,
|
|
21
|
+
position: 'absolute',
|
|
22
|
+
right: '3px',
|
|
23
|
+
width: '20px',
|
|
24
|
+
height: '9px',
|
|
25
|
+
display: 'flex',
|
|
26
|
+
alignItems: 'center',
|
|
27
|
+
justifyContent: 'center',
|
|
28
|
+
cursor: 'pointer',
|
|
29
|
+
border: '0.5px solid rgba(150, 210, 255, 0.4)',
|
|
30
|
+
borderRadius: '4px',
|
|
31
|
+
background: vars.material.buttonGlass,
|
|
32
|
+
color: '#F4FAFF',
|
|
33
|
+
lineHeight: 1,
|
|
34
|
+
padding: 0,
|
|
35
|
+
transition: `filter ${vars.motion.fast} ${vars.motion.easeOut}`,
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
globalStyle('.zylem-numberfield-stepper:hover', {
|
|
39
|
-
|
|
39
|
+
filter: 'brightness(1.25)',
|
|
40
40
|
});
|
|
41
41
|
|
|
42
42
|
globalStyle('.zylem-numberfield-stepper:active', {
|
|
43
|
-
|
|
43
|
+
filter: 'brightness(0.85)',
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
globalStyle('.zylem-numberfield-stepper--up', { top: '3px' });
|
|
47
47
|
globalStyle('.zylem-numberfield-stepper--down', { bottom: '3px' });
|
|
48
|
+
|
|
49
|
+
globalStyle('.zylem-numberfield-stepper svg', {
|
|
50
|
+
width: '10px',
|
|
51
|
+
height: '8px',
|
|
52
|
+
stroke: 'currentColor',
|
|
53
|
+
});
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { NumberField as KNumberField } from '@kobalte/core';
|
|
2
|
+
import ChevronDown from 'lucide-solid/icons/chevron-down';
|
|
3
|
+
import ChevronUp from 'lucide-solid/icons/chevron-up';
|
|
2
4
|
import { Show } from 'solid-js';
|
|
3
5
|
|
|
4
6
|
export interface NumberFieldProps {
|
|
@@ -54,13 +56,13 @@ export function NumberField(props: NumberFieldProps) {
|
|
|
54
56
|
class="zylem-numberfield-stepper zylem-numberfield-stepper--up"
|
|
55
57
|
aria-label="Increment"
|
|
56
58
|
>
|
|
57
|
-
<
|
|
59
|
+
<ChevronUp aria-hidden="true" />
|
|
58
60
|
</KNumberField.IncrementTrigger>
|
|
59
61
|
<KNumberField.DecrementTrigger
|
|
60
62
|
class="zylem-numberfield-stepper zylem-numberfield-stepper--down"
|
|
61
63
|
aria-label="Decrement"
|
|
62
64
|
>
|
|
63
|
-
<
|
|
65
|
+
<ChevronDown aria-hidden="true" />
|
|
64
66
|
</KNumberField.DecrementTrigger>
|
|
65
67
|
</div>
|
|
66
68
|
<Show when={props.error}>
|
|
@@ -25,7 +25,7 @@ globalStyle('.zylem-progress-label', {
|
|
|
25
25
|
globalStyle('.zylem-progress-value', {
|
|
26
26
|
fontSize: `calc(${vars.typography.fontSize} - 2px)`,
|
|
27
27
|
color: vars.colors.primary,
|
|
28
|
-
fontFamily: vars.typography.
|
|
28
|
+
fontFamily: vars.typography.fontFamilyMono,
|
|
29
29
|
fontVariantNumeric: 'tabular-nums',
|
|
30
30
|
});
|
|
31
31
|
|
|
@@ -20,12 +20,18 @@ globalStyle('.zylem-select-value', {
|
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
globalStyle('.zylem-select-icon', {
|
|
23
|
+
display: 'flex',
|
|
23
24
|
flexShrink: 0,
|
|
24
|
-
fontSize: '9px',
|
|
25
25
|
color: vars.colors.primary,
|
|
26
26
|
transition: `transform ${vars.motion.fast} ${vars.motion.easeOut}`,
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
+
globalStyle('.zylem-select-icon svg', {
|
|
30
|
+
width: '14px',
|
|
31
|
+
height: '14px',
|
|
32
|
+
stroke: 'currentColor',
|
|
33
|
+
});
|
|
34
|
+
|
|
29
35
|
globalStyle('.zylem-select-trigger[data-expanded] .zylem-select-icon', {
|
|
30
36
|
transform: 'rotate(180deg)',
|
|
31
37
|
});
|