@a-type/ui 3.0.13 → 3.0.15

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 (63) hide show
  1. package/dist/cjs/colors.stories.js +1 -1
  2. package/dist/cjs/colors.stories.js.map +1 -1
  3. package/dist/cjs/components/actions/ActionButton.js +1 -1
  4. package/dist/cjs/components/actions/ActionButton.js.map +1 -1
  5. package/dist/cjs/components/button/classes.js +1 -1
  6. package/dist/cjs/components/button/classes.js.map +1 -1
  7. package/dist/cjs/components/layouts/PageRoot.d.ts +5 -1
  8. package/dist/cjs/components/layouts/PageRoot.js +22 -2
  9. package/dist/cjs/components/layouts/PageRoot.js.map +1 -1
  10. package/dist/cjs/hooks/useTitleBarColor.d.ts +4 -5
  11. package/dist/cjs/hooks/useTitleBarColor.js +8 -12
  12. package/dist/cjs/hooks/useTitleBarColor.js.map +1 -1
  13. package/dist/cjs/uno/logic/color.d.ts +1 -1
  14. package/dist/cjs/uno/logic/color.js +13 -4
  15. package/dist/cjs/uno/logic/color.js.map +1 -1
  16. package/dist/cjs/uno/logic/color.test.js +5 -14
  17. package/dist/cjs/uno/logic/color.test.js.map +1 -1
  18. package/dist/cjs/uno/logic/palettes.d.ts +1 -1
  19. package/dist/cjs/uno/logic/palettes.js +1 -1
  20. package/dist/cjs/uno/logic/palettes.js.map +1 -1
  21. package/dist/cjs/uno/preflights/colors.js +2 -2
  22. package/dist/cjs/uno/preflights/colors.js.map +1 -1
  23. package/dist/cjs/uno/theme/colors.js +2 -2
  24. package/dist/cjs/uno/theme/colors.js.map +1 -1
  25. package/dist/cjs/uno/theme/sizes.js +2 -2
  26. package/dist/css/main.css +2 -2
  27. package/dist/esm/colors.stories.js +1 -1
  28. package/dist/esm/colors.stories.js.map +1 -1
  29. package/dist/esm/components/actions/ActionButton.js +1 -1
  30. package/dist/esm/components/actions/ActionButton.js.map +1 -1
  31. package/dist/esm/components/button/classes.js +1 -1
  32. package/dist/esm/components/button/classes.js.map +1 -1
  33. package/dist/esm/components/layouts/PageRoot.d.ts +5 -1
  34. package/dist/esm/components/layouts/PageRoot.js +19 -2
  35. package/dist/esm/components/layouts/PageRoot.js.map +1 -1
  36. package/dist/esm/hooks/useTitleBarColor.d.ts +4 -5
  37. package/dist/esm/hooks/useTitleBarColor.js +8 -12
  38. package/dist/esm/hooks/useTitleBarColor.js.map +1 -1
  39. package/dist/esm/uno/logic/color.d.ts +1 -1
  40. package/dist/esm/uno/logic/color.js +13 -4
  41. package/dist/esm/uno/logic/color.js.map +1 -1
  42. package/dist/esm/uno/logic/color.test.js +6 -15
  43. package/dist/esm/uno/logic/color.test.js.map +1 -1
  44. package/dist/esm/uno/logic/palettes.d.ts +1 -1
  45. package/dist/esm/uno/logic/palettes.js +1 -1
  46. package/dist/esm/uno/logic/palettes.js.map +1 -1
  47. package/dist/esm/uno/preflights/colors.js +2 -2
  48. package/dist/esm/uno/preflights/colors.js.map +1 -1
  49. package/dist/esm/uno/theme/colors.js +2 -2
  50. package/dist/esm/uno/theme/colors.js.map +1 -1
  51. package/dist/esm/uno/theme/sizes.js +2 -2
  52. package/package.json +1 -1
  53. package/src/colors.stories.tsx +1 -1
  54. package/src/components/actions/ActionButton.tsx +1 -1
  55. package/src/components/button/classes.tsx +2 -1
  56. package/src/components/layouts/PageRoot.tsx +29 -8
  57. package/src/hooks/useTitleBarColor.ts +10 -20
  58. package/src/uno/logic/color.test.ts +6 -16
  59. package/src/uno/logic/color.ts +15 -7
  60. package/src/uno/logic/palettes.ts +1 -1
  61. package/src/uno/preflights/colors.ts +2 -2
  62. package/src/uno/theme/colors.ts +2 -2
  63. package/src/uno/theme/sizes.ts +2 -2
