@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.
Files changed (124) hide show
  1. package/dist/cli.mjs +168 -25
  2. package/dist/preview-assets.generated.bin +0 -0
  3. package/package.json +2 -2
  4. package/templates/beauty-salon-owner/dev/index.ts +18 -13
  5. package/templates/beauty-salon-owner/tier5-src/_shared/himi-text.ts +24 -0
  6. package/templates/beauty-salon-owner/tier5-src/_shared/owner-account.ts +4 -0
  7. package/templates/beauty-salon-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  8. package/templates/beauty-salon-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  9. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  10. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  11. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  12. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  13. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  14. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  15. package/templates/community-club-owner/dev/index.ts +18 -13
  16. package/templates/community-club-owner/tier5-src/_shared/himi-text.ts +24 -0
  17. package/templates/community-club-owner/tier5-src/_shared/owner-account.ts +4 -0
  18. package/templates/community-club-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  19. package/templates/community-club-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  20. package/templates/community-club-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  21. package/templates/community-club-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  22. package/templates/community-club-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  23. package/templates/community-club-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  24. package/templates/community-club-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  25. package/templates/community-club-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  26. package/templates/events-meetups-owner/dev/index.ts +18 -13
  27. package/templates/events-meetups-owner/tier5-src/_shared/himi-text.ts +24 -0
  28. package/templates/events-meetups-owner/tier5-src/_shared/owner-account.ts +4 -0
  29. package/templates/events-meetups-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  30. package/templates/events-meetups-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  31. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  32. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  33. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  34. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  35. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  36. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  37. package/templates/gym-fitness-owner/dev/index.ts +18 -13
  38. package/templates/gym-fitness-owner/tier5-src/_shared/himi-text.ts +24 -0
  39. package/templates/gym-fitness-owner/tier5-src/_shared/owner-account.ts +4 -0
  40. package/templates/gym-fitness-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  41. package/templates/gym-fitness-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  42. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  43. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  44. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  45. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  46. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  47. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  48. package/templates/nonprofit-cause-owner/dev/index.ts +18 -13
  49. package/templates/nonprofit-cause-owner/tier5-src/_shared/himi-text.ts +24 -0
  50. package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-account.ts +4 -0
  51. package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  52. package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  53. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  54. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  55. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  56. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  57. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  58. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  59. package/templates/owner-lite/dev/index.ts +19 -14
  60. package/templates/owner-lite/tier5-src/_shared/himi-text.ts +24 -0
  61. package/templates/owner-lite/tier5-src/_shared/owner-account.ts +4 -0
  62. package/templates/owner-lite/tier5-src/_shared/owner-selected-site.ts +103 -0
  63. package/templates/owner-lite/tier5-src/_shared/owner-site-pick.ts +74 -0
  64. package/templates/owner-lite/tier5-src/himi-owner-lite-account/index.ts +12 -2
  65. package/templates/owner-lite/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  66. package/templates/owner-lite/tier5-src/himi-owner-lite-home/index.ts +24 -1
  67. package/templates/owner-lite/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  68. package/templates/owner-lite/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  69. package/templates/owner-lite/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  70. package/templates/podcast-creator-owner/dev/index.ts +18 -13
  71. package/templates/podcast-creator-owner/tier5-src/_shared/himi-text.ts +24 -0
  72. package/templates/podcast-creator-owner/tier5-src/_shared/owner-account.ts +4 -0
  73. package/templates/podcast-creator-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  74. package/templates/podcast-creator-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  75. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  76. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  77. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  78. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  79. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  80. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  81. package/templates/portfolio-creative-owner/dev/index.ts +18 -13
  82. package/templates/portfolio-creative-owner/tier5-src/_shared/himi-text.ts +24 -0
  83. package/templates/portfolio-creative-owner/tier5-src/_shared/owner-account.ts +4 -0
  84. package/templates/portfolio-creative-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  85. package/templates/portfolio-creative-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  86. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  87. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  88. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  89. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  90. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  91. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  92. package/templates/restaurant-owner/dev/index.ts +18 -13
  93. package/templates/restaurant-owner/tier5-src/_shared/himi-text.ts +24 -0
  94. package/templates/restaurant-owner/tier5-src/_shared/owner-account.ts +4 -0
  95. package/templates/restaurant-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  96. package/templates/restaurant-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  97. package/templates/restaurant-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  98. package/templates/restaurant-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  99. package/templates/restaurant-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  100. package/templates/restaurant-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  101. package/templates/restaurant-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  102. package/templates/restaurant-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  103. package/templates/retail-store-owner/dev/index.ts +18 -13
  104. package/templates/retail-store-owner/tier5-src/_shared/himi-text.ts +24 -0
  105. package/templates/retail-store-owner/tier5-src/_shared/owner-account.ts +4 -0
  106. package/templates/retail-store-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  107. package/templates/retail-store-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  108. package/templates/retail-store-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  109. package/templates/retail-store-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  110. package/templates/retail-store-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  111. package/templates/retail-store-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  112. package/templates/retail-store-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  113. package/templates/retail-store-owner/tier5-src/himi-owner-lite-sites/index.ts +14 -31
  114. package/templates/yoga-studio-owner/dev/index.ts +18 -13
  115. package/templates/yoga-studio-owner/tier5-src/_shared/himi-text.ts +24 -0
  116. package/templates/yoga-studio-owner/tier5-src/_shared/owner-account.ts +4 -0
  117. package/templates/yoga-studio-owner/tier5-src/_shared/owner-selected-site.ts +103 -0
  118. package/templates/yoga-studio-owner/tier5-src/_shared/owner-site-pick.ts +74 -0
  119. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-account/index.ts +12 -2
  120. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-drawer/index.ts +21 -2
  121. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-home/index.ts +24 -1
  122. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-manage/index.ts +22 -4
  123. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-overview/index.ts +8 -0
  124. 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
- navDirectives.push({ screenId: nav.screenId, args });
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) || hasInteractiveDescendant(node)) return;
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
- let out2 = Object.keys(extra).length ? React7.cloneElement(el, extra) : el;
36362
- if (a11yHint) {
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-CEgZpjAi.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1181649, sha256: "c5f3f0ca309d185ac0f7d7fcde9da23cf10308699c09765d697ef8ed8be9dbdb" },
62410
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1181657, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
62411
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1186267, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
62412
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1674851, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
62413
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1765775, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
62414
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1856759, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
62415
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1947739, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
62416
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 2038611, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
62417
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2129591, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
62418
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2238227, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
62419
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2347311, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
62420
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2456359, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
62421
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2564059, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
62422
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 2652167, length: 4947, sha256: "4c0783bf65b94ef6193c32aaa03a367fdf11415c89edbe14840eda14fa5c0a17" },
62423
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2657114, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
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.1208.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": "931e520dae97dfc8c6e9266c985badd9241bdfb86f20a6b06b2e79c9"
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": "__HIMI_APP_NAME__",
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": "__HIMI_APP_NAME__",
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": "__HIMI_APP_NAME__",
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.syncActive"
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": "himi.open",
61855
+ "actionId": "tier5.himiOwnerLiteSites.pick",
61850
61856
  "params": {
61851
- "screenId": "himi_owner_lite_home",
61852
- "business": "$item.id"
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": "himi.open",
62415
+ "actionId": "tier5.himiOwnerLiteOverview.pick",
62411
62416
  "params": {
62412
- "screenId": "himi_owner_lite_home",
62413
- "business": "$item.id"
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
+ }