@a-type/ui 3.0.26 → 3.0.29

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 (163) hide show
  1. package/dist/cjs/colors.stories.js +1 -8
  2. package/dist/cjs/colors.stories.js.map +1 -1
  3. package/dist/cjs/components/dialog/Dialog.js +30 -5
  4. package/dist/cjs/components/dialog/Dialog.js.map +1 -1
  5. package/dist/cjs/components/dialog/Dialog.stories.js +1 -1
  6. package/dist/cjs/components/dialog/Dialog.stories.js.map +1 -1
  7. package/dist/cjs/components/icon/Icon.js +1 -1
  8. package/dist/cjs/components/icon/Icon.js.map +1 -1
  9. package/dist/cjs/components/index.d.ts +2 -0
  10. package/dist/cjs/components/index.js +2 -0
  11. package/dist/cjs/components/index.js.map +1 -1
  12. package/dist/cjs/components/lightbox/Lightbox.d.ts +25 -0
  13. package/dist/cjs/components/lightbox/Lightbox.js +71 -0
  14. package/dist/cjs/components/lightbox/Lightbox.js.map +1 -0
  15. package/dist/cjs/components/lightbox/Lightbox.stories.d.ts +24 -0
  16. package/dist/cjs/components/lightbox/Lightbox.stories.js +21 -0
  17. package/dist/cjs/components/lightbox/Lightbox.stories.js.map +1 -0
  18. package/dist/cjs/components/lists/lists.d.ts +6 -0
  19. package/dist/cjs/components/lists/lists.js +16 -0
  20. package/dist/cjs/components/lists/lists.js.map +1 -0
  21. package/dist/cjs/components/lists/lists.stories.d.ts +14 -0
  22. package/dist/cjs/components/lists/lists.stories.js +25 -0
  23. package/dist/cjs/components/lists/lists.stories.js.map +1 -0
  24. package/dist/cjs/components/provider/Provider.d.ts +1 -4
  25. package/dist/cjs/components/provider/Provider.js +3 -3
  26. package/dist/cjs/components/provider/Provider.js.map +1 -1
  27. package/dist/cjs/components/pwaInstall/PlatformIcons.d.ts +5 -0
  28. package/dist/cjs/components/pwaInstall/PlatformIcons.js +25 -0
  29. package/dist/cjs/components/pwaInstall/PlatformIcons.js.map +1 -0
  30. package/dist/cjs/components/pwaInstall/PwaInstallTrigger.d.ts +5 -0
  31. package/dist/cjs/components/pwaInstall/PwaInstallTrigger.js +74 -0
  32. package/dist/cjs/components/pwaInstall/PwaInstallTrigger.js.map +1 -0
  33. package/dist/cjs/components/pwaInstall/PwaInstallTrigger.stories.d.ts +15 -0
  34. package/dist/cjs/components/pwaInstall/PwaInstallTrigger.stories.js +23 -0
  35. package/dist/cjs/components/pwaInstall/PwaInstallTrigger.stories.js.map +1 -0
  36. package/dist/cjs/components/pwaInstall/index.d.ts +3 -0
  37. package/dist/cjs/components/pwaInstall/index.js +21 -0
  38. package/dist/cjs/components/pwaInstall/index.js.map +1 -0
  39. package/dist/cjs/components/pwaInstall/useIsInstallReady.d.ts +3 -0
  40. package/dist/cjs/components/pwaInstall/useIsInstallReady.js +58 -0
  41. package/dist/cjs/components/pwaInstall/useIsInstallReady.js.map +1 -0
  42. package/dist/cjs/components/pwaInstall/useWebManifest.d.ts +2 -0
  43. package/dist/cjs/components/pwaInstall/useWebManifest.js +45 -0
  44. package/dist/cjs/components/pwaInstall/useWebManifest.js.map +1 -0
  45. package/dist/cjs/components/slider/Slider.js +4 -4
  46. package/dist/cjs/components/slider/Slider.js.map +1 -1
  47. package/dist/cjs/components/slider/Slider.stories.d.ts +2 -0
  48. package/dist/cjs/components/slider/Slider.stories.js +32 -1
  49. package/dist/cjs/components/slider/Slider.stories.js.map +1 -1
  50. package/dist/cjs/components/toasts/toasts.d.ts +4 -1
  51. package/dist/cjs/components/toasts/toasts.js +35 -1
  52. package/dist/cjs/components/toasts/toasts.js.map +1 -1
  53. package/dist/cjs/components/toasts/toasts.stories.d.ts +13 -0
  54. package/dist/cjs/components/toasts/toasts.stories.js +47 -0
  55. package/dist/cjs/components/toasts/toasts.stories.js.map +1 -0
  56. package/dist/cjs/platform.d.ts +11 -0
  57. package/dist/cjs/platform.js +95 -0
  58. package/dist/cjs/platform.js.map +1 -0
  59. package/dist/cjs/uno/logic/color.d.ts +0 -12
  60. package/dist/cjs/uno/logic/color.js +0 -35
  61. package/dist/cjs/uno/logic/color.js.map +1 -1
  62. package/dist/cjs/uno/logic/color.test.js +0 -12
  63. package/dist/cjs/uno/logic/color.test.js.map +1 -1
  64. package/dist/cjs/uno/theme/index.js +8 -0
  65. package/dist/cjs/uno/theme/index.js.map +1 -1
  66. package/dist/css/main.css +6 -5
  67. package/dist/esm/colors.stories.js +1 -8
  68. package/dist/esm/colors.stories.js.map +1 -1
  69. package/dist/esm/components/dialog/Dialog.js +30 -5
  70. package/dist/esm/components/dialog/Dialog.js.map +1 -1
  71. package/dist/esm/components/dialog/Dialog.stories.js +1 -1
  72. package/dist/esm/components/dialog/Dialog.stories.js.map +1 -1
  73. package/dist/esm/components/icon/Icon.js +1 -1
  74. package/dist/esm/components/icon/Icon.js.map +1 -1
  75. package/dist/esm/components/index.d.ts +2 -0
  76. package/dist/esm/components/index.js +2 -0
  77. package/dist/esm/components/index.js.map +1 -1
  78. package/dist/esm/components/lightbox/Lightbox.d.ts +25 -0
  79. package/dist/esm/components/lightbox/Lightbox.js +32 -0
  80. package/dist/esm/components/lightbox/Lightbox.js.map +1 -0
  81. package/dist/esm/components/lightbox/Lightbox.stories.d.ts +24 -0
  82. package/dist/esm/components/lightbox/Lightbox.stories.js +18 -0
  83. package/dist/esm/components/lightbox/Lightbox.stories.js.map +1 -0
  84. package/dist/esm/components/lists/lists.d.ts +6 -0
  85. package/dist/esm/components/lists/lists.js +13 -0
  86. package/dist/esm/components/lists/lists.js.map +1 -0
  87. package/dist/esm/components/lists/lists.stories.d.ts +14 -0
  88. package/dist/esm/components/lists/lists.stories.js +22 -0
  89. package/dist/esm/components/lists/lists.stories.js.map +1 -0
  90. package/dist/esm/components/provider/Provider.d.ts +1 -4
  91. package/dist/esm/components/provider/Provider.js +3 -3
  92. package/dist/esm/components/provider/Provider.js.map +1 -1
  93. package/dist/esm/components/pwaInstall/PlatformIcons.d.ts +5 -0
  94. package/dist/esm/components/pwaInstall/PlatformIcons.js +18 -0
  95. package/dist/esm/components/pwaInstall/PlatformIcons.js.map +1 -0
  96. package/dist/esm/components/pwaInstall/PwaInstallTrigger.d.ts +5 -0
  97. package/dist/esm/components/pwaInstall/PwaInstallTrigger.js +71 -0
  98. package/dist/esm/components/pwaInstall/PwaInstallTrigger.js.map +1 -0
  99. package/dist/esm/components/pwaInstall/PwaInstallTrigger.stories.d.ts +15 -0
  100. package/dist/esm/components/pwaInstall/PwaInstallTrigger.stories.js +20 -0
  101. package/dist/esm/components/pwaInstall/PwaInstallTrigger.stories.js.map +1 -0
  102. package/dist/esm/components/pwaInstall/index.d.ts +3 -0
  103. package/dist/esm/components/pwaInstall/index.js +5 -0
  104. package/dist/esm/components/pwaInstall/index.js.map +1 -0
  105. package/dist/esm/components/pwaInstall/useIsInstallReady.d.ts +3 -0
  106. package/dist/esm/components/pwaInstall/useIsInstallReady.js +53 -0
  107. package/dist/esm/components/pwaInstall/useIsInstallReady.js.map +1 -0
  108. package/dist/esm/components/pwaInstall/useWebManifest.d.ts +2 -0
  109. package/dist/esm/components/pwaInstall/useWebManifest.js +42 -0
  110. package/dist/esm/components/pwaInstall/useWebManifest.js.map +1 -0
  111. package/dist/esm/components/slider/Slider.js +4 -4
  112. package/dist/esm/components/slider/Slider.js.map +1 -1
  113. package/dist/esm/components/slider/Slider.stories.d.ts +2 -0
  114. package/dist/esm/components/slider/Slider.stories.js +28 -0
  115. package/dist/esm/components/slider/Slider.stories.js.map +1 -1
  116. package/dist/esm/components/toasts/toasts.d.ts +4 -1
  117. package/dist/esm/components/toasts/toasts.js +32 -1
  118. package/dist/esm/components/toasts/toasts.js.map +1 -1
  119. package/dist/esm/components/toasts/toasts.stories.d.ts +13 -0
  120. package/dist/esm/components/toasts/toasts.stories.js +44 -0
  121. package/dist/esm/components/toasts/toasts.stories.js.map +1 -0
  122. package/dist/esm/platform.d.ts +11 -0
  123. package/dist/esm/platform.js +84 -0
  124. package/dist/esm/platform.js.map +1 -0
  125. package/dist/esm/uno/logic/color.d.ts +0 -12
  126. package/dist/esm/uno/logic/color.js +0 -35
  127. package/dist/esm/uno/logic/color.js.map +1 -1
  128. package/dist/esm/uno/logic/color.test.js +0 -12
  129. package/dist/esm/uno/logic/color.test.js.map +1 -1
  130. package/dist/esm/uno/theme/index.js +8 -0
  131. package/dist/esm/uno/theme/index.js.map +1 -1
  132. package/package.json +5 -7
  133. package/src/colors.stories.tsx +0 -12
  134. package/src/components/dialog/Dialog.stories.tsx +20 -6
  135. package/src/components/dialog/Dialog.tsx +49 -4
  136. package/src/components/icon/Icon.tsx +6 -1
  137. package/src/components/index.ts +2 -0
  138. package/src/components/lightbox/Lightbox.stories.tsx +28 -0
  139. package/src/components/lightbox/Lightbox.tsx +87 -0
  140. package/src/components/lists/lists.stories.tsx +38 -0
  141. package/src/components/lists/lists.tsx +21 -0
  142. package/src/components/provider/Provider.tsx +2 -9
  143. package/src/components/pwaInstall/PlatformIcons.tsx +75 -0
  144. package/src/components/pwaInstall/PwaInstallTrigger.stories.tsx +29 -0
  145. package/src/components/pwaInstall/PwaInstallTrigger.tsx +227 -0
  146. package/src/components/pwaInstall/index.ts +3 -0
  147. package/src/components/pwaInstall/useIsInstallReady.ts +56 -0
  148. package/src/components/pwaInstall/useWebManifest.ts +55 -0
  149. package/src/components/slider/Slider.stories.tsx +40 -0
  150. package/src/components/slider/Slider.tsx +6 -3
  151. package/src/components/toasts/toasts.stories.tsx +83 -0
  152. package/src/components/toasts/toasts.tsx +72 -1
  153. package/src/platform.ts +103 -0
  154. package/src/uno/logic/color.test.ts +0 -27
  155. package/src/uno/logic/color.ts +0 -56
  156. package/src/uno/theme/index.ts +8 -0
  157. package/dist/cjs/uno/logic/oklch.d.ts +0 -3
  158. package/dist/cjs/uno/logic/oklch.js +0 -96
  159. package/dist/cjs/uno/logic/oklch.js.map +0 -1
  160. package/dist/esm/uno/logic/oklch.d.ts +0 -3
  161. package/dist/esm/uno/logic/oklch.js +0 -90
  162. package/dist/esm/uno/logic/oklch.js.map +0 -1
  163. package/src/uno/logic/oklch.ts +0 -120
