@yelbolt/engine-ui-color-palette 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +430 -0
  3. package/dist/color-DTr3No_G.js +540 -0
  4. package/dist/color-DTr3No_G.js.map +1 -0
  5. package/dist/formats/primitives/makeCompose.d.ts +4 -0
  6. package/dist/formats/primitives/makeCompose.d.ts.map +1 -0
  7. package/dist/formats/primitives/makeCssCustomProps.d.ts +5 -0
  8. package/dist/formats/primitives/makeCssCustomProps.d.ts.map +1 -0
  9. package/dist/formats/primitives/makeCsv.d.ts +13 -0
  10. package/dist/formats/primitives/makeCsv.d.ts.map +1 -0
  11. package/dist/formats/primitives/makeDtcgTokens.d.ts +5 -0
  12. package/dist/formats/primitives/makeDtcgTokens.d.ts.map +1 -0
  13. package/dist/formats/primitives/makeLessVariables.d.ts +5 -0
  14. package/dist/formats/primitives/makeLessVariables.d.ts.map +1 -0
  15. package/dist/formats/primitives/makeNativeTokens.d.ts +4 -0
  16. package/dist/formats/primitives/makeNativeTokens.d.ts.map +1 -0
  17. package/dist/formats/primitives/makeResources.d.ts +4 -0
  18. package/dist/formats/primitives/makeResources.d.ts.map +1 -0
  19. package/dist/formats/primitives/makeScssVariables.d.ts +5 -0
  20. package/dist/formats/primitives/makeScssVariables.d.ts.map +1 -0
  21. package/dist/formats/primitives/makeStyleDictionaryV3Tokens.d.ts +4 -0
  22. package/dist/formats/primitives/makeStyleDictionaryV3Tokens.d.ts.map +1 -0
  23. package/dist/formats/primitives/makeSwiftUI.d.ts +4 -0
  24. package/dist/formats/primitives/makeSwiftUI.d.ts.map +1 -0
  25. package/dist/formats/primitives/makeTailwindV3Config.d.ts +4 -0
  26. package/dist/formats/primitives/makeTailwindV3Config.d.ts.map +1 -0
  27. package/dist/formats/primitives/makeTailwindV4Config.d.ts +4 -0
  28. package/dist/formats/primitives/makeTailwindV4Config.d.ts.map +1 -0
  29. package/dist/formats/primitives/makeUIKit.d.ts +4 -0
  30. package/dist/formats/primitives/makeUIKit.d.ts.map +1 -0
  31. package/dist/formats/primitives/makeUniversalTokens.d.ts +4 -0
  32. package/dist/formats/primitives/makeUniversalTokens.d.ts.map +1 -0
  33. package/dist/formats/semantics/_helpers.d.ts +26 -0
  34. package/dist/formats/semantics/_helpers.d.ts.map +1 -0
  35. package/dist/formats/semantics/makeComposeSemantics.d.ts +5 -0
  36. package/dist/formats/semantics/makeComposeSemantics.d.ts.map +1 -0
  37. package/dist/formats/semantics/makeCssSemantics.d.ts +5 -0
  38. package/dist/formats/semantics/makeCssSemantics.d.ts.map +1 -0
  39. package/dist/formats/semantics/makeCsvSemantics.d.ts +5 -0
  40. package/dist/formats/semantics/makeCsvSemantics.d.ts.map +1 -0
  41. package/dist/formats/semantics/makeDtcgSemantics.d.ts +5 -0
  42. package/dist/formats/semantics/makeDtcgSemantics.d.ts.map +1 -0
  43. package/dist/formats/semantics/makeLessSemantics.d.ts +5 -0
  44. package/dist/formats/semantics/makeLessSemantics.d.ts.map +1 -0
  45. package/dist/formats/semantics/makeNativeSemantics.d.ts +5 -0
  46. package/dist/formats/semantics/makeNativeSemantics.d.ts.map +1 -0
  47. package/dist/formats/semantics/makeResourcesSemantics.d.ts +5 -0
  48. package/dist/formats/semantics/makeResourcesSemantics.d.ts.map +1 -0
  49. package/dist/formats/semantics/makeScssSemantics.d.ts +5 -0
  50. package/dist/formats/semantics/makeScssSemantics.d.ts.map +1 -0
  51. package/dist/formats/semantics/makeStyleDictionaryV3Semantics.d.ts +5 -0
  52. package/dist/formats/semantics/makeStyleDictionaryV3Semantics.d.ts.map +1 -0
  53. package/dist/formats/semantics/makeSwiftUISemantics.d.ts +5 -0
  54. package/dist/formats/semantics/makeSwiftUISemantics.d.ts.map +1 -0
  55. package/dist/formats/semantics/makeTailwindV3Semantics.d.ts +5 -0
  56. package/dist/formats/semantics/makeTailwindV3Semantics.d.ts.map +1 -0
  57. package/dist/formats/semantics/makeTailwindV4Semantics.d.ts +5 -0
  58. package/dist/formats/semantics/makeTailwindV4Semantics.d.ts.map +1 -0
  59. package/dist/formats/semantics/makeUIKitSemantics.d.ts +5 -0
  60. package/dist/formats/semantics/makeUIKitSemantics.d.ts.map +1 -0
  61. package/dist/formats/semantics/makeUniversalSemantics.d.ts +5 -0
  62. package/dist/formats/semantics/makeUniversalSemantics.d.ts.map +1 -0
  63. package/dist/index-Beb8qoyd.js +1403 -0
  64. package/dist/index-Beb8qoyd.js.map +1 -0
  65. package/dist/index.d.ts +14 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +17 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/modules/code/code.d.ts +28 -0
  70. package/dist/modules/code/code.d.ts.map +1 -0
  71. package/dist/modules/code/code.js +1312 -0
  72. package/dist/modules/code/code.js.map +1 -0
  73. package/dist/modules/color/color.d.ts +49 -0
  74. package/dist/modules/color/color.d.ts.map +1 -0
  75. package/dist/modules/color/color.js +6 -0
  76. package/dist/modules/color/color.js.map +1 -0
  77. package/dist/modules/color-harmony/color-harmony.d.ts +25 -0
  78. package/dist/modules/color-harmony/color-harmony.d.ts.map +1 -0
  79. package/dist/modules/color-harmony/color-harmony.js +147 -0
  80. package/dist/modules/color-harmony/color-harmony.js.map +1 -0
  81. package/dist/modules/contrast/contrast.d.ts +19 -0
  82. package/dist/modules/contrast/contrast.d.ts.map +1 -0
  83. package/dist/modules/contrast/contrast.js +187 -0
  84. package/dist/modules/contrast/contrast.js.map +1 -0
  85. package/dist/modules/data/data.d.ts +17 -0
  86. package/dist/modules/data/data.d.ts.map +1 -0
  87. package/dist/modules/data/data.js +461 -0
  88. package/dist/modules/data/data.js.map +1 -0
  89. package/dist/modules/dominant-colors/dominant-colors.d.ts +39 -0
  90. package/dist/modules/dominant-colors/dominant-colors.d.ts.map +1 -0
  91. package/dist/modules/dominant-colors/dominant-colors.js +198 -0
  92. package/dist/modules/dominant-colors/dominant-colors.js.map +1 -0
  93. package/dist/modules/system/system.d.ts +17 -0
  94. package/dist/modules/system/system.d.ts.map +1 -0
  95. package/dist/modules/system/system.js +78 -0
  96. package/dist/modules/system/system.js.map +1 -0
  97. package/dist/types/code.types.d.ts +6 -0
  98. package/dist/types/code.types.d.ts.map +1 -0
  99. package/dist/types/color.types.d.ts +45 -0
  100. package/dist/types/color.types.d.ts.map +1 -0
  101. package/dist/types/configuration.types.d.ts +154 -0
  102. package/dist/types/configuration.types.d.ts.map +1 -0
  103. package/dist/types/data.types.d.ts +135 -0
  104. package/dist/types/data.types.d.ts.map +1 -0
  105. package/dist/types/model.types.d.ts +3 -0
  106. package/dist/types/model.types.d.ts.map +1 -0
  107. package/dist/types/system.types.d.ts +40 -0
  108. package/dist/types/system.types.d.ts.map +1 -0
  109. package/package.json +65 -0
