@ankhorage/zora 0.16.2 → 1.0.0

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 (114) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +11 -13
  3. package/dist/components/heading/resolveHeadingRecipe.d.ts +2 -2
  4. package/dist/components/heading/resolveHeadingRecipe.d.ts.map +1 -1
  5. package/dist/components/heading/resolveHeadingRecipe.js.map +1 -1
  6. package/dist/components/text/resolveTextRecipe.d.ts +2 -2
  7. package/dist/components/text/resolveTextRecipe.d.ts.map +1 -1
  8. package/dist/components/text/resolveTextRecipe.js.map +1 -1
  9. package/dist/patterns/theme-composer/ThemeComposer.d.ts.map +1 -1
  10. package/dist/patterns/theme-composer/ThemeComposer.js +10 -86
  11. package/dist/patterns/theme-composer/ThemeComposer.js.map +1 -1
  12. package/dist/patterns/theme-composer/index.d.ts +1 -1
  13. package/dist/patterns/theme-composer/index.d.ts.map +1 -1
  14. package/dist/patterns/theme-composer/index.js.map +1 -1
  15. package/dist/patterns/theme-composer/types.d.ts +1 -13
  16. package/dist/patterns/theme-composer/types.d.ts.map +1 -1
  17. package/dist/patterns/theme-composer/types.js.map +1 -1
  18. package/dist/theme/createZoraThemeConfig.d.ts +1 -1
  19. package/dist/theme/createZoraThemeConfig.d.ts.map +1 -1
  20. package/dist/theme/createZoraThemeConfig.js +5 -6
  21. package/dist/theme/createZoraThemeConfig.js.map +1 -1
  22. package/dist/theme/index.d.ts +1 -1
  23. package/dist/theme/index.d.ts.map +1 -1
  24. package/dist/theme/index.js.map +1 -1
  25. package/dist/theme/types.d.ts +16 -11
  26. package/dist/theme/types.d.ts.map +1 -1
  27. package/dist/theme/types.js +1 -20
  28. package/dist/theme/types.js.map +1 -1
  29. package/dist/theme/useZoraTheme.d.ts +1 -1
  30. package/dist/theme/zoraDefaultTheme.js +1 -1
  31. package/dist/theme/zoraDefaultTheme.js.map +1 -1
  32. package/package.json +4 -4
  33. package/src/components/heading/resolveHeadingRecipe.test.ts +30 -5
  34. package/src/components/heading/resolveHeadingRecipe.ts +6 -6
  35. package/src/components/text/resolveTextRecipe.test.ts +30 -5
  36. package/src/components/text/resolveTextRecipe.ts +6 -6
  37. package/src/patterns/theme-composer/ThemeComposer.test.ts +9 -141
  38. package/src/patterns/theme-composer/ThemeComposer.tsx +10 -131
  39. package/src/patterns/theme-composer/index.ts +1 -6
  40. package/src/patterns/theme-composer/types.ts +1 -15
  41. package/src/showcaseCoverage.test.ts +14 -0
  42. package/src/theme/createZoraThemeConfig.test.ts +51 -26
  43. package/src/theme/createZoraThemeConfig.ts +7 -7
  44. package/src/theme/index.ts +1 -3
  45. package/src/theme/types.ts +22 -34
  46. package/src/theme/zoraDefaultTheme.ts +1 -1
  47. package/dist/internal/color/colorToneRecipes.d.ts +0 -23
  48. package/dist/internal/color/colorToneRecipes.d.ts.map +0 -1
  49. package/dist/internal/color/colorToneRecipes.js +0 -139
  50. package/dist/internal/color/colorToneRecipes.js.map +0 -1
  51. package/dist/internal/color/harmony.d.ts +0 -12
  52. package/dist/internal/color/harmony.d.ts.map +0 -1
  53. package/dist/internal/color/harmony.js +0 -69
  54. package/dist/internal/color/harmony.js.map +0 -1
  55. package/dist/internal/color/hue.d.ts +0 -3
  56. package/dist/internal/color/hue.d.ts.map +0 -1
  57. package/dist/internal/color/hue.js +0 -7
  58. package/dist/internal/color/hue.js.map +0 -1
  59. package/dist/internal/color/index.d.ts +0 -10
  60. package/dist/internal/color/index.d.ts.map +0 -1
  61. package/dist/internal/color/index.js +0 -10
  62. package/dist/internal/color/index.js.map +0 -1
  63. package/dist/internal/color/oklch.d.ts +0 -6
  64. package/dist/internal/color/oklch.d.ts.map +0 -1
  65. package/dist/internal/color/oklch.js +0 -50
  66. package/dist/internal/color/oklch.js.map +0 -1
  67. package/dist/internal/color/primary.d.ts +0 -3
  68. package/dist/internal/color/primary.d.ts.map +0 -1
  69. package/dist/internal/color/primary.js +0 -44
  70. package/dist/internal/color/primary.js.map +0 -1
  71. package/dist/internal/color/roleHues.d.ts +0 -15
  72. package/dist/internal/color/roleHues.d.ts.map +0 -1
  73. package/dist/internal/color/roleHues.js +0 -103
  74. package/dist/internal/color/roleHues.js.map +0 -1
  75. package/dist/internal/color/roleScales.d.ts +0 -20
  76. package/dist/internal/color/roleScales.d.ts.map +0 -1
  77. package/dist/internal/color/roleScales.js +0 -79
  78. package/dist/internal/color/roleScales.js.map +0 -1
  79. package/dist/internal/color/scales.d.ts +0 -19
  80. package/dist/internal/color/scales.d.ts.map +0 -1
  81. package/dist/internal/color/scales.js +0 -135
  82. package/dist/internal/color/scales.js.map +0 -1
  83. package/dist/internal/color/semanticTokens.d.ts +0 -28
  84. package/dist/internal/color/semanticTokens.d.ts.map +0 -1
  85. package/dist/internal/color/semanticTokens.js +0 -84
  86. package/dist/internal/color/semanticTokens.js.map +0 -1
  87. package/dist/internal/color/types.d.ts +0 -10
  88. package/dist/internal/color/types.d.ts.map +0 -1
  89. package/dist/internal/color/types.js +0 -4
  90. package/dist/internal/color/types.js.map +0 -1
  91. package/dist/patterns/theme-composer/recommendations.d.ts +0 -14
  92. package/dist/patterns/theme-composer/recommendations.d.ts.map +0 -1
  93. package/dist/patterns/theme-composer/recommendations.js +0 -58
  94. package/dist/patterns/theme-composer/recommendations.js.map +0 -1
  95. package/src/internal/color/colorToneRecipes.test.ts +0 -89
  96. package/src/internal/color/colorToneRecipes.ts +0 -167
  97. package/src/internal/color/harmony.test.ts +0 -145
  98. package/src/internal/color/harmony.ts +0 -96
  99. package/src/internal/color/hue.test.ts +0 -28
  100. package/src/internal/color/hue.ts +0 -7
  101. package/src/internal/color/index.ts +0 -44
  102. package/src/internal/color/oklch.ts +0 -65
  103. package/src/internal/color/primary.test.ts +0 -105
  104. package/src/internal/color/primary.ts +0 -64
  105. package/src/internal/color/roleHues.test.ts +0 -197
  106. package/src/internal/color/roleHues.ts +0 -142
  107. package/src/internal/color/roleScales.test.ts +0 -220
  108. package/src/internal/color/roleScales.ts +0 -127
  109. package/src/internal/color/scales.test.ts +0 -151
  110. package/src/internal/color/scales.ts +0 -194
  111. package/src/internal/color/semanticTokens.test.ts +0 -170
  112. package/src/internal/color/semanticTokens.ts +0 -114
  113. package/src/internal/color/types.ts +0 -15
  114. package/src/patterns/theme-composer/recommendations.ts +0 -85