@@ -0,0 +1,103 @@
1
+ export const PRETEND_PWA =
2
+ (typeof localStorage !== 'undefined' &&
3
+ localStorage.getItem('pretendPWA')) === 'true';
4
+
5
+ export const PRETEND_INSTALLABLE =
6
+ typeof localStorage !== 'undefined' &&
7
+ localStorage.getItem('pretendInstallable') === 'true';
8
+
9
+ export const PRETEND_OS =
10
+ (typeof localStorage !== 'undefined' && localStorage.getItem('pretendOS')) ||
11
+ null;
12
+
13
+ export function getIsPWAInstalled() {
14
+ return (
15
+ (typeof window !== 'undefined' && PRETEND_PWA) ||
16
+ window.matchMedia('(display-mode: standalone)').matches
17
+ );
18
+ }
19
+
20
+ export function getOS() {
21
+ if (PRETEND_OS) {
22
+ return PRETEND_OS;
23
+ }
24
+
25
+ if (typeof window === 'undefined') {
26
+ return 'Server';
27
+ }
28
+
29
+ const userAgent = window.navigator.userAgent;
30
+ const platform = window.navigator.platform;
31
+ const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];
32
+ const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];
33
+ const iosPlatforms = ['iPhone', 'iPad', 'iPod'];
34
+
35
+ if (macosPlatforms.indexOf(platform) !== -1) {
36
+ return 'Mac OS';
37
+ } else if (iosPlatforms.indexOf(platform) !== -1) {
38
+ return 'iOS';
39
+ } else if (windowsPlatforms.indexOf(platform) !== -1) {
40
+ return 'Windows';
41
+ } else if (/Android/.test(userAgent)) {
42
+ return 'Android';
43
+ } else if (!platform && /Linux/.test(userAgent)) {
44
+ return 'Linux';
45
+ }
46
+
47
+ return 'Other';
48
+ }
49
+
50
+ export function getIsSafari() {
51
+ if (typeof window === 'undefined') {
52
+ return false;
53
+ }
54
+
55
+ const ua = navigator.userAgent.toLowerCase();
56
+ return !!ua.match(/WebKit/i) && !ua.match(/CriOS/i);
57
+ }
58
+
59
+ export function getIsFirefox() {
60
+ if (typeof window === 'undefined') {
61
+ return false;
62
+ }
63
+
64
+ const ua = navigator.userAgent.toLowerCase();
65
+ return !!ua.match(/Firefox/i);
66
+ }
67
+
68
+ export function getIsEdge() {
69
+ if (typeof window === 'undefined') {
70
+ return false;
71
+ }
72
+
73
+ const ua = navigator.userAgent.toLowerCase();
74
+ return !!ua.match(/Edge/i);
75
+ }
76
+
77
+ export function getIsMobile() {
78
+ return (
79
+ typeof window !== 'undefined' &&
80
+ (/Mobi/.test(navigator.userAgent) ||
81
+ /Android/i.test(navigator.userAgent) ||
82
+ /iPhone/i.test(navigator.userAgent) ||
83
+ /iPad/i.test(navigator.userAgent))
84
+ );
85
+ }
86
+
87
+ export function getSupportsPWAInstallPrompt() {
88
+ if (PRETEND_INSTALLABLE) {
89
+ return true;
90
+ }
91
+ return typeof window !== 'undefined' && 'BeforeInstallPromptEvent' in window;
92
+ }
93
+
94
+ let isUsingTouch = false;
95
+ if (typeof window !== 'undefined') {
96
+ window.addEventListener('touchstart', () => {
97
+ isUsingTouch = true;
98
+ });
99
+ }
100
+
101
+ export function getIsTouch() {
102
+ return isUsingTouch;
103
+ }
@@ -50,36 +50,18 @@ describe('oklch color evaluation tools', () => {
50
50
  });