@@ -0,0 +1,198 @@
1
+ var C = Object.defineProperty;
2
+ var x = (l, t, e) => t in l ? C(l, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[t] = e;
3
+ var i = (l, t, e) => x(l, typeof t != "symbol" ? t + "" : t, e);
4
+ import { c as p } from "../../index-Beb8qoyd.js";
5
+ class f {
6
+ constructor({
7
+ imageData: t,
8
+ arrayBuffer: e,
9
+ colorCount: a = 5,
10
+ maxIterations: r = 50,
11
+ tolerance: s = 0.01,
12
+ skipTransparent: n = !0,
13
+ maxImageSize: o = 200
14
+ }) {
15
+ i(this, "imageData", null);
16
+ i(this, "colorCount");
17
+ i(this, "maxIterations");
18
+ i(this, "tolerance");
19
+ i(this, "skipTransparent");
20
+ i(this, "maxImageSize");
21
+ i(this, "arrayBuffer");
22
+ /** Synchronous extraction for ImageData (backward compatibility) */
23
+ i(this, "extractDominantColors", () => {
24
+ if (!this.imageData)
25
+ throw new Error(
26
+ "No image data available. Use extractDominantColorsAsync() for ArrayBuffer."
27
+ );
28
+ const t = this.extractPixels();
29
+ if (t.length === 0) return [];
30
+ const e = this.performKMeans(t);
31
+ return this.calculateColorFrequencies(t, e).sort((r, s) => s.percentage - r.percentage);
32
+ });
33
+ /** Asynchronous extraction for ArrayBuffer */
34
+ i(this, "extractDominantColorsAsync", async () => {
35
+ if (await this.ensureImageData(), !this.imageData)
36
+ throw new Error(
37
+ "No image data available. Ensure ArrayBuffer was successfully decoded."
38
+ );
39
+ const t = this.extractPixels();
40
+ if (t.length === 0) return [];
41
+ const e = this.performKMeans(t);
42
+ return this.calculateColorFrequencies(t, e).sort((r, s) => s.percentage - r.percentage);
43
+ });
44
+ i(this, "extractPixels", () => {
45
+ if (!this.imageData)
46
+ throw new Error("No image data available");
47
+ const t = [], e = this.imageData.data;
48
+ for (let a = 0; a < e.length; a += 4) {
49
+ const r = e[a], s = e[a + 1], n = e[a + 2], o = e[a + 3];
50
+ this.skipTransparent && o < 128 || t.push([r, s, n]);
51
+ }
52
+ return t;
53
+ });
54
+ i(this, "performKMeans", (t) => {
55
+ let e = this.initializeCentroids(t), a = [], r = 0;
56
+ for (; r < this.maxIterations && !this.hasConverged(e, a); ) {
57
+ a = e.map((n) => [...n]);
58
+ const s = Array.from(
59
+ { length: this.colorCount },
60
+ () => []
61
+ );
62
+ t.forEach((n) => {
63
+ const o = this.findClosestCentroid(n, e);
64
+ s[o].push(n);
65
+ }), e = s.map((n) => n.length === 0 ? a[e.indexOf(e[0])] : this.calculateCentroid(n)), r++;
66
+ }
67
+ return e;
68
+ });
69
+ i(this, "initializeCentroids", (t) => {
70
+ const e = [];
71
+ e.push(t[Math.floor(Math.random() * t.length)]);
72
+ for (let a = 1; a < this.colorCount; a++) {
73
+ const r = t.map((c) => {
74
+ const h = Math.min(
75
+ ...e.map(
76
+ (d) => this.calculateDistance(c, d)
77
+ )
78
+ );
79
+ return h * h;
80
+ }), s = r.reduce((c, h) => c + h, 0), n = Math.random() * s;
81
+ let o = 0;
82
+ for (let c = 0; c < t.length; c++)
83
+ if (o += r[c], o >= n) {
84
+ e.push(t[c]);
85
+ break;
86
+ }
87
+ }
88
+ return e;
89
+ });
90
+ i(this, "findClosestCentroid", (t, e) => {
91
+ let a = 1 / 0, r = 0;
92
+ return e.forEach((s, n) => {
93
+ const o = this.calculateDistance(t, s);
94
+ o < a && (a = o, r = n);
95
+ }), r;
96
+ });
97
+ i(this, "calculateDistance", (t, e) => {
98
+ const [a, r, s] = t, [n, o, c] = e;
99
+ return Math.sqrt(
100
+ Math.pow(a - n, 2) + Math.pow(r - o, 2) + Math.pow(s - c, 2)
101
+ );
102
+ });
103
+ i(this, "calculateCentroid", (t) => {
104
+ const e = t.reduce(
105
+ (a, r) => [a[0] + r[0], a[1] + r[1], a[2] + r[2]],
106
+ [0, 0, 0]
107
+ );
108
+ return [
109
+ Math.round(e[0] / t.length),
110
+ Math.round(e[1] / t.length),
111
+ Math.round(e[2] / t.length)
112
+ ];
113
+ });
114
+ i(this, "hasConverged", (t, e) => e.length === 0 ? !1 : t.every((a, r) => this.calculateDistance(a, e[r]) < this.tolerance));
115
+ i(this, "calculateColorFrequencies", (t, e) => {
116
+ const a = new Array(e.length).fill(0);
117
+ t.forEach((s) => {
118
+ const n = this.findClosestCentroid(s, e);
119
+ a[n]++;
120
+ });
121
+ const r = t.length;
122
+ return e.map((s, n) => ({
123
+ color: s,
124
+ hex: p.rgb(s[0], s[1], s[2]).hex(),
125
+ count: a[n],
126
+ percentage: parseFloat((a[n] / r * 100).toFixed(2))
127
+ }));
128
+ });
129
+ i(this, "setColorCount", (t) => {
130
+ this.colorCount = Math.max(1, Math.min(t, 20));
131
+ });
132
+ i(this, "updateOptions", (t) => {
133
+ t.colorCount !== void 0 && this.setColorCount(t.colorCount), t.maxIterations !== void 0 && (this.maxIterations = t.maxIterations), t.tolerance !== void 0 && (this.tolerance = t.tolerance), t.skipTransparent !== void 0 && (this.skipTransparent = t.skipTransparent);
134
+ });
135
+ i(this, "getOptions", () => ({
136
+ colorCount: this.colorCount,
137
+ maxIterations: this.maxIterations,
138
+ tolerance: this.tolerance,
139
+ skipTransparent: this.skipTransparent
140
+ }));
141
+ if (!t && !e)
142
+ throw new Error("Either imageData or arrayBuffer must be provided");
143
+ this.imageData = t || null, this.colorCount = a, this.maxIterations = r, this.tolerance = s, this.skipTransparent = n, this.maxImageSize = o, e && !t && (this.arrayBuffer = e);
144
+ }
145
+ async ensureImageData() {
146
+ !this.imageData && this.arrayBuffer && (this.imageData = await this.decodeImageFromArrayBuffer(this.arrayBuffer));
147
+ }
148
+ async decodeImageFromArrayBuffer(t) {
149
+ return new Promise((e, a) => {
150
+ const r = globalThis;
151
+ if (!r.document || !r.Image || !r.URL) {
152
+ a(new Error("Browser environment with Canvas API required"));
153
+ return;
154
+ }
155
+ const s = new r.Blob([t]), n = r.URL.createObjectURL(s), o = new r.Image();
156
+ o.onload = () => {
157
+ try {
158
+ const c = r.document.createElement("canvas"), h = c.getContext("2d");
159
+ if (!h)
160
+ throw new Error("Failed to create canvas context");
161
+ const d = o.width / o.height;
162
+ let u = o.width, m = o.height;
163
+ Math.max(o.width, o.height) > this.maxImageSize && (o.width > o.height ? (u = this.maxImageSize, m = Math.round(this.maxImageSize / d)) : (m = this.maxImageSize, u = Math.round(this.maxImageSize * d))), c.width = u, c.height = m, h.drawImage(o, 0, 0, u, m);
164
+ const g = h.getImageData(
165
+ 0,
166
+ 0,
167
+ u,
168
+ m
169
+ ), w = {
170
+ data: new Uint8ClampedArray(g.data),
171
+ width: g.width,
172
+ height: g.height
173
+ };
174
+ r.URL.revokeObjectURL(n), e(w);
175
+ } catch (c) {
176
+ r.URL.revokeObjectURL(n), a(c);
177
+ }
178
+ }, o.onerror = () => {
179
+ r.URL.revokeObjectURL(n), a(new Error("Failed to load image"));
180
+ }, o.src = n;
181
+ });
182
+ }
183
+ /** Static method for simplified ArrayBuffer usage */
184
+ static async fromArrayBuffer(t, e = {}) {
185
+ return new f({
186
+ arrayBuffer: t,
187
+ ...e
188
+ }).extractDominantColorsAsync();
189
+ }
190
+ /** Simplified static method for quick color extraction */
191
+ static async extract(t, e = 5) {
192
+ return this.fromArrayBuffer(t, { colorCount: e });
193
+ }
194
+ }
195
+ export {
196
+ f as default
197
+ };
198
+ //# sourceMappingURL=dominant-colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dominant-colors.js","sources":["../../../src/modules/dominant-colors/dominant-colors.ts"],"sourcesContent":["import chroma from 'chroma-js'\nimport {\n Channel,\n HexModel,\n ImageData,\n DominantColorResult,\n DominantColorsOptions,\n} from '@tps/color.types'\n\ninterface DominantColorsInput extends DominantColorsOptions {\n imageData?: ImageData\n arrayBuffer?: ArrayBuffer\n maxImageSize?: number\n}\n\nexport default class DominantColors {\n private imageData: ImageData | null = null\n private colorCount: number\n private maxIterations: number\n private tolerance: number\n private skipTransparent: boolean\n private maxImageSize: number\n\n constructor({\n imageData,\n arrayBuffer,\n colorCount = 5,\n maxIterations = 50,\n tolerance = 0.01,\n skipTransparent = true,\n maxImageSize = 200,\n }: DominantColorsInput) {\n if (!imageData && !arrayBuffer) {\n throw new Error('Either imageData or arrayBuffer must be provided')\n }\n\n this.imageData = imageData || null\n this.colorCount = colorCount\n this.maxIterations = maxIterations\n this.tolerance = tolerance\n this.skipTransparent = skipTransparent\n this.maxImageSize = maxImageSize\n\n if (arrayBuffer && !imageData) {\n this.arrayBuffer = arrayBuffer\n }\n }\n\n private arrayBuffer?: ArrayBuffer\n\n private async ensureImageData(): Promise<void> {\n if (!this.imageData && this.arrayBuffer) {\n this.imageData = await this.decodeImageFromArrayBuffer(this.arrayBuffer)\n }\n }\n\n private async decodeImageFromArrayBuffer(\n arrayBuffer: ArrayBuffer\n ): Promise<ImageData> {\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const globalWindow = globalThis as any\n\n if (!globalWindow.document || !globalWindow.Image || !globalWindow.URL) {\n reject(new Error('Browser environment with Canvas API required'))\n return\n }\n\n const blob = new globalWindow.Blob([arrayBuffer])\n const url = globalWindow.URL.createObjectURL(blob)\n const img = new globalWindow.Image()\n\n img.onload = () => {\n try {\n const canvas = globalWindow.document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n\n if (!ctx) {\n throw new Error('Failed to create canvas context')\n }\n\n // Resize image if needed\n const aspectRatio = img.width / img.height\n let targetWidth = img.width\n let targetHeight = img.height\n\n if (Math.max(img.width, img.height) > this.maxImageSize) {\n if (img.width > img.height) {\n targetWidth = this.maxImageSize\n targetHeight = Math.round(this.maxImageSize / aspectRatio)\n } else {\n targetHeight = this.maxImageSize\n targetWidth = Math.round(this.maxImageSize * aspectRatio)\n }\n }\n\n canvas.width = targetWidth\n canvas.height = targetHeight\n\n ctx.drawImage(img, 0, 0, targetWidth, targetHeight)\n\n const browserImageData = ctx.getImageData(\n 0,\n 0,\n targetWidth,\n targetHeight\n )\n\n const imageData: ImageData = {\n data: new Uint8ClampedArray(browserImageData.data),\n width: browserImageData.width,\n height: browserImageData.height,\n }\n\n globalWindow.URL.revokeObjectURL(url)\n resolve(imageData)\n } catch (error) {\n globalWindow.URL.revokeObjectURL(url)\n reject(error)\n }\n }\n\n img.onerror = () => {\n globalWindow.URL.revokeObjectURL(url)\n reject(new Error('Failed to load image'))\n }\n\n img.src = url\n })\n }\n\n /** Synchronous extraction for ImageData (backward compatibility) */\n extractDominantColors = (): DominantColorResult[] => {\n if (!this.imageData) {\n throw new Error(\n 'No image data available. Use extractDominantColorsAsync() for ArrayBuffer.'\n )\n }\n\n const pixels = this.extractPixels()\n if (pixels.length === 0) return []\n\n const clusters = this.performKMeans(pixels)\n const results = this.calculateColorFrequencies(pixels, clusters)\n\n return results.sort((a, b) => b.percentage - a.percentage)\n }\n\n /** Asynchronous extraction for ArrayBuffer */\n extractDominantColorsAsync = async (): Promise<DominantColorResult[]> => {\n await this.ensureImageData()\n\n if (!this.imageData) {\n throw new Error(\n 'No image data available. Ensure ArrayBuffer was successfully decoded.'\n )\n }\n\n const pixels = this.extractPixels()\n if (pixels.length === 0) return []\n\n const clusters = this.performKMeans(pixels)\n const results = this.calculateColorFrequencies(pixels, clusters)\n\n return results.sort((a, b) => b.percentage - a.percentage)\n }\n\n private extractPixels = (): Channel[] => {\n if (!this.imageData) {\n throw new Error('No image data available')\n }\n\n const pixels: Channel[] = []\n const data = this.imageData.data\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i]\n const g = data[i + 1]\n const b = data[i + 2]\n const a = data[i + 3]\n\n if (this.skipTransparent && a < 128) continue\n\n pixels.push([r, g, b])\n }\n\n return pixels\n }\n\n private performKMeans = (pixels: Channel[]): Channel[] => {\n let centroids = this.initializeCentroids(pixels)\n let prevCentroids: Channel[] = []\n let iteration = 0\n\n while (\n iteration < this.maxIterations &&\n !this.hasConverged(centroids, prevCentroids)\n ) {\n prevCentroids = centroids.map((c) => [...c] as Channel)\n\n const clusters: Channel[][] = Array.from(\n { length: this.colorCount },\n () => []\n )\n\n pixels.forEach((pixel) => {\n const closestIndex = this.findClosestCentroid(pixel, centroids)\n clusters[closestIndex].push(pixel)\n })\n\n centroids = clusters.map((cluster) => {\n if (cluster.length === 0)\n return prevCentroids[centroids.indexOf(centroids[0])]\n return this.calculateCentroid(cluster)\n })\n\n iteration++\n }\n\n return centroids\n }\n\n private initializeCentroids = (pixels: Channel[]): Channel[] => {\n const centroids: Channel[] = []\n\n // K-means++ initialization\n centroids.push(pixels[Math.floor(Math.random() * pixels.length)])\n\n for (let i = 1; i < this.colorCount; i++) {\n const distances = pixels.map((pixel) => {\n const minDistance = Math.min(\n ...centroids.map((centroid) =>\n this.calculateDistance(pixel, centroid)\n )\n )\n return minDistance * minDistance\n })\n\n const totalDistance = distances.reduce((sum, d) => sum + d, 0)\n const threshold = Math.random() * totalDistance\n\n let cumulative = 0\n for (let j = 0; j < pixels.length; j++) {\n cumulative += distances[j]\n if (cumulative >= threshold) {\n centroids.push(pixels[j])\n break\n }\n }\n }\n\n return centroids\n }\n\n private findClosestCentroid = (\n pixel: Channel,\n centroids: Channel[]\n ): number => {\n let minDistance = Infinity\n let closestIndex = 0\n\n centroids.forEach((centroid, index) => {\n const distance = this.calculateDistance(pixel, centroid)\n if (distance < minDistance) {\n minDistance = distance\n closestIndex = index\n }\n })\n\n return closestIndex\n }\n\n private calculateDistance = (color1: Channel, color2: Channel): number => {\n const [r1, g1, b1] = color1\n const [r2, g2, b2] = color2\n\n return Math.sqrt(\n Math.pow(r1 - r2, 2) + Math.pow(g1 - g2, 2) + Math.pow(b1 - b2, 2)\n )\n }\n\n private calculateCentroid = (cluster: Channel[]): Channel => {\n const sum = cluster.reduce(\n (acc, pixel) => [acc[0] + pixel[0], acc[1] + pixel[1], acc[2] + pixel[2]],\n [0, 0, 0] as Channel\n )\n\n return [\n Math.round(sum[0] / cluster.length),\n Math.round(sum[1] / cluster.length),\n Math.round(sum[2] / cluster.length),\n ]\n }\n\n private hasConverged = (\n centroids: Channel[],\n prevCentroids: Channel[]\n ): boolean => {\n if (prevCentroids.length === 0) return false\n\n return centroids.every((centroid, index) => {\n const distance = this.calculateDistance(centroid, prevCentroids[index])\n return distance < this.tolerance\n })\n }\n\n private calculateColorFrequencies = (\n pixels: Channel[],\n centroids: Channel[]\n ): DominantColorResult[] => {\n const counts = new Array(centroids.length).fill(0)\n\n pixels.forEach((pixel) => {\n const closestIndex = this.findClosestCentroid(pixel, centroids)\n counts[closestIndex]++\n })\n\n const totalPixels = pixels.length\n\n return centroids.map((centroid, index) => ({\n color: centroid,\n hex: chroma.rgb(centroid[0], centroid[1], centroid[2]).hex() as HexModel,\n count: counts[index],\n percentage: parseFloat(((counts[index] / totalPixels) * 100).toFixed(2)),\n }))\n }\n\n setColorCount = (count: number): void => {\n this.colorCount = Math.max(1, Math.min(count, 20))\n }\n\n updateOptions = (options: Partial<DominantColorsOptions>): void => {\n if (options.colorCount !== undefined) this.setColorCount(options.colorCount)\n if (options.maxIterations !== undefined)\n this.maxIterations = options.maxIterations\n if (options.tolerance !== undefined) this.tolerance = options.tolerance\n if (options.skipTransparent !== undefined)\n this.skipTransparent = options.skipTransparent\n }\n\n getOptions = (): DominantColorsOptions => ({\n colorCount: this.colorCount,\n maxIterations: this.maxIterations,\n tolerance: this.tolerance,\n skipTransparent: this.skipTransparent,\n })\n\n /** Static method for simplified ArrayBuffer usage */\n static async fromArrayBuffer(\n arrayBuffer: ArrayBuffer,\n options: Omit<DominantColorsInput, 'arrayBuffer' | 'imageData'> = {}\n ): Promise<DominantColorResult[]> {\n const decoder = new DominantColors({\n arrayBuffer,\n ...options,\n })\n\n return decoder.extractDominantColorsAsync()\n }\n\n /** Simplified static method for quick color extraction */\n static async extract(\n arrayBuffer: ArrayBuffer,\n colorCount: number = 5\n ): Promise<DominantColorResult[]> {\n return this.fromArrayBuffer(arrayBuffer, { colorCount })\n }\n}\n"],"names":["DominantColors","imageData","arrayBuffer","colorCount","maxIterations","tolerance","skipTransparent","maxImageSize","__publicField","pixels","clusters","a","b","data","i","g","centroids","prevCentroids","iteration","c","pixel","closestIndex","cluster","distances","minDistance","centroid","totalDistance","sum","d","threshold","cumulative","j","index","distance","color1","color2","r1","g1","b1","r2","g2","b2","acc","counts","totalPixels","chroma","count","options","resolve","reject","globalWindow","blob","url","img","canvas","ctx","aspectRatio","targetWidth","targetHeight","browserImageData","error"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { SystemConfiguration, SystemData } from '../../types/system.types';
2
+ import { PaletteData } from '../../types/data.types';
3
+ export default class System {
4
+ private paletteData;
5
+ private system;
6
+ constructor({ paletteData, system, }: {
7
+ paletteData: PaletteData;
8
+ system: SystemConfiguration;
9
+ });
10
+ makeSystemData: () => SystemData;
11
+ private computePaths;
12
+ private resolveToken;
13
+ private findBinding;
14
+ private parseRef;
15
+ private shadeExists;
16
+ }
17
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../src/modules/system/system.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,UAAU,EAKX,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,MAAM,CAAqB;gBAEvB,EACV,WAAW,EACX,MAAM,GACP,EAAE;QACD,WAAW,EAAE,WAAW,CAAA;QACxB,MAAM,EAAE,mBAAmB,CAAA;KAC5B;IAKD,cAAc,QAAO,UAAU,CAQ9B;IAED,OAAO,CAAC,YAAY,CAWnB;IAED,OAAO,CAAC,YAAY,CAmCnB;IAED,OAAO,CAAC,WAAW,CAOlB;IAED,OAAO,CAAC,QAAQ,CASf;IAED,OAAO,CAAC,WAAW,CAUlB;CACF"}
@@ -0,0 +1,78 @@
1
+ var u = Object.defineProperty;
2
+ var f = (c, s, e) => s in c ? u(c, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : c[s] = e;
3
+ var d = (c, s, e) => f(c, typeof s != "symbol" ? s + "" : s, e);
4
+ class y {
5
+ constructor({
6
+ paletteData: s,
7
+ system: e
8
+ }) {
9
+ d(this, "paletteData");
10
+ d(this, "system");
11
+ d(this, "makeSystemData", () => {
12
+ const e = this.computePaths(this.system.schema).map((n) => this.resolveToken(n));
13
+ return {
14
+ schema: this.system.schema,
15
+ tokens: e,
16
+ type: "system"
17
+ };
18
+ });
19
+ d(this, "computePaths", (s) => {
20
+ const e = s.groups;
21
+ return e.length === 0 ? [] : e.reduce((n, t) => {
22
+ if (n.length === 0) return t.members.map((r) => [r.id]);
23
+ const o = [];
24
+ for (const r of n)
25
+ for (const i of t.members) o.push([...r, i.id]);
26
+ return o;
27
+ }, []);
28
+ });
29
+ d(this, "resolveToken", (s) => {
30
+ const e = this.system.schema.groups, n = s.map((i, m) => {
31
+ var h;
32
+ const a = (h = e[m]) == null ? void 0 : h.members.find((l) => l.id === i);
33
+ return (a == null ? void 0 : a.name) ?? i;
34
+ }), t = this.findBinding(s), o = (t == null ? void 0 : t.isExcluded) ?? !1, r = this.paletteData.themes.map((i) => {
35
+ var l;
36
+ if (!t || o) return { themeId: i.id, shadeId: null };
37
+ const m = ((l = t.overrides) == null ? void 0 : l[i.id]) ?? t.ref, a = this.parseRef(m);
38
+ if (!a) return { themeId: i.id, shadeId: null };
39
+ const h = this.shadeExists(
40
+ i.id,
41
+ a.colorId,
42
+ a.shadeName
43
+ );
44
+ return {
45
+ themeId: i.id,
46
+ shadeId: h ? `${i.id}:${a.colorId}:${a.shadeName}` : null
47
+ };
48
+ });
49
+ return {
50
+ path: s,
51
+ pathNames: n,
52
+ description: t == null ? void 0 : t.description,
53
+ isExcluded: o,
54
+ refs: r
55
+ };
56
+ });
57
+ d(this, "findBinding", (s) => (this.system.bindings ?? []).find(
58
+ (n) => n.path.length === s.length && n.path.every((t, o) => t === s[o])
59
+ ));
60
+ d(this, "parseRef", (s) => {
61
+ const e = s.indexOf(":");
62
+ if (e === -1) return null;
63
+ const n = s.slice(0, e), t = s.slice(e + 1);
64
+ return !n || !t ? null : { colorId: n, shadeName: t };
65
+ });
66
+ d(this, "shadeExists", (s, e, n) => {
67
+ const t = this.paletteData.themes.find((r) => r.id === s);
68
+ if (!t) return !1;
69
+ const o = t.colors.find((r) => r.id === e);
70
+ return o ? o.shades.some((r) => r.name === n) : !1;
71
+ });
72
+ this.paletteData = s, this.system = e;
73
+ }
74
+ }
75
+ export {
76
+ y as default
77
+ };
78
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sources":["../../../src/modules/system/system.ts"],"sourcesContent":["import {\n SystemConfiguration,\n SystemData,\n SystemDataRef,\n SystemDataToken,\n TaxonomyBinding,\n TaxonomySchema,\n} from '@tps/system.types'\nimport { PaletteData } from '@tps/data.types'\n\nexport default class System {\n private paletteData: PaletteData\n private system: SystemConfiguration\n\n constructor({\n paletteData,\n system,\n }: {\n paletteData: PaletteData\n system: SystemConfiguration\n }) {\n this.paletteData = paletteData\n this.system = system\n }\n\n makeSystemData = (): SystemData => {\n const paths = this.computePaths(this.system.schema)\n const tokens = paths.map((path) => this.resolveToken(path))\n return {\n schema: this.system.schema,\n tokens,\n type: 'system',\n }\n }\n\n private computePaths = (schema: TaxonomySchema): Array<Array<string>> => {\n const groups = schema.groups\n if (groups.length === 0) return []\n\n return groups.reduce<Array<Array<string>>>((acc, group) => {\n if (acc.length === 0) return group.members.map((m) => [m.id])\n const next: Array<Array<string>> = []\n for (const path of acc)\n for (const member of group.members) next.push([...path, member.id])\n return next\n }, [])\n }\n\n private resolveToken = (path: Array<string>): SystemDataToken => {\n const groups = this.system.schema.groups\n const pathNames = path.map((memberId, i) => {\n const member = groups[i]?.members.find((m) => m.id === memberId)\n return member?.name ?? memberId\n })\n\n const binding = this.findBinding(path)\n const isExcluded = binding?.isExcluded ?? false\n\n const refs: Array<SystemDataRef> = this.paletteData.themes.map((theme) => {\n if (!binding || isExcluded) return { themeId: theme.id, shadeId: null }\n const themeRef = binding.overrides?.[theme.id] ?? binding.ref\n const parsed = this.parseRef(themeRef)\n if (!parsed) return { themeId: theme.id, shadeId: null }\n const exists = this.shadeExists(\n theme.id,\n parsed.colorId,\n parsed.shadeName\n )\n return {\n themeId: theme.id,\n shadeId: exists\n ? `${theme.id}:${parsed.colorId}:${parsed.shadeName}`\n : null,\n }\n })\n\n return {\n path,\n pathNames,\n description: binding?.description,\n isExcluded,\n refs,\n }\n }\n\n private findBinding = (path: Array<string>): TaxonomyBinding | undefined => {\n const bindings = this.system.bindings ?? []\n return bindings.find(\n (b) =>\n b.path.length === path.length &&\n b.path.every((seg, i) => seg === path[i])\n )\n }\n\n private parseRef = (\n ref: string\n ): { colorId: string; shadeName: string } | null => {\n const idx = ref.indexOf(':')\n if (idx === -1) return null\n const colorId = ref.slice(0, idx)\n const shadeName = ref.slice(idx + 1)\n if (!colorId || !shadeName) return null\n return { colorId, shadeName }\n }\n\n private shadeExists = (\n themeId: string,\n colorId: string,\n shadeName: string\n ): boolean => {\n const theme = this.paletteData.themes.find((t) => t.id === themeId)\n if (!theme) return false\n const color = theme.colors.find((c) => c.id === colorId)\n if (!color) return false\n return color.shades.some((s) => s.name === shadeName)\n }\n}\n"],"names":["System","paletteData","system","__publicField","tokens","path","schema","groups","acc","group","m","next","member","pathNames","memberId","i","_a","binding","isExcluded","refs","theme","themeRef","parsed","exists","b","seg","ref","idx","colorId","shadeName","themeId","t","color","c","s"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface CodeFile {
2
+ filename: string;
3
+ content: string;
4
+ mimeType: string;
5
+ }
6
+ //# sourceMappingURL=code.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.types.d.ts","sourceRoot":"","sources":["../../src/types/code.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB"}
@@ -0,0 +1,45 @@
1
+ export type HexModel = `#${string}` | string;
2
+ export interface RgbModel {
3
+ r: number;
4
+ g: number;
5
+ b: number;
6
+ a?: number;
7
+ }
8
+ export interface HslModel {
9
+ h: number;
10
+ s: number;
11
+ l: number;
12
+ a: number;
13
+ }
14
+ export type Channel = [number, number, number];
15
+ export type ChannelWithAlpha = [number, number, number, number];
16
+ export interface ImageData {
17
+ data: Uint8ClampedArray;
18
+ width: number;
19
+ height: number;
20
+ }
21
+ export interface DominantColorResult {
22
+ color: Channel;
23
+ hex: HexModel;
24
+ percentage: number;
25
+ count: number;
26
+ }
27
+ export interface DominantColorsOptions {
28
+ colorCount?: number;
29
+ maxIterations?: number;
30
+ tolerance?: number;
31
+ skipTransparent?: boolean;
32
+ }
33
+ export type HarmonyType = 'ANALOGOUS' | 'COMPLEMENTARY' | 'TRIADIC' | 'TETRADIC' | 'SQUARE' | 'COMPOUND';
34
+ export interface ColorHarmonyResult {
35
+ type: HarmonyType;
36
+ baseColor: Channel;
37
+ baseHex: HexModel;
38
+ colors: Channel[];
39
+ hexColors: HexModel[];
40
+ }
41
+ export interface ColorHarmonyOptions {
42
+ analogousSpread?: number;
43
+ returnFormat?: 'rgb' | 'hex' | 'both';
44
+ }
45
+ //# sourceMappingURL=color.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.types.d.ts","sourceRoot":"","sources":["../../src/types/color.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,IAAI,MAAM,EAAE,GAAG,MAAM,CAAA;AAE5C,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,CAAC,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAC9C,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAE/D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,iBAAiB,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAA;IACd,GAAG,EAAE,QAAQ,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,eAAe,GACf,SAAS,GACT,UAAU,GACV,QAAQ,GACR,UAAU,CAAA;AAEd,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,SAAS,EAAE,QAAQ,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;CACtC"}
@@ -0,0 +1,154 @@
1
+ import { Easing } from '@unoff/utils';
2
+ import { ColorFormat } from './model.types';
3
+ import { LibraryData } from './data.types';
4
+ import { HexModel, RgbModel } from './color.types';
5
+ export type ThirdParty = 'COOLORS' | 'REALTIME_COLORS' | 'COLOUR_LOVERS';
6
+ export interface FullConfiguration {
7
+ base: BaseConfiguration;
8
+ themes: Array<ThemeConfiguration>;
9
+ meta: MetaConfiguration;
10
+ libraryData: Array<LibraryData>;
11
+ version: string;
12
+ type: 'UI_COLOR_PALETTE';
13
+ }
14
+ export interface BaseConfiguration {
15
+ [key: string]: string | number | boolean | object | undefined;
16
+ name: string;
17
+ description: string;
18
+ preset: PresetConfiguration;
19
+ shift: ShiftConfiguration;
20
+ areSourceColorsLocked: LockedSourceColorsConfiguration;
21
+ colors: Array<ColorConfiguration>;
22
+ colorSpace: ColorSpaceConfiguration;
23
+ algorithmVersion: AlgorithmVersionConfiguration;
24
+ }
25
+ export interface SourceColorConfiguration {
26
+ name: string;
27
+ rgb: RgbModel;
28
+ source: 'CANVAS' | 'REMOTE' | 'DEFAULT' | 'IMAGE' | 'HARMONY' | 'AI' | ThirdParty;
29
+ id: string;
30
+ isRemovable: boolean;
31
+ hue?: {
32
+ shift: number;
33
+ isLocked: boolean;
34
+ };
35
+ chroma?: {
36
+ shift: number;
37
+ isLocked: boolean;
38
+ };
39
+ }
40
+ export interface ExchangeConfiguration {
41
+ [key: string]: string | number | boolean | object | undefined;
42
+ name: string;
43
+ description: string;
44
+ preset: PresetConfiguration;
45
+ scale: ScaleConfiguration;
46
+ shift: ShiftConfiguration;
47
+ areSourceColorsLocked: LockedSourceColorsConfiguration;
48
+ colorSpace: ColorSpaceConfiguration;
49
+ visionSimulationMode: VisionSimulationModeConfiguration;
50
+ textColorsTheme: TextColorsThemeConfiguration<'HEX'>;
51
+ algorithmVersion: AlgorithmVersionConfiguration;
52
+ }
53
+ export interface ExtractOfBaseConfiguration {
54
+ id: string;
55
+ name: string;
56
+ preset: string;
57
+ colors: Array<ColorConfiguration>;
58
+ themes: Array<ThemeConfiguration>;
59
+ screenshot: Uint8Array | null;
60
+ devStatus: string | null;
61
+ }
62
+ export type EasingConfiguration = Easing;
63
+ export interface PresetConfiguration {
64
+ id: string;
65
+ name: string;
66
+ stops: Array<number>;
67
+ min: number;
68
+ max: number;
69
+ easing: Easing;
70
+ family?: string;
71
+ }
72
+ export type ScaleConfiguration = Record<string, number>;
73
+ export interface ShiftConfiguration {
74
+ chroma: number;
75
+ hue: number;
76
+ }
77
+ export type LockedSourceColorsConfiguration = boolean;
78
+ export interface ColorConfiguration {
79
+ id: string;
80
+ name: string;
81
+ description: string;
82
+ rgb: RgbModel;
83
+ hue: {
84
+ shift: number;
85
+ isLocked: boolean;
86
+ };
87
+ chroma: {
88
+ shift: number;
89
+ isLocked: boolean;
90
+ };
91
+ alpha: {
92
+ isEnabled: boolean;
93
+ backgroundColor: HexModel;
94
+ };
95
+ }
96
+ export interface ThemeConfiguration {
97
+ id: string;
98
+ name: string;
99
+ description: string;
100
+ scale: ScaleConfiguration;
101
+ visionSimulationMode: VisionSimulationModeConfiguration;
102
+ textColorsTheme: TextColorsThemeConfiguration<'HEX'>;
103
+ paletteBackground: HexModel;
104
+ isEnabled: boolean;
105
+ type: 'default theme' | 'custom theme';
106
+ }
107
+ export interface ExportConfiguration {
108
+ format: 'JSON' | 'CSS' | 'SCSS' | 'LESS' | 'JS' | 'SWIFT' | 'KT' | 'XML' | 'CSV';
109
+ context: 'TOKENS_NATIVE' | 'TOKENS_DTCG' | 'TOKENS_STYLE_DICTIONARY_V3' | 'TOKENS_UNIVERSAL' | 'STYLESHEET_CSS' | 'STYLESHEET_SCSS' | 'STYLESHEET_LESS' | 'TAILWIND_V3' | 'TAILWIND_V4' | 'APPLE_SWIFTUI' | 'APPLE_UIKIT' | 'ANDROID_COMPOSE' | 'ANDROID_XML' | 'CSV';
110
+ mimeType: 'application/json' | 'text/css' | 'text/x-scss' | 'text/x-less' | 'text/javascript' | 'text/swift' | 'text/x-kotlin' | 'text/xml' | 'text/csv';
111
+ data: any;
112
+ }
113
+ export type ColorSpaceConfiguration = 'LCH' | 'OKLCH' | 'LAB' | 'OKLAB' | 'HSL' | 'HSLUV' | 'HSV' | 'CMYK' | 'RGB' | 'HEX' | 'P3';
114
+ export type VisionSimulationModeConfiguration = 'NONE' | 'PROTANOMALY' | 'PROTANOPIA' | 'DEUTERANOMALY' | 'DEUTERANOPIA' | 'TRITANOMALY' | 'TRITANOPIA' | 'ACHROMATOMALY' | 'ACHROMATOPSIA';
115
+ export interface TextColorsThemeConfiguration<T extends 'HEX' | 'RGB'> {
116
+ lightColor: ColorFormat<T>;
117
+ darkColor: ColorFormat<T>;
118
+ }
119
+ export type ViewConfiguration = 'PALETTE_WITH_PROPERTIES' | 'PALETTE' | 'SHEET';
120
+ export type AlgorithmVersionConfiguration = 'v1' | 'v2' | 'v3';
121
+ export interface DatesConfiguration {
122
+ createdAt: Date | string;
123
+ updatedAt: Date | string;
124
+ publishedAt: Date | string;
125
+ openedAt: Date | string;
126
+ }
127
+ export interface PublicationConfiguration {
128
+ isPublished: boolean;
129
+ isShared: boolean;
130
+ }
131
+ export interface CreatorConfiguration {
132
+ creatorFullName: string;
133
+ creatorAvatar: string;
134
+ creatorId: string;
135
+ }
136
+ export type StatusConfiguration = 'IS_READY_TO_DEV' | 'DEFAULT';
137
+ export interface UserConfiguration {
138
+ id: string;
139
+ fullName: string;
140
+ avatar: string;
141
+ }
142
+ export interface MetaConfiguration {
143
+ id: string;
144
+ dates: DatesConfiguration;
145
+ publicationStatus: PublicationConfiguration;
146
+ creatorIdentity: CreatorConfiguration;
147
+ }
148
+ export interface DocumentConfiguration {
149
+ id?: string;
150
+ view?: ViewConfiguration;
151
+ isLinkedToPalette?: boolean;
152
+ updatedAt?: Date | string;
153
+ }
154
+ //# sourceMappingURL=configuration.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.types.d.ts","sourceRoot":"","sources":["../../src/types/configuration.types.ts"],"names":[],"mappings":"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"}