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