@@ -1,8 +1,9 @@
1
- import { RefObject, useCallback, useEffect } from 'react';
1
+ import { useCallback, useEffect } from 'react';
2
2
  import { useResolvedColorMode } from '../colorMode.js';
3
3
  import { snapshotColorContext } from '../uno/logic/color.js';
4
4
  import {
5
5
  ColorLogicalPaletteDefinitions,
6
+ PaletteName,
6
7
  palettes,
7
8
  } from '../uno/logic/palettes.js';
8
9
 
@@ -62,41 +63,30 @@ export function useSetTitleBarColor() {
62
63
  }
63
64
 
64
65
  export function useThemedTitleBar(
65
- paletteName: 'primary' | 'accent' | 'gray',
66
+ paletteName: PaletteName,
66
67
  value: keyof ColorLogicalPaletteDefinitions,
67
- options?: { contextElement?: RefObject<HTMLElement> },
68
+ /** If not provided, will inherit from app */
69
+ mode?: 'light' | 'dark',
70
+ skip?: boolean,
68
71
  ) {
69
72
  const { setColor } = useSetTitleBarColor();
70
73
 
71
74
  useEffect(() => {
75
+ if (skip) return;
72
76
  const previousColor = getCurrentColor();
73
77
 
74
78
  function update() {
75
- const palette = palettes[paletteName];
76
- const context = snapshotColorContext(
77
- options?.contextElement?.current,
78
- paletteName,
79
- );
79
+ const palette = palettes[paletteName] ?? palettes.primary;
80
+ const context = snapshotColorContext(paletteName, mode);
80
81
  const color = palette.definitions[value].computeOklch(context);
81
82
  setColor(color);
82
83
  }
83
84
  update();
84
85
 
85
- const observer = new MutationObserver(() => {
86
- update();
87
- });
88
- observer.observe(
89
- options?.contextElement?.current ?? document.documentElement,
90
- {
91
- attributes: true,
92
- attributeFilter: ['class'],
93
- },
94
- );
95
-
96
86
  if (previousColor) {
97
87
  return () => {
98
88
  setColor(previousColor);
99
89
  };
100
90
  }
101
- }, [setColor, paletteName, value, options?.contextElement]);
91
+ }, [setColor, paletteName, value, mode, skip]);
102
92
  }
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
1
+ import { describe, expect, it } from 'vitest';
2
2
  import {
3
3
  ColorEvaluationContext,
4
4
  livePropertyColorContext,
@@ -6,19 +6,9 @@ import {
6
6
  } from './color.js';
7
7
  import { palettes } from './palettes.js';
8
8
 
9
- let contextElement: HTMLElement;
10
- beforeEach(() => {
11
- contextElement = document.createElement('div');
12
- contextElement.classList.add('palette-leek');
13
- document.body.appendChild(contextElement);
14
- });
15
- afterEach(() => {
16
- document.body.removeChild(contextElement);
17
- });
18
-
19
9
  describe('context snapshot evaluation', () => {
20
10
  it('should snapshot color context from element properties', () => {
21
- const context = snapshotColorContext(contextElement, 'main');
11
+ const context = snapshotColorContext('leek');
22
12
  expect(context).toEqual({
23
13
  sourceHue: '165.88',
24
14
  localLightnessSpread: '1',
@@ -41,7 +31,7 @@ describe('oklch color evaluation tools', () => {
41
31
  const { wash, default: DEFAULT } = palettes.main.definitions;
42
32
 
43
33
  it('should resolve lch values', () => {
44
- const ctx = snapshotColorContext(contextElement, 'main');
34
+ const ctx = snapshotColorContext('leek');
45
35
  const { l, c, h } = wash.raw(ctx);
46
36
  expect(l.value).toBeCloseTo(100, 1);
47
37
  expect(l.unit).toBe('%');
@@ -59,7 +49,7 @@ describe('oklch color evaluation tools', () => {
59
49
  );
60
50
  });
61
51
  it('should evaluate a valid oklch color value using element property values', () => {
62
- const context = snapshotColorContext(contextElement, 'main');
52
+ const context = snapshotColorContext('leek');
63
53
  expect(wash.computeSrgb(context)).toMatchInlineSnapshot(
64
54
  `"rgb(100% 100% 100%)"`,
65
55
  );
@@ -77,7 +67,7 @@ describe('oklch color evaluation tools', () => {
77
67
  );
78
68
  });
79
69
  it('should evaluate different named palettes in addition to main', () => {
80
- const context = snapshotColorContext(contextElement, 'attention');
70
+ const context = snapshotColorContext('attention');
81
71
  expect(wash.computeSrgb(context)).toMatchInlineSnapshot(
82
72
  `"rgb(100% 100% 100%)"`,
83
73
  );
@@ -98,7 +88,7 @@ describe('oklch color evaluation tools', () => {
98
88
  const darkMode = document.createElement('div');
99
89
  darkMode.classList.add('override-dark', 'palette-leek');
100
90
  document.body.appendChild(darkMode);
101
- const context = snapshotColorContext(darkMode, 'main');
91
+ const context = snapshotColorContext('leek', 'dark');
102
92
  expect(wash.computeSrgb(context)).toMatchInlineSnapshot(
103
93
  `"rgb(0% 14.06% 7.3466%)"`,
104
94
  );
@@ -117,16 +117,24 @@ function evaluatePropertiesRecursively(
117
117
  * Defaults to body.
118
118
  */
119
119
  export function snapshotColorContext(
120
- scope: HTMLElement = document.body,
121
- palette: PaletteName | 'main',
120
+ palette: PaletteName,
121
+ mode?: 'light' | 'dark',
122
122
  ): ColorEvaluationContext {
123
- const styles = getComputedStyle(scope);
124
- const sourceHue =
125
- palette === 'main' ? `var(--l-main-hue)` : `var(--p-${palette}-hue)`;
126
- return evaluatePropertiesRecursively(
123
+ const scopeElement = document.createElement('div');
124
+ scopeElement.classList.add(`palette-${palette}`);
125
+ if (mode) {
126
+ scopeElement.classList.add(`override-${mode}`);
127
+ }
128
+ scopeElement.style.position = 'absolute';
129
+ scopeElement.style.visibility = 'hidden';
130
+ document.body.appendChild(scopeElement);
131
+ const styles = getComputedStyle(scopeElement);
132
+ const evaluated = evaluatePropertiesRecursively(
127
133
  styles,
128
- livePropertyColorContext(sourceHue),
134
+ livePropertyColorContext(`var(--l-main-hue)`),
129
135
  ) as ColorEvaluationContext;
136
+ document.body.removeChild(scopeElement);
137
+ return evaluated;
130
138
  }
131
139
 
132
140
  export interface OklchColorEquation {
@@ -253,7 +253,7 @@ export const palettes = {
253
253
  sourceHue: paletteHues.main,
254
254
  saturation: graySaturation,
255
255
  }),
256
- highContrast: createColorLogicalPalette({
256
+ ['high-contrast']: createColorLogicalPalette({
257
257
  sourceHue: paletteHues.main,
258
258
  saturation: highContrastSaturation,
259
259
  }),
@@ -7,9 +7,9 @@ import {
7
7
  import { preflight } from './_util.js';
8
8
 
9
9
  const baseThemeCSS = `
10
- --v-color: ${palettes.highContrast.styles.ink};
10
+ --v-color: ${palettes['high-contrast'].styles.ink};
11
11
  color: var(--v-color);
12
- --v-bg: ${palettes.highContrast.styles.wash};
12
+ --v-bg: ${palettes['high-contrast'].styles.wash};
13
13
  background-color: var(--v-bg);
14
14
  `;
15
15
 
@@ -8,8 +8,8 @@ export const colors = {
8
8
  transparent: 'transparent',
9
9
  current: 'currentColor',
10
10
 
11
- black: palettes.highContrast.styles.ink,
12
- white: palettes.highContrast.styles.wash,
11
+ black: palettes['high-contrast'].styles.ink,
12
+ white: palettes['high-contrast'].styles.wash,
13
13
  wash: palettes.gray.styles.wash,
14
14
 
15
15
  // magic tokens
@@ -5,11 +5,11 @@ export const width: Theme['width'] = {
5
5
  full: '100%',
6
6
  'min-content': 'min-content',
7
7
  'max-content': 'max-content',
8
- touch: '40px',
8
+ touch: '30px',
9
9
  };
10
10
 
11
11
  export const height: Theme['height'] = {
12
12
  'min-content': 'min-content',
13
13
  'max-content': 'max-content',
14
- touch: '40px',
14
+ touch: '30px',
15
15
  };