@wix/himalaya-cli 0.1463.0 → 0.1465.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/cli.mjs +382 -112
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/component-reference.json +15 -40
- package/guides/component-reference.md +7 -13
- package/package.json +2 -2
package/dist/cli.mjs
CHANGED
|
@@ -8127,6 +8127,7 @@ function resolveTranslation(value, catalog3, sourceCatalog) {
|
|
|
8127
8127
|
var BINDING_SIGILS, BINDING_SIGIL_RE, TRANSLATION_PREFIX, TRANSLATION_KEY_RE;
|
|
8128
8128
|
var init_bindings = __esm({
|
|
8129
8129
|
"../../core/ts/src/bindings.ts"() {
|
|
8130
|
+
"use strict";
|
|
8130
8131
|
BINDING_SIGILS = ["service", "flag", "item", "t"];
|
|
8131
8132
|
BINDING_SIGIL_RE = new RegExp(
|
|
8132
8133
|
`^\\$(?:${BINDING_SIGILS.filter((s2) => s2 !== "t").join("|")})\\b|^\\$t:`
|
|
@@ -39372,19 +39373,22 @@ function useResolvedScalar(v2, ctx) {
|
|
|
39372
39373
|
function useBoundValue(ctx, binding2) {
|
|
39373
39374
|
const path2 = servicePath(binding2);
|
|
39374
39375
|
const active = !!ctx.provider && !!binding2;
|
|
39376
|
+
const provider = ctx.provider;
|
|
39375
39377
|
const [state, setState] = useState(() => ({
|
|
39376
39378
|
path: path2,
|
|
39377
|
-
|
|
39379
|
+
provider,
|
|
39380
|
+
v: active ? provider.value(path2) : void 0
|
|
39378
39381
|
}));
|
|
39379
|
-
const
|
|
39380
|
-
|
|
39382
|
+
const matches = state.path === path2 && state.provider === provider;
|
|
39383
|
+
const current = matches ? state.v : active ? provider.value(path2) : void 0;
|
|
39384
|
+
if (!matches) setState({ path: path2, provider, v: current });
|
|
39381
39385
|
useEffect(() => {
|
|
39382
|
-
if (!
|
|
39383
|
-
return
|
|
39386
|
+
if (!provider || !binding2) return;
|
|
39387
|
+
return provider.subscribe(
|
|
39384
39388
|
path2,
|
|
39385
|
-
(nv) => setState((prev) => prev.path === path2 && Object.is(prev.v, nv) ? prev : { path: path2, v: nv })
|
|
39389
|
+
(nv) => setState((prev) => prev.path === path2 && prev.provider === provider && Object.is(prev.v, nv) ? prev : { path: path2, provider, v: nv })
|
|
39386
39390
|
);
|
|
39387
|
-
}, [
|
|
39391
|
+
}, [provider, path2, binding2]);
|
|
39388
39392
|
return active ? current : void 0;
|
|
39389
39393
|
}
|
|
39390
39394
|
function useBoundValues(ctx, bindings) {
|
|
@@ -40880,6 +40884,76 @@ var init_richContentEditor = __esm({
|
|
|
40880
40884
|
}
|
|
40881
40885
|
});
|
|
40882
40886
|
|
|
40887
|
+
// ../../core/web-renderer/src/pdfSource.ts
|
|
40888
|
+
function pdfEmbedPlan(url, pageOrigin = currentOrigin(), pageUrl) {
|
|
40889
|
+
let source = url;
|
|
40890
|
+
if (pageOrigin !== null && pageUrl) {
|
|
40891
|
+
try {
|
|
40892
|
+
const base = new URL(pageUrl);
|
|
40893
|
+
if (base.origin === pageOrigin) source = new URL(url, base).href;
|
|
40894
|
+
} catch {
|
|
40895
|
+
return null;
|
|
40896
|
+
}
|
|
40897
|
+
}
|
|
40898
|
+
const target = classifyEmbedUrl(source, pageOrigin);
|
|
40899
|
+
if (!target) return null;
|
|
40900
|
+
if (target.protocol === "http:" || target.protocol === "https:") {
|
|
40901
|
+
if (pageOrigin === null) {
|
|
40902
|
+
if (target.absolute) return { mode: "direct", src: target.href };
|
|
40903
|
+
if (target.schemeRelative) return { mode: "direct", src: target.href.replace(/^https?:/, "") };
|
|
40904
|
+
return null;
|
|
40905
|
+
}
|
|
40906
|
+
return { mode: target.crossOrigin ? "direct" : "retype", src: target.href };
|
|
40907
|
+
}
|
|
40908
|
+
if (target.protocol === "blob:" && pageOrigin !== null && !target.crossOrigin) {
|
|
40909
|
+
return { mode: "retype", src: target.href };
|
|
40910
|
+
}
|
|
40911
|
+
return null;
|
|
40912
|
+
}
|
|
40913
|
+
function splitFragment(src) {
|
|
40914
|
+
const i2 = src.indexOf("#");
|
|
40915
|
+
return i2 < 0 ? { base: src, hash: "" } : { base: src.slice(0, i2), hash: src.slice(i2) };
|
|
40916
|
+
}
|
|
40917
|
+
function fragmentPage(hash2) {
|
|
40918
|
+
const m2 = /(?:^#|&)page=(\d+)/.exec(hash2);
|
|
40919
|
+
const n2 = m2 ? Number(m2[1]) : NaN;
|
|
40920
|
+
return Number.isFinite(n2) && n2 >= 1 ? n2 : null;
|
|
40921
|
+
}
|
|
40922
|
+
function pdfOpenFragment(sourceHash, opts) {
|
|
40923
|
+
const params = /* @__PURE__ */ new Map();
|
|
40924
|
+
for (const part3 of sourceHash.replace(/^#/, "").split("&")) {
|
|
40925
|
+
if (!part3) continue;
|
|
40926
|
+
const eq = part3.indexOf("=");
|
|
40927
|
+
params.set(eq < 0 ? part3 : part3.slice(0, eq), eq < 0 ? "" : part3.slice(eq + 1));
|
|
40928
|
+
}
|
|
40929
|
+
if (opts.page != null && opts.page >= 1) params.set("page", String(Math.floor(opts.page)));
|
|
40930
|
+
if (opts.fitWidth) {
|
|
40931
|
+
params.delete("zoom");
|
|
40932
|
+
params.set("view", "FitH");
|
|
40933
|
+
} else if (opts.zoom != null) {
|
|
40934
|
+
params.set("zoom", String(Math.round(opts.zoom)));
|
|
40935
|
+
}
|
|
40936
|
+
if (!opts.viewerChrome) {
|
|
40937
|
+
params.set("toolbar", "0");
|
|
40938
|
+
params.set("navpanes", "0");
|
|
40939
|
+
}
|
|
40940
|
+
return params.size ? "#" + [...params].map(([k2, v2]) => v2 === "" ? k2 : `${k2}=${v2}`).join("&") : "";
|
|
40941
|
+
}
|
|
40942
|
+
function pdfZoomStep(current, direction) {
|
|
40943
|
+
const from = current ?? PDF_ZOOM_DEFAULT;
|
|
40944
|
+
return Math.min(PDF_ZOOM_MAX, Math.max(PDF_ZOOM_MIN, from + direction * PDF_ZOOM_STEP));
|
|
40945
|
+
}
|
|
40946
|
+
var PDF_ZOOM_MIN, PDF_ZOOM_MAX, PDF_ZOOM_STEP, PDF_ZOOM_DEFAULT;
|
|
40947
|
+
var init_pdfSource = __esm({
|
|
40948
|
+
"../../core/web-renderer/src/pdfSource.ts"() {
|
|
40949
|
+
init_webviewFrame();
|
|
40950
|
+
PDF_ZOOM_MIN = 50;
|
|
40951
|
+
PDF_ZOOM_MAX = 400;
|
|
40952
|
+
PDF_ZOOM_STEP = 25;
|
|
40953
|
+
PDF_ZOOM_DEFAULT = 100;
|
|
40954
|
+
}
|
|
40955
|
+
});
|
|
40956
|
+
|
|
40883
40957
|
// ../../core/web-host/src/actions/presigned-upload-policy.ts
|
|
40884
40958
|
function hostMatches(host) {
|
|
40885
40959
|
const h2 = host.toLowerCase().split(":")[0];
|
|
@@ -41055,45 +41129,6 @@ var init_mediaFieldUpload = __esm({
|
|
|
41055
41129
|
}
|
|
41056
41130
|
});
|
|
41057
41131
|
|
|
41058
|
-
// ../../core/web-renderer/src/pdfSource.ts
|
|
41059
|
-
function pdfEmbedPlan(url, pageOrigin = currentOrigin(), pageUrl) {
|
|
41060
|
-
let source = url;
|
|
41061
|
-
if (pageOrigin !== null && pageUrl) {
|
|
41062
|
-
try {
|
|
41063
|
-
const base = new URL(pageUrl);
|
|
41064
|
-
if (base.origin === pageOrigin) source = new URL(url, base).href;
|
|
41065
|
-
} catch {
|
|
41066
|
-
return null;
|
|
41067
|
-
}
|
|
41068
|
-
}
|
|
41069
|
-
const target = classifyEmbedUrl(source, pageOrigin);
|
|
41070
|
-
if (!target) return null;
|
|
41071
|
-
if (target.protocol === "http:" || target.protocol === "https:") {
|
|
41072
|
-
if (pageOrigin === null) {
|
|
41073
|
-
if (target.absolute) return { mode: "direct", src: target.href };
|
|
41074
|
-
if (target.schemeRelative) return { mode: "direct", src: target.href.replace(/^https?:/, "") };
|
|
41075
|
-
return null;
|
|
41076
|
-
}
|
|
41077
|
-
return { mode: target.crossOrigin ? "direct" : "retype", src: target.href };
|
|
41078
|
-
}
|
|
41079
|
-
if (target.protocol === "blob:" && pageOrigin !== null && !target.crossOrigin) {
|
|
41080
|
-
return { mode: "retype", src: target.href };
|
|
41081
|
-
}
|
|
41082
|
-
return null;
|
|
41083
|
-
}
|
|
41084
|
-
async function retypeAsPdf(src, fetchImpl = fetch) {
|
|
41085
|
-
const res = await fetchImpl(src, { credentials: "same-origin" });
|
|
41086
|
-
if (!res.ok) return null;
|
|
41087
|
-
if (/html|xml/i.test(res.headers.get("content-type") ?? "")) return null;
|
|
41088
|
-
const body = await res.blob();
|
|
41089
|
-
return URL.createObjectURL(body.slice(0, body.size, "application/pdf"));
|
|
41090
|
-
}
|
|
41091
|
-
var init_pdfSource = __esm({
|
|
41092
|
-
"../../core/web-renderer/src/pdfSource.ts"() {
|
|
41093
|
-
init_webviewFrame();
|
|
41094
|
-
}
|
|
41095
|
-
});
|
|
41096
|
-
|
|
41097
41132
|
// ../../core/web-renderer/src/a11y/controls.tsx
|
|
41098
41133
|
import React5 from "react";
|
|
41099
41134
|
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
@@ -42833,9 +42868,142 @@ var init_richContent = __esm({
|
|
|
42833
42868
|
}
|
|
42834
42869
|
});
|
|
42835
42870
|
|
|
42871
|
+
// ../../core/web-renderer/src/pdfPageCount.ts
|
|
42872
|
+
function pdfPageCount(bytes2) {
|
|
42873
|
+
const text9 = pdfObjectSyntax(new TextDecoder("latin1").decode(bytes2));
|
|
42874
|
+
const rooted = pdfRootPageCount(text9);
|
|
42875
|
+
let scanned = null;
|
|
42876
|
+
for (const m2 of text9.matchAll(/<<((?:(?!<<|>>)[\s\S])*)>>/g)) {
|
|
42877
|
+
const dict = m2[1];
|
|
42878
|
+
if (!/\/Type\s*\/Pages(?![A-Za-z])/.test(dict)) continue;
|
|
42879
|
+
const c2 = /\/Count\s+(\d+)/.exec(dict);
|
|
42880
|
+
const n2 = c2 ? Number(c2[1]) : NaN;
|
|
42881
|
+
if (Number.isFinite(n2) && n2 > 0 && (scanned === null || n2 > scanned)) scanned = n2;
|
|
42882
|
+
}
|
|
42883
|
+
const count2 = rooted ?? scanned;
|
|
42884
|
+
if (count2 === null) return null;
|
|
42885
|
+
if (rooted !== null && scanned !== null && rooted !== scanned) return null;
|
|
42886
|
+
return count2 <= PDF_MAX_PLAUSIBLE_PAGES ? count2 : null;
|
|
42887
|
+
}
|
|
42888
|
+
function pdfObjectSyntax(text9) {
|
|
42889
|
+
const out2 = text9.split("");
|
|
42890
|
+
const blank = (from, to2) => {
|
|
42891
|
+
for (let k2 = from; k2 < to2; k2++) out2[k2] = " ";
|
|
42892
|
+
};
|
|
42893
|
+
let i2 = 0;
|
|
42894
|
+
while (i2 < text9.length) {
|
|
42895
|
+
const c2 = text9[i2];
|
|
42896
|
+
if (c2 === "%") {
|
|
42897
|
+
const eol = text9.slice(i2).search(/[\r\n]/);
|
|
42898
|
+
const end = eol < 0 ? text9.length : i2 + eol;
|
|
42899
|
+
blank(i2, end);
|
|
42900
|
+
i2 = end;
|
|
42901
|
+
} else if (c2 === "(") {
|
|
42902
|
+
let depth = 0;
|
|
42903
|
+
let j2 = i2;
|
|
42904
|
+
for (; j2 < text9.length; j2++) {
|
|
42905
|
+
const d2 = text9[j2];
|
|
42906
|
+
if (d2 === "\\") {
|
|
42907
|
+
j2++;
|
|
42908
|
+
continue;
|
|
42909
|
+
}
|
|
42910
|
+
if (d2 === "(") depth++;
|
|
42911
|
+
else if (d2 === ")" && --depth === 0) break;
|
|
42912
|
+
}
|
|
42913
|
+
blank(i2, j2 + 1);
|
|
42914
|
+
i2 = j2 + 1;
|
|
42915
|
+
} else if (c2 === "<" && text9[i2 + 1] !== "<") {
|
|
42916
|
+
const end = text9.indexOf(">", i2);
|
|
42917
|
+
const stop = end < 0 ? text9.length : end + 1;
|
|
42918
|
+
blank(i2, stop);
|
|
42919
|
+
i2 = stop;
|
|
42920
|
+
} else if (c2 === "<" && text9[i2 + 1] === "<") {
|
|
42921
|
+
i2 += 2;
|
|
42922
|
+
} else if (
|
|
42923
|
+
// The `stream` KEYWORD, not the tail of a name (`/my-stream`) or of `endstream`: preceded by
|
|
42924
|
+
// whitespace or the `>>` that closes its dictionary, and followed by CRLF or LF (PDF 32000
|
|
42925
|
+
// §7.3.8.1 — a CR alone is not allowed there).
|
|
42926
|
+
text9.startsWith("stream", i2) && /[\s>]/.test(text9[i2 - 1] ?? "") && (text9[i2 + 6] === "\n" || text9.startsWith("\r\n", i2 + 6))
|
|
42927
|
+
) {
|
|
42928
|
+
const end = text9.indexOf("endstream", i2 + 6);
|
|
42929
|
+
const stop = end < 0 ? text9.length : end;
|
|
42930
|
+
blank(i2 + 6, stop);
|
|
42931
|
+
i2 = stop + "endstream".length;
|
|
42932
|
+
} else {
|
|
42933
|
+
i2++;
|
|
42934
|
+
}
|
|
42935
|
+
}
|
|
42936
|
+
return out2.join("");
|
|
42937
|
+
}
|
|
42938
|
+
function pdfRootPageCount(syntax) {
|
|
42939
|
+
const obj4 = (n3, g2) => {
|
|
42940
|
+
const all = [...syntax.matchAll(new RegExp(`(?:^|[^0-9])${n3}\\s+${g2}\\s+obj\\b`, "g"))];
|
|
42941
|
+
const at2 = all[all.length - 1];
|
|
42942
|
+
if (!at2) return null;
|
|
42943
|
+
const end = syntax.indexOf("endobj", at2.index);
|
|
42944
|
+
return syntax.slice(at2.index, end < 0 ? void 0 : end);
|
|
42945
|
+
};
|
|
42946
|
+
const trailers = [...syntax.matchAll(/trailer\s*<<([\s\S]*?)>>/g)];
|
|
42947
|
+
const root = trailers.length ? /\/Root\s+(\d+)\s+(\d+)\s+R/.exec(trailers[trailers.length - 1][1]) : null;
|
|
42948
|
+
if (!root) return null;
|
|
42949
|
+
const catalog3 = obj4(root[1], root[2]);
|
|
42950
|
+
const pagesRef = catalog3 ? /\/Pages\s+(\d+)\s+(\d+)\s+R/.exec(catalog3) : null;
|
|
42951
|
+
if (!pagesRef) return null;
|
|
42952
|
+
const pages2 = obj4(pagesRef[1], pagesRef[2]);
|
|
42953
|
+
const c2 = pages2 ? /\/Count\s+(\d+)/.exec(pages2) : null;
|
|
42954
|
+
const n2 = c2 ? Number(c2[1]) : NaN;
|
|
42955
|
+
return Number.isFinite(n2) && n2 > 0 ? n2 : null;
|
|
42956
|
+
}
|
|
42957
|
+
var PDF_MAX_PLAUSIBLE_PAGES;
|
|
42958
|
+
var init_pdfPageCount = __esm({
|
|
42959
|
+
"../../core/web-renderer/src/pdfPageCount.ts"() {
|
|
42960
|
+
PDF_MAX_PLAUSIBLE_PAGES = 1e5;
|
|
42961
|
+
}
|
|
42962
|
+
});
|
|
42963
|
+
|
|
42964
|
+
// ../../core/web-renderer/src/pdfFetch.ts
|
|
42965
|
+
var pdfFetch_exports = {};
|
|
42966
|
+
__export(pdfFetch_exports, {
|
|
42967
|
+
fetchPdfDocument: () => fetchPdfDocument,
|
|
42968
|
+
retypeAsPdf: () => retypeAsPdf,
|
|
42969
|
+
retypeAsPdfCounted: () => retypeAsPdfCounted
|
|
42970
|
+
});
|
|
42971
|
+
async function retypeAsPdf(src, fetchImpl = fetch) {
|
|
42972
|
+
return (await retypeAsPdfCounted(src, fetchImpl))?.url ?? null;
|
|
42973
|
+
}
|
|
42974
|
+
async function retypeAsPdfCounted(src, fetchImpl = fetch) {
|
|
42975
|
+
const res = await fetchImpl(src, { credentials: "same-origin" });
|
|
42976
|
+
if (!res.ok) return null;
|
|
42977
|
+
if (/html|xml/i.test(res.headers.get("content-type") ?? "")) return null;
|
|
42978
|
+
const body = await res.blob();
|
|
42979
|
+
const pageCount = await readPageCount(body);
|
|
42980
|
+
return { url: URL.createObjectURL(body.slice(0, body.size, "application/pdf")), pageCount };
|
|
42981
|
+
}
|
|
42982
|
+
async function readPageCount(body) {
|
|
42983
|
+
return pdfPageCount(new Uint8Array(await body.arrayBuffer()));
|
|
42984
|
+
}
|
|
42985
|
+
async function fetchPdfDocument(src, fetchImpl = fetch) {
|
|
42986
|
+
try {
|
|
42987
|
+
const res = await fetchImpl(src, { credentials: "omit" });
|
|
42988
|
+
if (!res.ok) return null;
|
|
42989
|
+
if (/html|xml/i.test(res.headers.get("content-type") ?? "")) return null;
|
|
42990
|
+
const body = await res.blob();
|
|
42991
|
+
const pageCount = await readPageCount(body);
|
|
42992
|
+
return { pageCount, blob: body.slice(0, body.size, "application/pdf") };
|
|
42993
|
+
} catch {
|
|
42994
|
+
return null;
|
|
42995
|
+
}
|
|
42996
|
+
}
|
|
42997
|
+
var init_pdfFetch = __esm({
|
|
42998
|
+
"../../core/web-renderer/src/pdfFetch.ts"() {
|
|
42999
|
+
init_pdfPageCount();
|
|
43000
|
+
}
|
|
43001
|
+
});
|
|
43002
|
+
|
|
42836
43003
|
// ../../core/web-renderer/src/pdfPainter.ts
|
|
42837
|
-
async function paintPdfDocument(document2, container, width = container.clientWidth || 600, startPage = 1, zoomPercent = 100, isCurrent = () => true) {
|
|
43004
|
+
async function paintPdfDocument(document2, container, width = container.clientWidth || 600, startPage = 1, zoomPercent = 100, isCurrent = () => true, onPageCount) {
|
|
42838
43005
|
if (!isCurrent()) return document2.numPages;
|
|
43006
|
+
onPageCount?.(document2.numPages);
|
|
42839
43007
|
container.replaceChildren();
|
|
42840
43008
|
const pixelRatio = Math.max(1, Math.min(2, container.ownerDocument.defaultView?.devicePixelRatio || 1));
|
|
42841
43009
|
const zoom = Math.max(1, zoomPercent) / 100;
|
|
@@ -123458,12 +123626,27 @@ async function destroyPdfDocumentLoad(loading) {
|
|
|
123458
123626
|
} catch {
|
|
123459
123627
|
}
|
|
123460
123628
|
}
|
|
123461
|
-
function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, style, loadDocument = loadPdfDocument }) {
|
|
123629
|
+
function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, style, onPageCount, onFallback, loadDocument = loadPdfDocument }) {
|
|
123462
123630
|
const [pages2, setPages] = React8.useState(0);
|
|
123463
123631
|
const [failedRequest, setFailedRequest] = React8.useState(null);
|
|
123464
|
-
const request = JSON.stringify([src,
|
|
123632
|
+
const request = JSON.stringify([src, zoomPercent]);
|
|
123465
123633
|
const failed3 = failedRequest === request;
|
|
123466
123634
|
const containerRef = React8.useRef(null);
|
|
123635
|
+
const frameRef = React8.useRef(null);
|
|
123636
|
+
const startPageRef = React8.useRef(startPage);
|
|
123637
|
+
startPageRef.current = startPage;
|
|
123638
|
+
React8.useEffect(() => {
|
|
123639
|
+
if (failed3) onFallback?.();
|
|
123640
|
+
}, [failed3, onFallback]);
|
|
123641
|
+
React8.useEffect(() => {
|
|
123642
|
+
const frame2 = frameRef.current;
|
|
123643
|
+
const page = Math.min(pages2, Math.max(1, Math.floor(startPage ?? 1) || 1));
|
|
123644
|
+
const canvas = pages2 ? containerRef.current?.querySelector(`[data-pdf-page="${page}"]`) : null;
|
|
123645
|
+
if (!frame2 || !canvas) return;
|
|
123646
|
+
const box = frame2.getBoundingClientRect();
|
|
123647
|
+
const scale = frame2.offsetHeight > 0 && box.height > 0 ? box.height / frame2.offsetHeight : 1;
|
|
123648
|
+
frame2.scrollTop += (canvas.getBoundingClientRect().top - box.top) / scale;
|
|
123649
|
+
}, [startPage, pages2]);
|
|
123467
123650
|
React8.useEffect(() => {
|
|
123468
123651
|
let live3 = true;
|
|
123469
123652
|
let loading;
|
|
@@ -123485,7 +123668,7 @@ function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, st
|
|
|
123485
123668
|
}
|
|
123486
123669
|
loading = task;
|
|
123487
123670
|
const document2 = await task.promise;
|
|
123488
|
-
const count2 = await paintPdfDocument(document2, container, container.clientWidth || 600,
|
|
123671
|
+
const count2 = await paintPdfDocument(document2, container, container.clientWidth || 600, startPageRef.current, zoomPercent, () => live3, onPageCount);
|
|
123489
123672
|
if (live3) setPages(count2);
|
|
123490
123673
|
})().catch(() => {
|
|
123491
123674
|
if (live3) setFailedRequest(request);
|
|
@@ -123495,7 +123678,7 @@ function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, st
|
|
|
123495
123678
|
if (loading) void destroyPdfDocumentLoad(loading);
|
|
123496
123679
|
container?.replaceChildren();
|
|
123497
123680
|
};
|
|
123498
|
-
}, [src,
|
|
123681
|
+
}, [src, zoomPercent, onPageCount, loadDocument, request]);
|
|
123499
123682
|
const frame = {
|
|
123500
123683
|
width: "100%",
|
|
123501
123684
|
height: height ?? 320,
|
|
@@ -123509,7 +123692,7 @@ function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, st
|
|
|
123509
123692
|
if (failed3) {
|
|
123510
123693
|
return /* @__PURE__ */ jsx9("object", { "data-himalaya-pdf": "native-fallback", "data-himalaya-pdf-zoom": zoomPercent ?? 100, data: nativeSrc, type: "application/pdf", "aria-label": title, style: frame });
|
|
123511
123694
|
}
|
|
123512
|
-
return /* @__PURE__ */ jsxs6("div", { "data-himalaya-pdf": "canvas-document", "data-himalaya-pdf-src": src, "data-himalaya-pdf-zoom": zoomPercent ?? 100, role: "group", "aria-label": title, "aria-busy": pages2 === 0, style: frame, children: [
|
|
123695
|
+
return /* @__PURE__ */ jsxs6("div", { ref: frameRef, "data-himalaya-pdf": "canvas-document", "data-himalaya-pdf-src": src, "data-himalaya-pdf-zoom": zoomPercent ?? 100, "data-himalaya-pdf-start-page": startPage ?? 1, "data-himalaya-pdf-native-src": nativeSrc, role: "group", "aria-label": title, "aria-busy": pages2 === 0, style: frame, children: [
|
|
123513
123696
|
/* @__PURE__ */ jsx9("div", { ref: containerRef, "data-himalaya-pdf-pages": "true" }),
|
|
123514
123697
|
pages2 ? /* @__PURE__ */ jsxs6("span", { "data-himalaya-pdf-page-count": "true", style: { position: "absolute", width: 1, height: 1, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0,0,0,0)", whiteSpace: "nowrap", border: 0 }, children: [
|
|
123515
123698
|
pages2,
|
|
@@ -124474,22 +124657,12 @@ function sourceFragment(src) {
|
|
|
124474
124657
|
return "";
|
|
124475
124658
|
}
|
|
124476
124659
|
}
|
|
124477
|
-
function sourcePage(fragment) {
|
|
124478
|
-
const match = /(?:^|[&#])page=(\d+)(?:&|$)/.exec(fragment.replace(/^#/, ""));
|
|
124479
|
-
const page = match ? Number(match[1]) : NaN;
|
|
124480
|
-
return Number.isSafeInteger(page) && page > 0 ? page : void 0;
|
|
124481
|
-
}
|
|
124482
124660
|
function sourceZoomPercent(fragment) {
|
|
124483
124661
|
const value = new URLSearchParams(fragment.replace(/^#/, "")).get("zoom");
|
|
124484
124662
|
const match = value?.match(/^(\d+(?:\.\d+)?)(?:,|$)/);
|
|
124485
124663
|
const zoom = match ? Number(match[1]) : NaN;
|
|
124486
124664
|
return Number.isFinite(zoom) && zoom > 0 ? zoom : void 0;
|
|
124487
124665
|
}
|
|
124488
|
-
function fragmentWithPage(fragment, page) {
|
|
124489
|
-
const params = new URLSearchParams(fragment.replace(/^#/, ""));
|
|
124490
|
-
params.set("page", String(page));
|
|
124491
|
-
return `#${params.toString()}`;
|
|
124492
|
-
}
|
|
124493
124666
|
function cloneWithKids(el2, props, kids3) {
|
|
124494
124667
|
if (kids3 === el2.props.children) return React9.cloneElement(el2, props);
|
|
124495
124668
|
return React9.cloneElement(el2, props, ...Array.isArray(kids3) ? kids3 : [kids3]);
|
|
@@ -126510,7 +126683,7 @@ function reportUnknownComponent(ctx, pkg, type) {
|
|
|
126510
126683
|
function unknownComponentShowsDeveloperLabel(ctx) {
|
|
126511
126684
|
return ctx.debugUnknownComponents ?? ctx.previewSurface != null;
|
|
126512
126685
|
}
|
|
126513
|
-
var 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, 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_LONG_PRESS_MS, MenuNode, 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, ButtonNode, OtpInputNode, ProgressBarNode, ACTIVITY_DEFAULT_NAME, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, 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;
|
|
126686
|
+
var loadPdfFetch, 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, 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_LONG_PRESS_MS, MenuNode, 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, ButtonNode, OtpInputNode, ProgressBarNode, ACTIVITY_DEFAULT_NAME, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, 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;
|
|
126514
126687
|
var init_renderNode = __esm({
|
|
126515
126688
|
"../../core/web-renderer/src/renderNode.tsx"() {
|
|
126516
126689
|
"use strict";
|
|
@@ -126536,8 +126709,8 @@ var init_renderNode = __esm({
|
|
|
126536
126709
|
init_motionDefaults();
|
|
126537
126710
|
init_webviewFrame();
|
|
126538
126711
|
init_richContentEditor();
|
|
126539
|
-
init_mediaFieldUpload();
|
|
126540
126712
|
init_pdfSource();
|
|
126713
|
+
init_mediaFieldUpload();
|
|
126541
126714
|
init_icon_catalog_generated();
|
|
126542
126715
|
init_controls();
|
|
126543
126716
|
init_modalStack();
|
|
@@ -126550,6 +126723,7 @@ var init_renderNode = __esm({
|
|
|
126550
126723
|
init_rich_content();
|
|
126551
126724
|
init_rich_text_field();
|
|
126552
126725
|
init_richContent();
|
|
126726
|
+
loadPdfFetch = () => Promise.resolve().then(() => (init_pdfFetch(), pdfFetch_exports));
|
|
126553
126727
|
useIsomorphicLayoutEffect = typeof globalThis.document === "undefined" ? React9.useEffect : React9.useLayoutEffect;
|
|
126554
126728
|
ResponsiveGrid = ({ base, medium, expanded, initialCols, seedWidth, spacing, extra, children }) => {
|
|
126555
126729
|
const ref = React9.useRef(null);
|
|
@@ -128228,15 +128402,16 @@ var init_renderNode = __esm({
|
|
|
128228
128402
|
if (!retypeSrc) return;
|
|
128229
128403
|
let live3 = true;
|
|
128230
128404
|
let made = null;
|
|
128231
|
-
const settle = (
|
|
128405
|
+
const settle = (r2) => {
|
|
128406
|
+
const u2 = r2?.url ?? null;
|
|
128232
128407
|
made = u2;
|
|
128233
128408
|
if (!live3) {
|
|
128234
128409
|
if (u2) URL.revokeObjectURL(u2);
|
|
128235
128410
|
return;
|
|
128236
128411
|
}
|
|
128237
|
-
setRetyped({ from: retypeSrc, url: u2 });
|
|
128412
|
+
setRetyped({ from: retypeSrc, url: u2, pageCount: r2?.pageCount ?? null });
|
|
128238
128413
|
};
|
|
128239
|
-
|
|
128414
|
+
loadPdfFetch().then((m2) => m2.retypeAsPdfCounted(retypeSrc)).then(settle, () => settle(null));
|
|
128240
128415
|
return () => {
|
|
128241
128416
|
live3 = false;
|
|
128242
128417
|
if (made) URL.revokeObjectURL(made);
|
|
@@ -128244,8 +128419,40 @@ var init_renderNode = __esm({
|
|
|
128244
128419
|
};
|
|
128245
128420
|
}, [retypeSrc]);
|
|
128246
128421
|
const settled = retyped && retyped.from === retypeSrc ? retyped : null;
|
|
128422
|
+
const wantsShare = props.allowShare === true;
|
|
128423
|
+
const [fellBackFrom, setFellBackFrom] = React9.useState(null);
|
|
128424
|
+
const directFellBack = plan?.mode === "direct" && fellBackFrom === plan.src;
|
|
128425
|
+
const directSrc = plan?.mode === "direct" && (wantsShare || props.showPageControls !== false && directFellBack) ? plan.src : null;
|
|
128426
|
+
const [direct, setDirect] = React9.useState(null);
|
|
128427
|
+
React9.useEffect(() => {
|
|
128428
|
+
if (!directSrc) return;
|
|
128429
|
+
let live3 = true;
|
|
128430
|
+
let made = null;
|
|
128431
|
+
loadPdfFetch().then((m2) => m2.fetchPdfDocument(splitFragment(directSrc).base), () => null).then((doc) => {
|
|
128432
|
+
if (!live3) return;
|
|
128433
|
+
made = wantsShare && doc ? URL.createObjectURL(doc.blob) : null;
|
|
128434
|
+
setDirect({ from: directSrc, count: doc?.pageCount ?? null, blobUrl: made });
|
|
128435
|
+
});
|
|
128436
|
+
return () => {
|
|
128437
|
+
live3 = false;
|
|
128438
|
+
if (made) URL.revokeObjectURL(made);
|
|
128439
|
+
setDirect((cur) => cur?.from === directSrc ? null : cur);
|
|
128440
|
+
};
|
|
128441
|
+
}, [directSrc, wantsShare]);
|
|
128442
|
+
const directDoc = direct && direct.from === directSrc ? direct : null;
|
|
128443
|
+
const fallbackPageCount = plan?.mode === "retype" ? settled?.pageCount ?? null : directDoc?.count ?? null;
|
|
128444
|
+
const [nav, setNav] = React9.useState({ from: rawUrl, page: null, zoom: null });
|
|
128445
|
+
const view = nav.from === rawUrl ? nav : { from: rawUrl, page: null, zoom: null };
|
|
128247
128446
|
const src = plan?.mode === "direct" ? plan.src : settled?.url ?? null;
|
|
128248
|
-
const
|
|
128447
|
+
const [canvasCount, setCanvasCount] = React9.useState(null);
|
|
128448
|
+
const onPageCount = React9.useCallback((count2) => {
|
|
128449
|
+
if (!Number.isInteger(count2) || count2 < 1) return;
|
|
128450
|
+
setCanvasCount((cur) => cur?.from === src && cur.count === count2 ? cur : { from: src, count: count2 });
|
|
128451
|
+
}, [src]);
|
|
128452
|
+
const pageCount = canvasCount?.from === src ? canvasCount.count : fallbackPageCount;
|
|
128453
|
+
const onFallback = React9.useCallback(() => setFellBackFrom(src), [src]);
|
|
128454
|
+
const loading = plan?.mode === "retype" && !settled || directSrc != null && wantsShare && !directDoc && typeof window !== "undefined";
|
|
128455
|
+
const loadSrc = plan?.mode === "direct" && wantsShare ? directDoc?.blobUrl ?? src : src;
|
|
128249
128456
|
const ph = typeof props.height === "number" && props.height > 0 ? props.height : void 0;
|
|
128250
128457
|
const frame = {
|
|
128251
128458
|
width: "100%",
|
|
@@ -128279,25 +128486,83 @@ var init_renderNode = __esm({
|
|
|
128279
128486
|
}
|
|
128280
128487
|
);
|
|
128281
128488
|
}
|
|
128282
|
-
const
|
|
128283
|
-
const
|
|
128284
|
-
const
|
|
128285
|
-
const
|
|
128286
|
-
const
|
|
128287
|
-
const
|
|
128288
|
-
|
|
128289
|
-
|
|
128290
|
-
|
|
128489
|
+
const showPageControls = props.showPageControls !== false;
|
|
128490
|
+
const zoomable = props.zoomable !== false;
|
|
128491
|
+
const allowShare = props.allowShare === true;
|
|
128492
|
+
const { base, hash: ownHash } = splitFragment(src);
|
|
128493
|
+
const sourceHash = plan?.mode === "retype" ? sourceFragment(retypeSrc) : ownHash;
|
|
128494
|
+
const startPage = typeof props.startPage === "number" && props.startPage >= 1 ? Math.floor(props.startPage) : null;
|
|
128495
|
+
const initialPage = startPage != null && pageCount != null && startPage > pageCount ? 1 : startPage;
|
|
128496
|
+
const page = view.page ?? initialPage;
|
|
128497
|
+
const requestedPage = page ?? fragmentPage(sourceHash) ?? 1;
|
|
128498
|
+
const shownPage = pageCount != null ? Math.min(requestedPage, pageCount) : requestedPage;
|
|
128499
|
+
const atEnd = pageCount != null && shownPage >= pageCount;
|
|
128500
|
+
const data = base + pdfOpenFragment(sourceHash, { page, zoom: zoomable ? view.zoom : null, fitWidth: !zoomable });
|
|
128501
|
+
const label3 = typeof props.title === "string" && props.title ? props.title : "PDF document";
|
|
128502
|
+
const documentStyle = showPageControls || zoomable || allowShare ? { display: "block", width: "100%", flex: "1 1 auto", minHeight: ph ? 0 : 280, border: "none" } : frame;
|
|
128503
|
+
const object7 = typeof window === "undefined" ? /* @__PURE__ */ jsx10("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx10(React9.Suspense, { fallback: /* @__PURE__ */ jsx10("div", { "data-himalaya-pdf": "loading", role: "img", "aria-label": "loading document", "aria-busy": "true", style: documentStyle }), children: /* @__PURE__ */ jsx10(
|
|
128504
|
+
PdfDocumentCanvas,
|
|
128505
|
+
{
|
|
128506
|
+
src: loadSrc ?? src,
|
|
128507
|
+
nativeSrc: data,
|
|
128508
|
+
title: label3,
|
|
128509
|
+
height: showPageControls || zoomable || allowShare ? void 0 : ph,
|
|
128510
|
+
onPageCount,
|
|
128511
|
+
onFallback,
|
|
128512
|
+
startPage: shownPage,
|
|
128513
|
+
zoomPercent: zoomable ? view.zoom ?? sourceZoomPercent(sourceHash) : void 0,
|
|
128514
|
+
style: documentStyle
|
|
128515
|
+
}
|
|
128516
|
+
) });
|
|
128517
|
+
if (!showPageControls && !zoomable && !allowShare) return object7;
|
|
128518
|
+
const C2 = ctx.color;
|
|
128519
|
+
const go2 = (p2) => setNav({ from: rawUrl, page: Math.max(1, pageCount != null ? Math.min(p2, pageCount) : p2), zoom: view.zoom });
|
|
128520
|
+
const zoomBy = (d2) => setNav({ from: rawUrl, page: view.page, zoom: pdfZoomStep(view.zoom ?? sourceZoomPercent(sourceHash) ?? null, d2) });
|
|
128521
|
+
const btn = {
|
|
128522
|
+
border: "none",
|
|
128523
|
+
background: "none",
|
|
128524
|
+
cursor: "pointer",
|
|
128525
|
+
padding: "2px 8px",
|
|
128526
|
+
color: accentTextColor(ctx),
|
|
128527
|
+
fontSize: pxToRem(16),
|
|
128528
|
+
lineHeight: 1
|
|
128529
|
+
};
|
|
128530
|
+
const off = { ...btn, cursor: "default", color: C2("textSecondary", "#8a8a8e"), opacity: 0.5 };
|
|
128531
|
+
const fileName = rawUrl.split(/[?#]/)[0].split("/").pop() || "document.pdf";
|
|
128532
|
+
const downloadHref = plan?.mode === "retype" ? base : directDoc?.blobUrl ?? null;
|
|
128533
|
+
const openHref = base + pdfOpenFragment(sourceHash, { page: shownPage, zoom: zoomable ? view.zoom : null, viewerChrome: true });
|
|
128534
|
+
return /* @__PURE__ */ jsxs7("div", { "data-himalaya-pdf": "reader", style: { ...frame, display: "flex", flexDirection: "column", background: C2("surfaceTertiary", "#f4f4f4") }, children: [
|
|
128535
|
+
object7,
|
|
128536
|
+
/* @__PURE__ */ jsxs7(
|
|
128537
|
+
"div",
|
|
128291
128538
|
{
|
|
128292
|
-
"data-himalaya-pdf": "
|
|
128293
|
-
|
|
128294
|
-
|
|
128295
|
-
"
|
|
128296
|
-
|
|
128539
|
+
"data-himalaya-pdf-controls": "",
|
|
128540
|
+
role: "toolbar",
|
|
128541
|
+
"aria-label": "Document controls",
|
|
128542
|
+
style: { display: "flex", alignItems: "center", gap: 4, padding: "4px 8px", fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C2("textSecondary", "#636b78") },
|
|
128543
|
+
children: [
|
|
128544
|
+
showPageControls && /* @__PURE__ */ jsxs7(Fragment4, { children: [
|
|
128545
|
+
/* @__PURE__ */ jsx10("button", { type: "button", "aria-label": "Previous page", disabled: shownPage <= 1, onClick: () => go2(shownPage - 1), style: shownPage <= 1 ? off : btn, children: "\u2039" }),
|
|
128546
|
+
/* @__PURE__ */ jsx10("span", { "data-himalaya-pdf-page": shownPage, "aria-live": "polite", children: pageCount != null ? `Page ${shownPage} of ${pageCount}` : `Page ${shownPage}` }),
|
|
128547
|
+
/* @__PURE__ */ jsx10("button", { type: "button", "aria-label": "Next page", disabled: atEnd, onClick: () => go2(shownPage + 1), style: atEnd ? off : btn, children: "\u203A" })
|
|
128548
|
+
] }),
|
|
128549
|
+
/* @__PURE__ */ jsx10("span", { style: { flex: "1 1 auto" } }),
|
|
128550
|
+
zoomable && /* @__PURE__ */ jsxs7(Fragment4, { children: [
|
|
128551
|
+
/* @__PURE__ */ jsx10("button", { type: "button", "aria-label": "Zoom out", onClick: () => zoomBy(-1), style: btn, children: "\u2212" }),
|
|
128552
|
+
/* @__PURE__ */ jsx10("button", { type: "button", "aria-label": "Zoom in", onClick: () => zoomBy(1), style: btn, children: "+" })
|
|
128553
|
+
] }),
|
|
128554
|
+
allowShare && (downloadHref ? (
|
|
128555
|
+
// Bytes the page holds (a re-typed blob, or a CORS fetch): a real download.
|
|
128556
|
+
/* @__PURE__ */ jsx10("a", { href: downloadHref, download: fileName, "aria-label": "Download PDF", style: { ...btn, textDecoration: "none", fontSize: pxToRem(12) }, children: "Download" })
|
|
128557
|
+
) : (
|
|
128558
|
+
// A cross-origin document the page cannot read: `download` would be ignored, so say what
|
|
128559
|
+
// actually happens — it opens in a new tab.
|
|
128560
|
+
/* @__PURE__ */ jsx10("a", { href: openHref, target: "_blank", rel: "noopener noreferrer", "aria-label": "Open PDF in a new tab", style: { ...btn, textDecoration: "none", fontSize: pxToRem(12) }, children: "Open" })
|
|
128561
|
+
))
|
|
128562
|
+
]
|
|
128297
128563
|
}
|
|
128298
|
-
)
|
|
128299
|
-
}
|
|
128300
|
-
return /* @__PURE__ */ jsx10(React9.Suspense, { fallback: /* @__PURE__ */ jsx10("div", { "data-himalaya-pdf": "loading", role: "img", "aria-label": "loading document", "aria-busy": "true", style: { ...frame, background: "#f4f4f4" } }), children: /* @__PURE__ */ jsx10(PdfDocumentCanvas, { src, nativeSrc, title: typeof props.title === "string" && props.title ? props.title : "PDF document", height: ph, startPage, zoomPercent, style: frame }) });
|
|
128564
|
+
)
|
|
128565
|
+
] });
|
|
128301
128566
|
});
|
|
128302
128567
|
WebViewNode = withExtras("WebViewNode", ({ props, ctx, wrap }) => {
|
|
128303
128568
|
const boundUrl = useResolvedScalar(props.url != null && isBinding(props.url) ? props.url : void 0, ctx);
|
|
@@ -131376,7 +131641,10 @@ var init_renderNode = __esm({
|
|
|
131376
131641
|
const events = Array.isArray(rawEvents) ? rawEvents : [];
|
|
131377
131642
|
const boundAnchor = useResolvedScalar(props.anchorDatePath, ctx);
|
|
131378
131643
|
const anchorRaw = props.anchorDatePath != null ? boundAnchor : props.anchorDate;
|
|
131379
|
-
const
|
|
131644
|
+
const [pagedAnchor, setPagedAnchor] = React9.useState(null);
|
|
131645
|
+
const localAnchor = pagedAnchor && Object.is(pagedAnchor.raw, anchorRaw) && pagedAnchor.path === props.anchorDatePath && pagedAnchor.mode === props.mode && pagedAnchor.provider === ctx.provider ? pagedAnchor.date : null;
|
|
131646
|
+
if (pagedAnchor && !localAnchor) setPagedAnchor(null);
|
|
131647
|
+
const anchor = localAnchor ?? (typeof anchorRaw === "string" ? parseLocalDate(anchorRaw) : null) ?? /* @__PURE__ */ new Date();
|
|
131380
131648
|
const mode = props.mode === "week" ? "week" : props.mode === "3day" ? "3day" : "day";
|
|
131381
131649
|
const firstWeekday = typeof props.firstWeekday === "number" ? (props.firstWeekday % 7 + 7) % 7 : 0;
|
|
131382
131650
|
const startHour = typeof props.startHour === "number" ? props.startHour : 0;
|
|
@@ -131413,6 +131681,7 @@ var init_renderNode = __esm({
|
|
|
131413
131681
|
const rangeStep = mode === "week" ? 7 : mode === "3day" ? 3 : 1;
|
|
131414
131682
|
const shiftRange = (deltaDays) => {
|
|
131415
131683
|
const next = new Date(anchor.getFullYear(), anchor.getMonth(), anchor.getDate() + deltaDays);
|
|
131684
|
+
setPagedAnchor({ date: next, raw: anchorRaw, path: props.anchorDatePath, mode: props.mode, provider: ctx.provider });
|
|
131416
131685
|
dispatchCalendarAction(ctx, props.onRangeChange, { anchorDate: localDayKey(next) });
|
|
131417
131686
|
};
|
|
131418
131687
|
const canPage = true;
|
|
@@ -162174,32 +162443,33 @@ var init_preview_assets_generated = __esm({
|
|
|
162174
162443
|
"../../packages/serve/src/preview-assets.generated.ts"() {
|
|
162175
162444
|
init_preview_assets_format();
|
|
162176
162445
|
PREVIEW_ASSET_MANIFEST = [
|
|
162177
|
-
{ key: "assets/DashboardHost-
|
|
162178
|
-
{ key: "assets/DevDrawer-
|
|
162179
|
-
{ key: "assets/IdiomCompare-
|
|
162180
|
-
{ key: "assets/LightboxViewer-
|
|
162181
|
-
{ key: "assets/PhonePreviewControl-
|
|
162182
|
-
{ key: "assets/SchemeCompare
|
|
162183
|
-
{ key: "assets/index-
|
|
162184
|
-
{ key: "assets/pdf-
|
|
162185
|
-
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
162186
|
-
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset:
|
|
162187
|
-
{ key: "assets/pdfDocument-
|
|
162188
|
-
{ key: "
|
|
162189
|
-
{ key: "fonts/Roboto-
|
|
162190
|
-
{ key: "fonts/
|
|
162191
|
-
{ key: "fonts/WixMadeforDisplay-
|
|
162192
|
-
{ key: "fonts/WixMadeforDisplay-
|
|
162193
|
-
{ key: "fonts/WixMadeforDisplay-
|
|
162194
|
-
{ key: "fonts/WixMadeforDisplay-
|
|
162195
|
-
{ key: "fonts/
|
|
162196
|
-
{ key: "fonts/WixMadeforText-
|
|
162197
|
-
{ key: "fonts/WixMadeforText-
|
|
162198
|
-
{ key: "fonts/WixMadeforText-
|
|
162199
|
-
{ key: "fonts/WixMadeforText-
|
|
162200
|
-
{ key: "
|
|
162201
|
-
{ key: "
|
|
162202
|
-
{ key: "
|
|
162446
|
+
{ key: "assets/DashboardHost-C8q83QJ2.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2916, sha256: "144b7dc6e3662aa62ea0e8e03e9aae7762dc3dc2f63da56e8b04b1bb70db89ad" },
|
|
162447
|
+
{ key: "assets/DevDrawer-DsUG7Nml.js", contentType: "application/javascript; charset=utf-8", offset: 2924, length: 16744, sha256: "7bcc9801a17aa2ba526fb0983ea315581e3ac2d4c45f625b719df716be0cd9c0" },
|
|
162448
|
+
{ key: "assets/IdiomCompare-Cthh0ISj.js", contentType: "application/javascript; charset=utf-8", offset: 19668, length: 1892, sha256: "eab302721e7b8202f10d0c622d57b0dc28b3ab9ae3fe07b20a2563198ffd88d1" },
|
|
162449
|
+
{ key: "assets/LightboxViewer-ASOCRp41.js", contentType: "application/javascript; charset=utf-8", offset: 21560, length: 8132, sha256: "46ab57a241855a13a17f94fec2a70ce9b45c1a4c3e54801c8c679328256edb33" },
|
|
162450
|
+
{ key: "assets/PhonePreviewControl-B6cU9zp5.js", contentType: "application/javascript; charset=utf-8", offset: 29692, length: 37729, sha256: "c5550c028620913776998cf8818e8f9f794c02f5d234b7aeaf71671bf9080373" },
|
|
162451
|
+
{ key: "assets/SchemeCompare--If17_u5.js", contentType: "application/javascript; charset=utf-8", offset: 67421, length: 1824, sha256: "66285df0006380de22ced18317a59c08ba318788d73d717a321ff1e5460c1fa0" },
|
|
162452
|
+
{ key: "assets/index-CKaODCvf.js", contentType: "application/javascript; charset=utf-8", offset: 69245, length: 1280616, sha256: "6a91080524cebb84370c0fb3c04d74c99b2d704cb003a21f2e01912e7f47c0b2" },
|
|
162453
|
+
{ key: "assets/pdf-B2304dXw.js", contentType: "application/javascript; charset=utf-8", offset: 1349861, length: 488199, sha256: "b284e54724b9ac6fd9b9dbddaf42c4a564d9ea1cb8ec0d78ea5b3c132c20cb41" },
|
|
162454
|
+
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1838060, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
|
|
162455
|
+
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1838133, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
|
|
162456
|
+
{ key: "assets/pdfDocument-C5bi6q0r.js", contentType: "application/javascript; charset=utf-8", offset: 3155167, length: 3379, sha256: "ac6eff0d1c637a70fade3bd860a7dc531b1b1b4301012d3daf120b7a3ea9b7e6" },
|
|
162457
|
+
{ key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3158546, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
|
|
162458
|
+
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3160812, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
|
|
162459
|
+
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3165422, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
|
|
162460
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3654006, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
162461
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3744930, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
162462
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3835914, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
162463
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3926894, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
162464
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4017766, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
162465
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4108746, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
162466
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4217382, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
162467
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4326466, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
162468
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4435514, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
162469
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4543214, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
162470
|
+
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4631322, length: 6748, sha256: "4a92459977d7cefa1a6a7e020c3a63509737f083b3f2773557c1a5771665811a" },
|
|
162471
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 4638070, length: 4947, sha256: "8a3f524b30f25db213d2458d71a38298f4fbdcc8989bd0eee91428809bf45832" },
|
|
162472
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4643017, length: 17786, sha256: "084107ca997628c248f1b0ba3a7494744850df39fad813546ab8bdb82a6058da" }
|
|
162203
162473
|
];
|
|
162204
162474
|
}
|
|
162205
162475
|
});
|
|
Binary file
|
|
@@ -21,8 +21,7 @@
|
|
|
21
21
|
"Video",
|
|
22
22
|
"PdfView",
|
|
23
23
|
"MediaPlayer",
|
|
24
|
-
"TimeGrid"
|
|
25
|
-
"Agenda"
|
|
24
|
+
"TimeGrid"
|
|
26
25
|
],
|
|
27
26
|
"components": [
|
|
28
27
|
{
|
|
@@ -1277,31 +1276,18 @@
|
|
|
1277
1276
|
"category": "Cross-cutting & media",
|
|
1278
1277
|
"propsType": "PdfViewProps",
|
|
1279
1278
|
"bindings": [],
|
|
1280
|
-
"notImplemented":
|
|
1281
|
-
|
|
1282
|
-
"
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
{
|
|
1293
|
-
"props": [
|
|
1294
|
-
"showPageControls",
|
|
1295
|
-
"zoomable",
|
|
1296
|
-
"allowShare"
|
|
1297
|
-
],
|
|
1298
|
-
"platforms": [
|
|
1299
|
-
"web"
|
|
1300
|
-
],
|
|
1301
|
-
"severity": "styling",
|
|
1302
|
-
"note": "No page controls. The browser PDF viewer ignores `zoomable` and `allowShare`."
|
|
1303
|
-
}
|
|
1304
|
-
],
|
|
1279
|
+
"notImplemented": {
|
|
1280
|
+
"props": [
|
|
1281
|
+
"showPageControls",
|
|
1282
|
+
"zoomable",
|
|
1283
|
+
"allowShare"
|
|
1284
|
+
],
|
|
1285
|
+
"platforms": [
|
|
1286
|
+
"web"
|
|
1287
|
+
],
|
|
1288
|
+
"severity": "styling",
|
|
1289
|
+
"note": "Interactive PDF.js canvas rendering honours the reader’s page, zoom and export controls. Static previews and PDF.js loading/rendering failures use a native browser-viewer fallback. In that fallback, hiding page or zoom controls is only a viewer hint and cannot reliably hide browser chrome; allowShare hides the reader’s export controls but cannot prevent browser save/print. These props are UI controls, not document access restrictions."
|
|
1290
|
+
},
|
|
1305
1291
|
"propsSource": "export interface PdfViewProps {\n url?: string;\n height?: number;\n showPageControls?: boolean;\n /** 1-based; 0/absent ⇒ page 1. */\n startPage?: number;\n zoomable?: boolean;\n allowShare?: boolean;\n}"
|
|
1306
1292
|
},
|
|
1307
1293
|
{
|
|
@@ -1399,20 +1385,19 @@
|
|
|
1399
1385
|
"category": "Rich vector & celebration (motion grammar Batch 4)",
|
|
1400
1386
|
"propsType": "TimeGridProps",
|
|
1401
1387
|
"bindings": [
|
|
1388
|
+
"anchorDatePath",
|
|
1402
1389
|
"eventsPath",
|
|
1403
1390
|
"resourcesPath"
|
|
1404
1391
|
],
|
|
1405
1392
|
"notImplemented": {
|
|
1406
1393
|
"props": [
|
|
1407
|
-
"anchorDatePath",
|
|
1408
|
-
"onRangeChange",
|
|
1409
1394
|
"onCreate"
|
|
1410
1395
|
],
|
|
1411
1396
|
"platforms": [
|
|
1412
1397
|
"android"
|
|
1413
1398
|
],
|
|
1414
1399
|
"severity": "category",
|
|
1415
|
-
"note": "`
|
|
1400
|
+
"note": "`onCreate` never fires."
|
|
1416
1401
|
},
|
|
1417
1402
|
"propsSource": "export interface TimeGridProps {\n mode?: \"day\" | \"3day\" | \"week\";\n anchorDate?: string;\n anchorDatePath?: string;\n events?: CalendarEvent[];\n eventsPath?: string;\n startHour?: number;\n endHour?: number;\n firstWeekday?: number;\n showNowLine?: boolean;\n onSelectEvent?: Action;\n onRangeChange?: Action;\n /** Per-event body, `$item.*`-substituted per event. Absent ⇒ the built-in block. */\n eventTemplate?: Component;\n /** RESOURCE lanes: staff, rooms, chairs, courts. Overlap packing already splits\n * concurrent events into ANONYMOUS sub-columns; lanes make a column MEAN\n * something. Single-day modes only — a week of resource columns is a 2-D grid\n * that does not fit a phone, so `mode: \"week\"` ignores them. */\n resources?: TimeGridResource[];\n resourcesPath?: string;\n /** EDITING. Opt-in, default off, so no existing read-only\n * grid can regress into one that moves bookings when a user meant to scroll. */\n editable?: boolean;\n /** Snap grid in minutes (default 15). A drag landing on 10:07 is almost never\n * what anyone meant, and no scheduling system accepts it. */\n snapMinutes?: number;\n /** Moved or resized → args{id, start, end}. The component REPORTS; the worker\n * decides. An edit that must be rejected has to be able to fail. */\n onEventChange?: Action;\n /** Empty space long-pressed → args{start, end} for one `snapMinutes` slot. */\n onCreate?: Action;\n /** Labels for the non-drag equivalents. Drag is unreachable by VoiceOver,\n * TalkBack and keyboard, so these are how editing stays operable at all. */\n moveActionLabel?: string;\n resizeActionLabel?: string;\n}"
|
|
1418
1403
|
},
|
|
@@ -1424,16 +1409,6 @@
|
|
|
1424
1409
|
"eventsPath",
|
|
1425
1410
|
"scrollToDatePath"
|
|
1426
1411
|
],
|
|
1427
|
-
"notImplemented": {
|
|
1428
|
-
"props": [
|
|
1429
|
-
"stickyHeaders"
|
|
1430
|
-
],
|
|
1431
|
-
"platforms": [
|
|
1432
|
-
"android"
|
|
1433
|
-
],
|
|
1434
|
-
"severity": "styling",
|
|
1435
|
-
"note": "Day headers do not pin."
|
|
1436
|
-
},
|
|
1437
1412
|
"propsSource": "export interface AgendaProps {\n events?: CalendarEvent[];\n eventsPath?: string;\n scrollToDate?: string;\n /** Worker-driven jump target (a literal `scrollToDate` is frozen in the descriptor). */\n scrollToDatePath?: string;\n stickyHeaders?: boolean;\n emptyText?: string;\n onSelectEvent?: Action;\n /** Per-event row body, `$item.*`-substituted per event. Closes the gap that made\n * `agendaList()` (the LazyList-backed PRESET, which takes a `rowTemplate`) more\n * expressive than this component. Absent ⇒ the built-in row. */\n eventTemplate?: Component;\n /** Newest-first. Absent/false ⇒ ascending. Applies to the day GROUPS and to the\n * events within each group. Without it a list whose default sort is \"Newest\"\n * (an owner's orders, recent activity) could not become an Agenda without\n * silently inverting itself — every arm sorted ascending unconditionally. */\n descending?: boolean;\n}"
|
|
1438
1413
|
}
|
|
1439
1414
|
],
|
|
@@ -111,17 +111,17 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
|
|
|
111
111
|
| `Lottie` | Rich vector & celebration (motion grammar Batch 4) | — |
|
|
112
112
|
| `Rive` | Rich vector & celebration (motion grammar Batch 4) | — |
|
|
113
113
|
| `MonthCalendar` | Rich vector & celebration (motion grammar Batch 4) | `selectedDatePath`, `decorationsPath`, `yearPath`, `monthPath`, `selectedStartDatePath`, `selectedEndDatePath` |
|
|
114
|
-
| `TimeGrid` | Rich vector & celebration (motion grammar Batch 4) | `eventsPath`, `resourcesPath` |
|
|
114
|
+
| `TimeGrid` | Rich vector & celebration (motion grammar Batch 4) | `anchorDatePath`, `eventsPath`, `resourcesPath` |
|
|
115
115
|
| `Agenda` | Rich vector & celebration (motion grammar Batch 4) | `eventsPath`, `scrollToDatePath` |
|
|
116
116
|
|
|
117
117
|
## Not implemented (decoded but never read)
|
|
118
118
|
|
|
119
119
|
These props are accepted by the schema and pass validation, but the named platform's renderer never reads them — they silently do nothing (no warning, no log). Prefer a prop NOT listed here, or drive the behaviour from a worker.
|
|
120
120
|
|
|
121
|
-
**Scope:
|
|
121
|
+
**Scope: 18 of 86 components, all of them android / web / ios-only** — every other component/platform pair reads every prop it decodes. The list splits in two, and the halves mean different things:
|
|
122
122
|
|
|
123
123
|
- **`category` (7: `Menu`, `Tooltip`, `Popover`, `ChipsInput`, `OtpInput`, `MediaPlayer`, `TimeGrid`)** — the prop changes the component's *kind*. These genuinely are **not implemented**: an overlay renders always-visible inline, so the component does not do the job its name implies. Check the row's note for a working alternative.
|
|
124
|
-
- **`styling` (
|
|
124
|
+
- **`styling` (11: `Text`, `Icon`, `Carousel`, `Pager`, `Snackbar`, `WebView`, `Slider`, `SelectionControl`, `ActivityIndicator`, `Video`, `PdfView`)** — the component itself **works**; only the listed prop is inert. `Slider` on iOS is a working slider whose `debounceMs` does not throttle — not a broken `Slider`. Use the component; just do not depend on that one prop.
|
|
125
125
|
|
|
126
126
|
| Component | Unread props | Platform | Kind | Note |
|
|
127
127
|
|---|---|---|---|---|
|
|
@@ -141,13 +141,11 @@ These props are accepted by the schema and pass validation, but the named platfo
|
|
|
141
141
|
| `ChipsInput` | `onAdd` | ios, android | category | `onAdd` never dispatches. |
|
|
142
142
|
| `OtpInput` | `onComplete`, `onChange` | ios, android, web | category | Neither `onChange` nor `onComplete` dispatches. |
|
|
143
143
|
| `Video` | `poster` | ios | styling | `poster` is not shown. |
|
|
144
|
-
| `PdfView` | `showPageControls`, `
|
|
145
|
-
| `PdfView` | `showPageControls`, `zoomable`, `allowShare` | web | styling | No page controls. The browser PDF viewer ignores `zoomable` and `allowShare`. |
|
|
144
|
+
| `PdfView` | `showPageControls`, `zoomable`, `allowShare` | web | styling | Interactive PDF.js canvas rendering honours the reader’s page, zoom and export controls. Static previews and PDF.js loading/rendering failures use a native browser-viewer fallback. In that fallback, hiding page or zoom controls is only a viewer hint and cannot reliably hide browser chrome; allowShare hides the reader’s export controls but cannot prevent browser save/print. These props are UI controls, not document access restrictions. |
|
|
146
145
|
| `MediaPlayer` | `autoplayVisibilityThreshold`, `preload`, `playbackRates`, `showQueue`, `showChapters`, `showTranscript` | ios | category | `autoplayVisibilityThreshold` is ignored (whenVisible = once on appear). `preload` is ignored. `playbackRates` is ignored, and the queue/chapters/transcript panels never render. |
|
|
147
146
|
| `MediaPlayer` | `externalPlayback`, `appearance`, `allowCellular`, `preload`, `playbackRates`, `showQueue`, `showChapters`, `showTranscript` | android | category | `externalPlayback` is forced off. `appearance` is ignored. `allowCellular` is ignored. `preload` is ignored. `playbackRates` is ignored, and the queue/chapters/transcript panels never render. |
|
|
148
147
|
| `MediaPlayer` | `allowCellular`, `forwardSkipSeconds`, `backwardSkipSeconds`, `playbackRates`, `showQueue`, `showChapters`, `showTranscript` | web | category | `allowCellular` is ignored. Skip buttons ignore `forwardSkipSeconds`/`backwardSkipSeconds`. `playbackRates` is ignored, and the queue/chapters/transcript panels never render. |
|
|
149
|
-
| `TimeGrid` | `
|
|
150
|
-
| `Agenda` | `stickyHeaders` | android | styling | Day headers do not pin. |
|
|
148
|
+
| `TimeGrid` | `onCreate` | android | category | `onCreate` never fires. |
|
|
151
149
|
|
|
152
150
|
## Token slots: `TokenRef` object vs bare `TokenName` string
|
|
153
151
|
|
|
@@ -2090,9 +2088,7 @@ export interface PdfViewProps {
|
|
|
2090
2088
|
}
|
|
2091
2089
|
```
|
|
2092
2090
|
|
|
2093
|
-
> ⚠️ **Implemented, but these props are inert on
|
|
2094
|
-
|
|
2095
|
-
> ⚠️ **Implemented, but these props are inert on web:** `showPageControls`, `zoomable`, `allowShare` — No page controls. The browser PDF viewer ignores `zoomable` and `allowShare`.
|
|
2091
|
+
> ⚠️ **Implemented, but these props are inert on web:** `showPageControls`, `zoomable`, `allowShare` — Interactive PDF.js canvas rendering honours the reader’s page, zoom and export controls. Static previews and PDF.js loading/rendering failures use a native browser-viewer fallback. In that fallback, hiding page or zoom controls is only a viewer hint and cannot reliably hide browser chrome; allowShare hides the reader’s export controls but cannot prevent browser save/print. These props are UI controls, not document access restrictions.
|
|
2096
2092
|
|
|
2097
2093
|
#### MediaPlayer
|
|
2098
2094
|
|
|
@@ -2265,7 +2261,7 @@ export interface TimeGridProps {
|
|
|
2265
2261
|
}
|
|
2266
2262
|
```
|
|
2267
2263
|
|
|
2268
|
-
> ⚠️ **Not implemented on android:** `
|
|
2264
|
+
> ⚠️ **Not implemented on android:** `onCreate` — `onCreate` never fires.
|
|
2269
2265
|
|
|
2270
2266
|
#### Agenda
|
|
2271
2267
|
|
|
@@ -2291,8 +2287,6 @@ export interface AgendaProps {
|
|
|
2291
2287
|
}
|
|
2292
2288
|
```
|
|
2293
2289
|
|
|
2294
|
-
> ⚠️ **Implemented, but these props are inert on android:** `stickyHeaders` — Day headers do not pin.
|
|
2295
|
-
|
|
2296
2290
|
## Screen descriptor shape
|
|
2297
2291
|
|
|
2298
2292
|
```ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/himalaya-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1465.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
|
|
6
6
|
"keywords": [
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"artifactId": "himalaya-cli"
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
|
-
"falconPackageHash": "
|
|
74
|
+
"falconPackageHash": "19e0653508dd0a35a2413578ca22c6452471d39f3797b2cd827fb652"
|
|
75
75
|
}
|