@wix/himalaya-cli 0.1574.0 → 0.1576.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/app-config.d.ts +16 -5
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/define-app.d.ts +6 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/telemetry/wix-bi/src/index.d.ts +15 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/telemetry/wix-bi/src/oneapp.d.ts +90 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-bi.mjs +165 -5
- package/dist/cli.mjs +3489 -2601
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/designing-himi-screens.md +7 -1
- package/guides/hhp.md +2 -2
- package/guides/himi-json-output.md +20 -0
- package/guides/push-cli-onboarding.md +10 -0
- package/package.json +2 -2
- package/templates/beauty-salon/dev/index.ts +74 -127
- package/templates/beauty-salon/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/beauty-salon/tier5-src/himi-branded-lite-cart/index.ts +18 -5
- package/templates/beauty-salon-owner/dev/index.ts +5 -0
- package/templates/beauty-salon-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-product-form/index.ts +5 -1
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-service-form/index.ts +5 -1
- package/templates/branded-lite/dev/index.ts +114 -136
- package/templates/branded-lite/l10n/en.json +570 -0
- package/templates/branded-lite/l10n/he.json +200 -0
- package/templates/branded-lite/tier5-src/_shared/business-chat-copy.ts +40 -0
- package/templates/branded-lite/tier5-src/_shared/business-chat-message-model.ts +1 -1
- package/templates/branded-lite/tier5-src/_shared/business-chat-model.ts +3 -2
- package/templates/branded-lite/tier5-src/_shared/business-chat-presenter.ts +26 -21
- package/templates/branded-lite/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/branded-lite/tier5-src/business-chat/index.ts +184 -63
- package/templates/branded-lite/tier5-src/himi-branded-lite-cart/index.ts +18 -5
- package/templates/community-club-owner/dev/index.ts +5 -0
- package/templates/community-club-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/community-club-owner/tier5-src/himi-owner-lite-event-form/index.ts +5 -1
- package/templates/community-club-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/community-club-owner/tier5-src/himi-owner-lite-product-form/index.ts +5 -1
- package/templates/events-meetups-owner/dev/index.ts +3 -0
- package/templates/events-meetups-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-event-form/index.ts +5 -1
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/gym-fitness/dev/index.ts +74 -127
- package/templates/gym-fitness/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/gym-fitness/tier5-src/himi-branded-lite-cart/index.ts +18 -5
- package/templates/gym-fitness-owner/dev/index.ts +6 -0
- package/templates/gym-fitness-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-event-form/index.ts +5 -1
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-product-form/index.ts +5 -1
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-service-form/index.ts +5 -1
- package/templates/nonprofit-cause-owner/dev/index.ts +4 -0
- package/templates/nonprofit-cause-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-event-form/index.ts +5 -1
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-service-form/index.ts +5 -1
- package/templates/owner-lite/dev/index.ts +6 -0
- package/templates/owner-lite/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/owner-lite/tier5-src/himi-owner-lite-event-form/index.ts +5 -1
- package/templates/owner-lite/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/owner-lite/tier5-src/himi-owner-lite-product-form/index.ts +5 -1
- package/templates/owner-lite/tier5-src/himi-owner-lite-service-form/index.ts +5 -1
- package/templates/podcast-creator-owner/dev/index.ts +5 -0
- package/templates/podcast-creator-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-event-form/index.ts +5 -1
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-product-form/index.ts +5 -1
- package/templates/portfolio-creative/dev/index.ts +74 -127
- package/templates/portfolio-creative/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-cart/index.ts +18 -5
- package/templates/portfolio-creative-owner/dev/index.ts +5 -0
- package/templates/portfolio-creative-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-product-form/index.ts +5 -1
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-service-form/index.ts +5 -1
- package/templates/restaurant-owner/dev/index.ts +6 -0
- package/templates/restaurant-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-event-form/index.ts +5 -1
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-product-form/index.ts +5 -1
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-service-form/index.ts +5 -1
- package/templates/retail-store/dev/index.ts +74 -127
- package/templates/retail-store/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/retail-store/tier5-src/himi-branded-lite-cart/index.ts +18 -5
- package/templates/retail-store-owner/dev/index.ts +4 -0
- package/templates/retail-store-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-product-form/index.ts +5 -1
- package/templates/yoga-studio-owner/dev/index.ts +4 -0
- package/templates/yoga-studio-owner/tier5-src/_shared/exclusive-writes.ts +66 -0
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-event-form/index.ts +5 -1
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-post-form/index.ts +5 -1
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-service-form/index.ts +5 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { defineService as register, type ServiceDefinition } from '@himalaya/state';
|
|
2
|
+
|
|
3
|
+
/** Reject repeated taps until the accepted write's result is committed. A promise
|
|
4
|
+
* queue alone releases before the host applies the reducer result, so the next
|
|
5
|
+
* write can still read an old revision/id. The private synchronous reducer below
|
|
6
|
+
* publishes busy and commits completion through the ordinary service handle;
|
|
7
|
+
* awaiting that handle guarantees the host has stored the result before unlock.
|
|
8
|
+
* Skipped actions return undefined, so they cannot roll back the accepted write.
|
|
9
|
+
*/
|
|
10
|
+
export function withExclusiveWrites<S extends object = Record<string, unknown>>(
|
|
11
|
+
registerService: typeof register, names: readonly string[],
|
|
12
|
+
options: { prepare?: (action: string, args: readonly unknown[]) => void; coalesce?: readonly string[]; settle?: (before: S, next: S, live: S) => S } = {},
|
|
13
|
+
): typeof register {
|
|
14
|
+
return ((name: string, definition: ServiceDefinition<Record<string, unknown>>) => {
|
|
15
|
+
let busy = false;
|
|
16
|
+
let activeAction = "";
|
|
17
|
+
let completion = Promise.resolve();
|
|
18
|
+
let complete = () => {};
|
|
19
|
+
let handle: { getState(): Record<string, unknown>; exclusiveWriteState(next: Record<string, unknown>): Promise<unknown> };
|
|
20
|
+
const wrapped: ServiceDefinition<Record<string, unknown>> = {
|
|
21
|
+
...definition,
|
|
22
|
+
state: { ...definition.state, writeBusy: false },
|
|
23
|
+
notHydrated: [...(definition.notHydrated ?? []), 'writeBusy'],
|
|
24
|
+
actions: {
|
|
25
|
+
...Object.fromEntries(Object.entries(definition.actions ?? {}).map(([action, reduce]) => [action,
|
|
26
|
+
names.includes(action) ? async (state: Record<string, unknown>, ...args: never[]) => {
|
|
27
|
+
// Intake request metadata even when its state replacement is skipped.
|
|
28
|
+
options.prepare?.(action, args);
|
|
29
|
+
if (busy) {
|
|
30
|
+
// Repeated initial loads must await the accepted load, so callers
|
|
31
|
+
// observe its committed rows rather than the initial skeleton.
|
|
32
|
+
if (activeAction === action && options.coalesce?.includes(action)) await completion;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
busy = true;
|
|
36
|
+
activeAction = action;
|
|
37
|
+
completion = new Promise<void>(resolve => { complete = resolve; });
|
|
38
|
+
try {
|
|
39
|
+
await handle.exclusiveWriteState({ ...handle.getState(), writeBusy: true });
|
|
40
|
+
const next = await reduce(state, ...args);
|
|
41
|
+
const live = handle.getState();
|
|
42
|
+
// Non-write actions (for example editing a draft field) can still run
|
|
43
|
+
// during I/O. Let the owning service preserve those newer edits.
|
|
44
|
+
const settled = options.settle ? options.settle(state as S, (next ?? live) as S, live as S) : next ?? live;
|
|
45
|
+
await handle.exclusiveWriteState({ ...settled, writeBusy: false });
|
|
46
|
+
} catch (error) {
|
|
47
|
+
await handle.exclusiveWriteState({ ...handle.getState(), writeBusy: false });
|
|
48
|
+
throw error;
|
|
49
|
+
} finally {
|
|
50
|
+
busy = false;
|
|
51
|
+
complete();
|
|
52
|
+
}
|
|
53
|
+
} : reduce,
|
|
54
|
+
])),
|
|
55
|
+
exclusiveWriteState: (_state, next: Record<string, unknown>) => next,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
const registered = registerService(name, wrapped);
|
|
59
|
+
// Registration preserves this private action, but the dynamic action map
|
|
60
|
+
// cannot express its payload to the generic service handle.
|
|
61
|
+
handle = registered as unknown as typeof handle;
|
|
62
|
+
// Older hosts ignore notHydrated. A fresh worker has no pending write.
|
|
63
|
+
handle.getState().writeBusy = false;
|
|
64
|
+
return registered;
|
|
65
|
+
}) as typeof register;
|
|
66
|
+
}
|
|
@@ -8,7 +8,9 @@ import { editorSubmitValue, queuedDocument, editorChanged, editorRunKeys, resetH
|
|
|
8
8
|
import { ricosUploadService } from "@himalaya/wix-rich-content-editor";
|
|
9
9
|
import { wixCall } from "@himalaya/wix-site-media";
|
|
10
10
|
import { wixMediaUrl, WIX_DETAIL_IMAGE } from "../_shared/himi-store.js";
|
|
11
|
-
import { defineService } from "@himalaya/state";
|
|
11
|
+
import { defineService as registerService } from "@himalaya/state";
|
|
12
|
+
import { withExclusiveWrites } from "../_shared/exclusive-writes.js";
|
|
13
|
+
const defineService = withExclusiveWrites(registerService, ["submit"]);
|
|
12
14
|
import { getDraftPost, createDraftPost, updateDraftPost, type WixDraftPostWrite, type WixRichContent } from "@himalaya/wix-blog";
|
|
13
15
|
import { ownerLoadError, isOwnerPreviewDemo, ownerDemoFallback, ownerWriteError } from "../_shared/owner-load-error.js";
|
|
14
16
|
import { DEMO_POSTS, DEMO_NOTE, DEMO_SAVE_NOTE, demoRefusalPatch } from "../_shared/owner-preview-demo.js";
|
|
@@ -53,6 +55,7 @@ interface PostFormState {
|
|
|
53
55
|
noCover: boolean;
|
|
54
56
|
isFeatured: string;
|
|
55
57
|
status: "idle" | "loading" | "saving" | "saved" | "error";
|
|
58
|
+
writeBusy: boolean;
|
|
56
59
|
error: string;
|
|
57
60
|
savedMessage: string;
|
|
58
61
|
/** WS-C — canonical detail target (`himi_owner_lite_post`); `savedId` rides
|
|
@@ -128,6 +131,7 @@ function shape(s: Partial<PostFormState>): PostFormState {
|
|
|
128
131
|
noCover: !s.coverUrl,
|
|
129
132
|
isFeatured: s.isFeatured ?? "false",
|
|
130
133
|
status: s.status ?? "idle",
|
|
134
|
+
writeBusy: s.writeBusy ?? false,
|
|
131
135
|
error: s.error ?? "",
|
|
132
136
|
savedMessage: s.savedMessage ?? "",
|
|
133
137
|
// WS-C — canonical detail target + the saved entity's id as a separate nav
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
// the WRITE shape needs `priceData: { price: <number>, currency }`. Bound by the
|
|
7
7
|
// generic buildForm descriptor ($service:himiOwnerLiteProductForm.*).
|
|
8
8
|
|
|
9
|
-
import { defineService } from "@himalaya/state";
|
|
9
|
+
import { defineService as registerService } from "@himalaya/state";
|
|
10
|
+
import { withExclusiveWrites } from "../_shared/exclusive-writes.js";
|
|
11
|
+
const defineService = withExclusiveWrites(registerService, ["submit"]);
|
|
10
12
|
import {
|
|
11
13
|
getProduct,
|
|
12
14
|
createProduct,
|
|
@@ -76,6 +78,7 @@ interface ProductFormState {
|
|
|
76
78
|
descriptionNote: string;
|
|
77
79
|
visible: string;
|
|
78
80
|
status: "idle" | "loading" | "saving" | "saved" | "error";
|
|
81
|
+
writeBusy: boolean;
|
|
79
82
|
error: string;
|
|
80
83
|
savedMessage: string;
|
|
81
84
|
/** WS-C — canonical detail target (`himi_owner_lite_product`); `savedId` rides
|
|
@@ -161,6 +164,7 @@ function shape(s: Partial<ProductFormState>): ProductFormState {
|
|
|
161
164
|
descriptionNote: dMode === "locked" ? copyParam("ownerProductForm.richDescriptionNote", "This description has formatting or media. Edit it in your site dashboard to keep that content intact; name, price and SKU can be changed here.") : "",
|
|
162
165
|
visible: s.visible ?? "true",
|
|
163
166
|
status: s.status ?? "idle",
|
|
167
|
+
writeBusy: s.writeBusy ?? false,
|
|
164
168
|
error: s.error ?? "",
|
|
165
169
|
savedMessage: s.savedMessage ?? "",
|
|
166
170
|
// WS-C — canonical detail target + the saved entity's id as a separate nav
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
// updateService. Bound by buildForm ($service:himiOwnerLiteServiceForm.*).
|
|
6
6
|
|
|
7
7
|
import { landsOnLive } from "../_shared/owner-editor-value.js";
|
|
8
|
-
import { defineService } from "@himalaya/state";
|
|
8
|
+
import { defineService as registerService } from "@himalaya/state";
|
|
9
|
+
import { withExclusiveWrites } from "../_shared/exclusive-writes.js";
|
|
10
|
+
const defineService = withExclusiveWrites(registerService, ["submit"]);
|
|
9
11
|
import { getService, updateService, type WixService } from "@himalaya/wix-bookings";
|
|
10
12
|
import { ownerLoadError, isOwnerPreviewDemo, ownerDemoFallback, ownerWriteError } from "../_shared/owner-load-error.js";
|
|
11
13
|
import { DEMO_SERVICES, DEMO_NOTE, DEMO_SAVE_NOTE, demoRefusalPatch } from "../_shared/owner-preview-demo.js";
|
|
@@ -31,6 +33,7 @@ interface ServiceFormState {
|
|
|
31
33
|
description: string;
|
|
32
34
|
category: string;
|
|
33
35
|
status: "idle" | "loading" | "saving" | "saved" | "error";
|
|
36
|
+
writeBusy: boolean;
|
|
34
37
|
error: string;
|
|
35
38
|
savedMessage: string;
|
|
36
39
|
/** WS-C — canonical detail target (`himi_owner_lite_service`); `savedId` rides
|
|
@@ -88,6 +91,7 @@ function shape(s: Partial<ServiceFormState>): ServiceFormState {
|
|
|
88
91
|
description: s.description ?? "",
|
|
89
92
|
category: s.category ?? "",
|
|
90
93
|
status: s.status ?? "idle",
|
|
94
|
+
writeBusy: s.writeBusy ?? false,
|
|
91
95
|
error: s.error ?? "",
|
|
92
96
|
savedMessage: s.savedMessage ?? "",
|
|
93
97
|
// WS-C — canonical detail target + the saved entity's id as a separate nav
|
|
@@ -16938,39 +16938,28 @@ const SCREENS = runtimeSetting({
|
|
|
16938
16938
|
"id": "himi_cart.qty_minus",
|
|
16939
16939
|
"body": {
|
|
16940
16940
|
"package": "himalaya",
|
|
16941
|
-
"type": "
|
|
16941
|
+
"type": "Button",
|
|
16942
16942
|
"props": {
|
|
16943
|
-
"
|
|
16944
|
-
"
|
|
16945
|
-
|
|
16946
|
-
|
|
16947
|
-
"
|
|
16948
|
-
"package": "himalaya",
|
|
16949
|
-
"type": "Icon",
|
|
16950
|
-
"props": {
|
|
16951
|
-
"name": "minus",
|
|
16952
|
-
"size": 24,
|
|
16953
|
-
"tint": "textPrimary"
|
|
16954
|
-
}
|
|
16955
|
-
},
|
|
16956
|
-
"modifiers": {
|
|
16957
|
-
"accessibilityRole": "decorative"
|
|
16958
|
-
}
|
|
16943
|
+
"title": "Decrease quantity",
|
|
16944
|
+
"action": {
|
|
16945
|
+
"actionId": "tier5.himiStoreCart.decrement",
|
|
16946
|
+
"params": {
|
|
16947
|
+
"id": "$item.id"
|
|
16959
16948
|
}
|
|
16960
|
-
|
|
16949
|
+
},
|
|
16950
|
+
"style": "tertiary",
|
|
16951
|
+
"iconOnly": true,
|
|
16952
|
+
"leadingIcon": "minus",
|
|
16953
|
+
"cornerRadius": 22,
|
|
16954
|
+
"minHeight": 44,
|
|
16955
|
+
"disabledPath": "$service:himiStoreCart.writeBusy"
|
|
16961
16956
|
}
|
|
16962
16957
|
},
|
|
16963
16958
|
"modifiers": {
|
|
16964
16959
|
"width": 44,
|
|
16965
16960
|
"height": 44,
|
|
16966
|
-
"onTap": {
|
|
16967
|
-
"actionId": "tier5.himiStoreCart.decrement",
|
|
16968
|
-
"params": {
|
|
16969
|
-
"id": "$item.id"
|
|
16970
|
-
}
|
|
16971
|
-
},
|
|
16972
|
-
"accessibilityRole": "button",
|
|
16973
16961
|
"accessibilityLabel": "Decrease quantity",
|
|
16962
|
+
"accessibilityRole": "button",
|
|
16974
16963
|
"haptic": "light"
|
|
16975
16964
|
}
|
|
16976
16965
|
},
|
|
@@ -16993,39 +16982,28 @@ const SCREENS = runtimeSetting({
|
|
|
16993
16982
|
"id": "himi_cart.qty_plus",
|
|
16994
16983
|
"body": {
|
|
16995
16984
|
"package": "himalaya",
|
|
16996
|
-
"type": "
|
|
16985
|
+
"type": "Button",
|
|
16997
16986
|
"props": {
|
|
16998
|
-
"
|
|
16999
|
-
"
|
|
17000
|
-
|
|
17001
|
-
|
|
17002
|
-
"
|
|
17003
|
-
"package": "himalaya",
|
|
17004
|
-
"type": "Icon",
|
|
17005
|
-
"props": {
|
|
17006
|
-
"name": "plus",
|
|
17007
|
-
"size": 24,
|
|
17008
|
-
"tint": "textPrimary"
|
|
17009
|
-
}
|
|
17010
|
-
},
|
|
17011
|
-
"modifiers": {
|
|
17012
|
-
"accessibilityRole": "decorative"
|
|
17013
|
-
}
|
|
16987
|
+
"title": "Increase quantity",
|
|
16988
|
+
"action": {
|
|
16989
|
+
"actionId": "tier5.himiStoreCart.increment",
|
|
16990
|
+
"params": {
|
|
16991
|
+
"id": "$item.id"
|
|
17014
16992
|
}
|
|
17015
|
-
|
|
16993
|
+
},
|
|
16994
|
+
"style": "tertiary",
|
|
16995
|
+
"iconOnly": true,
|
|
16996
|
+
"leadingIcon": "plus",
|
|
16997
|
+
"cornerRadius": 22,
|
|
16998
|
+
"minHeight": 44,
|
|
16999
|
+
"disabledPath": "$service:himiStoreCart.writeBusy"
|
|
17016
17000
|
}
|
|
17017
17001
|
},
|
|
17018
17002
|
"modifiers": {
|
|
17019
17003
|
"width": 44,
|
|
17020
17004
|
"height": 44,
|
|
17021
|
-
"onTap": {
|
|
17022
|
-
"actionId": "tier5.himiStoreCart.increment",
|
|
17023
|
-
"params": {
|
|
17024
|
-
"id": "$item.id"
|
|
17025
|
-
}
|
|
17026
|
-
},
|
|
17027
|
-
"accessibilityRole": "button",
|
|
17028
17005
|
"accessibilityLabel": "Increase quantity",
|
|
17006
|
+
"accessibilityRole": "button",
|
|
17029
17007
|
"haptic": "light"
|
|
17030
17008
|
}
|
|
17031
17009
|
},
|
|
@@ -17041,39 +17019,28 @@ const SCREENS = runtimeSetting({
|
|
|
17041
17019
|
"id": "himi_cart.save_filled",
|
|
17042
17020
|
"body": {
|
|
17043
17021
|
"package": "himalaya",
|
|
17044
|
-
"type": "
|
|
17022
|
+
"type": "Button",
|
|
17045
17023
|
"props": {
|
|
17046
|
-
"
|
|
17047
|
-
"
|
|
17048
|
-
|
|
17049
|
-
|
|
17050
|
-
"
|
|
17051
|
-
"package": "himalaya",
|
|
17052
|
-
"type": "Icon",
|
|
17053
|
-
"props": {
|
|
17054
|
-
"name": "heart_fill",
|
|
17055
|
-
"size": 24,
|
|
17056
|
-
"tint": "textPrimary"
|
|
17057
|
-
}
|
|
17058
|
-
},
|
|
17059
|
-
"modifiers": {
|
|
17060
|
-
"accessibilityRole": "decorative"
|
|
17061
|
-
}
|
|
17024
|
+
"title": "Remove from wishlist",
|
|
17025
|
+
"action": {
|
|
17026
|
+
"actionId": "tier5.himiStoreCart.save",
|
|
17027
|
+
"params": {
|
|
17028
|
+
"id": "$item.id"
|
|
17062
17029
|
}
|
|
17063
|
-
|
|
17030
|
+
},
|
|
17031
|
+
"style": "tertiary",
|
|
17032
|
+
"iconOnly": true,
|
|
17033
|
+
"leadingIcon": "heart_fill",
|
|
17034
|
+
"cornerRadius": 22,
|
|
17035
|
+
"minHeight": 44,
|
|
17036
|
+
"disabledPath": "$service:himiStoreCart.writeBusy"
|
|
17064
17037
|
}
|
|
17065
17038
|
},
|
|
17066
17039
|
"modifiers": {
|
|
17067
17040
|
"width": 44,
|
|
17068
17041
|
"height": 44,
|
|
17069
|
-
"onTap": {
|
|
17070
|
-
"actionId": "tier5.himiStoreCart.save",
|
|
17071
|
-
"params": {
|
|
17072
|
-
"id": "$item.id"
|
|
17073
|
-
}
|
|
17074
|
-
},
|
|
17075
|
-
"accessibilityRole": "button",
|
|
17076
17042
|
"accessibilityLabel": "Remove from wishlist",
|
|
17043
|
+
"accessibilityRole": "button",
|
|
17077
17044
|
"haptic": "light",
|
|
17078
17045
|
"hiddenPath": "$item.notSaved"
|
|
17079
17046
|
}
|
|
@@ -17082,39 +17049,28 @@ const SCREENS = runtimeSetting({
|
|
|
17082
17049
|
"id": "himi_cart.save",
|
|
17083
17050
|
"body": {
|
|
17084
17051
|
"package": "himalaya",
|
|
17085
|
-
"type": "
|
|
17052
|
+
"type": "Button",
|
|
17086
17053
|
"props": {
|
|
17087
|
-
"
|
|
17088
|
-
"
|
|
17089
|
-
|
|
17090
|
-
|
|
17091
|
-
"
|
|
17092
|
-
"package": "himalaya",
|
|
17093
|
-
"type": "Icon",
|
|
17094
|
-
"props": {
|
|
17095
|
-
"name": "heart",
|
|
17096
|
-
"size": 24,
|
|
17097
|
-
"tint": "textPrimary"
|
|
17098
|
-
}
|
|
17099
|
-
},
|
|
17100
|
-
"modifiers": {
|
|
17101
|
-
"accessibilityRole": "decorative"
|
|
17102
|
-
}
|
|
17054
|
+
"title": "Add to wishlist",
|
|
17055
|
+
"action": {
|
|
17056
|
+
"actionId": "tier5.himiStoreCart.save",
|
|
17057
|
+
"params": {
|
|
17058
|
+
"id": "$item.id"
|
|
17103
17059
|
}
|
|
17104
|
-
|
|
17060
|
+
},
|
|
17061
|
+
"style": "tertiary",
|
|
17062
|
+
"iconOnly": true,
|
|
17063
|
+
"leadingIcon": "heart",
|
|
17064
|
+
"cornerRadius": 22,
|
|
17065
|
+
"minHeight": 44,
|
|
17066
|
+
"disabledPath": "$service:himiStoreCart.writeBusy"
|
|
17105
17067
|
}
|
|
17106
17068
|
},
|
|
17107
17069
|
"modifiers": {
|
|
17108
17070
|
"width": 44,
|
|
17109
17071
|
"height": 44,
|
|
17110
|
-
"onTap": {
|
|
17111
|
-
"actionId": "tier5.himiStoreCart.save",
|
|
17112
|
-
"params": {
|
|
17113
|
-
"id": "$item.id"
|
|
17114
|
-
}
|
|
17115
|
-
},
|
|
17116
|
-
"accessibilityRole": "button",
|
|
17117
17072
|
"accessibilityLabel": "Add to wishlist",
|
|
17073
|
+
"accessibilityRole": "button",
|
|
17118
17074
|
"haptic": "light",
|
|
17119
17075
|
"hiddenPath": "$item.saved"
|
|
17120
17076
|
}
|
|
@@ -17123,39 +17079,28 @@ const SCREENS = runtimeSetting({
|
|
|
17123
17079
|
"id": "himi_cart.remove",
|
|
17124
17080
|
"body": {
|
|
17125
17081
|
"package": "himalaya",
|
|
17126
|
-
"type": "
|
|
17082
|
+
"type": "Button",
|
|
17127
17083
|
"props": {
|
|
17128
|
-
"
|
|
17129
|
-
"
|
|
17130
|
-
|
|
17131
|
-
|
|
17132
|
-
"
|
|
17133
|
-
"package": "himalaya",
|
|
17134
|
-
"type": "Icon",
|
|
17135
|
-
"props": {
|
|
17136
|
-
"name": "trash",
|
|
17137
|
-
"size": 24,
|
|
17138
|
-
"tint": "textPrimary"
|
|
17139
|
-
}
|
|
17140
|
-
},
|
|
17141
|
-
"modifiers": {
|
|
17142
|
-
"accessibilityRole": "decorative"
|
|
17143
|
-
}
|
|
17084
|
+
"title": "Remove from cart",
|
|
17085
|
+
"action": {
|
|
17086
|
+
"actionId": "tier5.himiStoreCart.remove",
|
|
17087
|
+
"params": {
|
|
17088
|
+
"id": "$item.id"
|
|
17144
17089
|
}
|
|
17145
|
-
|
|
17090
|
+
},
|
|
17091
|
+
"style": "tertiary",
|
|
17092
|
+
"iconOnly": true,
|
|
17093
|
+
"leadingIcon": "trash",
|
|
17094
|
+
"cornerRadius": 22,
|
|
17095
|
+
"minHeight": 44,
|
|
17096
|
+
"disabledPath": "$service:himiStoreCart.writeBusy"
|
|
17146
17097
|
}
|
|
17147
17098
|
},
|
|
17148
17099
|
"modifiers": {
|
|
17149
17100
|
"width": 44,
|
|
17150
17101
|
"height": 44,
|
|
17151
|
-
"onTap": {
|
|
17152
|
-
"actionId": "tier5.himiStoreCart.remove",
|
|
17153
|
-
"params": {
|
|
17154
|
-
"id": "$item.id"
|
|
17155
|
-
}
|
|
17156
|
-
},
|
|
17157
|
-
"accessibilityRole": "button",
|
|
17158
17102
|
"accessibilityLabel": "Remove from cart",
|
|
17103
|
+
"accessibilityRole": "button",
|
|
17159
17104
|
"haptic": "light"
|
|
17160
17105
|
}
|
|
17161
17106
|
}
|
|
@@ -17404,7 +17349,7 @@ const SCREENS = runtimeSetting({
|
|
|
17404
17349
|
"action": {
|
|
17405
17350
|
"actionId": "tier5.himiStoreCart.applyPromo"
|
|
17406
17351
|
},
|
|
17407
|
-
"disabledPath": "$service:himiStoreCart.
|
|
17352
|
+
"disabledPath": "$service:himiStoreCart.writeBusy"
|
|
17408
17353
|
}
|
|
17409
17354
|
},
|
|
17410
17355
|
"modifiers": {
|
|
@@ -17461,7 +17406,8 @@ const SCREENS = runtimeSetting({
|
|
|
17461
17406
|
"iconOnly": true,
|
|
17462
17407
|
"leadingIcon": "close",
|
|
17463
17408
|
"cornerRadius": 22,
|
|
17464
|
-
"minHeight": 44
|
|
17409
|
+
"minHeight": 44,
|
|
17410
|
+
"disabledPath": "$service:himiStoreCart.writeBusy"
|
|
17465
17411
|
}
|
|
17466
17412
|
},
|
|
17467
17413
|
"modifiers": {
|
|
@@ -17595,6 +17541,7 @@ const SCREENS = runtimeSetting({
|
|
|
17595
17541
|
"title": "Checkout",
|
|
17596
17542
|
"style": "primary",
|
|
17597
17543
|
"fullWidth": true,
|
|
17544
|
+
"disabledPath": "$service:himiStoreCart.writeBusy",
|
|
17598
17545
|
"action": {
|
|
17599
17546
|
"actionId": "tier5.himiStoreCart.checkout"
|
|
17600
17547
|
}
|
|
@@ -86187,7 +86134,7 @@ const SCREENS = runtimeSetting({
|
|
|
86187
86134
|
"package": "himalaya",
|
|
86188
86135
|
"type": "Text",
|
|
86189
86136
|
"props": {
|
|
86190
|
-
"text": "
|
|
86137
|
+
"text": "$t:common.detailLoadingText",
|
|
86191
86138
|
"style": "body",
|
|
86192
86139
|
"color": "textSecondary",
|
|
86193
86140
|
"collapseWhenEmpty": true,
|
|
@@ -86279,7 +86226,7 @@ const SCREENS = runtimeSetting({
|
|
|
86279
86226
|
"package": "himalaya",
|
|
86280
86227
|
"type": "Button",
|
|
86281
86228
|
"props": {
|
|
86282
|
-
"title": "
|
|
86229
|
+
"title": "$t:account.signInCta",
|
|
86283
86230
|
"leadingIcon": "person",
|
|
86284
86231
|
"style": "primary",
|
|
86285
86232
|
"size": "md",
|
|
@@ -86306,7 +86253,7 @@ const SCREENS = runtimeSetting({
|
|
|
86306
86253
|
"package": "himalaya",
|
|
86307
86254
|
"type": "Button",
|
|
86308
86255
|
"props": {
|
|
86309
|
-
"title": "
|
|
86256
|
+
"title": "$t:common.retryCta",
|
|
86310
86257
|
"action": {
|
|
86311
86258
|
"actionId": "tier5.businessChat.init"
|
|
86312
86259
|
},
|
|
@@ -86341,8 +86288,8 @@ const SCREENS = runtimeSetting({
|
|
|
86341
86288
|
"package": "himalaya",
|
|
86342
86289
|
"type": "EmptyState",
|
|
86343
86290
|
"props": {
|
|
86344
|
-
"title": "
|
|
86345
|
-
"subtitle": "
|
|
86291
|
+
"title": "$t:businessChat.emptyTitle",
|
|
86292
|
+
"subtitle": "$t:chatThread.emptySubtitle",
|
|
86346
86293
|
"icon": "chat"
|
|
86347
86294
|
}
|
|
86348
86295
|
},
|
|
@@ -86967,7 +86914,7 @@ const SCREENS = runtimeSetting({
|
|
|
86967
86914
|
"package": "himalaya",
|
|
86968
86915
|
"type": "Text",
|
|
86969
86916
|
"props": {
|
|
86970
|
-
"text": "
|
|
86917
|
+
"text": "$t:chatThread.couponLabel",
|
|
86971
86918
|
"style": "caption",
|
|
86972
86919
|
"color": "textSecondary",
|
|
86973
86920
|
"collapseWhenEmpty": true,
|
|
@@ -87452,6 +87399,37 @@ const SCREENS = runtimeSetting({
|
|
|
87452
87399
|
"onAppear": {
|
|
87453
87400
|
"actionId": "tier5.businessChat.init",
|
|
87454
87401
|
"params": {
|
|
87402
|
+
"businessChat.emptyTitle": "$t:businessChat.emptyTitle",
|
|
87403
|
+
"businessChat.sending": "$t:businessChat.sending",
|
|
87404
|
+
"businessChat.unconfirmed": "$t:businessChat.unconfirmed",
|
|
87405
|
+
"businessChat.sessionChanged": "$t:businessChat.sessionChanged",
|
|
87406
|
+
"businessChat.hostUnavailable": "$t:businessChat.hostUnavailable",
|
|
87407
|
+
"businessChat.sendFailed": "$t:businessChat.sendFailed",
|
|
87408
|
+
"businessChat.openFailed": "$t:businessChat.openFailed",
|
|
87409
|
+
"businessChat.loadFailed": "$t:businessChat.loadFailed",
|
|
87410
|
+
"businessChat.signInPrompt": "$t:businessChat.signInPrompt",
|
|
87411
|
+
"businessChat.rejected": "$t:businessChat.rejected",
|
|
87412
|
+
"businessChat.checkDelivery": "$t:businessChat.checkDelivery",
|
|
87413
|
+
"businessChat.suggestionSent": "$t:businessChat.suggestionSent",
|
|
87414
|
+
"businessChat.suggestionRejected": "$t:businessChat.suggestionRejected",
|
|
87415
|
+
"businessChat.suggestionUnconfirmed": "$t:businessChat.suggestionUnconfirmed",
|
|
87416
|
+
"businessChat.productImage": "$t:businessChat.productImage",
|
|
87417
|
+
"businessChat.connecting": "$t:businessChat.connecting",
|
|
87418
|
+
"businessChat.reconnecting": "$t:businessChat.reconnecting",
|
|
87419
|
+
"businessChat.liveSessionUnavailable": "$t:businessChat.liveSessionUnavailable",
|
|
87420
|
+
"businessChat.liveHostUnavailable": "$t:businessChat.liveHostUnavailable",
|
|
87421
|
+
"businessChat.liveSetupFailed": "$t:businessChat.liveSetupFailed",
|
|
87422
|
+
"businessChat.liveAuthFailed": "$t:businessChat.liveAuthFailed",
|
|
87423
|
+
"businessChat.liveInterrupted": "$t:businessChat.liveInterrupted",
|
|
87424
|
+
"businessChat.liveUnreadable": "$t:businessChat.liveUnreadable",
|
|
87425
|
+
"businessChat.livePaused": "$t:businessChat.livePaused",
|
|
87426
|
+
"businessChat.liveUnavailable": "$t:businessChat.liveUnavailable",
|
|
87427
|
+
"businessChat.openLink": "$t:businessChat.openLink",
|
|
87428
|
+
"businessChat.today": "$t:businessChat.today",
|
|
87429
|
+
"businessChat.yesterday": "$t:businessChat.yesterday",
|
|
87430
|
+
"businessChat.aiAssistant": "$t:businessChat.aiAssistant",
|
|
87431
|
+
"businessChat.staffResponse": "$t:businessChat.staffResponse",
|
|
87432
|
+
"businessChat.imageAttachment": "$t:businessChat.imageAttachment",
|
|
87455
87433
|
"displayName": "__HIMI_APP_NAME__",
|
|
87456
87434
|
"siteUrl": "__HIMI_MEMBER_SITE_URL__",
|
|
87457
87435
|
"productScreen": "himi_product",
|
|
@@ -87709,7 +87687,7 @@ const SCREENS = runtimeSetting({
|
|
|
87709
87687
|
"onChange": {
|
|
87710
87688
|
"actionId": "tier5.businessChat.setDraft"
|
|
87711
87689
|
},
|
|
87712
|
-
"placeholder": "
|
|
87690
|
+
"placeholder": "$t:chatThread.composerPlaceholder",
|
|
87713
87691
|
"maxLength": 4000,
|
|
87714
87692
|
"multilineMaxLines": 5,
|
|
87715
87693
|
"borderless": true
|
|
@@ -87718,7 +87696,7 @@ const SCREENS = runtimeSetting({
|
|
|
87718
87696
|
"modifiers": {
|
|
87719
87697
|
"weight": 1,
|
|
87720
87698
|
"fillMaxWidth": true,
|
|
87721
|
-
"accessibilityLabel": "
|
|
87699
|
+
"accessibilityLabel": "$t:chatThread.composerLabel",
|
|
87722
87700
|
"padding": {
|
|
87723
87701
|
"leading": 12,
|
|
87724
87702
|
"trailing": 10,
|
|
@@ -87785,7 +87763,7 @@ const SCREENS = runtimeSetting({
|
|
|
87785
87763
|
"background": {
|
|
87786
87764
|
"token": "accentPrimary"
|
|
87787
87765
|
},
|
|
87788
|
-
"accessibilityLabel": "
|
|
87766
|
+
"accessibilityLabel": "$t:chatThread.sendCta",
|
|
87789
87767
|
"onTap": {
|
|
87790
87768
|
"actionId": "tier5.businessChat.send"
|
|
87791
87769
|
},
|