@a-type/ui 2.7.0 → 2.7.2
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/cjs/colors.stories.d.ts +2 -2
- package/dist/cjs/colors.stories.js +2 -2
- package/dist/cjs/colors.stories.js.map +1 -1
- package/dist/cjs/components/button/Button.js +39 -20
- package/dist/cjs/components/button/Button.js.map +1 -1
- package/dist/cjs/components/button/Button.stories.d.ts +1 -0
- package/dist/cjs/components/button/Button.stories.js +6 -1
- package/dist/cjs/components/button/Button.stories.js.map +1 -1
- package/dist/cjs/components/button/classes.js +1 -1
- package/dist/cjs/components/button/classes.js.map +1 -1
- package/dist/cjs/components/icon/Icon.js +1 -1
- package/dist/cjs/components/icon/Icon.js.map +1 -1
- package/dist/cjs/components/navBar/NavBar.d.ts +2 -2
- package/dist/cjs/components/navBar/NavBar.js +5 -7
- package/dist/cjs/components/navBar/NavBar.js.map +1 -1
- package/dist/cjs/components/select/Select.d.ts +1 -1
- package/dist/cjs/components/select/Select.js +6 -5
- package/dist/cjs/components/select/Select.js.map +1 -1
- package/dist/cjs/uno/colors.js +3 -3
- package/dist/cjs/uno/colors.js.map +1 -1
- package/dist/cjs/uno/shadows.js +3 -3
- package/dist/cjs/uno/shadows.js.map +1 -1
- package/dist/cjs/uno/uno.preset.js +7 -3
- package/dist/cjs/uno/uno.preset.js.map +1 -1
- package/dist/css/main.css +106 -98
- package/dist/esm/colors.stories.d.ts +2 -2
- package/dist/esm/colors.stories.js +2 -2
- package/dist/esm/colors.stories.js.map +1 -1
- package/dist/esm/components/button/Button.js +7 -21
- package/dist/esm/components/button/Button.js.map +1 -1
- package/dist/esm/components/button/Button.stories.d.ts +1 -0
- package/dist/esm/components/button/Button.stories.js +5 -0
- package/dist/esm/components/button/Button.stories.js.map +1 -1
- package/dist/esm/components/button/classes.js +1 -1
- package/dist/esm/components/button/classes.js.map +1 -1
- package/dist/esm/components/icon/Icon.js +1 -1
- package/dist/esm/components/icon/Icon.js.map +1 -1
- package/dist/esm/components/navBar/NavBar.d.ts +2 -2
- package/dist/esm/components/navBar/NavBar.js +5 -7
- package/dist/esm/components/navBar/NavBar.js.map +1 -1
- package/dist/esm/components/select/Select.d.ts +1 -1
- package/dist/esm/components/select/Select.js +2 -1
- package/dist/esm/components/select/Select.js.map +1 -1
- package/dist/esm/uno/colors.js +3 -3
- package/dist/esm/uno/colors.js.map +1 -1
- package/dist/esm/uno/shadows.js +3 -3
- package/dist/esm/uno/shadows.js.map +1 -1
- package/dist/esm/uno/uno.preset.js +7 -3
- package/dist/esm/uno/uno.preset.js.map +1 -1
- package/package.json +3 -1
- package/src/colors.stories.tsx +2 -2
- package/src/components/button/Button.stories.tsx +18 -0
- package/src/components/button/Button.tsx +13 -41
- package/src/components/button/classes.tsx +1 -1
- package/src/components/icon/Icon.tsx +1 -1
- package/src/components/navBar/NavBar.tsx +8 -10
- package/src/components/select/Select.tsx +2 -1
- package/src/uno/colors.ts +3 -3
- package/src/uno/shadows.ts +3 -3
- package/src/uno/uno.preset.ts +7 -3
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import { Slot } from '@radix-ui/react-slot';
|
|
2
|
-
import classNames from 'clsx';
|
|
2
|
+
import classNames, { clsx } from 'clsx';
|
|
3
3
|
import { AnimatePresence, motion } from 'motion/react';
|
|
4
|
-
import {
|
|
5
|
-
ButtonHTMLAttributes,
|
|
6
|
-
Children,
|
|
7
|
-
memo,
|
|
8
|
-
Ref,
|
|
9
|
-
useCallback,
|
|
10
|
-
useState,
|
|
11
|
-
} from 'react';
|
|
4
|
+
import { ButtonHTMLAttributes, memo, Ref, useCallback, useState } from 'react';
|
|
12
5
|
import { withClassName } from '../../hooks.js';
|
|
13
6
|
import useMergedRef from '../../hooks/useMergedRef.js';
|
|
14
7
|
import { IconLoadingProvider } from '../icon/IconLoadingContext.js';
|
|
@@ -97,45 +90,21 @@ export function ButtonRoot({
|
|
|
97
90
|
return <Comp {...buttonProps}>{children}</Comp>;
|
|
98
91
|
}
|
|
99
92
|
|
|
100
|
-
// wrap and inspect children
|
|
101
|
-
let hasLabel = false;
|
|
102
|
-
let hasIcon = false;
|
|
103
|
-
const wrappedChildren = Children.toArray(children).map((child, index) => {
|
|
104
|
-
if (child && typeof child === 'object' && 'type' in child) {
|
|
105
|
-
const isIcon = child.type === Icon || child.type;
|
|
106
|
-
if (isIcon) {
|
|
107
|
-
hasIcon = true;
|
|
108
|
-
return child; // return icon as is
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
hasLabel = true; // mark that we have a label
|
|
113
|
-
|
|
114
|
-
if ((!!child && typeof child === 'string') || typeof child === 'number') {
|
|
115
|
-
return (
|
|
116
|
-
<span key={`text-${index}`} data-auto-wrapped-label className="flex">
|
|
117
|
-
{child}
|
|
118
|
-
</span>
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
return child;
|
|
122
|
-
});
|
|
123
|
-
|
|
124
93
|
return (
|
|
125
94
|
<IconLoadingProvider value={isLoading}>
|
|
126
|
-
<Comp
|
|
127
|
-
{...buttonProps}
|
|
128
|
-
data-has-icon={String(hasIcon || isLoading)}
|
|
129
|
-
data-has-label={String(hasLabel)}
|
|
130
|
-
>
|
|
95
|
+
<Comp {...buttonProps}>
|
|
131
96
|
<AnimatePresence>
|
|
132
|
-
{isLoading &&
|
|
97
|
+
{isLoading && (
|
|
133
98
|
<motion.div
|
|
134
99
|
key="spinner"
|
|
135
100
|
initial={{ width: 0, marginLeft: '-0.5rem' }}
|
|
136
101
|
animate={{ width: 'auto', marginLeft: 0 }}
|
|
137
102
|
exit={{ width: 0, marginLeft: '-0.5rem' }}
|
|
138
|
-
className=
|
|
103
|
+
className={clsx(
|
|
104
|
+
'flex-shrink-0 inline-block overflow-hidden my-auto flex',
|
|
105
|
+
'[[data-has-icon=true]>&]:hidden',
|
|
106
|
+
)}
|
|
107
|
+
data-default-loader
|
|
139
108
|
>
|
|
140
109
|
<Spinner size={15} className="inline-block w-1em h-1em" />
|
|
141
110
|
</motion.div>
|
|
@@ -146,7 +115,7 @@ export function ButtonRoot({
|
|
|
146
115
|
toggleMode === 'color-and-indicator') && (
|
|
147
116
|
<ButtonToggleIndicator value={toggled} />
|
|
148
117
|
)}
|
|
149
|
-
{
|
|
118
|
+
{children}
|
|
150
119
|
</Comp>
|
|
151
120
|
</IconLoadingProvider>
|
|
152
121
|
);
|
|
@@ -222,6 +191,9 @@ function applyPartAttributes(button: HTMLButtonElement) {
|
|
|
222
191
|
registry.label++;
|
|
223
192
|
}
|
|
224
193
|
});
|
|
194
|
+
if (button.textContent) {
|
|
195
|
+
registry.label++;
|
|
196
|
+
}
|
|
225
197
|
button.setAttribute('data-has-icon', String(registry.icon > 0));
|
|
226
198
|
button.setAttribute('data-has-label', String(registry.label > 0));
|
|
227
199
|
button.setAttribute('data-icon-count', String(registry.icon));
|
|
@@ -46,7 +46,7 @@ export function getButtonClassName({
|
|
|
46
46
|
const colors = {
|
|
47
47
|
primary: `layer-variants:[&.btn-color-primary]:([--bg:var(--color-primary)] shadow-sm color-black border-primary-dark)`,
|
|
48
48
|
accent: `layer-variants:[&.btn-color-accent]:([--bg-neutral:var(--color-accent-wash)] [--bg:var(--color-accent-light)] shadow-sm color-black border-accent-dark)`,
|
|
49
|
-
default: `layer-variants:[&.btn-color-default]:([--bg-neutral:var(--color-white)] [--bg:var(--color-gray)] shadow-sm color-black border-gray-dark focus-visible:bg-lighten-1 hover:bg-lighten-1)`,
|
|
49
|
+
default: `layer-variants:[&.btn-color-default]:([--bg-neutral:var(--color-white)] [--bg:var(--color-gray)] bg-lighten-1 shadow-sm color-black border-gray-dark focus-visible:bg-lighten-1 hover:bg-lighten-1)`,
|
|
50
50
|
ghost: `layer-variants:[&.btn-color-ghost]:([--bg-neutral:transparent] [--bg:oklch(from_var(--color-gray)_l_c_h/50%)] color-dark-blend)`,
|
|
51
51
|
destructive: `layer-variants:[&.btn-color-destructive]:([--bg:var(--color-attention)] shadow-sm border-attention-dark color-black)`,
|
|
52
52
|
ghostDestructive: `layer-variants:[&.btn-color-ghostDestructive]:([--bg-neutral:transparent] [--bg:var(--color-attention-light)] color-attention-dark hover:(color-black) focus-visible:(color-black))`,
|
|
@@ -8,9 +8,9 @@ export const navBarItemClass = classNames(
|
|
|
8
8
|
'layer-components:(flex flex-col items-center justify-center whitespace-nowrap py-1 px-3 bg-transparent rounded-sm border-none cursor-pointer text-sm transition-colors h-full gap-6px relative color-black select-none)',
|
|
9
9
|
'layer-components:active:bg-darken-2',
|
|
10
10
|
'layer-components:hover:bg-darken-1',
|
|
11
|
-
'layer-components:focus-visible:(outline-none bg-darken-2)',
|
|
12
|
-
'layer-components:[&[data-active=true]]:(bg-
|
|
13
|
-
'layer-components:([--
|
|
11
|
+
'layer-components:focus-visible:(outline-none bg-darken-2 ring-1 ring-primary)',
|
|
12
|
+
'layer-components:[&[data-active=true]]:(bg-primary-light/50 color-lighten-2 color-black)',
|
|
13
|
+
'layer-components:([--fill:var(--color-primary)])',
|
|
14
14
|
'layer-responsive:md:(flex-row-reverse h-auto justify-start gap-2 overflow-visible active:bg-darken-2)',
|
|
15
15
|
);
|
|
16
16
|
|
|
@@ -30,9 +30,9 @@ export const NavBarItem = function NavBarItem({
|
|
|
30
30
|
color,
|
|
31
31
|
...rest
|
|
32
32
|
}: NavBarItemProps & {
|
|
33
|
-
ref?: React.Ref<
|
|
33
|
+
ref?: React.Ref<HTMLButtonElement>;
|
|
34
34
|
}) {
|
|
35
|
-
const Comp = asChild ? Slot : '
|
|
35
|
+
const Comp = asChild ? Slot : 'button';
|
|
36
36
|
|
|
37
37
|
return (
|
|
38
38
|
<Comp
|
|
@@ -40,11 +40,9 @@ export const NavBarItem = function NavBarItem({
|
|
|
40
40
|
className={classNames(
|
|
41
41
|
navBarItemClass,
|
|
42
42
|
color === 'neutral' && [
|
|
43
|
-
'layer-variants:active:bg-gray
|
|
44
|
-
'layer-variants:
|
|
45
|
-
'layer-variants:focus-visible:
|
|
46
|
-
'layer-variants:[&[data-active=true]]:(bg-gray-dark-blend color-black)',
|
|
47
|
-
'layer-variants:([--bg:var(--color-gray-blend)] [--fill:var(--color-gray)])',
|
|
43
|
+
'layer-variants:[&[data-active=true]]:(bg-gray/30 color-black)',
|
|
44
|
+
'layer-variants:([--fill:var(--color-gray)])',
|
|
45
|
+
'layer-variants:focus-visible:ring-gray',
|
|
48
46
|
],
|
|
49
47
|
className,
|
|
50
48
|
)}
|
|
@@ -18,7 +18,8 @@ import {
|
|
|
18
18
|
} from 'react';
|
|
19
19
|
import { withClassName } from '../../hooks/withClassName.js';
|
|
20
20
|
import { BoxContext } from '../box/Box.js';
|
|
21
|
-
import { Button, ButtonProps
|
|
21
|
+
import { Button, ButtonProps } from '../button/Button.js';
|
|
22
|
+
import { getButtonClassName } from '../button/classes.js';
|
|
22
23
|
import { Icon } from '../icon/index.js';
|
|
23
24
|
|
|
24
25
|
export const SelectItem = ({
|
package/src/uno/colors.ts
CHANGED
|
@@ -6,7 +6,7 @@ export const colorConstants = `
|
|
|
6
6
|
`;
|
|
7
7
|
|
|
8
8
|
const lightness = {
|
|
9
|
-
wash: `calc(1 + 0.
|
|
9
|
+
wash: `calc(1 + (0.1 + 0.35 * var(--dyn-mode-dark)) * var(--dyn-mode-mult, 1))`,
|
|
10
10
|
light: `calc(1 + 0.25 * var(--dyn-mode-mult, 1))`,
|
|
11
11
|
dark: `calc(1 - 0.25 * var(--dyn-mode-mult, 1))`,
|
|
12
12
|
ink: `calc(1 - 0.45 * var(--dyn-mode-mult, 1))`,
|
|
@@ -27,7 +27,7 @@ export const dynamicThemeComputedColors = (name: string) => {
|
|
|
27
27
|
--color-${name}-ink: oklch(from var(--color-${name}) calc(l * ${lightness.ink}) calc(var(--dyn-${name}-sat-mult) * (c * var(--dyn-saturation-x-ink, 1) + 0.01)) ${hue.ink});
|
|
28
28
|
|
|
29
29
|
--color-${name}-gray: oklch(from var(--color-${name}) l calc(c * 0.1 * var(--global-saturation, 1)) h);
|
|
30
|
-
--color-${name}-gray-wash: oklch(from var(--color-${name}-gray) calc(l * ${lightness.wash}) calc(c * 0.9) ${hue.wash});
|
|
30
|
+
--color-${name}-gray-wash: oklch(from var(--color-${name}-gray) calc(l * ${lightness.wash} * 1.1) calc(c * 0.9) ${hue.wash});
|
|
31
31
|
--color-${name}-gray-light: oklch(from var(--color-${name}-gray) calc(l * ${lightness.light}) c ${hue.light});
|
|
32
32
|
--color-${name}-gray-dark: oklch(from var(--color-${name}-gray) calc(l * ${lightness.dark}) c ${hue.dark});
|
|
33
33
|
--color-${name}-gray-ink: oklch(from var(--color-${name}-gray) calc(l * ${lightness.ink}) c ${hue.ink});
|
|
@@ -46,7 +46,7 @@ ${dynamicThemeComputedColors('accent')}
|
|
|
46
46
|
|
|
47
47
|
--color-wash: var(--color-gray-wash);
|
|
48
48
|
--palette-black: var(--color-gray-ink);
|
|
49
|
-
--palette-white: oklch(from var(--color-wash) calc(
|
|
49
|
+
--palette-white: oklch(from var(--color-wash) calc(1 * var(--dyn-mode-light,1)) 0.001 h);
|
|
50
50
|
/* A dark-mode only contrast color */
|
|
51
51
|
--color-dark-mode-contrast: oklch(from var(--color-gray-ink) l c h / calc(100% * var(--dyn-source-mode-adjust, 0)));
|
|
52
52
|
`;
|
package/src/uno/shadows.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export function getShadows(hard = false) {
|
|
2
|
-
const opacity1 = `calc(var(--un-shadow-opacity,0.1)*(1 + var(--global-shadow-spread,1) * 0.5)*2)`;
|
|
3
|
-
const opacity2 = `calc(var(--un-shadow-opacity,0.1)*(1 + var(--global-shadow-spread,1) * 0.5))`;
|
|
4
|
-
const opacity3 = `calc(var(--un-shadow-opacity,0.1)*(1 + var(--global-shadow-spread,1) * 0.5)/2)`;
|
|
2
|
+
const opacity1 = `calc(var(--un-shadow-opacity,0.1)*(1 + var(--global-shadow-spread,1) * 0.5) * 2 * (1 + var(--dyn-source-mode-adjust, 0)))`;
|
|
3
|
+
const opacity2 = `calc(var(--un-shadow-opacity,0.1)*(1 + var(--global-shadow-spread,1) * 0.5) * (1 + var(--dyn-source-mode-adjust, 0)))`;
|
|
4
|
+
const opacity3 = `calc(var(--un-shadow-opacity,0.1)*(1 + var(--global-shadow-spread,1) * 0.5) / 2 * (1 + var(--dyn-source-mode-adjust, 0)))`;
|
|
5
5
|
return {
|
|
6
6
|
sm: `var(--un-shadow-inset) 0 calc(0px * var(--v-shadow-y-mult,1)) calc(1px * var(--global-shadow-spread,1)) 0 rgb(from var(--un-shadow-color) r g b / ${opacity1}),
|
|
7
7
|
var(--un-shadow-inset) 0 calc(1px * var(--v-shadow-y-mult,1)) calc(2px * var(--global-shadow-spread,1)) 0 rgb(from var(--un-shadow-color) r g b / ${opacity1})`,
|
package/src/uno/uno.preset.ts
CHANGED
|
@@ -646,6 +646,8 @@ export default function presetAtype({
|
|
|
646
646
|
--dyn-mode-sign: 1;
|
|
647
647
|
--dyn-source-mode-adjust: 0;
|
|
648
648
|
--dyn-mode-lighten-mult: 1;
|
|
649
|
+
--dyn-mode-light: 1;
|
|
650
|
+
--dyn-mode-dark: 0;
|
|
649
651
|
--color-dark-blend: var(--palette-dark-blend);
|
|
650
652
|
--color-light-blend: var(--palette-light-blend);
|
|
651
653
|
--color-dark-blend-2: var(--palette-dark-blend-2);
|
|
@@ -673,10 +675,12 @@ export default function presetAtype({
|
|
|
673
675
|
const darkMode = `
|
|
674
676
|
--wash-saturation-tweak: ${darkModeSaturationTweak};
|
|
675
677
|
--mode-mult: -1;
|
|
676
|
-
--dyn-mode-mult: -1.
|
|
678
|
+
--dyn-mode-mult: -1.25;
|
|
677
679
|
--dyn-mode-lighten-mult: -1;
|
|
678
680
|
--dyn-mode-sign: -1;
|
|
679
681
|
--dyn-source-mode-adjust: 1;
|
|
682
|
+
--dyn-mode-dark: 1;
|
|
683
|
+
--dyn-mode-light: 0;
|
|
680
684
|
--color-dark-blend: var(--palette-light-blend);
|
|
681
685
|
--color-light-blend: var(--palette-dark-blend);
|
|
682
686
|
--color-dark-blend-2: var(--palette-light-blend-2);
|
|
@@ -703,7 +707,7 @@ export default function presetAtype({
|
|
|
703
707
|
`;
|
|
704
708
|
|
|
705
709
|
const dynThemes: Record<string, DynamicThemeColor> = {
|
|
706
|
-
lemon: { hue: 91.8, hueRotate:
|
|
710
|
+
lemon: { hue: 91.8, hueRotate: 12 },
|
|
707
711
|
leek: { hue: 160.88, hueRotate: -1 },
|
|
708
712
|
tomato: { hue: 10.51, hueRotate: -2 },
|
|
709
713
|
blueberry: { hue: 248.14, hueRotate: 4 },
|
|
@@ -804,7 +808,7 @@ export default function presetAtype({
|
|
|
804
808
|
--z-tooltip: 10000;
|
|
805
809
|
--z-overdraw: 100000;
|
|
806
810
|
|
|
807
|
-
--un-shadow-color:
|
|
811
|
+
--un-shadow-color: #000000;
|
|
808
812
|
--un-shadow-opacity: 10%;
|
|
809
813
|
|
|
810
814
|
--arrow-size: 1rem;
|