51
51
  it('should evaluate a valid oklch color value using element property values', () => {
52
52
  const context = snapshotColorContext('leek');
53
- expect(wash.computeSrgb(context)).toMatchInlineSnapshot(
54
- `"rgb(100% 100% 100%)"`,
55
- );
56
- expect(wash.computeHex(context)).toMatchInlineSnapshot(`"#fff"`);
57
53
  expect(wash.computeOklch(context)).toMatchInlineSnapshot(
58
54
  `"oklch(100% 10% 165.88)"`,
59
55
  );
60
-
61
- expect(DEFAULT.computeSrgb(context)).toMatchInlineSnapshot(
62
- `"rgb(40.747% 99.344% 77.98%)"`,
63
- );
64
- expect(DEFAULT.computeHex(context)).toMatchInlineSnapshot(`"#68fdc7"`);
65
56
  expect(DEFAULT.computeOklch(context)).toMatchInlineSnapshot(
66
57
  `"oklch(90% 37.5% 165.88)"`,
67
58
  );
68
59
  });
69
60
  it('should evaluate different named palettes in addition to main', () => {
70
61
  const context = snapshotColorContext('attention');
71
- expect(wash.computeSrgb(context)).toMatchInlineSnapshot(
72
- `"rgb(100% 100% 100%)"`,
73
- );
74
- expect(wash.computeHex(context)).toMatchInlineSnapshot(`"#fff"`);
75
62
  expect(wash.computeOklch(context)).toMatchInlineSnapshot(
76
63
  `"oklch(100% 10% 30)"`,
77
64
  );
78
-
79
- expect(DEFAULT.computeSrgb(context)).toMatchInlineSnapshot(
80
- `"rgb(100% 80.069% 75.637%)"`,
81
- );
82
- expect(DEFAULT.computeHex(context)).toMatchInlineSnapshot(`"#ffccc1"`);
83
65
  expect(DEFAULT.computeOklch(context)).toMatchInlineSnapshot(
84
66
  `"oklch(90% 37.5% 30)"`,
85
67
  );
@@ -89,18 +71,9 @@ describe('oklch color evaluation tools', () => {
89
71
  darkMode.classList.add('override-dark', 'palette-leek');
90
72
  document.body.appendChild(darkMode);
91
73
  const context = snapshotColorContext('leek', 'dark');
92
- expect(wash.computeSrgb(context)).toMatchInlineSnapshot(
93
- `"rgb(0% 14.06% 7.3466%)"`,
94
- );
95
- expect(wash.computeHex(context)).toMatchInlineSnapshot(`"#002413"`);
96
74
  expect(wash.computeOklch(context)).toMatchInlineSnapshot(
97
75
  `"oklch(22% 20% 165.88)"`,
98
76
  );
99
-
100
- expect(DEFAULT.computeSrgb(context)).toMatchInlineSnapshot(
101
- `"rgb(0% 60.697% 41.999%)"`,
102
- );
103
- expect(DEFAULT.computeHex(context)).toMatchInlineSnapshot(`"#009b6b"`);
104
77
  expect(DEFAULT.computeOklch(context)).toMatchInlineSnapshot(
105
78
  `"oklch(60% 40% 165.88)"`,
106
79
  );
@@ -1,17 +1,5 @@
1
- import {
2
- ColorSpace,
3
- to as convert,
4
- OKLCH,
5
- PlainColorObject,
6
- serialize,
7
- sRGB,
8
- toGamut,
9
- } from 'colorjs.io/fn';
10
1
  import { type PaletteName } from './palettes.js';
11
2
 
12
- ColorSpace.register(sRGB);
13
- ColorSpace.register(OKLCH);
14
-
15
3
  export function lighten(base: string, level: string) {
16
4
  return mod(base, level, 1);
17
5
  }
@@ -152,18 +140,6 @@ export interface OklchColorEquation {
152
140
  * OKLCH color string with calculations and references resolved.
153
141
  */
154
142
  computeOklch(context: ColorEvaluationContext): string;
155
- /**
156
- * Uses the equation and provided context to compute a static
157
- * sRGB color string with calculations and references resolved.
158
- * This is not as accurate as computeOklch, as it converts to sRGB gamut.
159
- */
160
- computeSrgb(context: ColorEvaluationContext): string;
161
- /**
162
- * Uses the equation and provided context to compute a static
163
- * HEX color string with calculations and references resolved.
164
- * This is not as accurate as computeOklch, as it converts to sRGB gamut.
165
- */
166
- computeHex(context: ColorEvaluationContext): string;
167
143
  /**
168
144
  * Returns the raw computed L, C, H values as numbers with units.
169
145
  */
@@ -393,38 +369,6 @@ export function oklchBuilder(
393
369
  const h = printEquation(equations.h, context);
394
370
  return `oklch(calc(${l}) calc(${c}) calc(${h}))`;
395
371
  },
396
- computeSrgb(context: ColorEvaluationContext): string {
397
- const l = computeEquation(equations.l, context);
398
- const c = computeEquation(equations.c, context);
399
- const h = computeEquation(equations.h, context);
400
- const asColor: PlainColorObject = {
401
- space: OKLCH,
402
- alpha: 1,
403
- coords: [
404
- resolveComputationResult(l, [0, 1]),
405
- resolveComputationResult(c, [0, 0.4]),
406
- resolveComputationResult(h, [0, 360]),
407
- ],
408
- };
409
- return serialize(toGamut(convert(asColor, 'srgb'), {}));
410
- },
411
- computeHex(context: ColorEvaluationContext): string {
412
- const l = computeEquation(equations.l, context);
413
- const c = computeEquation(equations.c, context);
414
- const h = computeEquation(equations.h, context);
415
- const asColor: PlainColorObject = {
416
- space: OKLCH,
417
- alpha: 1,
418
- coords: [
419
- resolveComputationResult(l, [0, 1]),
420
- resolveComputationResult(c, [0, 0.4]),
421
- resolveComputationResult(h, [0, 360]),
422
- ],
423
- };
424
- return serialize(toGamut(convert(asColor, 'srgb')), {
425
- format: 'hex',
426
- });
427
- },
428
372
  computeOklch(context: ColorEvaluationContext): string {
429
373
  const l = computeEquation(equations.l, context);
430
374
  const c = computeEquation(equations.c, context);
@@ -21,6 +21,14 @@ export const theme: Theme = {
21
21
  boxShadow,
22
22
  easing,
23
23
  animation,
24
+ blur: {
25
+ sm: '2px',
26
+ md: '4px',
27
+ lg: '8px',
28
+ xl: '16px',
29
+ '2xl': '24px',
30
+ '3xl': '40px',
31
+ },
24
32
  zIndex: {
25
33
  nav: 'var(--z-nav)',
26
34
  menu: 'var(--z-menu)',
@@ -1,3 +0,0 @@
1
- export declare const oklch2rgb: (lch: number[]) => number[];
2
- export declare const rgb2oklch: (rgb: number[]) => number[];
3
- export declare const oklch2hex: (l: number, c: number, h: number) => string;
@@ -1,96 +0,0 @@
1
- // @unocss-include
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.oklch2hex = exports.rgb2oklch = exports.oklch2rgb = void 0;
5
- function clampByte(value) {
6
- return Math.min(255, Math.max(0, Math.round(value)));
7
- }
8
- const multiplyMatrices = (A, B) => {
9
- return [
10
- A[0] * B[0] + A[1] * B[1] + A[2] * B[2],
11
- A[3] * B[0] + A[4] * B[1] + A[5] * B[2],
12
- A[6] * B[0] + A[7] * B[1] + A[8] * B[2],
13
- ];
14
- };
15
- const oklch2oklab = ([l, c, h]) => [
16
- l,
17
- isNaN(h) ? 0 : c * Math.cos((h * Math.PI) / 180),
18
- isNaN(h) ? 0 : c * Math.sin((h * Math.PI) / 180),
19
- ];
20
- const oklab2oklch = ([l, a, b]) => [
21
- l,
22
- Math.sqrt(a ** 2 + b ** 2),
23
- Math.abs(a) < 0.0002 && Math.abs(b) < 0.0002
24
- ? NaN
25
- : ((((Math.atan2(b, a) * 180) / Math.PI) % 360) + 360) % 360,
26
- ];
27
- const rgb2srgbLinear = (rgb) => rgb.map((c) => Math.abs(c) <= 0.04045
28
- ? c / 12.92
29
- : (c < 0 ? -1 : 1) * ((Math.abs(c) + 0.055) / 1.055) ** 2.4);
30
- const srgbLinear2rgb = (rgb) => rgb.map((c) => Math.abs(c) > 0.0031308
31
- ? (c < 0 ? -1 : 1) * (1.055 * Math.abs(c) ** (1 / 2.4) - 0.055)
32
- : 12.92 * c);
33
- const oklab2xyz = (lab) => {
34
- const LMSg = multiplyMatrices([
35
- 1, 0.3963377773761749, 0.2158037573099136, 1, -0.1055613458156586,
36
- -0.0638541728258133, 1, -0.0894841775298119, -1.2914855480194092,
37
- ], lab);
38
- const LMS = LMSg.map((val) => val ** 3);
39
- return multiplyMatrices([
40
- 1.2268798758459243, -0.5578149944602171, 0.2813910456659647,
41
- -0.0405757452148008, 1.112286803280317, -0.0717110580655164,
42
- -0.0763729366746601, -0.4214933324022432, 1.5869240198367816,
43
- ], LMS);
44
- };
45
- const xyz2oklab = (xyz) => {
46
- const LMS = multiplyMatrices([
47
- 0.819022437996703, 0.3619062600528904, -0.1288737815209879,
48
- 0.0329836539323885, 0.9292868615863434, 0.0361446663506424,
49
- 0.0481771893596242, 0.2642395317527308, 0.6335478284694309,
50
- ], xyz);
51
- const LMSg = LMS.map((val) => Math.cbrt(val));
52
- return multiplyMatrices([
53
- 0.210454268309314, 0.7936177747023054, -0.0040720430116193,
54
- 1.9779985324311684, -2.4285922420485799, 0.450593709617411,
55
- 0.0259040424655478, 0.7827717124575296, -0.8086757549230774,
56
- ], LMSg);
57
- };
58
- const xyz2rgbLinear = (xyz) => {
59
- return multiplyMatrices([
60
- 3.2409699419045226, -1.537383177570094, -0.4986107602930034,
61
- -0.9692436362808796, 1.8759675015077202, 0.04155505740717559,
62
- 0.05563007969699366, -0.20397695888897652, 1.0569715142428786,
63
- ], xyz);
64
- };
65
- const rgbLinear2xyz = (rgb) => {
66
- return multiplyMatrices([
67
- 0.41239079926595934, 0.357584339383878, 0.1804807884018343,
68
- 0.21263900587151027, 0.715168678767756, 0.07219231536073371,
69
- 0.01933081871559182, 0.11919477979462598, 0.9505321522496607,
70
- ], rgb);
71
- };
72
- function rgb2Hex([r, g, b]) {
73
- return ('#' +
74
- [r, g, b]
75
- .map((x) => {
76
- if (x > 1) {
77
- x = 1;
78
- }
79
- else if (x < 0) {
80
- x = 0;
81
- }
82
- return Math.round(x * 255)
83
- .toString(16)
84
- .padStart(2, '0');
85
- })
86
- .join(''));
87
- }
88
- const oklch2rgb = (lch) => srgbLinear2rgb(xyz2rgbLinear(oklab2xyz(oklch2oklab(lch))));
89
- exports.oklch2rgb = oklch2rgb;
90
- const rgb2oklch = (rgb) => oklab2oklch(xyz2oklab(rgbLinear2xyz(rgb2srgbLinear(rgb))));
91
- exports.rgb2oklch = rgb2oklch;
92
- const oklch2hex = (l, c, h) => {
93
- return rgb2Hex((0, exports.oklch2rgb)([l, c, h]));
94
- };
95
- exports.oklch2hex = oklch2hex;
96
- //# sourceMappingURL=oklch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oklch.js","sourceRoot":"","sources":["../../../../src/uno/logic/oklch.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare const oklch2rgb: (lch: number[]) => number[];
2
- export declare const rgb2oklch: (rgb: number[]) => number[];
3
- export declare const oklch2hex: (l: number, c: number, h: number) => string;
@@ -1,90 +0,0 @@
1
- // @unocss-include
2
- function clampByte(value) {
3
- return Math.min(255, Math.max(0, Math.round(value)));
4
- }
5
- const multiplyMatrices = (A, B) => {
6
- return [
7
- A[0] * B[0] + A[1] * B[1] + A[2] * B[2],
8
- A[3] * B[0] + A[4] * B[1] + A[5] * B[2],
9
- A[6] * B[0] + A[7] * B[1] + A[8] * B[2],
10
- ];
11
- };
12
- const oklch2oklab = ([l, c, h]) => [
13
- l,
14
- isNaN(h) ? 0 : c * Math.cos((h * Math.PI) / 180),
15
- isNaN(h) ? 0 : c * Math.sin((h * Math.PI) / 180),
16
- ];
17
- const oklab2oklch = ([l, a, b]) => [
18
- l,
19
- Math.sqrt(a ** 2 + b ** 2),
20
- Math.abs(a) < 0.0002 && Math.abs(b) < 0.0002
21
- ? NaN
22
- : ((((Math.atan2(b, a) * 180) / Math.PI) % 360) + 360) % 360,
23
- ];
24
- const rgb2srgbLinear = (rgb) => rgb.map((c) => Math.abs(c) <= 0.04045
25
- ? c / 12.92
26
- : (c < 0 ? -1 : 1) * ((Math.abs(c) + 0.055) / 1.055) ** 2.4);
27
- const srgbLinear2rgb = (rgb) => rgb.map((c) => Math.abs(c) > 0.0031308
28
- ? (c < 0 ? -1 : 1) * (1.055 * Math.abs(c) ** (1 / 2.4) - 0.055)
29
- : 12.92 * c);
30
- const oklab2xyz = (lab) => {
31
- const LMSg = multiplyMatrices([
32
- 1, 0.3963377773761749, 0.2158037573099136, 1, -0.1055613458156586,
33
- -0.0638541728258133, 1, -0.0894841775298119, -1.2914855480194092,
34
- ], lab);
35
- const LMS = LMSg.map((val) => val ** 3);
36
- return multiplyMatrices([
37
- 1.2268798758459243, -0.5578149944602171, 0.2813910456659647,
38
- -0.0405757452148008, 1.112286803280317, -0.0717110580655164,
39
- -0.0763729366746601, -0.4214933324022432, 1.5869240198367816,
40
- ], LMS);
41
- };
42
- const xyz2oklab = (xyz) => {
43
- const LMS = multiplyMatrices([
44
- 0.819022437996703, 0.3619062600528904, -0.1288737815209879,
45
- 0.0329836539323885, 0.9292868615863434, 0.0361446663506424,
46
- 0.0481771893596242, 0.2642395317527308, 0.6335478284694309,
47
- ], xyz);
48
- const LMSg = LMS.map((val) => Math.cbrt(val));
49
- return multiplyMatrices([
50
- 0.210454268309314, 0.7936177747023054, -0.0040720430116193,
51
- 1.9779985324311684, -2.4285922420485799, 0.450593709617411,
52
- 0.0259040424655478, 0.7827717124575296, -0.8086757549230774,
53
- ], LMSg);
54
- };
55
- const xyz2rgbLinear = (xyz) => {
56
- return multiplyMatrices([
57
- 3.2409699419045226, -1.537383177570094, -0.4986107602930034,
58
- -0.9692436362808796, 1.8759675015077202, 0.04155505740717559,
59
- 0.05563007969699366, -0.20397695888897652, 1.0569715142428786,
60
- ], xyz);
61
- };
62
- const rgbLinear2xyz = (rgb) => {
63
- return multiplyMatrices([
64
- 0.41239079926595934, 0.357584339383878, 0.1804807884018343,
65
- 0.21263900587151027, 0.715168678767756, 0.07219231536073371,
66
- 0.01933081871559182, 0.11919477979462598, 0.9505321522496607,
67
- ], rgb);
68
- };
69
- function rgb2Hex([r, g, b]) {
70
- return ('#' +
71
- [r, g, b]
72
- .map((x) => {
73
- if (x > 1) {
74
- x = 1;
75
- }
76
- else if (x < 0) {
77
- x = 0;
78
- }
79
- return Math.round(x * 255)
80
- .toString(16)
81
- .padStart(2, '0');
82
- })
83
- .join(''));
84
- }
85
- export const oklch2rgb = (lch) => srgbLinear2rgb(xyz2rgbLinear(oklab2xyz(oklch2oklab(lch))));
86
- export const rgb2oklch = (rgb) => oklab2oklch(xyz2oklab(rgbLinear2xyz(rgb2srgbLinear(rgb))));
87
- export const oklch2hex = (l, c, h) => {
88
- return rgb2Hex(oklch2rgb([l, c, h]));
89
- };
90
- //# sourceMappingURL=oklch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oklch.js","sourceRoot":"","sources":["../../../../src/uno/logic/oklch.ts"],"names":[],"mappings":"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"}
@@ -1,120 +0,0 @@
1
- function clampByte(value: number) {
2
- return Math.min(255, Math.max(0, Math.round(value)));
3
- }
4
-
5
- const multiplyMatrices = (A: number[], B: number[]) => {
6
- return [
7
- A[0] * B[0] + A[1] * B[1] + A[2] * B[2],
8
- A[3] * B[0] + A[4] * B[1] + A[5] * B[2],
9
- A[6] * B[0] + A[7] * B[1] + A[8] * B[2],
10
- ];
11
- };
12
-
13
- const oklch2oklab = ([l, c, h]: number[]) => [
14
- l,
15
- isNaN(h) ? 0 : c * Math.cos((h * Math.PI) / 180),
16
- isNaN(h) ? 0 : c * Math.sin((h * Math.PI) / 180),
17
- ];
18
- const oklab2oklch = ([l, a, b]: number[]) => [
19
- l,
20
- Math.sqrt(a ** 2 + b ** 2),
21
- Math.abs(a) < 0.0002 && Math.abs(b) < 0.0002
22
- ? NaN
23
- : ((((Math.atan2(b, a) * 180) / Math.PI) % 360) + 360) % 360,
24
- ];
25
-
26
- const rgb2srgbLinear = (rgb: number[]) =>
27
- rgb.map((c) =>
28
- Math.abs(c) <= 0.04045
29
- ? c / 12.92
30
- : (c < 0 ? -1 : 1) * ((Math.abs(c) + 0.055) / 1.055) ** 2.4,
31
- );
32
- const srgbLinear2rgb = (rgb: number[]) =>
33
- rgb.map((c) =>
34
- Math.abs(c) > 0.0031308
35
- ? (c < 0 ? -1 : 1) * (1.055 * Math.abs(c) ** (1 / 2.4) - 0.055)
36
- : 12.92 * c,
37
- );
38
-
39
- const oklab2xyz = (lab: number[]) => {
40
- const LMSg = multiplyMatrices(
41
- [
42
- 1, 0.3963377773761749, 0.2158037573099136, 1, -0.1055613458156586,
43
- -0.0638541728258133, 1, -0.0894841775298119, -1.2914855480194092,
44
- ],
45
- lab,
46
- );
47
- const LMS = LMSg.map((val) => val ** 3);
48
- return multiplyMatrices(
49
- [
50
- 1.2268798758459243, -0.5578149944602171, 0.2813910456659647,
51
- -0.0405757452148008, 1.112286803280317, -0.0717110580655164,
52
- -0.0763729366746601, -0.4214933324022432, 1.5869240198367816,
53
- ],
54
- LMS,
55
- );
56
- };
57
- const xyz2oklab = (xyz: number[]) => {
58
- const LMS = multiplyMatrices(
59
- [
60
- 0.819022437996703, 0.3619062600528904, -0.1288737815209879,
61
- 0.0329836539323885, 0.9292868615863434, 0.0361446663506424,
62
- 0.0481771893596242, 0.2642395317527308, 0.6335478284694309,
63
- ],
64
- xyz,
65
- );
66
- const LMSg = LMS.map((val) => Math.cbrt(val));
67
- return multiplyMatrices(
68
- [
69
- 0.210454268309314, 0.7936177747023054, -0.0040720430116193,
70
- 1.9779985324311684, -2.4285922420485799, 0.450593709617411,
71
- 0.0259040424655478, 0.7827717124575296, -0.8086757549230774,
72
- ],
73
- LMSg,
74
- );
75
- };
76
- const xyz2rgbLinear = (xyz: number[]) => {
77
- return multiplyMatrices(
78
- [
79
- 3.2409699419045226, -1.537383177570094, -0.4986107602930034,
80
- -0.9692436362808796, 1.8759675015077202, 0.04155505740717559,
81
- 0.05563007969699366, -0.20397695888897652, 1.0569715142428786,
82
- ],
83
- xyz,
84
- );
85
- };
86
- const rgbLinear2xyz = (rgb: number[]) => {
87
- return multiplyMatrices(
88
- [
89
- 0.41239079926595934, 0.357584339383878, 0.1804807884018343,
90
- 0.21263900587151027, 0.715168678767756, 0.07219231536073371,
91
- 0.01933081871559182, 0.11919477979462598, 0.9505321522496607,
92
- ],
93
- rgb,
94
- );
95
- };
96
- function rgb2Hex([r, g, b]: number[]): string {
97
- return (
98
- '#' +
99
- [r, g, b]
100
- .map((x) => {
101
- if (x > 1) {
102
- x = 1;
103
- } else if (x < 0) {
104
- x = 0;
105
- }
106
- return Math.round(x * 255)
107
- .toString(16)
108
- .padStart(2, '0');
109
- })
110
- .join('')
111
- );
112
- }
113
-
114
- export const oklch2rgb = (lch: number[]) =>
115
- srgbLinear2rgb(xyz2rgbLinear(oklab2xyz(oklch2oklab(lch))));
116
- export const rgb2oklch = (rgb: number[]) =>
117
- oklab2oklch(xyz2oklab(rgbLinear2xyz(rgb2srgbLinear(rgb))));
118
- export const oklch2hex = (l: number, c: number, h: number): string => {
119
- return rgb2Hex(oklch2rgb([l, c, h]));
120
- };