@wix/himalaya-cli 0.1208.0 → 0.1210.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 +168 -25
- package/dist/preview-assets.generated.bin +0 -0
- package/package.json +2 -2
- package/templates/beauty-salon-owner/dev/index.ts +18 -13
- package/templates/beauty-salon-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/community-club-owner/dev/index.ts +18 -13
- package/templates/community-club-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/community-club-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/community-club-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/community-club-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/community-club-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/community-club-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/community-club-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/community-club-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/events-meetups-owner/dev/index.ts +18 -13
- package/templates/events-meetups-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/events-meetups-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/events-meetups-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/events-meetups-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/gym-fitness-owner/dev/index.ts +18 -13
- package/templates/gym-fitness-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/nonprofit-cause-owner/dev/index.ts +18 -13
- package/templates/nonprofit-cause-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/owner-lite/dev/index.ts +19 -14
- package/templates/owner-lite/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/owner-lite/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/owner-lite/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/owner-lite/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/owner-lite/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/owner-lite/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/owner-lite/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/owner-lite/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/podcast-creator-owner/dev/index.ts +18 -13
- package/templates/podcast-creator-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/portfolio-creative-owner/dev/index.ts +18 -13
- package/templates/portfolio-creative-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/restaurant-owner/dev/index.ts +18 -13
- package/templates/restaurant-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/restaurant-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/restaurant-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/restaurant-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/retail-store-owner/dev/index.ts +18 -13
- package/templates/retail-store-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/retail-store-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/retail-store-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/retail-store-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
- package/templates/yoga-studio-owner/dev/index.ts +18 -13
- package/templates/yoga-studio-owner/tier5-src/_shared/himi-text.ts +24 -0
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-account.ts +4 -0
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
package/dist/cli.mjs
CHANGED
|
@@ -6818,6 +6818,7 @@ function walk(node, registry, path2, out2) {
|
|
|
6818
6818
|
var SYSTEM_FONT_FAMILY, TONAL_ELEVATION_ALPHA, COLOR_TOKEN_PROPS, TYPOGRAPHY_TOKEN_PROPS;
|
|
6819
6819
|
var init_tokens = __esm({
|
|
6820
6820
|
"../../core/ts/src/tokens.ts"() {
|
|
6821
|
+
"use strict";
|
|
6821
6822
|
SYSTEM_FONT_FAMILY = "$system";
|
|
6822
6823
|
TONAL_ELEVATION_ALPHA = [0, 0.05, 0.08, 0.11, 0.12, 0.14];
|
|
6823
6824
|
COLOR_TOKEN_PROPS = {
|
|
@@ -6868,7 +6869,6 @@ function resolveTranslation(value, catalog, sourceCatalog) {
|
|
|
6868
6869
|
var BINDING_SIGILS, BINDING_SIGIL_RE, TRANSLATION_PREFIX, TRANSLATION_KEY_RE;
|
|
6869
6870
|
var init_bindings = __esm({
|
|
6870
6871
|
"../../core/ts/src/bindings.ts"() {
|
|
6871
|
-
"use strict";
|
|
6872
6872
|
BINDING_SIGILS = ["service", "flag", "item", "t"];
|
|
6873
6873
|
BINDING_SIGIL_RE = new RegExp(
|
|
6874
6874
|
`^\\$(?:${BINDING_SIGILS.filter((s) => s !== "t").join("|")})\\b|^\\$t:`
|
|
@@ -9324,7 +9324,7 @@ async function bootBundleWorker(bundleJs, opts) {
|
|
|
9324
9324
|
input: opts.input ?? {},
|
|
9325
9325
|
wixApi,
|
|
9326
9326
|
// v1 best-effort stubs — a visitor-scoped load() reads Wix, not device-local state.
|
|
9327
|
-
storage: { get: () => "", set: () => {
|
|
9327
|
+
storage: opts.storage ? { get: (k) => opts.storage.getItem(k) ?? "", set: (k, v) => opts.storage.setItem(k, v), getItem: (k) => opts.storage.getItem(k), setItem: (k, v) => opts.storage.setItem(k, v) } : { get: () => "", set: () => {
|
|
9328
9328
|
}, getItem: () => null, setItem: () => {
|
|
9329
9329
|
} },
|
|
9330
9330
|
dispatch: dispatchHost,
|
|
@@ -9499,7 +9499,12 @@ async function bootBundleWorker(bundleJs, opts) {
|
|
|
9499
9499
|
if (typeof v === "string" && k !== "screenId") args[k] = v;
|
|
9500
9500
|
}
|
|
9501
9501
|
}
|
|
9502
|
-
|
|
9502
|
+
const verb = nav.presentation;
|
|
9503
|
+
navDirectives.push({
|
|
9504
|
+
screenId: nav.screenId,
|
|
9505
|
+
args,
|
|
9506
|
+
...verb === "push" || verb === "replace" ? { presentation: verb } : {}
|
|
9507
|
+
});
|
|
9503
9508
|
}
|
|
9504
9509
|
if ("_nav" in rec || "_stream" in rec || "_poll" in rec || "_error" in rec) {
|
|
9505
9510
|
const stripped = {};
|
|
@@ -25293,7 +25298,6 @@ function shouldRevealError(args) {
|
|
|
25293
25298
|
var EMAIL_RE, URL_HOST_RE, INTEGER_RE, NUMBER_RE;
|
|
25294
25299
|
var init_validation = __esm({
|
|
25295
25300
|
"../../core/ts/src/validation.ts"() {
|
|
25296
|
-
"use strict";
|
|
25297
25301
|
EMAIL_RE = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}$/;
|
|
25298
25302
|
URL_HOST_RE = /^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(:[0-9]+)?$/;
|
|
25299
25303
|
INTEGER_RE = /^[+-]?[0-9]+$/;
|
|
@@ -25953,7 +25957,6 @@ function validateWorkerSubtree(raw, slotId, policy, actionCatalog) {
|
|
|
25953
25957
|
var WORKER_SUBTREE_CEILINGS, ID_PART, ACTION_ID;
|
|
25954
25958
|
var init_worker_subtree = __esm({
|
|
25955
25959
|
"../../core/ts/src/worker-subtree.ts"() {
|
|
25956
|
-
"use strict";
|
|
25957
25960
|
init_worker_subtree_safe_types_generated();
|
|
25958
25961
|
WORKER_SUBTREE_CEILINGS = Object.freeze({
|
|
25959
25962
|
maxEncodedBytes: 65536,
|
|
@@ -35419,6 +35422,89 @@ function hasInteractiveDescendant(node) {
|
|
|
35419
35422
|
};
|
|
35420
35423
|
return Object.values(normalize(node).props ?? {}).some(visit);
|
|
35421
35424
|
}
|
|
35425
|
+
function nameFromOwnContent(root) {
|
|
35426
|
+
const parts = [];
|
|
35427
|
+
const walk2 = (n) => {
|
|
35428
|
+
for (const child of Array.from(n.childNodes)) {
|
|
35429
|
+
if (child.nodeType === 3) {
|
|
35430
|
+
const t = child.textContent?.trim();
|
|
35431
|
+
if (t) parts.push(t);
|
|
35432
|
+
} else if (child.nodeType === 1 && !child.matches(NAME_SKIP_SELECTOR)) {
|
|
35433
|
+
const own3 = child.getAttribute("aria-label")?.trim() || (child.tagName === "IMG" ? child.getAttribute("alt")?.trim() : void 0);
|
|
35434
|
+
if (own3) parts.push(own3);
|
|
35435
|
+
else walk2(child);
|
|
35436
|
+
}
|
|
35437
|
+
}
|
|
35438
|
+
};
|
|
35439
|
+
walk2(root);
|
|
35440
|
+
return parts.join(" ").replace(/\s+/g, " ").trim();
|
|
35441
|
+
}
|
|
35442
|
+
function trackActivatorName(activator) {
|
|
35443
|
+
const host = activator.parentElement;
|
|
35444
|
+
if (!host) return;
|
|
35445
|
+
const apply = () => {
|
|
35446
|
+
const name = nameFromOwnContent(host);
|
|
35447
|
+
if (name) {
|
|
35448
|
+
if (activator.getAttribute("aria-label") !== name) activator.setAttribute("aria-label", name);
|
|
35449
|
+
} else if (activator.hasAttribute("aria-label")) {
|
|
35450
|
+
activator.removeAttribute("aria-label");
|
|
35451
|
+
}
|
|
35452
|
+
};
|
|
35453
|
+
apply();
|
|
35454
|
+
if (activatorNameObservers.has(activator) || typeof MutationObserver === "undefined") return;
|
|
35455
|
+
const observer = new MutationObserver((records) => {
|
|
35456
|
+
if (records.every((r) => r.target === activator)) return;
|
|
35457
|
+
apply();
|
|
35458
|
+
});
|
|
35459
|
+
observer.observe(host, {
|
|
35460
|
+
subtree: true,
|
|
35461
|
+
childList: true,
|
|
35462
|
+
characterData: true,
|
|
35463
|
+
// A name can come from a nested image's bound alt / aria-label, or change when content is
|
|
35464
|
+
// hidden or shown — all patched in place as attributes.
|
|
35465
|
+
attributes: true,
|
|
35466
|
+
attributeFilter: ["aria-label", "aria-labelledby", "alt", "title", "hidden", "aria-hidden", "style"]
|
|
35467
|
+
});
|
|
35468
|
+
activatorNameObservers.set(activator, observer);
|
|
35469
|
+
}
|
|
35470
|
+
function TapActivator({ label: label2, state, tabIndex = 0, role = "button", hint, initialFocus }) {
|
|
35471
|
+
const ref = React7.useRef(null);
|
|
35472
|
+
const hintId = `hm-tap-hint${React7.useId()}`;
|
|
35473
|
+
useIsomorphicLayoutEffect(() => {
|
|
35474
|
+
const el = ref.current;
|
|
35475
|
+
if (!el || label2) return;
|
|
35476
|
+
trackActivatorName(el);
|
|
35477
|
+
return () => {
|
|
35478
|
+
activatorNameObservers.get(el)?.disconnect();
|
|
35479
|
+
activatorNameObservers.delete(el);
|
|
35480
|
+
};
|
|
35481
|
+
}, [label2]);
|
|
35482
|
+
const activator = /* @__PURE__ */ jsx8(
|
|
35483
|
+
"span",
|
|
35484
|
+
{
|
|
35485
|
+
ref,
|
|
35486
|
+
...{ [TAP_ACTIVATOR_ATTR]: "" },
|
|
35487
|
+
role,
|
|
35488
|
+
tabIndex,
|
|
35489
|
+
"aria-label": label2 || void 0,
|
|
35490
|
+
"aria-describedby": hint ? hintId : void 0,
|
|
35491
|
+
...initialFocus !== void 0 ? { "data-himalaya-initial-focus": initialFocus } : {},
|
|
35492
|
+
...state,
|
|
35493
|
+
style: VISUALLY_HIDDEN,
|
|
35494
|
+
onKeyDown: (e) => {
|
|
35495
|
+
if (e.defaultPrevented || e.target !== e.currentTarget || e.repeat) return;
|
|
35496
|
+
if (e.key !== "Enter" && e.key !== " ") return;
|
|
35497
|
+
e.preventDefault();
|
|
35498
|
+
e.stopPropagation();
|
|
35499
|
+
e.currentTarget.click();
|
|
35500
|
+
}
|
|
35501
|
+
}
|
|
35502
|
+
);
|
|
35503
|
+
return hint ? /* @__PURE__ */ jsxs5(Fragment4, { children: [
|
|
35504
|
+
activator,
|
|
35505
|
+
/* @__PURE__ */ jsx8("span", { id: hintId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
35506
|
+
] }) : activator;
|
|
35507
|
+
}
|
|
35422
35508
|
function withExtras(name, render) {
|
|
35423
35509
|
const Wrapped = ({ props, ctx, wrap, nodeId, gap, ...pass }) => {
|
|
35424
35510
|
const el = render({ props, ctx, wrap, nodeId, gap });
|
|
@@ -36276,8 +36362,43 @@ function renderNodeInner(node, ctx) {
|
|
|
36276
36362
|
const a11yHidden = extra["aria-hidden"] === "true";
|
|
36277
36363
|
const tap = node?.modifiers?.onTap ?? node?.modifiers?.on_tap;
|
|
36278
36364
|
const tapDisabled = normalize(node).props?.disabled === true || normalize(node).props?.loading === true || node?.modifiers?.disabled === true || node?.modifiers?.hitTestable === false || node?.modifiers?.hit_testable === false;
|
|
36365
|
+
let tapActivator = null;
|
|
36279
36366
|
const giveControlContract = (activate) => {
|
|
36280
|
-
if (a11yHidden || isNativeInteractiveElement(el)
|
|
36367
|
+
if (a11yHidden || isNativeInteractiveElement(el)) return;
|
|
36368
|
+
if (hasInteractiveDescendant(node)) {
|
|
36369
|
+
if (typeof el.type === "string" && normalize(node).type !== "ListItem") {
|
|
36370
|
+
const authored2 = extra["aria-label"];
|
|
36371
|
+
const state = {};
|
|
36372
|
+
for (const k of ACTIVATOR_STATE_ATTRS) {
|
|
36373
|
+
if (typeof extra[k] === "string") {
|
|
36374
|
+
state[k] = extra[k];
|
|
36375
|
+
delete extra[k];
|
|
36376
|
+
}
|
|
36377
|
+
}
|
|
36378
|
+
const authoredOrder = typeof extra.tabIndex === "number" && extra.tabIndex > 0 ? extra.tabIndex : void 0;
|
|
36379
|
+
if (authoredOrder != null) delete extra.tabIndex;
|
|
36380
|
+
const role = typeof extra.role === "string" && INTERACTIVE_ROLES.has(extra.role) ? extra.role : void 0;
|
|
36381
|
+
if (role != null) delete extra.role;
|
|
36382
|
+
const initialFocus = extra["data-himalaya-initial-focus"];
|
|
36383
|
+
if (initialFocus !== void 0) {
|
|
36384
|
+
delete extra["data-himalaya-initial-focus"];
|
|
36385
|
+
if (extra.tabIndex === -1) delete extra.tabIndex;
|
|
36386
|
+
}
|
|
36387
|
+
tapActivator = /* @__PURE__ */ jsx8(
|
|
36388
|
+
TapActivator,
|
|
36389
|
+
{
|
|
36390
|
+
label: typeof authored2 === "string" ? authored2 : void 0,
|
|
36391
|
+
state,
|
|
36392
|
+
tabIndex: authoredOrder,
|
|
36393
|
+
role,
|
|
36394
|
+
hint: a11yHint ?? void 0,
|
|
36395
|
+
initialFocus
|
|
36396
|
+
}
|
|
36397
|
+
);
|
|
36398
|
+
extra[TAP_GROUP_ATTR] = "";
|
|
36399
|
+
}
|
|
36400
|
+
return;
|
|
36401
|
+
}
|
|
36281
36402
|
if (extra.role == null) {
|
|
36282
36403
|
extra.role = "button";
|
|
36283
36404
|
if (typeof el.type !== "string") extra[SYNTHETIC_TAP_ROLE] = true;
|
|
@@ -36358,8 +36479,12 @@ function renderNodeInner(node, ctx) {
|
|
|
36358
36479
|
delete extra[SYNTHETIC_TABINDEX];
|
|
36359
36480
|
delete extra[AUTHORED_ROLE];
|
|
36360
36481
|
}
|
|
36361
|
-
|
|
36362
|
-
|
|
36482
|
+
if (tapActivator) {
|
|
36483
|
+
const finalStyle = extra.style ?? el.props.style;
|
|
36484
|
+
if (!finalStyle?.position) extra.style = { ...finalStyle ?? {}, position: "relative" };
|
|
36485
|
+
}
|
|
36486
|
+
let out2 = tapActivator ? React7.cloneElement(el, extra, tapActivator, el.props.children) : Object.keys(extra).length ? React7.cloneElement(el, extra) : el;
|
|
36487
|
+
if (a11yHint && !tapActivator) {
|
|
36363
36488
|
out2 = /* @__PURE__ */ jsx8(A11yHintDescription, { hint: a11yHint, idBase: componentId, children: out2 });
|
|
36364
36489
|
}
|
|
36365
36490
|
const sd = node?.modifiers?.swipeDismiss ?? node?.modifiers?.swipe_dismiss;
|
|
@@ -37116,7 +37241,7 @@ function renderInner(node, ctx) {
|
|
|
37116
37241
|
}
|
|
37117
37242
|
}
|
|
37118
37243
|
}
|
|
37119
|
-
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, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, 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, 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, ACTIVITY_DEFAULT_NAME, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, PRESENTED_OVERLAY_ATTR, PopoverNode, 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, PRESENTED_SCOPE, focusRoots, A11yHintDescription, WebRenderer;
|
|
37244
|
+
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, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, 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, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, TAP_ACTIVATOR_ATTR, TAP_GROUP_ATTR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, ButtonNode, OtpInputNode, ProgressBarNode, ACTIVITY_DEFAULT_NAME, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, PRESENTED_OVERLAY_ATTR, PopoverNode, 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, PRESENTED_SCOPE, focusRoots, A11yHintDescription, WebRenderer;
|
|
37120
37245
|
var init_renderNode = __esm({
|
|
37121
37246
|
"../../core/web-renderer/src/renderNode.tsx"() {
|
|
37122
37247
|
"use strict";
|
|
@@ -37211,7 +37336,7 @@ var init_renderNode = __esm({
|
|
|
37211
37336
|
ABSOLUTE_URL_RE = /^([a-zA-Z][a-zA-Z0-9+.-]*:|\/\/)/;
|
|
37212
37337
|
appearKeyframesInjected = false;
|
|
37213
37338
|
pressStylesInjected = false;
|
|
37214
|
-
FOCUS_RING_CSS = ':where(button,a,[href],input,select,textarea,[role="button"],[tabindex]):focus-visible{outline:2px solid var(--himi-accent,#116DFF);outline-offset:2px;border-radius:4px}';
|
|
37339
|
+
FOCUS_RING_CSS = ':where(button,a,[href],input,select,textarea,[role="button"],[tabindex]):focus-visible{outline:2px solid var(--himi-accent,#116DFF);outline-offset:2px;border-radius:4px}[data-himalaya-tap-group]:has(>[data-himalaya-tap-activator]:focus-visible){outline:2px solid var(--himi-accent,#116DFF);outline-offset:2px}';
|
|
37215
37340
|
focusStylesInjected = false;
|
|
37216
37341
|
HLIST_CHILD_CSS = "[data-himalaya-hlist]>*{flex:0 0 auto}";
|
|
37217
37342
|
hListStylesInjected = false;
|
|
@@ -38923,6 +39048,7 @@ var init_renderNode = __esm({
|
|
|
38923
39048
|
"menuitem",
|
|
38924
39049
|
"option",
|
|
38925
39050
|
"radio",
|
|
39051
|
+
"searchbox",
|
|
38926
39052
|
"slider",
|
|
38927
39053
|
"spinbutton",
|
|
38928
39054
|
"switch",
|
|
@@ -38952,6 +39078,23 @@ var init_renderNode = __esm({
|
|
|
38952
39078
|
"SegmentedControl",
|
|
38953
39079
|
"DisclosureGroup"
|
|
38954
39080
|
]);
|
|
39081
|
+
TAP_ACTIVATOR_ATTR = "data-himalaya-tap-activator";
|
|
39082
|
+
TAP_GROUP_ATTR = "data-himalaya-tap-group";
|
|
39083
|
+
VISUALLY_HIDDEN = {
|
|
39084
|
+
position: "absolute",
|
|
39085
|
+
width: 1,
|
|
39086
|
+
height: 1,
|
|
39087
|
+
padding: 0,
|
|
39088
|
+
margin: -1,
|
|
39089
|
+
overflow: "hidden",
|
|
39090
|
+
clip: "rect(0 0 0 0)",
|
|
39091
|
+
clipPath: "inset(50%)",
|
|
39092
|
+
whiteSpace: "nowrap",
|
|
39093
|
+
border: 0
|
|
39094
|
+
};
|
|
39095
|
+
NAME_SKIP_SELECTOR = `[${TAP_ACTIVATOR_ATTR}],[aria-hidden="true"],[hidden],[style*="display: none"],button,a[href],input,select,textarea,` + [...INTERACTIVE_ROLES].map((r) => `[role="${r}"]`).join(",") + `,[tabindex]:not([tabindex="-1"])`;
|
|
39096
|
+
activatorNameObservers = /* @__PURE__ */ new WeakMap();
|
|
39097
|
+
ACTIVATOR_STATE_ATTRS = ["aria-valuetext", "aria-selected", "aria-disabled"];
|
|
38955
39098
|
controlNode = (name, Inner) => withExtras(name, ({ props, ctx, wrap }) => Inner({ props, ctx, wrap, renderChild: (n) => renderNode(n, ctx) }));
|
|
38956
39099
|
ToggleNode = controlNode("ToggleNode", A11ySwitch);
|
|
38957
39100
|
SliderNode = controlNode("SliderNode", A11ySlider);
|
|
@@ -62406,21 +62549,21 @@ var init_preview_assets_generated = __esm({
|
|
|
62406
62549
|
"../../packages/serve/src/preview-assets.generated.ts"() {
|
|
62407
62550
|
init_preview_assets_format();
|
|
62408
62551
|
PREVIEW_ASSET_MANIFEST = [
|
|
62409
|
-
{ key: "assets/index-
|
|
62410
|
-
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset:
|
|
62411
|
-
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset:
|
|
62412
|
-
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset:
|
|
62413
|
-
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
62414
|
-
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset:
|
|
62415
|
-
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset:
|
|
62416
|
-
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
62417
|
-
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset:
|
|
62418
|
-
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
62419
|
-
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset:
|
|
62420
|
-
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset:
|
|
62421
|
-
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
62422
|
-
{ key: "index.html", contentType: "text/html; charset=utf-8", offset:
|
|
62423
|
-
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
62552
|
+
{ key: "assets/index-CRDm5E9l.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1184658, sha256: "e00b8e526ebcd4dd07db3a03ee7bb81e401575c162498b42bb9aca49d60a6918" },
|
|
62553
|
+
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1184666, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
|
|
62554
|
+
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1189276, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
|
|
62555
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1677860, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
62556
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1768784, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
62557
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1859768, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
62558
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1950748, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
62559
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 2041620, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
62560
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2132600, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
62561
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2241236, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
62562
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2350320, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
62563
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2459368, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
62564
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2567068, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
62565
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 2655176, length: 4947, sha256: "094afa56a8e94767674ee8fd7ca3290f67f64930f8e2c6cc874d6d101e35fd7d" },
|
|
62566
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2660123, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
|
|
62424
62567
|
];
|
|
62425
62568
|
}
|
|
62426
62569
|
});
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/himalaya-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1210.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": [
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"artifactId": "himalaya-cli"
|
|
68
68
|
}
|
|
69
69
|
},
|
|
70
|
-
"falconPackageHash": "
|
|
70
|
+
"falconPackageHash": "506ed6e4b472a5634a05b0f8e7709afbd371c022b52be11874929da7"
|
|
71
71
|
}
|
|
@@ -48568,7 +48568,7 @@ const SCREENS = runtimeSetting({
|
|
|
48568
48568
|
"package": "himalaya",
|
|
48569
48569
|
"type": "Text",
|
|
48570
48570
|
"props": {
|
|
48571
|
-
"text": "
|
|
48571
|
+
"text": "$service:himiOwnerLiteHome.businessName",
|
|
48572
48572
|
"style": "footnote",
|
|
48573
48573
|
"color": "textSecondary",
|
|
48574
48574
|
"collapseWhenEmpty": true
|
|
@@ -50706,7 +50706,8 @@ const SCREENS = runtimeSetting({
|
|
|
50706
50706
|
"params": {
|
|
50707
50707
|
"copy": "{\"ownerHome.acrossBusiness\":\"Across the salon\",\"ownerHome.briefCta\":\"Show me the chair\",\"ownerHome.briefSubtitle\":\"Who’s in the chair, where the gaps are, and which retail lines are down to the last tube.\",\"ownerHome.briefTitle\":\"Today at the salon\",\"ownerHome.errorLabel\":\"Couldn’t load today’s chair\",\"ownerHome.headerSubtitle\":\"Salon owner · today’s chair\",\"ownerHome.openManage\":\"Open the salon\",\"ownerHome.ordersDaily\":\"Retail sales · daily\",\"ownerHome.statAppointments\":\"Booked in\",\"ownerHome.statOrders\":\"Retail orders\",\"ownerHome.statPosts\":\"Salon notes\",\"ownerHome.statProducts\":\"Retail lines\",\"ownerHome.statRevenue\":\"Takings\",\"ownerHome.statSites\":\"Salons\",\"ownerHome.switchBusiness\":\"Switch salon\"}",
|
|
50708
50708
|
"homeModules": "[{\"id\":\"attention\",\"label\":\"Needs attention\",\"dataSource\":\"owner-today\",\"emptyWhen\":[\"hideContent\"]},{\"id\":\"schedule\",\"label\":\"Up next\",\"dataSource\":\"owner-schedule\",\"emptyWhen\":[\"hideContent\"]},{\"id\":\"shortcuts\",\"label\":\"Quick actions\",\"dataSource\":\"owner-actions\"},{\"id\":\"metrics\",\"label\":\"Business overview\",\"dataSource\":\"dashboard\",\"emptyWhen\":[\"hideContent\"]},{\"id\":\"brief\",\"label\":\"Daily brief\",\"dataSource\":\"brief\"}]",
|
|
50709
|
-
"enabledSources": "[\"products\",\"posts\",\"sites\",\"orders\",\"bookings\",\"members\",\"reviews\",\"reservations\"]"
|
|
50709
|
+
"enabledSources": "[\"products\",\"posts\",\"sites\",\"orders\",\"bookings\",\"members\",\"reviews\",\"reservations\"]",
|
|
50710
|
+
"businessName": "__HIMI_APP_NAME__"
|
|
50710
50711
|
}
|
|
50711
50712
|
}
|
|
50712
50713
|
}
|
|
@@ -50775,7 +50776,7 @@ const SCREENS = runtimeSetting({
|
|
|
50775
50776
|
"package": "himalaya",
|
|
50776
50777
|
"type": "Text",
|
|
50777
50778
|
"props": {
|
|
50778
|
-
"text": "
|
|
50779
|
+
"text": "$service:himiOwnerLiteManage.businessName",
|
|
50779
50780
|
"style": "footnote",
|
|
50780
50781
|
"color": "textSecondary",
|
|
50781
50782
|
"collapseWhenEmpty": true
|
|
@@ -51946,7 +51947,8 @@ const SCREENS = runtimeSetting({
|
|
|
51946
51947
|
"actionId": "tier5.himiOwnerLiteManage.load",
|
|
51947
51948
|
"params": {
|
|
51948
51949
|
"areas": "[{\"id\":\"store\",\"title\":\"Retail\",\"subtitle\":\"Products, inventory and sales\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_products\",\"icon\":\"bag\",\"metricKey\":\"products\",\"countLabel\":\"products\",\"createScreenId\":\"himi_owner_lite_product_new\",\"createLabel\":\"Create product\"},{\"id\":\"himi_owner_lite_orders\",\"title\":\"Retail orders\",\"subtitle\":\"Review and complete customer orders\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_orders\",\"icon\":\"cart\",\"metricKey\":\"orders\",\"countLabel\":\"orders\"},{\"id\":\"bookings\",\"title\":\"Treatments\",\"subtitle\":\"Services and your schedule\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_services\",\"icon\":\"calendar\",\"metricKey\":\"services\",\"countLabel\":\"services\"},{\"id\":\"himi_owner_lite_appointments\",\"title\":\"The chair\",\"subtitle\":\"Your upcoming appointments\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_appointments\",\"icon\":\"clock\",\"metricKey\":\"appointments\",\"countLabel\":\"appointments\"},{\"id\":\"blog\",\"title\":\"Salon notes\",\"subtitle\":\"Stories and publishing\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_posts\",\"icon\":\"newspaper\",\"metricKey\":\"posts\",\"countLabel\":\"posts\",\"createScreenId\":\"himi_owner_lite_post_new\",\"createLabel\":\"Write post\"},{\"id\":\"coupons\",\"title\":\"Coupons\",\"subtitle\":\"Offers, codes and usage\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_coupons\",\"icon\":\"tag\",\"metricKey\":\"module:coupons\",\"countLabel\":\"coupons\"},{\"id\":\"invoices\",\"title\":\"Invoices\",\"subtitle\":\"Customers, balances and payment status\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_invoices\",\"icon\":\"document\",\"metricKey\":\"module:invoices\",\"countLabel\":\"invoices\"},{\"id\":\"giftCards\",\"title\":\"Gift cards\",\"subtitle\":\"Balances, recipients and expiration\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_giftCards\",\"icon\":\"ticket\",\"metricKey\":\"module:giftCards\",\"countLabel\":\"gift cards\"},{\"id\":\"contacts\",\"title\":\"Contacts\",\"subtitle\":\"Your customer relationships\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_contacts\",\"icon\":\"person\",\"metricKey\":\"module:contacts\",\"countLabel\":\"contacts\"},{\"id\":\"members\",\"title\":\"Members\",\"subtitle\":\"Membership access and profiles\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_members\",\"icon\":\"person\",\"metricKey\":\"module:members\",\"countLabel\":\"members\"},{\"id\":\"groups\",\"title\":\"Groups\",\"subtitle\":\"Communities and conversations\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_groups\",\"icon\":\"person\",\"metricKey\":\"module:groups\",\"countLabel\":\"groups\"},{\"id\":\"reviews\",\"title\":\"Reviews\",\"subtitle\":\"Published and pending customer feedback\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_reviews\",\"icon\":\"star\",\"metricKey\":\"module:reviews\",\"countLabel\":\"reviews\"},{\"id\":\"plans\",\"title\":\"Plans\",\"subtitle\":\"Pricing, benefits and visibility\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_plans\",\"icon\":\"bookmark\",\"metricKey\":\"module:plans\",\"countLabel\":\"plans\"},{\"id\":\"subscriptions\",\"title\":\"Subscriptions\",\"subtitle\":\"Member plans and subscription status\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_subscriptions\",\"icon\":\"bookmark\",\"metricKey\":\"module:subscriptions\",\"countLabel\":\"subscriptions\"},{\"id\":\"programs\",\"title\":\"Programs\",\"subtitle\":\"Learning experiences and participation\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_programs\",\"icon\":\"play\",\"metricKey\":\"module:programs\",\"countLabel\":\"programs\"},{\"id\":\"badges\",\"title\":\"Badges\",\"subtitle\":\"Recognition, access and member badges\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_badges\",\"icon\":\"star\",\"metricKey\":\"module:badges\",\"countLabel\":\"badges\"},{\"id\":\"reservations\",\"title\":\"Reservations\",\"subtitle\":\"Guests, tables and arrival times\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_module_reservations\",\"icon\":\"calendar\",\"metricKey\":\"module:reservations\",\"countLabel\":\"reservations\"},{\"id\":\"forms\",\"title\":\"Forms\",\"subtitle\":\"Forms and their configuration\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_forms\",\"icon\":\"document\",\"metricKey\":\"module:forms\",\"countLabel\":\"forms\"},{\"id\":\"portfolio\",\"title\":\"Portfolio\",\"subtitle\":\"Projects, stories and galleries\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_portfolio\",\"icon\":\"image\",\"metricKey\":\"module:portfolio\",\"countLabel\":\"portfolio\"},{\"id\":\"donationCampaigns\",\"title\":\"Donation campaigns\",\"subtitle\":\"Campaign goals, status and fundraising\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_donationCampaigns\",\"icon\":\"heart\",\"metricKey\":\"module:donationCampaigns\",\"countLabel\":\"donation campaigns\"}]",
|
|
51949
|
-
"copy": "{\"ownerManage.blogLabel\":\"Salon notes\",\"ownerManage.bookingsLabel\":\"Treatments\",\"ownerManage.storeLabel\":\"Retail\",\"ownerManage.title\":\"Salon\"}"
|
|
51950
|
+
"copy": "{\"ownerManage.blogLabel\":\"Salon notes\",\"ownerManage.bookingsLabel\":\"Treatments\",\"ownerManage.storeLabel\":\"Retail\",\"ownerManage.title\":\"Salon\"}",
|
|
51951
|
+
"businessName": "__HIMI_APP_NAME__"
|
|
51950
51952
|
}
|
|
51951
51953
|
}
|
|
51952
51954
|
}
|
|
@@ -52065,7 +52067,7 @@ const SCREENS = runtimeSetting({
|
|
|
52065
52067
|
"package": "himalaya",
|
|
52066
52068
|
"type": "Text",
|
|
52067
52069
|
"props": {
|
|
52068
|
-
"text": "
|
|
52070
|
+
"text": "$service:himiOwnerLiteAccount.businessName",
|
|
52069
52071
|
"style": "bodyEmphasis",
|
|
52070
52072
|
"maxLines": 1
|
|
52071
52073
|
}
|
|
@@ -52328,6 +52330,7 @@ const SCREENS = runtimeSetting({
|
|
|
52328
52330
|
"supportUrl": "https://www.wix.com/support",
|
|
52329
52331
|
"privacyUrl": "https://www.wix.com/about/privacy",
|
|
52330
52332
|
"termsUrl": "https://www.wix.com/about/terms-of-use",
|
|
52333
|
+
"businessName": "__HIMI_APP_NAME__",
|
|
52331
52334
|
"copy": "{\"ownerAccount.roleValue\":\"Salon owner\",\"ownerAccount.subtitle\":\"Salon owner\"}"
|
|
52332
52335
|
}
|
|
52333
52336
|
}
|
|
@@ -52875,7 +52878,10 @@ const SCREENS = runtimeSetting({
|
|
|
52875
52878
|
},
|
|
52876
52879
|
"fillMaxWidth": true,
|
|
52877
52880
|
"onAppear": {
|
|
52878
|
-
"actionId": "tier5.drawer.
|
|
52881
|
+
"actionId": "tier5.drawer.refresh",
|
|
52882
|
+
"params": {
|
|
52883
|
+
"businessName": "__HIMI_APP_NAME__"
|
|
52884
|
+
}
|
|
52879
52885
|
}
|
|
52880
52886
|
}
|
|
52881
52887
|
},
|
|
@@ -61846,10 +61852,10 @@ const SCREENS = runtimeSetting({
|
|
|
61846
61852
|
},
|
|
61847
61853
|
"fillMaxWidth": true,
|
|
61848
61854
|
"onTap": {
|
|
61849
|
-
"actionId": "
|
|
61855
|
+
"actionId": "tier5.himiOwnerLiteSites.pick",
|
|
61850
61856
|
"params": {
|
|
61851
|
-
"
|
|
61852
|
-
"
|
|
61857
|
+
"id": "$item.id",
|
|
61858
|
+
"name": "$item.name"
|
|
61853
61859
|
}
|
|
61854
61860
|
},
|
|
61855
61861
|
"pressFeedback": "scale",
|
|
@@ -61946,7 +61952,6 @@ const SCREENS = runtimeSetting({
|
|
|
61946
61952
|
"contentType": "application/javascript+ts-bundle",
|
|
61947
61953
|
"declaredCapabilities": [
|
|
61948
61954
|
"wix_api",
|
|
61949
|
-
"wix_platform",
|
|
61950
61955
|
"local_database"
|
|
61951
61956
|
],
|
|
61952
61957
|
"minBinaryVersion": "0.1.0",
|
|
@@ -62407,10 +62412,10 @@ const SCREENS = runtimeSetting({
|
|
|
62407
62412
|
},
|
|
62408
62413
|
"fillMaxWidth": true,
|
|
62409
62414
|
"onTap": {
|
|
62410
|
-
"actionId": "
|
|
62415
|
+
"actionId": "tier5.himiOwnerLiteOverview.pick",
|
|
62411
62416
|
"params": {
|
|
62412
|
-
"
|
|
62413
|
-
"
|
|
62417
|
+
"id": "$item.id",
|
|
62418
|
+
"name": "$item.name"
|
|
62414
62419
|
}
|
|
62415
62420
|
},
|
|
62416
62421
|
"pressFeedback": "scale",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Shared display-text helpers for himi cards: trim catalog artifacts from titles and
|
|
2
|
+
// derive up-to-two-letter placeholder initials so same-first-letter lists still vary.
|
|
3
|
+
|
|
4
|
+
/** Trim trailing artifact markers (stray asterisks / footnote daggers) and whitespace
|
|
5
|
+
* that leak from test/seed catalogs, without touching interior punctuation. Falls back
|
|
6
|
+
* to the original when trimming would empty the string. */
|
|
7
|
+
export function cleanTitle(value?: string): string {
|
|
8
|
+
const raw = (value ?? "").trim();
|
|
9
|
+
const cleaned = raw.replace(/[\s*†‡]+$/u, "").trim();
|
|
10
|
+
return cleaned || raw;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Up to two significant initials for a placeholder avatar. Two-plus words → first
|
|
14
|
+
* letter of the first two; a single word → its first two alphanumerics. Keeps a list
|
|
15
|
+
* of similar names (e.g. many "Booking…") from collapsing to one identical glyph. */
|
|
16
|
+
export function initials(value?: string): string {
|
|
17
|
+
const words = (value ?? "").trim().split(/\s+/).filter(Boolean);
|
|
18
|
+
if (words.length === 0) return "#";
|
|
19
|
+
if (words.length === 1) {
|
|
20
|
+
const alnum = words[0].replace(/[^\p{L}\p{N}]/gu, "");
|
|
21
|
+
return (alnum.slice(0, 2) || "#").toUpperCase();
|
|
22
|
+
}
|
|
23
|
+
return ((words[0][0] ?? "") + (words[1][0] ?? "")).toUpperCase();
|
|
24
|
+
}
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
export interface AccountState {
|
|
5
5
|
status: "loading" | "ready";
|
|
6
|
+
/** The business the "Business" row names: the one picked on Sites, else the
|
|
7
|
+
* build-time fallback (see `owner-selected-site.ts`). */
|
|
8
|
+
businessName: string;
|
|
6
9
|
/** "Name · email", the email alone, or "" (the line collapses). */
|
|
7
10
|
ownerLine: string;
|
|
8
11
|
/** "Version 1.2.0 (34)", or "" when the host cannot say. */
|
|
@@ -36,6 +39,7 @@ export function shapeAccount(s: Partial<AccountState>): AccountState {
|
|
|
36
39
|
const supportUrl = safeUrl(s.supportUrl), privacyUrl = safeUrl(s.privacyUrl), termsUrl = safeUrl(s.termsUrl);
|
|
37
40
|
return {
|
|
38
41
|
status: s.status ?? "loading",
|
|
42
|
+
businessName: s.businessName ?? "",
|
|
39
43
|
ownerLine: s.ownerLine ?? "",
|
|
40
44
|
versionLine: s.versionLine ?? "",
|
|
41
45
|
error: s.error ?? "",
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// The business the owner is managing RIGHT NOW, shared by every __HIMI_APP_NAME__ worker.
|
|
2
|
+
//
|
|
3
|
+
// Home, Manage, Account and the drawer used to name the business from the build-time
|
|
4
|
+
// `provisioning.json` (`identity.businessName`), so after picking another site on the
|
|
5
|
+
// Sites list the chrome still named the provisioning one — three different names for
|
|
6
|
+
// "the current business" in one session, none of them the site actually picked.
|
|
7
|
+
//
|
|
8
|
+
// The picker (`owner-site-pick.ts`) is the one place that knows both the id and the
|
|
9
|
+
// display name of the business being switched to, so it records them here; every
|
|
10
|
+
// other worker reads them back. The channel is `himalaya.storage` — the app-scoped KV
|
|
11
|
+
// every worker of the app shares on every host (UserDefaults / SharedPreferences / one
|
|
12
|
+
// localStorage namespace) and that needs no capability.
|
|
13
|
+
//
|
|
14
|
+
// ONE key, not one per owner: the host only tells a worker who the owner is once a
|
|
15
|
+
// business is scoped, so the picker (which runs before that) and the screens after it
|
|
16
|
+
// would otherwise land on different keys. The owner is recorded INSIDE the entry
|
|
17
|
+
// instead, and an entry written for a different owner is never shown.
|
|
18
|
+
//
|
|
19
|
+
// The build-time name is only ever the cold-start fallback, passed in by the
|
|
20
|
+
// descriptor: a worker never hardcodes it.
|
|
21
|
+
|
|
22
|
+
import { initials } from "./himi-text.js";
|
|
23
|
+
|
|
24
|
+
type StorageLike = { getItem(key: string): string | null; setItem(key: string, value: string): void };
|
|
25
|
+
type Host = typeof globalThis & { himalaya?: { storage?: StorageLike; input?: Record<string, unknown> } };
|
|
26
|
+
|
|
27
|
+
export interface SelectedSite {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const KEY = "himi.ownerLite.selectedSite.v1";
|
|
33
|
+
|
|
34
|
+
function host(): Host["himalaya"] {
|
|
35
|
+
return (globalThis as Host).himalaya;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function inputString(key: string): string {
|
|
39
|
+
const v = host()?.input?.[key];
|
|
40
|
+
return typeof v === "string" && v !== "default" ? v.trim() : "";
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** The business the owner last picked, or null when none has been picked, the host
|
|
44
|
+
* has no storage, or the entry does not apply to this worker. Never throws. */
|
|
45
|
+
export function readSelectedSite(): SelectedSite | null {
|
|
46
|
+
try {
|
|
47
|
+
const raw = host()?.storage?.getItem(KEY);
|
|
48
|
+
if (!raw) return null;
|
|
49
|
+
const parsed = JSON.parse(raw) as Partial<SelectedSite> & { account?: unknown };
|
|
50
|
+
const id = typeof parsed?.id === "string" ? parsed.id.trim() : "";
|
|
51
|
+
const name = typeof parsed?.name === "string" ? parsed.name.trim() : "";
|
|
52
|
+
if (!id || !name) return null;
|
|
53
|
+
// Another owner's pick on a shared device is never this owner's business. Fail
|
|
54
|
+
// CLOSED: an owner-tagged entry is shown only to a worker that knows it IS that
|
|
55
|
+
// owner. A worker that cannot tell who the owner is (the account-level flow before
|
|
56
|
+
// a business is scoped, or a host that cannot supply the identity) gets the
|
|
57
|
+
// fallback, never a name that may be another owner's.
|
|
58
|
+
const account = typeof parsed.account === "string" ? parsed.account : "";
|
|
59
|
+
const me = inputString("__himiPreferenceAccount");
|
|
60
|
+
if (account && account !== me) return null;
|
|
61
|
+
// An entry the picker wrote before the host knew the owner is CLAIMED by the first
|
|
62
|
+
// worker that does know it, so from then on no other owner on the device reads it.
|
|
63
|
+
if (!account && me) host()?.storage?.setItem(KEY, JSON.stringify({ id, name, account: me }));
|
|
64
|
+
// A screen opened FOR a specific business (a deep link or push carrying
|
|
65
|
+
// `business`) names that business's data; a name recorded for another one would
|
|
66
|
+
// sit over the wrong numbers, so it falls back instead.
|
|
67
|
+
const opened = inputString("business");
|
|
68
|
+
if (opened && opened !== id) return null;
|
|
69
|
+
return { id, name };
|
|
70
|
+
} catch {
|
|
71
|
+
return null; // a corrupt entry reads as "nothing picked", never as a crash
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Record the business the owner just picked. Best-effort: a host without storage
|
|
76
|
+
* simply keeps showing the fallback. */
|
|
77
|
+
export function rememberSelectedSite(site: SelectedSite): void {
|
|
78
|
+
const id = site.id.trim();
|
|
79
|
+
const name = site.name.trim();
|
|
80
|
+
if (!id || !name) return;
|
|
81
|
+
const account = inputString("__himiPreferenceAccount");
|
|
82
|
+
try {
|
|
83
|
+
host()?.storage?.setItem(KEY, JSON.stringify(account ? { id, name, account } : { id, name }));
|
|
84
|
+
} catch {
|
|
85
|
+
// Quota / storage disabled: the chrome falls back to the build-time name.
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Display name for "the current business": the picked one, else `fallback`. */
|
|
90
|
+
export function selectedSiteName(fallback: string): string {
|
|
91
|
+
return readSelectedSite()?.name || fallback;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Badge letters for a business name ("Riverbend Market" → "RM"); Unicode-aware. */
|
|
95
|
+
export function siteInitials(name: string): string {
|
|
96
|
+
return initials(name);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** The fallback name a descriptor passes in its `onAppear` params (`businessName`). */
|
|
100
|
+
export function fallbackNameFrom(arg: unknown, current = ""): string {
|
|
101
|
+
const v = (arg as { businessName?: unknown } | undefined)?.businessName;
|
|
102
|
+
return typeof v === "string" && v.trim() ? v.trim() : current;
|
|
103
|
+
}
|