@wix/himalaya-cli 0.1034.0 → 0.1036.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/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +7 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/events/src/display.d.ts +13 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-events.mjs +28 -6
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-stores-collections.mjs +1 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-stores.mjs +7 -1
- package/dist/cli.mjs +25 -19
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/sdk-reference.json +16 -4
- package/package.json +2 -2
- package/templates/beauty-salon/dev/index.ts +72 -175
- package/templates/beauty-salon/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/beauty-salon/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/beauty-salon/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/beauty-salon/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/beauty-salon/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/beauty-salon/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/beauty-salon/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/beauty-salon/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/beauty-salon/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/beauty-salon/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/beauty-salon-owner/dev/index.ts +84 -599
- package/templates/beauty-salon-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/beauty-salon-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/beauty-salon-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/beauty-salon-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/branded-lite/dev/index.ts +178 -264
- package/templates/branded-lite/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/branded-lite/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/branded-lite/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/branded-lite/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/branded-lite/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/branded-lite/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-cms/index.ts +5 -5
- package/templates/branded-lite/tier5-src/himi-branded-lite-coupons/index.ts +33 -7
- package/templates/branded-lite/tier5-src/himi-branded-lite-donations/index.ts +3 -3
- package/templates/branded-lite/tier5-src/himi-branded-lite-forms/index.ts +11 -10
- package/templates/branded-lite/tier5-src/himi-branded-lite-giftcards/index.ts +3 -3
- package/templates/branded-lite/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/branded-lite/tier5-src/himi-branded-lite-invoices/index.ts +3 -3
- package/templates/branded-lite/tier5-src/himi-branded-lite-loyalty/index.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-program/index.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-branded-lite-reserve/index.ts +5 -3
- package/templates/branded-lite/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/branded-lite/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/branded-lite/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/branded-lite/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/branded-lite/tier5-src/wix-spaces-forum/index.ts +7 -1
- package/templates/branded-lite/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/community-club/dev/index.ts +62 -81
- package/templates/community-club/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/community-club/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/community-club/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/community-club/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/community-club/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/community-club/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/community-club/tier5-src/himi-branded-lite-cms/index.ts +5 -5
- package/templates/community-club/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/community-club/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/community-club/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/community-club/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/community-club/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/community-club-owner/dev/index.ts +84 -599
- package/templates/community-club-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/community-club-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/community-club-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/community-club-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/community-club-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/community-club-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/events-meetups/dev/index.ts +60 -79
- package/templates/events-meetups/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/events-meetups/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/events-meetups/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/events-meetups/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/events-meetups/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/events-meetups/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/events-meetups/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/events-meetups/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/events-meetups/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/events-meetups/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/events-meetups/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/events-meetups-owner/dev/index.ts +84 -543
- package/templates/events-meetups-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/events-meetups-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/events-meetups-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/events-meetups-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/events-meetups-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/gym-fitness/dev/index.ts +73 -204
- package/templates/gym-fitness/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/gym-fitness/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/gym-fitness/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/gym-fitness/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/gym-fitness/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/gym-fitness/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/gym-fitness/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/gym-fitness/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/gym-fitness/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/gym-fitness/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/gym-fitness/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/gym-fitness/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/gym-fitness/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/gym-fitness-owner/dev/index.ts +84 -627
- package/templates/gym-fitness-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/gym-fitness-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/gym-fitness-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/gym-fitness-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/himi-chat/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/nonprofit-cause/dev/index.ts +71 -90
- package/templates/nonprofit-cause/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/nonprofit-cause/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/nonprofit-cause/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/nonprofit-cause/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/nonprofit-cause/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/nonprofit-cause/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/nonprofit-cause/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/nonprofit-cause/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/nonprofit-cause/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/nonprofit-cause/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/nonprofit-cause-owner/dev/index.ts +84 -571
- package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/nonprofit-cause-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/owner-lite/dev/index.ts +84 -627
- package/templates/owner-lite/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/owner-lite/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/owner-lite/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/owner-lite/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/owner-lite/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/owner-lite/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/podcast-creator/dev/index.ts +71 -90
- package/templates/podcast-creator/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/podcast-creator/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/podcast-creator/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/podcast-creator/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/podcast-creator/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/podcast-creator/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/podcast-creator/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/podcast-creator/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/podcast-creator/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/podcast-creator/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/podcast-creator/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/podcast-creator/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/podcast-creator-owner/dev/index.ts +84 -599
- package/templates/podcast-creator-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/podcast-creator-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/podcast-creator-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/podcast-creator-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/portfolio-creative/dev/index.ts +62 -137
- package/templates/portfolio-creative/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/portfolio-creative/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/portfolio-creative/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/portfolio-creative/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/portfolio-creative/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/portfolio-creative/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/portfolio-creative/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/portfolio-creative/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/portfolio-creative/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/portfolio-creative/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/portfolio-creative/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/portfolio-creative-owner/dev/index.ts +84 -599
- package/templates/portfolio-creative-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/portfolio-creative-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/portfolio-creative-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/portfolio-creative-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/restaurant/dev/index.ts +124 -101
- package/templates/restaurant/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/restaurant/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/restaurant/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/restaurant/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/restaurant/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/restaurant/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/restaurant/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/restaurant/tier5-src/himi-branded-lite-reserve/index.ts +5 -3
- package/templates/restaurant/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/restaurant/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/restaurant/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/restaurant/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/restaurant-owner/dev/index.ts +84 -627
- package/templates/restaurant-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/restaurant-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/restaurant-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/restaurant-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/restaurant-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
- package/templates/retail-store/dev/index.ts +59 -106
- package/templates/retail-store/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/retail-store/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/retail-store/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/retail-store/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/retail-store/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/retail-store/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/retail-store/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/retail-store/tier5-src/wix-spaces-collections/index.ts +1 -1
- package/templates/retail-store/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/retail-store-owner/dev/index.ts +84 -571
- package/templates/retail-store-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/retail-store-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/retail-store-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/retail-store-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/retail-store-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/yoga-studio/dev/index.ts +73 -148
- package/templates/yoga-studio/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/yoga-studio/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/yoga-studio/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/yoga-studio/tier5-src/_shared/himi-restaurants.ts +4 -4
- package/templates/yoga-studio/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/yoga-studio/tier5-src/_shared/wix-service-price.ts +1 -1
- package/templates/yoga-studio/tier5-src/himi-branded-lite-info/index.ts +5 -2
- package/templates/yoga-studio/tier5-src/himi-branded-lite-plans/index.ts +1 -1
- package/templates/yoga-studio/tier5-src/himi-branded-lite-program/index.ts +1 -1
- package/templates/yoga-studio/tier5-src/himi-events-detail/index.ts +1 -1
- package/templates/yoga-studio/tier5-src/himi-events-list/index.ts +20 -4
- package/templates/yoga-studio/tier5-src/himi-events-my-events/index.ts +2 -2
- package/templates/yoga-studio/tier5-src/wix-spaces-whats-new/index.ts +4 -4
- package/templates/yoga-studio-owner/dev/index.ts +84 -571
- package/templates/yoga-studio-owner/tier5-src/_shared/aria-chat.ts +22 -6
- package/templates/yoga-studio-owner/tier5-src/_shared/collection-contract.ts +16 -9
- package/templates/yoga-studio-owner/tier5-src/_shared/collection-service.ts +19 -5
- package/templates/yoga-studio-owner/tier5-src/_shared/engine-intl.ts +51 -0
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-load-error.ts +49 -0
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
|
@@ -68,6 +68,7 @@ import { isWebUrl, stripMarkdown } from "./aria-widget-model.js";
|
|
|
68
68
|
import { NO_WIDGET, activeWidgetOf, asyncAdvanced, type SubtreeSlot, type WidgetOptionRow, type WidgetView }
|
|
69
69
|
from "./aria-widget-view.js";
|
|
70
70
|
import { substituteSelection } from "./aria-widget-model.js";
|
|
71
|
+
import { isTransportFailure, ownerTransportFailureText } from "./owner-load-error.js";
|
|
71
72
|
import { LOCAL_ID_PREFIX, createRowMemo, mintLocalId, transcriptKeys, type RowMemo } from "./aria-hot-path.js";
|
|
72
73
|
|
|
73
74
|
// ---------------------------------------------------------------------------
|
|
@@ -117,8 +118,18 @@ export interface AriaBubble {
|
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
/** An empty-state suggestion card: emoji + title + hint, and the text that is
|
|
120
|
-
* actually submitted when it is tapped.
|
|
121
|
-
|
|
121
|
+
* actually submitted when it is tapped.
|
|
122
|
+
*
|
|
123
|
+
* `label` is the card's ACCESSIBLE NAME, derived by the machine (`promptLabel`)
|
|
124
|
+
* — callers never supply it. The emoji is decoration: named by it, the card
|
|
125
|
+
* read as "writing hand" to VoiceOver instead of what it does. */
|
|
126
|
+
export interface AriaPromptChip { id: string; emoji: string; title: string; sub: string; text: string; label?: string; }
|
|
127
|
+
|
|
128
|
+
/** "Write a blog post, Draft a post about my business" — title then hint, never
|
|
129
|
+
* the emoji, and no dangling separator when a copy pack blanks the hint. */
|
|
130
|
+
export function promptLabel(p: Pick<AriaPromptChip, "title" | "sub">): string {
|
|
131
|
+
return [p.title, p.sub].map((s) => String(s ?? "").trim()).filter(Boolean).join(", ");
|
|
132
|
+
}
|
|
122
133
|
|
|
123
134
|
export interface AriaChatState {
|
|
124
135
|
status: "loading" | "ready" | "sending" | "error";
|
|
@@ -558,9 +569,14 @@ export function isWixAccountUnreachable(e: unknown): boolean {
|
|
|
558
569
|
* clears any stale status line, and the signed-out sentence clears any red text
|
|
559
570
|
* left over from an earlier failure. */
|
|
560
571
|
function failureSlots(e: unknown, unavailable: () => string): { error: string; statusText: string } {
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
572
|
+
if (isWixAccountUnreachable(e)) return { error: "", statusText: unavailable() };
|
|
573
|
+
// A request that never reached Wix is still a failure (red), but its wire text
|
|
574
|
+
// is a platform dump — iOS hands over the NSError description, domain, code and
|
|
575
|
+
// the local server's URL included. The owner gets one sentence instead.
|
|
576
|
+
// Everything else keeps its diagnostic: see the "UNKNOWN bridge error stays
|
|
577
|
+
// loud" test, which is why this is not a blanket `humanWireError`.
|
|
578
|
+
if (isTransportFailure(e)) return { error: ownerTransportFailureText(), statusText: "" };
|
|
579
|
+
return { error: String((e as Error)?.message ?? e), statusText: "" };
|
|
564
580
|
}
|
|
565
581
|
|
|
566
582
|
/** Is this url somewhere Wix itself serves?
|
|
@@ -1233,7 +1249,7 @@ export function createAriaChat(o: AriaChatOptions): AriaChatCore {
|
|
|
1233
1249
|
return s.statusText && notices.includes(s.statusText) ? { ...s, statusText: "" } : s;
|
|
1234
1250
|
};
|
|
1235
1251
|
const toolFailedText = () => res(o.labels?.toolFailed ?? `${assistant()} couldn't finish that. Try again.`);
|
|
1236
|
-
const promptList = () => res(o.prompts);
|
|
1252
|
+
const promptList = () => res(o.prompts).map((p) => ({ ...p, label: promptLabel(p) }));
|
|
1237
1253
|
const siteOf = o.siteId ?? (() => "");
|
|
1238
1254
|
const resumeOf = o.resumeConversationId ?? inputConversationId;
|
|
1239
1255
|
const historyKeyFor = (site: string) => scopedKey(o.historyKey, site);
|
|
@@ -26,6 +26,13 @@ export interface CollectionConfig {
|
|
|
26
26
|
reviewSelectedAction?: string;
|
|
27
27
|
/** Optional comfortable grid media height for immersive visual catalogs. */
|
|
28
28
|
gridImageHeight?: number;
|
|
29
|
+
/** What the count summary counts — ["dish", "dishes"] reads "12 dishes". Default "item(s)". */
|
|
30
|
+
countNoun?: [string, string];
|
|
31
|
+
/** Phone grid columns (default 2). A card carrying a paragraph of benefits and a CTA — a
|
|
32
|
+
* pricing plan — is unreadable at half width, so it opts into one. */
|
|
33
|
+
gridColumns?: number;
|
|
34
|
+
/** Lines of the meta caption a comfortable row may use (default 2). */
|
|
35
|
+
metaMaxLines?: number;
|
|
29
36
|
/** The card's primary verb, shown as a visible button beside the overflow.
|
|
30
37
|
* `screenId` opens that screen with the row id; without it the verb reuses the
|
|
31
38
|
* row's own tap action (the detail screen that owns the verb). */
|
|
@@ -38,28 +45,28 @@ export interface CollectionConfig {
|
|
|
38
45
|
* page, the list/grid toggle, Refine, chips, search and count are noise. */
|
|
39
46
|
export const COLLECTION_CHROME_MIN_ITEMS = 4;
|
|
40
47
|
export const COLLECTIONS: Record<string, CollectionConfig> = {
|
|
41
|
-
himiStoreShop: { rows: 'results', title: 'name', subtitle: 'subtitle', image: 'image', view: 'grid', backendQuery: true },
|
|
42
|
-
himiBookingServices: { rows: 'results', title: 'name', subtitle: 'subtitle', image: 'image', filter: 'category', view: 'grid', backendQuery: true, searchPlaceholder: '
|
|
48
|
+
himiStoreShop: { rows: 'results', title: 'name', subtitle: 'subtitle', image: 'image', view: 'grid', backendQuery: true, countNoun: ['product', 'products'] },
|
|
49
|
+
himiBookingServices: { rows: 'results', title: 'name', subtitle: 'subtitle', image: 'image', filter: 'category', view: 'grid', backendQuery: true, searchPlaceholder: 'Search services', countNoun: ['service', 'services'], primaryVerb: { label: 'Book', screenId: 'himi_time' } },
|
|
43
50
|
himiBookingBookings: { rows: 'rows', title: 'title', subtitle: 'subtitle', metadata: ['status'], view: 'list', backendQuery: true,
|
|
44
|
-
defaultFilter: 'value:Upcoming', searchPlaceholder: '
|
|
51
|
+
defaultFilter: 'value:Upcoming', searchPlaceholder: 'Search by booking ID', countNoun: ['booking', 'bookings'], filterValues: ['Upcoming', 'Past', 'Cancelled'],
|
|
45
52
|
sortLabels: { default: 'Soonest', az: 'Oldest', za: 'Latest' } },
|
|
46
|
-
himiEvents: { rows: 'results', title: 'title', subtitle: 'dateLine', image: 'image', view: 'grid', backendQuery: true, searchPlaceholder: '
|
|
53
|
+
himiEvents: { rows: 'results', title: 'title', subtitle: 'dateLine', image: 'image', view: 'grid', backendQuery: true, defaultFilter: 'value:Upcoming', searchPlaceholder: 'Search events', countNoun: ['event', 'events'], filterValues: ['Upcoming', 'Past'], sortLabels: { default: 'Date', az: 'Title A–Z', za: 'Title Z–A' }, primaryVerb: { label: 'Register' } },
|
|
47
54
|
himiBlogFeed: { rows: 'posts', title: 'title', subtitle: 'excerpt', image: 'image', filter: 'category', filterValuesFrom: 'categories', view: 'grid', narrowedBy: 'selectedCategoryId' },
|
|
48
|
-
himiOwnerLiteProducts: { rows: 'products', title: 'name', subtitle: 'price', image: 'image', view: 'grid', backendQuery: true },
|
|
55
|
+
himiOwnerLiteProducts: { rows: 'products', title: 'name', subtitle: 'price', image: 'image', view: 'grid', backendQuery: true, countNoun: ['product', 'products'] },
|
|
49
56
|
himiOwnerModules: { instanceInput: 'module', rows: 'rows', title: 'title', subtitle: 'subtitle', image: 'image', filter: 'statusLabel', view: 'list', paged: true, reviewAction: 'prepareRecord', reviewSelectedAction: 'prepareSelected' },
|
|
50
57
|
himiOwnerLiteServices: { rows: 'services', title: 'name', subtitle: 'subtitle', view: 'list', backendQuery: true, searchPlaceholder: 'Service name starts with…' },
|
|
51
58
|
himiOwnerLiteEvents: { rows: 'events', title: 'title', subtitle: 'dateLine', view: 'grid', backendQuery: true, searchPlaceholder: 'Exact event title', filterValues: ['Upcoming'], sortLabels: { default: 'Date', az: 'Title A–Z', za: 'Title Z–A' } },
|
|
52
59
|
himiOwnerLitePosts: { rows: 'posts', title: 'title', subtitle: 'excerpt', image: 'image', view: 'grid' },
|
|
53
|
-
himiOwnerLiteOrders: { rows: 'orders', title: 'buyer', subtitle: 'meta', filter: 'statusLabel', view: 'list', backendQuery: true,
|
|
60
|
+
himiOwnerLiteOrders: { rows: 'orders', title: 'buyer', subtitle: 'meta', filter: 'statusLabel', view: 'list', backendQuery: true, countNoun: ['order', 'orders'],
|
|
54
61
|
searchPlaceholder: 'Customer name, email or order #', sortLabels: { default: 'Newest', az: 'Customer A–Z', za: 'Customer Z–A' },
|
|
55
62
|
filterValues: ['Recent 7 days', 'Paid', 'Unpaid', 'Partially paid', 'Pending', 'Refunded', 'Partly refunded'] },
|
|
56
63
|
himiBrandedGroups: { rows: 'rows', title: 'name', subtitle: 'description', image: 'image', view: 'grid' },
|
|
57
64
|
himiBrandedCms: { rows: 'rows', title: 'name', subtitle: 'subtitle', view: 'grid' },
|
|
58
65
|
himiBrandedCmsCollection: { instanceInput: 'collection', rows: 'rows', title: 'title', subtitle: 'subtitle', view: 'list' },
|
|
59
66
|
himiBrandedOrders: { rows: 'rows', title: 'title', subtitle: 'subtitle', view: 'list', backendQuery: true,
|
|
60
|
-
searchPlaceholder: '
|
|
67
|
+
searchPlaceholder: 'Search by order number', countNoun: ['order', 'orders'], filterValues: ['Not fulfilled', 'Partially fulfilled', 'Fulfilled'],
|
|
61
68
|
sortLabels: { default: 'Newest', az: 'Oldest', za: 'Order # ↓' } },
|
|
62
|
-
himiBrandedPlans: { rows: 'rows', title: 'name', subtitle: 'description', metadata: ['priceLine', 'periodLine', 'trialBadge', 'perk1', 'perk2', 'perk3'], view: 'grid' },
|
|
69
|
+
himiBrandedPlans: { rows: 'rows', title: 'name', subtitle: 'description', metadata: ['badge', 'priceLine', 'periodLine', 'trialBadge', 'perk1', 'perk2', 'perk3'], view: 'grid', gridColumns: 1, metaMaxLines: 8, countNoun: ['plan', 'plans'] },
|
|
63
70
|
himiBrandedPrograms: { rows: 'rows', title: 'name', subtitle: 'description', image: 'image', view: 'grid' },
|
|
64
71
|
himiBrandedCoupons: { rows: 'coupons', title: 'name', subtitle: 'subtitle', view: 'list', primaryVerb: { label: 'Get code' } },
|
|
65
72
|
himiBrandedNotifications: { rows: 'items', title: 'name', subtitle: 'subtitle', image: 'photo', metadata: ['unreadDot'], view: 'list' },
|
|
@@ -75,7 +82,7 @@ export const COLLECTIONS: Record<string, CollectionConfig> = {
|
|
|
75
82
|
himiBrandedForms: { rows: 'forms', title: 'name', subtitle: 'description', view: 'list' },
|
|
76
83
|
himiBrandedGalleries: { rows: 'galleries', title: 'name', subtitle: 'description', image: 'image', view: 'grid' },
|
|
77
84
|
himiBrandedInbox: { rows: 'conversations', title: 'title', subtitle: 'preview', view: 'list' },
|
|
78
|
-
himiBrandedMenus: { rows: 'rows', title: 'name', subtitle: 'description', image: 'image', sectioned: true, filter: 'collectionCategory', metadata: ['collectionCategory', 'priceLine', 'label1', 'label2', 'label3'], view: 'grid' },
|
|
85
|
+
himiBrandedMenus: { rows: 'rows', title: 'name', subtitle: 'description', image: 'image', sectioned: true, filter: 'collectionCategory', metadata: ['collectionCategory', 'priceLine', 'label1', 'label2', 'label3'], view: 'grid', searchPlaceholder: 'Search the menu', countNoun: ['dish', 'dishes'] },
|
|
79
86
|
};
|
|
80
87
|
export interface CollectionPreferences {
|
|
81
88
|
view: 'list' | 'grid';
|
|
@@ -18,6 +18,20 @@ type Reducer = (s: State, ...args: unknown[]) => State | undefined | Promise<Sta
|
|
|
18
18
|
const object = (x: unknown): State => x && typeof x === 'object' && !Array.isArray(x) ? x as State : {};
|
|
19
19
|
const str = (arg: unknown, key: string): string => typeof arg === 'string' ? arg : String(object(arg)[key] ?? '');
|
|
20
20
|
|
|
21
|
+
/** The toolbar count line — "12 dishes", or "3 of 12 dishes" while a filter narrows the list.
|
|
22
|
+
*
|
|
23
|
+
* It used to read "12 / 12 loaded" and "2 / 2 results" ([branded-lite-qa] #3002): the numbers
|
|
24
|
+
* described the implementation (a client-side filter over a fetched page) rather than what the
|
|
25
|
+
* customer is looking at, and the slash-and-suffix wrapped onto two lines on web. When the
|
|
26
|
+
* backend total is unknown the count shown is simply what is shown; the "Load more" button is
|
|
27
|
+
* what says there is more. */
|
|
28
|
+
export function collectionSummary(o: { shown: number; loaded: number; total?: number; backend?: boolean; noun?: [string, string] }): string {
|
|
29
|
+
const [one, many] = o.noun ?? [copyParam('collection.itemOne', 'item'), copyParam('collection.itemMany', 'items')];
|
|
30
|
+
const whole = o.backend ? (typeof o.total === 'number' ? o.total : o.shown) : o.loaded;
|
|
31
|
+
const noun = (whole === 1 ? one : many);
|
|
32
|
+
return o.shown < whole ? `${o.shown} ${copyParam('collection.of', 'of')} ${whole} ${noun}` : `${o.shown} ${o.shown === 1 ? one : many}`;
|
|
33
|
+
}
|
|
34
|
+
|
|
21
35
|
/** Opt-in decorator. Domain reducers remain authoritative; collection preferences
|
|
22
36
|
* survive reducers which replace their entire state, including async refreshes. */
|
|
23
37
|
export function decorateCollection(name: string, def: { state: State; actions?: Record<string, Reducer> }, saving?: CollectionSaving, backend?: BackendCollection) {
|
|
@@ -179,11 +193,11 @@ export function decorateCollection(name: string, def: { state: State; actions?:
|
|
|
179
193
|
filtersPresented, previewPresented: !!previewId, preview: projected.items.filter(row => row.collectionId === previewId),
|
|
180
194
|
persistenceLabel: persisted.available ? copyParam('collection.onDevice', 'Saved on this device') : copyParam('collection.sessionOnly', 'Choices last for this session'),
|
|
181
195
|
noEmpty: loading || errored || sourceEmpty || domainNarrowed || projected.items.length > 0,
|
|
182
|
-
summary: backend && config.backendQuery
|
|
183
|
-
?
|
|
184
|
-
|
|
185
|
-
:
|
|
186
|
-
|
|
196
|
+
summary: backend && config.backendQuery && s.fromCache
|
|
197
|
+
? copyParam('collection.cached', 'Saved offline · may be outdated')
|
|
198
|
+
: collectionSummary({ shown: projected.items.length, loaded: projected.loaded, backend: !!(backend && config.backendQuery),
|
|
199
|
+
total: typeof s.total === 'number' ? s.total : undefined, noun: config.countNoun
|
|
200
|
+
? [copyParam(`collection.${name}.countOne`, config.countNoun[0]), copyParam(`collection.${name}.countMany`, config.countNoun[1])] : undefined }),
|
|
187
201
|
selectedSummary: `${prefs.selectedIds.length} ${copyParam('collection.selected', 'selected')}`,
|
|
188
202
|
filterChoices,
|
|
189
203
|
chips: config.filterValues ? filterChoices.filter(choice => ['all', 'saved', prefs.filter].includes(choice.id)) : filterChoices,
|
|
@@ -352,3 +352,54 @@ export function compareDateDesc(a: string, b: string): number {
|
|
|
352
352
|
if (bBad) return -1;
|
|
353
353
|
return tb - ta;
|
|
354
354
|
}
|
|
355
|
+
|
|
356
|
+
// --- [branded-lite-qa] #3079: one pattern per fact ---------------------------------------
|
|
357
|
+
//
|
|
358
|
+
// Before these existed, four screens formatted the same money four ways — Shop "69.00 ₪" (Wix's
|
|
359
|
+
// pre-formatted string), Services "₪70" (0 decimals), Menu "₪32.00", Plans "$24" — and two
|
|
360
|
+
// screens formatted the same clock two ways (Events "9:00 PM-11:00 PM", Reserve "20:00").
|
|
361
|
+
// Customers read that as sloppiness, and a whole "₪70" beside "₪69.50" reads as a different
|
|
362
|
+
// kind of number. So: one money pattern, one clock, one range.
|
|
363
|
+
|
|
364
|
+
// Money uses `formatCurrency(amount, currency, "en")` — the currency's NATURAL decimals
|
|
365
|
+
// ("₪70.00", "¥500"). Passing 0 fraction digits for whole amounts is what made a list read
|
|
366
|
+
// "₪70 · ₪69.50".
|
|
367
|
+
|
|
368
|
+
const KNOWN_SYMBOLS = new Set(Object.values(CURRENCY_SYMBOL));
|
|
369
|
+
|
|
370
|
+
/** Wix hands some prices over PRE-formatted in the site's regional style — "69.00 ₪" with the
|
|
371
|
+
* symbol trailing, often wrapped in bidi marks. Reorder those to the house pattern ("₪69.00") so
|
|
372
|
+
* they match every price we format ourselves. Only an en-shaped number ("69.00", "1,234.50") with
|
|
373
|
+
* a known trailing symbol is reordered: a comma-decimal or space-grouped string ("69,00 €",
|
|
374
|
+
* "1 234,56 €") is kept as Wix wrote it, because half-converting it would be worse. Anything else
|
|
375
|
+
* ("Market price") is returned trimmed. The store SDK's product price applies the same rule. */
|
|
376
|
+
export function normalizeFormattedPrice(formatted: string): string {
|
|
377
|
+
const raw = (formatted || "").replace(/[]/g, "").trim();
|
|
378
|
+
const m = /^(-?)(\d{1,3}(?:,\d{3})*(?:\.\d+)?|\d+(?:\.\d+)?)[\s ]*(\S+)$/.exec(raw);
|
|
379
|
+
if (!m || !KNOWN_SYMBOLS.has(m[3])) return raw;
|
|
380
|
+
return `${m[1]}${m[3]}${m[2]}`;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
function clockParts(d: Date, locale: string): { time: string; meridiem: string } {
|
|
384
|
+
const full = hasIntl()
|
|
385
|
+
? new Intl.DateTimeFormat(locale, { hour: "numeric", minute: "2-digit", hour12: true }).format(d)
|
|
386
|
+
: clock12(d);
|
|
387
|
+
// ICU puts a narrow no-break space before the meridiem; normalize so callers can split on it.
|
|
388
|
+
const clean = full.replace(/[ ]/g, " ");
|
|
389
|
+
const m = /^(.*?)\s*([AP]\.?M\.?)$/i.exec(clean);
|
|
390
|
+
return m ? { time: m[1], meridiem: m[2] } : { time: clean, meridiem: "" };
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/** "8:00 PM" — the one clock every customer screen uses (12-hour, en-US shape). */
|
|
394
|
+
export function formatClock(date: Date, locale = "en-US"): string {
|
|
395
|
+
const { time, meridiem } = clockParts(date, locale);
|
|
396
|
+
return meridiem ? `${time} ${meridiem}` : time;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/** Is this ISO instant before `now`? A missing or unparseable value is NOT past — "no expiry"
|
|
400
|
+
* must never classify an offer as expired. */
|
|
401
|
+
export function isPastDate(iso: string | undefined | null, now: number = Date.now()): boolean {
|
|
402
|
+
if (!iso) return false;
|
|
403
|
+
const t = Date.parse(iso);
|
|
404
|
+
return !Number.isNaN(t) && t < now;
|
|
405
|
+
}
|
|
@@ -74,6 +74,54 @@ const SITE_CONTEXT_CODES = ["MISSING_METASITE_ID", "MISSING_REQUEST_SITE_CONTEXT
|
|
|
74
74
|
* message and starts being a payload dump. */
|
|
75
75
|
const MAX_RAW = 200;
|
|
76
76
|
|
|
77
|
+
/**
|
|
78
|
+
* A TRANSPORT failure: the request never got an HTTP answer at all.
|
|
79
|
+
*
|
|
80
|
+
* Each host describes one in its own platform's words, and every one of them is a
|
|
81
|
+
* diagnostic dump rather than a message. iOS's JSWorker hands a worker the Swift
|
|
82
|
+
* description of the `NSError` —
|
|
83
|
+
* `Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server."
|
|
84
|
+
* UserInfo={… NSErrorFailingURLStringKey=http://127.0.0.1:8178/__dev/wix/proxy, …}`
|
|
85
|
+
* — which Aria painted verbatim: the domain, the code, and the local server's
|
|
86
|
+
* own URL. Android's bridge carries the `java.net` exception text, and a browser's
|
|
87
|
+
* fetch rejects with "Failed to fetch" / "Load failed" / "NetworkError …".
|
|
88
|
+
*
|
|
89
|
+
* Only a message with NO HTTP status qualifies: a status means Wix answered, and
|
|
90
|
+
* that case keeps its own reductions below.
|
|
91
|
+
*/
|
|
92
|
+
const TRANSPORT = [
|
|
93
|
+
/\bError Domain=\w+/, // any Cocoa NSError description
|
|
94
|
+
/\bNSURLErrorDomain\b/,
|
|
95
|
+
/\bjava\.(?:net|io)\.\w+(?:Exception|Error)\b/,
|
|
96
|
+
/\b(?:UnknownHost|Connect|SocketTimeout|NoRouteToHost|SSLHandshake)Exception\b/,
|
|
97
|
+
// Android's WebViewJSWorker bridges `e.message ?: e.javaClass.simpleName`, so
|
|
98
|
+
// the class name is usually absent and only OkHttp's own message arrives.
|
|
99
|
+
/^Failed to connect to \S/,
|
|
100
|
+
/^Unable to resolve host\b/,
|
|
101
|
+
/\b(?:Connection refused|Network is unreachable|Software caused connection abort)\b/,
|
|
102
|
+
/^(?:timeout|Read timed out|connect timed out)$/i,
|
|
103
|
+
/\bFailed to fetch\b/,
|
|
104
|
+
/\bNetworkError when attempting to fetch\b/,
|
|
105
|
+
/^(?:TypeError: )?Load failed$/,
|
|
106
|
+
/\bnet::ERR_[A-Z_]+/,
|
|
107
|
+
];
|
|
108
|
+
|
|
109
|
+
/** Did this failure happen below HTTP — no answer from Wix at all? */
|
|
110
|
+
export function isTransportFailure(e: unknown): boolean {
|
|
111
|
+
const msg = String((e as Error)?.message ?? e ?? "");
|
|
112
|
+
if (STATUS.test(msg)) return false;
|
|
113
|
+
return TRANSPORT.some((re) => re.test(msg));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** The one sentence for a transport failure. Copy-as-configuration: the key is
|
|
117
|
+
* under `ownerCommon.`, which every owner screen (Aria included) forwards. */
|
|
118
|
+
export function ownerTransportFailureText(): string {
|
|
119
|
+
return copyParam(
|
|
120
|
+
"ownerCommon.networkUnreachable",
|
|
121
|
+
"Couldn’t reach Wix. Check your connection and try again.",
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
77
125
|
/**
|
|
78
126
|
* Reduce a wire failure to something a PERSON can read.
|
|
79
127
|
*
|
|
@@ -85,6 +133,7 @@ const MAX_RAW = 200;
|
|
|
85
133
|
* markup; a long non-HTML body is truncated for the same reason.
|
|
86
134
|
*/
|
|
87
135
|
function humanWireError(msg: string): string {
|
|
136
|
+
if (isTransportFailure(msg)) return ownerTransportFailureText();
|
|
88
137
|
const status = STATUS.exec(msg)?.[1];
|
|
89
138
|
// A JSON ENVELOPE or a NAMED REASON CODE is the machine's word for it, and the
|
|
90
139
|
// owner gets neither. Both reductions used to live in `ownerDisplayError` only,
|
|
@@ -3295,17 +3295,6 @@ const SCREENS = runtimeSetting({
|
|
|
3295
3295
|
}
|
|
3296
3296
|
}
|
|
3297
3297
|
},
|
|
3298
|
-
{
|
|
3299
|
-
"id": "",
|
|
3300
|
-
"body": {
|
|
3301
|
-
"package": "himalaya",
|
|
3302
|
-
"type": "Text",
|
|
3303
|
-
"props": {
|
|
3304
|
-
"text": "__HIMI_APP_NAME__",
|
|
3305
|
-
"style": "bodyEmphasis"
|
|
3306
|
-
}
|
|
3307
|
-
}
|
|
3308
|
-
},
|
|
3309
3298
|
{
|
|
3310
3299
|
"id": "",
|
|
3311
3300
|
"body": {
|
|
@@ -4939,16 +4928,64 @@ const SCREENS = runtimeSetting({
|
|
|
4939
4928
|
}
|
|
4940
4929
|
},
|
|
4941
4930
|
{
|
|
4942
|
-
"id": "",
|
|
4931
|
+
"id": "himi_whats_new.empty",
|
|
4943
4932
|
"body": {
|
|
4944
4933
|
"package": "himalaya",
|
|
4945
|
-
"type": "
|
|
4934
|
+
"type": "VStack",
|
|
4946
4935
|
"props": {
|
|
4947
|
-
"
|
|
4948
|
-
"
|
|
4949
|
-
"
|
|
4950
|
-
|
|
4936
|
+
"spacing": 8,
|
|
4937
|
+
"alignment": "leading",
|
|
4938
|
+
"children": [
|
|
4939
|
+
{
|
|
4940
|
+
"id": "",
|
|
4941
|
+
"body": {
|
|
4942
|
+
"package": "himalaya",
|
|
4943
|
+
"type": "Icon",
|
|
4944
|
+
"props": {
|
|
4945
|
+
"name": "newspaper",
|
|
4946
|
+
"size": 28,
|
|
4947
|
+
"tint": "textTertiary"
|
|
4948
|
+
}
|
|
4949
|
+
},
|
|
4950
|
+
"modifiers": {
|
|
4951
|
+
"accessibilityRole": "decorative"
|
|
4952
|
+
}
|
|
4953
|
+
},
|
|
4954
|
+
{
|
|
4955
|
+
"id": "",
|
|
4956
|
+
"body": {
|
|
4957
|
+
"package": "himalaya",
|
|
4958
|
+
"type": "Text",
|
|
4959
|
+
"props": {
|
|
4960
|
+
"text": "$service:spacesWhatsNew.emptyText",
|
|
4961
|
+
"style": "body",
|
|
4962
|
+
"color": "textSecondary",
|
|
4963
|
+
"collapseWhenEmpty": true
|
|
4964
|
+
}
|
|
4965
|
+
}
|
|
4966
|
+
}
|
|
4967
|
+
]
|
|
4951
4968
|
}
|
|
4969
|
+
},
|
|
4970
|
+
"modifiers": {
|
|
4971
|
+
"background": {
|
|
4972
|
+
"token": "surfaceElevated"
|
|
4973
|
+
},
|
|
4974
|
+
"border": {
|
|
4975
|
+
"width": 1,
|
|
4976
|
+
"color": {
|
|
4977
|
+
"token": "border"
|
|
4978
|
+
}
|
|
4979
|
+
},
|
|
4980
|
+
"cornerRadius": 16,
|
|
4981
|
+
"padding": {
|
|
4982
|
+
"leading": 16,
|
|
4983
|
+
"trailing": 16,
|
|
4984
|
+
"top": 16,
|
|
4985
|
+
"bottom": 16
|
|
4986
|
+
},
|
|
4987
|
+
"fillMaxWidth": true,
|
|
4988
|
+
"hiddenPath": "$service:spacesWhatsNew.noEmpty"
|
|
4952
4989
|
}
|
|
4953
4990
|
}
|
|
4954
4991
|
]
|
|
@@ -5027,7 +5064,7 @@ const SCREENS = runtimeSetting({
|
|
|
5027
5064
|
"package": "himalaya",
|
|
5028
5065
|
"type": "SearchField",
|
|
5029
5066
|
"props": {
|
|
5030
|
-
"placeholder": "Search
|
|
5067
|
+
"placeholder": "Search the menu",
|
|
5031
5068
|
"autoCapitalization": "none",
|
|
5032
5069
|
"submitLabel": "search",
|
|
5033
5070
|
"onChange": {
|
|
@@ -6696,7 +6733,7 @@ const SCREENS = runtimeSetting({
|
|
|
6696
6733
|
"package": "himalaya",
|
|
6697
6734
|
"type": "Text",
|
|
6698
6735
|
"props": {
|
|
6699
|
-
"text": "Sort
|
|
6736
|
+
"text": "Sort",
|
|
6700
6737
|
"style": "bodyEmphasis"
|
|
6701
6738
|
}
|
|
6702
6739
|
}
|
|
@@ -7554,7 +7591,7 @@ const SCREENS = runtimeSetting({
|
|
|
7554
7591
|
"package": "himalaya",
|
|
7555
7592
|
"type": "Text",
|
|
7556
7593
|
"props": {
|
|
7557
|
-
"text": "Date
|
|
7594
|
+
"text": "Date",
|
|
7558
7595
|
"style": "caption",
|
|
7559
7596
|
"color": "textSecondary"
|
|
7560
7597
|
}
|
|
@@ -7581,6 +7618,18 @@ const SCREENS = runtimeSetting({
|
|
|
7581
7618
|
"accessibilityLabel": "Date"
|
|
7582
7619
|
}
|
|
7583
7620
|
},
|
|
7621
|
+
{
|
|
7622
|
+
"id": "himi_reserve.time_label",
|
|
7623
|
+
"body": {
|
|
7624
|
+
"package": "himalaya",
|
|
7625
|
+
"type": "Text",
|
|
7626
|
+
"props": {
|
|
7627
|
+
"text": "Time",
|
|
7628
|
+
"style": "caption",
|
|
7629
|
+
"color": "textSecondary"
|
|
7630
|
+
}
|
|
7631
|
+
}
|
|
7632
|
+
},
|
|
7584
7633
|
{
|
|
7585
7634
|
"id": "himi_reserve.slot_picker",
|
|
7586
7635
|
"body": {
|
|
@@ -7617,6 +7666,56 @@ const SCREENS = runtimeSetting({
|
|
|
7617
7666
|
"modifiers": {
|
|
7618
7667
|
"hiddenPath": "$service:himiBrandedReserve.hasSlots"
|
|
7619
7668
|
}
|
|
7669
|
+
},
|
|
7670
|
+
{
|
|
7671
|
+
"id": "himi_reserve.party",
|
|
7672
|
+
"body": {
|
|
7673
|
+
"package": "himalaya",
|
|
7674
|
+
"type": "HStack",
|
|
7675
|
+
"props": {
|
|
7676
|
+
"spacing": 12,
|
|
7677
|
+
"children": [
|
|
7678
|
+
{
|
|
7679
|
+
"id": "himi_reserve.party_label",
|
|
7680
|
+
"body": {
|
|
7681
|
+
"package": "himalaya",
|
|
7682
|
+
"type": "Text",
|
|
7683
|
+
"props": {
|
|
7684
|
+
"text": "Party size",
|
|
7685
|
+
"style": "body"
|
|
7686
|
+
}
|
|
7687
|
+
}
|
|
7688
|
+
},
|
|
7689
|
+
{
|
|
7690
|
+
"id": "",
|
|
7691
|
+
"body": {
|
|
7692
|
+
"package": "himalaya",
|
|
7693
|
+
"type": "Spacer",
|
|
7694
|
+
"props": {}
|
|
7695
|
+
}
|
|
7696
|
+
},
|
|
7697
|
+
{
|
|
7698
|
+
"id": "himi_reserve.party_size",
|
|
7699
|
+
"body": {
|
|
7700
|
+
"package": "himalaya",
|
|
7701
|
+
"type": "Stepper",
|
|
7702
|
+
"props": {
|
|
7703
|
+
"value": 2,
|
|
7704
|
+
"valuePath": "$service:himiBrandedReserve.partySize",
|
|
7705
|
+
"min": 1,
|
|
7706
|
+
"max": 20,
|
|
7707
|
+
"onChange": {
|
|
7708
|
+
"actionId": "tier5.himiBrandedReserve.setPartySize"
|
|
7709
|
+
}
|
|
7710
|
+
}
|
|
7711
|
+
},
|
|
7712
|
+
"modifiers": {
|
|
7713
|
+
"accessibilityLabel": "Party size"
|
|
7714
|
+
}
|
|
7715
|
+
}
|
|
7716
|
+
]
|
|
7717
|
+
}
|
|
7718
|
+
}
|
|
7620
7719
|
}
|
|
7621
7720
|
]
|
|
7622
7721
|
}
|
|
@@ -7697,26 +7796,6 @@ const SCREENS = runtimeSetting({
|
|
|
7697
7796
|
}
|
|
7698
7797
|
}
|
|
7699
7798
|
}
|
|
7700
|
-
},
|
|
7701
|
-
{
|
|
7702
|
-
"id": "field_partySize",
|
|
7703
|
-
"body": {
|
|
7704
|
-
"package": "himalaya",
|
|
7705
|
-
"type": "FormField",
|
|
7706
|
-
"props": {
|
|
7707
|
-
"id": "partySize",
|
|
7708
|
-
"label": "Party size",
|
|
7709
|
-
"kind": "stepper",
|
|
7710
|
-
"stepper": {
|
|
7711
|
-
"value": 2,
|
|
7712
|
-
"min": 1,
|
|
7713
|
-
"max": 20,
|
|
7714
|
-
"onChange": {
|
|
7715
|
-
"actionId": "tier5.himiBrandedReserve.setPartySize"
|
|
7716
|
-
}
|
|
7717
|
-
}
|
|
7718
|
-
}
|
|
7719
|
-
}
|
|
7720
7799
|
}
|
|
7721
7800
|
],
|
|
7722
7801
|
"submitButton": {
|
|
@@ -8192,7 +8271,7 @@ const SCREENS = runtimeSetting({
|
|
|
8192
8271
|
"package": "himalaya",
|
|
8193
8272
|
"type": "SearchField",
|
|
8194
8273
|
"props": {
|
|
8195
|
-
"placeholder": "
|
|
8274
|
+
"placeholder": "Search events",
|
|
8196
8275
|
"debounceMs": 200,
|
|
8197
8276
|
"onChange": {
|
|
8198
8277
|
"actionId": "tier5.himiEvents.collectionSearch"
|
|
@@ -9385,20 +9464,6 @@ const SCREENS = runtimeSetting({
|
|
|
9385
9464
|
}
|
|
9386
9465
|
}
|
|
9387
9466
|
},
|
|
9388
|
-
{
|
|
9389
|
-
"id": "btn_tier5_himievents_refresh",
|
|
9390
|
-
"body": {
|
|
9391
|
-
"package": "himalaya",
|
|
9392
|
-
"type": "Button",
|
|
9393
|
-
"props": {
|
|
9394
|
-
"title": "Refresh",
|
|
9395
|
-
"style": "plain",
|
|
9396
|
-
"action": {
|
|
9397
|
-
"actionId": "tier5.himiEvents.refresh"
|
|
9398
|
-
}
|
|
9399
|
-
}
|
|
9400
|
-
}
|
|
9401
|
-
},
|
|
9402
9467
|
{
|
|
9403
9468
|
"id": "himi_events.list.collection.more",
|
|
9404
9469
|
"body": {
|
|
@@ -10074,20 +10139,6 @@ const SCREENS = runtimeSetting({
|
|
|
10074
10139
|
}
|
|
10075
10140
|
}
|
|
10076
10141
|
},
|
|
10077
|
-
{
|
|
10078
|
-
"id": "btn_tier5_himievents_refresh",
|
|
10079
|
-
"body": {
|
|
10080
|
-
"package": "himalaya",
|
|
10081
|
-
"type": "Button",
|
|
10082
|
-
"props": {
|
|
10083
|
-
"title": "Refresh",
|
|
10084
|
-
"style": "plain",
|
|
10085
|
-
"action": {
|
|
10086
|
-
"actionId": "tier5.himiEvents.refresh"
|
|
10087
|
-
}
|
|
10088
|
-
}
|
|
10089
|
-
}
|
|
10090
|
-
},
|
|
10091
10142
|
{
|
|
10092
10143
|
"id": "himi_events.list.collection.compact-more",
|
|
10093
10144
|
"body": {
|
|
@@ -11560,7 +11611,7 @@ const SCREENS = runtimeSetting({
|
|
|
11560
11611
|
"package": "himalaya",
|
|
11561
11612
|
"type": "SearchField",
|
|
11562
11613
|
"props": {
|
|
11563
|
-
"placeholder": "Search
|
|
11614
|
+
"placeholder": "Search",
|
|
11564
11615
|
"debounceMs": 200,
|
|
11565
11616
|
"onChange": {
|
|
11566
11617
|
"actionId": "tier5.himiBlogFeed.collectionSearch"
|
|
@@ -12672,20 +12723,6 @@ const SCREENS = runtimeSetting({
|
|
|
12672
12723
|
}
|
|
12673
12724
|
}
|
|
12674
12725
|
},
|
|
12675
|
-
{
|
|
12676
|
-
"id": "btn_tier5_himiblogfeed_retry",
|
|
12677
|
-
"body": {
|
|
12678
|
-
"package": "himalaya",
|
|
12679
|
-
"type": "Button",
|
|
12680
|
-
"props": {
|
|
12681
|
-
"title": "Refresh",
|
|
12682
|
-
"style": "plain",
|
|
12683
|
-
"action": {
|
|
12684
|
-
"actionId": "tier5.himiBlogFeed.retry"
|
|
12685
|
-
}
|
|
12686
|
-
}
|
|
12687
|
-
}
|
|
12688
|
-
},
|
|
12689
12726
|
{
|
|
12690
12727
|
"id": "himi_blog.list.collection.more",
|
|
12691
12728
|
"body": {
|
|
@@ -13323,20 +13360,6 @@ const SCREENS = runtimeSetting({
|
|
|
13323
13360
|
}
|
|
13324
13361
|
}
|
|
13325
13362
|
},
|
|
13326
|
-
{
|
|
13327
|
-
"id": "btn_tier5_himiblogfeed_retry",
|
|
13328
|
-
"body": {
|
|
13329
|
-
"package": "himalaya",
|
|
13330
|
-
"type": "Button",
|
|
13331
|
-
"props": {
|
|
13332
|
-
"title": "Refresh",
|
|
13333
|
-
"style": "plain",
|
|
13334
|
-
"action": {
|
|
13335
|
-
"actionId": "tier5.himiBlogFeed.retry"
|
|
13336
|
-
}
|
|
13337
|
-
}
|
|
13338
|
-
}
|
|
13339
|
-
},
|
|
13340
13363
|
{
|
|
13341
13364
|
"id": "himi_blog.list.collection.compact-more",
|
|
13342
13365
|
"body": {
|
|
@@ -13463,7 +13486,7 @@ const SCREENS = runtimeSetting({
|
|
|
13463
13486
|
"package": "himalaya",
|
|
13464
13487
|
"type": "Text",
|
|
13465
13488
|
"props": {
|
|
13466
|
-
"text": "Sort
|
|
13489
|
+
"text": "Sort",
|
|
13467
13490
|
"style": "bodyEmphasis"
|
|
13468
13491
|
}
|
|
13469
13492
|
}
|
|
@@ -14167,7 +14190,7 @@ const SCREENS = runtimeSetting({
|
|
|
14167
14190
|
"package": "himalaya",
|
|
14168
14191
|
"type": "Text",
|
|
14169
14192
|
"props": {
|
|
14170
|
-
"text": "Posts saved
|
|
14193
|
+
"text": "Posts you have saved to read later.",
|
|
14171
14194
|
"style": "body",
|
|
14172
14195
|
"color": "textSecondary"
|
|
14173
14196
|
}
|
|
@@ -14730,7 +14753,7 @@ const SCREENS = runtimeSetting({
|
|
|
14730
14753
|
"package": "himalaya",
|
|
14731
14754
|
"type": "Text",
|
|
14732
14755
|
"props": {
|
|
14733
|
-
"text": "Sign in to see your
|
|
14756
|
+
"text": "Sign in to see your food orders",
|
|
14734
14757
|
"style": "bodyEmphasis"
|
|
14735
14758
|
}
|
|
14736
14759
|
}
|