PluginProbe
Extendify / 3.2.2
Extendify v3.2.2
3.2.2 3.2.1 3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 All 128 releases
← All changes | src/Shared/lib/palette-preview.js +25 -0 3.2.1 → 3.2.2 View file →
@@ -191,8 +191,33 @@
191 191 const duotone = palette?.settings?.color?.duotone;
192 192 return Array.isArray(duotone) ? duotone : duotone?.theme;
193 193 };
194 194
195 +// Roles can share a hex; the palette's own order breaks the tie.
196 +const roleByColor = (colors) => {
197 + const roles = {};
198 +
199 + for (const [role, hex] of Object.entries(colors ?? {})) {
200 + const key = hex?.toLowerCase();
201 + if (key && !(key in roles)) roles[key] = role;
202 + }
203 +
204 + return roles;
205 +};
206 +
207 +export const remapPaletteDuotone = (palette, colors) => {
208 + const duotone = paletteDuotone(palette);
209 + if (!Array.isArray(duotone)) return undefined;
210 +
211 + const roles = roleByColor(palette?.colors);
212 + const recolor = (pole) => colors?.[roles[pole?.toLowerCase()]] ?? pole;
213 +
214 + return duotone.map((preset) => ({
215 + ...preset,
216 + colors: preset?.colors?.map(recolor),
217 + }));
218 +};
219 +
195 220 const cssFromSlots = ({ slots, incoming, themeStyles, themeSettings }) => {
196 221 const rules = new Map();
197 222
198 223 for (const { selector, property, section, read } of slots) {