@wix/himalaya-cli 0.1065.0 → 0.1067.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 +177 -48
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/wix-site-to-himi-app.md +2 -2
- package/package.json +2 -2
- package/templates/beauty-salon/dev/index.ts +1 -5
- package/templates/beauty-salon/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/beauty-salon/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/beauty-salon/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/branded-lite/dev/index.ts +2 -6
- package/templates/branded-lite/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/branded-lite/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/branded-lite/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/community-club/dev/index.ts +1 -5
- package/templates/community-club/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/community-club/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/community-club/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/events-meetups/dev/index.ts +1 -5
- package/templates/events-meetups/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/events-meetups/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/events-meetups/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/gym-fitness/dev/index.ts +1 -5
- package/templates/gym-fitness/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/gym-fitness/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/gym-fitness/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/himi-chat/dev/index.ts +13 -2
- package/templates/himi-chat/tier5-src/himi-chat/index.ts +6 -2
- package/templates/nonprofit-cause/dev/index.ts +1 -5
- package/templates/nonprofit-cause/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/podcast-creator/dev/index.ts +1 -5
- package/templates/podcast-creator/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/podcast-creator/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/podcast-creator/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/portfolio-creative/dev/index.ts +1 -5
- package/templates/portfolio-creative/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/restaurant/dev/index.ts +1 -5
- package/templates/restaurant/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/restaurant/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/restaurant/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/retail-store/dev/index.ts +2 -6
- package/templates/retail-store/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/retail-store/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/retail-store/tier5-src/himi-branded-lite-home/index.ts +5 -5
- package/templates/yoga-studio/dev/index.ts +1 -5
- package/templates/yoga-studio/tier5-src/_shared/himi-layouts.ts +8 -6
- package/templates/yoga-studio/tier5-src/himi-branded-lite-appearance/index.ts +13 -18
- package/templates/yoga-studio/tier5-src/himi-branded-lite-home/index.ts +5 -5
package/dist/cli.mjs
CHANGED
|
@@ -764,6 +764,36 @@ var init_file_store = __esm({
|
|
|
764
764
|
else ledger.push(entry);
|
|
765
765
|
writeFileSync2(this.ledgerPath(app), JSON.stringify(ledger, null, 2));
|
|
766
766
|
}
|
|
767
|
+
// ---- RFC 0061 §3.1 owner-follow `wip` pointer ----
|
|
768
|
+
// Inside the app directory, so `remove` and `reset` take it with the app. `clearWipIf` is a CAS
|
|
769
|
+
// for the way this backend is deployed — ONE writer process (serve-control; serve only reads):
|
|
770
|
+
// the read, compare and delete below are synchronous with no await between them, so no other
|
|
771
|
+
// request in that process can land in the middle. It is not a cross-process lock.
|
|
772
|
+
wipPath(app) {
|
|
773
|
+
return join2(this.appDir(app), "_wip.json");
|
|
774
|
+
}
|
|
775
|
+
readWipSync(app) {
|
|
776
|
+
const b = this.read(app, "_wip.json");
|
|
777
|
+
if (!b) return null;
|
|
778
|
+
try {
|
|
779
|
+
const wip = JSON.parse(b.toString("utf8"));
|
|
780
|
+
return wip && typeof wip.releaseId === "string" ? wip : null;
|
|
781
|
+
} catch {
|
|
782
|
+
return null;
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
async putWip(app, wip) {
|
|
786
|
+
mkdirSync2(this.appDir(app), { recursive: true });
|
|
787
|
+
writeFileSync2(this.wipPath(app), JSON.stringify(wip, null, 2));
|
|
788
|
+
}
|
|
789
|
+
async getWip(app) {
|
|
790
|
+
return this.readWipSync(app);
|
|
791
|
+
}
|
|
792
|
+
async clearWipIf(app, releaseId) {
|
|
793
|
+
if (this.readWipSync(app)?.releaseId !== releaseId) return false;
|
|
794
|
+
rmSync(this.wipPath(app), { force: true });
|
|
795
|
+
return true;
|
|
796
|
+
}
|
|
767
797
|
bundleUrl(_app, sha2565) {
|
|
768
798
|
return `/v1/bundles/${sha2565}.bundle.js`;
|
|
769
799
|
}
|
|
@@ -1407,8 +1437,12 @@ function sentinelizeArchive(raw, fallbackName) {
|
|
|
1407
1437
|
} catch {
|
|
1408
1438
|
}
|
|
1409
1439
|
const name = contentName ?? config.match(/\bname\s*:\s*["']([^"'\n]+)["']/)?.[1] ?? fallbackName;
|
|
1440
|
+
const packageSlug = new RegExp(`\\b(const PACKAGE_SLUG = )"${escapeRe(name)}"`, "g");
|
|
1410
1441
|
return Object.fromEntries(
|
|
1411
|
-
entries.map(([rel, body]) => [
|
|
1442
|
+
entries.map(([rel, body]) => [
|
|
1443
|
+
rel,
|
|
1444
|
+
sentinelizeIdentity(body, { name: IDENTITY_FILES.has(rel) ? name : void 0, ids }).replace(packageSlug, '$1"__HIMI_APP_SLUG__"')
|
|
1445
|
+
])
|
|
1412
1446
|
);
|
|
1413
1447
|
}
|
|
1414
1448
|
function materializeSource(files, name, destDir, slug = name) {
|
|
@@ -22843,7 +22877,6 @@ function shouldRevealError(args) {
|
|
|
22843
22877
|
var EMAIL_RE, URL_HOST_RE, INTEGER_RE, NUMBER_RE;
|
|
22844
22878
|
var init_validation = __esm({
|
|
22845
22879
|
"../../core/ts/src/validation.ts"() {
|
|
22846
|
-
"use strict";
|
|
22847
22880
|
EMAIL_RE = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}$/;
|
|
22848
22881
|
URL_HOST_RE = /^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(:[0-9]+)?$/;
|
|
22849
22882
|
INTEGER_RE = /^[+-]?[0-9]+$/;
|
|
@@ -26444,7 +26477,6 @@ function validateWorkerSubtree(raw, slotId, policy, actionCatalog) {
|
|
|
26444
26477
|
var WORKER_SUBTREE_CEILINGS, ID_PART, ACTION_ID;
|
|
26445
26478
|
var init_worker_subtree = __esm({
|
|
26446
26479
|
"../../core/ts/src/worker-subtree.ts"() {
|
|
26447
|
-
"use strict";
|
|
26448
26480
|
init_worker_subtree_safe_types_generated();
|
|
26449
26481
|
WORKER_SUBTREE_CEILINGS = Object.freeze({
|
|
26450
26482
|
maxEncodedBytes: 65536,
|
|
@@ -27188,6 +27220,49 @@ function sourceFragment(src) {
|
|
|
27188
27220
|
return "";
|
|
27189
27221
|
}
|
|
27190
27222
|
}
|
|
27223
|
+
function cloneWithKids(el, props, kids2) {
|
|
27224
|
+
if (kids2 === el.props.children) return React5.cloneElement(el, props);
|
|
27225
|
+
return React5.cloneElement(el, props, ...Array.isArray(kids2) ? kids2 : [kids2]);
|
|
27226
|
+
}
|
|
27227
|
+
function editA11yParts(node, edit) {
|
|
27228
|
+
if (Array.isArray(node)) {
|
|
27229
|
+
let changed = false;
|
|
27230
|
+
const out = node.map((child) => {
|
|
27231
|
+
const next = editA11yParts(child, edit);
|
|
27232
|
+
if (next !== child) changed = true;
|
|
27233
|
+
return next;
|
|
27234
|
+
});
|
|
27235
|
+
return changed ? out : node;
|
|
27236
|
+
}
|
|
27237
|
+
if (!React5.isValidElement(node) || typeof node.type !== "string") return node;
|
|
27238
|
+
const own3 = node.props;
|
|
27239
|
+
if (own3["data-component-id"] != null) return node;
|
|
27240
|
+
const part = own3[A11Y_PART];
|
|
27241
|
+
const kids2 = own3.children;
|
|
27242
|
+
const nextKids = kids2 == null ? kids2 : editA11yParts(kids2, edit);
|
|
27243
|
+
if (typeof part !== "string" && nextKids === kids2) return node;
|
|
27244
|
+
return cloneWithKids(node, typeof part === "string" ? { ...edit(part, own3), [A11Y_PART]: void 0 } : {}, nextKids);
|
|
27245
|
+
}
|
|
27246
|
+
function a11yPartEdit(routed, authoredName, onNode) {
|
|
27247
|
+
return (part, own3) => {
|
|
27248
|
+
if (part === "derived-name") return authoredName ? {} : { "aria-hidden": "true" };
|
|
27249
|
+
if (part !== "node") return {};
|
|
27250
|
+
onNode();
|
|
27251
|
+
const patch = { ...routed };
|
|
27252
|
+
if (typeof routed["aria-describedby"] === "string" && typeof own3["aria-describedby"] === "string") {
|
|
27253
|
+
patch["aria-describedby"] = `${own3["aria-describedby"]} ${routed["aria-describedby"]}`;
|
|
27254
|
+
}
|
|
27255
|
+
if ("role" in routed && routed.role !== own3.role) {
|
|
27256
|
+
if (!(typeof routed.role === "string" && RANGE_ROLES.has(routed.role))) {
|
|
27257
|
+
patch["aria-valuenow"] = void 0;
|
|
27258
|
+
patch["aria-valuemin"] = void 0;
|
|
27259
|
+
patch["aria-valuemax"] = void 0;
|
|
27260
|
+
}
|
|
27261
|
+
if (routed.role !== "heading" && routed["aria-level"] == null) patch["aria-level"] = void 0;
|
|
27262
|
+
}
|
|
27263
|
+
return patch;
|
|
27264
|
+
};
|
|
27265
|
+
}
|
|
27191
27266
|
function isNativeInteractiveElement(el) {
|
|
27192
27267
|
const props = el.props;
|
|
27193
27268
|
return typeof el.type === "string" && (["button", "input", "select", "textarea"].includes(el.type) || el.type === "a" && typeof props.href === "string");
|
|
@@ -27229,9 +27304,19 @@ function withExtras(name, render) {
|
|
|
27229
27304
|
const inferredDecorative = el.props[INFERRED_DECORATIVE] === true;
|
|
27230
27305
|
const selfRenderedLeaf = el.props[SELF_RENDERED_LEAF] === true;
|
|
27231
27306
|
const roleWhenNamed = el.props[ROLE_WHEN_NAMED];
|
|
27307
|
+
const hasA11yParts = el.props[A11Y_PART] === "root";
|
|
27232
27308
|
if (!Object.keys(pass).length) {
|
|
27233
|
-
if (inferredDecorative || selfRenderedLeaf || roleWhenNamed != null) {
|
|
27234
|
-
|
|
27309
|
+
if (inferredDecorative || selfRenderedLeaf || roleWhenNamed != null || hasA11yParts) {
|
|
27310
|
+
const kids2 = el.props.children;
|
|
27311
|
+
return cloneWithKids(el, {
|
|
27312
|
+
[INFERRED_DECORATIVE]: void 0,
|
|
27313
|
+
[SELF_RENDERED_LEAF]: void 0,
|
|
27314
|
+
[ROLE_WHEN_NAMED]: void 0,
|
|
27315
|
+
[PENDING_RANGE]: void 0,
|
|
27316
|
+
[A11Y_PART]: void 0,
|
|
27317
|
+
...additive ? { style: additive } : {}
|
|
27318
|
+
}, hasA11yParts ? editA11yParts(kids2, a11yPartEdit({}, false, () => {
|
|
27319
|
+
})) : kids2);
|
|
27235
27320
|
}
|
|
27236
27321
|
return additive ? React5.cloneElement(el, { style: additive }) : /* @__PURE__ */ jsx6(Fragment3, { children: el });
|
|
27237
27322
|
}
|
|
@@ -27302,6 +27387,21 @@ function withExtras(name, render) {
|
|
|
27302
27387
|
pass.onClick(e);
|
|
27303
27388
|
};
|
|
27304
27389
|
}
|
|
27390
|
+
if (hasA11yParts) {
|
|
27391
|
+
next[A11Y_PART] = void 0;
|
|
27392
|
+
const routed = {};
|
|
27393
|
+
const rootIsControl = (typeof pass.onClick === "function" || typeof pass.onDoubleClick === "function") && !ownsInteractiveSemantics;
|
|
27394
|
+
if (!rootIsControl) {
|
|
27395
|
+
for (const k of NODE_A11Y_ATTRS) if (next[k] !== void 0) routed[k] = next[k];
|
|
27396
|
+
if (pass[AUTHORED_ROLE] === true || pass["aria-level"] != null) routed.role = next.role;
|
|
27397
|
+
}
|
|
27398
|
+
let nodeFound = false;
|
|
27399
|
+
const kids2 = editA11yParts(prev.children, a11yPartEdit(routed, pass["aria-label"] != null, () => {
|
|
27400
|
+
nodeFound = true;
|
|
27401
|
+
}));
|
|
27402
|
+
if (nodeFound) for (const k of Object.keys(routed)) delete next[k];
|
|
27403
|
+
return cloneWithKids(el, next, kids2);
|
|
27404
|
+
}
|
|
27305
27405
|
return React5.cloneElement(el, next);
|
|
27306
27406
|
};
|
|
27307
27407
|
Wrapped.displayName = name;
|
|
@@ -27816,15 +27916,16 @@ function ariaModal(modal, dflt) {
|
|
|
27816
27916
|
const on3 = modal === true || modal === false ? modal : dflt;
|
|
27817
27917
|
return on3 ? "true" : void 0;
|
|
27818
27918
|
}
|
|
27919
|
+
function a11yModifierString(v, ctx) {
|
|
27920
|
+
if (v == null) return void 0;
|
|
27921
|
+
const r = resolveScalarStatic(v, ctx);
|
|
27922
|
+
const s = r == null ? "" : String(r).trim();
|
|
27923
|
+
return s === "" ? void 0 : s;
|
|
27924
|
+
}
|
|
27819
27925
|
function applyA11ySemantics(node, ctx, extra) {
|
|
27820
27926
|
const m = node?.modifiers;
|
|
27821
27927
|
if (!m) return void 0;
|
|
27822
|
-
const str7 = (v) =>
|
|
27823
|
-
if (v == null) return void 0;
|
|
27824
|
-
const r = resolveScalarStatic(v, ctx);
|
|
27825
|
-
const s = r == null ? "" : String(r).trim();
|
|
27826
|
-
return s === "" ? void 0 : s;
|
|
27827
|
-
};
|
|
27928
|
+
const str7 = (v) => a11yModifierString(v, ctx);
|
|
27828
27929
|
if ((m.accessibilityHidden ?? m.accessibility_hidden) === true) {
|
|
27829
27930
|
extra["aria-hidden"] = "true";
|
|
27830
27931
|
extra.inert = "";
|
|
@@ -28417,9 +28518,13 @@ function renderInner(node, ctx) {
|
|
|
28417
28518
|
case "Badge": {
|
|
28418
28519
|
const _bt = boundTokenName(props.tokenPath, props.token, ctx);
|
|
28419
28520
|
const c = _bt ? C(_bt, "#116DFF") : sevColor(ctx, props.style ?? "info");
|
|
28521
|
+
const m = modifiers;
|
|
28522
|
+
const authoredRole = a11yModifierString(m?.accessibilityRole ?? m?.accessibility_role, ctx);
|
|
28523
|
+
const headingLevel = m?.headingLevel ?? m?.heading_level;
|
|
28524
|
+
const roleDeclared = typeof authoredRole === "string" && (authoredRole === "decorative" || Object.prototype.hasOwnProperty.call(ARIA_ROLE, authoredRole)) || typeof headingLevel === "number" && headingLevel >= 1 && headingLevel <= 6;
|
|
28420
28525
|
const liveCount = typeof props.text === "string" && /^\$(?:service|flag)\b/.test(props.text);
|
|
28421
|
-
const badgeLabel =
|
|
28422
|
-
const badgeRole = liveCount ? "status" : typeof badgeLabel === "string" && badgeLabel.trim() !== "" ? "img" : void 0;
|
|
28526
|
+
const badgeLabel = m?.accessibilityLabel ?? m?.accessibility_label;
|
|
28527
|
+
const badgeRole = roleDeclared ? void 0 : liveCount ? "status" : typeof badgeLabel === "string" && badgeLabel.trim() !== "" ? "img" : void 0;
|
|
28423
28528
|
return /* @__PURE__ */ jsx6("span", { role: badgeRole, style: { display: "inline-flex", alignItems: "center", padding: "3px 9px", borderRadius: 999, fontSize: 12, fontWeight: 700, fontFamily: bodyFont(ctx), background: `color-mix(in srgb, ${c} 16%, ${C("surfacePrimary", "#fff")})`, color: c, ...wrap }, children: ctx.empty ? "" : txt(props.text, ctx) || "Badge" });
|
|
28424
28529
|
}
|
|
28425
28530
|
case "Tag": {
|
|
@@ -28764,7 +28869,7 @@ function renderInner(node, ctx) {
|
|
|
28764
28869
|
}
|
|
28765
28870
|
}
|
|
28766
28871
|
}
|
|
28767
|
-
var useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, pressStylesInjected, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids, rowKids, staggeredKids, asTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, WorkerSubtreeNode, resolveItemDeep2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, ReactiveDirectScalars, HiddenGate, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MenuNode, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, ButtonNode, OtpInputNode, ProgressBarNode, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, initialFocusSeen, PRESENTED_SCOPE, presentedOpeners, presentedObserver, A11yHintDescription, WebRenderer;
|
|
28872
|
+
var useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, pressStylesInjected, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids, rowKids, staggeredKids, asTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, WorkerSubtreeNode, resolveItemDeep2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, ReactiveDirectScalars, HiddenGate, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MenuNode, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, A11Y_PART, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, ButtonNode, OtpInputNode, ProgressBarNode, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, initialFocusSeen, PRESENTED_SCOPE, presentedOpeners, presentedObserver, A11yHintDescription, WebRenderer;
|
|
28768
28873
|
var init_renderNode = __esm({
|
|
28769
28874
|
"../../core/web-renderer/src/renderNode.tsx"() {
|
|
28770
28875
|
"use strict";
|
|
@@ -30282,13 +30387,20 @@ var init_renderNode = __esm({
|
|
|
30282
30387
|
if (!onChange || !ctx.onAction) return;
|
|
30283
30388
|
ctx.onAction({ ...onChange, params: { ...onChange.params ?? {}, value: next }, args: { ...onChange.args ?? {}, value: next } });
|
|
30284
30389
|
};
|
|
30285
|
-
const
|
|
30286
|
-
const next = Math.min(max, Math.max(min,
|
|
30390
|
+
const commit = (target) => {
|
|
30391
|
+
const next = Math.min(max, Math.max(min, target));
|
|
30287
30392
|
if (next === value) return;
|
|
30288
30393
|
setValue(next);
|
|
30289
30394
|
setBagValue(encodeStepperFieldValue(next, { min, max }));
|
|
30290
30395
|
dispatch(next);
|
|
30291
30396
|
};
|
|
30397
|
+
const bump = (delta) => commit(value + delta);
|
|
30398
|
+
const onValueKeyDown = (e) => {
|
|
30399
|
+
const target = e.key === "ArrowUp" ? value + step : e.key === "ArrowDown" ? value - step : e.key === "Home" && typeof props.min === "number" ? min : e.key === "End" && typeof props.max === "number" ? max : void 0;
|
|
30400
|
+
if (target === void 0) return;
|
|
30401
|
+
e.preventDefault();
|
|
30402
|
+
commit(target);
|
|
30403
|
+
};
|
|
30292
30404
|
const box = { display: "inline-flex", alignItems: "center", gap: 12, background: C("surfaceTertiary", "#eee"), borderRadius: ctx.radius("md", 8), padding: "4px 6px", width: "fit-content", ...wrap };
|
|
30293
30405
|
const disabled = (at) => at === "min" ? value <= min : value >= max;
|
|
30294
30406
|
const btn = (at) => ({
|
|
@@ -30305,25 +30417,31 @@ var init_renderNode = __esm({
|
|
|
30305
30417
|
opacity: disabled(at) ? 0.4 : 1,
|
|
30306
30418
|
userSelect: "none"
|
|
30307
30419
|
});
|
|
30308
|
-
const
|
|
30420
|
+
const valueA11y = {
|
|
30421
|
+
[A11Y_PART]: "node",
|
|
30422
|
+
role: "spinbutton",
|
|
30423
|
+
"aria-valuemin": typeof props.min === "number" ? min : void 0,
|
|
30424
|
+
"aria-valuemax": typeof props.max === "number" ? max : void 0
|
|
30425
|
+
};
|
|
30426
|
+
const root = { [A11Y_PART]: "root" };
|
|
30309
30427
|
if (ctx.empty) {
|
|
30310
|
-
return /* @__PURE__ */ jsxs3("div", { ...
|
|
30428
|
+
return /* @__PURE__ */ jsxs3("div", { ...root, style: box, children: [
|
|
30311
30429
|
/* @__PURE__ */ jsx6("span", { style: btn("min"), children: "\u2212" }),
|
|
30312
|
-
/* @__PURE__ */ jsx6("b", { style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: "\u2014" }),
|
|
30430
|
+
/* @__PURE__ */ jsx6("b", { ...valueA11y, style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: "\u2014" }),
|
|
30313
30431
|
/* @__PURE__ */ jsx6("span", { style: btn("max"), children: "+" })
|
|
30314
30432
|
] });
|
|
30315
30433
|
}
|
|
30316
30434
|
if (!ctx.onAction) {
|
|
30317
|
-
return /* @__PURE__ */ jsxs3("div", { ...
|
|
30435
|
+
return /* @__PURE__ */ jsxs3("div", { ...root, style: box, children: [
|
|
30318
30436
|
/* @__PURE__ */ jsx6("span", { style: btn("min"), children: "\u2212" }),
|
|
30319
|
-
/* @__PURE__ */ jsx6("b", { style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: value }),
|
|
30437
|
+
/* @__PURE__ */ jsx6("b", { ...valueA11y, "aria-valuenow": value, "aria-readonly": "true", style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: value }),
|
|
30320
30438
|
/* @__PURE__ */ jsx6("span", { style: btn("max"), children: "+" })
|
|
30321
30439
|
] });
|
|
30322
30440
|
}
|
|
30323
|
-
return /* @__PURE__ */ jsxs3("div", { ...
|
|
30324
|
-
/* @__PURE__ */ jsx6("button", { type: "button", "aria-label": "Decrease", disabled: disabled("min"), onClick: () => bump(-step), style: { ...btn("min"), font: "inherit" }, children: "\u2212" }),
|
|
30325
|
-
/* @__PURE__ */ jsx6("b", { style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111"), fontVariantNumeric: "tabular-nums" }, children: value }),
|
|
30326
|
-
/* @__PURE__ */ jsx6("button", { type: "button", "aria-label": "Increase", disabled: disabled("max"), onClick: () => bump(step), style: { ...btn("max"), font: "inherit" }, children: "+" })
|
|
30441
|
+
return /* @__PURE__ */ jsxs3("div", { ...root, style: box, children: [
|
|
30442
|
+
/* @__PURE__ */ jsx6("button", { type: "button", tabIndex: -1, "aria-label": "Decrease", disabled: disabled("min"), onClick: () => bump(-step), style: { ...btn("min"), font: "inherit" }, children: "\u2212" }),
|
|
30443
|
+
/* @__PURE__ */ jsx6("b", { ...valueA11y, "aria-valuenow": value, tabIndex: 0, onKeyDown: onValueKeyDown, style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111"), fontVariantNumeric: "tabular-nums" }, children: value }),
|
|
30444
|
+
/* @__PURE__ */ jsx6("button", { type: "button", tabIndex: -1, "aria-label": "Increase", disabled: disabled("max"), onClick: () => bump(step), style: { ...btn("max"), font: "inherit" }, children: "+" })
|
|
30327
30445
|
] });
|
|
30328
30446
|
});
|
|
30329
30447
|
SYNTHETIC_TAP_ROLE = "data-hm-synthetic-role";
|
|
@@ -30334,6 +30452,8 @@ var init_renderNode = __esm({
|
|
|
30334
30452
|
AUTHORED_ROLE = "data-hm-authored-role";
|
|
30335
30453
|
PENDING_RANGE = "data-hm-pending-range";
|
|
30336
30454
|
RANGE_ROLES = /* @__PURE__ */ new Set(["progressbar", "slider", "scrollbar", "spinbutton", "meter"]);
|
|
30455
|
+
A11Y_PART = "data-hm-a11y-part";
|
|
30456
|
+
NODE_A11Y_ATTRS = ["aria-label", "aria-valuetext", "aria-level", "aria-describedby", "aria-disabled", "aria-selected"];
|
|
30337
30457
|
INTERACTIVE_ROLES = /* @__PURE__ */ new Set([
|
|
30338
30458
|
"button",
|
|
30339
30459
|
"checkbox",
|
|
@@ -30916,19 +31036,21 @@ var init_renderNode = __esm({
|
|
|
30916
31036
|
const count2 = shown2.length + overflow;
|
|
30917
31037
|
const countText = count2 > 0 ? `${count2} ${count2 === 1 ? "person" : "people"}` : "";
|
|
30918
31038
|
const groupName = [caption, countText].filter(Boolean).join(", ");
|
|
30919
|
-
return /* @__PURE__ */ jsxs3("div", { role: "group", "aria-label": groupName || void 0, "data-a11y-value": countText || void 0, ...{ [SELF_RENDERED_LEAF]: true }, style: { width: "100%", ...wrap }, children: [
|
|
30920
|
-
/* @__PURE__ */ jsxs3("div", { style: { display: "flex" }, children: [
|
|
31039
|
+
return /* @__PURE__ */ jsxs3("div", { role: "group", "aria-label": groupName || void 0, "data-a11y-value": countText || void 0, ...{ [SELF_RENDERED_LEAF]: true, [A11Y_PART]: "root" }, style: { width: "100%", ...wrap }, children: [
|
|
31040
|
+
/* @__PURE__ */ jsxs3("div", { role: "list", style: { display: "flex" }, children: [
|
|
30921
31041
|
shown2.map((a, i) => {
|
|
30922
31042
|
const ring = props.ringGradient ? ctx.gradient(props.ringGradient) : void 0;
|
|
30923
31043
|
const wrapStyle = ring ? { marginLeft: i === 0 ? 0 : -(size - shift), background: ring, padding: 2.5, borderRadius: "50%" } : { marginLeft: i === 0 ? 0 : -(size - shift), border: `2px solid ${C("surfacePrimary", "#fff")}`, borderRadius: "50%" };
|
|
30924
|
-
|
|
31044
|
+
const who = asText2(a.initials).trim();
|
|
31045
|
+
const circle = avatarCircle(who || "?", size, C, true, bodyFont(ctx));
|
|
31046
|
+
return who ? /* @__PURE__ */ jsx6("div", { role: "listitem", style: wrapStyle, children: React5.cloneElement(circle, { role: "img", "aria-label": who }) }, i) : /* @__PURE__ */ jsx6("div", { "aria-hidden": "true", style: wrapStyle, children: circle }, i);
|
|
30925
31047
|
}),
|
|
30926
|
-
overflow > 0 && /* @__PURE__ */
|
|
31048
|
+
overflow > 0 && /* @__PURE__ */ jsx6("div", { role: "listitem", style: { marginLeft: -(size - shift), width: size, height: size, borderRadius: "50%", border: `2px solid ${C("surfacePrimary", "#fff")}`, background: C("surfaceTertiary", "#e6e6e6"), color: C("textPrimary", "#111"), display: "grid", placeItems: "center", fontSize: size * 0.32, fontWeight: 700, fontFamily: bodyFont(ctx) }, children: /* @__PURE__ */ jsxs3("span", { role: "img", "aria-label": `${overflow} more`, children: [
|
|
30927
31049
|
"+",
|
|
30928
31050
|
overflow
|
|
30929
|
-
] })
|
|
31051
|
+
] }) })
|
|
30930
31052
|
] }),
|
|
30931
|
-
props.caption && /* @__PURE__ */ jsx6("div", { style: { fontSize: 13, color: C("textSecondary", "#888"), marginTop: 8 }, children: txt(props.caption, ctx) })
|
|
31053
|
+
props.caption && /* @__PURE__ */ jsx6("div", { ...{ [A11Y_PART]: "derived-name" }, style: { fontSize: 13, color: C("textSecondary", "#888"), marginTop: 8 }, children: txt(props.caption, ctx) })
|
|
30932
31054
|
] });
|
|
30933
31055
|
});
|
|
30934
31056
|
CHART_STROKE_CYCLE = ["solid", "dashed", "dotted"];
|
|
@@ -31741,11 +31863,11 @@ var init_renderNode = __esm({
|
|
|
31741
31863
|
const boundImageUrl = useResolvedScalar(props.imageUrl != null && isBinding(props.imageUrl) ? props.imageUrl : void 0, ctx);
|
|
31742
31864
|
const rawImageUrl = props.imageUrl != null && isBinding(props.imageUrl) ? boundImageUrl : props.imageUrl;
|
|
31743
31865
|
const imageUrl = typeof rawImageUrl === "string" && rawImageUrl !== "" ? resolveAssetUrl(rawImageUrl, ctx.assetBaseUrl) : void 0;
|
|
31744
|
-
return /* @__PURE__ */ jsxs3("div", { style: { width: "100%", ...wrap }, children: [
|
|
31866
|
+
return /* @__PURE__ */ jsxs3("div", { ...{ [A11Y_PART]: "root" }, style: { width: "100%", ...wrap }, children: [
|
|
31745
31867
|
/* @__PURE__ */ jsxs3("div", { style: { position: "relative", height: Math.min(props.expandedHeight ?? 120, 160), borderRadius: ctx.radius("md", 10), overflow: "hidden", background: imageUrl ? void 0 : `linear-gradient(135deg, ${C("accentPrimary", "#116DFF")}, ${C("accentSecondary", "#0E5FE3")})` }, children: [
|
|
31746
31868
|
imageUrl && /* @__PURE__ */ jsx6("img", { src: imageUrl, alt: "", style: { width: "100%", height: "100%", objectFit: "cover" } }),
|
|
31747
31869
|
/* @__PURE__ */ jsxs3("div", { style: { position: "absolute", left: 14, bottom: 12, color: "#fff", textShadow: "0 1px 4px rgba(0,0,0,.5)" }, children: [
|
|
31748
|
-
/* @__PURE__ */ jsx6("div", { role: "heading", "aria-level": 2, style: { fontFamily: ctx.font("title1").family || ctx.idiom && ctx.idiom !== "base" ? fontStack(ctx.font("title1").family, ctx.idiom) : '"Wix Madefor Display", system-ui', fontWeight: 700, fontSize: 20 }, children: txt(props.title, ctx) }),
|
|
31870
|
+
/* @__PURE__ */ jsx6("div", { ...{ [A11Y_PART]: "node" }, role: "heading", "aria-level": 2, style: { fontFamily: ctx.font("title1").family || ctx.idiom && ctx.idiom !== "base" ? fontStack(ctx.font("title1").family, ctx.idiom) : '"Wix Madefor Display", system-ui', fontWeight: 700, fontSize: 20 }, children: txt(props.title, ctx) }),
|
|
31749
31871
|
props.subtitle && /* @__PURE__ */ jsx6("div", { style: { fontSize: 13, opacity: 0.9 }, children: txt(props.subtitle, ctx) })
|
|
31750
31872
|
] })
|
|
31751
31873
|
] }),
|
|
@@ -38069,6 +38191,12 @@ var init_src6 = __esm({
|
|
|
38069
38191
|
}
|
|
38070
38192
|
});
|
|
38071
38193
|
|
|
38194
|
+
// ../../core/serve-storage/src/wip-pointer.ts
|
|
38195
|
+
var init_wip_pointer = __esm({
|
|
38196
|
+
"../../core/serve-storage/src/wip-pointer.ts"() {
|
|
38197
|
+
}
|
|
38198
|
+
});
|
|
38199
|
+
|
|
38072
38200
|
// ../../core/serve-storage/src/release-patch.ts
|
|
38073
38201
|
import { createHash as createHash17 } from "node:crypto";
|
|
38074
38202
|
function sha256hex(b) {
|
|
@@ -38104,6 +38232,7 @@ function releaseContentId(m) {
|
|
|
38104
38232
|
var init_release_patch = __esm({
|
|
38105
38233
|
"../../core/serve-storage/src/release-patch.ts"() {
|
|
38106
38234
|
init_widget_identity();
|
|
38235
|
+
init_wip_pointer();
|
|
38107
38236
|
}
|
|
38108
38237
|
});
|
|
38109
38238
|
|
|
@@ -52942,21 +53071,21 @@ var init_preview_assets_generated = __esm({
|
|
|
52942
53071
|
"../../packages/serve/src/preview-assets.generated.ts"() {
|
|
52943
53072
|
init_preview_assets_format();
|
|
52944
53073
|
PREVIEW_ASSET_MANIFEST = [
|
|
52945
|
-
{ key: "assets/index-
|
|
52946
|
-
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset:
|
|
52947
|
-
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset:
|
|
52948
|
-
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset:
|
|
52949
|
-
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
52950
|
-
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset:
|
|
52951
|
-
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset:
|
|
52952
|
-
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
52953
|
-
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset:
|
|
52954
|
-
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
52955
|
-
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset:
|
|
52956
|
-
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset:
|
|
52957
|
-
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
52958
|
-
{ key: "index.html", contentType: "text/html; charset=utf-8", offset:
|
|
52959
|
-
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
53074
|
+
{ key: "assets/index-RMW-OZ7N.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1062852, sha256: "5ceea282c8f188d80853097ec1e56e9f363fcd19e5b7d0882134f326db513d89" },
|
|
53075
|
+
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1062860, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
|
|
53076
|
+
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1067470, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
|
|
53077
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1556054, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
53078
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1646978, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
53079
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1737962, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
53080
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1828942, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
53081
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1919814, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
53082
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2010794, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
53083
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2119430, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
53084
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2228514, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
53085
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2337562, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
53086
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2445262, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
53087
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 2533370, length: 4947, sha256: "f7717e4d819fee4e0719a369ca061f514e02ff24f7f0dacaa6469a4a2fca8dcf" },
|
|
53088
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2538317, length: 17209, sha256: "dffc9718e2faa63ae2cc919e0a842f585ed565aaaa7c53778e90379442c731b6" }
|
|
52960
53089
|
];
|
|
52961
53090
|
}
|
|
52962
53091
|
});
|
|
Binary file
|
|
@@ -178,8 +178,8 @@ book says which happened on the `cms collections:` line (`(skipped: no owner tok
|
|
|
178
178
|
The `clientId`-is-the-binding rule above is about the **app's** runtime site binding, not this.
|
|
179
179
|
|
|
180
180
|
`--apply` writes `provisioning.json` + token **values**, and patches the branded-lite
|
|
181
|
-
home in `dev/index.ts`: its `onAppear` params (`ownerDefaultLayout`, `
|
|
182
|
-
`
|
|
181
|
+
home in `dev/index.ts`: its `onAppear` params (`ownerDefaultLayout`, `verticals`, and
|
|
182
|
+
`brandAccent` in apps scaffolded before the home's brand colour followed the tokens) and, when the analysis recognized any vertical, the Explore grid, the home
|
|
183
183
|
modules and — on a site without `store` — the Shop calls to action, naming what it
|
|
184
184
|
removed in its notes (`himi docs wix-business-context`). It does **not** rewrite
|
|
185
185
|
`config.ts` tabBar — you still set 2–4 Hebrew/RTL tabs to the site's jobs. If home still
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/himalaya-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1067.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": "0c8d3503f5ca13101d4857f4aea03d5974e1c26ac88f40e350b6d4de"
|
|
69
69
|
}
|
|
@@ -2335,7 +2335,6 @@ const SCREENS = runtimeSetting({
|
|
|
2335
2335
|
"verticals": "[\"store\",\"bookings\",\"plans\",\"blog\"]",
|
|
2336
2336
|
"homeModules": "[{\"id\":\"member_progress\",\"label\":\"This week's schedule\",\"dataSource\":\"member.bookings.schedule\",\"emptyWhen\":[\"hideMemberProgress\"]},{\"id\":\"up_next\",\"label\":\"Up next\",\"dataSource\":\"member.bookings\",\"emptyWhen\":[\"hideNextBooking\",\"hidePersonalError\"]},{\"id\":\"saved\",\"label\":\"Saved on this device\",\"dataSource\":\"device.saved_items\",\"emptyWhen\":[\"noSavedContent\"]},{\"id\":\"section_0\",\"label\":\"Discover 1\",\"dataSource\":\"salonLuxe.section0\",\"emptyWhen\":[\"hideHeroImage\"]},{\"id\":\"section_1\",\"label\":\"__HIMI_APP_NAME__\",\"dataSource\":\"salonLuxe.section1\"}]",
|
|
2337
2337
|
"ownerDefaultLayout": "salonLuxe",
|
|
2338
|
-
"brandAccent": "#A65E58",
|
|
2339
2338
|
"copy": "{\"home.bookVisitCta\":\"Book a visit\",\"home.featuredTitle\":\"Salon picks\",\"home.stylistsCaption\":\"Meet your stylists\",\"home.treatmentsSubtitle\":\"Book your favorite in a couple of taps.\",\"home.treatmentsTitle\":\"Signature treatments\"}"
|
|
2340
2339
|
}
|
|
2341
2340
|
}
|
|
@@ -4953,10 +4952,7 @@ const SCREENS = runtimeSetting({
|
|
|
4953
4952
|
"bottom": 28
|
|
4954
4953
|
},
|
|
4955
4954
|
"onAppear": {
|
|
4956
|
-
"actionId": "tier5.himiBrandedAppearance.sync"
|
|
4957
|
-
"params": {
|
|
4958
|
-
"brandAccent": "#A65E58"
|
|
4959
|
-
}
|
|
4955
|
+
"actionId": "tier5.himiBrandedAppearance.sync"
|
|
4960
4956
|
}
|
|
4961
4957
|
}
|
|
4962
4958
|
},
|
|
@@ -134,12 +134,14 @@ export function isAccentId(x: unknown): x is AccentId {
|
|
|
134
134
|
return typeof x === "string" && (ACCENT_IDS as readonly string[]).includes(x);
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
/** Resolve an accent id to
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
/** Resolve an accent id to its curated hex, or "" for `brand` and any unknown value.
|
|
138
|
+
* "" is deliberate: a bound `backgroundColorPath` that resolves empty keeps the surface's
|
|
139
|
+
* own `accentPrimary` token on every renderer, and that token IS the brand — after a
|
|
140
|
+
* `site analyze --apply` and after a hand edit of tokens.json alike. A brand colour copied
|
|
141
|
+
* into the descriptor instead (the old `brandAccent` param) went stale on the second path:
|
|
142
|
+
* the Home pill kept the template's blue after a rebrand. */
|
|
143
|
+
export function accentColor(id: string): string {
|
|
144
|
+
return isAccentId(id) ? ACCENT_META[id].hex : "";
|
|
143
145
|
}
|
|
144
146
|
|
|
145
147
|
/** Content-derived default: booking intent > deep catalog > editorial (blog-forward) > balanced.
|
|
@@ -19,11 +19,10 @@ import {
|
|
|
19
19
|
interface State {
|
|
20
20
|
/** The pending accent id (persisted on Apply, re-read by the home worker). */
|
|
21
21
|
pendingAccent: string;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
//
|
|
26
|
-
// NOT per-row `$item.` fields, so each static swatch binds its own flat field.
|
|
22
|
+
// Per-accent swatch colors. backgroundColorPath resolves `$service:` paths but NOT
|
|
23
|
+
// per-row `$item.` fields, so each static swatch binds its own flat field.
|
|
24
|
+
// `accentHex_brand` is "" on purpose: the swatch keeps its own accentPrimary token,
|
|
25
|
+
// which is the brand (see accentColor in _shared/himi-layouts.ts).
|
|
27
26
|
accentHex_brand: string;
|
|
28
27
|
accentHex_amber: string;
|
|
29
28
|
accentHex_terracotta: string;
|
|
@@ -54,7 +53,7 @@ function paramValue(arg: unknown, key: string): string {
|
|
|
54
53
|
return typeof result === "string" ? result : "";
|
|
55
54
|
}
|
|
56
55
|
|
|
57
|
-
function build(pendingAccent: string
|
|
56
|
+
function build(pendingAccent: string): State {
|
|
58
57
|
const flags: Record<string, boolean> = {};
|
|
59
58
|
for (const id of ACCENT_IDS) {
|
|
60
59
|
flags[`selected_${id}`] = id === pendingAccent;
|
|
@@ -63,8 +62,7 @@ function build(pendingAccent: string, brandAccent: string): State {
|
|
|
63
62
|
return {
|
|
64
63
|
...flags,
|
|
65
64
|
pendingAccent,
|
|
66
|
-
|
|
67
|
-
accentHex_brand: brandAccent || ACCENT_META.amber.hex,
|
|
65
|
+
accentHex_brand: "",
|
|
68
66
|
accentHex_amber: ACCENT_META.amber.hex,
|
|
69
67
|
accentHex_terracotta: ACCENT_META.terracotta.hex,
|
|
70
68
|
accentHex_sage: ACCENT_META.sage.hex,
|
|
@@ -84,24 +82,21 @@ const svc = defineService<State, {
|
|
|
84
82
|
apply: (state: State) => State;
|
|
85
83
|
reset: (state: State) => State;
|
|
86
84
|
}>("himiBrandedAppearance", {
|
|
87
|
-
state: build(initialAccent()
|
|
85
|
+
state: build(initialAccent()),
|
|
88
86
|
actions: {
|
|
89
|
-
// onAppear: re-read the persisted accent
|
|
90
|
-
//
|
|
91
|
-
sync: (
|
|
92
|
-
const brandAccent = paramValue(arg, "brandAccent") || state.brandAccent;
|
|
93
|
-
return build(initialAccent(), brandAccent);
|
|
94
|
-
},
|
|
87
|
+
// onAppear: re-read the persisted accent so the swatches reflect reality. An older
|
|
88
|
+
// descriptor may still pass a `brandAccent`; it is not used (the Brand swatch is the token).
|
|
89
|
+
sync: () => build(initialAccent()),
|
|
95
90
|
// Tapping an accent swatch marks it pending (persisted on Apply).
|
|
96
91
|
selectAccent: (state, arg) => {
|
|
97
92
|
const id = paramValue(arg, "id");
|
|
98
93
|
if (!isAccentId(id)) return state;
|
|
99
|
-
return build(id
|
|
94
|
+
return build(id);
|
|
100
95
|
},
|
|
101
96
|
// Apply: persist the accent; the home worker re-reads it on launch.
|
|
102
97
|
apply: (state) => {
|
|
103
98
|
try { storage()?.setItem(ACCENT_KEY, state.pendingAccent); } catch { /* best-effort */ }
|
|
104
|
-
return build(state.pendingAccent
|
|
99
|
+
return build(state.pendingAccent);
|
|
105
100
|
},
|
|
106
101
|
// Reset: clear the override, reverting to the brand accent.
|
|
107
102
|
reset: (state) => {
|
|
@@ -110,7 +105,7 @@ const svc = defineService<State, {
|
|
|
110
105
|
if (store?.removeItem) store.removeItem(ACCENT_KEY);
|
|
111
106
|
else store?.setItem(ACCENT_KEY, "");
|
|
112
107
|
} catch { /* best-effort */ }
|
|
113
|
-
return build(DEFAULT_ACCENT
|
|
108
|
+
return build(DEFAULT_ACCENT);
|
|
114
109
|
},
|
|
115
110
|
},
|
|
116
111
|
});
|
|
@@ -338,11 +338,11 @@ function storedLayout(): string | null {
|
|
|
338
338
|
function storedAccent(): string {
|
|
339
339
|
try { return storage()?.getItem(ACCENT_KEY) ?? ""; } catch { return ""; }
|
|
340
340
|
}
|
|
341
|
-
//
|
|
342
|
-
//
|
|
343
|
-
//
|
|
344
|
-
function resolveAccent(
|
|
345
|
-
return resolveAccentColor(storedAccent()
|
|
341
|
+
// The member's chosen accent (storage), else "" — the surface keeps its accentPrimary token,
|
|
342
|
+
// which is the brand. An older descriptor's `brandAccent` param is ignored: it was a copy of
|
|
343
|
+
// the brand that a hand edit of tokens.json left behind.
|
|
344
|
+
function resolveAccent(_arg?: unknown): string {
|
|
345
|
+
return resolveAccentColor(storedAccent());
|
|
346
346
|
}
|
|
347
347
|
|
|
348
348
|
// onAppear param reader (the himi-branded-lite-cms pattern): the descriptor
|
|
@@ -2923,8 +2923,7 @@ const SCREENS = runtimeSetting({
|
|
|
2923
2923
|
"params": {
|
|
2924
2924
|
"verticals": "[\"store\",\"bookings\",\"restaurants\",\"programs\",\"plans\",\"feed\",\"members\",\"forum\",\"coupons\",\"notifications\",\"loyalty\",\"reviews\",\"portfolio\",\"reservations\",\"invoices\",\"badges\",\"notifsettings\",\"events\",\"blog\",\"groups\",\"cms\",\"donations\",\"giftCards\",\"videos\",\"podcasts\",\"forms\",\"galleries\",\"inbox\",\"faq\"]",
|
|
2925
2925
|
"homeModules": "[{\"id\":\"member_progress\",\"label\":\"This week's schedule\",\"dataSource\":\"member.bookings.schedule\",\"emptyWhen\":[\"hideMemberProgress\"]},{\"id\":\"up_next\",\"label\":\"Up next\",\"dataSource\":\"member.bookings\",\"emptyWhen\":[\"hideNextBooking\",\"hidePersonalError\"]},{\"id\":\"saved\",\"label\":\"Saved on this device\",\"dataSource\":\"device.saved_items\",\"emptyWhen\":[\"noSavedContent\"]},{\"id\":\"section_0\",\"label\":\"Discover 1\",\"dataSource\":\"classic.section0\",\"emptyWhen\":[\"hideFeaturedSkeleton\"]},{\"id\":\"section_1\",\"label\":\"Featured products\",\"dataSource\":\"classic.section1\"}]",
|
|
2926
|
-
"ownerDefaultLayout": ""
|
|
2927
|
-
"brandAccent": "#0A66C2"
|
|
2926
|
+
"ownerDefaultLayout": ""
|
|
2928
2927
|
}
|
|
2929
2928
|
}
|
|
2930
2929
|
}
|
|
@@ -5981,10 +5980,7 @@ const SCREENS = runtimeSetting({
|
|
|
5981
5980
|
"bottom": 28
|
|
5982
5981
|
},
|
|
5983
5982
|
"onAppear": {
|
|
5984
|
-
"actionId": "tier5.himiBrandedAppearance.sync"
|
|
5985
|
-
"params": {
|
|
5986
|
-
"brandAccent": "#0A66C2"
|
|
5987
|
-
}
|
|
5983
|
+
"actionId": "tier5.himiBrandedAppearance.sync"
|
|
5988
5984
|
}
|
|
5989
5985
|
}
|
|
5990
5986
|
},
|
|
@@ -134,12 +134,14 @@ export function isAccentId(x: unknown): x is AccentId {
|
|
|
134
134
|
return typeof x === "string" && (ACCENT_IDS as readonly string[]).includes(x);
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
/** Resolve an accent id to
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
/** Resolve an accent id to its curated hex, or "" for `brand` and any unknown value.
|
|
138
|
+
* "" is deliberate: a bound `backgroundColorPath` that resolves empty keeps the surface's
|
|
139
|
+
* own `accentPrimary` token on every renderer, and that token IS the brand — after a
|
|
140
|
+
* `site analyze --apply` and after a hand edit of tokens.json alike. A brand colour copied
|
|
141
|
+
* into the descriptor instead (the old `brandAccent` param) went stale on the second path:
|
|
142
|
+
* the Home pill kept the template's blue after a rebrand. */
|
|
143
|
+
export function accentColor(id: string): string {
|
|
144
|
+
return isAccentId(id) ? ACCENT_META[id].hex : "";
|
|
143
145
|
}
|
|
144
146
|
|
|
145
147
|
/** Content-derived default: booking intent > deep catalog > editorial (blog-forward) > balanced.
|