@@ -1,12 +0,0 @@
1
- import type { ZoraColorHarmony, ZoraHexColor } from '../../theme/types';
2
- export type ZoraHarmonySlotId = 'base' | 'a' | 'b' | 'c';
3
- export interface ZoraHarmonySlot {
4
- id: ZoraHarmonySlotId;
5
- hue: number;
6
- }
7
- export interface ZoraComputedHarmony {
8
- kind: ZoraColorHarmony;
9
- orderedSlots: readonly ZoraHarmonySlot[];
10
- }
11
- export declare function computeZoraHarmony(seed: ZoraHexColor, harmony: ZoraColorHarmony): ZoraComputedHarmony;
12
- //# sourceMappingURL=harmony.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harmony.d.ts","sourceRoot":"","sources":["../../../src/internal/color/harmony.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIxE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,iBAAiB,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,gBAAgB,CAAC;IACvB,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;CAC1C;AAmBD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,gBAAgB,GACxB,mBAAmB,CA2DrB"}
@@ -1,69 +0,0 @@
1
- import { normalizeHueDegrees, rotateHueDegrees } from './hue';
2
- import { parseHexToOklch } from './oklch';
3
- const DEFAULT_HARMONY_HUE_DEGREES = 260;
4
- const MIN_SEED_CHROMA_FOR_HARMONY_HUE = 0.03;
5
- function createSlot(id, hue) {
6
- return { id, hue: normalizeHueDegrees(hue) };
7
- }
8
- function resolveSeedHueDegrees(seed) {
9
- const parsed = parseHexToOklch(seed);
10
- if (!Number.isFinite(parsed.h) || parsed.c < MIN_SEED_CHROMA_FOR_HARMONY_HUE) {
11
- return DEFAULT_HARMONY_HUE_DEGREES;
12
- }
13
- return normalizeHueDegrees(parsed.h);
14
- }
15
- export function computeZoraHarmony(seed, harmony) {
16
- const baseHue = resolveSeedHueDegrees(seed);
17
- if (harmony === 'monochromatic') {
18
- return {
19
- kind: harmony,
20
- orderedSlots: [createSlot('base', baseHue)],
21
- };
22
- }
23
- if (harmony === 'complementary') {
24
- return {
25
- kind: harmony,
26
- orderedSlots: [createSlot('base', baseHue), createSlot('a', rotateHueDegrees(baseHue, 180))],
27
- };
28
- }
29
- if (harmony === 'analogous') {
30
- return {
31
- kind: harmony,
32
- orderedSlots: [
33
- createSlot('base', baseHue),
34
- createSlot('a', rotateHueDegrees(baseHue, -30)),
35
- createSlot('b', rotateHueDegrees(baseHue, 30)),
36
- ],
37
- };
38
- }
39
- if (harmony === 'splitComplementary') {
40
- return {
41
- kind: harmony,
42
- orderedSlots: [
43
- createSlot('base', baseHue),
44
- createSlot('a', rotateHueDegrees(baseHue, 150)),
45
- createSlot('b', rotateHueDegrees(baseHue, 210)),
46
- ],
47
- };
48
- }
49
- if (harmony === 'triadic') {
50
- return {
51
- kind: harmony,
52
- orderedSlots: [
53
- createSlot('base', baseHue),
54
- createSlot('a', rotateHueDegrees(baseHue, 120)),
55
- createSlot('b', rotateHueDegrees(baseHue, 240)),
56
- ],
57
- };
58
- }
59
- return {
60
- kind: harmony,
61
- orderedSlots: [
62
- createSlot('base', baseHue),
63
- createSlot('a', rotateHueDegrees(baseHue, 90)),
64
- createSlot('b', rotateHueDegrees(baseHue, 180)),
65
- createSlot('c', rotateHueDegrees(baseHue, 270)),
66
- ],
67
- };
68
- }
69
- //# sourceMappingURL=harmony.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harmony.js","sourceRoot":"","sources":["../../../src/internal/color/harmony.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZoraColorHarmony, ZoraHexColor } from '../../theme/types';\nimport { normalizeHueDegrees, rotateHueDegrees } from './hue';\nimport { parseHexToOklch } from './oklch';\n\nexport type ZoraHarmonySlotId = 'base' | 'a' | 'b' | 'c';\n\nexport interface ZoraHarmonySlot {\n id: ZoraHarmonySlotId;\n hue: number;\n}\n\nexport interface ZoraComputedHarmony {\n kind: ZoraColorHarmony;\n orderedSlots: readonly ZoraHarmonySlot[];\n}\n\nconst DEFAULT_HARMONY_HUE_DEGREES = 260;\nconst MIN_SEED_CHROMA_FOR_HARMONY_HUE = 0.03;\n\nfunction createSlot(id: ZoraHarmonySlotId, hue: number): ZoraHarmonySlot {\n return { id, hue: normalizeHueDegrees(hue) };\n}\n\nfunction resolveSeedHueDegrees(seed: ZoraHexColor): number {\n const parsed = parseHexToOklch(seed);\n\n if (!Number.isFinite(parsed.h) || parsed.c < MIN_SEED_CHROMA_FOR_HARMONY_HUE) {\n return DEFAULT_HARMONY_HUE_DEGREES;\n }\n\n return normalizeHueDegrees(parsed.h);\n}\n\nexport function computeZoraHarmony(\n seed: ZoraHexColor,\n harmony: ZoraColorHarmony,\n): ZoraComputedHarmony {\n const baseHue = resolveSeedHueDegrees(seed);\n\n if (harmony === 'monochromatic') {\n return {\n kind: harmony,\n orderedSlots: [createSlot('base', baseHue)],\n };\n }\n\n if (harmony === 'complementary') {\n return {\n kind: harmony,\n orderedSlots: [createSlot('base', baseHue), createSlot('a', rotateHueDegrees(baseHue, 180))],\n };\n }\n\n if (harmony === 'analogous') {\n return {\n kind: harmony,\n orderedSlots: [\n createSlot('base', baseHue),\n createSlot('a', rotateHueDegrees(baseHue, -30)),\n createSlot('b', rotateHueDegrees(baseHue, 30)),\n ],\n };\n }\n\n if (harmony === 'splitComplementary') {\n return {\n kind: harmony,\n orderedSlots: [\n createSlot('base', baseHue),\n createSlot('a', rotateHueDegrees(baseHue, 150)),\n createSlot('b', rotateHueDegrees(baseHue, 210)),\n ],\n };\n }\n\n if (harmony === 'triadic') {\n return {\n kind: harmony,\n orderedSlots: [\n createSlot('base', baseHue),\n createSlot('a', rotateHueDegrees(baseHue, 120)),\n createSlot('b', rotateHueDegrees(baseHue, 240)),\n ],\n };\n }\n\n return {\n kind: harmony,\n orderedSlots: [\n createSlot('base', baseHue),\n createSlot('a', rotateHueDegrees(baseHue, 90)),\n createSlot('b', rotateHueDegrees(baseHue, 180)),\n createSlot('c', rotateHueDegrees(baseHue, 270)),\n ],\n };\n}\n"]}
@@ -1,3 +0,0 @@
1
- export declare function normalizeHueDegrees(hue: number): number;
2
- export declare function rotateHueDegrees(hue: number, delta: number): number;
3
- //# sourceMappingURL=hue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hue.d.ts","sourceRoot":"","sources":["../../../src/internal/color/hue.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE"}
@@ -1,7 +0,0 @@
1
- export function normalizeHueDegrees(hue) {
2
- return ((hue % 360) + 360) % 360;
3
- }
4
- export function rotateHueDegrees(hue, delta) {
5
- return normalizeHueDegrees(hue + delta);
6
- }
7
- //# sourceMappingURL=hue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hue.js","sourceRoot":"","sources":["../../../src/internal/color/hue.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,KAAa;IACzD,OAAO,mBAAmB,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["export function normalizeHueDegrees(hue: number): number {\n return ((hue % 360) + 360) % 360;\n}\n\nexport function rotateHueDegrees(hue: number, delta: number): number {\n return normalizeHueDegrees(hue + delta);\n}\n"]}
@@ -1,10 +0,0 @@
1
- export { getZoraColorToneRecipe, getZoraColorToneRoleChromaFactor, type ZoraColorToneLaneRecipe, type ZoraColorToneRecipe, type ZoraColorToneRoleChromaFactors, } from './colorToneRecipes';
2
- export { computeZoraHarmony, type ZoraComputedHarmony, type ZoraHarmonySlot, type ZoraHarmonySlotId, } from './harmony';
3
- export { parseHexToOklch } from './oklch';
4
- export { resolveModePrimaryColor } from './primary';
5
- export { assignZoraHarmonyRoleHues, getZoraHueRoleAssignment, type ZoraComputedHueRoles, type ZoraHueRoleAssignment, type ZoraHueRoleId, } from './roleHues';
6
- export { createZoraRoleColorScales, getZoraRoleColorScale, ZORA_COLOR_SCALE_ROLE_ORDER, type ZoraColorScaleRoleId, type ZoraComputedRoleColorScales, type ZoraRoleColorScale, } from './roleScales';
7
- export { createZoraColorScale, type CreateZoraColorScaleOptions, type CreateZoraHueScaleOptions, createZoraNeutralScale, createZoraPrimaryScale, type ZoraHueScaleRoleId, } from './scales';
8
- export { createZoraSemanticColorTokens, getReadableTextColor, type ZoraSemanticColorTokens, } from './semanticTokens';
9
- export { ZORA_COLOR_SCALE_STEPS, type ZoraColorScale, type ZoraColorScaleStep } from './types';
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/color/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,gCAAgC,EAChC,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,GACpC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,kBAAkB,GACxB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,KAAK,uBAAuB,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
@@ -1,10 +0,0 @@
1
- export { getZoraColorToneRecipe, getZoraColorToneRoleChromaFactor, } from './colorToneRecipes';
2
- export { computeZoraHarmony, } from './harmony';
3
- export { parseHexToOklch } from './oklch';
4
- export { resolveModePrimaryColor } from './primary';
5
- export { assignZoraHarmonyRoleHues, getZoraHueRoleAssignment, } from './roleHues';
6
- export { createZoraRoleColorScales, getZoraRoleColorScale, ZORA_COLOR_SCALE_ROLE_ORDER, } from './roleScales';
7
- export { createZoraColorScale, createZoraNeutralScale, createZoraPrimaryScale, } from './scales';
8
- export { createZoraSemanticColorTokens, getReadableTextColor, } from './semanticTokens';
9
- export { ZORA_COLOR_SCALE_STEPS } from './types';
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/internal/color/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,gCAAgC,GAIjC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,GAInB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GAIzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,GAI5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EAGpB,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,GAErB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAgD,MAAM,SAAS,CAAC","sourcesContent":["export {\n getZoraColorToneRecipe,\n getZoraColorToneRoleChromaFactor,\n type ZoraColorToneLaneRecipe,\n type ZoraColorToneRecipe,\n type ZoraColorToneRoleChromaFactors,\n} from './colorToneRecipes';\nexport {\n computeZoraHarmony,\n type ZoraComputedHarmony,\n type ZoraHarmonySlot,\n type ZoraHarmonySlotId,\n} from './harmony';\nexport { parseHexToOklch } from './oklch';\nexport { resolveModePrimaryColor } from './primary';\nexport {\n assignZoraHarmonyRoleHues,\n getZoraHueRoleAssignment,\n type ZoraComputedHueRoles,\n type ZoraHueRoleAssignment,\n type ZoraHueRoleId,\n} from './roleHues';\nexport {\n createZoraRoleColorScales,\n getZoraRoleColorScale,\n ZORA_COLOR_SCALE_ROLE_ORDER,\n type ZoraColorScaleRoleId,\n type ZoraComputedRoleColorScales,\n type ZoraRoleColorScale,\n} from './roleScales';\nexport {\n createZoraColorScale,\n type CreateZoraColorScaleOptions,\n type CreateZoraHueScaleOptions,\n createZoraNeutralScale,\n createZoraPrimaryScale,\n type ZoraHueScaleRoleId,\n} from './scales';\nexport {\n createZoraSemanticColorTokens,\n getReadableTextColor,\n type ZoraSemanticColorTokens,\n} from './semanticTokens';\nexport { ZORA_COLOR_SCALE_STEPS, type ZoraColorScale, type ZoraColorScaleStep } from './types';\n"]}
@@ -1,6 +0,0 @@
1
- import type { ZoraHexColor } from '../../theme/types';
2
- import type { ZoraOklchColor } from './types';
3
- export declare function parseHexToOklch(hex: ZoraHexColor): ZoraOklchColor;
4
- export declare function formatOklchAsHex(color: ZoraOklchColor): ZoraHexColor;
5
- export declare function clampOklchToGamut(color: ZoraOklchColor): ZoraOklchColor;
6
- //# sourceMappingURL=oklch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oklch.d.ts","sourceRoot":"","sources":["../../../src/internal/color/oklch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAS9C,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,cAAc,CAoBjE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAcpE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAavE"}
@@ -1,50 +0,0 @@
1
- import { converter, formatHex, parse, toGamut } from 'culori';
2
- import { normalizeHueDegrees } from './hue';
3
- const toOklch = converter('oklch');
4
- const gamutMapToSrgb = toGamut('rgb', 'oklch');
5
- function isSixDigitHexColor(value) {
6
- return /^#[0-9a-fA-F]{6}$/.test(value);
7
- }
8
- export function parseHexToOklch(hex) {
9
- if (!isSixDigitHexColor(hex)) {
10
- throw new Error(`Expected a 6-digit hex color like '#0f766e', got '${String(hex)}'.`);
11
- }
12
- const parsed = parse(hex);
13
- if (!parsed) {
14
- throw new Error(`Unable to parse hex color '${String(hex)}'.`);
15
- }
16
- const oklch = toOklch(parsed);
17
- if (typeof oklch.l !== 'number' || typeof oklch.c !== 'number') {
18
- throw new Error(`Unable to convert hex color '${String(hex)}' to OKLCH.`);
19
- }
20
- return {
21
- l: oklch.l,
22
- c: oklch.c,
23
- h: normalizeHueDegrees(typeof oklch.h === 'number' ? oklch.h : 0),
24
- };
25
- }
26
- export function formatOklchAsHex(color) {
27
- const mapped = gamutMapToSrgb({ mode: 'oklch', l: color.l, c: color.c, h: color.h });
28
- const hex = formatHex(mapped);
29
- if (!hex || !isSixDigitHexColor(hex)) {
30
- throw new Error('Unable to format OKLCH color as a 6-digit hex value.');
31
- }
32
- const normalized = hex.toLowerCase();
33
- if (!isSixDigitHexColor(normalized)) {
34
- throw new Error('Unable to format OKLCH color as a 6-digit hex value.');
35
- }
36
- return normalized;
37
- }
38
- export function clampOklchToGamut(color) {
39
- const mapped = gamutMapToSrgb({ mode: 'oklch', l: color.l, c: color.c, h: color.h });
40
- const clamped = toOklch(mapped);
41
- if (typeof clamped.l !== 'number' || typeof clamped.c !== 'number') {
42
- throw new Error('Unable to clamp OKLCH color to sRGB gamut.');
43
- }
44
- return {
45
- l: clamped.l,
46
- c: clamped.c,
47
- h: normalizeHueDegrees(typeof clamped.h === 'number' ? clamped.h : 0),
48
- };
49
- }
50
- //# sourceMappingURL=oklch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oklch.js","sourceRoot":"","sources":["../../../src/internal/color/oklch.ts"],"names":[],"mappings":"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","sourcesContent":["import { converter, formatHex, parse, toGamut } from 'culori';\n\nimport type { ZoraHexColor } from '../../theme/types';\nimport { normalizeHueDegrees } from './hue';\nimport type { ZoraOklchColor } from './types';\n\nconst toOklch = converter('oklch');\nconst gamutMapToSrgb = toGamut('rgb', 'oklch');\n\nfunction isSixDigitHexColor(value: string): value is ZoraHexColor {\n return /^#[0-9a-fA-F]{6}$/.test(value);\n}\n\nexport function parseHexToOklch(hex: ZoraHexColor): ZoraOklchColor {\n if (!isSixDigitHexColor(hex)) {\n throw new Error(`Expected a 6-digit hex color like '#0f766e', got '${String(hex)}'.`);\n }\n\n const parsed = parse(hex);\n if (!parsed) {\n throw new Error(`Unable to parse hex color '${String(hex)}'.`);\n }\n\n const oklch = toOklch(parsed);\n if (typeof oklch.l !== 'number' || typeof oklch.c !== 'number') {\n throw new Error(`Unable to convert hex color '${String(hex)}' to OKLCH.`);\n }\n\n return {\n l: oklch.l,\n c: oklch.c,\n h: normalizeHueDegrees(typeof oklch.h === 'number' ? oklch.h : 0),\n };\n}\n\nexport function formatOklchAsHex(color: ZoraOklchColor): ZoraHexColor {\n const mapped = gamutMapToSrgb({ mode: 'oklch', l: color.l, c: color.c, h: color.h });\n const hex = formatHex(mapped);\n\n if (!hex || !isSixDigitHexColor(hex)) {\n throw new Error('Unable to format OKLCH color as a 6-digit hex value.');\n }\n\n const normalized = hex.toLowerCase();\n if (!isSixDigitHexColor(normalized)) {\n throw new Error('Unable to format OKLCH color as a 6-digit hex value.');\n }\n\n return normalized;\n}\n\nexport function clampOklchToGamut(color: ZoraOklchColor): ZoraOklchColor {\n const mapped = gamutMapToSrgb({ mode: 'oklch', l: color.l, c: color.c, h: color.h });\n const clamped = toOklch(mapped);\n\n if (typeof clamped.l !== 'number' || typeof clamped.c !== 'number') {\n throw new Error('Unable to clamp OKLCH color to sRGB gamut.');\n }\n\n return {\n l: clamped.l,\n c: clamped.c,\n h: normalizeHueDegrees(typeof clamped.h === 'number' ? clamped.h : 0),\n };\n}\n"]}
@@ -1,3 +0,0 @@
1
- import type { ZoraHexColor, ZoraThemeMode } from '../../theme/types';
2
- export declare function resolveModePrimaryColor(primaryColor: ZoraHexColor, mode: ZoraThemeMode): ZoraHexColor;
3
- //# sourceMappingURL=primary.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"primary.d.ts","sourceRoot":"","sources":["../../../src/internal/color/primary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA2BrE,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,aAAa,GAClB,YAAY,CAiCd"}
@@ -1,44 +0,0 @@
1
- import { clampOklchToGamut, formatOklchAsHex, parseHexToOklch } from './oklch';
2
- const FALLBACK_PRIMARY_COLOR = '#0f766e';
3
- const LIGHT_PRIMARY_LIGHTNESS_TARGET = 0.52;
4
- const DARK_PRIMARY_LIGHTNESS_TARGET = 0.72;
5
- const MIN_PRIMARY_CHROMA = 0.04;
6
- const MAX_LIGHT_PRIMARY_CHROMA = 0.18;
7
- const MAX_DARK_PRIMARY_CHROMA = 0.2;
8
- const LIGHTNESS_BLEND = 0.85;
9
- function clampNumber(value, min, max) {
10
- return Math.max(min, Math.min(value, max));
11
- }
12
- function resolveModePrimaryTargetLightness(mode) {
13
- return mode === 'dark' ? DARK_PRIMARY_LIGHTNESS_TARGET : LIGHT_PRIMARY_LIGHTNESS_TARGET;
14
- }
15
- function resolveModePrimaryMaxChroma(mode) {
16
- return mode === 'dark' ? MAX_DARK_PRIMARY_CHROMA : MAX_LIGHT_PRIMARY_CHROMA;
17
- }
18
- export function resolveModePrimaryColor(primaryColor, mode) {
19
- let seed;
20
- try {
21
- seed = parseHexToOklch(primaryColor);
22
- }
23
- catch (error) {
24
- const message = error instanceof Error ? error.message : String(error);
25
- if (process.env.NODE_ENV === 'production') {
26
- console.warn(`Invalid ZORA primaryColor '${primaryColor}'. Falling back. ${message}`);
27
- return resolveModePrimaryColor(FALLBACK_PRIMARY_COLOR, mode);
28
- }
29
- throw error instanceof Error ? error : new Error(message);
30
- }
31
- const targetLightness = resolveModePrimaryTargetLightness(mode);
32
- const maxChroma = resolveModePrimaryMaxChroma(mode);
33
- const blendedLightness = seed.l + (targetLightness - seed.l) * LIGHTNESS_BLEND;
34
- const boundedLightness = clampNumber(blendedLightness, 0.12, 0.92);
35
- const cappedChroma = clampNumber(seed.c, 0, maxChroma);
36
- const boundedChroma = seed.c < MIN_PRIMARY_CHROMA ? cappedChroma : Math.max(cappedChroma, MIN_PRIMARY_CHROMA);
37
- const derived = clampOklchToGamut({
38
- l: boundedLightness,
39
- c: boundedChroma,
40
- h: seed.h,
41
- });
42
- return formatOklchAsHex(derived);
43
- }
44
- //# sourceMappingURL=primary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"primary.js","sourceRoot":"","sources":["../../../src/internal/color/primary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/E,MAAM,sBAAsB,GAAiB,SAAS,CAAC;AAEvD,MAAM,8BAA8B,GAAG,IAAI,CAAC;AAC5C,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,SAAS,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,iCAAiC,CAAC,IAAmB;IAC5D,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,8BAA8B,CAAC;AAC1F,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAmB;IACtD,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,wBAAwB,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,YAA0B,EAC1B,IAAmB;IAEnB,IAAI,IAAoB,CAAC;IAEzB,IAAI,CAAC;QACH,IAAI,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,8BAA8B,YAAY,oBAAoB,OAAO,EAAE,CAAC,CAAC;YACtF,OAAO,uBAAuB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,eAAe,GAAG,iCAAiC,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAEpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC;IAC/E,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAEnE,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,aAAa,GACjB,IAAI,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAE1F,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAChC,CAAC,EAAE,gBAAgB;QACnB,CAAC,EAAE,aAAa;QAChB,CAAC,EAAE,IAAI,CAAC,CAAC;KACV,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import type { ZoraHexColor, ZoraThemeMode } from '../../theme/types';\nimport { clampOklchToGamut, formatOklchAsHex, parseHexToOklch } from './oklch';\nimport type { ZoraOklchColor } from './types';\n\nconst FALLBACK_PRIMARY_COLOR: ZoraHexColor = '#0f766e';\n\nconst LIGHT_PRIMARY_LIGHTNESS_TARGET = 0.52;\nconst DARK_PRIMARY_LIGHTNESS_TARGET = 0.72;\n\nconst MIN_PRIMARY_CHROMA = 0.04;\nconst MAX_LIGHT_PRIMARY_CHROMA = 0.18;\nconst MAX_DARK_PRIMARY_CHROMA = 0.2;\n\nconst LIGHTNESS_BLEND = 0.85;\n\nfunction clampNumber(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nfunction resolveModePrimaryTargetLightness(mode: ZoraThemeMode): number {\n return mode === 'dark' ? DARK_PRIMARY_LIGHTNESS_TARGET : LIGHT_PRIMARY_LIGHTNESS_TARGET;\n}\n\nfunction resolveModePrimaryMaxChroma(mode: ZoraThemeMode): number {\n return mode === 'dark' ? MAX_DARK_PRIMARY_CHROMA : MAX_LIGHT_PRIMARY_CHROMA;\n}\n\nexport function resolveModePrimaryColor(\n primaryColor: ZoraHexColor,\n mode: ZoraThemeMode,\n): ZoraHexColor {\n let seed: ZoraOklchColor;\n\n try {\n seed = parseHexToOklch(primaryColor);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n if (process.env.NODE_ENV === 'production') {\n console.warn(`Invalid ZORA primaryColor '${primaryColor}'. Falling back. ${message}`);\n return resolveModePrimaryColor(FALLBACK_PRIMARY_COLOR, mode);\n }\n\n throw error instanceof Error ? error : new Error(message);\n }\n\n const targetLightness = resolveModePrimaryTargetLightness(mode);\n const maxChroma = resolveModePrimaryMaxChroma(mode);\n\n const blendedLightness = seed.l + (targetLightness - seed.l) * LIGHTNESS_BLEND;\n const boundedLightness = clampNumber(blendedLightness, 0.12, 0.92);\n\n const cappedChroma = clampNumber(seed.c, 0, maxChroma);\n const boundedChroma =\n seed.c < MIN_PRIMARY_CHROMA ? cappedChroma : Math.max(cappedChroma, MIN_PRIMARY_CHROMA);\n\n const derived = clampOklchToGamut({\n l: boundedLightness,\n c: boundedChroma,\n h: seed.h,\n });\n\n return formatOklchAsHex(derived);\n}\n"]}
@@ -1,15 +0,0 @@
1
- import type { ZoraColorHarmony } from '../../theme/types';
2
- import type { ZoraComputedHarmony, ZoraHarmonySlotId } from './harmony';
3
- export type ZoraHueRoleId = 'primary' | 'secondary' | 'accent' | 'highlight' | 'surfaceTint';
4
- export interface ZoraHueRoleAssignment {
5
- role: ZoraHueRoleId;
6
- hue: number;
7
- sourceSlotId: ZoraHarmonySlotId;
8
- }
9
- export interface ZoraComputedHueRoles {
10
- harmony: ZoraColorHarmony;
11
- assignments: readonly ZoraHueRoleAssignment[];
12
- }
13
- export declare function assignZoraHarmonyRoleHues(harmony: ZoraComputedHarmony): ZoraComputedHueRoles;
14
- export declare function getZoraHueRoleAssignment(roles: ZoraComputedHueRoles, role: ZoraHueRoleId): ZoraHueRoleAssignment;
15
- //# sourceMappingURL=roleHues.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roleHues.d.ts","sourceRoot":"","sources":["../../../src/internal/color/roleHues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAmB,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGzF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAE7F,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC/C;AAmCD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,oBAAoB,CA8E5F;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,aAAa,GAClB,qBAAqB,CAQvB"}
@@ -1,103 +0,0 @@
1
- import { normalizeHueDegrees } from './hue';
2
- function findSlot(harmony, id) {
3
- return harmony.orderedSlots.find((slot) => slot.id === id);
4
- }
5
- function requireBaseSlot(harmony) {
6
- const base = findSlot(harmony, 'base');
7
- if (!base) {
8
- throw new Error(`[zora] Expected harmony to include a base slot (kind: ${harmony.kind}).`);
9
- }
10
- return base;
11
- }
12
- function assignRole(role, harmony, preferred, fallback = 'base') {
13
- const base = requireBaseSlot(harmony);
14
- const preferredSlot = findSlot(harmony, preferred);
15
- const fallbackSlot = findSlot(harmony, fallback);
16
- const chosenSlot = preferredSlot ?? fallbackSlot ?? base;
17
- return {
18
- role,
19
- hue: normalizeHueDegrees(chosenSlot.hue),
20
- sourceSlotId: chosenSlot.id,
21
- };
22
- }
23
- export function assignZoraHarmonyRoleHues(harmony) {
24
- const { kind } = harmony;
25
- if (kind === 'monochromatic') {
26
- return {
27
- harmony: kind,
28
- assignments: [
29
- assignRole('primary', harmony, 'base'),
30
- assignRole('secondary', harmony, 'base'),
31
- assignRole('accent', harmony, 'base'),
32
- assignRole('highlight', harmony, 'base'),
33
- assignRole('surfaceTint', harmony, 'base'),
34
- ],
35
- };
36
- }
37
- if (kind === 'complementary') {
38
- return {
39
- harmony: kind,
40
- assignments: [
41
- assignRole('primary', harmony, 'base'),
42
- assignRole('secondary', harmony, 'base'),
43
- assignRole('accent', harmony, 'a'),
44
- assignRole('highlight', harmony, 'a'),
45
- assignRole('surfaceTint', harmony, 'base'),
46
- ],
47
- };
48
- }
49
- if (kind === 'analogous') {
50
- return {
51
- harmony: kind,
52
- assignments: [
53
- assignRole('primary', harmony, 'base'),
54
- assignRole('secondary', harmony, 'a'),
55
- assignRole('accent', harmony, 'b', 'a'),
56
- assignRole('highlight', harmony, 'b', 'a'),
57
- assignRole('surfaceTint', harmony, 'a'),
58
- ],
59
- };
60
- }
61
- if (kind === 'splitComplementary') {
62
- return {
63
- harmony: kind,
64
- assignments: [
65
- assignRole('primary', harmony, 'base'),
66
- assignRole('secondary', harmony, 'a'),
67
- assignRole('accent', harmony, 'b', 'a'),
68
- assignRole('highlight', harmony, 'b', 'a'),
69
- assignRole('surfaceTint', harmony, 'base'),
70
- ],
71
- };
72
- }
73
- if (kind === 'triadic') {
74
- return {
75
- harmony: kind,
76
- assignments: [
77
- assignRole('primary', harmony, 'base'),
78
- assignRole('secondary', harmony, 'a'),
79
- assignRole('accent', harmony, 'b', 'a'),
80
- assignRole('highlight', harmony, 'b', 'a'),
81
- assignRole('surfaceTint', harmony, 'base'),
82
- ],
83
- };
84
- }
85
- return {
86
- harmony: kind,
87
- assignments: [
88
- assignRole('primary', harmony, 'base'),
89
- assignRole('secondary', harmony, 'a'),
90
- assignRole('accent', harmony, 'b', 'a'),
91
- assignRole('highlight', harmony, 'c', 'b'),
92
- assignRole('surfaceTint', harmony, 'base'),
93
- ],
94
- };
95
- }
96
- export function getZoraHueRoleAssignment(roles, role) {
97
- const found = roles.assignments.find((assignment) => assignment.role === role);
98
- if (!found) {
99
- throw new Error(`[zora] Expected a hue-role assignment for "${role}" (harmony: ${roles.harmony}).`);
100
- }
101
- return found;
102
- }
103
- //# sourceMappingURL=roleHues.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roleHues.js","sourceRoot":"","sources":["../../../src/internal/color/roleHues.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZoraColorHarmony } from '../../theme/types';\nimport type { ZoraComputedHarmony, ZoraHarmonySlot, ZoraHarmonySlotId } from './harmony';\nimport { normalizeHueDegrees } from './hue';\n\nexport type ZoraHueRoleId = 'primary' | 'secondary' | 'accent' | 'highlight' | 'surfaceTint';\n\nexport interface ZoraHueRoleAssignment {\n role: ZoraHueRoleId;\n hue: number;\n sourceSlotId: ZoraHarmonySlotId;\n}\n\nexport interface ZoraComputedHueRoles {\n harmony: ZoraColorHarmony;\n assignments: readonly ZoraHueRoleAssignment[];\n}\n\nfunction findSlot(\n harmony: ZoraComputedHarmony,\n id: ZoraHarmonySlotId,\n): ZoraHarmonySlot | undefined {\n return harmony.orderedSlots.find((slot) => slot.id === id);\n}\n\nfunction requireBaseSlot(harmony: ZoraComputedHarmony): ZoraHarmonySlot {\n const base = findSlot(harmony, 'base');\n if (!base) {\n throw new Error(`[zora] Expected harmony to include a base slot (kind: ${harmony.kind}).`);\n }\n return base;\n}\n\nfunction assignRole(\n role: ZoraHueRoleId,\n harmony: ZoraComputedHarmony,\n preferred: ZoraHarmonySlotId,\n fallback: ZoraHarmonySlotId = 'base',\n): ZoraHueRoleAssignment {\n const base = requireBaseSlot(harmony);\n const preferredSlot = findSlot(harmony, preferred);\n const fallbackSlot = findSlot(harmony, fallback);\n const chosenSlot = preferredSlot ?? fallbackSlot ?? base;\n\n return {\n role,\n hue: normalizeHueDegrees(chosenSlot.hue),\n sourceSlotId: chosenSlot.id,\n };\n}\n\nexport function assignZoraHarmonyRoleHues(harmony: ZoraComputedHarmony): ZoraComputedHueRoles {\n const { kind } = harmony;\n\n if (kind === 'monochromatic') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'base'),\n assignRole('accent', harmony, 'base'),\n assignRole('highlight', harmony, 'base'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n }\n\n if (kind === 'complementary') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'base'),\n assignRole('accent', harmony, 'a'),\n assignRole('highlight', harmony, 'a'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n }\n\n if (kind === 'analogous') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'a'),\n assignRole('accent', harmony, 'b', 'a'),\n assignRole('highlight', harmony, 'b', 'a'),\n assignRole('surfaceTint', harmony, 'a'),\n ],\n };\n }\n\n if (kind === 'splitComplementary') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'a'),\n assignRole('accent', harmony, 'b', 'a'),\n assignRole('highlight', harmony, 'b', 'a'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n }\n\n if (kind === 'triadic') {\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'a'),\n assignRole('accent', harmony, 'b', 'a'),\n assignRole('highlight', harmony, 'b', 'a'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n }\n\n return {\n harmony: kind,\n assignments: [\n assignRole('primary', harmony, 'base'),\n assignRole('secondary', harmony, 'a'),\n assignRole('accent', harmony, 'b', 'a'),\n assignRole('highlight', harmony, 'c', 'b'),\n assignRole('surfaceTint', harmony, 'base'),\n ],\n };\n}\n\nexport function getZoraHueRoleAssignment(\n roles: ZoraComputedHueRoles,\n role: ZoraHueRoleId,\n): ZoraHueRoleAssignment {\n const found = roles.assignments.find((assignment) => assignment.role === role);\n if (!found) {\n throw new Error(\n `[zora] Expected a hue-role assignment for \"${role}\" (harmony: ${roles.harmony}).`,\n );\n }\n return found;\n}\n"]}
@@ -1,20 +0,0 @@
1
- import type { ZoraColorTone, ZoraHexColor } from '../../theme/types';
2
- import { type ZoraComputedHueRoles } from './roleHues';
3
- import type { ZoraColorScale } from './types';
4
- export type ZoraColorScaleRoleId = 'primary' | 'secondary' | 'accent' | 'highlight' | 'surfaceTint' | 'neutral';
5
- export declare const ZORA_COLOR_SCALE_ROLE_ORDER: readonly ZoraColorScaleRoleId[];
6
- export interface ZoraRoleColorScale {
7
- role: ZoraColorScaleRoleId;
8
- sourceHue?: number;
9
- scale: ZoraColorScale;
10
- }
11
- export interface ZoraComputedRoleColorScales {
12
- roles: readonly ZoraRoleColorScale[];
13
- }
14
- export declare function getZoraRoleColorScale(scales: ZoraComputedRoleColorScales, role: ZoraColorScaleRoleId): ZoraRoleColorScale;
15
- export declare function createZoraRoleColorScales(options: {
16
- hueRoles: ZoraComputedHueRoles;
17
- seed: ZoraHexColor;
18
- colorTone: ZoraColorTone;
19
- }): ZoraComputedRoleColorScales;
20
- //# sourceMappingURL=roleScales.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roleScales.d.ts","sourceRoot":"","sources":["../../../src/internal/color/roleScales.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAEL,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AAOpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT,WAAW,GACX,QAAQ,GACR,WAAW,GACX,aAAa,GACb,SAAS,CAAC;AAEd,eAAO,MAAM,2BAA2B,EAAE,SAAS,oBAAoB,EAOtE,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACtC;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,2BAA2B,EACnC,IAAI,EAAE,oBAAoB,GACzB,kBAAkB,CAMpB;AA6BD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;CAC1B,GAAG,2BAA2B,CAyC9B"}
@@ -1,79 +0,0 @@
1
- import { getZoraColorToneRecipe } from './colorToneRecipes';
2
- import { parseHexToOklch } from './oklch';
3
- import { getZoraHueRoleAssignment, } from './roleHues';
4
- import { createZoraHueScale, createZoraNeutralScale, } from './scales';
5
- export const ZORA_COLOR_SCALE_ROLE_ORDER = [
6
- 'primary',
7
- 'secondary',
8
- 'accent',
9
- 'highlight',
10
- 'surfaceTint',
11
- 'neutral',
12
- ];
13
- export function getZoraRoleColorScale(scales, role) {
14
- const found = scales.roles.find((entry) => entry.role === role);
15
- if (!found) {
16
- throw new Error(`[zora] Expected role color scales to include "${role}".`);
17
- }
18
- return found;
19
- }
20
- function resolveSeedChroma(seed) {
21
- return parseHexToOklch(seed).c;
22
- }
23
- function createHueBackedRoleScale(options) {
24
- const assignment = getZoraHueRoleAssignment(options.hueRoles, options.role);
25
- const colorToneRecipe = getZoraColorToneRecipe(options.colorTone);
26
- const hueScaleRole = options.role;
27
- const hueScaleOptions = {
28
- hue: assignment.hue,
29
- seedChroma: options.seedChroma,
30
- role: hueScaleRole,
31
- colorToneRecipe,
32
- };
33
- return {
34
- role: options.role,
35
- sourceHue: assignment.hue,
36
- scale: createZoraHueScale(hueScaleOptions),
37
- };
38
- }
39
- export function createZoraRoleColorScales(options) {
40
- const seedChroma = resolveSeedChroma(options.seed);
41
- const roles = [
42
- createHueBackedRoleScale({
43
- colorTone: options.colorTone,
44
- hueRoles: options.hueRoles,
45
- seedChroma,
46
- role: 'primary',
47
- }),
48
- createHueBackedRoleScale({
49
- colorTone: options.colorTone,
50
- hueRoles: options.hueRoles,
51
- seedChroma,
52
- role: 'secondary',
53
- }),
54
- createHueBackedRoleScale({
55
- colorTone: options.colorTone,
56
- hueRoles: options.hueRoles,
57
- seedChroma,
58
- role: 'accent',
59
- }),
60
- createHueBackedRoleScale({
61
- colorTone: options.colorTone,
62
- hueRoles: options.hueRoles,
63
- seedChroma,
64
- role: 'highlight',
65
- }),
66
- createHueBackedRoleScale({
67
- colorTone: options.colorTone,
68
- hueRoles: options.hueRoles,
69
- seedChroma,
70
- role: 'surfaceTint',
71
- }),
72
- {
73
- role: 'neutral',
74
- scale: createZoraNeutralScale(options.seed),
75
- },
76
- ];
77
- return { roles };
78
- }
79
- //# sourceMappingURL=roleScales.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roleScales.js","sourceRoot":"","sources":["../../../src/internal/color/roleScales.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EACL,wBAAwB,GAGzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAElB,sBAAsB,GAEvB,MAAM,UAAU,CAAC;AAWlB,MAAM,CAAC,MAAM,2BAA2B,GAAoC;IAC1E,SAAS;IACT,WAAW;IACX,QAAQ;IACR,WAAW;IACX,aAAa;IACb,SAAS;CACV,CAAC;AAYF,MAAM,UAAU,qBAAqB,CACnC,MAAmC,EACnC,IAA0B;IAE1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,IAAI,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkB;IAC3C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,wBAAwB,CAAC,OAKjC;IACC,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,eAAe,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,YAAY,GAAuB,OAAO,CAAC,IAAI,CAAC;IACtD,MAAM,eAAe,GAA8B;QACjD,GAAG,EAAE,UAAU,CAAC,GAAG;QACnB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,YAAY;QAClB,eAAe;KAChB,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,UAAU,CAAC,GAAG;QACzB,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAIzC;IACC,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAyB;QAClC,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,SAAS;SAChB,CAAC;QACF,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,WAAW;SAClB,CAAC;QACF,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,QAAQ;SACf,CAAC;QACF,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,WAAW;SAClB,CAAC;QACF,wBAAwB,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU;YACV,IAAI,EAAE,aAAa;SACpB,CAAC;QACF;YACE,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC;SAC5C;KACF,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC","sourcesContent":["import type { ZoraColorTone, ZoraHexColor } from '../../theme/types';\nimport { getZoraColorToneRecipe } from './colorToneRecipes';\nimport { parseHexToOklch } from './oklch';\nimport {\n getZoraHueRoleAssignment,\n type ZoraComputedHueRoles,\n type ZoraHueRoleId,\n} from './roleHues';\nimport {\n createZoraHueScale,\n type CreateZoraHueScaleOptions,\n createZoraNeutralScale,\n type ZoraHueScaleRoleId,\n} from './scales';\nimport type { ZoraColorScale } from './types';\n\nexport type ZoraColorScaleRoleId =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'highlight'\n | 'surfaceTint'\n | 'neutral';\n\nexport const ZORA_COLOR_SCALE_ROLE_ORDER: readonly ZoraColorScaleRoleId[] = [\n 'primary',\n 'secondary',\n 'accent',\n 'highlight',\n 'surfaceTint',\n 'neutral',\n];\n\nexport interface ZoraRoleColorScale {\n role: ZoraColorScaleRoleId;\n sourceHue?: number;\n scale: ZoraColorScale;\n}\n\nexport interface ZoraComputedRoleColorScales {\n roles: readonly ZoraRoleColorScale[];\n}\n\nexport function getZoraRoleColorScale(\n scales: ZoraComputedRoleColorScales,\n role: ZoraColorScaleRoleId,\n): ZoraRoleColorScale {\n const found = scales.roles.find((entry) => entry.role === role);\n if (!found) {\n throw new Error(`[zora] Expected role color scales to include \"${role}\".`);\n }\n return found;\n}\n\nfunction resolveSeedChroma(seed: ZoraHexColor): number {\n return parseHexToOklch(seed).c;\n}\n\nfunction createHueBackedRoleScale(options: {\n colorTone: ZoraColorTone;\n hueRoles: ZoraComputedHueRoles;\n seedChroma: number;\n role: ZoraHueRoleId;\n}): ZoraRoleColorScale {\n const assignment = getZoraHueRoleAssignment(options.hueRoles, options.role);\n const colorToneRecipe = getZoraColorToneRecipe(options.colorTone);\n const hueScaleRole: ZoraHueScaleRoleId = options.role;\n const hueScaleOptions: CreateZoraHueScaleOptions = {\n hue: assignment.hue,\n seedChroma: options.seedChroma,\n role: hueScaleRole,\n colorToneRecipe,\n };\n\n return {\n role: options.role,\n sourceHue: assignment.hue,\n scale: createZoraHueScale(hueScaleOptions),\n };\n}\n\nexport function createZoraRoleColorScales(options: {\n hueRoles: ZoraComputedHueRoles;\n seed: ZoraHexColor;\n colorTone: ZoraColorTone;\n}): ZoraComputedRoleColorScales {\n const seedChroma = resolveSeedChroma(options.seed);\n\n const roles: ZoraRoleColorScale[] = [\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'primary',\n }),\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'secondary',\n }),\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'accent',\n }),\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'highlight',\n }),\n createHueBackedRoleScale({\n colorTone: options.colorTone,\n hueRoles: options.hueRoles,\n seedChroma,\n role: 'surfaceTint',\n }),\n {\n role: 'neutral',\n scale: createZoraNeutralScale(options.seed),\n },\n ];\n\n return { roles };\n}\n"]}
@@ -1,19 +0,0 @@
1
- import type { ZoraHexColor } from '../../theme/types';
2
- import type { ZoraColorToneRecipe } from './colorToneRecipes';
3
- import { type ZoraColorScale } from './types';
4
- export interface CreateZoraColorScaleOptions {
5
- seed: ZoraHexColor;
6
- role?: 'primary' | 'neutral';
7
- }
8
- export type ZoraHueScaleRoleId = 'primary' | 'secondary' | 'accent' | 'highlight' | 'surfaceTint';
9
- export interface CreateZoraHueScaleOptions {
10
- hue: number;
11
- seedChroma: number;
12
- role: ZoraHueScaleRoleId;
13
- colorToneRecipe: ZoraColorToneRecipe;
14
- }
15
- export declare function createZoraColorScale(options: CreateZoraColorScaleOptions): ZoraColorScale;
16
- export declare function createZoraPrimaryScale(seed: ZoraHexColor): ZoraColorScale;
17
- export declare function createZoraNeutralScale(seed?: ZoraHexColor): ZoraColorScale;
18
- export declare function createZoraHueScale(options: CreateZoraHueScaleOptions): ZoraColorScale;
19
- //# sourceMappingURL=scales.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scales.d.ts","sourceRoot":"","sources":["../../../src/internal/color/scales.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,KAAK,cAAc,EAA2B,MAAM,SAAS,CAAC;AAEvE,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAElG,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,kBAAkB,CAAC;IACzB,eAAe,EAAE,mBAAmB,CAAC;CACtC;AA0JD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,CAKzF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CAEzE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,YAAwB,GAAG,cAAc,CAErF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,cAAc,CAMrF"}