@wix/himalaya-cli 0.1536.0 → 0.1538.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/stdlib/wix-sdk/bookings-v2/src/extensions.d.ts +16 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/data-collections-v1/src/extensions.d.ts +4 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/wix-data/src/index.d.ts +497 -4
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-bookings.mjs +5 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-data-collections.mjs +1 -5
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-data.mjs +315 -7
- package/dist/cli.mjs +852 -538
- package/dist/preview-assets.generated.bin +0 -0
- package/fixtures/wix-canned.json +1 -0
- package/guides/cms-collections.md +31 -0
- package/guides/himi-json-output.md +13 -2
- package/guides/iap-products.md +13 -5
- package/guides/release-notes.md +12 -0
- package/guides/wix-api-usage.md +53 -6
- package/package.json +2 -2
- package/templates/beauty-salon/dev/index.ts +1109 -2310
- package/templates/beauty-salon/tier5-src/_shared/himi-bookings.ts +121 -1
- package/templates/beauty-salon/tier5-src/himi-booking-service/index.ts +9 -55
- package/templates/beauty-salon/tier5-src/himi-booking-services/index.ts +264 -18
- package/templates/branded-lite/dev/index.ts +1075 -2276
- package/templates/branded-lite/tier5-src/_shared/himi-bookings.ts +121 -1
- package/templates/branded-lite/tier5-src/himi-booking-service/index.ts +9 -55
- package/templates/branded-lite/tier5-src/himi-booking-services/index.ts +264 -18
- package/templates/gym-fitness/dev/index.ts +1075 -2276
- package/templates/gym-fitness/tier5-src/_shared/himi-bookings.ts +121 -1
- package/templates/gym-fitness/tier5-src/himi-booking-service/index.ts +9 -55
- package/templates/gym-fitness/tier5-src/himi-booking-services/index.ts +264 -18
- package/templates/yoga-studio/dev/index.ts +1137 -2338
- package/templates/yoga-studio/tier5-src/_shared/himi-bookings.ts +121 -1
- package/templates/yoga-studio/tier5-src/himi-booking-service/index.ts +9 -55
- package/templates/yoga-studio/tier5-src/himi-booking-services/index.ts +264 -18
package/dist/cli.mjs
CHANGED
|
@@ -4762,8 +4762,8 @@ var init_catalog_v2 = __esm({
|
|
|
4762
4762
|
"../html-to-t5/catalog.v2.json"() {
|
|
4763
4763
|
catalog_v2_default = {
|
|
4764
4764
|
encoding: "gzip-base64",
|
|
4765
|
-
sha256: "
|
|
4766
|
-
data: "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"
|
|
4765
|
+
sha256: "cfb86c40dd3bb1c140104f0700e182ec0572b55d78ea4916dac2d751a520f85d",
|
|
4766
|
+
data: "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"
|
|
4767
4767
|
};
|
|
4768
4768
|
}
|
|
4769
4769
|
});
|
|
@@ -12668,7 +12668,6 @@ function webViewOriginAllowed(url, origins) {
|
|
|
12668
12668
|
}
|
|
12669
12669
|
var init_webview_origin = __esm({
|
|
12670
12670
|
"../../core/ts/src/webview-origin.ts"() {
|
|
12671
|
-
"use strict";
|
|
12672
12671
|
}
|
|
12673
12672
|
});
|
|
12674
12673
|
|
|
@@ -21710,6 +21709,7 @@ var init_wix_cache_defaults_generated = __esm({
|
|
|
21710
21709
|
{ method: "GET", pathPrefix: "/blog/v3/posts/", cacheable: true, ttl: 60, swr: 86400, tag: "blog" },
|
|
21711
21710
|
{ method: "POST", pathPrefix: "/blog/v3/posts/query", cacheable: true, ttl: 60, swr: 86400, tag: "blog" },
|
|
21712
21711
|
{ method: "GET", pathPrefix: "/bookings/v2/services/", cacheable: true, ttl: 60, swr: 86400, tag: "bookings/services" },
|
|
21712
|
+
{ method: "POST", pathPrefix: "/bookings/v2/services/categories/query", cacheable: true, ttl: 60, swr: 86400, tag: "bookings/services" },
|
|
21713
21713
|
{ method: "POST", pathPrefix: "/bookings/v2/services/query", cacheable: true, ttl: 60, swr: 86400, tag: "bookings/services" },
|
|
21714
21714
|
{ method: "GET", pathPrefix: "/donation-campaigns/v2/donation-campaigns/", cacheable: true, ttl: 60, swr: 86400, tag: "donations" },
|
|
21715
21715
|
{ method: "POST", pathPrefix: "/donation-campaigns/v2/donation-campaigns/query", cacheable: true, ttl: 60, swr: 86400, tag: "donations" },
|
|
@@ -31838,8 +31838,77 @@ var init_helpers = __esm({
|
|
|
31838
31838
|
}
|
|
31839
31839
|
});
|
|
31840
31840
|
|
|
31841
|
+
// ../../core/web-renderer/src/liveWindow.ts
|
|
31842
|
+
import React2 from "react";
|
|
31843
|
+
function liveWindowCurrent(current, count2) {
|
|
31844
|
+
if (count2 <= 0 || !Number.isFinite(current)) return 0;
|
|
31845
|
+
return Math.min(Math.max(Math.trunc(current), 0), count2 - 1);
|
|
31846
|
+
}
|
|
31847
|
+
function liveWindowRange(current, count2, n2) {
|
|
31848
|
+
if (typeof n2 !== "number" || !Number.isFinite(n2) && n2 !== Infinity) return null;
|
|
31849
|
+
const w2 = Math.floor(n2);
|
|
31850
|
+
if (!(w2 > 0) || count2 <= 0) return null;
|
|
31851
|
+
const c2 = liveWindowCurrent(current, count2);
|
|
31852
|
+
return { lo: Math.max(0, c2 - w2), hi: Math.min(count2 - 1, c2 + w2) };
|
|
31853
|
+
}
|
|
31854
|
+
function liveWindowMounted(i2, current, count2, n2) {
|
|
31855
|
+
const r3 = liveWindowRange(current, count2, n2);
|
|
31856
|
+
return r3 == null || i2 >= r3.lo && i2 <= r3.hi;
|
|
31857
|
+
}
|
|
31858
|
+
function liveWindowActive(i2, current, count2, n2) {
|
|
31859
|
+
return liveWindowRange(current, count2, n2) == null || i2 === liveWindowCurrent(current, count2);
|
|
31860
|
+
}
|
|
31861
|
+
function liveWindowFirstImage(page) {
|
|
31862
|
+
const stack = page && typeof page === "object" ? [page] : [];
|
|
31863
|
+
while (stack.length) {
|
|
31864
|
+
const node = stack.pop();
|
|
31865
|
+
const { type, props } = normalize(node);
|
|
31866
|
+
if (type === "Image") return node;
|
|
31867
|
+
if (!CONTAINERS.has(type) || !Array.isArray(props.children)) continue;
|
|
31868
|
+
for (let i2 = props.children.length - 1; i2 >= 0; i2--) {
|
|
31869
|
+
const child = props.children[i2];
|
|
31870
|
+
if (child && typeof child === "object") stack.push(child);
|
|
31871
|
+
}
|
|
31872
|
+
}
|
|
31873
|
+
return null;
|
|
31874
|
+
}
|
|
31875
|
+
function useSettledPage(index, settleMs = LIVE_WINDOW_SETTLE_MS) {
|
|
31876
|
+
const [settled, setSettled] = React2.useState(index);
|
|
31877
|
+
const latest = React2.useRef(index);
|
|
31878
|
+
latest.current = index;
|
|
31879
|
+
const pending = React2.useRef(false);
|
|
31880
|
+
const timer = React2.useRef(null);
|
|
31881
|
+
React2.useEffect(() => {
|
|
31882
|
+
if (!pending.current) setSettled(index);
|
|
31883
|
+
}, [index]);
|
|
31884
|
+
React2.useEffect(() => () => {
|
|
31885
|
+
if (timer.current) clearTimeout(timer.current);
|
|
31886
|
+
}, []);
|
|
31887
|
+
const scrolling = React2.useCallback((page) => {
|
|
31888
|
+
if (page === latest.current && !pending.current) return;
|
|
31889
|
+
pending.current = true;
|
|
31890
|
+
if (timer.current) clearTimeout(timer.current);
|
|
31891
|
+
timer.current = setTimeout(() => {
|
|
31892
|
+
pending.current = false;
|
|
31893
|
+
timer.current = null;
|
|
31894
|
+
setSettled(latest.current);
|
|
31895
|
+
}, settleMs);
|
|
31896
|
+
}, [settleMs]);
|
|
31897
|
+
return { settled, scrolling };
|
|
31898
|
+
}
|
|
31899
|
+
var liveWindowPlaceholderId, CONTAINERS, PageActiveContext, LIVE_WINDOW_SETTLE_MS;
|
|
31900
|
+
var init_liveWindow = __esm({
|
|
31901
|
+
"../../core/web-renderer/src/liveWindow.ts"() {
|
|
31902
|
+
init_helpers();
|
|
31903
|
+
liveWindowPlaceholderId = (owner, index) => `${owner}.page.${index}.placeholder`;
|
|
31904
|
+
CONTAINERS = /* @__PURE__ */ new Set(["VStack", "HStack", "ZStack", "Card"]);
|
|
31905
|
+
PageActiveContext = React2.createContext(true);
|
|
31906
|
+
LIVE_WINDOW_SETTLE_MS = 150;
|
|
31907
|
+
}
|
|
31908
|
+
});
|
|
31909
|
+
|
|
31841
31910
|
// ../../core/web-renderer/src/bindings.tsx
|
|
31842
|
-
import
|
|
31911
|
+
import React3, { useEffect, useState } from "react";
|
|
31843
31912
|
import { Fragment, jsx as jsx3 } from "react/jsx-runtime";
|
|
31844
31913
|
function servicePath(binding2) {
|
|
31845
31914
|
return binding2.startsWith("$service:") ? binding2.slice("$service:".length) : binding2;
|
|
@@ -31874,7 +31943,7 @@ function useBoundValue(ctx, binding2) {
|
|
|
31874
31943
|
}
|
|
31875
31944
|
function useBoundValues(ctx, bindings) {
|
|
31876
31945
|
const key3 = bindings.join("\0");
|
|
31877
|
-
const paths2 =
|
|
31946
|
+
const paths2 = React3.useMemo(
|
|
31878
31947
|
() => bindings.map((b2) => b2 && isBinding(b2) && b2.startsWith("$service:") ? servicePath(b2) : ""),
|
|
31879
31948
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
31880
31949
|
[key3]
|
|
@@ -31957,7 +32026,7 @@ var init_bindings2 = __esm({
|
|
|
31957
32026
|
}) });
|
|
31958
32027
|
};
|
|
31959
32028
|
readsService = /* @__PURE__ */ new WeakMap();
|
|
31960
|
-
BoundRow =
|
|
32029
|
+
BoundRow = React3.memo(
|
|
31961
32030
|
({ ctx, template, item, index, renderRow }) => {
|
|
31962
32031
|
const scope2 = item && typeof item === "object" ? { ...item, __index: index } : { value: item, __index: index };
|
|
31963
32032
|
return /* @__PURE__ */ jsx3(Fragment, { children: renderRow(template, { ...ctx, itemScope: scope2 }) });
|
|
@@ -31987,7 +32056,7 @@ var init_snackbarTiming = __esm({
|
|
|
31987
32056
|
});
|
|
31988
32057
|
|
|
31989
32058
|
// ../../core/web-renderer/src/formBag.ts
|
|
31990
|
-
import
|
|
32059
|
+
import React4 from "react";
|
|
31991
32060
|
function hasContributed(bag, fieldId) {
|
|
31992
32061
|
return Object.prototype.hasOwnProperty.call(bag.values, fieldId);
|
|
31993
32062
|
}
|
|
@@ -32072,7 +32141,7 @@ var FormValuesContext;
|
|
|
32072
32141
|
var init_formBag = __esm({
|
|
32073
32142
|
"../../core/web-renderer/src/formBag.ts"() {
|
|
32074
32143
|
init_validation();
|
|
32075
|
-
FormValuesContext =
|
|
32144
|
+
FormValuesContext = React4.createContext(null);
|
|
32076
32145
|
}
|
|
32077
32146
|
});
|
|
32078
32147
|
|
|
@@ -32477,10 +32546,10 @@ var init_pickerField = __esm({
|
|
|
32477
32546
|
});
|
|
32478
32547
|
|
|
32479
32548
|
// ../../core/web-renderer/src/symbolEffects.ts
|
|
32480
|
-
import
|
|
32549
|
+
import React5 from "react";
|
|
32481
32550
|
function useSymbolEffect(effect, reduceMotion) {
|
|
32482
|
-
const [, changed] =
|
|
32483
|
-
|
|
32551
|
+
const [, changed] = React5.useReducer((value2) => value2 + 1, 0);
|
|
32552
|
+
React5.useEffect(() => {
|
|
32484
32553
|
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
|
|
32485
32554
|
const query = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
32486
32555
|
const listener = () => changed();
|
|
@@ -32488,7 +32557,7 @@ function useSymbolEffect(effect, reduceMotion) {
|
|
|
32488
32557
|
return () => query.removeEventListener("change", listener);
|
|
32489
32558
|
}, []);
|
|
32490
32559
|
const supported = !reduceMotion() && (effect === "bounce" || effect === "pulse") ? effect : void 0;
|
|
32491
|
-
|
|
32560
|
+
React5.useEffect(() => {
|
|
32492
32561
|
if (!supported || typeof document === "undefined" || document.getElementById("himalaya-symbol-effects")) return;
|
|
32493
32562
|
const style = document.createElement("style");
|
|
32494
32563
|
style.id = "himalaya-symbol-effects";
|
|
@@ -33165,7 +33234,7 @@ var init_host_toolbar = __esm({
|
|
|
33165
33234
|
});
|
|
33166
33235
|
|
|
33167
33236
|
// ../../core/web-renderer/src/richContentEditor.tsx
|
|
33168
|
-
import
|
|
33237
|
+
import React6 from "react";
|
|
33169
33238
|
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
33170
33239
|
function effectiveTools(tools, uploadService) {
|
|
33171
33240
|
return ricosEffectiveTools(tools, typeof uploadService === "string" && uploadService !== "");
|
|
@@ -33180,32 +33249,32 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
|
|
|
33180
33249
|
const id = String(nodeId ?? dom["data-component-id"] ?? "rich_content_editor");
|
|
33181
33250
|
const C2 = ctx.color;
|
|
33182
33251
|
const name = typeof props.name === "string" && props.name ? props.name : void 0;
|
|
33183
|
-
const bag =
|
|
33252
|
+
const bag = React6.useContext(FormValuesContext);
|
|
33184
33253
|
const live3 = !!ctx.onAction;
|
|
33185
33254
|
const toolsKey = JSON.stringify(props.tools ?? null);
|
|
33186
|
-
const tools =
|
|
33255
|
+
const tools = React6.useMemo(() => effectiveTools(props.tools, props.uploadService), [toolsKey, props.uploadService]);
|
|
33187
33256
|
const seedMode = typeof props.documentJson === "string" ? "literal" : typeof props.documentPath === "string" && props.documentPath ? "binding" : "none";
|
|
33188
33257
|
const boundSeed = useBoundValue(ctx, seedMode === "binding" ? props.documentPath : "");
|
|
33189
33258
|
const fill = props.fillAvailable === true;
|
|
33190
33259
|
const minHeight = typeof props.minHeight === "number" && props.minHeight >= 0 ? props.minHeight : 240;
|
|
33191
33260
|
const placeholder3 = typeof props.placeholder === "string" ? props.placeholder : "";
|
|
33192
|
-
const onChangeRef =
|
|
33261
|
+
const onChangeRef = React6.useRef(props.onChange);
|
|
33193
33262
|
onChangeRef.current = props.onChange;
|
|
33194
|
-
const bagRef =
|
|
33263
|
+
const bagRef = React6.useRef(bag);
|
|
33195
33264
|
bagRef.current = bag;
|
|
33196
|
-
const nameRef =
|
|
33265
|
+
const nameRef = React6.useRef(name);
|
|
33197
33266
|
nameRef.current = name;
|
|
33198
|
-
const [status, setStatus] =
|
|
33199
|
-
const [toolbar, setToolbar] =
|
|
33200
|
-
const [focused, setFocused] =
|
|
33201
|
-
const [src, setSrc] =
|
|
33202
|
-
const [link, setLink] =
|
|
33203
|
-
const [uploadError, setUploadError] =
|
|
33204
|
-
const [, repaint] =
|
|
33205
|
-
const iframeRef =
|
|
33206
|
-
const fileRef =
|
|
33207
|
-
const sessionRef =
|
|
33208
|
-
|
|
33267
|
+
const [status, setStatus] = React6.useState("loading");
|
|
33268
|
+
const [toolbar, setToolbar] = React6.useState(EMPTY_TOOLBAR);
|
|
33269
|
+
const [focused, setFocused] = React6.useState(false);
|
|
33270
|
+
const [src, setSrc] = React6.useState(null);
|
|
33271
|
+
const [link, setLink] = React6.useState(null);
|
|
33272
|
+
const [uploadError, setUploadError] = React6.useState(false);
|
|
33273
|
+
const [, repaint] = React6.useReducer((n2) => n2 + 1, 0);
|
|
33274
|
+
const iframeRef = React6.useRef(null);
|
|
33275
|
+
const fileRef = React6.useRef(null);
|
|
33276
|
+
const sessionRef = React6.useRef(null);
|
|
33277
|
+
React6.useEffect(() => {
|
|
33209
33278
|
if (!bag || !name) return;
|
|
33210
33279
|
bag.register(name, void 0);
|
|
33211
33280
|
const current = sessionRef.current?.currentContent();
|
|
@@ -33221,12 +33290,12 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
|
|
|
33221
33290
|
if (!act || !ctx.onAction) return;
|
|
33222
33291
|
ctx.onAction({ ...act, args: { ...act.args ?? {}, dirty: "true" } });
|
|
33223
33292
|
};
|
|
33224
|
-
const fireOnChangeRef =
|
|
33293
|
+
const fireOnChangeRef = React6.useRef(fireOnChange);
|
|
33225
33294
|
fireOnChangeRef.current = fireOnChange;
|
|
33226
|
-
|
|
33295
|
+
React6.useEffect(() => {
|
|
33227
33296
|
if (live3) setSrc(new URL(ENGINE_PAGE_PATH, document.baseURI).toString());
|
|
33228
33297
|
}, [live3]);
|
|
33229
|
-
|
|
33298
|
+
React6.useEffect(() => {
|
|
33230
33299
|
const frame = iframeRef.current;
|
|
33231
33300
|
if (!live3 || !src || !frame) return;
|
|
33232
33301
|
const t2 = ricosEditorWebTimings;
|
|
@@ -33274,13 +33343,13 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
|
|
|
33274
33343
|
sessionRef.current = null;
|
|
33275
33344
|
};
|
|
33276
33345
|
}, [live3, src]);
|
|
33277
|
-
|
|
33346
|
+
React6.useEffect(() => {
|
|
33278
33347
|
sessionRef.current?.updateLocale(ctx.localeTag ?? "en", ctx.isRTL ?? document.documentElement.dir === "rtl");
|
|
33279
33348
|
}, [ctx.localeTag, ctx.isRTL]);
|
|
33280
|
-
|
|
33349
|
+
React6.useEffect(() => {
|
|
33281
33350
|
sessionRef.current?.setSeed(seedMode === "literal" ? props.documentJson : seedMode === "binding" ? boundSeed : "");
|
|
33282
33351
|
}, [seedMode, props.documentJson, boundSeed, src]);
|
|
33283
|
-
|
|
33352
|
+
React6.useEffect(() => {
|
|
33284
33353
|
const vv = typeof window !== "undefined" ? window.visualViewport : null;
|
|
33285
33354
|
if (!vv || !focused) return;
|
|
33286
33355
|
vv.addEventListener("resize", repaint);
|
|
@@ -33785,20 +33854,20 @@ var init_radioGroups = __esm({
|
|
|
33785
33854
|
});
|
|
33786
33855
|
|
|
33787
33856
|
// ../../core/web-renderer/src/a11y/radioGroupScope.tsx
|
|
33788
|
-
import
|
|
33857
|
+
import React7 from "react";
|
|
33789
33858
|
var scope, RadioGroupScope, useRadioGroups;
|
|
33790
33859
|
var init_radioGroupScope = __esm({
|
|
33791
33860
|
"../../core/web-renderer/src/a11y/radioGroupScope.tsx"() {
|
|
33792
33861
|
"use strict";
|
|
33793
33862
|
init_radioGroups();
|
|
33794
|
-
scope =
|
|
33863
|
+
scope = React7.createContext(radioGroups);
|
|
33795
33864
|
RadioGroupScope = scope.Provider;
|
|
33796
|
-
useRadioGroups = () =>
|
|
33865
|
+
useRadioGroups = () => React7.useContext(scope);
|
|
33797
33866
|
}
|
|
33798
33867
|
});
|
|
33799
33868
|
|
|
33800
33869
|
// ../../core/web-renderer/src/a11y/controls.tsx
|
|
33801
|
-
import
|
|
33870
|
+
import React8 from "react";
|
|
33802
33871
|
import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
33803
33872
|
function labelText(label3, ctx) {
|
|
33804
33873
|
if (typeof label3 === "string" && isBinding(label3)) {
|
|
@@ -33843,25 +33912,25 @@ var init_controls = __esm({
|
|
|
33843
33912
|
const C2 = ctx.color;
|
|
33844
33913
|
const bound2 = useResolvedScalar(props.valuePath, ctx);
|
|
33845
33914
|
const resolved2 = ctx.empty ? false : props.valuePath != null ? encodeToggleFieldValue(bound2) === "true" : encodeToggleFieldValue(props.value, props.on === true) === "true";
|
|
33846
|
-
const bag =
|
|
33915
|
+
const bag = React8.useContext(FormValuesContext);
|
|
33847
33916
|
const fieldId = props.__formFieldId;
|
|
33848
33917
|
const inForm = Boolean(bag && fieldId);
|
|
33849
|
-
const [formOn, setFormOn] =
|
|
33850
|
-
const touchedField =
|
|
33851
|
-
|
|
33918
|
+
const [formOn, setFormOn] = React8.useState(null);
|
|
33919
|
+
const touchedField = React8.useRef(void 0);
|
|
33920
|
+
React8.useEffect(() => {
|
|
33852
33921
|
if (bag && fieldId && touchedField.current === fieldId) bag.set(fieldId, encodeToggleFieldValue(resolved2));
|
|
33853
33922
|
setFormOn(null);
|
|
33854
33923
|
}, [resolved2]);
|
|
33855
33924
|
const toggleServiceBound = typeof props.valuePath === "string" && props.valuePath.startsWith("$service:");
|
|
33856
33925
|
const toggleReady = !toggleServiceBound || bound2 !== void 0;
|
|
33857
|
-
|
|
33926
|
+
React8.useEffect(() => {
|
|
33858
33927
|
if (!bag || !fieldId) return;
|
|
33859
33928
|
if (!toggleReady && !hasContributed(bag, fieldId)) return;
|
|
33860
33929
|
bag.set(fieldId, encodeToggleFieldValue(resolved2));
|
|
33861
33930
|
}, [toggleReady, resolved2, fieldId, bag]);
|
|
33862
33931
|
const on4 = inForm && touchedField.current === fieldId && formOn !== null ? formOn : resolved2;
|
|
33863
33932
|
const ruleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
33864
|
-
|
|
33933
|
+
React8.useEffect(() => {
|
|
33865
33934
|
if (!bag || !fieldId) return;
|
|
33866
33935
|
bag.register(fieldId, props.validation);
|
|
33867
33936
|
return () => bag.unregister(fieldId);
|
|
@@ -33921,15 +33990,15 @@ var init_controls = __esm({
|
|
|
33921
33990
|
const tint = C2(props.tint ?? "accentPrimary", "#116DFF");
|
|
33922
33991
|
const step = typeof props.step === "number" && props.step > 0 ? props.step : (max - min) / 100 || 0.01;
|
|
33923
33992
|
const range = props.range === true && typeof props.upperValue === "number";
|
|
33924
|
-
const [val, setVal] =
|
|
33925
|
-
const latestValue =
|
|
33926
|
-
const dragging =
|
|
33927
|
-
|
|
33993
|
+
const [val, setVal] = React8.useState(bound2);
|
|
33994
|
+
const latestValue = React8.useRef(bound2);
|
|
33995
|
+
const dragging = React8.useRef(false);
|
|
33996
|
+
React8.useEffect(() => {
|
|
33928
33997
|
if (dragging.current) return;
|
|
33929
33998
|
latestValue.current = bound2;
|
|
33930
33999
|
setVal(bound2);
|
|
33931
34000
|
}, [bound2]);
|
|
33932
|
-
const lastEmit =
|
|
34001
|
+
const lastEmit = React8.useRef(void 0);
|
|
33933
34002
|
const canFire = !!(ctx.onAction && props.onChange && !props.disabled);
|
|
33934
34003
|
const commit = (nv) => {
|
|
33935
34004
|
latestValue.current = nv;
|
|
@@ -33939,8 +34008,8 @@ var init_controls = __esm({
|
|
|
33939
34008
|
ctx.onAction({ ...act, args: { ...act.args ?? {}, value: nv } });
|
|
33940
34009
|
};
|
|
33941
34010
|
const clampPct = (n2) => max > min ? Math.max(0, Math.min(1, (n2 - min) / (max - min))) : 0;
|
|
33942
|
-
const [pair, setPair] =
|
|
33943
|
-
|
|
34011
|
+
const [pair, setPair] = React8.useState(() => [Math.min(bound2, props.upperValue ?? bound2), Math.max(bound2, props.upperValue ?? bound2)]);
|
|
34012
|
+
React8.useEffect(() => {
|
|
33944
34013
|
if (range) setPair([Math.min(bound2, props.upperValue), Math.max(bound2, props.upperValue)]);
|
|
33945
34014
|
}, [range, bound2, props.upperValue]);
|
|
33946
34015
|
if (range) {
|
|
@@ -34098,25 +34167,25 @@ var init_controls = __esm({
|
|
|
34098
34167
|
const boundValue = useResolvedScalar(props.valuePath, ctx);
|
|
34099
34168
|
const raw = props.valuePath != null ? boundValue : props.value;
|
|
34100
34169
|
const groupId = isRadio && typeof props.groupId === "string" && props.groupId !== "" ? props.groupId : void 0;
|
|
34101
|
-
const [local, setLocal] =
|
|
34102
|
-
|
|
34170
|
+
const [local, setLocal] = React8.useState(void 0);
|
|
34171
|
+
React8.useEffect(() => {
|
|
34103
34172
|
setLocal(void 0);
|
|
34104
34173
|
}, [raw, radioGroups2, groupId]);
|
|
34105
34174
|
const localValue2 = local?.registry === radioGroups2 && local.groupId === groupId ? local.value : void 0;
|
|
34106
34175
|
const on4 = ctx.empty ? false : localValue2 ?? raw === true;
|
|
34107
|
-
const member =
|
|
34108
|
-
const owner =
|
|
34176
|
+
const member = React8.useMemo(() => radioGroups2.newMember(), [radioGroups2]);
|
|
34177
|
+
const owner = React8.useSyncExternalStore(
|
|
34109
34178
|
radioGroups2.subscribe,
|
|
34110
34179
|
() => groupId ? radioGroups2.owner(groupId) : void 0,
|
|
34111
34180
|
() => void 0
|
|
34112
34181
|
);
|
|
34113
|
-
|
|
34182
|
+
React8.useEffect(() => {
|
|
34114
34183
|
if (!groupId) return;
|
|
34115
34184
|
radioGroups2.join(groupId);
|
|
34116
34185
|
return () => radioGroups2.leave(groupId, member);
|
|
34117
34186
|
}, [radioGroups2, groupId, member]);
|
|
34118
|
-
const seenRaw =
|
|
34119
|
-
|
|
34187
|
+
const seenRaw = React8.useRef(null);
|
|
34188
|
+
React8.useEffect(() => {
|
|
34120
34189
|
const prev = seenRaw.current;
|
|
34121
34190
|
seenRaw.current = { raw, groupId, registry: radioGroups2 };
|
|
34122
34191
|
if (!groupId) return;
|
|
@@ -34126,7 +34195,7 @@ var init_controls = __esm({
|
|
|
34126
34195
|
radioGroups2.adopt(groupId, member, raw === true);
|
|
34127
34196
|
}
|
|
34128
34197
|
}, [radioGroups2, raw, groupId, member]);
|
|
34129
|
-
|
|
34198
|
+
React8.useEffect(() => {
|
|
34130
34199
|
if (groupId && radioGroups2.deselects(radioGroups2.owner(groupId), member)) setLocal({ value: false, registry: radioGroups2, groupId });
|
|
34131
34200
|
}, [radioGroups2, owner, member, groupId]);
|
|
34132
34201
|
const accent = C2("accentPrimary", "#116DFF");
|
|
@@ -34198,8 +34267,8 @@ var init_controls = __esm({
|
|
|
34198
34267
|
const selectedId = useResolvedId(props.selectedId, ctx);
|
|
34199
34268
|
const tabs = Array.isArray(boundTabs) && boundTabs.length ? boundTabs : Array.isArray(props.tabs) ? props.tabs : [];
|
|
34200
34269
|
const pages2 = props.style === "swipe" ? props.swipePages : void 0;
|
|
34201
|
-
const [local, setLocal] =
|
|
34202
|
-
|
|
34270
|
+
const [local, setLocal] = React8.useState(void 0);
|
|
34271
|
+
React8.useEffect(() => {
|
|
34203
34272
|
setLocal(void 0);
|
|
34204
34273
|
}, [selectedId]);
|
|
34205
34274
|
const current = local != null && tabs.some((t2) => t2.id === local) ? local : selectedId;
|
|
@@ -34219,15 +34288,15 @@ var init_controls = __esm({
|
|
|
34219
34288
|
e2.preventDefault();
|
|
34220
34289
|
if (ni2 !== selIdx) select2(ni2);
|
|
34221
34290
|
};
|
|
34222
|
-
const pagerRef =
|
|
34223
|
-
const settle2 =
|
|
34224
|
-
|
|
34291
|
+
const pagerRef = React8.useRef(null);
|
|
34292
|
+
const settle2 = React8.useRef(void 0);
|
|
34293
|
+
React8.useEffect(() => {
|
|
34225
34294
|
const el2 = pagerRef.current;
|
|
34226
34295
|
if (!el2 || !el2.clientWidth) return;
|
|
34227
34296
|
const x2 = selIdx * el2.clientWidth;
|
|
34228
34297
|
if (Math.abs(el2.scrollLeft - x2) > 1) el2.scrollTo?.({ left: x2, behavior: "smooth" });
|
|
34229
34298
|
}, [selIdx, pages2]);
|
|
34230
|
-
|
|
34299
|
+
React8.useEffect(() => () => clearTimeout(settle2.current), []);
|
|
34231
34300
|
const onPagerScroll = () => {
|
|
34232
34301
|
clearTimeout(settle2.current);
|
|
34233
34302
|
settle2.current = setTimeout(() => {
|
|
@@ -34338,7 +34407,7 @@ var init_controls = __esm({
|
|
|
34338
34407
|
const expanded = useResolvedScalar(props.expandedPath ?? props.expanded, ctx);
|
|
34339
34408
|
const open = expanded === true;
|
|
34340
34409
|
const fire = ctx.onAction && props.onToggle ? () => ctx.onAction(resolveRowAction(props.onToggle, ctx)) : void 0;
|
|
34341
|
-
const regionId =
|
|
34410
|
+
const regionId = React8.useMemo(() => `himi-disclosure-${++disclosureSeq}`, []);
|
|
34342
34411
|
return /* @__PURE__ */ jsxs4("div", { style: { width: "100%", ...wrap }, children: [
|
|
34343
34412
|
/* @__PURE__ */ jsxs4(
|
|
34344
34413
|
"button",
|
|
@@ -34357,7 +34426,7 @@ var init_controls = __esm({
|
|
|
34357
34426
|
]
|
|
34358
34427
|
}
|
|
34359
34428
|
),
|
|
34360
|
-
/* @__PURE__ */ jsx7("div", { id: regionId, role: "region", hidden: !open, style: open ? { padding: "2px 2px 8px 24px" } : void 0, children: open && (Array.isArray(props.content) ? props.content.map((c2, i2) => /* @__PURE__ */ jsx7(
|
|
34429
|
+
/* @__PURE__ */ jsx7("div", { id: regionId, role: "region", hidden: !open, style: open ? { padding: "2px 2px 8px 24px" } : void 0, children: open && (Array.isArray(props.content) ? props.content.map((c2, i2) => /* @__PURE__ */ jsx7(React8.Fragment, { children: renderChild(c2) }, c2?.id ?? i2)) : renderChild(props.content)) })
|
|
34361
34430
|
] });
|
|
34362
34431
|
};
|
|
34363
34432
|
}
|
|
@@ -35481,7 +35550,7 @@ var init_rich_text_field = __esm({
|
|
|
35481
35550
|
});
|
|
35482
35551
|
|
|
35483
35552
|
// ../../core/web-renderer/src/richContent.tsx
|
|
35484
|
-
import
|
|
35553
|
+
import React10 from "react";
|
|
35485
35554
|
import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
35486
35555
|
function richContentFollow(ctx, onLink) {
|
|
35487
35556
|
return (url) => {
|
|
@@ -35586,7 +35655,7 @@ function Block({ b: b2, env, depth }) {
|
|
|
35586
35655
|
minHeight: b2.spans.length ? void 0 : "1.5em"
|
|
35587
35656
|
}, children: /* @__PURE__ */ jsx9(Spans, { spans: b2.spans, env }) });
|
|
35588
35657
|
case "heading":
|
|
35589
|
-
return
|
|
35658
|
+
return React10.createElement(
|
|
35590
35659
|
`h${b2.level}`,
|
|
35591
35660
|
{ ...tid(env, b2.id, b2.kind), style: textStyle(ctx, RICH_CONTENT_HEADING_TOKENS[b2.level - 1], text11) },
|
|
35592
35661
|
/* @__PURE__ */ jsx9(Spans, { spans: b2.spans, env })
|
|
@@ -35969,7 +36038,9 @@ var init_webviewBridge = __esm({
|
|
|
35969
36038
|
const registration = channel3.register(instanceId, (json8) => this.toPage(json8));
|
|
35970
36039
|
this.registration = registration;
|
|
35971
36040
|
channel3.deliverLifecycle(instanceId, registration.replacedLive ? lifecycleEnvelope(instanceId, "reloaded") : lifecycleEnvelope(instanceId, "mounted", plan.bridged ? { bridged: true } : { bridged: false, reason: plan.reason }));
|
|
35972
|
-
if (!this.active
|
|
36041
|
+
if (!this.active || registration.replacedLive) {
|
|
36042
|
+
channel3.deliverLifecycle(instanceId, lifecycleEnvelope(instanceId, this.active ? "active" : "inactive"));
|
|
36043
|
+
}
|
|
35973
36044
|
if (plan.bridged) this.opts.win.addEventListener("message", this.onWindowMessage);
|
|
35974
36045
|
}
|
|
35975
36046
|
/** The iframe's `load`. Only the first one of a document epoch is `loaded`: an in-frame navigation
|
|
@@ -36152,12 +36223,13 @@ var webviewBridgeHost_exports = {};
|
|
|
36152
36223
|
__export(webviewBridgeHost_exports, {
|
|
36153
36224
|
default: () => WebViewBridgeHost
|
|
36154
36225
|
});
|
|
36155
|
-
import
|
|
36226
|
+
import React11 from "react";
|
|
36156
36227
|
function WebViewBridgeHost(p2) {
|
|
36157
36228
|
const { channel: channel3, props, ctx } = p2;
|
|
36158
36229
|
const explicit2 = useResolvedScalar(props.instanceId, ctx);
|
|
36159
36230
|
const explicitId = typeof explicit2 === "string" || typeof explicit2 === "number" ? String(explicit2) : "";
|
|
36160
|
-
const
|
|
36231
|
+
const pageActive = React11.useContext(PageActiveContext);
|
|
36232
|
+
const active = useResolvedScalar(bound(props.activePath), ctx) !== false && pageActive;
|
|
36161
36233
|
const muted = useResolvedScalar(bound(props.mutedPath), ctx) === true;
|
|
36162
36234
|
const cfg = props.config && typeof props.config === "object" ? props.config : {};
|
|
36163
36235
|
const consoleForwarding = cfg.consoleForwarding === true;
|
|
@@ -36165,10 +36237,10 @@ function WebViewBridgeHost(p2) {
|
|
|
36165
36237
|
const screenArgs = JSON.stringify(ctx.screenArgs ?? null);
|
|
36166
36238
|
const source = p2.htmlStr != null ? "\0html" : p2.urlStr ?? "";
|
|
36167
36239
|
const origins = p2.allowedOrigins.join("\n");
|
|
36168
|
-
const sessionRef =
|
|
36169
|
-
const live3 =
|
|
36240
|
+
const sessionRef = React11.useRef(null);
|
|
36241
|
+
const live3 = React11.useRef({ active, muted });
|
|
36170
36242
|
live3.current = { active, muted };
|
|
36171
|
-
|
|
36243
|
+
React11.useEffect(() => {
|
|
36172
36244
|
if (typeof window === "undefined") return;
|
|
36173
36245
|
if (p2.urlStr == null && p2.htmlStr == null) return;
|
|
36174
36246
|
let instanceId;
|
|
@@ -36207,13 +36279,13 @@ function WebViewBridgeHost(p2) {
|
|
|
36207
36279
|
p2.load.onLoad = void 0;
|
|
36208
36280
|
};
|
|
36209
36281
|
}, [channel3, ctx.screenId, screenArgs, p2.nodeId, explicitId, source, origins, security, consoleForwarding]);
|
|
36210
|
-
|
|
36282
|
+
React11.useEffect(() => {
|
|
36211
36283
|
sessionRef.current?.setActive(active);
|
|
36212
36284
|
}, [active]);
|
|
36213
|
-
|
|
36285
|
+
React11.useEffect(() => {
|
|
36214
36286
|
sessionRef.current?.setMuted(muted);
|
|
36215
36287
|
}, [muted]);
|
|
36216
|
-
const first =
|
|
36288
|
+
const first = React11.useRef(true);
|
|
36217
36289
|
useLayoutEffectInBrowser(() => {
|
|
36218
36290
|
if (first.current) {
|
|
36219
36291
|
first.current = false;
|
|
@@ -36230,8 +36302,9 @@ var init_webviewBridgeHost = __esm({
|
|
|
36230
36302
|
"use strict";
|
|
36231
36303
|
init_bindings2();
|
|
36232
36304
|
init_helpers();
|
|
36305
|
+
init_liveWindow();
|
|
36233
36306
|
init_webviewBridge();
|
|
36234
|
-
useLayoutEffectInBrowser = typeof globalThis.document === "undefined" ?
|
|
36307
|
+
useLayoutEffectInBrowser = typeof globalThis.document === "undefined" ? React11.useEffect : React11.useLayoutEffect;
|
|
36235
36308
|
bound = (v2) => typeof v2 === "string" && isBinding(v2) ? v2 : void 0;
|
|
36236
36309
|
}
|
|
36237
36310
|
});
|
|
@@ -116844,7 +116917,7 @@ __export(pdfDocument_exports, {
|
|
|
116844
116917
|
PdfDocument: () => PdfDocument,
|
|
116845
116918
|
destroyPdfDocumentLoad: () => destroyPdfDocumentLoad
|
|
116846
116919
|
});
|
|
116847
|
-
import
|
|
116920
|
+
import React12 from "react";
|
|
116848
116921
|
import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
116849
116922
|
async function loadPdfDocument(src, ownerDocument) {
|
|
116850
116923
|
const [pdfjs, pdfWorkerAsset] = await Promise.all([
|
|
@@ -116863,18 +116936,18 @@ async function destroyPdfDocumentLoad(loading) {
|
|
|
116863
116936
|
}
|
|
116864
116937
|
}
|
|
116865
116938
|
function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, style, onPageCount, onFallback, loadDocument = loadPdfDocument }) {
|
|
116866
|
-
const [pages2, setPages] =
|
|
116867
|
-
const [failedRequest, setFailedRequest] =
|
|
116939
|
+
const [pages2, setPages] = React12.useState(0);
|
|
116940
|
+
const [failedRequest, setFailedRequest] = React12.useState(null);
|
|
116868
116941
|
const request = JSON.stringify([src, zoomPercent]);
|
|
116869
116942
|
const failed3 = failedRequest === request;
|
|
116870
|
-
const containerRef =
|
|
116871
|
-
const frameRef =
|
|
116872
|
-
const startPageRef =
|
|
116943
|
+
const containerRef = React12.useRef(null);
|
|
116944
|
+
const frameRef = React12.useRef(null);
|
|
116945
|
+
const startPageRef = React12.useRef(startPage);
|
|
116873
116946
|
startPageRef.current = startPage;
|
|
116874
|
-
|
|
116947
|
+
React12.useEffect(() => {
|
|
116875
116948
|
if (failed3) onFallback?.();
|
|
116876
116949
|
}, [failed3, onFallback]);
|
|
116877
|
-
|
|
116950
|
+
React12.useEffect(() => {
|
|
116878
116951
|
const frame2 = frameRef.current;
|
|
116879
116952
|
const page = Math.min(pages2, Math.max(1, Math.floor(startPage ?? 1) || 1));
|
|
116880
116953
|
const canvas = pages2 ? containerRef.current?.querySelector(`[data-pdf-page="${page}"]`) : null;
|
|
@@ -116883,7 +116956,7 @@ function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, st
|
|
|
116883
116956
|
const scale = frame2.offsetHeight > 0 && box.height > 0 ? box.height / frame2.offsetHeight : 1;
|
|
116884
116957
|
frame2.scrollTop += (canvas.getBoundingClientRect().top - box.top) / scale;
|
|
116885
116958
|
}, [startPage, pages2]);
|
|
116886
|
-
|
|
116959
|
+
React12.useEffect(() => {
|
|
116887
116960
|
let live3 = true;
|
|
116888
116961
|
let loading;
|
|
116889
116962
|
const container = containerRef.current;
|
|
@@ -116945,7 +117018,7 @@ var init_pdfDocument = __esm({
|
|
|
116945
117018
|
});
|
|
116946
117019
|
|
|
116947
117020
|
// ../../core/web-renderer/src/renderNode.tsx
|
|
116948
|
-
import
|
|
117021
|
+
import React13 from "react";
|
|
116949
117022
|
import { createPortal } from "react-dom";
|
|
116950
117023
|
import { Fragment as Fragment4, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
116951
117024
|
function boundTokenName(path2, fallback, ctx) {
|
|
@@ -117038,8 +117111,8 @@ function isNumericLike(s2) {
|
|
|
117038
117111
|
return NUMERIC_TEXT.test(s2.trim());
|
|
117039
117112
|
}
|
|
117040
117113
|
function useValueSwap(value2, enabled2) {
|
|
117041
|
-
const prev =
|
|
117042
|
-
const gen =
|
|
117114
|
+
const prev = React13.useRef(value2);
|
|
117115
|
+
const gen = React13.useRef(0);
|
|
117043
117116
|
if (prev.current !== value2) {
|
|
117044
117117
|
if (enabled2 && prev.current !== void 0 && value2 !== void 0) gen.current += 1;
|
|
117045
117118
|
prev.current = value2;
|
|
@@ -117107,9 +117180,9 @@ function revealOnFocusStyle(C2) {
|
|
|
117107
117180
|
};
|
|
117108
117181
|
}
|
|
117109
117182
|
function FormFieldLabelIdScope({ render, fieldKey, ...extras }) {
|
|
117110
|
-
const id =
|
|
117183
|
+
const id = React13.useId().replace(/[^A-Za-z0-9_-]/g, "");
|
|
117111
117184
|
const el2 = render(`${fieldKey ? `${fieldKey}-` : ""}auto-${id}`);
|
|
117112
|
-
return Object.keys(extras).length ?
|
|
117185
|
+
return Object.keys(extras).length ? React13.cloneElement(el2, extras) : el2;
|
|
117113
117186
|
}
|
|
117114
117187
|
function formFieldA11y(props) {
|
|
117115
117188
|
const labelledBy = props.__labelledBy;
|
|
@@ -117844,9 +117917,9 @@ function sectionSlot(raw) {
|
|
|
117844
117917
|
}
|
|
117845
117918
|
}
|
|
117846
117919
|
function useLoadingTiming(target, graceMs, floorMs) {
|
|
117847
|
-
const [shown2, setShown] =
|
|
117848
|
-
const loadingSince =
|
|
117849
|
-
|
|
117920
|
+
const [shown2, setShown] = React13.useState(() => target === "loading" && graceMs > 0 ? "pending" : target);
|
|
117921
|
+
const loadingSince = React13.useRef(shown2 === "loading" ? Date.now() : null);
|
|
117922
|
+
React13.useEffect(() => {
|
|
117850
117923
|
if (target === shown2) return void 0;
|
|
117851
117924
|
if (target === "loading") {
|
|
117852
117925
|
if (graceMs <= 0) {
|
|
@@ -117885,8 +117958,8 @@ function autoGrowBox(contentHeight, lineHeight, verticalPadding, maxLines) {
|
|
|
117885
117958
|
function PreviewMenuOverlay({ label: label3, dialogRef, preview, ctx, onClose, anchorHost, children }) {
|
|
117886
117959
|
const host = anchorHost?.closest(`[${MODAL_SCOPE_ATTR}]`) ?? (typeof document !== "undefined" ? document.body : null);
|
|
117887
117960
|
const reduce = ctx.reduceMotion();
|
|
117888
|
-
const [shown2, setShown] =
|
|
117889
|
-
|
|
117961
|
+
const [shown2, setShown] = React13.useState(reduce);
|
|
117962
|
+
React13.useEffect(() => {
|
|
117890
117963
|
if (reduce || typeof requestAnimationFrame !== "function") {
|
|
117891
117964
|
setShown(true);
|
|
117892
117965
|
return;
|
|
@@ -117895,7 +117968,7 @@ function PreviewMenuOverlay({ label: label3, dialogRef, preview, ctx, onClose, a
|
|
|
117895
117968
|
return () => cancelAnimationFrame(raf);
|
|
117896
117969
|
}, [reduce]);
|
|
117897
117970
|
const inScope = host != null && host !== host.ownerDocument.body;
|
|
117898
|
-
const previewCtx =
|
|
117971
|
+
const previewCtx = React13.useMemo(() => ctx.onAction ? { ...ctx, onAction: (a2) => {
|
|
117899
117972
|
onClose();
|
|
117900
117973
|
ctx.onAction(a2);
|
|
117901
117974
|
} } : ctx, [ctx, onClose]);
|
|
@@ -117962,7 +118035,7 @@ function youtubeId(item) {
|
|
|
117962
118035
|
}
|
|
117963
118036
|
}
|
|
117964
118037
|
function useResolvedMediaItems(items, ctx) {
|
|
117965
|
-
const paths2 =
|
|
118038
|
+
const paths2 = React13.useMemo(() => {
|
|
117966
118039
|
const set = /* @__PURE__ */ new Set();
|
|
117967
118040
|
for (const it2 of items) {
|
|
117968
118041
|
if (!it2 || typeof it2 !== "object") continue;
|
|
@@ -117974,17 +118047,17 @@ function useResolvedMediaItems(items, ctx) {
|
|
|
117974
118047
|
return [...set];
|
|
117975
118048
|
}, [items]);
|
|
117976
118049
|
const key3 = paths2.join("\0");
|
|
117977
|
-
const [values, setValues] =
|
|
118050
|
+
const [values, setValues] = React13.useState(() => {
|
|
117978
118051
|
const seed2 = {};
|
|
117979
118052
|
if (ctx.provider) for (const p2 of paths2) seed2[p2] = ctx.provider.value(p2);
|
|
117980
118053
|
return seed2;
|
|
117981
118054
|
});
|
|
117982
|
-
|
|
118055
|
+
React13.useEffect(() => {
|
|
117983
118056
|
if (!ctx.provider || paths2.length === 0) return;
|
|
117984
118057
|
const unsubs = paths2.map((p2) => ctx.provider.subscribe(p2, (v2) => setValues((prev) => prev[p2] === v2 ? prev : { ...prev, [p2]: v2 })));
|
|
117985
118058
|
return () => unsubs.forEach((u2) => u2());
|
|
117986
118059
|
}, [ctx.provider, key3]);
|
|
117987
|
-
return
|
|
118060
|
+
return React13.useMemo(() => items.map((it2) => {
|
|
117988
118061
|
if (!it2 || typeof it2 !== "object") return it2;
|
|
117989
118062
|
let out2 = null;
|
|
117990
118063
|
for (const f2 of MEDIA_ITEM_BINDABLE) {
|
|
@@ -118027,8 +118100,8 @@ function reloadKeyOf(v2) {
|
|
|
118027
118100
|
return String(v2);
|
|
118028
118101
|
}
|
|
118029
118102
|
function cloneWithKids(el2, props, kids3) {
|
|
118030
|
-
if (kids3 === el2.props.children) return
|
|
118031
|
-
return
|
|
118103
|
+
if (kids3 === el2.props.children) return React13.cloneElement(el2, props);
|
|
118104
|
+
return React13.cloneElement(el2, props, ...Array.isArray(kids3) ? kids3 : [kids3]);
|
|
118032
118105
|
}
|
|
118033
118106
|
function editA11yParts(node, edit) {
|
|
118034
118107
|
if (Array.isArray(node)) {
|
|
@@ -118040,7 +118113,7 @@ function editA11yParts(node, edit) {
|
|
|
118040
118113
|
});
|
|
118041
118114
|
return changed ? out2 : node;
|
|
118042
118115
|
}
|
|
118043
|
-
if (!
|
|
118116
|
+
if (!React13.isValidElement(node) || typeof node.type !== "string") return node;
|
|
118044
118117
|
const own6 = node.props;
|
|
118045
118118
|
if (own6["data-component-id"] != null) return node;
|
|
118046
118119
|
const part3 = own6[A11Y_PART];
|
|
@@ -118084,8 +118157,8 @@ function isNativeInteractiveElement(el2) {
|
|
|
118084
118157
|
return typeof el2.type === "string" && (["button", "input", "select", "textarea"].includes(el2.type) || el2.type === "a" && typeof props.href === "string");
|
|
118085
118158
|
}
|
|
118086
118159
|
function hasInteractiveReactDescendant(el2) {
|
|
118087
|
-
return
|
|
118088
|
-
if (!
|
|
118160
|
+
return React13.Children.toArray(el2.props.children).some((child) => {
|
|
118161
|
+
if (!React13.isValidElement(child)) return false;
|
|
118089
118162
|
if (isNativeInteractiveElement(child)) return true;
|
|
118090
118163
|
const props = child.props;
|
|
118091
118164
|
if (typeof child.type === "string" && typeof props.role === "string" && INTERACTIVE_ROLES.has(props.role)) return true;
|
|
@@ -118162,8 +118235,8 @@ function trackActivatorName(activator) {
|
|
|
118162
118235
|
activatorNameObservers.set(activator, observer);
|
|
118163
118236
|
}
|
|
118164
118237
|
function TapActivator({ label: label3, state, tabIndex = 0, role = "button", hint, initialFocus }) {
|
|
118165
|
-
const ref =
|
|
118166
|
-
const hintId = `hm-tap-hint${
|
|
118238
|
+
const ref = React13.useRef(null);
|
|
118239
|
+
const hintId = `hm-tap-hint${React13.useId()}`;
|
|
118167
118240
|
useIsomorphicLayoutEffect(() => {
|
|
118168
118241
|
const el2 = ref.current;
|
|
118169
118242
|
if (!el2 || label3) return;
|
|
@@ -118202,9 +118275,9 @@ function TapActivator({ label: label3, state, tabIndex = 0, role = "button", hin
|
|
|
118202
118275
|
function withExtras(name, render) {
|
|
118203
118276
|
const Wrapped = ({ props, ctx, wrap, nodeId, gap, ...pass }) => {
|
|
118204
118277
|
const el2 = render({ props, ctx, wrap, nodeId, gap, nodeExtras: pass });
|
|
118205
|
-
if (!
|
|
118278
|
+
if (!React13.isValidElement(el2)) return /* @__PURE__ */ jsx11(Fragment4, { children: el2 });
|
|
118206
118279
|
if (el2.props[NODE_EXTRAS_TARGET] === "bottom-drawer-panel") {
|
|
118207
|
-
return
|
|
118280
|
+
return React13.cloneElement(el2, { [NODE_EXTRAS_TARGET]: void 0 });
|
|
118208
118281
|
}
|
|
118209
118282
|
const additive = addIntrinsicPadding(el2.props.style, wrap ?? {});
|
|
118210
118283
|
const inferredDecorative = el2.props[INFERRED_DECORATIVE] === true;
|
|
@@ -118224,7 +118297,7 @@ function withExtras(name, render) {
|
|
|
118224
118297
|
}, hasA11yParts ? editA11yParts(kids3, a11yPartEdit({}, false, () => {
|
|
118225
118298
|
})) : kids3));
|
|
118226
118299
|
}
|
|
118227
|
-
return withCircleClipBorder(additive ?
|
|
118300
|
+
return withCircleClipBorder(additive ? React13.cloneElement(el2, { style: additive }) : el2);
|
|
118228
118301
|
}
|
|
118229
118302
|
const prev = el2.props;
|
|
118230
118303
|
const next = { ...pass };
|
|
@@ -118325,7 +118398,7 @@ function withExtras(name, render) {
|
|
|
118325
118398
|
}
|
|
118326
118399
|
return withCircleClipBorder(cloneWithKids(el2, next, kids3));
|
|
118327
118400
|
}
|
|
118328
|
-
return withCircleClipBorder(
|
|
118401
|
+
return withCircleClipBorder(React13.cloneElement(el2, next));
|
|
118329
118402
|
};
|
|
118330
118403
|
Wrapped.displayName = name;
|
|
118331
118404
|
return Wrapped;
|
|
@@ -118433,7 +118506,7 @@ function overlayEdgeStyle(edge, gap) {
|
|
|
118433
118506
|
}
|
|
118434
118507
|
function useFlippedEdge(edge, open, bubbleRef, anchorRef, gap = TOOLTIP_GAP) {
|
|
118435
118508
|
const initial = { edge, x: 0, y: 0, maxWidth: Infinity };
|
|
118436
|
-
const [placed, setPlaced] =
|
|
118509
|
+
const [placed, setPlaced] = React13.useState(initial);
|
|
118437
118510
|
useIsomorphicLayoutEffect(() => {
|
|
118438
118511
|
if (!open) {
|
|
118439
118512
|
setPlaced((previous) => previous.edge === edge && previous.x === 0 && previous.y === 0 && previous.maxWidth === Infinity ? previous : initial);
|
|
@@ -119227,7 +119300,7 @@ function renderNodeInner(node, ctx) {
|
|
|
119227
119300
|
}
|
|
119228
119301
|
}
|
|
119229
119302
|
const el2 = renderInner(node, ctx);
|
|
119230
|
-
if (!
|
|
119303
|
+
if (!React13.isValidElement(el2)) return el2;
|
|
119231
119304
|
const extra = {};
|
|
119232
119305
|
const material = node?.modifiers?.material;
|
|
119233
119306
|
const materialName = typeof material === "string" ? material : material?.token ?? material?.name;
|
|
@@ -119406,8 +119479,8 @@ function renderNodeInner(node, ctx) {
|
|
|
119406
119479
|
const finalStyle = extra.style ?? el2.props.style;
|
|
119407
119480
|
if (!finalStyle?.position) extra.style = { ...finalStyle ?? {}, position: "relative" };
|
|
119408
119481
|
}
|
|
119409
|
-
let out2 = tapActivator ?
|
|
119410
|
-
if (
|
|
119482
|
+
let out2 = tapActivator ? React13.cloneElement(el2, extra, tapActivator, el2.props.children) : Object.keys(extra).length ? React13.cloneElement(el2, extra) : el2;
|
|
119483
|
+
if (React13.isValidElement(out2)) out2 = withCircleClipBorder(out2);
|
|
119411
119484
|
if (a11yHint && !tapActivator) {
|
|
119412
119485
|
out2 = /* @__PURE__ */ jsx11(A11yHintDescription, { hint: a11yHint, idBase: componentId, children: out2 });
|
|
119413
119486
|
}
|
|
@@ -119624,10 +119697,10 @@ function renderInner(node, ctx) {
|
|
|
119624
119697
|
template: items[0],
|
|
119625
119698
|
renderRow: (t2, ic) => {
|
|
119626
119699
|
let row2 = renderNode(t2, asItem(ic));
|
|
119627
|
-
if (boundStagger > 0 &&
|
|
119700
|
+
if (boundStagger > 0 && React13.isValidElement(row2)) {
|
|
119628
119701
|
const i2 = Number(ic.itemScope?.__index ?? 0);
|
|
119629
119702
|
const prev = row2.props.style ?? {};
|
|
119630
|
-
row2 =
|
|
119703
|
+
row2 = React13.cloneElement(row2, { style: { ...prev, animationDelay: `${i2 * boundStagger}ms` } });
|
|
119631
119704
|
}
|
|
119632
119705
|
if (boundSwipe && ctx.onAction && !props.horizontal) {
|
|
119633
119706
|
const leading = resolveSwipeActions(boundSwipe.leading, ic);
|
|
@@ -119687,7 +119760,7 @@ function renderInner(node, ctx) {
|
|
|
119687
119760
|
if (swipe && ctx.onAction && !props.horizontal) {
|
|
119688
119761
|
const leading = swipe.leading ?? [];
|
|
119689
119762
|
const trailing = swipe.trailing ?? [];
|
|
119690
|
-
const arr2 =
|
|
119763
|
+
const arr2 = React13.Children.toArray(rendered);
|
|
119691
119764
|
body = arr2.map((child, i2) => /* @__PURE__ */ jsx11(
|
|
119692
119765
|
SwipeRow,
|
|
119693
119766
|
{
|
|
@@ -120142,8 +120215,8 @@ function renderInner(node, ctx) {
|
|
|
120142
120215
|
if (carItemsPath && items[0] && ctx.provider) {
|
|
120143
120216
|
return /* @__PURE__ */ jsx11("div", { style: { width: "100%", ...wrap }, children: /* @__PURE__ */ jsx11("div", { style: { display: "flex", overflowX: "auto", gap: 12, width: "100%" }, children: /* @__PURE__ */ jsx11(BoundList, { ctx, itemsPath: carItemsPath, template: items[0], renderRow: (t2, ic) => /* @__PURE__ */ jsx11("div", { style: { flex: "0 0 auto" }, children: renderNode(t2, ic) }) }) }) });
|
|
120144
120217
|
}
|
|
120145
|
-
if (type === "Carousel") return /* @__PURE__ */ jsx11(CarouselNode, { props, ctx, wrap });
|
|
120146
|
-
return /* @__PURE__ */ jsx11(PagingNode, { props: { ...props, __pager: true }, ctx, wrap });
|
|
120218
|
+
if (type === "Carousel") return /* @__PURE__ */ jsx11(CarouselNode, { props, ctx, wrap, nodeId: resolvedComponentId(node.id, ctx) ?? "" });
|
|
120219
|
+
return /* @__PURE__ */ jsx11(PagingNode, { props: { ...props, __pager: true }, ctx, wrap, nodeId: resolvedComponentId(node.id, ctx) ?? "" });
|
|
120147
120220
|
}
|
|
120148
120221
|
case "StepIndicator": {
|
|
120149
120222
|
const steps = Array.isArray(props.steps) ? props.steps : [];
|
|
@@ -120200,7 +120273,7 @@ function reportUnknownComponent(ctx, pkg, type) {
|
|
|
120200
120273
|
function unknownComponentShowsDeveloperLabel(ctx) {
|
|
120201
120274
|
return ctx.debugUnknownComponents ?? ctx.previewSurface != null;
|
|
120202
120275
|
}
|
|
120203
|
-
var rowValue, loadPdfFetch, WebViewBridgeHost2, useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, LOTTIE_RUNTIME_ATTRIBUTES, lottieAnims, 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, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_ANCHOR_CONTROL, MenuNode, MENU_LONG_PRESS_MS, menuOpensOnLongPress, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, 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, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ERROR_STATE_VARIANTS, ERROR_STATE_SPACING, ErrorStateNode, ButtonNode, OtpInputNode, ProgressBarNode, SnackbarNode, ACTIVITY_DEFAULT_NAME, ACTIVITY_RING_ARC, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, TooltipNode, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, ShapeNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, PagingNode, 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, CAROUSEL_SETTLE_MS, scrollCarouselTo, CarouselNode, BannerNode, 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, reportedUnknownComponents, UnknownComponentNode, WebRenderer;
|
|
120276
|
+
var rowValue, loadPdfFetch, WebViewBridgeHost2, useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, LOTTIE_RUNTIME_ATTRIBUTES, lottieAnims, 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, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_ANCHOR_CONTROL, MenuNode, MENU_LONG_PRESS_MS, menuOpensOnLongPress, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, 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, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ERROR_STATE_VARIANTS, ERROR_STATE_SPACING, ErrorStateNode, ButtonNode, OtpInputNode, ProgressBarNode, SnackbarNode, ACTIVITY_DEFAULT_NAME, ACTIVITY_RING_ARC, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, TooltipNode, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, ShapeNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, LiveWindowMeasured, LiveWindowPage, PagingNode, 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, CAROUSEL_SETTLE_MS, scrollCarouselTo, CarouselNode, BannerNode, 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, reportedUnknownComponents, UnknownComponentNode, WebRenderer;
|
|
120204
120277
|
var init_renderNode = __esm({
|
|
120205
120278
|
"../../core/web-renderer/src/renderNode.tsx"() {
|
|
120206
120279
|
"use strict";
|
|
@@ -120212,6 +120285,7 @@ var init_renderNode = __esm({
|
|
|
120212
120285
|
init_modifiers();
|
|
120213
120286
|
init_shape();
|
|
120214
120287
|
init_helpers();
|
|
120288
|
+
init_liveWindow();
|
|
120215
120289
|
init_bindings2();
|
|
120216
120290
|
init_snackbarTiming();
|
|
120217
120291
|
init_bindings();
|
|
@@ -120249,12 +120323,12 @@ var init_renderNode = __esm({
|
|
|
120249
120323
|
init_richContent();
|
|
120250
120324
|
rowValue = (v2, ctx) => typeof v2 === "string" && v2.startsWith("$item") ? resolveScalarStatic(v2, ctx) : v2;
|
|
120251
120325
|
loadPdfFetch = () => Promise.resolve().then(() => (init_pdfFetch(), pdfFetch_exports));
|
|
120252
|
-
WebViewBridgeHost2 =
|
|
120253
|
-
useIsomorphicLayoutEffect = typeof globalThis.document === "undefined" ?
|
|
120326
|
+
WebViewBridgeHost2 = React13.lazy(() => Promise.resolve().then(() => (init_webviewBridgeHost(), webviewBridgeHost_exports)));
|
|
120327
|
+
useIsomorphicLayoutEffect = typeof globalThis.document === "undefined" ? React13.useEffect : React13.useLayoutEffect;
|
|
120254
120328
|
ResponsiveGrid = ({ base, medium, expanded, initialCols, seedWidth, spacing, extra, children }) => {
|
|
120255
|
-
const [el2, setEl] =
|
|
120256
|
-
const [cols, setCols] =
|
|
120257
|
-
|
|
120329
|
+
const [el2, setEl] = React13.useState(null);
|
|
120330
|
+
const [cols, setCols] = React13.useState(initialCols);
|
|
120331
|
+
React13.useEffect(() => {
|
|
120258
120332
|
if (!el2) return;
|
|
120259
120333
|
const measure2 = () => {
|
|
120260
120334
|
const w2 = seededWidth(el2.clientWidth, seedWidth);
|
|
@@ -120280,9 +120354,9 @@ var init_renderNode = __esm({
|
|
|
120280
120354
|
SPLIT_EXPANDED_MIN_WIDTH = 840;
|
|
120281
120355
|
SPLIT_COLUMN_GAP = 16;
|
|
120282
120356
|
ResponsiveSplitView = ({ primary, detail, primaryMaxWidth, initialWide, seedWidth, extra }) => {
|
|
120283
|
-
const ref =
|
|
120284
|
-
const [wide, setWide] =
|
|
120285
|
-
|
|
120357
|
+
const ref = React13.useRef(null);
|
|
120358
|
+
const [wide, setWide] = React13.useState(initialWide);
|
|
120359
|
+
React13.useEffect(() => {
|
|
120286
120360
|
const el2 = ref.current;
|
|
120287
120361
|
if (!el2) return;
|
|
120288
120362
|
const measure2 = () => {
|
|
@@ -120328,9 +120402,9 @@ var init_renderNode = __esm({
|
|
|
120328
120402
|
revealRuntimeInjected = false;
|
|
120329
120403
|
AMBIENT_HOST_STYLE = { display: "contents" };
|
|
120330
120404
|
AmbientMotionBox = ({ spec, kind, children }) => {
|
|
120331
|
-
const ref =
|
|
120405
|
+
const ref = React13.useRef(null);
|
|
120332
120406
|
const { minGapMs, maxGapMs } = spec;
|
|
120333
|
-
|
|
120407
|
+
React13.useEffect(() => {
|
|
120334
120408
|
const el2 = ref.current?.firstElementChild;
|
|
120335
120409
|
if (!el2 || typeof el2.animate !== "function") return;
|
|
120336
120410
|
let timer;
|
|
@@ -120414,14 +120488,14 @@ var init_renderNode = __esm({
|
|
|
120414
120488
|
}
|
|
120415
120489
|
};
|
|
120416
120490
|
bodyFont = (ctx) => fontStack(ctx.font("body").family, ctx.idiom);
|
|
120417
|
-
kids2 = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(
|
|
120491
|
+
kids2 = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(React13.Fragment, { children: renderNode(n2, ctx) }, n2?.id ?? i2)) : null;
|
|
120418
120492
|
rowKidCtx = (n2, ctx) => wantsRowStretch(n2) ? { ...ctx, rowStretch: true } : normalize(n2).type === "Divider" ? { ...ctx, rowDivider: true } : ctx;
|
|
120419
|
-
rowKids = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(
|
|
120493
|
+
rowKids = (arr2, ctx) => Array.isArray(arr2) ? arr2.map((n2, i2) => /* @__PURE__ */ jsx11(React13.Fragment, { children: renderNode(n2, rowKidCtx(n2, ctx)) }, n2?.id ?? i2)) : null;
|
|
120420
120494
|
staggeredKids = (arr2, ctx, staggerMs) => Array.isArray(arr2) ? arr2.map((n2, i2) => {
|
|
120421
120495
|
const el2 = renderNode(n2, ctx);
|
|
120422
|
-
if (!
|
|
120496
|
+
if (!React13.isValidElement(el2)) return /* @__PURE__ */ jsx11(React13.Fragment, { children: el2 }, n2?.id ?? i2);
|
|
120423
120497
|
const prev = el2.props.style ?? {};
|
|
120424
|
-
return
|
|
120498
|
+
return React13.cloneElement(el2, { key: n2?.id ?? i2, style: { ...prev, animationDelay: `${i2 * staggerMs}ms` } });
|
|
120425
120499
|
}) : null;
|
|
120426
120500
|
asTextL10n = (v2, ctx) => typeof v2 === "string" && v2.startsWith(TRANSLATION_PREFIX) ? asText2(resolveTranslation(v2, ctx.catalog)) : asText2(v2);
|
|
120427
120501
|
asFinalTextL10n = (v2, ctx) => typeof v2 === "string" ? v2.startsWith(TRANSLATION_PREFIX) ? asText2(resolveTranslation(v2, ctx.catalog)) : v2 : asText2(v2);
|
|
@@ -120434,13 +120508,13 @@ var init_renderNode = __esm({
|
|
|
120434
120508
|
const bound2 = Object.entries(params).filter(
|
|
120435
120509
|
([, v2]) => typeof v2 === "string" && v2.startsWith("$service:")
|
|
120436
120510
|
);
|
|
120437
|
-
const [live3, setLive] =
|
|
120511
|
+
const [live3, setLive] = React13.useState(() => {
|
|
120438
120512
|
const seed2 = {};
|
|
120439
120513
|
if (ctx.provider) for (const [k2, p2] of bound2) seed2[k2] = ctx.provider.value(servicePath(p2));
|
|
120440
120514
|
return seed2;
|
|
120441
120515
|
});
|
|
120442
120516
|
const subKey = bound2.map(([k2, p2]) => `${k2}=${p2}`).join("|");
|
|
120443
|
-
|
|
120517
|
+
React13.useEffect(() => {
|
|
120444
120518
|
const provider = ctx.provider;
|
|
120445
120519
|
if (!provider) return;
|
|
120446
120520
|
const unsubs = bound2.map(
|
|
@@ -120482,11 +120556,11 @@ var init_renderNode = __esm({
|
|
|
120482
120556
|
fragmentSlotContent = ({ props, ctx, discriminator, slotId, extra }) => {
|
|
120483
120557
|
const selected = selectFragmentCase(props, discriminator);
|
|
120484
120558
|
const selectedId = typeof selected?.id === "string" ? selected.id : "";
|
|
120485
|
-
const previousId =
|
|
120486
|
-
const reportedUnknown =
|
|
120487
|
-
const reportedInvalid =
|
|
120488
|
-
const [announcement, setAnnouncement] =
|
|
120489
|
-
|
|
120559
|
+
const previousId = React13.useRef(selectedId);
|
|
120560
|
+
const reportedUnknown = React13.useRef(/* @__PURE__ */ new Set());
|
|
120561
|
+
const reportedInvalid = React13.useRef(/* @__PURE__ */ new Set());
|
|
120562
|
+
const [announcement, setAnnouncement] = React13.useState("");
|
|
120563
|
+
React13.useEffect(() => {
|
|
120490
120564
|
if (typeof discriminator === "string") {
|
|
120491
120565
|
if (discriminator && !props.cases?.some((candidate) => candidate.id === discriminator) && !reportedUnknown.current.has(discriminator)) {
|
|
120492
120566
|
reportedUnknown.current.add(discriminator);
|
|
@@ -120500,7 +120574,7 @@ var init_renderNode = __esm({
|
|
|
120500
120574
|
}
|
|
120501
120575
|
}
|
|
120502
120576
|
}, [ctx, discriminator, props.cases, slotId]);
|
|
120503
|
-
|
|
120577
|
+
React13.useEffect(() => {
|
|
120504
120578
|
if (previousId.current !== selectedId) {
|
|
120505
120579
|
const next = selected?.accessibilityAnnouncement ?? selected?.accessibility_announcement;
|
|
120506
120580
|
setAnnouncement(typeof next === "string" ? next : "");
|
|
@@ -120514,7 +120588,7 @@ var init_renderNode = __esm({
|
|
|
120514
120588
|
// and the right edge clips (branded-lite's home is a FragmentSlot → 32px cut in
|
|
120515
120589
|
// the phone preview). Included before ...extra so a modifier can still override.
|
|
120516
120590
|
/* @__PURE__ */ jsxs8("div", { "data-fragment-slot": slotId ?? "", "data-fragment-case": selectedId, style: { width: "100%", boxSizing: "border-box", ...extra }, children: [
|
|
120517
|
-
selected?.content ? /* @__PURE__ */ jsx11(
|
|
120591
|
+
selected?.content ? /* @__PURE__ */ jsx11(React13.Fragment, { children: renderNode(selected.content, ctx) }, selectedId) : null,
|
|
120518
120592
|
/* @__PURE__ */ jsx11("span", { "aria-live": "polite", style: { position: "absolute", width: 1, height: 1, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", border: 0 }, children: announcement })
|
|
120519
120593
|
] })
|
|
120520
120594
|
);
|
|
@@ -120535,11 +120609,11 @@ var init_renderNode = __esm({
|
|
|
120535
120609
|
const fallbackPathStr = mediaFieldServicePath(props.fallbackTextPath);
|
|
120536
120610
|
const fallbackBound = useBoundValue(ctx, fallbackPathStr ? String(props.fallbackTextPath) : "");
|
|
120537
120611
|
const fallbackText = typeof fallbackBound === "string" ? fallbackBound : "";
|
|
120538
|
-
const [uploading, setUploading] =
|
|
120539
|
-
const [failed3, setFailed] =
|
|
120540
|
-
const fileRef =
|
|
120541
|
-
const previewRef =
|
|
120542
|
-
const [localPreview, setLocalPreview] =
|
|
120612
|
+
const [uploading, setUploading] = React13.useState(false);
|
|
120613
|
+
const [failed3, setFailed] = React13.useState(false);
|
|
120614
|
+
const fileRef = React13.useRef(null);
|
|
120615
|
+
const previewRef = React13.useRef(null);
|
|
120616
|
+
const [localPreview, setLocalPreview] = React13.useState("");
|
|
120543
120617
|
const uploadService = typeof props.uploadService === "string" ? props.uploadService : "";
|
|
120544
120618
|
const resolvedLabel = asText2(resolveScalarStatic(props.label, ctx));
|
|
120545
120619
|
const name = mediaFieldName(resolvedLabel);
|
|
@@ -120584,7 +120658,7 @@ var init_renderNode = __esm({
|
|
|
120584
120658
|
setUploading(false);
|
|
120585
120659
|
}
|
|
120586
120660
|
};
|
|
120587
|
-
|
|
120661
|
+
React13.useEffect(() => () => {
|
|
120588
120662
|
const previewUrl = previewRef.current;
|
|
120589
120663
|
if (previewUrl && typeof URL.revokeObjectURL === "function") URL.revokeObjectURL(previewUrl);
|
|
120590
120664
|
previewRef.current = null;
|
|
@@ -120656,7 +120730,7 @@ var init_renderNode = __esm({
|
|
|
120656
120730
|
const value2 = useBoundValue(ctx, typeof path2 === "string" ? path2 : "");
|
|
120657
120731
|
const policy = props.policy;
|
|
120658
120732
|
const catalog4 = ctx.provider && typeof ctx.provider.listActions === "function" ? ctx.provider : null;
|
|
120659
|
-
const validation =
|
|
120733
|
+
const validation = React13.useMemo(() => {
|
|
120660
120734
|
if (value2 === void 0 || value2 === null) return { ok: false, reason: "unresolved" };
|
|
120661
120735
|
if (typeof value2 !== "string") return { ok: false, reason: "value_type" };
|
|
120662
120736
|
if (!policy || typeof policy !== "object") return { ok: false, reason: "typed_decode" };
|
|
@@ -120666,8 +120740,8 @@ var init_renderNode = __esm({
|
|
|
120666
120740
|
return { ok: false, reason: "typed_decode" };
|
|
120667
120741
|
}
|
|
120668
120742
|
}, [catalog4, policy, slotId, value2]);
|
|
120669
|
-
const reported =
|
|
120670
|
-
|
|
120743
|
+
const reported = React13.useRef(/* @__PURE__ */ new Set());
|
|
120744
|
+
React13.useEffect(() => {
|
|
120671
120745
|
const key3 = validation.ok ? `ok:${validation.treeHash}` : `bad:${validation.treeHash ?? validation.reason}`;
|
|
120672
120746
|
if (reported.current.has(key3)) return;
|
|
120673
120747
|
reported.current.add(key3);
|
|
@@ -120696,10 +120770,10 @@ var init_renderNode = __esm({
|
|
|
120696
120770
|
const hasPath = typeof path2 === "string" && path2 !== "";
|
|
120697
120771
|
const bound2 = useResolvedScalar(hasPath ? path2 : void 0, ctx);
|
|
120698
120772
|
const raw = hasPath ? bound2 : props.documentJson ?? props.document_json;
|
|
120699
|
-
const result =
|
|
120773
|
+
const result = React13.useMemo(() => layoutRichContentValue(raw), [raw]);
|
|
120700
120774
|
const reason = result && "rejected" in result ? result.rejected : void 0;
|
|
120701
|
-
const reported =
|
|
120702
|
-
|
|
120775
|
+
const reported = React13.useRef(/* @__PURE__ */ new Set());
|
|
120776
|
+
React13.useEffect(() => {
|
|
120703
120777
|
if (!reason) return;
|
|
120704
120778
|
const key3 = typeof raw === "string" ? `${reason}:${raw.length}:${richContentDocumentHash(raw)}` : `${reason}:non-string`;
|
|
120705
120779
|
if (reported.current.has(key3)) return;
|
|
@@ -120793,17 +120867,17 @@ var init_renderNode = __esm({
|
|
|
120793
120867
|
};
|
|
120794
120868
|
withRootStyle = (content, style) => {
|
|
120795
120869
|
if (Array.isArray(content)) return content.map((child) => withRootStyle(child, style));
|
|
120796
|
-
if (!
|
|
120797
|
-
if (content.type ===
|
|
120798
|
-
return
|
|
120870
|
+
if (!React13.isValidElement(content)) return content;
|
|
120871
|
+
if (content.type === React13.Fragment) {
|
|
120872
|
+
return React13.cloneElement(content, {}, React13.Children.map(content.props.children, (child) => withRootStyle(child, style)));
|
|
120799
120873
|
}
|
|
120800
120874
|
const element = content;
|
|
120801
|
-
return
|
|
120875
|
+
return React13.cloneElement(element, { style: { ...element.props.style, ...style } });
|
|
120802
120876
|
};
|
|
120803
120877
|
ReactiveDirectScalars = ({ node, ctx, bindings, style }) => {
|
|
120804
|
-
const [, rerender] =
|
|
120878
|
+
const [, rerender] = React13.useState(0);
|
|
120805
120879
|
const bindingKey = bindings.join("|");
|
|
120806
|
-
|
|
120880
|
+
React13.useEffect(() => {
|
|
120807
120881
|
if (!ctx.provider) return;
|
|
120808
120882
|
const unsubs = bindings.map((binding2) => ctx.provider.subscribe(servicePath(binding2), () => rerender((n2) => n2 + 1)));
|
|
120809
120883
|
return () => unsubs.forEach((unsubscribe) => unsubscribe());
|
|
@@ -120816,14 +120890,14 @@ var init_renderNode = __esm({
|
|
|
120816
120890
|
return /* @__PURE__ */ jsx11(ExitPresence, { hidden: hiddenBool(v2), exit: exit ?? null, children });
|
|
120817
120891
|
};
|
|
120818
120892
|
ExitPresence = ({ hidden, exit, children }) => {
|
|
120819
|
-
const [prevHidden, setPrevHidden] =
|
|
120820
|
-
const [exiting, setExiting] =
|
|
120893
|
+
const [prevHidden, setPrevHidden] = React13.useState(hidden);
|
|
120894
|
+
const [exiting, setExiting] = React13.useState(false);
|
|
120821
120895
|
if (hidden !== prevHidden) {
|
|
120822
120896
|
setPrevHidden(hidden);
|
|
120823
120897
|
setExiting(hidden && exit != null);
|
|
120824
120898
|
}
|
|
120825
|
-
const ref =
|
|
120826
|
-
const exitRef =
|
|
120899
|
+
const ref = React13.useRef(null);
|
|
120900
|
+
const exitRef = React13.useRef(exit);
|
|
120827
120901
|
exitRef.current = exit;
|
|
120828
120902
|
useIsomorphicLayoutEffect(() => {
|
|
120829
120903
|
if (!exiting) return void 0;
|
|
@@ -120856,8 +120930,8 @@ var init_renderNode = __esm({
|
|
|
120856
120930
|
const target = raw == null || raw === "" || isBound && !ctx.provider ? legacy : sectionSlot(isBound ? bound2 : raw);
|
|
120857
120931
|
const { graceMs, floorMs } = loadingTiming(ctx.kit, props.loadingGraceMs ?? props.loading_grace_ms, props.loadingFloorMs ?? props.loading_floor_ms);
|
|
120858
120932
|
const shown2 = useLoadingTiming(target, graceMs, floorMs);
|
|
120859
|
-
const changed =
|
|
120860
|
-
const first =
|
|
120933
|
+
const changed = React13.useRef(false);
|
|
120934
|
+
const first = React13.useRef(shown2);
|
|
120861
120935
|
if (shown2 !== first.current) changed.current = true;
|
|
120862
120936
|
const renderCfg = (cfg) => cfg && typeof cfg === "object" ? /* @__PURE__ */ jsxs8("div", { style: { textAlign: "center", padding: "24px 12px", color: C2("textSecondary", "#9aa2ad") }, children: [
|
|
120863
120937
|
cfg.title && /* @__PURE__ */ jsx11("div", { style: { fontSize: pxToRem(15), fontWeight: 600, color: C2("textPrimary", "#111") }, children: asText2(cfg.title) }),
|
|
@@ -120889,8 +120963,8 @@ var init_renderNode = __esm({
|
|
|
120889
120963
|
}
|
|
120890
120964
|
const animate = motionDefaultsAnimate(ctx);
|
|
120891
120965
|
const fadeMs = motionDefaultsDuration(ctx.kit, 220);
|
|
120892
|
-
const lastShown =
|
|
120893
|
-
const [outgoing, setOutgoing] =
|
|
120966
|
+
const lastShown = React13.useRef(null);
|
|
120967
|
+
const [outgoing, setOutgoing] = React13.useState(null);
|
|
120894
120968
|
useIsomorphicLayoutEffect(() => {
|
|
120895
120969
|
const was = lastShown.current;
|
|
120896
120970
|
if (!animate || !was || was.slot === shown2 || was.node == null) return void 0;
|
|
@@ -120898,7 +120972,7 @@ var init_renderNode = __esm({
|
|
|
120898
120972
|
const t2 = setTimeout(() => setOutgoing(null), fadeMs);
|
|
120899
120973
|
return () => clearTimeout(t2);
|
|
120900
120974
|
}, [shown2]);
|
|
120901
|
-
|
|
120975
|
+
React13.useEffect(() => {
|
|
120902
120976
|
lastShown.current = { slot: shown2, node: content };
|
|
120903
120977
|
});
|
|
120904
120978
|
if (changed.current && animate) {
|
|
@@ -120934,7 +121008,7 @@ var init_renderNode = __esm({
|
|
|
120934
121008
|
const onChangeAction = resolveRowAction2(props.onChange ?? cfg.onChange, ctx);
|
|
120935
121009
|
const borderless = props.borderless === true || cfg.borderless === true;
|
|
120936
121010
|
const secure = props.secure === true || cfg.secure === true;
|
|
120937
|
-
const [valueVisible, setValueVisible] =
|
|
121011
|
+
const [valueVisible, setValueVisible] = React13.useState(false);
|
|
120938
121012
|
const visibilityToggle = secure && (props.visibilityToggle === true || cfg.visibilityToggle === true);
|
|
120939
121013
|
const visibilityLabel = ctx.catalog?.get(valueVisible ? "auth.gate.password.hide" : "auth.gate.password.show") ?? (valueVisible ? "Hide password" : "Show password");
|
|
120940
121014
|
const erroredProp = props.error === true || cfg.error === true;
|
|
@@ -120948,20 +121022,20 @@ var init_renderNode = __esm({
|
|
|
120948
121022
|
const boundRawText = typeof boundVal === "string" ? boundVal : typeof boundVal === "number" ? String(boundVal) : void 0;
|
|
120949
121023
|
const boundText = serializeRichText && boundRawText !== void 0 ? richTextHtmlToPlainText(boundRawText) : boundRawText;
|
|
120950
121024
|
const literalText = typeof valueBinding === "string" ? serializeRichText ? richTextHtmlToPlainText(valueBinding) : valueBinding : "";
|
|
120951
|
-
const [local, setLocal] =
|
|
121025
|
+
const [local, setLocal] = React13.useState(
|
|
120952
121026
|
isBound ? boundText ?? "" : literalText
|
|
120953
121027
|
);
|
|
120954
|
-
const [edited, setEdited] =
|
|
120955
|
-
const [pristineRichValue, setPristineRichValue] =
|
|
121028
|
+
const [edited, setEdited] = React13.useState(false);
|
|
121029
|
+
const [pristineRichValue, setPristineRichValue] = React13.useState(
|
|
120956
121030
|
serializeRichText ? isBound ? boundRawText : typeof valueBinding === "string" ? valueBinding : void 0 : void 0
|
|
120957
121031
|
);
|
|
120958
|
-
const focused =
|
|
120959
|
-
const [touched, setTouched] =
|
|
120960
|
-
const [isFocused, setIsFocused] =
|
|
120961
|
-
const pendingEdits =
|
|
120962
|
-
const previousBoundText =
|
|
120963
|
-
const previousBoundRawText =
|
|
120964
|
-
|
|
121032
|
+
const focused = React13.useRef(false);
|
|
121033
|
+
const [touched, setTouched] = React13.useState(false);
|
|
121034
|
+
const [isFocused, setIsFocused] = React13.useState(false);
|
|
121035
|
+
const pendingEdits = React13.useRef([]);
|
|
121036
|
+
const previousBoundText = React13.useRef(boundText);
|
|
121037
|
+
const previousBoundRawText = React13.useRef(boundRawText);
|
|
121038
|
+
React13.useEffect(() => {
|
|
120965
121039
|
if (!isBound || boundText === void 0) return;
|
|
120966
121040
|
const boundTextChanged = previousBoundText.current !== boundText;
|
|
120967
121041
|
const boundRawTextChanged = previousBoundRawText.current !== boundRawText;
|
|
@@ -120992,23 +121066,23 @@ var init_renderNode = __esm({
|
|
|
120992
121066
|
}
|
|
120993
121067
|
if (!focused.current && boundText !== local) setLocal(boundText);
|
|
120994
121068
|
}, [boundText, serializeRichText ? boundRawText : void 0, isFocused, serializeRichText ? edited : false]);
|
|
120995
|
-
const formBag =
|
|
121069
|
+
const formBag = React13.useContext(FormValuesContext);
|
|
120996
121070
|
const fieldId = props.__formFieldId;
|
|
120997
|
-
const previousBinding =
|
|
121071
|
+
const previousBinding = React13.useRef(binding2);
|
|
120998
121072
|
const rule = props.validation ?? cfg.validation;
|
|
120999
121073
|
const { "aria-labelledby": labelledBy } = formFieldA11y(props);
|
|
121000
121074
|
const required3 = rule?.required === true || void 0;
|
|
121001
|
-
const ruleKey =
|
|
121002
|
-
|
|
121075
|
+
const ruleKey = React13.useMemo(() => rule ? JSON.stringify(rule) : "", [rule]);
|
|
121076
|
+
React13.useEffect(() => {
|
|
121003
121077
|
if (!formBag || !fieldId) return;
|
|
121004
121078
|
formBag.register(fieldId, rule);
|
|
121005
121079
|
return () => formBag.unregister(fieldId);
|
|
121006
121080
|
}, [fieldId, formBag, ruleKey]);
|
|
121007
121081
|
const formValue = serializeRichText && !edited && pristineRichValue !== void 0 ? pristineRichValue : serializeRichText ? richTextEditedHtml(pristineRichValue, pristineRichValue === void 0 ? "" : richTextHtmlToPlainText(pristineRichValue), local) : local;
|
|
121008
|
-
|
|
121082
|
+
React13.useEffect(() => {
|
|
121009
121083
|
if (formBag && fieldId) formBag.set(fieldId, formValue);
|
|
121010
121084
|
}, [formValue, fieldId, formBag, binding2]);
|
|
121011
|
-
|
|
121085
|
+
React13.useEffect(() => {
|
|
121012
121086
|
if (previousBinding.current === binding2) return;
|
|
121013
121087
|
previousBinding.current = binding2;
|
|
121014
121088
|
pendingEdits.current = [];
|
|
@@ -121027,7 +121101,7 @@ var init_renderNode = __esm({
|
|
|
121027
121101
|
const errorTextRaw = props.errorText ?? cfg.errorText;
|
|
121028
121102
|
const errorTextResolved = useBoundString(errorTextRaw, ctx);
|
|
121029
121103
|
const workerError = typeof boundError === "string" ? boundError : errorTextRaw == null ? void 0 : errorTextResolved;
|
|
121030
|
-
const validationCatalog =
|
|
121104
|
+
const validationCatalog = React13.useMemo(
|
|
121031
121105
|
() => ctx.catalog ? new Proxy({}, { get: (_t2, k2) => typeof k2 === "string" ? ctx.catalog.get(k2) : void 0 }) : void 0,
|
|
121032
121106
|
[ctx.catalog]
|
|
121033
121107
|
);
|
|
@@ -121042,7 +121116,7 @@ var init_renderNode = __esm({
|
|
|
121042
121116
|
const hasWorkerError = Boolean(workerError && workerError.trim());
|
|
121043
121117
|
const painted2 = rawMessage === null ? "" : translateOnly(rawMessage);
|
|
121044
121118
|
const message2 = !painted2.trim() || ruleMessagePending && !hasWorkerError ? null : painted2;
|
|
121045
|
-
const [feedbackShown, setFeedbackShown] =
|
|
121119
|
+
const [feedbackShown, setFeedbackShown] = React13.useState(false);
|
|
121046
121120
|
const revealed = message2 !== null && shouldRevealError({
|
|
121047
121121
|
rule,
|
|
121048
121122
|
feedbackShown,
|
|
@@ -121051,11 +121125,11 @@ var init_renderNode = __esm({
|
|
|
121051
121125
|
focused: isFocused,
|
|
121052
121126
|
submitAttempted: formBag?.submitAttempted ?? false
|
|
121053
121127
|
});
|
|
121054
|
-
|
|
121128
|
+
React13.useEffect(() => {
|
|
121055
121129
|
if (revealed) setFeedbackShown(true);
|
|
121056
121130
|
}, [revealed]);
|
|
121057
121131
|
const errored = erroredProp || revealed;
|
|
121058
|
-
const generatedId =
|
|
121132
|
+
const generatedId = React13.useId();
|
|
121059
121133
|
const errorId = revealed ? `${componentId ?? generatedId}__error` : void 0;
|
|
121060
121134
|
const emit = (v2) => {
|
|
121061
121135
|
if (onChangeAction && ctx.onAction) {
|
|
@@ -121067,16 +121141,16 @@ var init_renderNode = __esm({
|
|
|
121067
121141
|
});
|
|
121068
121142
|
}
|
|
121069
121143
|
};
|
|
121070
|
-
const ownsPrivateDraft =
|
|
121071
|
-
|
|
121144
|
+
const ownsPrivateDraft = React13.useRef(false);
|
|
121145
|
+
React13.useEffect(() => {
|
|
121072
121146
|
if (visibilityToggle && !isBound) ownsPrivateDraft.current = true;
|
|
121073
121147
|
}, [visibilityToggle, isBound]);
|
|
121074
|
-
const clearSensitiveDraft =
|
|
121148
|
+
const clearSensitiveDraft = React13.useRef(() => {
|
|
121075
121149
|
});
|
|
121076
121150
|
clearSensitiveDraft.current = () => {
|
|
121077
121151
|
if (ownsPrivateDraft.current && !isBound) emit("");
|
|
121078
121152
|
};
|
|
121079
|
-
|
|
121153
|
+
React13.useEffect(() => () => clearSensitiveDraft.current(), []);
|
|
121080
121154
|
const onInput = (e2) => {
|
|
121081
121155
|
const v2 = e2.currentTarget.value;
|
|
121082
121156
|
setLocal(v2);
|
|
@@ -121108,7 +121182,7 @@ var init_renderNode = __esm({
|
|
|
121108
121182
|
const submitLabelRaw = props.submitLabel ?? cfg.submitLabel;
|
|
121109
121183
|
const onSubmitAction = props.onSubmit ?? cfg.onSubmit;
|
|
121110
121184
|
const enterKeyHint = !multilineBox && ENTER_KEY_HINTS.has(submitLabelRaw) ? submitLabelRaw : !multilineBox && onSubmitAction ? "done" : void 0;
|
|
121111
|
-
const inputRef =
|
|
121185
|
+
const inputRef = React13.useRef(null);
|
|
121112
121186
|
useIsomorphicLayoutEffect(() => {
|
|
121113
121187
|
const el2 = inputRef.current;
|
|
121114
121188
|
const view = el2?.ownerDocument?.defaultView;
|
|
@@ -121123,8 +121197,8 @@ var init_renderNode = __esm({
|
|
|
121123
121197
|
}, [local, multilineBox, maxLines]);
|
|
121124
121198
|
const focusBinding = (typeof props.focusPath === "string" ? props.focusPath : typeof cfg.focusPath === "string" ? cfg.focusPath : void 0) ?? "";
|
|
121125
121199
|
const focusTokenVal = useBoundValue(ctx, focusBinding);
|
|
121126
|
-
const lastFocusToken =
|
|
121127
|
-
|
|
121200
|
+
const lastFocusToken = React13.useRef(void 0);
|
|
121201
|
+
React13.useEffect(() => {
|
|
121128
121202
|
if (!focusBinding) return;
|
|
121129
121203
|
const next = typeof focusTokenVal === "string" ? focusTokenVal : typeof focusTokenVal === "number" ? String(focusTokenVal) : "";
|
|
121130
121204
|
if (!next || next === lastFocusToken.current) return;
|
|
@@ -121199,8 +121273,8 @@ var init_renderNode = __esm({
|
|
|
121199
121273
|
};
|
|
121200
121274
|
MENU_ANCHOR_CONTROL = 'a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"]), [role="button"], [role="link"]';
|
|
121201
121275
|
MenuNode = withExtras("MenuNode", ({ props, ctx, wrap }) => {
|
|
121202
|
-
const [open, setOpen] =
|
|
121203
|
-
const hostRef =
|
|
121276
|
+
const [open, setOpen] = React13.useState(false);
|
|
121277
|
+
const hostRef = React13.useRef(null);
|
|
121204
121278
|
const context = menuOpensOnLongPress(props.style);
|
|
121205
121279
|
const itemsPath = typeof props.itemsPath === "string" && props.itemsPath.startsWith("$service:") ? props.itemsPath : "";
|
|
121206
121280
|
const boundItems = useBoundValue(ctx, itemsPath);
|
|
@@ -121208,7 +121282,7 @@ var init_renderNode = __esm({
|
|
|
121208
121282
|
const previewMode = context && props.preview != null;
|
|
121209
121283
|
const items = sourceItems.map((it2) => ({ ...it2, label: typeof it2?.label === "string" && it2.label.startsWith("$item") ? resolveItemDeep2(it2.label, ctx) : it2?.label, disabled: it2?.disabled === true || !it2?.action }));
|
|
121210
121284
|
const C2 = ctx.color;
|
|
121211
|
-
|
|
121285
|
+
React13.useEffect(() => {
|
|
121212
121286
|
if (!open) return;
|
|
121213
121287
|
const onTop = () => menuRef.current != null && isWithinTopModal(menuRef.current);
|
|
121214
121288
|
const onDown = (e2) => {
|
|
@@ -121234,11 +121308,11 @@ var init_renderNode = __esm({
|
|
|
121234
121308
|
const flexGrow = typeof wrap?.flex === "string" ? parseFloat(wrap.flex) : typeof wrap?.flex === "number" ? wrap.flex : Number(wrap?.flexGrow ?? 0);
|
|
121235
121309
|
const fill = wrap?.width === "100%" || Number.isFinite(flexGrow) && flexGrow > 0;
|
|
121236
121310
|
const popupPlacement = fill ? { position: "absolute", top: "100%", left: 0, right: 0, zIndex: 20, marginTop: 4 } : { position: "absolute", top: "100%", right: 0, zIndex: 20, marginTop: 4 };
|
|
121237
|
-
const anchorRef =
|
|
121238
|
-
const menuRef =
|
|
121239
|
-
const dialogRef =
|
|
121240
|
-
const [popupAlignLeft, setPopupAlignLeft] =
|
|
121241
|
-
const [popupAbove, setPopupAbove] =
|
|
121311
|
+
const anchorRef = React13.useRef(null);
|
|
121312
|
+
const menuRef = React13.useRef(null);
|
|
121313
|
+
const dialogRef = React13.useRef(null);
|
|
121314
|
+
const [popupAlignLeft, setPopupAlignLeft] = React13.useState(false);
|
|
121315
|
+
const [popupAbove, setPopupAbove] = React13.useState(false);
|
|
121242
121316
|
useIsomorphicLayoutEffect(() => {
|
|
121243
121317
|
if (!open || !anchorRef.current || !menuRef.current) return;
|
|
121244
121318
|
const anchor = anchorRef.current.getBoundingClientRect();
|
|
@@ -121260,8 +121334,8 @@ var init_renderNode = __esm({
|
|
|
121260
121334
|
setPopupAlignLeft(anchor.right - popup.width < left);
|
|
121261
121335
|
setPopupAbove(anchor.bottom + popup.height + 4 > bottom && anchor.top - popup.height - 4 >= top);
|
|
121262
121336
|
});
|
|
121263
|
-
const [innerControl, setInnerControl] =
|
|
121264
|
-
const innerControlRef =
|
|
121337
|
+
const [innerControl, setInnerControl] = React13.useState(null);
|
|
121338
|
+
const innerControlRef = React13.useRef(null);
|
|
121265
121339
|
useIsomorphicLayoutEffect(() => {
|
|
121266
121340
|
const anchor = anchorRef.current;
|
|
121267
121341
|
const refresh = () => {
|
|
@@ -121277,7 +121351,7 @@ var init_renderNode = __esm({
|
|
|
121277
121351
|
observer.observe(anchor, { childList: true, subtree: true, attributes: true, attributeFilter: ["disabled", "tabindex", "href", "role"] });
|
|
121278
121352
|
return () => observer.disconnect();
|
|
121279
121353
|
});
|
|
121280
|
-
|
|
121354
|
+
React13.useEffect(() => {
|
|
121281
121355
|
if (!innerControl) return;
|
|
121282
121356
|
innerControl.setAttribute("aria-haspopup", "menu");
|
|
121283
121357
|
innerControl.setAttribute("aria-expanded", String(open));
|
|
@@ -121289,13 +121363,13 @@ var init_renderNode = __esm({
|
|
|
121289
121363
|
};
|
|
121290
121364
|
}, [innerControl, open]);
|
|
121291
121365
|
const itemsKey = items.map((it2, i2) => `${it2?.id ?? i2}:${it2?.disabled ? 0 : 1}`).join("|");
|
|
121292
|
-
|
|
121366
|
+
React13.useEffect(() => {
|
|
121293
121367
|
if (!open || !modal) return;
|
|
121294
121368
|
const menu = menuRef.current;
|
|
121295
121369
|
if (!menu || menu.contains(document.activeElement)) return;
|
|
121296
121370
|
(menu.querySelector('[role="menuitem"][tabindex="0"]') ?? menu).focus();
|
|
121297
121371
|
}, [open, modal, itemsKey]);
|
|
121298
|
-
|
|
121372
|
+
React13.useEffect(() => {
|
|
121299
121373
|
if (!open || !modal) return;
|
|
121300
121374
|
const layer = pushModalLayer(() => dialogRef.current);
|
|
121301
121375
|
return () => {
|
|
@@ -121317,11 +121391,11 @@ var init_renderNode = __esm({
|
|
|
121317
121391
|
e2.preventDefault();
|
|
121318
121392
|
items2[next].focus();
|
|
121319
121393
|
};
|
|
121320
|
-
const pressTimer =
|
|
121321
|
-
const longPressed =
|
|
121322
|
-
const touchOrigin =
|
|
121323
|
-
const suppressNextClick =
|
|
121324
|
-
const suppressTimer =
|
|
121394
|
+
const pressTimer = React13.useRef(null);
|
|
121395
|
+
const longPressed = React13.useRef(false);
|
|
121396
|
+
const touchOrigin = React13.useRef(null);
|
|
121397
|
+
const suppressNextClick = React13.useRef(false);
|
|
121398
|
+
const suppressTimer = React13.useRef(null);
|
|
121325
121399
|
const clearSuppress = () => {
|
|
121326
121400
|
suppressNextClick.current = false;
|
|
121327
121401
|
if (suppressTimer.current != null) {
|
|
@@ -121335,7 +121409,7 @@ var init_renderNode = __esm({
|
|
|
121335
121409
|
pressTimer.current = null;
|
|
121336
121410
|
}
|
|
121337
121411
|
};
|
|
121338
|
-
|
|
121412
|
+
React13.useEffect(() => () => {
|
|
121339
121413
|
cancelPress();
|
|
121340
121414
|
clearSuppress();
|
|
121341
121415
|
}, []);
|
|
@@ -121501,9 +121575,9 @@ var init_renderNode = __esm({
|
|
|
121501
121575
|
const isBound = typeof raw === "string" && isBinding(raw);
|
|
121502
121576
|
const bound2 = useBoundValue(ctx, isBound ? raw : "");
|
|
121503
121577
|
const cursor = isBound ? typeof bound2 === "string" ? bound2 : "" : String(raw ?? "");
|
|
121504
|
-
const ref =
|
|
121505
|
-
const fired =
|
|
121506
|
-
|
|
121578
|
+
const ref = React13.useRef(null);
|
|
121579
|
+
const fired = React13.useRef("");
|
|
121580
|
+
React13.useEffect(() => {
|
|
121507
121581
|
fired.current = "";
|
|
121508
121582
|
const el2 = ref.current;
|
|
121509
121583
|
if (!cursor || !ctx.onAction || !el2 || typeof IntersectionObserver === "undefined") return;
|
|
@@ -121534,11 +121608,11 @@ var init_renderNode = __esm({
|
|
|
121534
121608
|
] });
|
|
121535
121609
|
});
|
|
121536
121610
|
FormView = withExtras("FormView", ({ props, ctx, wrap }) => {
|
|
121537
|
-
const bagRef =
|
|
121611
|
+
const bagRef = React13.useRef(null);
|
|
121538
121612
|
if (!bagRef.current) bagRef.current = createFormBag();
|
|
121539
121613
|
const bag = bagRef.current;
|
|
121540
|
-
|
|
121541
|
-
|
|
121614
|
+
React13.useSyncExternalStore(
|
|
121615
|
+
React13.useCallback((cb) => bag.subscribe(cb), [bag]),
|
|
121542
121616
|
() => bag.version,
|
|
121543
121617
|
() => bag.version
|
|
121544
121618
|
);
|
|
@@ -121555,7 +121629,7 @@ var init_renderNode = __esm({
|
|
|
121555
121629
|
ctx.onAction?.({ ...action, args: merged });
|
|
121556
121630
|
}
|
|
121557
121631
|
};
|
|
121558
|
-
const submitNode =
|
|
121632
|
+
const submitNode = React13.useMemo(() => {
|
|
121559
121633
|
const node = props.submitButton;
|
|
121560
121634
|
if (!node || valid) return node;
|
|
121561
121635
|
if (node.body) return { ...node, body: { ...node.body, props: { ...node.body.props ?? {}, disabled: true } } };
|
|
@@ -121605,11 +121679,11 @@ var init_renderNode = __esm({
|
|
|
121605
121679
|
const startPositionPath = typeof props.startPositionSeconds === "string" && isBinding(props.startPositionSeconds) ? props.startPositionSeconds : "";
|
|
121606
121680
|
const boundStartPosition = useResolvedScalar(startPositionPath || void 0, ctx);
|
|
121607
121681
|
const initialStartPosition = startPositionPath && typeof boundStartPosition === "number" && Number.isFinite(boundStartPosition) ? Math.max(0, boundStartPosition) : Math.max(0, Number.isFinite(Number(props.startPositionSeconds)) ? Number(props.startPositionSeconds) : 0);
|
|
121608
|
-
const [index, setIndex] =
|
|
121682
|
+
const [index, setIndex] = React13.useState(initialIndex);
|
|
121609
121683
|
const queueReady = !itemsPath || Array.isArray(boundQueue);
|
|
121610
121684
|
const seatKey = `${itemsPath ?? ""}|${startIndex}`;
|
|
121611
|
-
const seated =
|
|
121612
|
-
|
|
121685
|
+
const seated = React13.useRef(null);
|
|
121686
|
+
React13.useEffect(() => {
|
|
121613
121687
|
const last = Math.max(0, resolvedItems.length - 1);
|
|
121614
121688
|
if (resolvedItems.length === 0) return;
|
|
121615
121689
|
if (queueReady && seated.current !== seatKey) {
|
|
@@ -121624,19 +121698,19 @@ var init_renderNode = __esm({
|
|
|
121624
121698
|
}
|
|
121625
121699
|
setIndex((i2) => Math.min(Math.max(0, i2), last));
|
|
121626
121700
|
}, [resolvedItems.length, startIndex, queueReady, seatKey]);
|
|
121627
|
-
const [status, setStatus] =
|
|
121628
|
-
const [position, setPosition] =
|
|
121629
|
-
const [duration2, setDuration] =
|
|
121630
|
-
const [buffered, setBuffered] =
|
|
121631
|
-
const [rate, setRateState] =
|
|
121632
|
-
const [fullscreen, setFullscreen] =
|
|
121633
|
-
const [error, setError] =
|
|
121634
|
-
const mediaRef =
|
|
121635
|
-
const hostRef =
|
|
121636
|
-
const autoplayConsumed =
|
|
121701
|
+
const [status, setStatus] = React13.useState("idle");
|
|
121702
|
+
const [position, setPosition] = React13.useState(initialStartPosition);
|
|
121703
|
+
const [duration2, setDuration] = React13.useState(0);
|
|
121704
|
+
const [buffered, setBuffered] = React13.useState(0);
|
|
121705
|
+
const [rate, setRateState] = React13.useState(1);
|
|
121706
|
+
const [fullscreen, setFullscreen] = React13.useState(false);
|
|
121707
|
+
const [error, setError] = React13.useState("");
|
|
121708
|
+
const mediaRef = React13.useRef(null);
|
|
121709
|
+
const hostRef = React13.useRef(null);
|
|
121710
|
+
const autoplayConsumed = React13.useRef(false);
|
|
121637
121711
|
const item = resolvedItems[index];
|
|
121638
121712
|
const mediaKey2 = `${index}:${item?.id ?? item?.url ?? ""}`;
|
|
121639
|
-
|
|
121713
|
+
React13.useEffect(() => {
|
|
121640
121714
|
const outgoing = mediaRef.current;
|
|
121641
121715
|
return () => {
|
|
121642
121716
|
try {
|
|
@@ -121650,7 +121724,7 @@ var init_renderNode = __esm({
|
|
|
121650
121724
|
const isYouTube = provider === "youtube";
|
|
121651
121725
|
const isUnsupportedProvider = provider !== "direct" && !isYouTube;
|
|
121652
121726
|
const isAudio = ["audio", "podcast", "radio"].includes(String(item?.kind ?? ""));
|
|
121653
|
-
const capabilities =
|
|
121727
|
+
const capabilities = React13.useMemo(() => ({
|
|
121654
121728
|
seek: !isUnsupportedProvider && item?.live !== true,
|
|
121655
121729
|
rate: !isUnsupportedProvider && item?.live !== true,
|
|
121656
121730
|
queue: !isUnsupportedProvider && items.length > 1,
|
|
@@ -121678,9 +121752,9 @@ var init_renderNode = __esm({
|
|
|
121678
121752
|
error,
|
|
121679
121753
|
capabilities
|
|
121680
121754
|
};
|
|
121681
|
-
const slotProvider =
|
|
121682
|
-
|
|
121683
|
-
|
|
121755
|
+
const slotProvider = React13.useMemo(() => new MediaSlotProvider(state), []);
|
|
121756
|
+
React13.useEffect(() => slotProvider.set(state));
|
|
121757
|
+
React13.useEffect(() => {
|
|
121684
121758
|
if (!startPositionPath || typeof boundStartPosition !== "number" || !Number.isFinite(boundStartPosition) || status !== "idle") return;
|
|
121685
121759
|
const next = Math.max(0, boundStartPosition);
|
|
121686
121760
|
setPosition(next);
|
|
@@ -121691,7 +121765,7 @@ var init_renderNode = __esm({
|
|
|
121691
121765
|
}
|
|
121692
121766
|
}
|
|
121693
121767
|
}, [startPositionPath, boundStartPosition, status]);
|
|
121694
|
-
const emit =
|
|
121768
|
+
const emit = React13.useCallback((action, extra = {}) => {
|
|
121695
121769
|
if (!action || !ctx.onAction) return;
|
|
121696
121770
|
const snapshot3 = {
|
|
121697
121771
|
sessionId,
|
|
@@ -121710,13 +121784,13 @@ var init_renderNode = __esm({
|
|
|
121710
121784
|
};
|
|
121711
121785
|
ctx.onAction({ ...action, args: { ...action.args ?? {}, ...snapshot3, ...extra }, params: { ...action.params ?? {}, sessionId, index: String(index), ...Object.fromEntries(Object.entries(extra).map(([k2, v2]) => [k2, String(v2)])) } });
|
|
121712
121786
|
}, [ctx.onAction, sessionId, status, index, position, duration2, item, buffered, rate, props.muted, fullscreen, error]);
|
|
121713
|
-
|
|
121787
|
+
React13.useEffect(() => {
|
|
121714
121788
|
if (!isUnsupportedProvider || status === "error") return;
|
|
121715
121789
|
setStatus("error");
|
|
121716
121790
|
setError("provider_unsupported");
|
|
121717
121791
|
emit(props.onError, { state: "error", status: "error", error: "provider_unsupported", code: "provider_unsupported" });
|
|
121718
121792
|
}, [isUnsupportedProvider, status, emit, props.onError]);
|
|
121719
|
-
const play =
|
|
121793
|
+
const play = React13.useCallback(async () => {
|
|
121720
121794
|
if (isYouTube) return;
|
|
121721
121795
|
if (isUnsupportedProvider) {
|
|
121722
121796
|
setStatus("error");
|
|
@@ -121738,17 +121812,17 @@ var init_renderNode = __esm({
|
|
|
121738
121812
|
emit(props.onError, { state: "blocked", status: "blocked", error: message2, code: "playback_blocked" });
|
|
121739
121813
|
}
|
|
121740
121814
|
}, [isYouTube, isUnsupportedProvider, emit, props.onError]);
|
|
121741
|
-
const pause =
|
|
121815
|
+
const pause = React13.useCallback(() => {
|
|
121742
121816
|
mediaRef.current?.pause();
|
|
121743
121817
|
setStatus("paused");
|
|
121744
121818
|
}, []);
|
|
121745
|
-
const seek =
|
|
121819
|
+
const seek = React13.useCallback((seconds) => {
|
|
121746
121820
|
const media = mediaRef.current;
|
|
121747
121821
|
if (!media || !Number.isFinite(seconds)) return;
|
|
121748
121822
|
media.currentTime = Math.max(0, Math.min(seconds, Number.isFinite(media.duration) ? media.duration : seconds));
|
|
121749
121823
|
setPosition(media.currentTime);
|
|
121750
121824
|
}, []);
|
|
121751
|
-
const select2 =
|
|
121825
|
+
const select2 = React13.useCallback((next) => {
|
|
121752
121826
|
if (resolvedItems.length === 0) return;
|
|
121753
121827
|
const normalized = (next % resolvedItems.length + resolvedItems.length) % resolvedItems.length;
|
|
121754
121828
|
const nextItem = resolvedItems[normalized];
|
|
@@ -121770,7 +121844,7 @@ var init_renderNode = __esm({
|
|
|
121770
121844
|
error: ""
|
|
121771
121845
|
});
|
|
121772
121846
|
}, [resolvedItems, emit, props.onItemChange]);
|
|
121773
|
-
const toggleFullscreen =
|
|
121847
|
+
const toggleFullscreen = React13.useCallback(async () => {
|
|
121774
121848
|
if (props.fullscreen === "disabled") return;
|
|
121775
121849
|
const host = hostRef.current;
|
|
121776
121850
|
try {
|
|
@@ -121780,7 +121854,7 @@ var init_renderNode = __esm({
|
|
|
121780
121854
|
setFullscreen((value2) => !value2);
|
|
121781
121855
|
}
|
|
121782
121856
|
}, [props.fullscreen]);
|
|
121783
|
-
|
|
121857
|
+
React13.useEffect(() => {
|
|
121784
121858
|
const listener = (event) => {
|
|
121785
121859
|
const detail = event.detail;
|
|
121786
121860
|
if (!detail || detail.sessionId !== sessionId) return;
|
|
@@ -121828,7 +121902,7 @@ var init_renderNode = __esm({
|
|
|
121828
121902
|
window.addEventListener("himalaya-media-command", listener);
|
|
121829
121903
|
return () => window.removeEventListener("himalaya-media-command", listener);
|
|
121830
121904
|
}, [sessionId, index, play, pause, seek, select2, toggleFullscreen]);
|
|
121831
|
-
|
|
121905
|
+
React13.useEffect(() => {
|
|
121832
121906
|
const listener = () => {
|
|
121833
121907
|
const value2 = document.fullscreenElement === hostRef.current;
|
|
121834
121908
|
setFullscreen(value2);
|
|
@@ -121837,14 +121911,14 @@ var init_renderNode = __esm({
|
|
|
121837
121911
|
document.addEventListener("fullscreenchange", listener);
|
|
121838
121912
|
return () => document.removeEventListener("fullscreenchange", listener);
|
|
121839
121913
|
}, [emit, props.onFullscreenChange]);
|
|
121840
|
-
|
|
121914
|
+
React13.useEffect(() => {
|
|
121841
121915
|
const media = mediaRef.current;
|
|
121842
121916
|
if (!media || isYouTube || isUnsupportedProvider) return;
|
|
121843
121917
|
media.muted = props.muted === true;
|
|
121844
121918
|
media.playbackRate = rate;
|
|
121845
121919
|
if (position > 0) media.currentTime = position;
|
|
121846
121920
|
}, [item?.url, isUnsupportedProvider]);
|
|
121847
|
-
|
|
121921
|
+
React13.useEffect(() => {
|
|
121848
121922
|
if (isYouTube || isUnsupportedProvider || props.autoplay === "never" || autoplayConsumed.current) return;
|
|
121849
121923
|
if (props.autoplay === "once") {
|
|
121850
121924
|
autoplayConsumed.current = true;
|
|
@@ -122046,15 +122120,15 @@ var init_renderNode = __esm({
|
|
|
122046
122120
|
}
|
|
122047
122121
|
);
|
|
122048
122122
|
});
|
|
122049
|
-
PdfDocumentCanvas =
|
|
122123
|
+
PdfDocumentCanvas = React13.lazy(() => Promise.resolve().then(() => (init_pdfDocument(), pdfDocument_exports)).then((module) => ({ default: module.PdfDocument })));
|
|
122050
122124
|
PdfViewNode = withExtras("PdfViewNode", ({ props, ctx, wrap }) => {
|
|
122051
122125
|
const boundUrl = useResolvedScalar(props.url != null && isBinding(props.url) ? props.url : void 0, ctx);
|
|
122052
122126
|
const url = props.url != null && isBinding(props.url) ? boundUrl : props.url;
|
|
122053
122127
|
const rawUrl = typeof url === "string" && !isBinding(url) ? url : "";
|
|
122054
122128
|
const plan = rawUrl ? pdfEmbedPlan(rawUrl, void 0, typeof document !== "undefined" ? document.baseURI : void 0) : null;
|
|
122055
122129
|
const retypeSrc = plan?.mode === "retype" ? plan.src : null;
|
|
122056
|
-
const [retyped, setRetyped] =
|
|
122057
|
-
|
|
122130
|
+
const [retyped, setRetyped] = React13.useState(null);
|
|
122131
|
+
React13.useEffect(() => {
|
|
122058
122132
|
if (!retypeSrc) return;
|
|
122059
122133
|
let live3 = true;
|
|
122060
122134
|
let made = null;
|
|
@@ -122076,11 +122150,11 @@ var init_renderNode = __esm({
|
|
|
122076
122150
|
}, [retypeSrc]);
|
|
122077
122151
|
const settled = retyped && retyped.from === retypeSrc ? retyped : null;
|
|
122078
122152
|
const wantsShare = props.allowShare === true;
|
|
122079
|
-
const [fellBackFrom, setFellBackFrom] =
|
|
122153
|
+
const [fellBackFrom, setFellBackFrom] = React13.useState(null);
|
|
122080
122154
|
const directFellBack = plan?.mode === "direct" && fellBackFrom === plan.src;
|
|
122081
122155
|
const directSrc = plan?.mode === "direct" && (wantsShare || props.showPageControls !== false && directFellBack) ? plan.src : null;
|
|
122082
|
-
const [direct, setDirect] =
|
|
122083
|
-
|
|
122156
|
+
const [direct, setDirect] = React13.useState(null);
|
|
122157
|
+
React13.useEffect(() => {
|
|
122084
122158
|
if (!directSrc) return;
|
|
122085
122159
|
let live3 = true;
|
|
122086
122160
|
let made = null;
|
|
@@ -122097,16 +122171,16 @@ var init_renderNode = __esm({
|
|
|
122097
122171
|
}, [directSrc, wantsShare]);
|
|
122098
122172
|
const directDoc = direct && direct.from === directSrc ? direct : null;
|
|
122099
122173
|
const fallbackPageCount = plan?.mode === "retype" ? settled?.pageCount ?? null : directDoc?.count ?? null;
|
|
122100
|
-
const [nav, setNav] =
|
|
122174
|
+
const [nav, setNav] = React13.useState({ from: rawUrl, page: null, zoom: null });
|
|
122101
122175
|
const view = nav.from === rawUrl ? nav : { from: rawUrl, page: null, zoom: null };
|
|
122102
122176
|
const src = plan?.mode === "direct" ? plan.src : settled?.url ?? null;
|
|
122103
|
-
const [canvasCount, setCanvasCount] =
|
|
122104
|
-
const onPageCount =
|
|
122177
|
+
const [canvasCount, setCanvasCount] = React13.useState(null);
|
|
122178
|
+
const onPageCount = React13.useCallback((count2) => {
|
|
122105
122179
|
if (!Number.isInteger(count2) || count2 < 1) return;
|
|
122106
122180
|
setCanvasCount((cur) => cur?.from === src && cur.count === count2 ? cur : { from: src, count: count2 });
|
|
122107
122181
|
}, [src]);
|
|
122108
122182
|
const pageCount = canvasCount?.from === src ? canvasCount.count : fallbackPageCount;
|
|
122109
|
-
const onFallback =
|
|
122183
|
+
const onFallback = React13.useCallback(() => setFellBackFrom(src), [src]);
|
|
122110
122184
|
const loading = plan?.mode === "retype" && !settled || directSrc != null && wantsShare && !directDoc && typeof window !== "undefined";
|
|
122111
122185
|
const loadSrc = plan?.mode === "direct" && wantsShare ? directDoc?.blobUrl ?? src : src;
|
|
122112
122186
|
const ph = typeof props.height === "number" && props.height > 0 ? props.height : void 0;
|
|
@@ -122156,7 +122230,7 @@ var init_renderNode = __esm({
|
|
|
122156
122230
|
const data = base + pdfOpenFragment(sourceHash, { page, zoom: zoomable ? view.zoom : null, fitWidth: !zoomable });
|
|
122157
122231
|
const label3 = typeof props.title === "string" && props.title ? props.title : "PDF document";
|
|
122158
122232
|
const documentStyle = showPageControls || zoomable || allowShare ? { display: "block", width: "100%", flex: "1 1 auto", minHeight: ph ? 0 : 280, border: "none" } : frame;
|
|
122159
|
-
const object10 = typeof window === "undefined" ? /* @__PURE__ */ jsx11("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx11(
|
|
122233
|
+
const object10 = typeof window === "undefined" ? /* @__PURE__ */ jsx11("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx11(React13.Suspense, { fallback: /* @__PURE__ */ jsx11("div", { "data-himalaya-pdf": "loading", role: "img", "aria-label": "loading document", "aria-busy": "true", style: documentStyle }), children: /* @__PURE__ */ jsx11(
|
|
122160
122234
|
PdfDocumentCanvas,
|
|
122161
122235
|
{
|
|
122162
122236
|
src: loadSrc ?? src,
|
|
@@ -122238,7 +122312,7 @@ var init_renderNode = __esm({
|
|
|
122238
122312
|
const ar2 = typeof props.aspectRatio === "number" && props.aspectRatio > 0 ? props.aspectRatio : void 0;
|
|
122239
122313
|
const frameStyle = { width: "100%", boxSizing: "border-box", border: "none", borderRadius: ctx.radius("md", 8), background: "#fff", ...scrollEnabled ? {} : { overflow: "hidden" }, ...fill ? { flex: "1 1 0", minHeight: 0 } : h2 ? { height: h2 } : ar2 ? { aspectRatio: String(ar2) } : { height: 200 } };
|
|
122240
122314
|
const reloadValue = reloadKeyOf(useResolvedScalar(props.reloadKeyPath != null && isBinding(props.reloadKeyPath) ? props.reloadKeyPath : void 0, ctx));
|
|
122241
|
-
const reloadState =
|
|
122315
|
+
const reloadState = React13.useRef({ base: null, epoch: 0 });
|
|
122242
122316
|
if (reloadValue !== null && reloadValue !== reloadState.current.base) {
|
|
122243
122317
|
if (reloadState.current.base !== null) reloadState.current.epoch++;
|
|
122244
122318
|
reloadState.current.base = reloadValue;
|
|
@@ -122246,11 +122320,11 @@ var init_renderNode = __esm({
|
|
|
122246
122320
|
const reloadKey = reloadState.current.epoch > 0 ? String(reloadState.current.epoch) : "";
|
|
122247
122321
|
const sourceKey = htmlStr ?? urlFrame?.src ?? null;
|
|
122248
122322
|
const frameKey = sourceKey == null ? null : reloadKey ? `${sourceKey}\0${reloadKey}` : sourceKey;
|
|
122249
|
-
const [loadedKey, setLoadedKey] =
|
|
122323
|
+
const [loadedKey, setLoadedKey] = React13.useState(null);
|
|
122250
122324
|
const loaded = loadedKey === frameKey;
|
|
122251
122325
|
const bridgeChannel = props.bridge === "worker" ? webViewChannelOf(ctx.provider) : null;
|
|
122252
|
-
const frameRef =
|
|
122253
|
-
const bridgeLoad =
|
|
122326
|
+
const frameRef = React13.useRef(null);
|
|
122327
|
+
const bridgeLoad = React13.useRef({ loaded: false });
|
|
122254
122328
|
if (bridgeLoad.current.key !== frameKey) {
|
|
122255
122329
|
bridgeLoad.current.key = frameKey;
|
|
122256
122330
|
bridgeLoad.current.loaded = false;
|
|
@@ -122274,7 +122348,7 @@ var init_renderNode = __esm({
|
|
|
122274
122348
|
return /* @__PURE__ */ jsxs8("div", { style: { width: "100%", position: "relative", ...fill ? { height: "100%", flex: "1 1 0", minHeight: 0, display: "flex", flexDirection: "column" } : {}, ...bandColor ? { background: bandColor, borderRadius: ctx.radius("md", 8), overflow: "hidden" } : {}, ...wrap }, children: [
|
|
122275
122349
|
bandColor ? /* @__PURE__ */ jsx11("div", { "data-testid": "webview-cover-band", style: { height: 8, background: bandColor } }) : null,
|
|
122276
122350
|
htmlStr ? /* @__PURE__ */ jsx11("iframe", { ...frameProps, srcDoc: htmlStr, sandbox: "allow-scripts" }, frameKey ?? void 0) : urlFrame ? /* @__PURE__ */ jsx11("iframe", { ...frameProps, src: urlFrame.src, sandbox: urlFrame.sandbox }, frameKey ?? void 0) : /* @__PURE__ */ jsx11("div", { style: { ...frameStyle, display: "grid", placeItems: "center", color: "#999", fontFamily: "ui-monospace, monospace", fontSize: pxToRem(11), border: "1px dashed #ccc" }, children: urlStr ? "WebView (url not allowed)" : "WebView (no url)" }),
|
|
122277
|
-
bridgeChannel ? /* @__PURE__ */ jsx11(
|
|
122351
|
+
bridgeChannel ? /* @__PURE__ */ jsx11(React13.Suspense, { fallback: null, children: /* @__PURE__ */ jsx11(
|
|
122278
122352
|
WebViewBridgeHost2,
|
|
122279
122353
|
{
|
|
122280
122354
|
channel: bridgeChannel,
|
|
@@ -122304,19 +122378,19 @@ var init_renderNode = __esm({
|
|
|
122304
122378
|
const onChange = props.onChange;
|
|
122305
122379
|
const boundSel = useResolvedScalar(isBinding(props.selectedId) ? props.selectedId : void 0, ctx);
|
|
122306
122380
|
const selectedId = isBinding(props.selectedId) ? boundSel : props.selectedId;
|
|
122307
|
-
const [sel, setSel] =
|
|
122308
|
-
|
|
122381
|
+
const [sel, setSel] = React13.useState(ctx.empty ? "" : String(selectedId ?? ""));
|
|
122382
|
+
React13.useEffect(() => {
|
|
122309
122383
|
if (!ctx.empty && selectedId != null) setSel(String(selectedId));
|
|
122310
122384
|
}, [selectedId, ctx.empty]);
|
|
122311
|
-
const pickerBag =
|
|
122385
|
+
const pickerBag = React13.useContext(FormValuesContext);
|
|
122312
122386
|
const pickerFieldId = props.__formFieldId;
|
|
122313
122387
|
const pickerRuleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
122314
|
-
|
|
122388
|
+
React13.useEffect(() => {
|
|
122315
122389
|
if (!pickerBag || !pickerFieldId) return;
|
|
122316
122390
|
pickerBag.register(pickerFieldId, props.validation);
|
|
122317
122391
|
return () => pickerBag.unregister(pickerFieldId);
|
|
122318
122392
|
}, [pickerFieldId, pickerBag, pickerRuleKey]);
|
|
122319
|
-
|
|
122393
|
+
React13.useEffect(() => {
|
|
122320
122394
|
if (pickerBag && pickerFieldId) pickerBag.set(pickerFieldId, sel);
|
|
122321
122395
|
}, [sel, pickerFieldId, pickerBag]);
|
|
122322
122396
|
const emitPick = (id) => {
|
|
@@ -122432,24 +122506,24 @@ var init_renderNode = __esm({
|
|
|
122432
122506
|
const s2 = seedUnix();
|
|
122433
122507
|
return s2 == null ? null : clampUnix(s2);
|
|
122434
122508
|
};
|
|
122435
|
-
const [val, setVal] =
|
|
122509
|
+
const [val, setVal] = React13.useState(ctx.empty ? "" : toInput(shownSeed()));
|
|
122436
122510
|
const dateServiceBound = typeof props.valuePath === "string" && props.valuePath.startsWith("$service:");
|
|
122437
122511
|
const bagSource = () => dateServiceBound ? boundRaw : boundRaw !== void 0 && boundRaw !== null && boundRaw !== "" ? boundRaw : props.valueUnix;
|
|
122438
|
-
const [dateBagVal, setDateBagVal] =
|
|
122439
|
-
|
|
122512
|
+
const [dateBagVal, setDateBagVal] = React13.useState(ctx.empty ? "" : clampDateFieldValue(encodeDateFieldValue(bagSource()), props.minUnix, props.maxUnix, props.mode));
|
|
122513
|
+
React13.useEffect(() => {
|
|
122440
122514
|
if (ctx.empty) return;
|
|
122441
122515
|
setVal(toInput(shownSeed()));
|
|
122442
122516
|
setDateBagVal(clampDateFieldValue(encodeDateFieldValue(bagSource()), props.minUnix, props.maxUnix, props.mode));
|
|
122443
122517
|
}, [boundRaw, props.valueUnix, props.valuePath, ctx.empty]);
|
|
122444
|
-
const dateBag =
|
|
122518
|
+
const dateBag = React13.useContext(FormValuesContext);
|
|
122445
122519
|
const dateFieldId = props.__formFieldId;
|
|
122446
122520
|
const dateRuleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
122447
|
-
|
|
122521
|
+
React13.useEffect(() => {
|
|
122448
122522
|
if (!dateBag || !dateFieldId) return;
|
|
122449
122523
|
dateBag.register(dateFieldId, props.validation);
|
|
122450
122524
|
return () => dateBag.unregister(dateFieldId);
|
|
122451
122525
|
}, [dateFieldId, dateBag, dateRuleKey]);
|
|
122452
|
-
|
|
122526
|
+
React13.useEffect(() => {
|
|
122453
122527
|
if (dateBag && dateFieldId) dateBag.set(dateFieldId, dateBagVal);
|
|
122454
122528
|
}, [dateBagVal, dateFieldId, dateBag]);
|
|
122455
122529
|
if (!ctx.onAction) {
|
|
@@ -122518,11 +122592,11 @@ var init_renderNode = __esm({
|
|
|
122518
122592
|
const valueBinding = isBinding(props.value) ? props.value : void 0;
|
|
122519
122593
|
const boundValue = useResolvedScalar(valueBinding, ctx);
|
|
122520
122594
|
const initialValue2 = ctx.empty ? "" : valueBinding ? boundValue == null ? "" : String(boundValue) : String(props.value ?? "");
|
|
122521
|
-
const [local, setLocal] =
|
|
122522
|
-
|
|
122595
|
+
const [local, setLocal] = React13.useState(initialValue2);
|
|
122596
|
+
React13.useEffect(() => {
|
|
122523
122597
|
if (!ctx.empty && valueBinding) setLocal(boundValue == null ? "" : String(boundValue));
|
|
122524
122598
|
}, [boundValue, ctx.empty, valueBinding]);
|
|
122525
|
-
const timer =
|
|
122599
|
+
const timer = React13.useRef(null);
|
|
122526
122600
|
const dispatch = (action, v2) => {
|
|
122527
122601
|
if (!action || !ctx.onAction) return;
|
|
122528
122602
|
ctx.onAction({ ...action, params: { ...action.params ?? {}, value: v2 }, args: { ...action.args ?? {}, value: v2 } });
|
|
@@ -122564,33 +122638,33 @@ var init_renderNode = __esm({
|
|
|
122564
122638
|
const boundValue = useResolvedScalar(props.valuePath, ctx);
|
|
122565
122639
|
const effectiveValue = props.valuePath != null ? boundValue : props.value;
|
|
122566
122640
|
const fallbackValue = effectiveValue ?? props.value ?? 0;
|
|
122567
|
-
const [value2, setValue] =
|
|
122641
|
+
const [value2, setValue] = React13.useState(() => {
|
|
122568
122642
|
const seed2 = Number(fallbackValue);
|
|
122569
122643
|
return Number.isFinite(seed2) ? Math.min(max, Math.max(min, seed2)) : 0;
|
|
122570
122644
|
});
|
|
122571
|
-
|
|
122645
|
+
React13.useEffect(() => {
|
|
122572
122646
|
const next = Number(fallbackValue);
|
|
122573
122647
|
if (Number.isFinite(next)) setValue(Math.min(max, Math.max(min, next)));
|
|
122574
122648
|
}, [fallbackValue, min, max]);
|
|
122575
|
-
const stepperBag =
|
|
122649
|
+
const stepperBag = React13.useContext(FormValuesContext);
|
|
122576
122650
|
const stepperFieldId = props.__formFieldId;
|
|
122577
122651
|
const stepperRuleKey = props.validation ? JSON.stringify(props.validation) : "";
|
|
122578
|
-
|
|
122652
|
+
React13.useEffect(() => {
|
|
122579
122653
|
if (!stepperBag || !stepperFieldId) return;
|
|
122580
122654
|
stepperBag.register(stepperFieldId, props.validation);
|
|
122581
122655
|
return () => stepperBag.unregister(stepperFieldId);
|
|
122582
122656
|
}, [stepperFieldId, stepperBag, stepperRuleKey]);
|
|
122583
122657
|
const serviceBound = typeof props.valuePath === "string" && isBinding(props.valuePath) && props.valuePath.startsWith("$service:");
|
|
122584
|
-
const [bagValue, setBagValue] =
|
|
122585
|
-
|
|
122658
|
+
const [bagValue, setBagValue] = React13.useState(() => serviceBound ? boundValue != null ? encodeStepperFieldValue(boundValue, { min, max }) : "" : encodeStepperFieldValue(value2, { min, max }));
|
|
122659
|
+
React13.useEffect(() => {
|
|
122586
122660
|
if (!serviceBound || boundValue == null) return;
|
|
122587
122661
|
setBagValue(encodeStepperFieldValue(boundValue, { min, max }));
|
|
122588
122662
|
}, [boundValue, serviceBound, min, max]);
|
|
122589
|
-
|
|
122663
|
+
React13.useEffect(() => {
|
|
122590
122664
|
if (serviceBound) return;
|
|
122591
122665
|
setBagValue(encodeStepperFieldValue(value2, { min, max }));
|
|
122592
122666
|
}, [value2, serviceBound, min, max]);
|
|
122593
|
-
|
|
122667
|
+
React13.useEffect(() => {
|
|
122594
122668
|
if (stepperBag && stepperFieldId) stepperBag.set(stepperFieldId, bagValue);
|
|
122595
122669
|
}, [bagValue, stepperFieldId, stepperBag]);
|
|
122596
122670
|
const dispatch = (next) => {
|
|
@@ -122605,7 +122679,7 @@ var init_renderNode = __esm({
|
|
|
122605
122679
|
dispatch(next);
|
|
122606
122680
|
return next;
|
|
122607
122681
|
};
|
|
122608
|
-
const [pressed, setPressed] =
|
|
122682
|
+
const [pressed, setPressed] = React13.useState({ text: "", count: 0 });
|
|
122609
122683
|
const bump = (delta) => commit(value2 + delta);
|
|
122610
122684
|
const press = (delta) => {
|
|
122611
122685
|
const next = bump(delta);
|
|
@@ -122749,9 +122823,9 @@ var init_renderNode = __esm({
|
|
|
122749
122823
|
const items = Array.isArray(props.items) ? props.items : [];
|
|
122750
122824
|
const gridStagger = ctx.reduceMotion() ? 0 : Number(props.staggerMs ?? props.stagger_ms ?? 0);
|
|
122751
122825
|
const stagger = (el2, i2) => {
|
|
122752
|
-
if (!(gridStagger > 0) || !
|
|
122826
|
+
if (!(gridStagger > 0) || !React13.isValidElement(el2)) return el2;
|
|
122753
122827
|
const prev = el2.props.style ?? {};
|
|
122754
|
-
return
|
|
122828
|
+
return React13.cloneElement(el2, { style: { ...prev, animationDelay: `${i2 * gridStagger}ms` } });
|
|
122755
122829
|
};
|
|
122756
122830
|
const inner = itemsPath && items[0] && ctx.provider ? /* @__PURE__ */ jsx11(
|
|
122757
122831
|
BoundList,
|
|
@@ -122826,13 +122900,13 @@ var init_renderNode = __esm({
|
|
|
122826
122900
|
revealProgress = /* @__PURE__ */ new Map();
|
|
122827
122901
|
countWords = (s2) => s2.split(/\s+/).filter((t2) => t2 !== "").length;
|
|
122828
122902
|
RevealText = ({ text: text11, reduce, markdownHtml }) => {
|
|
122829
|
-
const tokens2 =
|
|
122830
|
-
const total =
|
|
122903
|
+
const tokens2 = React13.useMemo(() => text11.split(/(\s+)/).filter((t2) => t2 !== ""), [text11]);
|
|
122904
|
+
const total = React13.useMemo(
|
|
122831
122905
|
() => markdownHtml != null ? revealHtml(markdownHtml, 0, void 0).total : countWords(text11),
|
|
122832
122906
|
[text11, markdownHtml]
|
|
122833
122907
|
);
|
|
122834
|
-
const [shown2, setShown] =
|
|
122835
|
-
const prevRef =
|
|
122908
|
+
const [shown2, setShown] = React13.useState(total);
|
|
122909
|
+
const prevRef = React13.useRef(null);
|
|
122836
122910
|
useIsomorphicLayoutEffect(() => {
|
|
122837
122911
|
const prev = prevRef.current;
|
|
122838
122912
|
prevRef.current = text11;
|
|
@@ -122955,8 +123029,8 @@ var init_renderNode = __esm({
|
|
|
122955
123029
|
const boundInitials = useResolvedScalar(props.initials != null && isBinding(props.initials) ? props.initials : void 0, ctx);
|
|
122956
123030
|
const boundAlt = useResolvedScalar(contentDescription, ctx);
|
|
122957
123031
|
const fadeIn = motionDefaultsAnimate(ctx);
|
|
122958
|
-
const [shownSrc, setShownSrc] =
|
|
122959
|
-
const imgRef =
|
|
123032
|
+
const [shownSrc, setShownSrc] = React13.useState(null);
|
|
123033
|
+
const imgRef = React13.useRef(null);
|
|
122960
123034
|
const hasSource = props.url != null || props.initials != null || props.asset != null || props.icon != null;
|
|
122961
123035
|
const banner = fillWidth === true || props.width == null && props.height == null && !props.initials;
|
|
122962
123036
|
const w2 = banner ? "100%" : props.width ?? 40;
|
|
@@ -122970,7 +123044,7 @@ var init_renderNode = __esm({
|
|
|
122970
123044
|
const ph = props.placeholder ? C2(props.placeholder, "#e6e6e6") : void 0;
|
|
122971
123045
|
const imgUrl = props.url != null && isBinding(props.url) ? boundUrl : props.url;
|
|
122972
123046
|
const imgInitials = props.initials != null && isBinding(props.initials) ? boundInitials : props.initials;
|
|
122973
|
-
const [failedSrc, setFailedSrc] =
|
|
123047
|
+
const [failedSrc, setFailedSrc] = React13.useState(null);
|
|
122974
123048
|
const resolvedSrc = imgUrl && typeof imgUrl === "string" ? resolveAssetUrl(imgUrl, ctx.assetBaseUrl) : null;
|
|
122975
123049
|
const imgShown = !fadeIn || resolvedSrc != null && shownSrc === resolvedSrc;
|
|
122976
123050
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -123003,7 +123077,7 @@ var init_renderNode = __esm({
|
|
|
123003
123077
|
if (imgInitials && typeof imgInitials === "string") {
|
|
123004
123078
|
const alt = asText2(boundAlt).trim();
|
|
123005
123079
|
const circle = avatarCircle(String(imgInitials), typeof w2 === "number" ? w2 : 40, C2, false, bodyFont(ctx));
|
|
123006
|
-
return
|
|
123080
|
+
return React13.cloneElement(circle, alt ? { role: "img", "aria-label": alt, [SELF_RENDERED_LEAF]: true } : { [ROLE_WHEN_NAMED]: "img", [SELF_RENDERED_LEAF]: true });
|
|
123007
123081
|
}
|
|
123008
123082
|
if (props.icon != null && props.url == null && props.asset == null && imgInitials == null) {
|
|
123009
123083
|
const side2 = typeof w2 === "number" ? w2 : 40;
|
|
@@ -123018,13 +123092,13 @@ var init_renderNode = __esm({
|
|
|
123018
123092
|
const reduce = ctx.reduceMotion();
|
|
123019
123093
|
const servicePlayPath = typeof props.playPath === "string" && props.playPath.startsWith("$service:") ? props.playPath : void 0;
|
|
123020
123094
|
const nonce = lottieNonce(useResolvedScalar(servicePlayPath, ctx));
|
|
123021
|
-
const [replay, setReplay] =
|
|
123022
|
-
const [gen, setGen] =
|
|
123023
|
-
|
|
123095
|
+
const [replay, setReplay] = React13.useState({ plays: 0 });
|
|
123096
|
+
const [gen, setGen] = React13.useState(0);
|
|
123097
|
+
React13.useEffect(() => {
|
|
123024
123098
|
setReplay((s2) => ({ plays: s2.plays }));
|
|
123025
123099
|
setGen((g2) => g2 + 1);
|
|
123026
123100
|
}, [servicePlayPath, ctx.provider, props.source]);
|
|
123027
|
-
|
|
123101
|
+
React13.useEffect(() => {
|
|
123028
123102
|
setReplay((s2) => lottieReplayStep(s2, nonce, reduce));
|
|
123029
123103
|
}, [nonce, servicePlayPath, ctx.provider, props.source]);
|
|
123030
123104
|
return /* @__PURE__ */ jsx11(
|
|
@@ -123082,7 +123156,7 @@ var init_renderNode = __esm({
|
|
|
123082
123156
|
const a11y = described ? { role: "img", "aria-label": String(contentDescription), [SELF_RENDERED_LEAF]: true } : { "aria-hidden": "true", [INFERRED_DECORATIVE]: true, [SELF_RENDERED_LEAF]: true, [ROLE_WHEN_NAMED]: "img" };
|
|
123083
123157
|
const glyph = iconSvg(iconName, { size, color: C2(resolveScalarStatic(props.tint, ctx) ?? "textPrimary", "#636b78") });
|
|
123084
123158
|
const swap = useIconSwap(iconName, ctx);
|
|
123085
|
-
const animatedGlyph = Object.keys(effectStyle).length || swap.key > 0 ?
|
|
123159
|
+
const animatedGlyph = Object.keys(effectStyle).length || swap.key > 0 ? React13.cloneElement(glyph, { style: { ...glyph.props.style, ...swap.style, ...effectStyle }, key: swap.key }) : glyph;
|
|
123086
123160
|
return /* @__PURE__ */ jsx11("span", { ...a11y, style: { display: "inline-grid", placeItems: "center", width: size + 6, height: size + 6, lineHeight: 1, flex: "none", ...wrap }, children: animatedGlyph });
|
|
123087
123161
|
});
|
|
123088
123162
|
EMPTY_STATE_SPACING = {
|
|
@@ -123318,12 +123392,12 @@ var init_renderNode = __esm({
|
|
|
123318
123392
|
const C2 = ctx.color;
|
|
123319
123393
|
const bound2 = useResolvedScalar(props.valuePath, ctx);
|
|
123320
123394
|
const boundText = props.valuePath != null ? typeof bound2 === "string" ? bound2 : typeof bound2 === "number" ? String(bound2) : "" : void 0;
|
|
123321
|
-
const [typed, setTyped] =
|
|
123322
|
-
|
|
123395
|
+
const [typed, setTyped] = React13.useState(void 0);
|
|
123396
|
+
React13.useEffect(() => {
|
|
123323
123397
|
setTyped(void 0);
|
|
123324
123398
|
}, [boundText, props.value, props.valuePath, typeof props.valuePath === "string" && props.valuePath.startsWith("$service:") ? ctx.provider : null]);
|
|
123325
123399
|
const otpPath = typeof props.valuePath === "string" && props.valuePath.startsWith("$service:") ? servicePath(props.valuePath) : "";
|
|
123326
|
-
|
|
123400
|
+
React13.useEffect(() => {
|
|
123327
123401
|
if (!ctx.provider || !otpPath) return;
|
|
123328
123402
|
let subscribing = true;
|
|
123329
123403
|
let active = true;
|
|
@@ -123414,10 +123488,10 @@ var init_renderNode = __esm({
|
|
|
123414
123488
|
return /* @__PURE__ */ jsx11("div", { ...a11y, style: { width: "100%", height: 6, borderRadius: 999, background: C2(boundTokenName(props.trackColorPath, props.trackColor, ctx) ?? "surfaceTertiary", "#eee"), overflow: "hidden", ...wrap }, children: /* @__PURE__ */ jsx11("div", { style: { width: `${Math.round((p2 ?? 0.4) * 100)}%`, height: "100%", borderRadius: 999, background: C2(boundTokenName(props.tintPath, props.tint, ctx) ?? "accentPrimary", "#116DFF"), opacity: p2 == null ? 0.45 : 1, ...animatedFill ? { transition: ctx.motionTransition(ctx.kit?.motion) } : {} } }) });
|
|
123415
123489
|
});
|
|
123416
123490
|
SnackbarNode = withExtras("SnackbarNode", ({ props, ctx, wrap }) => {
|
|
123417
|
-
const [phase, setPhase] =
|
|
123491
|
+
const [phase, setPhase] = React13.useState("shown");
|
|
123418
123492
|
const hideAfter = ctx.empty ? void 0 : snackbarAutoHideMs(props.durationMs);
|
|
123419
123493
|
const identity = snackbarIdentity(props);
|
|
123420
|
-
|
|
123494
|
+
React13.useEffect(() => {
|
|
123421
123495
|
setPhase("shown");
|
|
123422
123496
|
if (hideAfter === void 0) return;
|
|
123423
123497
|
let fade;
|
|
@@ -123473,8 +123547,8 @@ var init_renderNode = __esm({
|
|
|
123473
123547
|
const gated2 = props.presentedPath != null || props.presented != null;
|
|
123474
123548
|
const presented = props.presentedPath != null ? bound2 : props.presented;
|
|
123475
123549
|
const gateOpen = !gated2 || presented === true || presented === "true";
|
|
123476
|
-
const [dismissed, setDismissed] =
|
|
123477
|
-
|
|
123550
|
+
const [dismissed, setDismissed] = React13.useState(false);
|
|
123551
|
+
React13.useEffect(() => {
|
|
123478
123552
|
if (!gateOpen) setDismissed(false);
|
|
123479
123553
|
}, [gateOpen]);
|
|
123480
123554
|
const shown2 = gateOpen && !dismissed;
|
|
@@ -123482,26 +123556,26 @@ var init_renderNode = __esm({
|
|
|
123482
123556
|
const dismissible = props.dismissible !== false;
|
|
123483
123557
|
const edge = sheetEdge(props.edge);
|
|
123484
123558
|
const detents = edge === "bottom" ? sheetDetents(props.detents) : [];
|
|
123485
|
-
const [detentIndex, setDetentIndex] =
|
|
123486
|
-
|
|
123559
|
+
const [detentIndex, setDetentIndex] = React13.useState(0);
|
|
123560
|
+
React13.useEffect(() => {
|
|
123487
123561
|
if (!shown2) setDetentIndex(0);
|
|
123488
123562
|
}, [shown2]);
|
|
123489
|
-
const dialogRef =
|
|
123563
|
+
const dialogRef = React13.useRef(null);
|
|
123490
123564
|
const trapTab = useModalOverlay(dialogRef, shown2 && modal);
|
|
123491
|
-
const latest =
|
|
123565
|
+
const latest = React13.useRef({ ctx, onDismiss: props.onDismiss });
|
|
123492
123566
|
latest.current = { ctx, onDismiss: props.onDismiss };
|
|
123493
|
-
const closed =
|
|
123494
|
-
|
|
123567
|
+
const closed = React13.useRef(false);
|
|
123568
|
+
React13.useEffect(() => {
|
|
123495
123569
|
if (shown2) closed.current = false;
|
|
123496
123570
|
}, [shown2]);
|
|
123497
|
-
const dismiss =
|
|
123571
|
+
const dismiss = React13.useCallback(() => {
|
|
123498
123572
|
if (closed.current) return;
|
|
123499
123573
|
closed.current = true;
|
|
123500
123574
|
setDismissed(true);
|
|
123501
123575
|
const { ctx: now, onDismiss } = latest.current;
|
|
123502
123576
|
if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
|
|
123503
123577
|
}, []);
|
|
123504
|
-
|
|
123578
|
+
React13.useEffect(() => {
|
|
123505
123579
|
if (!shown2 || !dismissible) return;
|
|
123506
123580
|
const doc = dialogRef.current?.ownerDocument;
|
|
123507
123581
|
if (!doc) return;
|
|
@@ -123515,11 +123589,11 @@ var init_renderNode = __esm({
|
|
|
123515
123589
|
doc.addEventListener("keydown", onKey, true);
|
|
123516
123590
|
return () => doc.removeEventListener("keydown", onKey, true);
|
|
123517
123591
|
}, [shown2, dismissible, dismiss]);
|
|
123518
|
-
const drag =
|
|
123592
|
+
const drag = React13.useRef(null);
|
|
123519
123593
|
const reduceMotion = ctx.reduceMotion();
|
|
123520
|
-
const [mounted, setMounted] =
|
|
123521
|
-
const [entered, setEntered] =
|
|
123522
|
-
|
|
123594
|
+
const [mounted, setMounted] = React13.useState(shown2);
|
|
123595
|
+
const [entered, setEntered] = React13.useState(shown2 && ctx.staticRender === true);
|
|
123596
|
+
React13.useEffect(() => {
|
|
123523
123597
|
if (shown2) {
|
|
123524
123598
|
setMounted(true);
|
|
123525
123599
|
if (reduceMotion || typeof requestAnimationFrame !== "function") {
|
|
@@ -123543,8 +123617,8 @@ var init_renderNode = __esm({
|
|
|
123543
123617
|
const t2 = setTimeout(() => setMounted(false), DRAWER_EXIT_MS);
|
|
123544
123618
|
return () => clearTimeout(t2);
|
|
123545
123619
|
}, [shown2, reduceMotion]);
|
|
123546
|
-
const scrimRef =
|
|
123547
|
-
const [rtl, setRtl] =
|
|
123620
|
+
const scrimRef = React13.useRef(null);
|
|
123621
|
+
const [rtl, setRtl] = React13.useState(false);
|
|
123548
123622
|
useIsomorphicLayoutEffect(() => {
|
|
123549
123623
|
const el2 = scrimRef.current;
|
|
123550
123624
|
if (el2 && el2.ownerDocument.defaultView) setRtl(el2.ownerDocument.defaultView.getComputedStyle(el2).direction === "rtl");
|
|
@@ -123652,8 +123726,8 @@ var init_renderNode = __esm({
|
|
|
123652
123726
|
const gated2 = props.presentedPath != null || props.presented != null;
|
|
123653
123727
|
const presented = props.presentedPath != null ? bound2 : props.presented;
|
|
123654
123728
|
const gateOpen = !gated2 || presented === true || presented === "true";
|
|
123655
|
-
const [dismissed, setDismissed] =
|
|
123656
|
-
|
|
123729
|
+
const [dismissed, setDismissed] = React13.useState(false);
|
|
123730
|
+
React13.useEffect(() => {
|
|
123657
123731
|
if (!gateOpen) setDismissed(false);
|
|
123658
123732
|
}, [gateOpen]);
|
|
123659
123733
|
const shown2 = gateOpen && !dismissed;
|
|
@@ -123661,18 +123735,18 @@ var init_renderNode = __esm({
|
|
|
123661
123735
|
const autoMs = drawerAutoDismissMs(props.autoDismissMs);
|
|
123662
123736
|
const placement = sheetPlacement(props.placement);
|
|
123663
123737
|
const detents = sheetDetents(props.detents);
|
|
123664
|
-
const [detentIndex, setDetentIndex] =
|
|
123665
|
-
const [expanded, setExpanded] =
|
|
123666
|
-
|
|
123738
|
+
const [detentIndex, setDetentIndex] = React13.useState(0);
|
|
123739
|
+
const [expanded, setExpanded] = React13.useState(false);
|
|
123740
|
+
React13.useEffect(() => {
|
|
123667
123741
|
if (!shown2) {
|
|
123668
123742
|
setDetentIndex(0);
|
|
123669
123743
|
setExpanded(false);
|
|
123670
123744
|
}
|
|
123671
123745
|
}, [shown2]);
|
|
123672
123746
|
const reduceMotion = ctx.reduceMotion();
|
|
123673
|
-
const [mounted, setMounted] =
|
|
123674
|
-
const [entered, setEntered] =
|
|
123675
|
-
|
|
123747
|
+
const [mounted, setMounted] = React13.useState(shown2);
|
|
123748
|
+
const [entered, setEntered] = React13.useState(shown2 && ctx.staticRender === true);
|
|
123749
|
+
React13.useEffect(() => {
|
|
123676
123750
|
if (shown2) {
|
|
123677
123751
|
setMounted(true);
|
|
123678
123752
|
if (reduceMotion || typeof requestAnimationFrame !== "function") {
|
|
@@ -123696,10 +123770,10 @@ var init_renderNode = __esm({
|
|
|
123696
123770
|
const t2 = setTimeout(() => setMounted(false), DRAWER_EXIT_MS);
|
|
123697
123771
|
return () => clearTimeout(t2);
|
|
123698
123772
|
}, [shown2, reduceMotion]);
|
|
123699
|
-
const anchorRef =
|
|
123700
|
-
const panelRef =
|
|
123701
|
-
const [host, setHost] =
|
|
123702
|
-
const [hostTop, setHostTop] =
|
|
123773
|
+
const anchorRef = React13.useRef(null);
|
|
123774
|
+
const panelRef = React13.useRef(null);
|
|
123775
|
+
const [host, setHost] = React13.useState(null);
|
|
123776
|
+
const [hostTop, setHostTop] = React13.useState(true);
|
|
123703
123777
|
useIsomorphicLayoutEffect(() => {
|
|
123704
123778
|
if (!host) {
|
|
123705
123779
|
setHostTop(true);
|
|
@@ -123727,7 +123801,7 @@ var init_renderNode = __esm({
|
|
|
123727
123801
|
setHost(overlay ?? own6(DRAWER_HOST_ATTR));
|
|
123728
123802
|
}, [mounted, placement]);
|
|
123729
123803
|
const overHost = host?.hasAttribute(SHEET_OVERLAY_HOST_ATTR) ?? false;
|
|
123730
|
-
const [regionPx, setRegionPx] =
|
|
123804
|
+
const [regionPx, setRegionPx] = React13.useState(0);
|
|
123731
123805
|
useIsomorphicLayoutEffect(() => {
|
|
123732
123806
|
if (!detents.length || !mounted) return;
|
|
123733
123807
|
const region = host ? overHost ? host.parentElement : host.previousElementSibling : null;
|
|
@@ -123754,38 +123828,38 @@ var init_renderNode = __esm({
|
|
|
123754
123828
|
resizeObserver?.disconnect();
|
|
123755
123829
|
};
|
|
123756
123830
|
}, [host, overHost, mounted, detents.length]);
|
|
123757
|
-
const latest =
|
|
123831
|
+
const latest = React13.useRef({ ctx, onDismiss: props.onDismiss });
|
|
123758
123832
|
latest.current = { ctx, onDismiss: props.onDismiss };
|
|
123759
|
-
const closed =
|
|
123760
|
-
const remaining =
|
|
123761
|
-
|
|
123833
|
+
const closed = React13.useRef(false);
|
|
123834
|
+
const remaining = React13.useRef(autoMs ?? 0);
|
|
123835
|
+
React13.useEffect(() => {
|
|
123762
123836
|
if (!shown2) return;
|
|
123763
123837
|
closed.current = false;
|
|
123764
123838
|
remaining.current = autoMs ?? 0;
|
|
123765
123839
|
}, [shown2, autoMs]);
|
|
123766
|
-
const close =
|
|
123840
|
+
const close = React13.useCallback(() => {
|
|
123767
123841
|
if (closed.current) return;
|
|
123768
123842
|
closed.current = true;
|
|
123769
123843
|
setDismissed(true);
|
|
123770
123844
|
const { ctx: now, onDismiss } = latest.current;
|
|
123771
123845
|
if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
|
|
123772
123846
|
}, []);
|
|
123773
|
-
const toDetent =
|
|
123847
|
+
const toDetent = React13.useCallback((next, from) => {
|
|
123774
123848
|
if (next > from) setExpanded(true);
|
|
123775
123849
|
setDetentIndex(next);
|
|
123776
123850
|
}, []);
|
|
123777
|
-
const [hover, setHover] =
|
|
123778
|
-
const [pressed, setPressed] =
|
|
123779
|
-
const [focusIn, setFocusIn] =
|
|
123851
|
+
const [hover, setHover] = React13.useState(false);
|
|
123852
|
+
const [pressed, setPressed] = React13.useState(false);
|
|
123853
|
+
const [focusIn, setFocusIn] = React13.useState(false);
|
|
123780
123854
|
const paused = hover || pressed || focusIn;
|
|
123781
|
-
|
|
123855
|
+
React13.useEffect(() => {
|
|
123782
123856
|
if (!shown2) {
|
|
123783
123857
|
setHover(false);
|
|
123784
123858
|
setPressed(false);
|
|
123785
123859
|
setFocusIn(false);
|
|
123786
123860
|
}
|
|
123787
123861
|
}, [shown2]);
|
|
123788
|
-
|
|
123862
|
+
React13.useEffect(() => {
|
|
123789
123863
|
if (!shown2 || !hostTop || autoMs == null || paused || expanded) return;
|
|
123790
123864
|
const since = Date.now();
|
|
123791
123865
|
const t2 = setTimeout(() => {
|
|
@@ -123796,7 +123870,7 @@ var init_renderNode = __esm({
|
|
|
123796
123870
|
remaining.current = drawerRemainingMs(remaining.current, Date.now() - since);
|
|
123797
123871
|
};
|
|
123798
123872
|
}, [shown2, hostTop, autoMs, paused, expanded, close]);
|
|
123799
|
-
|
|
123873
|
+
React13.useEffect(() => {
|
|
123800
123874
|
if (!shown2 || !dismissible) return;
|
|
123801
123875
|
const doc = panelRef.current?.ownerDocument;
|
|
123802
123876
|
if (!doc) return;
|
|
@@ -123809,13 +123883,13 @@ var init_renderNode = __esm({
|
|
|
123809
123883
|
doc.addEventListener("keydown", onKey, true);
|
|
123810
123884
|
return () => doc.removeEventListener("keydown", onKey, true);
|
|
123811
123885
|
}, [shown2, dismissible, close, host]);
|
|
123812
|
-
const drag =
|
|
123813
|
-
const dragged =
|
|
123814
|
-
const [dragDy, setDragDy] =
|
|
123815
|
-
|
|
123886
|
+
const drag = React13.useRef(null);
|
|
123887
|
+
const dragged = React13.useRef(false);
|
|
123888
|
+
const [dragDy, setDragDy] = React13.useState(0);
|
|
123889
|
+
React13.useEffect(() => {
|
|
123816
123890
|
if (!shown2) setDragDy(0);
|
|
123817
123891
|
}, [shown2]);
|
|
123818
|
-
const dragState =
|
|
123892
|
+
const dragState = React13.useRef({ index: 0, count: 0, dismissible });
|
|
123819
123893
|
if (!shown2 && !mounted) return /* @__PURE__ */ jsx11("span", { ref: anchorRef, "data-bottom-drawer-anchor": "", hidden: true, ...{ [NODE_EXTRAS_TARGET]: "bottom-drawer-panel" } });
|
|
123820
123894
|
const sheet = idiomControls(ctx.idiom).sheet;
|
|
123821
123895
|
const r3 = `${sheet.cornerRadius}px`;
|
|
@@ -123957,23 +124031,23 @@ var init_renderNode = __esm({
|
|
|
123957
124031
|
const rich = title !== "";
|
|
123958
124032
|
const trigger = resolveTooltipTrigger(props.trigger, "pointer");
|
|
123959
124033
|
const edge = resolveOverlayEdge("Tooltip", props.edge);
|
|
123960
|
-
const [open, setOpen] =
|
|
123961
|
-
const anchorRef =
|
|
123962
|
-
const bubbleRef =
|
|
123963
|
-
const pressTimer =
|
|
124034
|
+
const [open, setOpen] = React13.useState(false);
|
|
124035
|
+
const anchorRef = React13.useRef(null);
|
|
124036
|
+
const bubbleRef = React13.useRef(null);
|
|
124037
|
+
const pressTimer = React13.useRef(null);
|
|
123964
124038
|
const placement = useFlippedEdge(edge, open, bubbleRef, anchorRef);
|
|
123965
124039
|
const placed = placement.edge;
|
|
123966
|
-
const latest =
|
|
124040
|
+
const latest = React13.useRef({ ctx, onDismiss: props.onDismiss, open });
|
|
123967
124041
|
latest.current = { ctx, onDismiss: props.onDismiss, open };
|
|
123968
|
-
const holding =
|
|
123969
|
-
const [needsTabStop, setNeedsTabStop] =
|
|
124042
|
+
const holding = React13.useRef({ hover: false, focus: false });
|
|
124043
|
+
const [needsTabStop, setNeedsTabStop] = React13.useState(false);
|
|
123970
124044
|
useIsomorphicLayoutEffect(() => {
|
|
123971
124045
|
const el2 = anchorRef.current;
|
|
123972
124046
|
const want = trigger === "hover" && el2 != null && !hasTabStop(el2);
|
|
123973
124047
|
if (want !== needsTabStop) setNeedsTabStop(want);
|
|
123974
124048
|
});
|
|
123975
|
-
const show =
|
|
123976
|
-
const dismiss =
|
|
124049
|
+
const show = React13.useCallback(() => setOpen(true), []);
|
|
124050
|
+
const dismiss = React13.useCallback(() => {
|
|
123977
124051
|
holding.current = { hover: false, focus: false };
|
|
123978
124052
|
const { ctx: now, onDismiss, open: wasOpen } = latest.current;
|
|
123979
124053
|
if (!wasOpen) return;
|
|
@@ -123981,7 +124055,7 @@ var init_renderNode = __esm({
|
|
|
123981
124055
|
setOpen(false);
|
|
123982
124056
|
if (onDismiss != null) now.onAction?.(resolveItemDeep2(onDismiss, now));
|
|
123983
124057
|
}, []);
|
|
123984
|
-
|
|
124058
|
+
React13.useEffect(() => {
|
|
123985
124059
|
if (!open) return;
|
|
123986
124060
|
const doc = bubbleRef.current?.ownerDocument;
|
|
123987
124061
|
if (!doc) return;
|
|
@@ -124005,7 +124079,7 @@ var init_renderNode = __esm({
|
|
|
124005
124079
|
if (timer) clearTimeout(timer);
|
|
124006
124080
|
};
|
|
124007
124081
|
}, [open, trigger, dismiss]);
|
|
124008
|
-
|
|
124082
|
+
React13.useEffect(() => () => {
|
|
124009
124083
|
if (pressTimer.current) clearTimeout(pressTimer.current);
|
|
124010
124084
|
}, []);
|
|
124011
124085
|
const cancelPress = () => {
|
|
@@ -124045,7 +124119,7 @@ var init_renderNode = __esm({
|
|
|
124045
124119
|
};
|
|
124046
124120
|
const hint = [title, text11].filter((s2) => s2 !== "").join(". ");
|
|
124047
124121
|
const anchor = props.anchor ? renderNode(props.anchor, ctx) : null;
|
|
124048
|
-
const wrapperHintId = `hm-tip-hint${
|
|
124122
|
+
const wrapperHintId = `hm-tip-hint${React13.useId()}`;
|
|
124049
124123
|
useIsomorphicLayoutEffect(() => {
|
|
124050
124124
|
const wrapper = anchorRef.current;
|
|
124051
124125
|
if (!wrapper || !hint || needsTabStop) return;
|
|
@@ -124067,7 +124141,7 @@ var init_renderNode = __esm({
|
|
|
124067
124141
|
/* @__PURE__ */ jsx11(OverlayAnchorClip, { wrap, children: needsTabStop ? /* @__PURE__ */ jsxs8(Fragment4, { children: [
|
|
124068
124142
|
anchor,
|
|
124069
124143
|
hint && /* @__PURE__ */ jsx11("span", { id: wrapperHintId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
124070
|
-
] }) : hint &&
|
|
124144
|
+
] }) : hint && React13.isValidElement(anchor) ? /* @__PURE__ */ jsxs8(Fragment4, { children: [
|
|
124071
124145
|
/* @__PURE__ */ jsx11(A11yHintDescription, { hint, children: anchor }),
|
|
124072
124146
|
/* @__PURE__ */ jsx11("span", { id: wrapperHintId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
124073
124147
|
] }) : /* @__PURE__ */ jsxs8(Fragment4, { children: [
|
|
@@ -124088,24 +124162,24 @@ var init_renderNode = __esm({
|
|
|
124088
124162
|
const gateOpen = gate === true || gate === "true";
|
|
124089
124163
|
const literal = props.presentedPath == null && props.presented != null;
|
|
124090
124164
|
const identity = { path: props.presentedPath, presented: props.presented, provider: ctx.provider };
|
|
124091
|
-
const [local, setLocal] =
|
|
124165
|
+
const [local, setLocal] = React13.useState({ ...identity, opened: false, dismissed: false });
|
|
124092
124166
|
const sameGate = local.path === identity.path && local.presented === identity.presented && local.provider === identity.provider;
|
|
124093
124167
|
const current = sameGate ? local : { ...identity, opened: false, dismissed: false };
|
|
124094
124168
|
if (!sameGate) setLocal(current);
|
|
124095
|
-
|
|
124169
|
+
React13.useEffect(() => {
|
|
124096
124170
|
if (!gateOpen) setLocal((previous) => previous.dismissed ? { ...previous, dismissed: false } : previous);
|
|
124097
124171
|
}, [gateOpen]);
|
|
124098
124172
|
const shown2 = !gated2 || (gateOpen || current.opened) && !current.dismissed;
|
|
124099
124173
|
const modal = gated2 && isOverlayModal("Popover", props.modal);
|
|
124100
|
-
const dialogRef =
|
|
124101
|
-
const anchorRef =
|
|
124102
|
-
const boxRef =
|
|
124174
|
+
const dialogRef = React13.useRef(null);
|
|
124175
|
+
const anchorRef = React13.useRef(null);
|
|
124176
|
+
const boxRef = React13.useRef(null);
|
|
124103
124177
|
const trapTab = useModalOverlay(dialogRef, shown2 && modal);
|
|
124104
124178
|
const placement = useFlippedEdge(resolveOverlayEdge("Popover", props.edge), gated2 && shown2, dialogRef, boxRef, 6);
|
|
124105
124179
|
const placed = placement.edge;
|
|
124106
|
-
const latest =
|
|
124180
|
+
const latest = React13.useRef({ ctx, onDismiss: props.onDismiss });
|
|
124107
124181
|
latest.current = { ctx, onDismiss: props.onDismiss };
|
|
124108
|
-
|
|
124182
|
+
React13.useEffect(() => {
|
|
124109
124183
|
if (!gated2 || !shown2) return;
|
|
124110
124184
|
const doc = dialogRef.current?.ownerDocument;
|
|
124111
124185
|
if (!doc) return;
|
|
@@ -124143,8 +124217,8 @@ var init_renderNode = __esm({
|
|
|
124143
124217
|
if (shown2) return;
|
|
124144
124218
|
setLocal({ ...identity, opened: true, dismissed: false });
|
|
124145
124219
|
} : void 0;
|
|
124146
|
-
const [anchorIsButton, setAnchorIsButton] =
|
|
124147
|
-
const [needsSeparateOpener, setNeedsSeparateOpener] =
|
|
124220
|
+
const [anchorIsButton, setAnchorIsButton] = React13.useState(false);
|
|
124221
|
+
const [needsSeparateOpener, setNeedsSeparateOpener] = React13.useState(false);
|
|
124148
124222
|
useIsomorphicLayoutEffect(() => {
|
|
124149
124223
|
const el2 = anchorRef.current;
|
|
124150
124224
|
const want = literal && el2 != null && !hasTabStop(el2);
|
|
@@ -124171,7 +124245,7 @@ var init_renderNode = __esm({
|
|
|
124171
124245
|
});
|
|
124172
124246
|
ChipsInputNode = withExtras("ChipsInputNode", ({ props, ctx, wrap }) => {
|
|
124173
124247
|
const placeholderText = useBoundString(props.placeholder, ctx);
|
|
124174
|
-
const [draft, setDraft] =
|
|
124248
|
+
const [draft, setDraft] = React13.useState("");
|
|
124175
124249
|
const C2 = ctx.color;
|
|
124176
124250
|
const bound2 = useResolvedScalar(props.valuesPath, ctx);
|
|
124177
124251
|
const raw = props.valuesPath != null ? bound2 : props.values;
|
|
@@ -124364,7 +124438,7 @@ var init_renderNode = __esm({
|
|
|
124364
124438
|
const who = asText2(a2.initials).trim();
|
|
124365
124439
|
const initials = avatarCircle(who || "?", size, C2, true, bodyFont(ctx));
|
|
124366
124440
|
const photo = typeof a2.imageUrl === "string" && a2.imageUrl && !isBinding(a2.imageUrl) ? a2.imageUrl : "";
|
|
124367
|
-
const circle = photo ?
|
|
124441
|
+
const circle = photo ? React13.cloneElement(
|
|
124368
124442
|
initials,
|
|
124369
124443
|
{ style: { ...initials.props.style, position: "relative", overflow: "hidden" } },
|
|
124370
124444
|
initials.props.children,
|
|
@@ -124372,7 +124446,7 @@ var init_renderNode = __esm({
|
|
|
124372
124446
|
e2.currentTarget.style.display = "none";
|
|
124373
124447
|
}, style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover" } })
|
|
124374
124448
|
) : initials;
|
|
124375
|
-
return who ? /* @__PURE__ */ jsx11("div", { role: "listitem", style: wrapStyle, children:
|
|
124449
|
+
return who ? /* @__PURE__ */ jsx11("div", { role: "listitem", style: wrapStyle, children: React13.cloneElement(circle, { role: "img", "aria-label": who }) }, i2) : /* @__PURE__ */ jsx11("div", { "aria-hidden": "true", style: wrapStyle, children: circle }, i2);
|
|
124376
124450
|
}),
|
|
124377
124451
|
overflow > 0 && /* @__PURE__ */ jsx11("div", { role: "listitem", style: { marginLeft: -(size - shift), width: size, height: size, borderRadius: "50%", border: `2px solid ${C2("surfacePrimary", "#fff")}`, background: C2("surfaceTertiary", "#e6e6e6"), color: C2("textPrimary", "#111"), display: "grid", placeItems: "center", fontSize: size * 0.32, fontWeight: 700, fontFamily: bodyFont(ctx) }, children: /* @__PURE__ */ jsxs8("span", { role: "img", "aria-label": `${overflow} more`, children: [
|
|
124378
124452
|
"+",
|
|
@@ -124393,7 +124467,7 @@ var init_renderNode = __esm({
|
|
|
124393
124467
|
const declared = Array.isArray(props.series) ? props.series : [];
|
|
124394
124468
|
const multi = declared.length > 0;
|
|
124395
124469
|
const singleBound = useBoundValue(ctx, typeof props.valuesPath === "string" && !multi ? props.valuesPath : "");
|
|
124396
|
-
const seriesBindings =
|
|
124470
|
+
const seriesBindings = React13.useMemo(
|
|
124397
124471
|
() => declared.map((d2) => typeof d2?.valuesPath === "string" ? d2.valuesPath : ""),
|
|
124398
124472
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
124399
124473
|
[declared.map((d2) => String(d2?.valuesPath ?? "")).join("\0")]
|
|
@@ -124539,9 +124613,9 @@ var init_renderNode = __esm({
|
|
|
124539
124613
|
] }) });
|
|
124540
124614
|
});
|
|
124541
124615
|
ShapeNode = withExtras("ShapeNode", ({ props, ctx, wrap }) => {
|
|
124542
|
-
const ref =
|
|
124543
|
-
const [box, setBox] =
|
|
124544
|
-
|
|
124616
|
+
const ref = React13.useRef(null);
|
|
124617
|
+
const [box, setBox] = React13.useState(null);
|
|
124618
|
+
React13.useEffect(() => {
|
|
124545
124619
|
const el2 = ref.current;
|
|
124546
124620
|
if (!el2) return;
|
|
124547
124621
|
const measure2 = () => {
|
|
@@ -124699,10 +124773,10 @@ var init_renderNode = __esm({
|
|
|
124699
124773
|
const isPlayable = !isFailed && !isUploading;
|
|
124700
124774
|
const isPlaying = state === "playing";
|
|
124701
124775
|
const isLoading = state === "loading";
|
|
124702
|
-
const [scrub, setScrub] =
|
|
124703
|
-
const [seeked, setSeeked] =
|
|
124776
|
+
const [scrub, setScrub] = React13.useState(null);
|
|
124777
|
+
const [seeked, setSeeked] = React13.useState(null);
|
|
124704
124778
|
const positionMs = Math.max(0, num4(props.positionMsPath != null ? boundPosition : void 0, props.positionMs, 0));
|
|
124705
|
-
|
|
124779
|
+
React13.useEffect(() => {
|
|
124706
124780
|
setSeeked(null);
|
|
124707
124781
|
}, [positionMs]);
|
|
124708
124782
|
const effectivePositionMs = seeked ?? positionMs;
|
|
@@ -124744,8 +124818,8 @@ var init_renderNode = __esm({
|
|
|
124744
124818
|
const barW = Math.max(0.6, slot * 0.58);
|
|
124745
124819
|
const cut2 = progress * W2;
|
|
124746
124820
|
const rates = Array.isArray(props.rates) ? props.rates.map(Number).filter((n2) => n2 > 0) : [];
|
|
124747
|
-
const [pickedRate, setPickedRate] =
|
|
124748
|
-
|
|
124821
|
+
const [pickedRate, setPickedRate] = React13.useState(null);
|
|
124822
|
+
React13.useEffect(() => {
|
|
124749
124823
|
setPickedRate(null);
|
|
124750
124824
|
}, [rate]);
|
|
124751
124825
|
const effectiveRate = pickedRate ?? rate;
|
|
@@ -124918,27 +124992,77 @@ var init_renderNode = __esm({
|
|
|
124918
124992
|
] }, i2);
|
|
124919
124993
|
}) });
|
|
124920
124994
|
});
|
|
124921
|
-
|
|
124995
|
+
LiveWindowMeasured = ({ index, heights, children }) => {
|
|
124996
|
+
const ref = React13.useRef(null);
|
|
124997
|
+
React13.useLayoutEffect(() => {
|
|
124998
|
+
const el2 = ref.current;
|
|
124999
|
+
if (!el2) return;
|
|
125000
|
+
const record2 = () => {
|
|
125001
|
+
const h2 = el2.offsetHeight;
|
|
125002
|
+
if (h2 > 0 && heights.map.get(index) !== h2) {
|
|
125003
|
+
heights.map.set(index, h2);
|
|
125004
|
+
heights.changed();
|
|
125005
|
+
}
|
|
125006
|
+
};
|
|
125007
|
+
record2();
|
|
125008
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
125009
|
+
const observer = new ResizeObserver(record2);
|
|
125010
|
+
observer.observe(el2);
|
|
125011
|
+
return () => observer.disconnect();
|
|
125012
|
+
}, [index, heights]);
|
|
125013
|
+
return /* @__PURE__ */ jsx11("div", { ref, style: { width: "100%" }, children });
|
|
125014
|
+
};
|
|
125015
|
+
LiveWindowPage = ({ page, index, count: count2, current, liveWindow, ownerId, heights, ctx }) => {
|
|
125016
|
+
const outerActive = React13.useContext(PageActiveContext);
|
|
125017
|
+
if (liveWindowRange(current, count2, liveWindow) == null) return /* @__PURE__ */ jsx11(Fragment4, { children: renderNode(page, ctx) });
|
|
125018
|
+
if (liveWindowMounted(index, current, count2, liveWindow)) {
|
|
125019
|
+
return /* @__PURE__ */ jsx11(PageActiveContext.Provider, { value: outerActive && liveWindowActive(index, current, count2, liveWindow), children: /* @__PURE__ */ jsx11(LiveWindowMeasured, { index, heights, children: renderNode(page, ctx) }) });
|
|
125020
|
+
}
|
|
125021
|
+
const bg = normalize(page ?? {}).modifiers?.background;
|
|
125022
|
+
const token = typeof bg === "string" ? bg : typeof bg?.token === "string" ? bg.token : void 0;
|
|
125023
|
+
const image = liveWindowFirstImage(page);
|
|
125024
|
+
const picture = image ? normalize(image) : null;
|
|
125025
|
+
const remembered = heights.map.get(index) ?? heights.map.get(liveWindowCurrent(current, count2));
|
|
125026
|
+
return (
|
|
125027
|
+
// Hidden from assistive tech except as the page's position; the picture is inert (no id, no actions).
|
|
125028
|
+
/* @__PURE__ */ jsx11(
|
|
125029
|
+
"div",
|
|
125030
|
+
{
|
|
125031
|
+
"data-component-id": liveWindowPlaceholderId(ownerId, index),
|
|
125032
|
+
"data-live-window-placeholder": "",
|
|
125033
|
+
role: "group",
|
|
125034
|
+
"aria-label": `page ${index + 1} of ${count2}`,
|
|
125035
|
+
style: { width: "100%", height: remembered ? remembered : "100%", minHeight: remembered ? remembered : "100%", position: "relative", overflow: "hidden", background: token && !isBinding(token) ? ctx.color(token, "transparent") : void 0 },
|
|
125036
|
+
children: picture ? /* @__PURE__ */ jsx11("div", { "aria-hidden": "true", style: { position: "absolute", inset: 0, pointerEvents: "none" }, children: renderNode({ type: picture.type, props: picture.props }, { ...ctx, onAction: null }) }) : null
|
|
125037
|
+
}
|
|
125038
|
+
)
|
|
125039
|
+
);
|
|
125040
|
+
};
|
|
125041
|
+
PagingNode = withExtras("PagingNode", ({ props, ctx, wrap, nodeId }) => {
|
|
124922
125042
|
const items = (props.__pager ? props.pages : props.items) ?? [];
|
|
124923
125043
|
const pages2 = items.filter((page) => isNodeLike(page) || page?.type);
|
|
124924
125044
|
const requested = Math.max(0, Math.min(pages2.length - 1, props.currentIndex ?? 0));
|
|
124925
|
-
const [current, setCurrent] =
|
|
124926
|
-
const rail =
|
|
124927
|
-
const currentRef =
|
|
125045
|
+
const [current, setCurrent] = React13.useState(requested);
|
|
125046
|
+
const rail = React13.useRef(null);
|
|
125047
|
+
const currentRef = React13.useRef(current);
|
|
124928
125048
|
const itemsPath = props.itemsPath ?? props.items_path;
|
|
124929
125049
|
const boundRail = !!itemsPath && !!items[0] && !!ctx.provider;
|
|
125050
|
+
const { settled, scrolling } = useSettledPage(current);
|
|
125051
|
+
const [, heightsChanged] = React13.useReducer((n2) => n2 + 1, 0);
|
|
125052
|
+
const pageKey = pages2.map((p2, i2) => p2?.id ?? `#${i2}`).join("\0");
|
|
125053
|
+
const pageHeights = React13.useMemo(() => ({ map: /* @__PURE__ */ new Map(), changed: heightsChanged }), [pageKey]);
|
|
124930
125054
|
const select2 = (index) => {
|
|
124931
125055
|
if (index === currentRef.current) return;
|
|
124932
125056
|
currentRef.current = index;
|
|
124933
125057
|
setCurrent(index);
|
|
124934
125058
|
if (props.onChange && ctx.onAction) ctx.onAction({ ...props.onChange, args: { ...props.onChange.args ?? {}, index } });
|
|
124935
125059
|
};
|
|
124936
|
-
|
|
125060
|
+
React13.useEffect(() => {
|
|
124937
125061
|
currentRef.current = requested;
|
|
124938
125062
|
setCurrent(requested);
|
|
124939
125063
|
if (rail.current && !boundRail) rail.current.scrollLeft = requested * rail.current.clientWidth;
|
|
124940
125064
|
}, [requested, boundRail, pages2.length]);
|
|
124941
|
-
|
|
125065
|
+
React13.useEffect(() => {
|
|
124942
125066
|
const interval = props.autoplayIntervalMs;
|
|
124943
125067
|
if (props.__pager || boundRail || !Number.isFinite(interval) || interval <= 0 || pages2.length < 2 || ctx.reduceMotion()) return;
|
|
124944
125068
|
const timer = setInterval(() => {
|
|
@@ -124964,10 +125088,14 @@ var init_renderNode = __esm({
|
|
|
124964
125088
|
select2(index);
|
|
124965
125089
|
},
|
|
124966
125090
|
onScroll: (event) => {
|
|
124967
|
-
if (!boundRail && event.currentTarget.clientWidth > 0)
|
|
125091
|
+
if (!boundRail && event.currentTarget.clientWidth > 0) {
|
|
125092
|
+
const page = Math.max(0, Math.min(pages2.length - 1, Math.round(event.currentTarget.scrollLeft / event.currentTarget.clientWidth)));
|
|
125093
|
+
scrolling(page);
|
|
125094
|
+
select2(page);
|
|
125095
|
+
}
|
|
124968
125096
|
},
|
|
124969
125097
|
style: { display: "flex", overflowX: "auto", scrollSnapType: boundRail ? void 0 : "x mandatory", gap: boundRail ? 12 : void 0, width: "100%" },
|
|
124970
|
-
children: boundRail ? /* @__PURE__ */ jsx11(BoundList, { ctx, itemsPath, template: items[0], renderRow: (template, itemCtx) => /* @__PURE__ */ jsx11("div", { style: { flex: "0 0 auto" }, children: renderNode(template, itemCtx) }) }) : pages2.map((page, index) => /* @__PURE__ */ jsx11("div", { style: { minWidth: "100%", scrollSnapAlign: "start" }, children:
|
|
125098
|
+
children: boundRail ? /* @__PURE__ */ jsx11(BoundList, { ctx, itemsPath, template: items[0], renderRow: (template, itemCtx) => /* @__PURE__ */ jsx11("div", { style: { flex: "0 0 auto" }, children: renderNode(template, itemCtx) }) }) : pages2.map((page, index) => /* @__PURE__ */ jsx11("div", { style: { minWidth: "100%", scrollSnapAlign: "start" }, children: /* @__PURE__ */ jsx11(LiveWindowPage, { page, index, count: pages2.length, current: settled, liveWindow: props.liveWindow, ownerId: nodeId || (props.__pager ? "pager" : "carousel"), heights: pageHeights, ctx }) }, page?.id ?? index))
|
|
124971
125099
|
}
|
|
124972
125100
|
),
|
|
124973
125101
|
!boundRail && pages2.length > 1 && (!props.__pager || props.showIndicator !== false) && /* @__PURE__ */ jsx11("div", { "aria-label": `Page ${current + 1} of ${pages2.length}`, style: { display: "flex", gap: 6, justifyContent: "center", marginTop: 10 }, children: pages2.map((_2, index) => /* @__PURE__ */ jsx11("span", { "aria-current": index === current ? "true" : void 0, style: { width: index === current ? 18 : 7, height: 7, borderRadius: 999, background: index === current ? ctx.color("accentPrimary", "#116DFF") : ctx.color("border", "#ccc") } }, index)) })
|
|
@@ -124981,19 +125109,19 @@ var init_renderNode = __esm({
|
|
|
124981
125109
|
const opts = Array.isArray(rawOpts) ? rawOpts : [];
|
|
124982
125110
|
const selectedId = isBinding(props.selectedId) ? boundSel : props.selectedId;
|
|
124983
125111
|
const selIdx = Math.max(0, opts.findIndex((o2) => o2?.id === selectedId));
|
|
124984
|
-
const viewport =
|
|
124985
|
-
const settle2 =
|
|
124986
|
-
const pickerId =
|
|
125112
|
+
const viewport = React13.useRef(null);
|
|
125113
|
+
const settle2 = React13.useRef(void 0);
|
|
125114
|
+
const pickerId = React13.useId();
|
|
124987
125115
|
const interactive = !!ctx.onAction && !!props.onChange;
|
|
124988
125116
|
const emit = (index) => {
|
|
124989
125117
|
const id = opts[index]?.id;
|
|
124990
125118
|
if (!interactive || id == null || index === selIdx) return;
|
|
124991
125119
|
ctx.onAction({ ...props.onChange, args: { ...props.onChange.args ?? {}, selectedId: String(id) } });
|
|
124992
125120
|
};
|
|
124993
|
-
|
|
125121
|
+
React13.useEffect(() => {
|
|
124994
125122
|
if (viewport.current) viewport.current.scrollTop = selIdx * 32;
|
|
124995
125123
|
}, [selIdx, opts.length]);
|
|
124996
|
-
|
|
125124
|
+
React13.useEffect(() => () => clearTimeout(settle2.current), []);
|
|
124997
125125
|
return /* @__PURE__ */ jsxs8("div", { style: { position: "relative", width: "100%", maxWidth: 220, height: 160, overflow: "hidden", background: C2("surfaceSecondary", "#f5f7fa"), borderRadius: 12, ...wrap }, children: [
|
|
124998
125126
|
/* @__PURE__ */ jsx11("div", { "aria-hidden": "true", style: { position: "absolute", top: 64, left: 8, right: 8, height: 32, background: C2("surfacePrimary", "#fff"), borderRadius: 8, boxShadow: "inset 0 0 0 1px rgba(0,0,0,.06)" } }),
|
|
124999
125127
|
/* @__PURE__ */ jsx11(
|
|
@@ -125104,23 +125232,23 @@ var init_renderNode = __esm({
|
|
|
125104
125232
|
const hasEvents = !!(props.onMapTap || props.onMarkerTap || props.onRegionChange || props.onShapeTap);
|
|
125105
125233
|
const boundShapes = useResolvedScalar(props.shapesPath, ctx);
|
|
125106
125234
|
const shapesRaw = Array.isArray(boundShapes) ? boundShapes : Array.isArray(props.shapes) ? props.shapes : [];
|
|
125107
|
-
const shapes =
|
|
125235
|
+
const shapes = React13.useMemo(() => shapesRaw.map((sh) => {
|
|
125108
125236
|
const kind = parseShapeKind(sh?.kind);
|
|
125109
125237
|
const pts = Array.isArray(sh?.points) ? sh.points.filter((p2) => p2 && typeof p2.latitude === "number" && typeof p2.longitude === "number") : [];
|
|
125110
125238
|
const ring = kind === "circle" && pts.length ? circleRing(pts[0].latitude, pts[0].longitude, typeof sh.radiusM === "number" ? sh.radiusM : 0) : pts;
|
|
125111
125239
|
return { ...sh, kind, points: ring };
|
|
125112
125240
|
}), [JSON.stringify(shapesRaw)]);
|
|
125113
125241
|
const boundCameraRaw = useResolvedScalar(props.cameraPath, ctx);
|
|
125114
|
-
const commandedCamera =
|
|
125115
|
-
const [box, setBox] =
|
|
125116
|
-
const [tileStatus, setTileStatus] =
|
|
125117
|
-
const [userCam, setUserCam] =
|
|
125118
|
-
const dragRef =
|
|
125119
|
-
const dragMovedRef =
|
|
125120
|
-
const regionReportedRef =
|
|
125121
|
-
const [boxEl, setBoxEl] =
|
|
125122
|
-
const attachBox =
|
|
125123
|
-
|
|
125242
|
+
const commandedCamera = React13.useMemo(() => decodeCamera(boundCameraRaw), [boundCameraRaw]);
|
|
125243
|
+
const [box, setBox] = React13.useState({ w: 400, h: h2 });
|
|
125244
|
+
const [tileStatus, setTileStatus] = React13.useState({});
|
|
125245
|
+
const [userCam, setUserCam] = React13.useState(null);
|
|
125246
|
+
const dragRef = React13.useRef(null);
|
|
125247
|
+
const dragMovedRef = React13.useRef(false);
|
|
125248
|
+
const regionReportedRef = React13.useRef(false);
|
|
125249
|
+
const [boxEl, setBoxEl] = React13.useState(null);
|
|
125250
|
+
const attachBox = React13.useCallback((el2) => setBoxEl(el2), []);
|
|
125251
|
+
React13.useEffect(() => {
|
|
125124
125252
|
const el2 = boxEl;
|
|
125125
125253
|
if (!el2) return;
|
|
125126
125254
|
const measure2 = () => {
|
|
@@ -125143,12 +125271,12 @@ var init_renderNode = __esm({
|
|
|
125143
125271
|
const explicitSchematic = schematic && props.routeMode?.toLowerCase() === "schematic";
|
|
125144
125272
|
const usesTileArm = !explicitSchematic && (otherTileReason || hasStaticMarkers) && (follow || !schematic);
|
|
125145
125273
|
const pinsOnly = hasStaticMarkers && !otherTileReason;
|
|
125146
|
-
const [userFix, setUserFix] =
|
|
125147
|
-
const [followBroken, setFollowBroken] =
|
|
125148
|
-
|
|
125274
|
+
const [userFix, setUserFix] = React13.useState(null);
|
|
125275
|
+
const [followBroken, setFollowBroken] = React13.useState(false);
|
|
125276
|
+
React13.useEffect(() => {
|
|
125149
125277
|
if (follow) setFollowBroken(false);
|
|
125150
125278
|
}, [follow]);
|
|
125151
|
-
|
|
125279
|
+
React13.useEffect(() => {
|
|
125152
125280
|
if (!observeUserLocation || !usesTileArm) return;
|
|
125153
125281
|
const geo = typeof navigator !== "undefined" ? navigator.geolocation : void 0;
|
|
125154
125282
|
if (!geo || typeof geo.watchPosition !== "function") return;
|
|
@@ -125175,7 +125303,7 @@ var init_renderNode = __esm({
|
|
|
125175
125303
|
const z5 = userCam?.z ?? fitted;
|
|
125176
125304
|
const cLat = followActive ? userFix.lat : userCam?.lat ?? baseLat;
|
|
125177
125305
|
const cLng = followActive ? userFix.lng : userCam?.lng ?? baseLng;
|
|
125178
|
-
|
|
125306
|
+
React13.useEffect(() => {
|
|
125179
125307
|
const resolved2 = resolveCamera(commandedCamera, cLat, cLng, z5);
|
|
125180
125308
|
if (!resolved2) return;
|
|
125181
125309
|
setFollowBroken(true);
|
|
@@ -125257,7 +125385,7 @@ var init_renderNode = __esm({
|
|
|
125257
125385
|
const endDrag = () => {
|
|
125258
125386
|
dragRef.current = null;
|
|
125259
125387
|
};
|
|
125260
|
-
|
|
125388
|
+
React13.useEffect(() => {
|
|
125261
125389
|
if (!boxEl || !usesTileArm || !interactive) return;
|
|
125262
125390
|
const zoomOnWheel = (event) => {
|
|
125263
125391
|
event.preventDefault();
|
|
@@ -125267,7 +125395,7 @@ var init_renderNode = __esm({
|
|
|
125267
125395
|
boxEl.addEventListener("wheel", zoomOnWheel, { passive: false });
|
|
125268
125396
|
return () => boxEl.removeEventListener("wheel", zoomOnWheel);
|
|
125269
125397
|
}, [boxEl, usesTileArm, interactive, z5, cLat, cLng]);
|
|
125270
|
-
|
|
125398
|
+
React13.useEffect(() => {
|
|
125271
125399
|
const action = props.onRegionChange;
|
|
125272
125400
|
const fire = ctx.onAction;
|
|
125273
125401
|
if (!usesTileArm || !action || !fire) return;
|
|
@@ -125399,35 +125527,39 @@ var init_renderNode = __esm({
|
|
|
125399
125527
|
if (typeof el2.scrollTo === "function") el2.scrollTo({ left, behavior: "smooth" });
|
|
125400
125528
|
else el2.scrollLeft = left;
|
|
125401
125529
|
};
|
|
125402
|
-
CarouselNode = withExtras("CarouselNode", ({ props, ctx, wrap }) => {
|
|
125530
|
+
CarouselNode = withExtras("CarouselNode", ({ props, ctx, wrap, nodeId }) => {
|
|
125403
125531
|
const C2 = ctx.color;
|
|
125404
125532
|
const items = Array.isArray(props.items) ? props.items : [];
|
|
125405
125533
|
const pages2 = items.filter((p2) => isNodeLike(p2) || p2?.type);
|
|
125406
125534
|
const count2 = pages2.length;
|
|
125407
|
-
const [index, setIndex] =
|
|
125408
|
-
const indexRef =
|
|
125409
|
-
const
|
|
125410
|
-
const [
|
|
125411
|
-
const
|
|
125535
|
+
const [index, setIndex] = React13.useState(typeof props.currentIndex === "number" ? props.currentIndex : 0);
|
|
125536
|
+
const indexRef = React13.useRef(index);
|
|
125537
|
+
const { settled, scrolling } = useSettledPage(index);
|
|
125538
|
+
const [, heightsChanged] = React13.useReducer((n2) => n2 + 1, 0);
|
|
125539
|
+
const pageKey = pages2.map((p2, i2) => p2?.id ?? `#${i2}`).join("\0");
|
|
125540
|
+
const pageHeights = React13.useMemo(() => ({ map: /* @__PURE__ */ new Map(), changed: heightsChanged }), [pageKey]);
|
|
125541
|
+
const trackRef = React13.useRef(null);
|
|
125542
|
+
const [hovered, setHovered] = React13.useState(false);
|
|
125543
|
+
const [focused, setFocused] = React13.useState(false);
|
|
125412
125544
|
const paused = hovered || focused;
|
|
125413
125545
|
const interval = typeof props.autoplayIntervalMs === "number" && props.autoplayIntervalMs > 0 ? props.autoplayIntervalMs : 0;
|
|
125414
125546
|
const autoplay = interval > 0 && count2 > 1 && !ctx.reduceMotion();
|
|
125415
125547
|
const onChange = props.onChange;
|
|
125416
|
-
const onChangeRef =
|
|
125548
|
+
const onChangeRef = React13.useRef(onChange);
|
|
125417
125549
|
onChangeRef.current = onChange;
|
|
125418
|
-
const autoScrollRef =
|
|
125419
|
-
const endAutoScroll =
|
|
125550
|
+
const autoScrollRef = React13.useRef(null);
|
|
125551
|
+
const endAutoScroll = React13.useCallback(() => {
|
|
125420
125552
|
if (autoScrollRef.current) clearTimeout(autoScrollRef.current.timer);
|
|
125421
125553
|
autoScrollRef.current = null;
|
|
125422
125554
|
}, []);
|
|
125423
125555
|
const requestedIndex = Math.max(0, Math.min(count2 - 1, typeof props.currentIndex === "number" ? props.currentIndex : 0));
|
|
125424
|
-
|
|
125556
|
+
React13.useEffect(() => {
|
|
125425
125557
|
endAutoScroll();
|
|
125426
125558
|
indexRef.current = requestedIndex;
|
|
125427
125559
|
setIndex(requestedIndex);
|
|
125428
125560
|
if (trackRef.current) trackRef.current.scrollLeft = requestedIndex * trackRef.current.clientWidth;
|
|
125429
125561
|
}, [requestedIndex, count2, endAutoScroll]);
|
|
125430
|
-
|
|
125562
|
+
React13.useEffect(() => {
|
|
125431
125563
|
const el2 = trackRef.current;
|
|
125432
125564
|
el2?.addEventListener("scrollend", endAutoScroll);
|
|
125433
125565
|
return () => {
|
|
@@ -125435,14 +125567,14 @@ var init_renderNode = __esm({
|
|
|
125435
125567
|
endAutoScroll();
|
|
125436
125568
|
};
|
|
125437
125569
|
}, [endAutoScroll]);
|
|
125438
|
-
const pageTo =
|
|
125570
|
+
const pageTo = React13.useCallback((page) => {
|
|
125439
125571
|
if (page === indexRef.current) return;
|
|
125440
125572
|
indexRef.current = page;
|
|
125441
125573
|
setIndex(page);
|
|
125442
125574
|
const action = onChangeRef.current;
|
|
125443
125575
|
if (action && ctx.onAction) ctx.onAction({ ...action, args: { ...action.args ?? {}, index: page } });
|
|
125444
125576
|
}, [ctx]);
|
|
125445
|
-
|
|
125577
|
+
React13.useEffect(() => {
|
|
125446
125578
|
if (!autoplay || paused) return;
|
|
125447
125579
|
const id = setInterval(() => {
|
|
125448
125580
|
const next = (indexRef.current + 1) % count2;
|
|
@@ -125461,6 +125593,7 @@ var init_renderNode = __esm({
|
|
|
125461
125593
|
if (page === autoScrollRef.current.target) endAutoScroll();
|
|
125462
125594
|
return;
|
|
125463
125595
|
}
|
|
125596
|
+
scrolling(page);
|
|
125464
125597
|
pageTo(page);
|
|
125465
125598
|
};
|
|
125466
125599
|
const onPointerOver = () => setHovered(true);
|
|
@@ -125499,7 +125632,7 @@ var init_renderNode = __esm({
|
|
|
125499
125632
|
const next = event.key === "Home" ? 0 : event.key === "End" ? count2 - 1 : Math.max(0, Math.min(count2 - 1, indexRef.current + (event.key === "ArrowRight" ? 1 : -1)));
|
|
125500
125633
|
if (trackRef.current) trackRef.current.scrollLeft = next * trackRef.current.clientWidth;
|
|
125501
125634
|
pageTo(next);
|
|
125502
|
-
}, style: { display: "flex", overflowX: "auto", scrollSnapType: "x mandatory", width: "100%" }, children: pages2.map((pg, i2) => /* @__PURE__ */ jsx11("div", { style: { minWidth: "100%", scrollSnapAlign: "start" }, children:
|
|
125635
|
+
}, style: { display: "flex", overflowX: "auto", scrollSnapType: "x mandatory", width: "100%" }, children: pages2.map((pg, i2) => /* @__PURE__ */ jsx11("div", { style: { minWidth: "100%", scrollSnapAlign: "start" }, children: /* @__PURE__ */ jsx11(LiveWindowPage, { page: pg, index: i2, count: count2, current: settled, liveWindow: props.liveWindow, ownerId: nodeId || "carousel", heights: pageHeights, ctx }) }, pg?.id ?? i2)) }),
|
|
125503
125636
|
count2 > 1 && /* @__PURE__ */ jsx11("div", { "aria-label": `Page ${index + 1} of ${count2}`, style: { display: "flex", gap: 6, justifyContent: "center", marginTop: 10 }, children: pages2.map((_2, i2) => /* @__PURE__ */ jsx11("span", { "aria-current": i2 === index ? "true" : void 0, style: { width: i2 === index ? 18 : 7, height: 7, borderRadius: 999, background: i2 === index ? C2("accentPrimary", "#116DFF") : C2("border", "#ccc") } }, i2)) })
|
|
125504
125637
|
]
|
|
125505
125638
|
}
|
|
@@ -125507,7 +125640,7 @@ var init_renderNode = __esm({
|
|
|
125507
125640
|
});
|
|
125508
125641
|
BannerNode = withExtras("BannerNode", ({ props, ctx, wrap }) => {
|
|
125509
125642
|
const C2 = ctx.color;
|
|
125510
|
-
const [dismissed, setDismissed] =
|
|
125643
|
+
const [dismissed, setDismissed] = React13.useState(false);
|
|
125511
125644
|
if (dismissed) return null;
|
|
125512
125645
|
const accent = sevColor(ctx, props.severity ?? "info");
|
|
125513
125646
|
return /* @__PURE__ */ jsxs8("div", { style: { display: "flex", gap: 11, width: "100%", boxSizing: "border-box", borderRadius: ctx.radius("md", 10), padding: 13, background: `color-mix(in srgb, ${accent} 12%, ${C2("surfacePrimary", "#fff")})`, border: `1px solid color-mix(in srgb, ${accent} 32%, transparent)`, ...wrap }, children: [
|
|
@@ -125540,15 +125673,15 @@ var init_renderNode = __esm({
|
|
|
125540
125673
|
const rawImageUrl = props.imageUrl != null && isBinding(props.imageUrl) ? boundImageUrl : props.imageUrl;
|
|
125541
125674
|
const heroSrc = typeof rawImageUrl === "string" && rawImageUrl !== "" ? rawImageUrl : typeof props.imageAsset === "string" && isWebAssetPath(props.imageAsset) ? props.imageAsset : void 0;
|
|
125542
125675
|
const resolvedHero = heroSrc ? resolveAssetUrl(heroSrc, ctx.assetBaseUrl) : void 0;
|
|
125543
|
-
const [failedHero, setFailedHero] =
|
|
125676
|
+
const [failedHero, setFailedHero] = React13.useState(null);
|
|
125544
125677
|
const imageUrl = resolvedHero && resolvedHero !== failedHero ? resolvedHero : void 0;
|
|
125545
125678
|
const expanded = Math.max(0, typeof props.expandedHeight === "number" && Number.isFinite(props.expandedHeight) ? props.expandedHeight : 280);
|
|
125546
125679
|
const collapsed = Math.max(0, Math.min(expanded, typeof props.collapsedHeight === "number" && props.collapsedHeight > 0 ? props.collapsedHeight : 64));
|
|
125547
125680
|
const parallax = typeof props.parallaxFactor === "number" && Number.isFinite(props.parallaxFactor) ? Math.max(0, Math.min(1, props.parallaxFactor)) : 0.5;
|
|
125548
125681
|
const span = Math.max(1, expanded - collapsed);
|
|
125549
|
-
const rootRef =
|
|
125550
|
-
const [offset, setOffset] =
|
|
125551
|
-
|
|
125682
|
+
const rootRef = React13.useRef(null);
|
|
125683
|
+
const [offset, setOffset] = React13.useState(0);
|
|
125684
|
+
React13.useEffect(() => {
|
|
125552
125685
|
const el2 = rootRef.current;
|
|
125553
125686
|
const win = el2?.ownerDocument?.defaultView;
|
|
125554
125687
|
if (!el2 || !win) return;
|
|
@@ -125650,22 +125783,22 @@ var init_renderNode = __esm({
|
|
|
125650
125783
|
const boundEnd = useResolvedScalar(props.selectedEndDatePath, ctx);
|
|
125651
125784
|
const seedStart = (props.selectedStartDatePath != null ? typeof boundStart === "string" ? boundStart : "" : typeof props.selectedStartDate === "string" ? props.selectedStartDate : "") || "";
|
|
125652
125785
|
const seedEnd = (props.selectedEndDatePath != null ? typeof boundEnd === "string" ? boundEnd : "" : typeof props.selectedEndDate === "string" ? props.selectedEndDate : "") || "";
|
|
125653
|
-
const [range, setRange] =
|
|
125654
|
-
const lastRangeSeed =
|
|
125655
|
-
|
|
125786
|
+
const [range, setRange] = React13.useState({ start: seedStart, end: seedEnd });
|
|
125787
|
+
const lastRangeSeed = React13.useRef(`${seedStart}|${seedEnd}`);
|
|
125788
|
+
React13.useEffect(() => {
|
|
125656
125789
|
const key3 = `${seedStart}|${seedEnd}`;
|
|
125657
125790
|
if (lastRangeSeed.current === key3) return;
|
|
125658
125791
|
lastRangeSeed.current = key3;
|
|
125659
125792
|
setRange({ start: seedStart, end: seedEnd });
|
|
125660
125793
|
}, [seedStart, seedEnd]);
|
|
125661
|
-
const seed2 =
|
|
125794
|
+
const seed2 = React13.useMemo(
|
|
125662
125795
|
() => monthSeed(drivenYear ?? props.year, drivenMonth ?? props.month, selectedDate),
|
|
125663
125796
|
[drivenYear, drivenMonth, props.year, props.month, selectedDate]
|
|
125664
125797
|
);
|
|
125665
|
-
const [view, setView] =
|
|
125798
|
+
const [view, setView] = React13.useState(seed2);
|
|
125666
125799
|
const seedKey = `${seed2.year}-${seed2.month}`;
|
|
125667
|
-
const lastSeed =
|
|
125668
|
-
|
|
125800
|
+
const lastSeed = React13.useRef(seedKey);
|
|
125801
|
+
React13.useEffect(() => {
|
|
125669
125802
|
if (lastSeed.current === seedKey) return;
|
|
125670
125803
|
lastSeed.current = seedKey;
|
|
125671
125804
|
setView(seed2);
|
|
@@ -125675,18 +125808,18 @@ var init_renderNode = __esm({
|
|
|
125675
125808
|
const boundMode = useResolvedScalar(props.displayModePath, ctx);
|
|
125676
125809
|
const drivenMode = props.displayModePath != null && (boundMode === "week" || boundMode === "month") ? boundMode : void 0;
|
|
125677
125810
|
const modeSeed = drivenMode ?? (props.displayMode === "week" ? "week" : "month");
|
|
125678
|
-
const [mode, setMode] =
|
|
125679
|
-
const lastModeSeed =
|
|
125680
|
-
|
|
125811
|
+
const [mode, setMode] = React13.useState(modeSeed);
|
|
125812
|
+
const lastModeSeed = React13.useRef(modeSeed);
|
|
125813
|
+
React13.useEffect(() => {
|
|
125681
125814
|
if (lastModeSeed.current === modeSeed) return;
|
|
125682
125815
|
lastModeSeed.current = modeSeed;
|
|
125683
125816
|
setMode(modeSeed);
|
|
125684
125817
|
}, [modeSeed]);
|
|
125685
125818
|
const isWeek = mode === "week";
|
|
125686
125819
|
const weekSeed = calWeekStart(selectedDate ?? localDayKey(/* @__PURE__ */ new Date()), firstWeekday);
|
|
125687
|
-
const [weekStart, setWeekStart] =
|
|
125688
|
-
const lastWeekSeed =
|
|
125689
|
-
|
|
125820
|
+
const [weekStart, setWeekStart] = React13.useState(weekSeed);
|
|
125821
|
+
const lastWeekSeed = React13.useRef(weekSeed);
|
|
125822
|
+
React13.useEffect(() => {
|
|
125690
125823
|
if (lastWeekSeed.current === weekSeed) return;
|
|
125691
125824
|
lastWeekSeed.current = weekSeed;
|
|
125692
125825
|
setWeekStart(weekSeed);
|
|
@@ -125699,7 +125832,7 @@ var init_renderNode = __esm({
|
|
|
125699
125832
|
return { date, day: parseLocalDate(date)?.getDate() ?? 0, inMonth: true, isToday: date === todayKey };
|
|
125700
125833
|
})] : monthMatrix(year, month, firstWeekday);
|
|
125701
125834
|
const heads = weekdayLabels(firstWeekday);
|
|
125702
|
-
const gridRef =
|
|
125835
|
+
const gridRef = React13.useRef(null);
|
|
125703
125836
|
const titleMonth = isWeek ? calWeekTitleMonth(weekStart) : { year, month };
|
|
125704
125837
|
const monthLabel = new Date(titleMonth.year, titleMonth.month - 1, 1).toLocaleDateString(void 0, { month: "long", year: "numeric" });
|
|
125705
125838
|
const expandable = props.expandable === true;
|
|
@@ -125874,7 +126007,7 @@ var init_renderNode = __esm({
|
|
|
125874
126007
|
const events = Array.isArray(rawEvents) ? rawEvents : [];
|
|
125875
126008
|
const boundAnchor = useResolvedScalar(props.anchorDatePath, ctx);
|
|
125876
126009
|
const anchorRaw = props.anchorDatePath != null ? boundAnchor : props.anchorDate;
|
|
125877
|
-
const [pagedAnchor, setPagedAnchor] =
|
|
126010
|
+
const [pagedAnchor, setPagedAnchor] = React13.useState(null);
|
|
125878
126011
|
const localAnchor = pagedAnchor && Object.is(pagedAnchor.raw, anchorRaw) && pagedAnchor.path === props.anchorDatePath && pagedAnchor.mode === props.mode && pagedAnchor.provider === ctx.provider ? pagedAnchor.date : null;
|
|
125879
126012
|
if (pagedAnchor && !localAnchor) setPagedAnchor(null);
|
|
125880
126013
|
const anchor = localAnchor ?? (typeof anchorRaw === "string" ? parseLocalDate(anchorRaw) : null) ?? /* @__PURE__ */ new Date();
|
|
@@ -126114,7 +126247,7 @@ var init_renderNode = __esm({
|
|
|
126114
126247
|
const boundEvents = useResolvedScalar(props.eventsPath, ctx);
|
|
126115
126248
|
const rawEvents = props.eventsPath != null ? boundEvents : props.events;
|
|
126116
126249
|
const events = Array.isArray(rawEvents) ? rawEvents : [];
|
|
126117
|
-
const groups =
|
|
126250
|
+
const groups = React13.useMemo(() => {
|
|
126118
126251
|
const buckets = /* @__PURE__ */ new Map();
|
|
126119
126252
|
for (const ev of events) {
|
|
126120
126253
|
if (!ev) continue;
|
|
@@ -126134,19 +126267,19 @@ var init_renderNode = __esm({
|
|
|
126134
126267
|
const onSelect = (ev) => dispatchCalendarAction(ctx, ev?.onTap ?? props.onSelectEvent, { eventId: ev?.id });
|
|
126135
126268
|
const boundScrollTo = useResolvedScalar(props.scrollToDatePath, ctx);
|
|
126136
126269
|
const scrollTarget = props.scrollToDatePath != null ? typeof boundScrollTo === "string" ? boundScrollTo : void 0 : typeof props.scrollToDate === "string" ? props.scrollToDate : void 0;
|
|
126137
|
-
const containerRef =
|
|
126138
|
-
const [visibleDays, setVisibleDays] =
|
|
126270
|
+
const containerRef = React13.useRef(null);
|
|
126271
|
+
const [visibleDays, setVisibleDays] = React13.useState(CAL_AGENDA_INITIAL_DAYS);
|
|
126139
126272
|
const targetIndex = scrollTarget ? groups.findIndex((g2) => g2.key === scrollTarget) : -1;
|
|
126140
126273
|
const windowEnd = Math.max(visibleDays, targetIndex >= 0 ? targetIndex + 1 : 0);
|
|
126141
126274
|
const shown2 = groups.length > windowEnd ? groups.slice(0, windowEnd) : groups;
|
|
126142
126275
|
const hasMore = groups.length > shown2.length;
|
|
126143
|
-
|
|
126276
|
+
React13.useEffect(() => {
|
|
126144
126277
|
if (!scrollTarget) return;
|
|
126145
126278
|
const block = groups[0]?.key === scrollTarget ? "nearest" : "start";
|
|
126146
126279
|
containerRef.current?.querySelector(`[data-daygroup="${scrollTarget}"]`)?.scrollIntoView({ block });
|
|
126147
126280
|
}, [scrollTarget, windowEnd]);
|
|
126148
|
-
const sentinelRef =
|
|
126149
|
-
|
|
126281
|
+
const sentinelRef = React13.useRef(null);
|
|
126282
|
+
React13.useEffect(() => {
|
|
126150
126283
|
if (!hasMore) return;
|
|
126151
126284
|
const el2 = sentinelRef.current;
|
|
126152
126285
|
if (!el2 || typeof IntersectionObserver === "undefined") return;
|
|
@@ -126263,26 +126396,26 @@ var init_renderNode = __esm({
|
|
|
126263
126396
|
PRESENTED_SCOPE = '[aria-modal="true"], [role="dialog"], [role="alertdialog"], [role="menu"]';
|
|
126264
126397
|
focusRoots = /* @__PURE__ */ new WeakMap();
|
|
126265
126398
|
A11yHintDescription = ({ hint, idBase, children, ...forwarded }) => {
|
|
126266
|
-
const descId = `${idBase ?? "hm"}__hint${
|
|
126399
|
+
const descId = `${idBase ?? "hm"}__hint${React13.useId()}`;
|
|
126267
126400
|
const own6 = children.props;
|
|
126268
126401
|
const next = { ...forwarded };
|
|
126269
126402
|
if (forwarded.style) next.style = { ...own6.style ?? {}, ...forwarded.style };
|
|
126270
126403
|
const ids = [own6["aria-describedby"], forwarded["aria-describedby"], descId].flatMap((v2) => v2 ? String(v2).split(/\s+/) : []).filter(Boolean);
|
|
126271
126404
|
next["aria-describedby"] = Array.from(new Set(ids)).join(" ");
|
|
126272
126405
|
return /* @__PURE__ */ jsxs8(Fragment4, { children: [
|
|
126273
|
-
|
|
126406
|
+
React13.cloneElement(children, next),
|
|
126274
126407
|
/* @__PURE__ */ jsx11("span", { id: descId, hidden: true, "data-hm-a11y-hint": "", children: hint })
|
|
126275
126408
|
] });
|
|
126276
126409
|
};
|
|
126277
126410
|
reportedUnknownComponents = /* @__PURE__ */ new Set();
|
|
126278
126411
|
UnknownComponentNode = ({ pkg, type, props, ctx, wrap, ...extras }) => {
|
|
126279
126412
|
const hasTelemetry = !!ctx.emitTelemetry;
|
|
126280
|
-
|
|
126413
|
+
React13.useEffect(() => {
|
|
126281
126414
|
reportUnknownComponent(ctx, pkg, type);
|
|
126282
126415
|
}, [ctx.appId, ctx.screenId, hasTelemetry, pkg, type]);
|
|
126283
126416
|
const { style: extraStyle, children: extraChildren, ...attrs } = extras;
|
|
126284
126417
|
const nodeProps = (entries) => entries.filter(([, v2]) => isNodeLike(v2) || Array.isArray(v2) && v2.some(isNodeLike));
|
|
126285
|
-
const renderProps = (entries) => entries.map(([k2, v2]) => /* @__PURE__ */ jsx11(
|
|
126418
|
+
const renderProps = (entries) => entries.map(([k2, v2]) => /* @__PURE__ */ jsx11(React13.Fragment, { children: Array.isArray(v2) ? kids2(v2.filter(isNodeLike), ctx) : renderNode(v2, ctx) }, k2));
|
|
126286
126419
|
const childKeys = nodeProps(Object.entries(props ?? {}));
|
|
126287
126420
|
if (!unknownComponentShowsDeveloperLabel(ctx)) {
|
|
126288
126421
|
const contentKeys = childKeys.filter(([k2]) => k2 === "child" || k2 === "children");
|
|
@@ -126306,7 +126439,7 @@ var init_renderNode = __esm({
|
|
|
126306
126439
|
});
|
|
126307
126440
|
|
|
126308
126441
|
// ../../core/web-renderer/src/renderToHtml.tsx
|
|
126309
|
-
import
|
|
126442
|
+
import React14 from "react";
|
|
126310
126443
|
import { renderToStaticMarkup } from "react-dom/server";
|
|
126311
126444
|
function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = null, width, chrome, opts) {
|
|
126312
126445
|
const rtl = opts?.isRTL === true;
|
|
@@ -126326,7 +126459,7 @@ function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = n
|
|
|
126326
126459
|
const withRenderStyles = (markup) => {
|
|
126327
126460
|
if (!markup) return markup;
|
|
126328
126461
|
if (!glassPreview) return FOCUS_STYLE_MARKUP + markup;
|
|
126329
|
-
const scoped = renderToStaticMarkup(
|
|
126462
|
+
const scoped = renderToStaticMarkup(React14.createElement(
|
|
126330
126463
|
"div",
|
|
126331
126464
|
{
|
|
126332
126465
|
className: "himi-ios-glass-preview",
|
|
@@ -126343,18 +126476,18 @@ function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = n
|
|
|
126343
126476
|
const dir = rtl ? { dir: "rtl" } : {};
|
|
126344
126477
|
if (header || footer) {
|
|
126345
126478
|
return withRenderStyles(renderToStaticMarkup(
|
|
126346
|
-
|
|
126479
|
+
React14.createElement(
|
|
126347
126480
|
"div",
|
|
126348
126481
|
// F-22 — same footer pin as ScreenHost: a full-height flex column + margin-top:auto
|
|
126349
126482
|
// keeps the footer at the bottom edge even when the payload is short.
|
|
126350
126483
|
{ "data-testid": "screen-host", ...dir, ...footer ? { style: { display: "flex", flexDirection: "column", minHeight: "100%", flexGrow: 1 } } : {} },
|
|
126351
|
-
header ?
|
|
126484
|
+
header ? React14.createElement(
|
|
126352
126485
|
"div",
|
|
126353
126486
|
{ "data-testid": "sticky-header", style: { position: "sticky", top: 0, zIndex: 10 } },
|
|
126354
126487
|
renderNode(header, ctx)
|
|
126355
126488
|
) : null,
|
|
126356
126489
|
renderNode(payload, ctx),
|
|
126357
|
-
footer ?
|
|
126490
|
+
footer ? React14.createElement(
|
|
126358
126491
|
"div",
|
|
126359
126492
|
{ "data-testid": "sticky-footer", style: { position: "sticky", bottom: 0, zIndex: 10, marginTop: "auto" } },
|
|
126360
126493
|
renderNode(footer, ctx)
|
|
@@ -126364,11 +126497,11 @@ function renderDescriptorToHtml(payload, tokens2, scheme = "light", provider = n
|
|
|
126364
126497
|
}
|
|
126365
126498
|
if (rtl) {
|
|
126366
126499
|
return withRenderStyles(renderToStaticMarkup(
|
|
126367
|
-
|
|
126500
|
+
React14.createElement("div", dir, renderNode(payload, ctx))
|
|
126368
126501
|
));
|
|
126369
126502
|
}
|
|
126370
126503
|
return withRenderStyles(renderToStaticMarkup(
|
|
126371
|
-
|
|
126504
|
+
React14.createElement(React14.Fragment, null, renderNode(payload, ctx))
|
|
126372
126505
|
));
|
|
126373
126506
|
}
|
|
126374
126507
|
var init_renderToHtml = __esm({
|
|
@@ -150275,7 +150408,7 @@ function keepFromSpec(dir, specPath) {
|
|
|
150275
150408
|
function droppedPrimaryTaps(dropped, primaryIds = /* @__PURE__ */ new Set()) {
|
|
150276
150409
|
const out2 = /* @__PURE__ */ new Map();
|
|
150277
150410
|
for (const d2 of dropped) {
|
|
150278
|
-
if (!primaryIds.has(d2.node) && !/\/primary$|[._](?:primary|cta)(?:[._]|$)/i.test(d2.node)) continue;
|
|
150411
|
+
if (!primaryIds.has(d2.node) && !/\/(?:primary|book)$|[._](?:primary|cta)(?:[._]|$)/i.test(d2.node)) continue;
|
|
150279
150412
|
const k2 = `${d2.screen}\u2192${d2.to}`;
|
|
150280
150413
|
const cur = out2.get(k2) ?? { screen: d2.screen, to: d2.to, taps: 0 };
|
|
150281
150414
|
cur.taps++;
|
|
@@ -153886,7 +154019,7 @@ function tokenColorIssues(dir, tokensPathOverride) {
|
|
|
153886
154019
|
);
|
|
153887
154020
|
}
|
|
153888
154021
|
const base = contrastFindings(colors);
|
|
153889
|
-
for (const f2 of base) warn3(`${tokensPath}: ${f2.render(f2.schemes)}`);
|
|
154022
|
+
for (const f2 of base) (f2.invisible ? error : warn3)(`${tokensPath}: ${f2.render(f2.schemes)}`);
|
|
153890
154023
|
if (idiom !== null && typeof idiom === "object" && !Array.isArray(idiom)) {
|
|
153891
154024
|
const seen = new Set(base.flatMap((f2) => f2.schemes.map((s2) => `${f2.key}|${s2}`)));
|
|
153892
154025
|
for (const [overlay, layer] of Object.entries(idiom)) {
|
|
@@ -153895,7 +154028,7 @@ function tokenColorIssues(dir, tokensPathOverride) {
|
|
|
153895
154028
|
const merged = mergeIdiomOverlay({ colors }, { colors: layerColors }).colors;
|
|
153896
154029
|
for (const f2 of contrastFindings(merged)) {
|
|
153897
154030
|
const added = f2.schemes.filter((s2) => !seen.has(`${f2.key}|${s2}`));
|
|
153898
|
-
if (added.length) warn3(`${tokensPath}: under the idiom.${overlay} overlay, ${f2.render(added)}`);
|
|
154031
|
+
if (added.length) (f2.invisible ? error : warn3)(`${tokensPath}: under the idiom.${overlay} overlay, ${f2.render(added)}`);
|
|
153899
154032
|
}
|
|
153900
154033
|
}
|
|
153901
154034
|
}
|
|
@@ -153957,11 +154090,15 @@ function contrastFindings(colors) {
|
|
|
153957
154090
|
findings.set(key3, {
|
|
153958
154091
|
key: key3,
|
|
153959
154092
|
schemes: [scheme],
|
|
154093
|
+
// Body text the page makes invisible is an error too (#4999): the same no-degraded-mode case
|
|
154094
|
+
// as invisible card text, and the card pass defers to this row when page and card match.
|
|
154095
|
+
invisible: fgName === "textPrimary" && ratio < INVISIBLE_TEXT,
|
|
153960
154096
|
render: (schemes) => `colors.${fgName} (${fg}) on colors.${pair.bg} (${bg}) is ${ratio.toFixed(2)}:1 in ${schemes.join(" / ")} \u2014 below the WCAG AA ${AA_TEXT}:1 for text. ${fgName} is ${pair.use}, so that text is hard to read.${fix}`
|
|
153961
154097
|
});
|
|
153962
154098
|
}
|
|
153963
154099
|
}
|
|
153964
154100
|
accentOnSurfaces(colors, declared, findings);
|
|
154101
|
+
textOnCardSurfaces(colors, declared, findings);
|
|
153965
154102
|
return [...findings.values()];
|
|
153966
154103
|
}
|
|
153967
154104
|
function sameHueClearingAll(fg, bgs, target = AA_TEXT) {
|
|
@@ -153975,6 +154112,45 @@ function sameHueClearingAll(fg, bgs, target = AA_TEXT) {
|
|
|
153975
154112
|
}
|
|
153976
154113
|
return void 0;
|
|
153977
154114
|
}
|
|
154115
|
+
function textOnCardSurfaces(colors, declared, findings) {
|
|
154116
|
+
const fgName = "textPrimary";
|
|
154117
|
+
if (colors[fgName] === void 0) return;
|
|
154118
|
+
for (const surface of CARD_TEXT_SURFACES) {
|
|
154119
|
+
if (colors[surface] === void 0) continue;
|
|
154120
|
+
for (const scheme of SCHEMES) {
|
|
154121
|
+
if (!declared.has(scheme)) continue;
|
|
154122
|
+
const fg = schemeValue(colors[fgName], scheme);
|
|
154123
|
+
const bg = schemeValue(colors[surface], scheme);
|
|
154124
|
+
if (!fg || !bg) continue;
|
|
154125
|
+
const painted2 = paintedOver(fg, bg);
|
|
154126
|
+
if (!painted2) continue;
|
|
154127
|
+
const pageRaw = schemeValue(colors.surfacePrimary, scheme);
|
|
154128
|
+
const page = pageRaw && paintedOver(fg, pageRaw) ? pageRaw.slice(0, 7) : void 0;
|
|
154129
|
+
const opaqueBg = bg.slice(0, 7);
|
|
154130
|
+
if (page === opaqueBg) continue;
|
|
154131
|
+
const ratio = contrastRatio3(painted2, opaqueBg);
|
|
154132
|
+
if (ratio >= AA_TEXT) continue;
|
|
154133
|
+
if (ratio >= INVISIBLE_TEXT && page && contrastRatio3(paintedOver(fg, pageRaw), page) < AA_TEXT) continue;
|
|
154134
|
+
const key3 = `${fgName}|${surface}|${fg}|${bg}|${page ?? ""}`;
|
|
154135
|
+
const same3 = findings.get(key3);
|
|
154136
|
+
if (same3) {
|
|
154137
|
+
same3.schemes.push(scheme);
|
|
154138
|
+
continue;
|
|
154139
|
+
}
|
|
154140
|
+
const opposite = page !== void 0 && onLightSide(page) !== onLightSide(opaqueBg);
|
|
154141
|
+
const noSingle = page !== void 0 && opposite && contrastRatio3(page, opaqueBg) < AA_TEXT * AA_TEXT;
|
|
154142
|
+
const suggestion = noSingle ? void 0 : sameHueClearingAll(painted2, page ? [page, opaqueBg] : [opaqueBg]);
|
|
154143
|
+
const restructure = ` Move ${surface} to the page's side of mid-grey (a ${page && onLightSide(page) ? "light" : "dark"} ${surface} on this page), or scope the card's text colour with \`modifiers.theme\` (e.g. { "colors": { "textPrimary": "#RRGGBB" } } on the card).`;
|
|
154144
|
+
const fix = noSingle ? ` surfacePrimary (${page}) and ${surface} (${opaqueBg}) sit on opposite sides of mid-grey, so no single textPrimary can clear ${AA_TEXT}:1 on both.${restructure}` : suggestion ? ` A ${fgName} that clears it${page ? " and the page" : ""} is ${suggestion} (${contrastRatio3(suggestion, opaqueBg).toFixed(2)}:1 on ${surface}).` + (opposite ? restructure : "") : ` No ${fgName} of this hue clears ${AA_TEXT}:1 on ${surface}${page ? " and the page" : ""}.` + (opposite ? restructure : "");
|
|
154145
|
+
findings.set(key3, {
|
|
154146
|
+
key: key3,
|
|
154147
|
+
schemes: [scheme],
|
|
154148
|
+
invisible: ratio < INVISIBLE_TEXT,
|
|
154149
|
+
render: (schemes) => `colors.${fgName} (${fg}) on colors.${surface} (${bg}) is ${ratio.toFixed(2)}:1 in ${schemes.join(" / ")} \u2014 below the WCAG AA ${AA_TEXT}:1 for text. ${fgName} is body and title text, and cards, sheets and list rows paint their titles and labels on ${surface}, not the page, so that text is hard to read or invisible.${fix}`
|
|
154150
|
+
});
|
|
154151
|
+
}
|
|
154152
|
+
}
|
|
154153
|
+
}
|
|
153978
154154
|
function accentOnSurfaces(colors, declared, findings) {
|
|
153979
154155
|
const hasAccentText = colors.accentText !== void 0;
|
|
153980
154156
|
for (const fgName of hasAccentText ? ["accentText", "accentPrimary"] : ["accentPrimary"]) {
|
|
@@ -154020,7 +154196,7 @@ function accentOnSurfacesFor(fgName, role, colors, declared, findings) {
|
|
|
154020
154196
|
}
|
|
154021
154197
|
}
|
|
154022
154198
|
}
|
|
154023
|
-
var INTEGER_TOKEN_FIELDS, INTEGER_TOKEN_MAPS, AA_TEXT, CONTRAST_PAIRS, SCHEMES, channels, toHex2, mixHex, onLightSide;
|
|
154199
|
+
var INTEGER_TOKEN_FIELDS, INTEGER_TOKEN_MAPS, AA_TEXT, INVISIBLE_TEXT, CONTRAST_PAIRS, SCHEMES, channels, toHex2, mixHex, onLightSide, CARD_TEXT_SURFACES;
|
|
154024
154200
|
var init_token_lint = __esm({
|
|
154025
154201
|
"src/token-lint.ts"() {
|
|
154026
154202
|
init_token_colors();
|
|
@@ -154033,6 +154209,7 @@ var init_token_lint = __esm({
|
|
|
154033
154209
|
];
|
|
154034
154210
|
INTEGER_TOKEN_MAPS = ["spacing", "radius"];
|
|
154035
154211
|
AA_TEXT = 4.5;
|
|
154212
|
+
INVISIBLE_TEXT = 1.5;
|
|
154036
154213
|
CONTRAST_PAIRS = [
|
|
154037
154214
|
{
|
|
154038
154215
|
fg: "accentPrimary",
|
|
@@ -154053,6 +154230,7 @@ var init_token_lint = __esm({
|
|
|
154053
154230
|
return toHex2(ca2.map((c2, i2) => c2 * w2 + cb[i2] * (1 - w2)));
|
|
154054
154231
|
};
|
|
154055
154232
|
onLightSide = (hex2) => contrastRatio3("#000000", hex2) >= contrastRatio3("#FFFFFF", hex2);
|
|
154233
|
+
CARD_TEXT_SURFACES = ["surfaceSecondary", "surfaceElevated"];
|
|
154056
154234
|
}
|
|
154057
154235
|
});
|
|
154058
154236
|
|
|
@@ -168801,38 +168979,38 @@ var init_preview_assets_generated = __esm({
|
|
|
168801
168979
|
"../../packages/serve/src/preview-assets.generated.ts"() {
|
|
168802
168980
|
init_preview_assets_format();
|
|
168803
168981
|
PREVIEW_ASSET_MANIFEST = [
|
|
168804
|
-
{ key: "assets/DashboardHost-
|
|
168805
|
-
{ key: "assets/DevDrawer-
|
|
168806
|
-
{ key: "assets/IdiomCompare-
|
|
168807
|
-
{ key: "assets/LightboxViewer-
|
|
168808
|
-
{ key: "assets/PhonePreviewControl-
|
|
168809
|
-
{ key: "assets/SchemeCompare-
|
|
168982
|
+
{ key: "assets/DashboardHost-Bj846Us1.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2916, sha256: "61f8fe74e7af4453425d4411e2b921b21ab50b65996da2324914f89ab331a00c" },
|
|
168983
|
+
{ key: "assets/DevDrawer-BBFrX7mE.js", contentType: "application/javascript; charset=utf-8", offset: 2924, length: 16744, sha256: "739e732189369e9aecb1e2a42ba1a0c9aaf9be2fd9e52c92824962b4fb353176" },
|
|
168984
|
+
{ key: "assets/IdiomCompare-SWzYZw-S.js", contentType: "application/javascript; charset=utf-8", offset: 19668, length: 1892, sha256: "1a666b1ef64e3abe2cf09e623d6d2b0154dda215cb9a8c4ae86e1953d2c001d6" },
|
|
168985
|
+
{ key: "assets/LightboxViewer-DdAzf3s1.js", contentType: "application/javascript; charset=utf-8", offset: 21560, length: 8132, sha256: "44a1d49fcb99f920a21093cb8257ee221270e03c957b53da9422a16026c227f0" },
|
|
168986
|
+
{ key: "assets/PhonePreviewControl-CkfYkUzf.js", contentType: "application/javascript; charset=utf-8", offset: 29692, length: 37729, sha256: "371c24a92955a2d083bfd0e63781635bf86a44df2a8107c2f2cc98f39ffbd4ac" },
|
|
168987
|
+
{ key: "assets/SchemeCompare-DxFs6E3A.js", contentType: "application/javascript; charset=utf-8", offset: 67421, length: 1824, sha256: "9a15cc50a91a5263de0a1fc21bd8192404714e18fe92c7e67b37399db93fc841" },
|
|
168810
168988
|
{ key: "assets/glassPreviewBrowser-Bt5ZFmG4.js", contentType: "application/javascript; charset=utf-8", offset: 69245, length: 342, sha256: "20d73f97d38f6d9a0b79e68e24954cd6bbfe66833a6e6aecae00a9102e64cab3" },
|
|
168811
|
-
{ key: "assets/index-
|
|
168812
|
-
{ key: "assets/pdf-
|
|
168813
|
-
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
168814
|
-
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset:
|
|
168815
|
-
{ key: "assets/pdfDocument-
|
|
168816
|
-
{ key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
168817
|
-
{ key: "assets/webviewBridgeHost-
|
|
168818
|
-
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset:
|
|
168819
|
-
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset:
|
|
168820
|
-
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset:
|
|
168821
|
-
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
168822
|
-
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset:
|
|
168823
|
-
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset:
|
|
168824
|
-
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
168825
|
-
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset:
|
|
168826
|
-
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
168827
|
-
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset:
|
|
168828
|
-
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset:
|
|
168829
|
-
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
168830
|
-
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
168831
|
-
{ key: "index.html", contentType: "text/html; charset=utf-8", offset:
|
|
168832
|
-
{ key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset:
|
|
168833
|
-
{ key: "ios-glass-preview.svg", contentType: "image/svg+xml", offset:
|
|
168834
|
-
{ key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset:
|
|
168835
|
-
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
168989
|
+
{ key: "assets/index-D_QfkdYs.js", contentType: "application/javascript; charset=utf-8", offset: 69587, length: 1342829, sha256: "618f576acd30abe2aa40ceefdf01c25b8d88440739faa1dd07c8dccdc018768b" },
|
|
168990
|
+
{ key: "assets/pdf-DmANontw.js", contentType: "application/javascript; charset=utf-8", offset: 1412416, length: 488199, sha256: "314d2fd0775446940489d7703961fdbf86ec60e44cbfec2ee01b43f6e7efac8c" },
|
|
168991
|
+
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1900615, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
|
|
168992
|
+
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1900688, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
|
|
168993
|
+
{ key: "assets/pdfDocument-CYAYFEwo.js", contentType: "application/javascript; charset=utf-8", offset: 3217722, length: 3379, sha256: "7bd09b21cb023744a610fa54d3fc4bed725809a44d99d61424ca58bc42afd571" },
|
|
168994
|
+
{ key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3221101, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
|
|
168995
|
+
{ key: "assets/webviewBridgeHost-IKhmRiMP.js", contentType: "application/javascript; charset=utf-8", offset: 3223367, length: 9849, sha256: "b747782404d1e8888300cae837498e755a09b8acda41a257731ea094784989dd" },
|
|
168996
|
+
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3233216, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
|
|
168997
|
+
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3237826, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
|
|
168998
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3726410, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
168999
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3817334, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
169000
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3908318, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
169001
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3999298, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
169002
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4090170, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
169003
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4181150, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
169004
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4289786, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
169005
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4398870, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
169006
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4507918, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
169007
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4615618, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
169008
|
+
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4703726, length: 6748, sha256: "4a92459977d7cefa1a6a7e020c3a63509737f083b3f2773557c1a5771665811a" },
|
|
169009
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 4710474, length: 4947, sha256: "f330d81ec1135e52fe917c6766b457e187e536147b59359f35e1dae94a77f026" },
|
|
169010
|
+
{ key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset: 4715421, length: 7193, sha256: "a482f4796147c2a3893942e10ab225bd3b6f749f7125fe0330680d4c20ea0212" },
|
|
169011
|
+
{ key: "ios-glass-preview.svg", contentType: "image/svg+xml", offset: 4722614, length: 423, sha256: "b9cd5989d31464a0422f260a332af6be5add0b04de2148944de35158f3b75efc" },
|
|
169012
|
+
{ key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset: 4723037, length: 1171, sha256: "9e2c3a0faaf05d5471badf167a4d3bdf1c4e6dd65c432eea6d254158bfd99585" },
|
|
169013
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4724208, length: 18778, sha256: "ba734d58c88281c71c01d9a2842a991d06f3ed91bf03449427ef11c7f6d1605d" }
|
|
168836
169014
|
];
|
|
168837
169015
|
}
|
|
168838
169016
|
});
|
|
@@ -173139,6 +173317,12 @@ function credentialsPlan(deps) {
|
|
|
173139
173317
|
};
|
|
173140
173318
|
}
|
|
173141
173319
|
async function connectProvider(provider, appId2, apply) {
|
|
173320
|
+
if (provider && !apply) {
|
|
173321
|
+
return {
|
|
173322
|
+
state: "unverified",
|
|
173323
|
+
detail: "whether the appleIAP payment provider is connected cannot be read (wix-iap has no read-only provider-readiness method), so applying sends ConnectProviderAccount again"
|
|
173324
|
+
};
|
|
173325
|
+
}
|
|
173142
173326
|
if (!provider || !apply) return providerPlan(provider);
|
|
173143
173327
|
try {
|
|
173144
173328
|
const { connected } = await provider.connect(appId2);
|
|
@@ -173200,7 +173384,16 @@ function mappingTarget(item, plans, rules = APPLE_PROVISIONING_RULES) {
|
|
|
173200
173384
|
return skip(entity, `the App Store purchase flow sells ${item.wix.entityType} items only as ${rule.productType}, not ${PRODUCT_TYPE[item.type]}`);
|
|
173201
173385
|
}
|
|
173202
173386
|
if (item.wix.entityType === "pricingPlan") {
|
|
173203
|
-
if (!plans.ok)
|
|
173387
|
+
if (!plans.ok) {
|
|
173388
|
+
return { skip: {
|
|
173389
|
+
entity,
|
|
173390
|
+
appProductId: rule.appProductId(item.wix.entityId),
|
|
173391
|
+
storeProductId: item.productId,
|
|
173392
|
+
state: "failed",
|
|
173393
|
+
code: "request_failed",
|
|
173394
|
+
detail: `only one-time unlimited plans sell through the App Store, and ${plans.why}, so this plan was not mapped`
|
|
173395
|
+
} };
|
|
173396
|
+
}
|
|
173204
173397
|
if (!plans.ids.has(item.wix.entityId)) {
|
|
173205
173398
|
return skip(entity, "only one-time unlimited plans (one payment, valid until cancelled) sell through the App Store; this plan is recurring, time-limited, archived or not on the site");
|
|
173206
173399
|
}
|
|
@@ -173227,6 +173420,17 @@ function decide(catalog4, target) {
|
|
|
173227
173420
|
}
|
|
173228
173421
|
return void 0;
|
|
173229
173422
|
}
|
|
173423
|
+
function connectDiff(report3) {
|
|
173424
|
+
const diff = { inPlace: [], toCreate: [], conflicts: [], unverified: [], blocked: [], skipped: [] };
|
|
173425
|
+
const steps = [
|
|
173426
|
+
["app", report3.app],
|
|
173427
|
+
["key", report3.credentials],
|
|
173428
|
+
["provider", report3.provider],
|
|
173429
|
+
...report3.mappings.map((m2) => [`mapping ${m2.appProductId ?? m2.entity}`, m2])
|
|
173430
|
+
];
|
|
173431
|
+
for (const [label3, step] of steps) diff[DIFF_BUCKET[step.state]].push(label3);
|
|
173432
|
+
return diff;
|
|
173433
|
+
}
|
|
173230
173434
|
function mappingWithoutApp(item, planning, plans, rules = APPLE_PROVISIONING_RULES) {
|
|
173231
173435
|
const target = mappingTarget(item, plans, rules);
|
|
173232
173436
|
if ("skip" in target) return target.skip;
|
|
@@ -173241,12 +173445,22 @@ function noApp(why) {
|
|
|
173241
173445
|
function failed(what, error) {
|
|
173242
173446
|
return { state: "failed", code: "request_failed", detail: `could not ${what}: ${error instanceof Error ? error.message : String(error)}` };
|
|
173243
173447
|
}
|
|
173244
|
-
var PRODUCT_TYPE;
|
|
173448
|
+
var PRODUCT_TYPE, DIFF_BUCKET;
|
|
173245
173449
|
var init_store_iap_connect = __esm({
|
|
173246
173450
|
"src/store-iap-connect.ts"() {
|
|
173247
173451
|
init_wix_payments_contract();
|
|
173248
173452
|
init_store_iap_purchases();
|
|
173249
173453
|
PRODUCT_TYPE = { nonConsumable: "NON_CONSUMABLE", consumable: "CONSUMABLE" };
|
|
173454
|
+
DIFF_BUCKET = {
|
|
173455
|
+
reused: "inPlace",
|
|
173456
|
+
done: "inPlace",
|
|
173457
|
+
planned: "toCreate",
|
|
173458
|
+
conflict: "conflicts",
|
|
173459
|
+
unverified: "unverified",
|
|
173460
|
+
failed: "unverified",
|
|
173461
|
+
blocked: "blocked",
|
|
173462
|
+
skipped: "skipped"
|
|
173463
|
+
};
|
|
173250
173464
|
}
|
|
173251
173465
|
});
|
|
173252
173466
|
|
|
@@ -173951,13 +174165,17 @@ function firstProblem(report3) {
|
|
|
173951
174165
|
function printConnect(out2, report3, heading) {
|
|
173952
174166
|
out2.line(`himi store iap connect \u2014 ${heading}`);
|
|
173953
174167
|
out2.line(` ${pad("site")}${report3.site} \xB7 bundle ${report3.bundleId}`);
|
|
173954
|
-
const row2 = (label3, step) => out2.line(` ${pad(label3)}${step.state.padEnd(
|
|
174168
|
+
const row2 = (label3, step) => out2.line(` ${pad(label3)}${step.state.padEnd(11)}${step.detail}`);
|
|
173955
174169
|
row2("app", report3.app);
|
|
173956
174170
|
row2("key", report3.credentials);
|
|
173957
174171
|
row2("provider", report3.provider);
|
|
173958
174172
|
for (const mapping of report3.mappings) row2("mapping", mapping);
|
|
173959
174173
|
if (report3.purchasesAppId) out2.line(` ${pad("binding")}wixIap: { purchasesAppId: "${report3.purchasesAppId}" }`);
|
|
173960
174174
|
}
|
|
174175
|
+
function printDiff(out2, diff) {
|
|
174176
|
+
const parts = [["in place", diff.inPlace], ["to create", diff.toCreate], ["conflicts", diff.conflicts], ["unverified", diff.unverified], ["blocked", diff.blocked], ["skipped", diff.skipped]].filter(([, labels]) => labels.length).map(([name, labels]) => `${name}: ${labels.join(", ")}`);
|
|
174177
|
+
out2.line(` ${pad("diff")}${parts.join(" \xB7 ") || "nothing to change"}`);
|
|
174178
|
+
}
|
|
173961
174179
|
function printConfig(out2, config, note) {
|
|
173962
174180
|
if (note) out2.line(` ${pad("config")}${note}`);
|
|
173963
174181
|
if (!config) return;
|
|
@@ -174064,10 +174282,12 @@ async function connectWith(flags, deps, out2) {
|
|
|
174064
174282
|
if (outPath) writeJson(deps, out2, outPath, { report: report3, config });
|
|
174065
174283
|
const configProblem = config?.conflicts.length ? "config_conflict" : unapplied ? "config_not_applied" : void 0;
|
|
174066
174284
|
const code = firstProblem(report3) ?? configProblem;
|
|
174067
|
-
|
|
174285
|
+
const diff = dryRun ? connectDiff(report3) : void 0;
|
|
174286
|
+
if (out2.json) out2.print({ ok: !code, ...code ? { code } : {}, dryRun, report: report3, ...diff ? { diff } : {}, config, ...note ? { note } : {} });
|
|
174068
174287
|
else {
|
|
174069
174288
|
printConnect(out2, report3, dryRun ? "dry run (nothing was written)" : "result");
|
|
174070
174289
|
printConfig(out2, config, note);
|
|
174290
|
+
if (diff) printDiff(out2, diff);
|
|
174071
174291
|
}
|
|
174072
174292
|
return code ? 1 : 0;
|
|
174073
174293
|
}
|
|
@@ -174381,7 +174601,7 @@ var init_store_iap = __esm({
|
|
|
174381
174601
|
};
|
|
174382
174602
|
CredentialsError = class extends Error {
|
|
174383
174603
|
};
|
|
174384
|
-
writesPlanned = (report3) => [report3.app, report3.credentials, report3.provider, ...report3.mappings].some((step) => step.state === "planned");
|
|
174604
|
+
writesPlanned = (report3) => [report3.app, report3.credentials, report3.provider, ...report3.mappings].some((step) => step.state === "planned" || step.state === "unverified");
|
|
174385
174605
|
COMMANDS2 = {
|
|
174386
174606
|
draft: draftCommand,
|
|
174387
174607
|
plan: planCommand,
|
|
@@ -200651,6 +200871,53 @@ async function createCms(opts) {
|
|
|
200651
200871
|
}
|
|
200652
200872
|
return report3;
|
|
200653
200873
|
}
|
|
200874
|
+
var SEED_BATCH_SIZE = 100;
|
|
200875
|
+
var SEED_BATCH_BYTES = 2e6;
|
|
200876
|
+
function seedBatches(rows) {
|
|
200877
|
+
const batches = [];
|
|
200878
|
+
let current = { start: 0, rows: [] };
|
|
200879
|
+
let bytes2 = 0;
|
|
200880
|
+
rows.forEach((row2, i2) => {
|
|
200881
|
+
const size = Buffer.byteLength(JSON.stringify({ data: row2 }), "utf8");
|
|
200882
|
+
if (current.rows.length && (current.rows.length >= SEED_BATCH_SIZE || bytes2 + size > SEED_BATCH_BYTES)) {
|
|
200883
|
+
batches.push(current);
|
|
200884
|
+
current = { start: i2, rows: [] };
|
|
200885
|
+
bytes2 = 0;
|
|
200886
|
+
}
|
|
200887
|
+
current.rows.push(row2);
|
|
200888
|
+
bytes2 += size;
|
|
200889
|
+
});
|
|
200890
|
+
if (current.rows.length) batches.push(current);
|
|
200891
|
+
return batches;
|
|
200892
|
+
}
|
|
200893
|
+
function readBulkInsert(answer, size) {
|
|
200894
|
+
const res = answer ?? {};
|
|
200895
|
+
const state = Array.from({ length: size }, () => "unknown");
|
|
200896
|
+
const rejected = [];
|
|
200897
|
+
(Array.isArray(res.results) ? res.results : []).forEach((result, position) => {
|
|
200898
|
+
const meta = result?.itemMetadata;
|
|
200899
|
+
const index = meta?.originalIndex ?? position;
|
|
200900
|
+
if (!Number.isInteger(index) || index < 0 || index >= size || state[index] !== "unknown") return;
|
|
200901
|
+
if (meta?.success === false || meta?.success !== true && meta?.error != null) {
|
|
200902
|
+
state[index] = "rejected";
|
|
200903
|
+
rejected.push({ index, code: meta.error?.code, reason: meta.error?.description ?? meta.error?.code ?? "Wix rejected this row without saying why" });
|
|
200904
|
+
} else if (meta?.success === true) {
|
|
200905
|
+
state[index] = "landed";
|
|
200906
|
+
}
|
|
200907
|
+
});
|
|
200908
|
+
const totals = res.bulkActionMetadata;
|
|
200909
|
+
if (!state.includes("landed") && !state.includes("rejected") && totals?.totalSuccesses === size && !totals.totalFailures) {
|
|
200910
|
+
state.fill("landed");
|
|
200911
|
+
}
|
|
200912
|
+
return {
|
|
200913
|
+
landed: state.filter((s2) => s2 === "landed").length,
|
|
200914
|
+
rejected,
|
|
200915
|
+
unconfirmed: state.flatMap((s2, i2) => s2 === "unknown" ? [i2] : [])
|
|
200916
|
+
};
|
|
200917
|
+
}
|
|
200918
|
+
function requestWasRefused(err) {
|
|
200919
|
+
return err instanceof WixApiError && err.status >= 400 && err.status < 500 && err.status !== 408;
|
|
200920
|
+
}
|
|
200654
200921
|
async function seedCms(opts) {
|
|
200655
200922
|
const { app, cms, call, dryRun = false, force = false, only, dir } = opts;
|
|
200656
200923
|
const prefix = namespacePrefix(app);
|
|
@@ -200697,6 +200964,7 @@ async function seedCms(opts) {
|
|
|
200697
200964
|
report3.skipped.push({ collection: id, reason: `already has ${count2} items \u2014 seeding an already-populated collection needs --force so real content is never buried under sample rows` });
|
|
200698
200965
|
continue;
|
|
200699
200966
|
}
|
|
200967
|
+
let inserted = rows.length;
|
|
200700
200968
|
if (!dryRun) {
|
|
200701
200969
|
const declaredKeys = new Set(spec.fields.map((f2) => f2.key));
|
|
200702
200970
|
const clean2 = rows.map((row2) => {
|
|
@@ -200711,18 +200979,59 @@ async function seedCms(opts) {
|
|
|
200711
200979
|
reason: `ignored undeclared key(s) in seed rows: ${droppedKeys.join(", ")} \u2014 only declared fields are written (a row cannot set system keys such as _id or _owner)`
|
|
200712
200980
|
});
|
|
200713
200981
|
}
|
|
200714
|
-
|
|
200715
|
-
|
|
200716
|
-
|
|
200717
|
-
|
|
200718
|
-
|
|
200719
|
-
|
|
200720
|
-
|
|
200721
|
-
|
|
200722
|
-
|
|
200723
|
-
|
|
200982
|
+
let landed = 0;
|
|
200983
|
+
const addFailure = (failure2) => {
|
|
200984
|
+
(report3.failed ??= []).push(failure2);
|
|
200985
|
+
report3.code = "seed_rows_failed";
|
|
200986
|
+
report3.ok = false;
|
|
200987
|
+
};
|
|
200988
|
+
for (const { start, rows: batch } of seedBatches(clean2)) {
|
|
200989
|
+
let answer;
|
|
200990
|
+
try {
|
|
200991
|
+
answer = await call("POST", "/wix-data/v2/bulk/items/insert", {
|
|
200992
|
+
dataCollectionId: id,
|
|
200993
|
+
dataItems: batch.map((data) => ({ data }))
|
|
200994
|
+
});
|
|
200995
|
+
} catch (e2) {
|
|
200996
|
+
addFailure({
|
|
200997
|
+
collection: id,
|
|
200998
|
+
rows: batch.map((_2, i2) => start + i2),
|
|
200999
|
+
outcome: requestWasRefused(e2) ? "rejected" : "unconfirmed",
|
|
201000
|
+
reason: e2 instanceof Error ? e2.message : String(e2)
|
|
201001
|
+
});
|
|
201002
|
+
const rest = clean2.slice(start + batch.length).map((_2, i2) => start + batch.length + i2);
|
|
201003
|
+
if (rest.length) {
|
|
201004
|
+
addFailure({ collection: id, rows: rest, outcome: "not-sent", reason: "not attempted: the request before them failed" });
|
|
201005
|
+
}
|
|
201006
|
+
report3.inserted[id] = landed;
|
|
201007
|
+
report3.sources[id] = source;
|
|
201008
|
+
report3.code = "seed_request_failed";
|
|
201009
|
+
throw Object.assign(e2 instanceof Error ? e2 : new Error(String(e2)), { partial: report3 });
|
|
201010
|
+
}
|
|
201011
|
+
const read = readBulkInsert(answer, batch.length);
|
|
201012
|
+
landed += read.landed;
|
|
201013
|
+
const byReason = /* @__PURE__ */ new Map();
|
|
201014
|
+
for (const r3 of read.rejected) {
|
|
201015
|
+
const key3 = `${r3.code ?? ""}\0${r3.reason}`;
|
|
201016
|
+
const group = byReason.get(key3) ?? { code: r3.code, reason: r3.reason, rows: [] };
|
|
201017
|
+
group.rows.push(start + r3.index);
|
|
201018
|
+
byReason.set(key3, group);
|
|
201019
|
+
}
|
|
201020
|
+
for (const group of byReason.values()) {
|
|
201021
|
+
addFailure({ collection: id, rows: group.rows, outcome: "rejected", ...group.code ? { code: group.code } : {}, reason: group.reason });
|
|
201022
|
+
}
|
|
201023
|
+
if (read.unconfirmed.length) {
|
|
201024
|
+
addFailure({
|
|
201025
|
+
collection: id,
|
|
201026
|
+
rows: read.unconfirmed.map((i2) => start + i2),
|
|
201027
|
+
outcome: "unconfirmed",
|
|
201028
|
+
reason: "Wix answered without a result for these rows, so they are not assumed written"
|
|
201029
|
+
});
|
|
201030
|
+
}
|
|
201031
|
+
}
|
|
201032
|
+
inserted = landed;
|
|
200724
201033
|
}
|
|
200725
|
-
report3.inserted[id] =
|
|
201034
|
+
report3.inserted[id] = inserted;
|
|
200726
201035
|
report3.sources[id] = source;
|
|
200727
201036
|
}
|
|
200728
201037
|
if (considered === 0) {
|
|
@@ -201037,6 +201346,18 @@ async function notifyCommand(ctx) {
|
|
|
201037
201346
|
// src/commands/cms.ts
|
|
201038
201347
|
init_wix_owner();
|
|
201039
201348
|
init_cli_shared();
|
|
201349
|
+
function runFailureEnvelope(sub, e2, app, site) {
|
|
201350
|
+
const partial = e2.partial;
|
|
201351
|
+
const seedRequestFailed = sub === "seed" && partial?.code === "seed_request_failed";
|
|
201352
|
+
return {
|
|
201353
|
+
...seedRequestFailed ? { ok: false, code: "seed_request_failed" } : {},
|
|
201354
|
+
error: e2.message,
|
|
201355
|
+
app,
|
|
201356
|
+
site,
|
|
201357
|
+
...partial ? { partial } : {},
|
|
201358
|
+
hint: "the run stopped part-way; `himi cms query --site <msid>` shows the site's actual state before you re-run"
|
|
201359
|
+
};
|
|
201360
|
+
}
|
|
201040
201361
|
async function cmsCommand(ctx) {
|
|
201041
201362
|
const { io: io2, pos, flags, print } = ctx;
|
|
201042
201363
|
const sub = pos[1];
|
|
@@ -201098,14 +201419,7 @@ async function cmsCommand(ctx) {
|
|
|
201098
201419
|
try {
|
|
201099
201420
|
report3 = sub === "query" ? await queryCms({ ...common, all: flags.all === true }) : sub === "create" ? await createCms({ ...common, dryRun: flags["dry-run"] === true, allowDestructive: flags["allow-destructive"] === true, applyPermissions: flags["apply-permissions"] === true }) : await seedCms({ ...common, dir, dryRun: flags["dry-run"] === true, force: flags.force === true, only: str3(flags.only) });
|
|
201100
201421
|
} catch (e2) {
|
|
201101
|
-
|
|
201102
|
-
io2.error(JSON.stringify({
|
|
201103
|
-
error: e2.message,
|
|
201104
|
-
app,
|
|
201105
|
-
site,
|
|
201106
|
-
...partial ? { partial } : {},
|
|
201107
|
-
hint: "the run stopped part-way; `himi cms query --site <msid>` shows the site's actual state before you re-run"
|
|
201108
|
-
}));
|
|
201422
|
+
io2.error(JSON.stringify(runFailureEnvelope(sub, e2, app, site)));
|
|
201109
201423
|
return 1;
|
|
201110
201424
|
}
|
|
201111
201425
|
print({ ...report3, site });
|