@appmax_npm/ds-prime 1.0.0-alpha.185 → 1.0.0-alpha.186
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.
- package/config/presets/franchise-preset-builder.d.ts +2 -0
- package/config/presets/franchise-preset-builder.js +34 -4
- package/index/index.js +457 -439
- package/package.json +1 -1
- package/plugins/themes/useTheme.js +6 -1
- package/services/franchise-theme.service.d.ts +12 -8
- package/services/franchise-theme.service.js +42 -20
- package/services/index.d.ts +1 -0
|
@@ -23,6 +23,8 @@ export interface FranchisePresetResult {
|
|
|
23
23
|
preset: any;
|
|
24
24
|
primaryRamp: Record<number, string>;
|
|
25
25
|
secondaryRamp: Record<number, string>;
|
|
26
|
+
primaryContrastRamp: Record<number, string>;
|
|
27
|
+
secondaryContrastRamp: Record<number, string>;
|
|
26
28
|
}
|
|
27
29
|
/**
|
|
28
30
|
* Constrói um preset customizado para um franqueado a partir de um preset base
|
|
@@ -95,12 +95,34 @@ function getLuminance(hex) {
|
|
|
95
95
|
0.0722 * (b / 255 <= 0.03928 ? b / 255 / 12.92 : Math.pow((b / 255 + 0.055) / 1.055, 2.4)));
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
|
-
* Verifica se uma cor é clara demais para uso como primary interativa
|
|
99
|
-
* Threshold 0.
|
|
100
|
-
*
|
|
98
|
+
* Verifica se uma cor é clara demais para uso como primary interativa.
|
|
99
|
+
* Threshold 0.85 — só dispara o ajuste de luminância em cores quase-brancas
|
|
100
|
+
* (#F5F5F5, #FFFFFF). Cores médias/claras como #C4FFC4, #B2D1FF, #6699CC
|
|
101
|
+
* passam direto e o contraste é resolvido via --primary-contrast por shade.
|
|
101
102
|
*/
|
|
102
103
|
function isLightColor(hex) {
|
|
103
|
-
return getLuminance(hex) > 0.
|
|
104
|
+
return getLuminance(hex) > 0.85;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Decide a melhor cor de texto (preto ou branco) para usar sobre um fundo.
|
|
108
|
+
* Usa luma YIQ — mais simples e perceptualmente próxima ao WCAG completo.
|
|
109
|
+
*/
|
|
110
|
+
function pickContrastColor(hex) {
|
|
111
|
+
const rgb = hexToRgb(hex);
|
|
112
|
+
if (!rgb)
|
|
113
|
+
return '#ffffff';
|
|
114
|
+
const luma = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;
|
|
115
|
+
return luma > 0.5 ? '#171717' : '#ffffff';
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Aplica pickContrastColor em cada shade de uma rampa.
|
|
119
|
+
*/
|
|
120
|
+
function generateContrastRamp(ramp) {
|
|
121
|
+
const out = {};
|
|
122
|
+
for (const [shade, hex] of Object.entries(ramp)) {
|
|
123
|
+
out[Number(shade)] = pickContrastColor(hex);
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
104
126
|
}
|
|
105
127
|
/**
|
|
106
128
|
* Converte RGB para HSL
|
|
@@ -228,6 +250,8 @@ export function buildFranchisePreset(basePreset, colors) {
|
|
|
228
250
|
preset: basePreset,
|
|
229
251
|
primaryRamp: {},
|
|
230
252
|
secondaryRamp: {},
|
|
253
|
+
primaryContrastRamp: {},
|
|
254
|
+
secondaryContrastRamp: {},
|
|
231
255
|
};
|
|
232
256
|
}
|
|
233
257
|
if (!isValidColor(colors.secondary)) {
|
|
@@ -236,6 +260,8 @@ export function buildFranchisePreset(basePreset, colors) {
|
|
|
236
260
|
preset: basePreset,
|
|
237
261
|
primaryRamp: {},
|
|
238
262
|
secondaryRamp: {},
|
|
263
|
+
primaryContrastRamp: {},
|
|
264
|
+
secondaryContrastRamp: {},
|
|
239
265
|
};
|
|
240
266
|
}
|
|
241
267
|
// Verificar contraste mínimo (WCAG AA = 4.5:1)
|
|
@@ -366,10 +392,14 @@ export function buildFranchisePreset(basePreset, colors) {
|
|
|
366
392
|
},
|
|
367
393
|
components: componentOverrides,
|
|
368
394
|
});
|
|
395
|
+
const primaryContrastRamp = generateContrastRamp(primaryRamp);
|
|
396
|
+
const secondaryContrastRamp = generateContrastRamp(secondaryRamp);
|
|
369
397
|
return {
|
|
370
398
|
preset: customPreset,
|
|
371
399
|
primaryRamp,
|
|
372
400
|
secondaryRamp,
|
|
401
|
+
primaryContrastRamp,
|
|
402
|
+
secondaryContrastRamp,
|
|
373
403
|
};
|
|
374
404
|
}
|
|
375
405
|
/**
|