@wix/himalaya-cli 0.1463.0 → 0.1464.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 +381 -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
|
@@ -39372,19 +39372,22 @@ function useResolvedScalar(v2, ctx) {
|
|
|
39372
39372
|
function useBoundValue(ctx, binding2) {
|
|
39373
39373
|
const path2 = servicePath(binding2);
|
|
39374
39374
|
const active = !!ctx.provider && !!binding2;
|
|
39375
|
+
const provider = ctx.provider;
|
|
39375
39376
|
const [state, setState] = useState(() => ({
|
|
39376
39377
|
path: path2,
|
|
39377
|
-
|
|
39378
|
+
provider,
|
|
39379
|
+
v: active ? provider.value(path2) : void 0
|
|
39378
39380
|
}));
|
|
39379
|
-
const
|
|
39380
|
-
|
|
39381
|
+
const matches = state.path === path2 && state.provider === provider;
|
|
39382
|
+
const current = matches ? state.v : active ? provider.value(path2) : void 0;
|
|
39383
|
+
if (!matches) setState({ path: path2, provider, v: current });
|
|
39381
39384
|
useEffect(() => {
|
|
39382
|
-
if (!
|
|
39383
|
-
return
|
|
39385
|
+
if (!provider || !binding2) return;
|
|
39386
|
+
return provider.subscribe(
|
|
39384
39387
|
path2,
|
|
39385
|
-
(nv) => setState((prev) => prev.path === path2 && Object.is(prev.v, nv) ? prev : { path: path2, v: nv })
|
|
39388
|
+
(nv) => setState((prev) => prev.path === path2 && prev.provider === provider && Object.is(prev.v, nv) ? prev : { path: path2, provider, v: nv })
|
|
39386
39389
|
);
|
|
39387
|
-
}, [
|
|
39390
|
+
}, [provider, path2, binding2]);
|
|
39388
39391
|
return active ? current : void 0;
|
|
39389
39392
|
}
|
|
39390
39393
|
function useBoundValues(ctx, bindings) {
|
|
@@ -40880,6 +40883,76 @@ var init_richContentEditor = __esm({
|
|
|
40880
40883
|
}
|
|
40881
40884
|
});
|
|
40882
40885
|
|
|
40886
|
+
// ../../core/web-renderer/src/pdfSource.ts
|
|
40887
|
+
function pdfEmbedPlan(url, pageOrigin = currentOrigin(), pageUrl) {
|
|
40888
|
+
let source = url;
|
|
40889
|
+
if (pageOrigin !== null && pageUrl) {
|
|
40890
|
+
try {
|
|
40891
|
+
const base = new URL(pageUrl);
|
|
40892
|
+
if (base.origin === pageOrigin) source = new URL(url, base).href;
|
|
40893
|
+
} catch {
|
|
40894
|
+
return null;
|
|
40895
|
+
}
|
|
40896
|
+
}
|
|
40897
|
+
const target = classifyEmbedUrl(source, pageOrigin);
|
|
40898
|
+
if (!target) return null;
|
|
40899
|
+
if (target.protocol === "http:" || target.protocol === "https:") {
|
|
40900
|
+
if (pageOrigin === null) {
|
|
40901
|
+
if (target.absolute) return { mode: "direct", src: target.href };
|
|
40902
|
+
if (target.schemeRelative) return { mode: "direct", src: target.href.replace(/^https?:/, "") };
|
|
40903
|
+
return null;
|
|
40904
|
+
}
|
|
40905
|
+
return { mode: target.crossOrigin ? "direct" : "retype", src: target.href };
|
|
40906
|
+
}
|
|
40907
|
+
if (target.protocol === "blob:" && pageOrigin !== null && !target.crossOrigin) {
|
|
40908
|
+
return { mode: "retype", src: target.href };
|
|
40909
|
+
}
|
|
40910
|
+
return null;
|
|
40911
|
+
}
|
|
40912
|
+
function splitFragment(src) {
|
|
40913
|
+
const i2 = src.indexOf("#");
|
|
40914
|
+
return i2 < 0 ? { base: src, hash: "" } : { base: src.slice(0, i2), hash: src.slice(i2) };
|
|
40915
|
+
}
|
|
40916
|
+
function fragmentPage(hash2) {
|
|
40917
|
+
const m2 = /(?:^#|&)page=(\d+)/.exec(hash2);
|
|
40918
|
+
const n2 = m2 ? Number(m2[1]) : NaN;
|
|
40919
|
+
return Number.isFinite(n2) && n2 >= 1 ? n2 : null;
|
|
40920
|
+
}
|
|
40921
|
+
function pdfOpenFragment(sourceHash, opts) {
|
|
40922
|
+
const params = /* @__PURE__ */ new Map();
|
|
40923
|
+
for (const part3 of sourceHash.replace(/^#/, "").split("&")) {
|
|
40924
|
+
if (!part3) continue;
|
|
40925
|
+
const eq = part3.indexOf("=");
|
|
40926
|
+
params.set(eq < 0 ? part3 : part3.slice(0, eq), eq < 0 ? "" : part3.slice(eq + 1));
|
|
40927
|
+
}
|
|
40928
|
+
if (opts.page != null && opts.page >= 1) params.set("page", String(Math.floor(opts.page)));
|
|
40929
|
+
if (opts.fitWidth) {
|
|
40930
|
+
params.delete("zoom");
|
|
40931
|
+
params.set("view", "FitH");
|
|
40932
|
+
} else if (opts.zoom != null) {
|
|
40933
|
+
params.set("zoom", String(Math.round(opts.zoom)));
|
|
40934
|
+
}
|
|
40935
|
+
if (!opts.viewerChrome) {
|
|
40936
|
+
params.set("toolbar", "0");
|
|
40937
|
+
params.set("navpanes", "0");
|
|
40938
|
+
}
|
|
40939
|
+
return params.size ? "#" + [...params].map(([k2, v2]) => v2 === "" ? k2 : `${k2}=${v2}`).join("&") : "";
|
|
40940
|
+
}
|
|
40941
|
+
function pdfZoomStep(current, direction) {
|
|
40942
|
+
const from = current ?? PDF_ZOOM_DEFAULT;
|
|
40943
|
+
return Math.min(PDF_ZOOM_MAX, Math.max(PDF_ZOOM_MIN, from + direction * PDF_ZOOM_STEP));
|
|
40944
|
+
}
|
|
40945
|
+
var PDF_ZOOM_MIN, PDF_ZOOM_MAX, PDF_ZOOM_STEP, PDF_ZOOM_DEFAULT;
|
|
40946
|
+
var init_pdfSource = __esm({
|
|
40947
|
+
"../../core/web-renderer/src/pdfSource.ts"() {
|
|
40948
|
+
init_webviewFrame();
|
|
40949
|
+
PDF_ZOOM_MIN = 50;
|
|
40950
|
+
PDF_ZOOM_MAX = 400;
|
|
40951
|
+
PDF_ZOOM_STEP = 25;
|
|
40952
|
+
PDF_ZOOM_DEFAULT = 100;
|
|
40953
|
+
}
|
|
40954
|
+
});
|
|
40955
|
+
|
|
40883
40956
|
// ../../core/web-host/src/actions/presigned-upload-policy.ts
|
|
40884
40957
|
function hostMatches(host) {
|
|
40885
40958
|
const h2 = host.toLowerCase().split(":")[0];
|
|
@@ -41055,45 +41128,6 @@ var init_mediaFieldUpload = __esm({
|
|
|
41055
41128
|
}
|
|
41056
41129
|
});
|
|
41057
41130
|
|
|
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
41131
|
// ../../core/web-renderer/src/a11y/controls.tsx
|
|
41098
41132
|
import React5 from "react";
|
|
41099
41133
|
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
@@ -42833,9 +42867,142 @@ var init_richContent = __esm({
|
|
|
42833
42867
|
}
|
|
42834
42868
|
});
|
|
42835
42869
|
|
|
42870
|
+
// ../../core/web-renderer/src/pdfPageCount.ts
|
|
42871
|
+
function pdfPageCount(bytes2) {
|
|
42872
|
+
const text9 = pdfObjectSyntax(new TextDecoder("latin1").decode(bytes2));
|
|
42873
|
+
const rooted = pdfRootPageCount(text9);
|
|
42874
|
+
let scanned = null;
|
|
42875
|
+
for (const m2 of text9.matchAll(/<<((?:(?!<<|>>)[\s\S])*)>>/g)) {
|
|
42876
|
+
const dict = m2[1];
|
|
42877
|
+
if (!/\/Type\s*\/Pages(?![A-Za-z])/.test(dict)) continue;
|
|
42878
|
+
const c2 = /\/Count\s+(\d+)/.exec(dict);
|
|
42879
|
+
const n2 = c2 ? Number(c2[1]) : NaN;
|
|
42880
|
+
if (Number.isFinite(n2) && n2 > 0 && (scanned === null || n2 > scanned)) scanned = n2;
|
|
42881
|
+
}
|
|
42882
|
+
const count2 = rooted ?? scanned;
|
|
42883
|
+
if (count2 === null) return null;
|
|
42884
|
+
if (rooted !== null && scanned !== null && rooted !== scanned) return null;
|
|
42885
|
+
return count2 <= PDF_MAX_PLAUSIBLE_PAGES ? count2 : null;
|
|
42886
|
+
}
|
|
42887
|
+
function pdfObjectSyntax(text9) {
|
|
42888
|
+
const out2 = text9.split("");
|
|
42889
|
+
const blank = (from, to2) => {
|
|
42890
|
+
for (let k2 = from; k2 < to2; k2++) out2[k2] = " ";
|
|
42891
|
+
};
|
|
42892
|
+
let i2 = 0;
|
|
42893
|
+
while (i2 < text9.length) {
|
|
42894
|
+
const c2 = text9[i2];
|
|
42895
|
+
if (c2 === "%") {
|
|
42896
|
+
const eol = text9.slice(i2).search(/[\r\n]/);
|
|
42897
|
+
const end = eol < 0 ? text9.length : i2 + eol;
|
|
42898
|
+
blank(i2, end);
|
|
42899
|
+
i2 = end;
|
|
42900
|
+
} else if (c2 === "(") {
|
|
42901
|
+
let depth = 0;
|
|
42902
|
+
let j2 = i2;
|
|
42903
|
+
for (; j2 < text9.length; j2++) {
|
|
42904
|
+
const d2 = text9[j2];
|
|
42905
|
+
if (d2 === "\\") {
|
|
42906
|
+
j2++;
|
|
42907
|
+
continue;
|
|
42908
|
+
}
|
|
42909
|
+
if (d2 === "(") depth++;
|
|
42910
|
+
else if (d2 === ")" && --depth === 0) break;
|
|
42911
|
+
}
|
|
42912
|
+
blank(i2, j2 + 1);
|
|
42913
|
+
i2 = j2 + 1;
|
|
42914
|
+
} else if (c2 === "<" && text9[i2 + 1] !== "<") {
|
|
42915
|
+
const end = text9.indexOf(">", i2);
|
|
42916
|
+
const stop = end < 0 ? text9.length : end + 1;
|
|
42917
|
+
blank(i2, stop);
|
|
42918
|
+
i2 = stop;
|
|
42919
|
+
} else if (c2 === "<" && text9[i2 + 1] === "<") {
|
|
42920
|
+
i2 += 2;
|
|
42921
|
+
} else if (
|
|
42922
|
+
// The `stream` KEYWORD, not the tail of a name (`/my-stream`) or of `endstream`: preceded by
|
|
42923
|
+
// whitespace or the `>>` that closes its dictionary, and followed by CRLF or LF (PDF 32000
|
|
42924
|
+
// §7.3.8.1 — a CR alone is not allowed there).
|
|
42925
|
+
text9.startsWith("stream", i2) && /[\s>]/.test(text9[i2 - 1] ?? "") && (text9[i2 + 6] === "\n" || text9.startsWith("\r\n", i2 + 6))
|
|
42926
|
+
) {
|
|
42927
|
+
const end = text9.indexOf("endstream", i2 + 6);
|
|
42928
|
+
const stop = end < 0 ? text9.length : end;
|
|
42929
|
+
blank(i2 + 6, stop);
|
|
42930
|
+
i2 = stop + "endstream".length;
|
|
42931
|
+
} else {
|
|
42932
|
+
i2++;
|
|
42933
|
+
}
|
|
42934
|
+
}
|
|
42935
|
+
return out2.join("");
|
|
42936
|
+
}
|
|
42937
|
+
function pdfRootPageCount(syntax) {
|
|
42938
|
+
const obj4 = (n3, g2) => {
|
|
42939
|
+
const all = [...syntax.matchAll(new RegExp(`(?:^|[^0-9])${n3}\\s+${g2}\\s+obj\\b`, "g"))];
|
|
42940
|
+
const at2 = all[all.length - 1];
|
|
42941
|
+
if (!at2) return null;
|
|
42942
|
+
const end = syntax.indexOf("endobj", at2.index);
|
|
42943
|
+
return syntax.slice(at2.index, end < 0 ? void 0 : end);
|
|
42944
|
+
};
|
|
42945
|
+
const trailers = [...syntax.matchAll(/trailer\s*<<([\s\S]*?)>>/g)];
|
|
42946
|
+
const root = trailers.length ? /\/Root\s+(\d+)\s+(\d+)\s+R/.exec(trailers[trailers.length - 1][1]) : null;
|
|
42947
|
+
if (!root) return null;
|
|
42948
|
+
const catalog3 = obj4(root[1], root[2]);
|
|
42949
|
+
const pagesRef = catalog3 ? /\/Pages\s+(\d+)\s+(\d+)\s+R/.exec(catalog3) : null;
|
|
42950
|
+
if (!pagesRef) return null;
|
|
42951
|
+
const pages2 = obj4(pagesRef[1], pagesRef[2]);
|
|
42952
|
+
const c2 = pages2 ? /\/Count\s+(\d+)/.exec(pages2) : null;
|
|
42953
|
+
const n2 = c2 ? Number(c2[1]) : NaN;
|
|
42954
|
+
return Number.isFinite(n2) && n2 > 0 ? n2 : null;
|
|
42955
|
+
}
|
|
42956
|
+
var PDF_MAX_PLAUSIBLE_PAGES;
|
|
42957
|
+
var init_pdfPageCount = __esm({
|
|
42958
|
+
"../../core/web-renderer/src/pdfPageCount.ts"() {
|
|
42959
|
+
PDF_MAX_PLAUSIBLE_PAGES = 1e5;
|
|
42960
|
+
}
|
|
42961
|
+
});
|
|
42962
|
+
|
|
42963
|
+
// ../../core/web-renderer/src/pdfFetch.ts
|
|
42964
|
+
var pdfFetch_exports = {};
|
|
42965
|
+
__export(pdfFetch_exports, {
|
|
42966
|
+
fetchPdfDocument: () => fetchPdfDocument,
|
|
42967
|
+
retypeAsPdf: () => retypeAsPdf,
|
|
42968
|
+
retypeAsPdfCounted: () => retypeAsPdfCounted
|
|
42969
|
+
});
|
|
42970
|
+
async function retypeAsPdf(src, fetchImpl = fetch) {
|
|
42971
|
+
return (await retypeAsPdfCounted(src, fetchImpl))?.url ?? null;
|
|
42972
|
+
}
|
|
42973
|
+
async function retypeAsPdfCounted(src, fetchImpl = fetch) {
|
|
42974
|
+
const res = await fetchImpl(src, { credentials: "same-origin" });
|
|
42975
|
+
if (!res.ok) return null;
|
|
42976
|
+
if (/html|xml/i.test(res.headers.get("content-type") ?? "")) return null;
|
|
42977
|
+
const body = await res.blob();
|
|
42978
|
+
const pageCount = await readPageCount(body);
|
|
42979
|
+
return { url: URL.createObjectURL(body.slice(0, body.size, "application/pdf")), pageCount };
|
|
42980
|
+
}
|
|
42981
|
+
async function readPageCount(body) {
|
|
42982
|
+
return pdfPageCount(new Uint8Array(await body.arrayBuffer()));
|
|
42983
|
+
}
|
|
42984
|
+
async function fetchPdfDocument(src, fetchImpl = fetch) {
|
|
42985
|
+
try {
|
|
42986
|
+
const res = await fetchImpl(src, { credentials: "omit" });
|
|
42987
|
+
if (!res.ok) return null;
|
|
42988
|
+
if (/html|xml/i.test(res.headers.get("content-type") ?? "")) return null;
|
|
42989
|
+
const body = await res.blob();
|
|
42990
|
+
const pageCount = await readPageCount(body);
|
|
42991
|
+
return { pageCount, blob: body.slice(0, body.size, "application/pdf") };
|
|
42992
|
+
} catch {
|
|
42993
|
+
return null;
|
|
42994
|
+
}
|
|
42995
|
+
}
|
|
42996
|
+
var init_pdfFetch = __esm({
|
|
42997
|
+
"../../core/web-renderer/src/pdfFetch.ts"() {
|
|
42998
|
+
init_pdfPageCount();
|
|
42999
|
+
}
|
|
43000
|
+
});
|
|
43001
|
+
|
|
42836
43002
|
// ../../core/web-renderer/src/pdfPainter.ts
|
|
42837
|
-
async function paintPdfDocument(document2, container, width = container.clientWidth || 600, startPage = 1, zoomPercent = 100, isCurrent = () => true) {
|
|
43003
|
+
async function paintPdfDocument(document2, container, width = container.clientWidth || 600, startPage = 1, zoomPercent = 100, isCurrent = () => true, onPageCount) {
|
|
42838
43004
|
if (!isCurrent()) return document2.numPages;
|
|
43005
|
+
onPageCount?.(document2.numPages);
|
|
42839
43006
|
container.replaceChildren();
|
|
42840
43007
|
const pixelRatio = Math.max(1, Math.min(2, container.ownerDocument.defaultView?.devicePixelRatio || 1));
|
|
42841
43008
|
const zoom = Math.max(1, zoomPercent) / 100;
|
|
@@ -123458,12 +123625,27 @@ async function destroyPdfDocumentLoad(loading) {
|
|
|
123458
123625
|
} catch {
|
|
123459
123626
|
}
|
|
123460
123627
|
}
|
|
123461
|
-
function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, style, loadDocument = loadPdfDocument }) {
|
|
123628
|
+
function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, style, onPageCount, onFallback, loadDocument = loadPdfDocument }) {
|
|
123462
123629
|
const [pages2, setPages] = React8.useState(0);
|
|
123463
123630
|
const [failedRequest, setFailedRequest] = React8.useState(null);
|
|
123464
|
-
const request = JSON.stringify([src,
|
|
123631
|
+
const request = JSON.stringify([src, zoomPercent]);
|
|
123465
123632
|
const failed3 = failedRequest === request;
|
|
123466
123633
|
const containerRef = React8.useRef(null);
|
|
123634
|
+
const frameRef = React8.useRef(null);
|
|
123635
|
+
const startPageRef = React8.useRef(startPage);
|
|
123636
|
+
startPageRef.current = startPage;
|
|
123637
|
+
React8.useEffect(() => {
|
|
123638
|
+
if (failed3) onFallback?.();
|
|
123639
|
+
}, [failed3, onFallback]);
|
|
123640
|
+
React8.useEffect(() => {
|
|
123641
|
+
const frame2 = frameRef.current;
|
|
123642
|
+
const page = Math.min(pages2, Math.max(1, Math.floor(startPage ?? 1) || 1));
|
|
123643
|
+
const canvas = pages2 ? containerRef.current?.querySelector(`[data-pdf-page="${page}"]`) : null;
|
|
123644
|
+
if (!frame2 || !canvas) return;
|
|
123645
|
+
const box = frame2.getBoundingClientRect();
|
|
123646
|
+
const scale = frame2.offsetHeight > 0 && box.height > 0 ? box.height / frame2.offsetHeight : 1;
|
|
123647
|
+
frame2.scrollTop += (canvas.getBoundingClientRect().top - box.top) / scale;
|
|
123648
|
+
}, [startPage, pages2]);
|
|
123467
123649
|
React8.useEffect(() => {
|
|
123468
123650
|
let live3 = true;
|
|
123469
123651
|
let loading;
|
|
@@ -123485,7 +123667,7 @@ function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, st
|
|
|
123485
123667
|
}
|
|
123486
123668
|
loading = task;
|
|
123487
123669
|
const document2 = await task.promise;
|
|
123488
|
-
const count2 = await paintPdfDocument(document2, container, container.clientWidth || 600,
|
|
123670
|
+
const count2 = await paintPdfDocument(document2, container, container.clientWidth || 600, startPageRef.current, zoomPercent, () => live3, onPageCount);
|
|
123489
123671
|
if (live3) setPages(count2);
|
|
123490
123672
|
})().catch(() => {
|
|
123491
123673
|
if (live3) setFailedRequest(request);
|
|
@@ -123495,7 +123677,7 @@ function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, st
|
|
|
123495
123677
|
if (loading) void destroyPdfDocumentLoad(loading);
|
|
123496
123678
|
container?.replaceChildren();
|
|
123497
123679
|
};
|
|
123498
|
-
}, [src,
|
|
123680
|
+
}, [src, zoomPercent, onPageCount, loadDocument, request]);
|
|
123499
123681
|
const frame = {
|
|
123500
123682
|
width: "100%",
|
|
123501
123683
|
height: height ?? 320,
|
|
@@ -123509,7 +123691,7 @@ function PdfDocument({ src, nativeSrc, title, height, startPage, zoomPercent, st
|
|
|
123509
123691
|
if (failed3) {
|
|
123510
123692
|
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
123693
|
}
|
|
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: [
|
|
123694
|
+
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
123695
|
/* @__PURE__ */ jsx9("div", { ref: containerRef, "data-himalaya-pdf-pages": "true" }),
|
|
123514
123696
|
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
123697
|
pages2,
|
|
@@ -124474,22 +124656,12 @@ function sourceFragment(src) {
|
|
|
124474
124656
|
return "";
|
|
124475
124657
|
}
|
|
124476
124658
|
}
|
|
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
124659
|
function sourceZoomPercent(fragment) {
|
|
124483
124660
|
const value = new URLSearchParams(fragment.replace(/^#/, "")).get("zoom");
|
|
124484
124661
|
const match = value?.match(/^(\d+(?:\.\d+)?)(?:,|$)/);
|
|
124485
124662
|
const zoom = match ? Number(match[1]) : NaN;
|
|
124486
124663
|
return Number.isFinite(zoom) && zoom > 0 ? zoom : void 0;
|
|
124487
124664
|
}
|
|
124488
|
-
function fragmentWithPage(fragment, page) {
|
|
124489
|
-
const params = new URLSearchParams(fragment.replace(/^#/, ""));
|
|
124490
|
-
params.set("page", String(page));
|
|
124491
|
-
return `#${params.toString()}`;
|
|
124492
|
-
}
|
|
124493
124665
|
function cloneWithKids(el2, props, kids3) {
|
|
124494
124666
|
if (kids3 === el2.props.children) return React9.cloneElement(el2, props);
|
|
124495
124667
|
return React9.cloneElement(el2, props, ...Array.isArray(kids3) ? kids3 : [kids3]);
|
|
@@ -126510,7 +126682,7 @@ function reportUnknownComponent(ctx, pkg, type) {
|
|
|
126510
126682
|
function unknownComponentShowsDeveloperLabel(ctx) {
|
|
126511
126683
|
return ctx.debugUnknownComponents ?? ctx.previewSurface != null;
|
|
126512
126684
|
}
|
|
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;
|
|
126685
|
+
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
126686
|
var init_renderNode = __esm({
|
|
126515
126687
|
"../../core/web-renderer/src/renderNode.tsx"() {
|
|
126516
126688
|
"use strict";
|
|
@@ -126536,8 +126708,8 @@ var init_renderNode = __esm({
|
|
|
126536
126708
|
init_motionDefaults();
|
|
126537
126709
|
init_webviewFrame();
|
|
126538
126710
|
init_richContentEditor();
|
|
126539
|
-
init_mediaFieldUpload();
|
|
126540
126711
|
init_pdfSource();
|
|
126712
|
+
init_mediaFieldUpload();
|
|
126541
126713
|
init_icon_catalog_generated();
|
|
126542
126714
|
init_controls();
|
|
126543
126715
|
init_modalStack();
|
|
@@ -126550,6 +126722,7 @@ var init_renderNode = __esm({
|
|
|
126550
126722
|
init_rich_content();
|
|
126551
126723
|
init_rich_text_field();
|
|
126552
126724
|
init_richContent();
|
|
126725
|
+
loadPdfFetch = () => Promise.resolve().then(() => (init_pdfFetch(), pdfFetch_exports));
|
|
126553
126726
|
useIsomorphicLayoutEffect = typeof globalThis.document === "undefined" ? React9.useEffect : React9.useLayoutEffect;
|
|
126554
126727
|
ResponsiveGrid = ({ base, medium, expanded, initialCols, seedWidth, spacing, extra, children }) => {
|
|
126555
126728
|
const ref = React9.useRef(null);
|
|
@@ -128228,15 +128401,16 @@ var init_renderNode = __esm({
|
|
|
128228
128401
|
if (!retypeSrc) return;
|
|
128229
128402
|
let live3 = true;
|
|
128230
128403
|
let made = null;
|
|
128231
|
-
const settle = (
|
|
128404
|
+
const settle = (r2) => {
|
|
128405
|
+
const u2 = r2?.url ?? null;
|
|
128232
128406
|
made = u2;
|
|
128233
128407
|
if (!live3) {
|
|
128234
128408
|
if (u2) URL.revokeObjectURL(u2);
|
|
128235
128409
|
return;
|
|
128236
128410
|
}
|
|
128237
|
-
setRetyped({ from: retypeSrc, url: u2 });
|
|
128411
|
+
setRetyped({ from: retypeSrc, url: u2, pageCount: r2?.pageCount ?? null });
|
|
128238
128412
|
};
|
|
128239
|
-
|
|
128413
|
+
loadPdfFetch().then((m2) => m2.retypeAsPdfCounted(retypeSrc)).then(settle, () => settle(null));
|
|
128240
128414
|
return () => {
|
|
128241
128415
|
live3 = false;
|
|
128242
128416
|
if (made) URL.revokeObjectURL(made);
|
|
@@ -128244,8 +128418,40 @@ var init_renderNode = __esm({
|
|
|
128244
128418
|
};
|
|
128245
128419
|
}, [retypeSrc]);
|
|
128246
128420
|
const settled = retyped && retyped.from === retypeSrc ? retyped : null;
|
|
128421
|
+
const wantsShare = props.allowShare === true;
|
|
128422
|
+
const [fellBackFrom, setFellBackFrom] = React9.useState(null);
|
|
128423
|
+
const directFellBack = plan?.mode === "direct" && fellBackFrom === plan.src;
|
|
128424
|
+
const directSrc = plan?.mode === "direct" && (wantsShare || props.showPageControls !== false && directFellBack) ? plan.src : null;
|
|
128425
|
+
const [direct, setDirect] = React9.useState(null);
|
|
128426
|
+
React9.useEffect(() => {
|
|
128427
|
+
if (!directSrc) return;
|
|
128428
|
+
let live3 = true;
|
|
128429
|
+
let made = null;
|
|
128430
|
+
loadPdfFetch().then((m2) => m2.fetchPdfDocument(splitFragment(directSrc).base), () => null).then((doc) => {
|
|
128431
|
+
if (!live3) return;
|
|
128432
|
+
made = wantsShare && doc ? URL.createObjectURL(doc.blob) : null;
|
|
128433
|
+
setDirect({ from: directSrc, count: doc?.pageCount ?? null, blobUrl: made });
|
|
128434
|
+
});
|
|
128435
|
+
return () => {
|
|
128436
|
+
live3 = false;
|
|
128437
|
+
if (made) URL.revokeObjectURL(made);
|
|
128438
|
+
setDirect((cur) => cur?.from === directSrc ? null : cur);
|
|
128439
|
+
};
|
|
128440
|
+
}, [directSrc, wantsShare]);
|
|
128441
|
+
const directDoc = direct && direct.from === directSrc ? direct : null;
|
|
128442
|
+
const fallbackPageCount = plan?.mode === "retype" ? settled?.pageCount ?? null : directDoc?.count ?? null;
|
|
128443
|
+
const [nav, setNav] = React9.useState({ from: rawUrl, page: null, zoom: null });
|
|
128444
|
+
const view = nav.from === rawUrl ? nav : { from: rawUrl, page: null, zoom: null };
|
|
128247
128445
|
const src = plan?.mode === "direct" ? plan.src : settled?.url ?? null;
|
|
128248
|
-
const
|
|
128446
|
+
const [canvasCount, setCanvasCount] = React9.useState(null);
|
|
128447
|
+
const onPageCount = React9.useCallback((count2) => {
|
|
128448
|
+
if (!Number.isInteger(count2) || count2 < 1) return;
|
|
128449
|
+
setCanvasCount((cur) => cur?.from === src && cur.count === count2 ? cur : { from: src, count: count2 });
|
|
128450
|
+
}, [src]);
|
|
128451
|
+
const pageCount = canvasCount?.from === src ? canvasCount.count : fallbackPageCount;
|
|
128452
|
+
const onFallback = React9.useCallback(() => setFellBackFrom(src), [src]);
|
|
128453
|
+
const loading = plan?.mode === "retype" && !settled || directSrc != null && wantsShare && !directDoc && typeof window !== "undefined";
|
|
128454
|
+
const loadSrc = plan?.mode === "direct" && wantsShare ? directDoc?.blobUrl ?? src : src;
|
|
128249
128455
|
const ph = typeof props.height === "number" && props.height > 0 ? props.height : void 0;
|
|
128250
128456
|
const frame = {
|
|
128251
128457
|
width: "100%",
|
|
@@ -128279,25 +128485,83 @@ var init_renderNode = __esm({
|
|
|
128279
128485
|
}
|
|
128280
128486
|
);
|
|
128281
128487
|
}
|
|
128282
|
-
const
|
|
128283
|
-
const
|
|
128284
|
-
const
|
|
128285
|
-
const
|
|
128286
|
-
const
|
|
128287
|
-
const
|
|
128288
|
-
|
|
128289
|
-
|
|
128290
|
-
|
|
128488
|
+
const showPageControls = props.showPageControls !== false;
|
|
128489
|
+
const zoomable = props.zoomable !== false;
|
|
128490
|
+
const allowShare = props.allowShare === true;
|
|
128491
|
+
const { base, hash: ownHash } = splitFragment(src);
|
|
128492
|
+
const sourceHash = plan?.mode === "retype" ? sourceFragment(retypeSrc) : ownHash;
|
|
128493
|
+
const startPage = typeof props.startPage === "number" && props.startPage >= 1 ? Math.floor(props.startPage) : null;
|
|
128494
|
+
const initialPage = startPage != null && pageCount != null && startPage > pageCount ? 1 : startPage;
|
|
128495
|
+
const page = view.page ?? initialPage;
|
|
128496
|
+
const requestedPage = page ?? fragmentPage(sourceHash) ?? 1;
|
|
128497
|
+
const shownPage = pageCount != null ? Math.min(requestedPage, pageCount) : requestedPage;
|
|
128498
|
+
const atEnd = pageCount != null && shownPage >= pageCount;
|
|
128499
|
+
const data = base + pdfOpenFragment(sourceHash, { page, zoom: zoomable ? view.zoom : null, fitWidth: !zoomable });
|
|
128500
|
+
const label3 = typeof props.title === "string" && props.title ? props.title : "PDF document";
|
|
128501
|
+
const documentStyle = showPageControls || zoomable || allowShare ? { display: "block", width: "100%", flex: "1 1 auto", minHeight: ph ? 0 : 280, border: "none" } : frame;
|
|
128502
|
+
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(
|
|
128503
|
+
PdfDocumentCanvas,
|
|
128504
|
+
{
|
|
128505
|
+
src: loadSrc ?? src,
|
|
128506
|
+
nativeSrc: data,
|
|
128507
|
+
title: label3,
|
|
128508
|
+
height: showPageControls || zoomable || allowShare ? void 0 : ph,
|
|
128509
|
+
onPageCount,
|
|
128510
|
+
onFallback,
|
|
128511
|
+
startPage: shownPage,
|
|
128512
|
+
zoomPercent: zoomable ? view.zoom ?? sourceZoomPercent(sourceHash) : void 0,
|
|
128513
|
+
style: documentStyle
|
|
128514
|
+
}
|
|
128515
|
+
) });
|
|
128516
|
+
if (!showPageControls && !zoomable && !allowShare) return object7;
|
|
128517
|
+
const C2 = ctx.color;
|
|
128518
|
+
const go2 = (p2) => setNav({ from: rawUrl, page: Math.max(1, pageCount != null ? Math.min(p2, pageCount) : p2), zoom: view.zoom });
|
|
128519
|
+
const zoomBy = (d2) => setNav({ from: rawUrl, page: view.page, zoom: pdfZoomStep(view.zoom ?? sourceZoomPercent(sourceHash) ?? null, d2) });
|
|
128520
|
+
const btn = {
|
|
128521
|
+
border: "none",
|
|
128522
|
+
background: "none",
|
|
128523
|
+
cursor: "pointer",
|
|
128524
|
+
padding: "2px 8px",
|
|
128525
|
+
color: accentTextColor(ctx),
|
|
128526
|
+
fontSize: pxToRem(16),
|
|
128527
|
+
lineHeight: 1
|
|
128528
|
+
};
|
|
128529
|
+
const off = { ...btn, cursor: "default", color: C2("textSecondary", "#8a8a8e"), opacity: 0.5 };
|
|
128530
|
+
const fileName = rawUrl.split(/[?#]/)[0].split("/").pop() || "document.pdf";
|
|
128531
|
+
const downloadHref = plan?.mode === "retype" ? base : directDoc?.blobUrl ?? null;
|
|
128532
|
+
const openHref = base + pdfOpenFragment(sourceHash, { page: shownPage, zoom: zoomable ? view.zoom : null, viewerChrome: true });
|
|
128533
|
+
return /* @__PURE__ */ jsxs7("div", { "data-himalaya-pdf": "reader", style: { ...frame, display: "flex", flexDirection: "column", background: C2("surfaceTertiary", "#f4f4f4") }, children: [
|
|
128534
|
+
object7,
|
|
128535
|
+
/* @__PURE__ */ jsxs7(
|
|
128536
|
+
"div",
|
|
128291
128537
|
{
|
|
128292
|
-
"data-himalaya-pdf": "
|
|
128293
|
-
|
|
128294
|
-
|
|
128295
|
-
"
|
|
128296
|
-
|
|
128538
|
+
"data-himalaya-pdf-controls": "",
|
|
128539
|
+
role: "toolbar",
|
|
128540
|
+
"aria-label": "Document controls",
|
|
128541
|
+
style: { display: "flex", alignItems: "center", gap: 4, padding: "4px 8px", fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C2("textSecondary", "#636b78") },
|
|
128542
|
+
children: [
|
|
128543
|
+
showPageControls && /* @__PURE__ */ jsxs7(Fragment4, { children: [
|
|
128544
|
+
/* @__PURE__ */ jsx10("button", { type: "button", "aria-label": "Previous page", disabled: shownPage <= 1, onClick: () => go2(shownPage - 1), style: shownPage <= 1 ? off : btn, children: "\u2039" }),
|
|
128545
|
+
/* @__PURE__ */ jsx10("span", { "data-himalaya-pdf-page": shownPage, "aria-live": "polite", children: pageCount != null ? `Page ${shownPage} of ${pageCount}` : `Page ${shownPage}` }),
|
|
128546
|
+
/* @__PURE__ */ jsx10("button", { type: "button", "aria-label": "Next page", disabled: atEnd, onClick: () => go2(shownPage + 1), style: atEnd ? off : btn, children: "\u203A" })
|
|
128547
|
+
] }),
|
|
128548
|
+
/* @__PURE__ */ jsx10("span", { style: { flex: "1 1 auto" } }),
|
|
128549
|
+
zoomable && /* @__PURE__ */ jsxs7(Fragment4, { children: [
|
|
128550
|
+
/* @__PURE__ */ jsx10("button", { type: "button", "aria-label": "Zoom out", onClick: () => zoomBy(-1), style: btn, children: "\u2212" }),
|
|
128551
|
+
/* @__PURE__ */ jsx10("button", { type: "button", "aria-label": "Zoom in", onClick: () => zoomBy(1), style: btn, children: "+" })
|
|
128552
|
+
] }),
|
|
128553
|
+
allowShare && (downloadHref ? (
|
|
128554
|
+
// Bytes the page holds (a re-typed blob, or a CORS fetch): a real download.
|
|
128555
|
+
/* @__PURE__ */ jsx10("a", { href: downloadHref, download: fileName, "aria-label": "Download PDF", style: { ...btn, textDecoration: "none", fontSize: pxToRem(12) }, children: "Download" })
|
|
128556
|
+
) : (
|
|
128557
|
+
// A cross-origin document the page cannot read: `download` would be ignored, so say what
|
|
128558
|
+
// actually happens — it opens in a new tab.
|
|
128559
|
+
/* @__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" })
|
|
128560
|
+
))
|
|
128561
|
+
]
|
|
128297
128562
|
}
|
|
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 }) });
|
|
128563
|
+
)
|
|
128564
|
+
] });
|
|
128301
128565
|
});
|
|
128302
128566
|
WebViewNode = withExtras("WebViewNode", ({ props, ctx, wrap }) => {
|
|
128303
128567
|
const boundUrl = useResolvedScalar(props.url != null && isBinding(props.url) ? props.url : void 0, ctx);
|
|
@@ -131376,7 +131640,10 @@ var init_renderNode = __esm({
|
|
|
131376
131640
|
const events = Array.isArray(rawEvents) ? rawEvents : [];
|
|
131377
131641
|
const boundAnchor = useResolvedScalar(props.anchorDatePath, ctx);
|
|
131378
131642
|
const anchorRaw = props.anchorDatePath != null ? boundAnchor : props.anchorDate;
|
|
131379
|
-
const
|
|
131643
|
+
const [pagedAnchor, setPagedAnchor] = React9.useState(null);
|
|
131644
|
+
const localAnchor = pagedAnchor && Object.is(pagedAnchor.raw, anchorRaw) && pagedAnchor.path === props.anchorDatePath && pagedAnchor.mode === props.mode && pagedAnchor.provider === ctx.provider ? pagedAnchor.date : null;
|
|
131645
|
+
if (pagedAnchor && !localAnchor) setPagedAnchor(null);
|
|
131646
|
+
const anchor = localAnchor ?? (typeof anchorRaw === "string" ? parseLocalDate(anchorRaw) : null) ?? /* @__PURE__ */ new Date();
|
|
131380
131647
|
const mode = props.mode === "week" ? "week" : props.mode === "3day" ? "3day" : "day";
|
|
131381
131648
|
const firstWeekday = typeof props.firstWeekday === "number" ? (props.firstWeekday % 7 + 7) % 7 : 0;
|
|
131382
131649
|
const startHour = typeof props.startHour === "number" ? props.startHour : 0;
|
|
@@ -131413,6 +131680,7 @@ var init_renderNode = __esm({
|
|
|
131413
131680
|
const rangeStep = mode === "week" ? 7 : mode === "3day" ? 3 : 1;
|
|
131414
131681
|
const shiftRange = (deltaDays) => {
|
|
131415
131682
|
const next = new Date(anchor.getFullYear(), anchor.getMonth(), anchor.getDate() + deltaDays);
|
|
131683
|
+
setPagedAnchor({ date: next, raw: anchorRaw, path: props.anchorDatePath, mode: props.mode, provider: ctx.provider });
|
|
131416
131684
|
dispatchCalendarAction(ctx, props.onRangeChange, { anchorDate: localDayKey(next) });
|
|
131417
131685
|
};
|
|
131418
131686
|
const canPage = true;
|
|
@@ -162174,32 +162442,33 @@ var init_preview_assets_generated = __esm({
|
|
|
162174
162442
|
"../../packages/serve/src/preview-assets.generated.ts"() {
|
|
162175
162443
|
init_preview_assets_format();
|
|
162176
162444
|
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: "
|
|
162445
|
+
{ key: "assets/DashboardHost-C8q83QJ2.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2916, sha256: "144b7dc6e3662aa62ea0e8e03e9aae7762dc3dc2f63da56e8b04b1bb70db89ad" },
|
|
162446
|
+
{ key: "assets/DevDrawer-DsUG7Nml.js", contentType: "application/javascript; charset=utf-8", offset: 2924, length: 16744, sha256: "7bcc9801a17aa2ba526fb0983ea315581e3ac2d4c45f625b719df716be0cd9c0" },
|
|
162447
|
+
{ key: "assets/IdiomCompare-Cthh0ISj.js", contentType: "application/javascript; charset=utf-8", offset: 19668, length: 1892, sha256: "eab302721e7b8202f10d0c622d57b0dc28b3ab9ae3fe07b20a2563198ffd88d1" },
|
|
162448
|
+
{ key: "assets/LightboxViewer-ASOCRp41.js", contentType: "application/javascript; charset=utf-8", offset: 21560, length: 8132, sha256: "46ab57a241855a13a17f94fec2a70ce9b45c1a4c3e54801c8c679328256edb33" },
|
|
162449
|
+
{ key: "assets/PhonePreviewControl-B6cU9zp5.js", contentType: "application/javascript; charset=utf-8", offset: 29692, length: 37729, sha256: "c5550c028620913776998cf8818e8f9f794c02f5d234b7aeaf71671bf9080373" },
|
|
162450
|
+
{ key: "assets/SchemeCompare--If17_u5.js", contentType: "application/javascript; charset=utf-8", offset: 67421, length: 1824, sha256: "66285df0006380de22ced18317a59c08ba318788d73d717a321ff1e5460c1fa0" },
|
|
162451
|
+
{ key: "assets/index-CKaODCvf.js", contentType: "application/javascript; charset=utf-8", offset: 69245, length: 1280616, sha256: "6a91080524cebb84370c0fb3c04d74c99b2d704cb003a21f2e01912e7f47c0b2" },
|
|
162452
|
+
{ key: "assets/pdf-B2304dXw.js", contentType: "application/javascript; charset=utf-8", offset: 1349861, length: 488199, sha256: "b284e54724b9ac6fd9b9dbddaf42c4a564d9ea1cb8ec0d78ea5b3c132c20cb41" },
|
|
162453
|
+
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1838060, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
|
|
162454
|
+
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1838133, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
|
|
162455
|
+
{ key: "assets/pdfDocument-C5bi6q0r.js", contentType: "application/javascript; charset=utf-8", offset: 3155167, length: 3379, sha256: "ac6eff0d1c637a70fade3bd860a7dc531b1b1b4301012d3daf120b7a3ea9b7e6" },
|
|
162456
|
+
{ key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3158546, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
|
|
162457
|
+
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3160812, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
|
|
162458
|
+
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3165422, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
|
|
162459
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3654006, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
162460
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3744930, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
162461
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3835914, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
162462
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3926894, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
162463
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4017766, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
162464
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4108746, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
162465
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4217382, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
162466
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4326466, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
162467
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4435514, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
162468
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4543214, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
162469
|
+
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4631322, length: 6748, sha256: "4a92459977d7cefa1a6a7e020c3a63509737f083b3f2773557c1a5771665811a" },
|
|
162470
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 4638070, length: 4947, sha256: "8a3f524b30f25db213d2458d71a38298f4fbdcc8989bd0eee91428809bf45832" },
|
|
162471
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4643017, length: 17786, sha256: "084107ca997628c248f1b0ba3a7494744850df39fad813546ab8bdb82a6058da" }
|
|
162203
162472
|
];
|
|
162204
162473
|
}
|
|
162205
162474
|
});
|
|
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.1464.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": "3919cfeb6cc26ef641fd143cfe0395aad1e15aea098655650caa396b"
|
|
75
75
|
}
|