@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.
Files changed (60) hide show
  1. package/dist/cjs/colors.stories.d.ts +2 -2
  2. package/dist/cjs/colors.stories.js +2 -2
  3. package/dist/cjs/colors.stories.js.map +1 -1
  4. package/dist/cjs/components/button/Button.js +39 -20
  5. package/dist/cjs/components/button/Button.js.map +1 -1
  6. package/dist/cjs/components/button/Button.stories.d.ts +1 -0
  7. package/dist/cjs/components/button/Button.stories.js +6 -1
  8. package/dist/cjs/components/button/Button.stories.js.map +1 -1
  9. package/dist/cjs/components/button/classes.js +1 -1
  10. package/dist/cjs/components/button/classes.js.map +1 -1
  11. package/dist/cjs/components/icon/Icon.js +1 -1
  12. package/dist/cjs/components/icon/Icon.js.map +1 -1
  13. package/dist/cjs/components/navBar/NavBar.d.ts +2 -2
  14. package/dist/cjs/components/navBar/NavBar.js +5 -7
  15. package/dist/cjs/components/navBar/NavBar.js.map +1 -1
  16. package/dist/cjs/components/select/Select.d.ts +1 -1
  17. package/dist/cjs/components/select/Select.js +6 -5
  18. package/dist/cjs/components/select/Select.js.map +1 -1
  19. package/dist/cjs/uno/colors.js +3 -3
  20. package/dist/cjs/uno/colors.js.map +1 -1
  21. package/dist/cjs/uno/shadows.js +3 -3
  22. package/dist/cjs/uno/shadows.js.map +1 -1
  23. package/dist/cjs/uno/uno.preset.js +7 -3
  24. package/dist/cjs/uno/uno.preset.js.map +1 -1
  25. package/dist/css/main.css +106 -98
  26. package/dist/esm/colors.stories.d.ts +2 -2
  27. package/dist/esm/colors.stories.js +2 -2
  28. package/dist/esm/colors.stories.js.map +1 -1
  29. package/dist/esm/components/button/Button.js +7 -21
  30. package/dist/esm/components/button/Button.js.map +1 -1
  31. package/dist/esm/components/button/Button.stories.d.ts +1 -0
  32. package/dist/esm/components/button/Button.stories.js +5 -0
  33. package/dist/esm/components/button/Button.stories.js.map +1 -1
  34. package/dist/esm/components/button/classes.js +1 -1
  35. package/dist/esm/components/button/classes.js.map +1 -1
  36. package/dist/esm/components/icon/Icon.js +1 -1
  37. package/dist/esm/components/icon/Icon.js.map +1 -1
  38. package/dist/esm/components/navBar/NavBar.d.ts +2 -2
  39. package/dist/esm/components/navBar/NavBar.js +5 -7
  40. package/dist/esm/components/navBar/NavBar.js.map +1 -1
  41. package/dist/esm/components/select/Select.d.ts +1 -1
  42. package/dist/esm/components/select/Select.js +2 -1
  43. package/dist/esm/components/select/Select.js.map +1 -1
  44. package/dist/esm/uno/colors.js +3 -3
  45. package/dist/esm/uno/colors.js.map +1 -1
  46. package/dist/esm/uno/shadows.js +3 -3
  47. package/dist/esm/uno/shadows.js.map +1 -1
  48. package/dist/esm/uno/uno.preset.js +7 -3
  49. package/dist/esm/uno/uno.preset.js.map +1 -1
  50. package/package.json +3 -1
  51. package/src/colors.stories.tsx +2 -2
  52. package/src/components/button/Button.stories.tsx +18 -0
  53. package/src/components/button/Button.tsx +13 -41
  54. package/src/components/button/classes.tsx +1 -1
  55. package/src/components/icon/Icon.tsx +1 -1
  56. package/src/components/navBar/NavBar.tsx +8 -10
  57. package/src/components/select/Select.tsx +2 -1
  58. package/src/uno/colors.ts +3 -3
  59. package/src/uno/shadows.ts +3 -3
  60. 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 && !hasIcon && (
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="flex-shrink-0 inline-block overflow-hidden my-auto flex"
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
- {wrappedChildren}
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))`,
@@ -21,7 +21,7 @@ export const Icon = function Icon({
21
21
  const loading = useIconLoading();
22
22
 
23
23
  if (loading) {
24
- return <Spinner size={size} className="inline-block" />;
24
+ return <Spinner size={size} className="icon inline-block" />;
25
25
  }
26
26
 
27
27
  return (
@@ -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-[var(--bg)] bg-darken-1 color-black)',
13
- 'layer-components:([--bg:var(--color-primary-wash)] [--fill:var(--color-primary)])',
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<HTMLDivElement>;
33
+ ref?: React.Ref<HTMLButtonElement>;
34
34
  }) {
35
- const Comp = asChild ? Slot : 'div';
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-dark-blend layer-variants:md:active:bg-gray-dark-blend',
44
- 'layer-variants:hover:bg-gray-dark-blend',
45
- 'layer-variants:focus-visible:(bg-gray-dark-blend)',
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, getButtonClassName } from '../button/index.js';
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.45 * var(--dyn-mode-mult, 1))`,
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(0.999 * var(--dyn-mode-mult,1)) calc(c * var(--global-saturation, 1)) h);
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
  `;
@@ -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})`,
@@ -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.6;
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: 3 },
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: var(--palette-true-black);
811
+ --un-shadow-color: #000000;
808
812
  --un-shadow-opacity: 10%;
809
813
 
810
814
  --arrow-size: 1rem;