@ankhorage/surface 0.0.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 (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +76 -0
  3. package/dist/context/FontContext.d.ts +20 -0
  4. package/dist/context/FontContext.d.ts.map +1 -0
  5. package/dist/context/FontContext.js +25 -0
  6. package/dist/context/FontContext.js.map +1 -0
  7. package/dist/context/TranslationContext.d.ts +22 -0
  8. package/dist/context/TranslationContext.d.ts.map +1 -0
  9. package/dist/context/TranslationContext.js +26 -0
  10. package/dist/context/TranslationContext.js.map +1 -0
  11. package/dist/core/responsive/ResponsiveProvider.d.ts +7 -0
  12. package/dist/core/responsive/ResponsiveProvider.d.ts.map +1 -0
  13. package/dist/core/responsive/ResponsiveProvider.js +20 -0
  14. package/dist/core/responsive/ResponsiveProvider.js.map +1 -0
  15. package/dist/core/responsive/breakpoints.d.ts +9 -0
  16. package/dist/core/responsive/breakpoints.d.ts.map +1 -0
  17. package/dist/core/responsive/breakpoints.js +9 -0
  18. package/dist/core/responsive/breakpoints.js.map +1 -0
  19. package/dist/core/responsive/getBreakpointFromWidth.d.ts +3 -0
  20. package/dist/core/responsive/getBreakpointFromWidth.d.ts.map +1 -0
  21. package/dist/core/responsive/getBreakpointFromWidth.js +10 -0
  22. package/dist/core/responsive/getBreakpointFromWidth.js.map +1 -0
  23. package/dist/core/responsive/index.d.ts +7 -0
  24. package/dist/core/responsive/index.d.ts.map +1 -0
  25. package/dist/core/responsive/index.js +6 -0
  26. package/dist/core/responsive/index.js.map +1 -0
  27. package/dist/core/responsive/resolve.d.ts +3 -0
  28. package/dist/core/responsive/resolve.d.ts.map +1 -0
  29. package/dist/core/responsive/resolve.js +21 -0
  30. package/dist/core/responsive/resolve.js.map +1 -0
  31. package/dist/core/responsive/types.d.ts +8 -0
  32. package/dist/core/responsive/types.d.ts.map +1 -0
  33. package/dist/core/responsive/types.js +2 -0
  34. package/dist/core/responsive/types.js.map +1 -0
  35. package/dist/core/responsive/useBreakpoint.d.ts +3 -0
  36. package/dist/core/responsive/useBreakpoint.d.ts.map +1 -0
  37. package/dist/core/responsive/useBreakpoint.js +7 -0
  38. package/dist/core/responsive/useBreakpoint.js.map +1 -0
  39. package/dist/index.d.ts +14 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +10 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/layout/Box.d.ts +10 -0
  44. package/dist/layout/Box.d.ts.map +1 -0
  45. package/dist/layout/Box.js +34 -0
  46. package/dist/layout/Box.js.map +1 -0
  47. package/dist/layout/Container.d.ts +11 -0
  48. package/dist/layout/Container.d.ts.map +1 -0
  49. package/dist/layout/Container.js +24 -0
  50. package/dist/layout/Container.js.map +1 -0
  51. package/dist/layout/Grid.d.ts +14 -0
  52. package/dist/layout/Grid.d.ts.map +1 -0
  53. package/dist/layout/Grid.js +51 -0
  54. package/dist/layout/Grid.js.map +1 -0
  55. package/dist/layout/Show.d.ts +9 -0
  56. package/dist/layout/Show.d.ts.map +1 -0
  57. package/dist/layout/Show.js +8 -0
  58. package/dist/layout/Show.js.map +1 -0
  59. package/dist/layout/Stack.d.ts +14 -0
  60. package/dist/layout/Stack.d.ts.map +1 -0
  61. package/dist/layout/Stack.js +37 -0
  62. package/dist/layout/Stack.js.map +1 -0
  63. package/dist/layout/Template.d.ts +18 -0
  64. package/dist/layout/Template.d.ts.map +1 -0
  65. package/dist/layout/Template.js +36 -0
  66. package/dist/layout/Template.js.map +1 -0
  67. package/dist/layout/helpers.d.ts +56 -0
  68. package/dist/layout/helpers.d.ts.map +1 -0
  69. package/dist/layout/helpers.js +91 -0
  70. package/dist/layout/helpers.js.map +1 -0
  71. package/dist/layout/index.d.ts +13 -0
  72. package/dist/layout/index.d.ts.map +1 -0
  73. package/dist/layout/index.js +7 -0
  74. package/dist/layout/index.js.map +1 -0
  75. package/dist/primitives/heading/Heading.d.ts +4 -0
  76. package/dist/primitives/heading/Heading.d.ts.map +1 -0
  77. package/dist/primitives/heading/Heading.js +30 -0
  78. package/dist/primitives/heading/Heading.js.map +1 -0
  79. package/dist/primitives/heading/index.d.ts +3 -0
  80. package/dist/primitives/heading/index.d.ts.map +1 -0
  81. package/dist/primitives/heading/index.js +2 -0
  82. package/dist/primitives/heading/index.js.map +1 -0
  83. package/dist/primitives/heading/resolveHeadingStyle.d.ts +5 -0
  84. package/dist/primitives/heading/resolveHeadingStyle.d.ts.map +1 -0
  85. package/dist/primitives/heading/resolveHeadingStyle.js +20 -0
  86. package/dist/primitives/heading/resolveHeadingStyle.js.map +1 -0
  87. package/dist/primitives/heading/types.d.ts +12 -0
  88. package/dist/primitives/heading/types.d.ts.map +1 -0
  89. package/dist/primitives/heading/types.js +2 -0
  90. package/dist/primitives/heading/types.js.map +1 -0
  91. package/dist/primitives/icon/Icon.d.ts +20 -0
  92. package/dist/primitives/icon/Icon.d.ts.map +1 -0
  93. package/dist/primitives/icon/Icon.js +19 -0
  94. package/dist/primitives/icon/Icon.js.map +1 -0
  95. package/dist/primitives/icon/index.d.ts +3 -0
  96. package/dist/primitives/icon/index.d.ts.map +1 -0
  97. package/dist/primitives/icon/index.js +2 -0
  98. package/dist/primitives/icon/index.js.map +1 -0
  99. package/dist/primitives/icon/resolveExpoIconComponent.d.ts +11 -0
  100. package/dist/primitives/icon/resolveExpoIconComponent.d.ts.map +1 -0
  101. package/dist/primitives/icon/resolveExpoIconComponent.js +24 -0
  102. package/dist/primitives/icon/resolveExpoIconComponent.js.map +1 -0
  103. package/dist/theme/ThemeContext.d.ts +27 -0
  104. package/dist/theme/ThemeContext.d.ts.map +1 -0
  105. package/dist/theme/ThemeContext.js +53 -0
  106. package/dist/theme/ThemeContext.js.map +1 -0
  107. package/dist/theme/colorEngine.d.ts +22 -0
  108. package/dist/theme/colorEngine.d.ts.map +1 -0
  109. package/dist/theme/colorEngine.js +348 -0
  110. package/dist/theme/colorEngine.js.map +1 -0
  111. package/dist/theme/createTheme.d.ts +5 -0
  112. package/dist/theme/createTheme.d.ts.map +1 -0
  113. package/dist/theme/createTheme.js +109 -0
  114. package/dist/theme/createTheme.js.map +1 -0
  115. package/dist/theme/index.d.ts +6 -0
  116. package/dist/theme/index.d.ts.map +1 -0
  117. package/dist/theme/index.js +6 -0
  118. package/dist/theme/index.js.map +1 -0
  119. package/dist/theme/resolveToken.d.ts +12 -0
  120. package/dist/theme/resolveToken.d.ts.map +1 -0
  121. package/dist/theme/resolveToken.js +19 -0
  122. package/dist/theme/resolveToken.js.map +1 -0
  123. package/dist/theme/types.d.ts +133 -0
  124. package/dist/theme/types.d.ts.map +1 -0
  125. package/dist/theme/types.js +2 -0
  126. package/dist/theme/types.js.map +1 -0
  127. package/dist/utils/deepEqual.d.ts +6 -0
  128. package/dist/utils/deepEqual.d.ts.map +1 -0
  129. package/dist/utils/deepEqual.js +36 -0
  130. package/dist/utils/deepEqual.js.map +1 -0
  131. package/dist/utils/deepMerge.d.ts +6 -0
  132. package/dist/utils/deepMerge.d.ts.map +1 -0
  133. package/dist/utils/deepMerge.js +26 -0
  134. package/dist/utils/deepMerge.js.map +1 -0
  135. package/package.json +62 -0
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 2. The Generic Function
3
+ */
4
+ export function resolveToken(map, value) {
5
+ // Undefined check
6
+ if (value === undefined) {
7
+ return undefined;
8
+ }
9
+ // Runtime check: Is 'value' a key in 'map'?
10
+ if ((typeof value === 'string' || typeof value === 'number') &&
11
+ Object.prototype.hasOwnProperty.call(map, value)) {
12
+ // Return the mapped token
13
+ // We cast to the specific conditional type, strictly safer than 'any'
14
+ return map[value];
15
+ }
16
+ // Fallback: Return raw value
17
+ return value;
18
+ }
19
+ //# sourceMappingURL=resolveToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveToken.js","sourceRoot":"","sources":["../../src/theme/resolveToken.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,UAAU,YAAY,CAG1B,GAAS,EAAE,KAAa;IACxB,kBAAkB;IAClB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAwC,CAAC;IAClD,CAAC;IAED,4CAA4C;IAC5C,IACE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAChD,CAAC;QACD,0BAA0B;QAC1B,sEAAsE;QACtE,OAAO,GAAG,CAAC,KAAmB,CAAgC,CAAC;IACjE,CAAC;IAED,6BAA6B;IAC7B,OAAO,KAAoC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,133 @@
1
+ import type { ThemeConfig as ContractsThemeConfig } from '@ankhorage/contracts';
2
+ export type { ColorHarmony, SystemTone, ThemeConfig, ThemeModeConfig } from '@ankhorage/contracts';
3
+ export type ColorTone = 'jewel' | 'earth' | 'fluorescent' | 'grayscale' | 'pastel';
4
+ export interface ColorScale {
5
+ [key: number]: string;
6
+ 50: string;
7
+ 100: string;
8
+ 200: string;
9
+ 300: string;
10
+ 400: string;
11
+ 500: string;
12
+ 600: string;
13
+ 700: string;
14
+ 800: string;
15
+ 900: string;
16
+ 950: string;
17
+ }
18
+ export interface NeutralSemantics {
19
+ bg: string;
20
+ bgSubtle: string;
21
+ surface: string;
22
+ surfaceHover: string;
23
+ surfaceActive: string;
24
+ border: string;
25
+ borderStrong: string;
26
+ divider: string;
27
+ text: string;
28
+ textMuted: string;
29
+ textSubtle: string;
30
+ }
31
+ export interface RoleSemantics {
32
+ base: string;
33
+ hover: string;
34
+ strong: string;
35
+ softBg: string;
36
+ softHover: string;
37
+ softActive: string;
38
+ outline: string;
39
+ onSolidText: string;
40
+ }
41
+ export type FontWeight = '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'bold' | 'normal';
42
+ export interface ThemeTokens {
43
+ colors: {
44
+ primary: string;
45
+ secondary: string;
46
+ accent: string;
47
+ highlight: string;
48
+ background: string;
49
+ surface: string;
50
+ text: string;
51
+ textSecondary: string;
52
+ border: string;
53
+ error: string;
54
+ success: string;
55
+ warning: string;
56
+ [key: string]: string;
57
+ };
58
+ scales: Record<string, ColorScale>;
59
+ semantics: {
60
+ neutral: NeutralSemantics;
61
+ brand: RoleSemantics;
62
+ secondary: RoleSemantics;
63
+ accent: RoleSemantics;
64
+ highlight: RoleSemantics;
65
+ };
66
+ spacing: {
67
+ none: 0;
68
+ xs: number;
69
+ s: number;
70
+ m: number;
71
+ l: number;
72
+ xl: number;
73
+ xxl: number;
74
+ [key: string]: number;
75
+ };
76
+ radii: {
77
+ none: 0;
78
+ s: number;
79
+ m: number;
80
+ l: number;
81
+ full: number;
82
+ };
83
+ typography: {
84
+ headings: Record<1 | 2 | 3 | 4 | 5 | 6, {
85
+ size: number;
86
+ lineHeight: number;
87
+ weight: 'regular' | 'medium' | 'semiBold' | 'bold';
88
+ }>;
89
+ sizes: {
90
+ xs: number;
91
+ s: number;
92
+ m: number;
93
+ l: number;
94
+ xl: number;
95
+ xxl: number;
96
+ '3xl': number;
97
+ h1: number;
98
+ h2: number;
99
+ h3: number;
100
+ h4: number;
101
+ h5: number;
102
+ h6: number;
103
+ [key: string]: number;
104
+ };
105
+ weights: {
106
+ thin: FontWeight;
107
+ extraLight: FontWeight;
108
+ light: FontWeight;
109
+ regular: FontWeight;
110
+ medium: FontWeight;
111
+ semiBold: FontWeight;
112
+ bold: FontWeight;
113
+ extraBold: FontWeight;
114
+ black: FontWeight;
115
+ };
116
+ fonts: {
117
+ /** Map of weight -> fontFamily name for normal style */
118
+ normal: Record<FontWeight, string | undefined>;
119
+ /** Map of weight -> fontFamily name for italic style */
120
+ italic: Record<FontWeight, string | undefined>;
121
+ };
122
+ };
123
+ shadows: {
124
+ soft: number;
125
+ medium: number;
126
+ hard: number;
127
+ [key: string]: number;
128
+ };
129
+ }
130
+ export interface AnkhTheme extends ThemeTokens {
131
+ config: ContractsThemeConfig;
132
+ }
133
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Simple deep equality check for JSON-serializable objects.
3
+ * Efficient enough for UI manifests.
4
+ */
5
+ export declare const isDeepEqual: (a: unknown, b: unknown) => boolean;
6
+ //# sourceMappingURL=deepEqual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepEqual.d.ts","sourceRoot":"","sources":["../../src/utils/deepEqual.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,OAAO,EAAE,GAAG,OAAO,KAAG,OA6BpD,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Simple deep equality check for JSON-serializable objects.
3
+ * Efficient enough for UI manifests.
4
+ */
5
+ export const isDeepEqual = (a, b) => {
6
+ if (a === b)
7
+ return true;
8
+ if (a && b && typeof a === 'object' && typeof b === 'object') {
9
+ if (Array.isArray(a)) {
10
+ if (!Array.isArray(b) || a.length !== b.length)
11
+ return false;
12
+ for (let i = 0; i < a.length; i++) {
13
+ if (!isDeepEqual(a[i], b[i]))
14
+ return false;
15
+ }
16
+ return true;
17
+ }
18
+ if (Array.isArray(b))
19
+ return false;
20
+ const keysA = Object.keys(a);
21
+ const keysB = Object.keys(b);
22
+ if (keysA.length !== keysB.length)
23
+ return false;
24
+ const objA = a;
25
+ const objB = b;
26
+ for (const key of keysA) {
27
+ if (!Object.prototype.hasOwnProperty.call(objB, key))
28
+ return false;
29
+ if (!isDeepEqual(objA[key], objB[key]))
30
+ return false;
31
+ }
32
+ return true;
33
+ }
34
+ return Number.isNaN(a) && Number.isNaN(b);
35
+ };
36
+ //# sourceMappingURL=deepEqual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepEqual.js","sourceRoot":"","sources":["../../src/utils/deepEqual.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE;IAC7D,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC7C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEhD,MAAM,IAAI,GAAG,CAA4B,CAAC;QAC1C,MAAM,IAAI,GAAG,CAA4B,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YACnE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Performs a deep merge of `source` into `target`.
3
+ * Specifically handles the nested structure of ThemeConfig (light/dark objects).
4
+ */
5
+ export declare function deepMerge<T extends object>(target: T, source: Partial<T>): T;
6
+ //# sourceMappingURL=deepMerge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../src/utils/deepMerge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAwB5E"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Performs a deep merge of `source` into `target`.
3
+ * Specifically handles the nested structure of ThemeConfig (light/dark objects).
4
+ */
5
+ export function deepMerge(target, source) {
6
+ const result = { ...target };
7
+ Object.keys(source).forEach((key) => {
8
+ const sourceValue = source[key];
9
+ const targetValue = target[key];
10
+ if (sourceValue &&
11
+ typeof sourceValue === 'object' &&
12
+ !Array.isArray(sourceValue) &&
13
+ targetValue &&
14
+ typeof targetValue === 'object' &&
15
+ !Array.isArray(targetValue)) {
16
+ // Recursively merge nested objects
17
+ result[key] = deepMerge(targetValue, sourceValue);
18
+ }
19
+ else if (sourceValue !== undefined) {
20
+ // Direct assignment for non-object values or if target doesn't have an object to merge with
21
+ result[key] = sourceValue;
22
+ }
23
+ });
24
+ return result;
25
+ }
26
+ //# sourceMappingURL=deepMerge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepMerge.js","sourceRoot":"","sources":["../../src/utils/deepMerge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAmB,MAAS,EAAE,MAAkB;IACvE,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAEhC,IACE,WAAW;YACX,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3B,WAAW;YACX,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAC3B,CAAC;YACD,mCAAmC;YACnC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,WAAqB,EAAE,WAAqB,CAAe,CAAC;QACtF,CAAC;aAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,4FAA4F;YAC5F,MAAM,CAAC,GAAG,CAAC,GAAG,WAAyB,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@ankhorage/surface",
3
+ "type": "module",
4
+ "version": "0.0.1",
5
+ "description": "Render foundation for Ankhorage and standalone React Native or Expo apps.",
6
+ "license": "MIT",
7
+ "main": "./dist/index.js",
8
+ "sideEffects": false,
9
+ "types": "./dist/index.d.ts",
10
+ "peerDependencies": {
11
+ "@expo/vector-icons": ">=14.0.0",
12
+ "expo-font": ">=14.0.4",
13
+ "react": ">=18.2.0",
14
+ "react-native": ">=0.72.0"
15
+ },
16
+ "peerDependenciesMeta": {
17
+ "@expo/vector-icons": {
18
+ "optional": true
19
+ },
20
+ "expo-font": {
21
+ "optional": true
22
+ }
23
+ },
24
+ "dependencies": {
25
+ "@ankhorage/contracts": "^0.0.1",
26
+ "culori": "^4.0.2"
27
+ },
28
+ "files": [
29
+ "dist"
30
+ ],
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "default": "./dist/index.js"
35
+ }
36
+ },
37
+ "publishConfig": {
38
+ "access": "public"
39
+ },
40
+ "scripts": {
41
+ "build": "rm -rf dist tsconfig.tsbuildinfo && bun x tsc -p tsconfig.json",
42
+ "lint": "eslint src --max-warnings=0",
43
+ "lint:fix": "eslint src --fix --max-warnings=0",
44
+ "test": "bun test src"
45
+ },
46
+ "devDependencies": {
47
+ "@expo/vector-icons": "^15.0.3",
48
+ "@types/bun": "^1.3.8",
49
+ "@types/culori": "^4.0.1",
50
+ "@types/node": "^25.2.3",
51
+ "@types/react": "^19.2.14",
52
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
53
+ "@typescript-eslint/parser": "^8.0.0",
54
+ "eslint": "^9.0.0",
55
+ "eslint-plugin-simple-import-sort": "^12.1.1",
56
+ "eslint-plugin-unused-imports": "^4.4.1",
57
+ "react": "19.1.0",
58
+ "react-native": "0.81.5",
59
+ "typescript": "^5.9.3"
60
+ },
61
+ "packageManager": "bun@1.3.11"
62
+ }