@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.
Files changed (35) hide show
  1. package/dist/chunk-YJVLOHJL.js +1 -0
  2. package/dist/index.css +1 -1
  3. package/dist/index.d.ts +7 -1
  4. package/dist/index.js +1 -1
  5. package/dist/styles.css +1 -1
  6. package/dist/styles.js +1 -1
  7. package/package.json +1 -1
  8. package/src/components/Accordion/Accordion.tsx +2 -0
  9. package/src/components/Button/Button.css.ts +85 -66
  10. package/src/components/Button/Button.tsx +9 -3
  11. package/src/components/Callout/Callout.css.ts +1 -1
  12. package/src/components/Console/Console.css.ts +1 -1
  13. package/src/components/FrameStrip/FrameStrip.css.ts +1 -0
  14. package/src/components/MenuButton/MenuButton.css.ts +49 -46
  15. package/src/components/MenuButton/MenuButton.tsx +16 -5
  16. package/src/components/Menubar/Menubar.css.ts +1 -1
  17. package/src/components/Mixer/Mixer.css.ts +2 -0
  18. package/src/components/NumberField/NumberField.css.ts +32 -26
  19. package/src/components/NumberField/NumberField.tsx +4 -2
  20. package/src/components/Progress/Progress.css.ts +1 -1
  21. package/src/components/Select/Select.css.ts +7 -1
  22. package/src/components/Select/Select.tsx +4 -1
  23. package/src/components/Slider/Slider.css.ts +1 -1
  24. package/src/components/SpriteSizePicker/SpriteSizePicker.css.ts +2 -0
  25. package/src/components/TimelineLanes/TimelineLanes.css.ts +1 -0
  26. package/src/components/TimelineTrack/TimelineTrack.css.ts +3 -2
  27. package/src/components/TransportBar/TransportBar.css.ts +5 -0
  28. package/src/components/WindowControls/WindowControls.css.ts +46 -63
  29. package/src/components/WindowControls/WindowControls.tsx +3 -2
  30. package/src/fonts.css +1 -1
  31. package/src/global/accordion.css.ts +6 -7
  32. package/src/global/editor-base.css.ts +9 -0
  33. package/src/sprinkles.css.ts +4 -1
  34. package/src/theme.css.ts +6 -0
  35. package/dist/chunk-V47CGFWX.js +0 -1
package/dist/styles.js CHANGED
@@ -1 +1 @@
1
- import"./chunk-V47CGFWX.js";
1
+ import"./chunk-YJVLOHJL.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zylem/ui",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Design tokens, global styles, and Solid components for Zylem, built with vanilla-extract",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -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
- 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}`,
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
- background: vars.material.buttonGlassHover,
36
- boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowPrimary}`,
37
- transform: 'translateY(-1px)',
38
- color: '#F4FAFF',
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
- 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)',
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
- outline: 'none',
51
- boxShadow: `${vars.effects.shadowButton}, ${vars.effects.focusRing}`,
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
- opacity: 0.45,
56
- cursor: 'not-allowed',
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
- borderColor: 'rgba(178, 219, 255, 0.8)',
63
- background: vars.material.buttonGlassHover,
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
- filter: 'brightness(1.08)',
67
+ filter: 'brightness(1.08)',
68
68
  });
69
69
 
