@wix/himalaya-cli 0.1044.0 → 0.1045.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.
- package/dist/cli.mjs +79 -25
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/designing-himi-screens.md +5 -1
- package/package.json +2 -2
- package/stdlib/design-kits/README.md +8 -0
- package/templates/beauty-salon/tokens.json +5 -0
- package/templates/beauty-salon-owner/tokens.json +5 -0
- package/templates/community-club/tokens.json +5 -0
- package/templates/community-club-owner/tokens.json +5 -0
- package/templates/events-meetups/tokens.json +5 -0
- package/templates/events-meetups-owner/tokens.json +5 -0
- package/templates/gym-fitness/tokens.json +5 -0
- package/templates/gym-fitness-owner/tokens.json +5 -0
- package/templates/nonprofit-cause/tokens.json +5 -0
- package/templates/nonprofit-cause-owner/tokens.json +5 -0
- package/templates/podcast-creator/tokens.json +5 -0
- package/templates/podcast-creator-owner/tokens.json +5 -0
- package/templates/portfolio-creative/tokens.json +5 -0
- package/templates/portfolio-creative-owner/tokens.json +5 -0
- package/templates/restaurant/tokens.json +5 -0
- package/templates/restaurant-owner/tokens.json +5 -0
- package/templates/retail-store/tokens.json +5 -0
- package/templates/retail-store-owner/tokens.json +5 -0
- package/templates/yoga-studio/tokens.json +5 -0
- package/templates/yoga-studio-owner/tokens.json +5 -0
package/dist/cli.mjs
CHANGED
|
@@ -13197,8 +13197,17 @@ function hexToRgb2(hex2) {
|
|
|
13197
13197
|
return [int >> 16 & 255, int >> 8 & 255, int & 255];
|
|
13198
13198
|
}
|
|
13199
13199
|
function rgba(color, alpha2) {
|
|
13200
|
-
|
|
13201
|
-
|
|
13200
|
+
let h = color.trim().replace(/^#/, "");
|
|
13201
|
+
let own3 = 1;
|
|
13202
|
+
if (/^[\da-f]{4}$/i.test(h) || /^[\da-f]{8}$/i.test(h)) {
|
|
13203
|
+
const a = h.length === 4 ? h[3] + h[3] : h.slice(6, 8);
|
|
13204
|
+
own3 = parseInt(a, 16) / 255;
|
|
13205
|
+
h = h.length === 4 ? h.slice(0, 3) : h.slice(0, 6);
|
|
13206
|
+
}
|
|
13207
|
+
const rgb = hexToRgb2(`#${h}`);
|
|
13208
|
+
if (!rgb) return color;
|
|
13209
|
+
const composed = own3 === 1 ? clamp(alpha2) : Math.round(clamp(alpha2) * own3 * 1e3) / 1e3;
|
|
13210
|
+
return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${composed})`;
|
|
13202
13211
|
}
|
|
13203
13212
|
function normalizeSpring(spring, durationMs) {
|
|
13204
13213
|
return {
|
|
@@ -24966,6 +24975,7 @@ function withTheme(ctx, theme) {
|
|
|
24966
24975
|
const base = ctx.tokens;
|
|
24967
24976
|
const colors = { ...base.colors ?? {} };
|
|
24968
24977
|
if (theme.colors) for (const [k, v] of Object.entries(theme.colors)) colors[k] = v;
|
|
24978
|
+
if (theme.colors && "accentPrimary" in theme.colors && !("accentText" in theme.colors)) delete colors.accentText;
|
|
24969
24979
|
const typography = { ...base.typography ?? {} };
|
|
24970
24980
|
if (theme.typography) for (const [k, v] of Object.entries(theme.typography)) typography[k] = v;
|
|
24971
24981
|
const kit = { ...base.kit ?? {} };
|
|
@@ -26143,6 +26153,9 @@ function actionClick(ctx, action) {
|
|
|
26143
26153
|
ctx.onAction(resolveItemDeep2(action, ctx));
|
|
26144
26154
|
};
|
|
26145
26155
|
}
|
|
26156
|
+
function accentTextColor(ctx) {
|
|
26157
|
+
return ctx.color("accentText", ctx.color("accentPrimary", "#116DFF"));
|
|
26158
|
+
}
|
|
26146
26159
|
function actionTextButton(ctx, action, label2, color, extra) {
|
|
26147
26160
|
if (action == null) return null;
|
|
26148
26161
|
const onClick = actionClick(ctx, action);
|
|
@@ -29033,7 +29046,7 @@ var init_renderNode = __esm({
|
|
|
29033
29046
|
e?.stopPropagation?.();
|
|
29034
29047
|
ctx.onAction(resolveItemDeep2(props.action, ctx));
|
|
29035
29048
|
} : void 0;
|
|
29036
|
-
const fg = primary ? C("textOnAccent", "#fff") :
|
|
29049
|
+
const fg = primary ? C("textOnAccent", "#fff") : accentTextColor(ctx);
|
|
29037
29050
|
const pillRadius = props.cornerRadius != null ? props.cornerRadius : ctx.radius("pill", 24);
|
|
29038
29051
|
const vPad = props.iconOnly ? 11 : props.size === "sm" ? 8 : props.size === "lg" ? 16 : 13;
|
|
29039
29052
|
const hPadBase = props.iconOnly ? 11 : props.size === "sm" ? 13 : props.size === "lg" ? 22 : 16;
|
|
@@ -29102,14 +29115,14 @@ var init_renderNode = __esm({
|
|
|
29102
29115
|
fontSize: f.remSize,
|
|
29103
29116
|
background: primary ? accent : "transparent",
|
|
29104
29117
|
color: fg,
|
|
29105
|
-
border: outlined ? `1px solid ${
|
|
29118
|
+
border: outlined ? `1px solid ${fg}` : "none",
|
|
29106
29119
|
cursor: disabled ? "default" : "pointer",
|
|
29107
29120
|
opacity: disabled ? 0.55 : 1,
|
|
29108
29121
|
boxSizing: "border-box",
|
|
29109
29122
|
...wrap
|
|
29110
29123
|
}, rowStretch, "fit-content"),
|
|
29111
29124
|
children: [
|
|
29112
|
-
props.loading && /* @__PURE__ */ jsx6("span", { style: { width: glyph, height: glyph, borderRadius: "50%", border: `2px solid ${primary ?
|
|
29125
|
+
props.loading && /* @__PURE__ */ jsx6("span", { style: { width: glyph, height: glyph, borderRadius: "50%", border: `2px solid ${rgba(fg, primary ? 0.4 : 0.35)}`, borderTopColor: fg, animation: ctx.empty ? void 0 : "himalaya-spin .7s linear infinite" } }),
|
|
29113
29126
|
!props.loading && resolvedLeadingIcon && ic(String(resolvedLeadingIcon)),
|
|
29114
29127
|
!props.iconOnly && (resolvedTitle != null && resolvedTitle !== "" ? String(resolvedTitle) : txt(props.title, ctx) || "Button"),
|
|
29115
29128
|
!props.loading && !props.iconOnly && resolvedTrailingIcon && ic(String(resolvedTrailingIcon))
|
|
@@ -50828,21 +50841,21 @@ var init_preview_assets_generated = __esm({
|
|
|
50828
50841
|
"../../packages/serve/src/preview-assets.generated.ts"() {
|
|
50829
50842
|
init_preview_assets_format();
|
|
50830
50843
|
PREVIEW_ASSET_MANIFEST = [
|
|
50831
|
-
{ key: "assets/index-
|
|
50832
|
-
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset:
|
|
50833
|
-
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset:
|
|
50834
|
-
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset:
|
|
50835
|
-
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
50836
|
-
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset:
|
|
50837
|
-
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset:
|
|
50838
|
-
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
50839
|
-
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset:
|
|
50840
|
-
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
50841
|
-
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset:
|
|
50842
|
-
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset:
|
|
50843
|
-
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
50844
|
-
{ key: "index.html", contentType: "text/html; charset=utf-8", offset:
|
|
50845
|
-
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
50844
|
+
{ key: "assets/index-C8FaHVmV.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1052014, sha256: "607f0eff78c1f286d1d94f6d6c08868e2deec8d39ace8176b374f0117026998a" },
|
|
50845
|
+
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1052022, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
|
|
50846
|
+
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1056632, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
|
|
50847
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1545216, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
50848
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1636140, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
50849
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1727124, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
50850
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1818104, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
50851
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1908976, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
50852
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 1999956, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
50853
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2108592, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
50854
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2217676, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
50855
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2326724, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
50856
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2434424, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
50857
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 2522532, length: 4947, sha256: "3fd26f396a5b472e603185fb99d5b905f37b98615b2bf95456e4e9b03ae05429" },
|
|
50858
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2527479, length: 17209, sha256: "dffc9718e2faa63ae2cc919e0a842f585ed565aaaa7c53778e90379442c731b6" }
|
|
50846
50859
|
];
|
|
50847
50860
|
}
|
|
50848
50861
|
});
|
|
@@ -54487,6 +54500,35 @@ function tuneHighContrastAccent(brand, surface) {
|
|
|
54487
54500
|
}
|
|
54488
54501
|
return candidate;
|
|
54489
54502
|
}
|
|
54503
|
+
function deriveAccentText(accent, surfaces) {
|
|
54504
|
+
const all = (typeof surfaces === "string" ? [surfaces] : [...surfaces]).map((s) => s.slice(0, 7));
|
|
54505
|
+
const page = all[0];
|
|
54506
|
+
const worst = (color) => Math.min(...all.map((s) => contrastRatio3(color, s)));
|
|
54507
|
+
const opaque = accent.length === 9 ? mix2(accent.slice(0, 7), page, channel2(accent, 7) / 255) : accent;
|
|
54508
|
+
if (worst(opaque) >= ACCENT_TEXT_MIN_CONTRAST) return opaque;
|
|
54509
|
+
const pole = worst("#FFFFFF") >= worst("#000000") ? "#FFFFFF" : "#000000";
|
|
54510
|
+
for (let step = 1; step <= 100; step++) {
|
|
54511
|
+
const candidate = mix2(pole, opaque, step / 100);
|
|
54512
|
+
if (worst(candidate) >= ACCENT_TEXT_MIN_CONTRAST) return candidate;
|
|
54513
|
+
}
|
|
54514
|
+
if (all.length > 1) {
|
|
54515
|
+
const side2 = (hex2) => relativeLuminance2(hex2) > MID_GREY_LUMINANCE;
|
|
54516
|
+
const sameSide = all.filter((s) => side2(s) === side2(page));
|
|
54517
|
+
return deriveAccentText(accent, sameSide.length < all.length ? sameSide : [page]);
|
|
54518
|
+
}
|
|
54519
|
+
return pole;
|
|
54520
|
+
}
|
|
54521
|
+
function textSurfacesOf(colors) {
|
|
54522
|
+
const out = { light: [], dark: [], highContrast: [] };
|
|
54523
|
+
for (const name of TEXT_BACKDROP_TOKENS) {
|
|
54524
|
+
const value = colors[name];
|
|
54525
|
+
for (const arm of ["light", "dark", "highContrast"]) {
|
|
54526
|
+
const hex2 = typeof value === "string" ? value : value && typeof value === "object" && !Array.isArray(value) ? value[arm] ?? value.light : void 0;
|
|
54527
|
+
if (typeof hex2 === "string" && hex2.startsWith("#") && hex2.length >= 7) out[arm].push(hex2);
|
|
54528
|
+
}
|
|
54529
|
+
}
|
|
54530
|
+
return out;
|
|
54531
|
+
}
|
|
54490
54532
|
function stripBrandFromIdiom(tokens) {
|
|
54491
54533
|
const idiom = tokens.idiom;
|
|
54492
54534
|
if (!idiom || typeof idiom !== "object" || Array.isArray(idiom)) return;
|
|
@@ -54507,7 +54549,7 @@ function stripBrandFromIdiom(tokens) {
|
|
|
54507
54549
|
}
|
|
54508
54550
|
}
|
|
54509
54551
|
}
|
|
54510
|
-
function deriveAccentFamily(primary, secondary, surfaces) {
|
|
54552
|
+
function deriveAccentFamily(primary, secondary, surfaces, textSurfaces = {}) {
|
|
54511
54553
|
const primaryDark = tuneDarkAccent(primary, surfaces.dark, surfaces.light);
|
|
54512
54554
|
const secondaryDark = tuneDarkAccent(secondary, surfaces.dark, surfaces.light);
|
|
54513
54555
|
const primaryHigh = tuneHighContrastAccent(primary, surfaces.highContrast);
|
|
@@ -54524,10 +54566,15 @@ function deriveAccentFamily(primary, secondary, surfaces) {
|
|
|
54524
54566
|
light: textOnArm(primary),
|
|
54525
54567
|
dark: textOnArm(primaryDark),
|
|
54526
54568
|
highContrast: textOn(primaryHigh)
|
|
54569
|
+
},
|
|
54570
|
+
accentText: {
|
|
54571
|
+
light: deriveAccentText(primary, [surfaces.light, ...textSurfaces.light ?? []]),
|
|
54572
|
+
dark: deriveAccentText(primaryDark, [surfaces.dark, ...textSurfaces.dark ?? []]),
|
|
54573
|
+
highContrast: deriveAccentText(primaryHigh, [surfaces.highContrast, ...textSurfaces.highContrast ?? []])
|
|
54527
54574
|
}
|
|
54528
54575
|
};
|
|
54529
54576
|
}
|
|
54530
|
-
var ACCENT_SURFACE_MIN_DELTA, ACCENT_SURFACE_LIGHT_WEIGHT, SECONDARY_SHADE_WEIGHT, SECONDARY_MIN_LSTAR, DARK_ARM_MIN_LIFT, DARK_ARM_TARGET_CONTRAST, DARK_ARM_FLOOR_CONTRAST, DARK_ARM_LSTAR_CAP, HIGH_CONTRAST_TARGET, BRAND_COLOR_TOKENS, BRAND_GLOW_SHADOW;
|
|
54577
|
+
var ACCENT_SURFACE_MIN_DELTA, ACCENT_SURFACE_LIGHT_WEIGHT, SECONDARY_SHADE_WEIGHT, SECONDARY_MIN_LSTAR, DARK_ARM_MIN_LIFT, DARK_ARM_TARGET_CONTRAST, DARK_ARM_FLOOR_CONTRAST, DARK_ARM_LSTAR_CAP, HIGH_CONTRAST_TARGET, ACCENT_TEXT_MIN_CONTRAST, MID_GREY_LUMINANCE, TEXT_BACKDROP_TOKENS, BRAND_COLOR_TOKENS, BRAND_GLOW_SHADOW;
|
|
54531
54578
|
var init_brand_color_math = __esm({
|
|
54532
54579
|
"../../core/ts/src/brand-color-math.ts"() {
|
|
54533
54580
|
ACCENT_SURFACE_MIN_DELTA = 1.08;
|
|
@@ -54539,7 +54586,10 @@ var init_brand_color_math = __esm({
|
|
|
54539
54586
|
DARK_ARM_FLOOR_CONTRAST = 3;
|
|
54540
54587
|
DARK_ARM_LSTAR_CAP = 80;
|
|
54541
54588
|
HIGH_CONTRAST_TARGET = 8.5;
|
|
54542
|
-
|
|
54589
|
+
ACCENT_TEXT_MIN_CONTRAST = 4.5;
|
|
54590
|
+
MID_GREY_LUMINANCE = 0.179;
|
|
54591
|
+
TEXT_BACKDROP_TOKENS = ["surfaceSecondary", "surfaceElevated", "surfaceSubtle", "surfaceTertiary"];
|
|
54592
|
+
BRAND_COLOR_TOKENS = ["accentPrimary", "accentSecondary", "accentSurface", "textOnAccent", "accentText"];
|
|
54543
54593
|
BRAND_GLOW_SHADOW = "glow";
|
|
54544
54594
|
}
|
|
54545
54595
|
});
|
|
@@ -54575,7 +54625,9 @@ function withDerivedAccents(tokensOverlay, wst) {
|
|
|
54575
54625
|
light: lightArm2(surfacePrimary) ?? "#FFFFFF",
|
|
54576
54626
|
dark: armOf(surfacePrimary, "dark") ?? "#0D1117",
|
|
54577
54627
|
highContrast: armOf(surfacePrimary, "highContrast") ?? "#000000"
|
|
54578
|
-
|
|
54628
|
+
// #3275 — the crawl knows only the site's LIGHT surfaces; a light card judged against a dark
|
|
54629
|
+
// arm would fight that arm's page, and `--apply` re-derives every arm after the merge anyway.
|
|
54630
|
+
}, { light: textSurfacesOf(tokensOverlay.colors ?? {}).light });
|
|
54579
54631
|
const keepCrawledLight = (derived, existing) => {
|
|
54580
54632
|
const crawled = lightArm2(existing);
|
|
54581
54633
|
return crawled ? { ...derived, light: crawled } : derived;
|
|
@@ -54584,6 +54636,7 @@ function withDerivedAccents(tokensOverlay, wst) {
|
|
|
54584
54636
|
colors.accentSecondary = keepCrawledLight(family.accentSecondary, tokensOverlay.colors?.accentSecondary);
|
|
54585
54637
|
colors.accentSurface = keepCrawledLight(family.accentSurface, tokensOverlay.colors?.accentSurface);
|
|
54586
54638
|
colors.textOnAccent = keepCrawledLight(family.textOnAccent, tokensOverlay.colors?.textOnAccent);
|
|
54639
|
+
colors.accentText = keepCrawledLight(family.accentText, tokensOverlay.colors?.accentText);
|
|
54587
54640
|
return { ...tokensOverlay, colors };
|
|
54588
54641
|
}
|
|
54589
54642
|
function mergedArm(colors, name, arm, fallback) {
|
|
@@ -54606,11 +54659,12 @@ function alignAccentsToSurfaces(mergedColors, overlayColors) {
|
|
|
54606
54659
|
light: mergedArm(colors, "surfacePrimary", "light", "#FFFFFF"),
|
|
54607
54660
|
dark: mergedArm(colors, "surfacePrimary", "dark", "#0D1117"),
|
|
54608
54661
|
highContrast: mergedArm(colors, "surfacePrimary", "highContrast", "#000000")
|
|
54609
|
-
});
|
|
54662
|
+
}, textSurfacesOf(colors));
|
|
54610
54663
|
colors.accentPrimary = family.accentPrimary;
|
|
54611
54664
|
colors.accentSecondary = family.accentSecondary;
|
|
54612
54665
|
colors.accentSurface = family.accentSurface;
|
|
54613
54666
|
colors.textOnAccent = family.textOnAccent;
|
|
54667
|
+
colors.accentText = family.accentText;
|
|
54614
54668
|
return colors;
|
|
54615
54669
|
}
|
|
54616
54670
|
function deriveBranding(input) {
|
|
Binary file
|
|
@@ -83,7 +83,11 @@ family whose faces could not be fetched, which would otherwise ship as its fallb
|
|
|
83
83
|
### Token discipline — every value is a `TokenRef`, never a literal
|
|
84
84
|
Colors, gradients, shadows, materials, motions are named tokens (`{ token: "accentPrimary" }`), never
|
|
85
85
|
hex. `himi validate` rejects unknown names; a literal hex is a design smell even when it "works." Use the **semantic** roles for meaning:
|
|
86
|
-
`success` / `warning` / `danger` for status, `textOnAccent` for text sitting on an accent surface
|
|
86
|
+
`success` / `warning` / `danger` for status, `textOnAccent` for text sitting on an accent surface,
|
|
87
|
+
and `accentText` for accent-COLOURED text on the page (links, "See all"). `accentPrimary` is the
|
|
88
|
+
accent FILL; many brand accents fail 4.5:1 as text, so brand derivation writes a same-hue
|
|
89
|
+
`accentText` that passes, and secondary/tertiary/link/plain Button labels already use it. It is
|
|
90
|
+
optional: every renderer falls back to `accentPrimary` when a tokens.json has none.
|
|
87
91
|
|
|
88
92
|
### Copy is configuration — never hardcoded in the descriptor
|
|
89
93
|
User-facing text is white-labelable **configuration**, exactly like a color token — a template/app
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/himalaya-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1045.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
|
|
6
6
|
"keywords": [
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"artifactId": "himalaya-cli"
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
|
-
"falconPackageHash": "
|
|
68
|
+
"falconPackageHash": "0a575418cdf281d15de4e62af6654a6d47a91cf26467dad0a437484b"
|
|
69
69
|
}
|
|
@@ -126,6 +126,14 @@ elevation subtle (≤ 2:1 vs the page, dark arms stepping *lighter* as elevation
|
|
|
126
126
|
rises); accents ≥ 3:1 on the page with textOnAccent ≥ 4.5:1; semantic colors
|
|
127
127
|
≥ 3:1 on the page and on their own surfaces.
|
|
128
128
|
|
|
129
|
+
`accentText` (#3275) is deliberately NOT in the ladder. It is the accent's text
|
|
130
|
+
arm, which non-filled button labels paint and which falls back to `accentPrimary`
|
|
131
|
+
when absent. Brand application derives it per arm: the brand itself when it already
|
|
132
|
+
clears 4.5:1 on `surfacePrimary`, else the smallest same-hue step that does
|
|
133
|
+
(`deriveAccentText` in `core/ts/src/brand-color-math.ts`). A kit never has to ship
|
|
134
|
+
it, and `core/ts/tests/brand-tokens.test.ts` checks that every kit × brand result
|
|
135
|
+
clears 4.5:1.
|
|
136
|
+
|
|
129
137
|
Deliberate judgment calls (the 2026-07 color reconsideration):
|
|
130
138
|
|
|
131
139
|
- **playful** — the hot-pink `textPrimary` failed 7:1 everywhere; legibility
|