70
70
  globalStyle('.zylem-button[data-variant="active"]', {
71
- borderColor: 'rgba(20, 255, 60, 0.78)',
72
- background: vars.material.buttonGlassActive,
73
- boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowActive}`,
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
- background: vars.material.buttonGlassActive,
78
- boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowActive}`,
79
- filter: 'brightness(1.1)',
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
- borderColor: 'rgba(255, 132, 114, 0.78)',
84
- background: vars.material.buttonGlassDanger,
85
- boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowDanger}`,
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
- background: vars.material.buttonGlassDanger,
90
- boxShadow: `${vars.effects.shadowButton}, ${vars.effects.glowDanger}`,
91
- filter: 'brightness(1.1)',
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
- border: '1px solid rgba(97, 166, 232, 0.35)',
96
- background: 'transparent',
97
- boxShadow: 'none',
98
- color: vars.colors.primary,
99
- textShadow: 'none',
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
- background: 'rgba(97, 166, 232, 0.12)',
104
- boxShadow: vars.effects.glowPrimary,
105
- color: vars.colors.primary,
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
- minHeight: '22px',
112
- padding: `0 ${vars.spacing.sm}`,
113
- fontSize: `calc(${vars.typography.fontSize} - 2px)`,
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
- minHeight: '36px',
118
- padding: `0 ${vars.spacing.lg}`,
119
- fontSize: `calc(${vars.typography.fontSize} + 1px)`,
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
- minHeight: '28px',
124
- minWidth: '28px',
125
- padding: vars.spacing.xs,
126
- borderRadius: vars.radii.control,
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 { JSX } from 'solid-js';
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
  );
@@ -22,7 +22,7 @@ globalStyle('.zylem-callout-title', {
22
22
  });
23
23
 
24
24
  globalStyle('.zylem-callout-message code', {
25
- fontFamily: "'Courier New', monospace",
25
+ fontFamily: vars.typography.fontFamilyMono,
26
26
  fontSize: '0.95em',
27
27
  });
28
28
 
@@ -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: "'Courier New', monospace",
38
+ fontFamily: vars.typography.fontFamilyMono,
39
39
  fontSize: `calc(${vars.typography.fontSize} - 1px)`,
40
40
  lineHeight: 1.45,
41
41
  outline: 'none',
@@ -101,6 +101,7 @@ globalStyle('.zylem-frame-thumb-index', {
101
101
  alignItems: 'center',
102
102
  justifyContent: 'center',
103
103
  flex: '1 1 auto',
104
+ fontFamily: vars.typography.fontFamilyMono,
104
105
  fontSize: '11px',
105
106
  fontWeight: 600,
106
107
  fontVariantNumeric: 'tabular-nums',
@@ -7,15 +7,15 @@ import { vars } from '../../theme.css';
7
7
  */
8
8
 
9
9
  globalStyle('.zylem-menu-button', {
10
- position: 'relative',
11
- display: 'inline-flex',
12
- alignItems: 'stretch',
10
+ position: 'relative',
11
+ display: 'inline-flex',
12
+ alignItems: 'stretch',
13
13
  });
14
14
 
15
15
  globalStyle('.zylem-menu-button__face', {
16
- display: 'inline-flex',
17
- alignItems: 'center',
18
- justifyContent: 'center',
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
- position: 'absolute',
28
- right: '-2px',
29
- bottom: '-2px',
30
- display: 'flex',
31
- alignItems: 'center',
32
- justifyContent: 'center',
33
- width: '14px',
34
- height: '14px',
35
- padding: 0,
36
- fontSize: '9px',
37
- lineHeight: 1,
38
- color: 'rgba(255, 255, 255, 0.75)',
39
- background: 'rgba(20, 24, 32, 0.92)',
40
- border: '1px solid rgba(255, 255, 255, 0.16)',
41
- borderRadius: vars.radii.control,
42
- cursor: 'pointer',
43
- transition: `color ${vars.motion.fast} ${vars.motion.easeOut}, border-color ${vars.motion.fast} ${vars.motion.easeOut}`,
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
- pointerEvents: 'none',
56
+ pointerEvents: 'none',
53
57
  });
54
58
 
55
59
  globalStyle('.zylem-menu-button__chevron:hover:not([disabled])', {
56
- color: '#fff',
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
- outline: 'none',
62
- boxShadow: vars.effects.focusRing,
64
+ outline: 'none',
65
+ boxShadow: vars.effects.focusRing,
63
66
  });
64
67
 
65
68
  globalStyle('.zylem-menu-button__chevron[disabled]', {
66
- opacity: 0.45,
67
- cursor: 'not-allowed',
69
+ opacity: 0.45,
70
+ cursor: 'not-allowed',
68
71
  });
69
72
 
70
73
  globalStyle('.zylem-menu-button__panel', {
71
- zIndex: vars.layers.menu,
72
- color: vars.colors.text,
73
- fontFamily: vars.typography.fontFamily,
74
- borderRadius: vars.radii.panel,
75
- border: '1px solid rgba(97, 166, 232, 0.45)',
76
- background: vars.material.glassPanelDark,
77
- boxShadow: vars.effects.shadowPanel,
78
- backdropFilter: `blur(${vars.effects.blurMd}) saturate(1.22)`,
79
- outline: 'none',
80
- '@supports': {
81
- 'not (backdrop-filter: blur(1px))': {
82
- background: vars.colors.surface,
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
- width: '18px',
90
- height: '18px',
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
- const CHEVRON = '▾';
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) => <Tooltip content={text}>{content}</Tooltip>}
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
- {CHEVRON}
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
- <span aria-hidden="true">{CHEVRON}</span>
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.primaryHover,
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
- display: 'inline-flex',
7
- alignItems: 'stretch',
8
- position: 'relative',
9
- width: '100%',
6
+ display: 'inline-flex',
7
+ alignItems: 'stretch',
8
+ position: 'relative',
9
+ width: '100%',
10
10
  });
11
11
 
12
12
  globalStyle('.zylem-numberfield-input', {
13
- width: '100%',
14
- height: '28px',
15
- paddingRight: '26px',
16
- fontVariantNumeric: 'tabular-nums',
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
- position: 'absolute',
21
- right: '3px',
22
- width: '20px',
23
- height: '11px',
24
- display: 'flex',
25
- alignItems: 'center',
26
- justifyContent: 'center',
27
- cursor: 'pointer',
28
- border: '1px solid rgba(150, 210, 255, 0.4)',
29
- borderRadius: '4px',
30
- background: vars.material.buttonGlass,
31
- color: '#F4FAFF',
32
- fontSize: '8px',
33
- lineHeight: 1,
34
- padding: 0,
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
- filter: 'brightness(1.25)',
39
+ filter: 'brightness(1.25)',
40
40
  });
41
41
 
42
42
  globalStyle('.zylem-numberfield-stepper:active', {
43
- filter: 'brightness(0.85)',
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
- <span aria-hidden="true">▲</span>
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
- <span aria-hidden="true">▼</span>
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.fontFamily,
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
  });