@embedpdf/viewer-chrome 3.0.0-next.14 → 3.0.0-next.16
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/README.md +175 -132
- package/dist/annotation-fonts-DWjVOTP0.js +80 -0
- package/dist/annotation-fonts-DWjVOTP0.js.map +1 -0
- package/dist/annotation-fonts-dpfVkhnq.cjs +91 -0
- package/dist/annotation-fonts-dpfVkhnq.cjs.map +1 -0
- package/dist/annotation-style-B3XKAyZ-.cjs +879 -0
- package/dist/annotation-style-B3XKAyZ-.cjs.map +1 -0
- package/dist/annotation-style-CXF3X47Z.js +879 -0
- package/dist/annotation-style-CXF3X47Z.js.map +1 -0
- package/dist/ar-B132r9bo.cjs +659 -0
- package/dist/ar-B132r9bo.cjs.map +1 -0
- package/dist/ar-BLWFJoA_.js +659 -0
- package/dist/ar-BLWFJoA_.js.map +1 -0
- package/dist/attachments-panel-Cxln8xos.cjs +217 -0
- package/dist/attachments-panel-Cxln8xos.cjs.map +1 -0
- package/dist/attachments-panel-H1ucRbwo.js +217 -0
- package/dist/attachments-panel-H1ucRbwo.js.map +1 -0
- package/dist/chrome.cjs +399 -242
- package/dist/chrome.cjs.map +1 -1
- package/dist/chrome.d.cts +5 -35
- package/dist/chrome.d.ts +5 -35
- package/dist/chrome.js +398 -239
- package/dist/chrome.js.map +1 -1
- package/dist/commands-BkgLP3Om.js +1348 -0
- package/dist/commands-BkgLP3Om.js.map +1 -0
- package/dist/commands-DL1gjZt7.cjs +1473 -0
- package/dist/commands-DL1gjZt7.cjs.map +1 -0
- package/dist/commands.cjs +13 -649
- package/dist/commands.d.cts +30 -3
- package/dist/commands.d.ts +30 -3
- package/dist/commands.js +2 -647
- package/dist/comments-panel-BsnWedTh.cjs +514 -0
- package/dist/comments-panel-BsnWedTh.cjs.map +1 -0
- package/dist/comments-panel-D7Eadws9.js +514 -0
- package/dist/comments-panel-D7Eadws9.js.map +1 -0
- package/dist/de-7_MvFWzN.cjs +658 -0
- package/dist/de-7_MvFWzN.cjs.map +1 -0
- package/dist/de-BUhwc9-x.js +658 -0
- package/dist/de-BUhwc9-x.js.map +1 -0
- package/dist/dialog-BIb373cg.js +55 -0
- package/dist/dialog-BIb373cg.js.map +1 -0
- package/dist/dialog-CngKTnAM.cjs +60 -0
- package/dist/dialog-CngKTnAM.cjs.map +1 -0
- package/dist/es-DgYj-1L3.cjs +658 -0
- package/dist/es-DgYj-1L3.cjs.map +1 -0
- package/dist/es-DoXTqFoO.js +658 -0
- package/dist/es-DoXTqFoO.js.map +1 -0
- package/dist/form-design-panel-CgV_5YWC.js +418 -0
- package/dist/form-design-panel-CgV_5YWC.js.map +1 -0
- package/dist/form-design-panel-D0FdmWXW.cjs +418 -0
- package/dist/form-design-panel-D0FdmWXW.cjs.map +1 -0
- package/dist/fr-B-8NDhBA.js +658 -0
- package/dist/fr-B-8NDhBA.js.map +1 -0
- package/dist/fr-C856dmQJ.cjs +658 -0
- package/dist/fr-C856dmQJ.cjs.map +1 -0
- package/dist/he-BFTeNc4t.cjs +659 -0
- package/dist/he-BFTeNc4t.cjs.map +1 -0
- package/dist/he-Dlh0fNXM.js +659 -0
- package/dist/he-Dlh0fNXM.js.map +1 -0
- package/dist/icons-1UfLUZ_y.cjs +1029 -0
- package/dist/icons-1UfLUZ_y.cjs.map +1 -0
- package/dist/icons-7dB0Y1ct.js +875 -0
- package/dist/icons-7dB0Y1ct.js.map +1 -0
- package/dist/index.cjs +3651 -5447
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +646 -144
- package/dist/index.d.ts +646 -144
- package/dist/index.js +3618 -5368
- package/dist/index.js.map +1 -1
- package/dist/it-Bef-2Yxq.cjs +658 -0
- package/dist/it-Bef-2Yxq.cjs.map +1 -0
- package/dist/it-BkirG7ol.js +658 -0
- package/dist/it-BkirG7ol.js.map +1 -0
- package/dist/ja-CGEjCE-s.js +658 -0
- package/dist/ja-CGEjCE-s.js.map +1 -0
- package/dist/ja-DNw2zqSD.cjs +658 -0
- package/dist/ja-DNw2zqSD.cjs.map +1 -0
- package/dist/ko-CTkl5vMh.js +658 -0
- package/dist/ko-CTkl5vMh.js.map +1 -0
- package/dist/ko-YHzeBqP6.cjs +658 -0
- package/dist/ko-YHzeBqP6.cjs.map +1 -0
- package/dist/labels-BiM9wp9K.cjs +21 -0
- package/dist/labels-BiM9wp9K.cjs.map +1 -0
- package/dist/labels-C6_i87Oj.js +16 -0
- package/dist/labels-C6_i87Oj.js.map +1 -0
- package/dist/link-editor-CAS7MZM2.cjs +125 -0
- package/dist/link-editor-CAS7MZM2.cjs.map +1 -0
- package/dist/link-editor-CkwtqRvb.js +125 -0
- package/dist/link-editor-CkwtqRvb.js.map +1 -0
- package/dist/measurement-CQdbnIrn.js +325 -0
- package/dist/measurement-CQdbnIrn.js.map +1 -0
- package/dist/measurement-Cxv1Ahxx.cjs +326 -0
- package/dist/measurement-Cxv1Ahxx.cjs.map +1 -0
- package/dist/nl-BjkbaLq3.cjs +658 -0
- package/dist/nl-BjkbaLq3.cjs.map +1 -0
- package/dist/nl-Dya4sR8_.js +658 -0
- package/dist/nl-Dya4sR8_.js.map +1 -0
- package/dist/outline-panel-BpGtBdj0.cjs +707 -0
- package/dist/outline-panel-BpGtBdj0.cjs.map +1 -0
- package/dist/outline-panel-DO5_REYw.js +707 -0
- package/dist/outline-panel-DO5_REYw.js.map +1 -0
- package/dist/outline-properties-BCa2cc0t.js +330 -0
- package/dist/outline-properties-BCa2cc0t.js.map +1 -0
- package/dist/outline-properties-DT3FIxCw.cjs +330 -0
- package/dist/outline-properties-DT3FIxCw.cjs.map +1 -0
- package/dist/pl-CKKdVnpZ.cjs +658 -0
- package/dist/pl-CKKdVnpZ.cjs.map +1 -0
- package/dist/pl-DA9b5NVg.js +658 -0
- package/dist/pl-DA9b5NVg.js.map +1 -0
- package/dist/print-dialog-BqIrHCBh.cjs +276 -0
- package/dist/print-dialog-BqIrHCBh.cjs.map +1 -0
- package/dist/print-dialog-DvcI2m2_.js +276 -0
- package/dist/print-dialog-DvcI2m2_.js.map +1 -0
- package/dist/pt-DLcszlzi.cjs +658 -0
- package/dist/pt-DLcszlzi.cjs.map +1 -0
- package/dist/pt-Nm8yyjbX.js +658 -0
- package/dist/pt-Nm8yyjbX.js.map +1 -0
- package/dist/redact-confirm-C6EiK8yN.cjs +83 -0
- package/dist/redact-confirm-C6EiK8yN.cjs.map +1 -0
- package/dist/redact-confirm-CKuv9iN_.js +83 -0
- package/dist/redact-confirm-CKuv9iN_.js.map +1 -0
- package/dist/redaction-panel-CgNZ-pQk.js +96 -0
- package/dist/redaction-panel-CgNZ-pQk.js.map +1 -0
- package/dist/redaction-panel-ZhX0dlMi.cjs +96 -0
- package/dist/redaction-panel-ZhX0dlMi.cjs.map +1 -0
- package/dist/search-panel-BE4xzWlm.js +249 -0
- package/dist/search-panel-BE4xzWlm.js.map +1 -0
- package/dist/search-panel-wcbTNG1z.cjs +249 -0
- package/dist/search-panel-wcbTNG1z.cjs.map +1 -0
- package/dist/sheet-DTBFiwde.cjs +461 -0
- package/dist/sheet-DTBFiwde.cjs.map +1 -0
- package/dist/sheet-DyjKfAq0.js +378 -0
- package/dist/sheet-DyjKfAq0.js.map +1 -0
- package/dist/sign-dialog-D5WGx-Yn.cjs +155 -0
- package/dist/sign-dialog-D5WGx-Yn.cjs.map +1 -0
- package/dist/sign-dialog-DerNe8qT.js +155 -0
- package/dist/sign-dialog-DerNe8qT.js.map +1 -0
- package/dist/signature-inspector-Bz6TAfZM.cjs +160 -0
- package/dist/signature-inspector-Bz6TAfZM.cjs.map +1 -0
- package/dist/signature-inspector-CsGr9EBk.js +160 -0
- package/dist/signature-inspector-CsGr9EBk.js.map +1 -0
- package/dist/signature-maker-D_YfBXLn.cjs +393 -0
- package/dist/signature-maker-D_YfBXLn.cjs.map +1 -0
- package/dist/signature-maker-Dnth4rV4.js +393 -0
- package/dist/signature-maker-Dnth4rV4.js.map +1 -0
- package/dist/signatures-panel-Ci_LaI1C.cjs +294 -0
- package/dist/signatures-panel-Ci_LaI1C.cjs.map +1 -0
- package/dist/signatures-panel-DZ9ywrjz.js +294 -0
- package/dist/signatures-panel-DZ9ywrjz.js.map +1 -0
- package/dist/stamp-store-BHvRs-Do.cjs +147 -0
- package/dist/stamp-store-BHvRs-Do.cjs.map +1 -0
- package/dist/stamp-store-WuF-L3Jj.js +112 -0
- package/dist/stamp-store-WuF-L3Jj.js.map +1 -0
- package/dist/stamps-panel-BrczStaz.js +225 -0
- package/dist/stamps-panel-BrczStaz.js.map +1 -0
- package/dist/stamps-panel-Cv9nJBwx.cjs +225 -0
- package/dist/stamps-panel-Cv9nJBwx.cjs.map +1 -0
- package/dist/theme-Be0OZokZ.js +97 -0
- package/dist/theme-Be0OZokZ.js.map +1 -0
- package/dist/theme-FR26JI3r.cjs +126 -0
- package/dist/theme-FR26JI3r.cjs.map +1 -0
- package/dist/toolbar-DF361xWY.js +1565 -0
- package/dist/toolbar-DF361xWY.js.map +1 -0
- package/dist/toolbar-ddvpsvTb.cjs +1660 -0
- package/dist/toolbar-ddvpsvTb.cjs.map +1 -0
- package/dist/zh-cn-BMPPkLpL.js +658 -0
- package/dist/zh-cn-BMPPkLpL.js.map +1 -0
- package/dist/zh-cn-CZOO3p4H.cjs +658 -0
- package/dist/zh-cn-CZOO3p4H.cjs.map +1 -0
- package/package.json +6 -4
- package/src/styles.css +161 -89
- package/dist/commands.cjs.map +0 -1
- package/dist/commands.js.map +0 -1
- package/dist/es-BXLlBo2b.cjs +0 -321
- package/dist/es-BXLlBo2b.cjs.map +0 -1
- package/dist/es-CLgTsFDS.js +0 -321
- package/dist/es-CLgTsFDS.js.map +0 -1
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
const require_commands = require("./commands-DL1gjZt7.cjs");
|
|
2
|
+
const require_dialog = require("./dialog-CngKTnAM.cjs");
|
|
3
|
+
let react = require("react");
|
|
4
|
+
let _embedpdf_react_runtime = require("@embedpdf/react/runtime");
|
|
5
|
+
let _embedpdf_react_outline = require("@embedpdf/react/outline");
|
|
6
|
+
let _embedpdf_react_i18n = require("@embedpdf/react/i18n");
|
|
7
|
+
let _embedpdf_react_shell = require("@embedpdf/react/shell");
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
|
+
//#region src/ui/outline-properties.tsx
|
|
10
|
+
/**
|
|
11
|
+
* An outline item's properties, which `outline:properties` opens for the selected item: its
|
|
12
|
+
* title, the colour and style it is drawn in, whether it is open when the document opens, and
|
|
13
|
+
* where it goes. Save writes what changed as one change; Escape or Cancel keeps the item as it
|
|
14
|
+
* was. A target the viewer doesn't write (a script, another file, an app) shows, and stays.
|
|
15
|
+
*/
|
|
16
|
+
/** The colours offered for a title, after "none": the viewer's own text colour. */
|
|
17
|
+
const SWATCHES = [
|
|
18
|
+
"#000000",
|
|
19
|
+
"#c92a2a",
|
|
20
|
+
"#e8590c",
|
|
21
|
+
"#2b8a3e",
|
|
22
|
+
"#1864ab",
|
|
23
|
+
"#6741d9",
|
|
24
|
+
"#868e96"
|
|
25
|
+
];
|
|
26
|
+
/** The standard page verbs a target can name. */
|
|
27
|
+
const PAGE_VERBS = [
|
|
28
|
+
"NextPage",
|
|
29
|
+
"PrevPage",
|
|
30
|
+
"FirstPage",
|
|
31
|
+
"LastPage"
|
|
32
|
+
];
|
|
33
|
+
const PAGE_VERB_KEYS = {
|
|
34
|
+
NextPage: "commands.page.next",
|
|
35
|
+
PrevPage: "commands.page.previous",
|
|
36
|
+
FirstPage: "commands.page.first",
|
|
37
|
+
LastPage: "commands.page.last"
|
|
38
|
+
};
|
|
39
|
+
function OutlinePropertiesDialog() {
|
|
40
|
+
const surface = (0, _embedpdf_react_shell.useSurface)(require_commands.OUTLINE_PROPERTIES_DIALOG);
|
|
41
|
+
const outline = (0, _embedpdf_react_runtime.useOptionalCapability)(_embedpdf_react_outline.OutlineToken);
|
|
42
|
+
const number = surface.props.item;
|
|
43
|
+
const item = outline && number !== void 0 ? outline.get({
|
|
44
|
+
kind: "objectNumber",
|
|
45
|
+
objectNumber: number
|
|
46
|
+
}) : null;
|
|
47
|
+
if (!surface.isOpen || !outline || !item) return null;
|
|
48
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PropertiesForm, {
|
|
49
|
+
outline,
|
|
50
|
+
item,
|
|
51
|
+
hasChildren: outline.getChildren(item.ref).length > 0,
|
|
52
|
+
onClose: surface.close
|
|
53
|
+
}, number);
|
|
54
|
+
}
|
|
55
|
+
function PropertiesForm({ outline, item, hasChildren, onClose }) {
|
|
56
|
+
const t = (0, _embedpdf_react_i18n.useT)();
|
|
57
|
+
const kernel = (0, _embedpdf_react_runtime.useKernel)();
|
|
58
|
+
const titleId = (0, react.useId)();
|
|
59
|
+
const target = item.target;
|
|
60
|
+
const pageIndexOf = (page) => kernel.documents.getPage(page)?.index ?? 0;
|
|
61
|
+
const [title, setTitle] = (0, react.useState)(item.title);
|
|
62
|
+
const [color, setColor] = (0, react.useState)(item.color);
|
|
63
|
+
const [bold, setBold] = (0, react.useState)(item.bold);
|
|
64
|
+
const [italic, setItalic] = (0, react.useState)(item.italic);
|
|
65
|
+
const [open, setOpen] = (0, react.useState)(item.open);
|
|
66
|
+
const [choice, setChoice] = (0, react.useState)(() => {
|
|
67
|
+
if (!target) return "none";
|
|
68
|
+
if (target.kind === "goto") return "page";
|
|
69
|
+
if (target.kind === "uri") return "uri";
|
|
70
|
+
if (target.kind === "named" && PAGE_VERBS.includes(target.name)) return "named";
|
|
71
|
+
return "kept";
|
|
72
|
+
});
|
|
73
|
+
const [page, setPage] = (0, react.useState)(() => String(target?.kind === "goto" ? pageIndexOf(target.destination.page) + 1 : 1));
|
|
74
|
+
const initialFit = target?.kind === "goto" && (target.destination.kind === "fit" || target.destination.kind === "fitH") ? target.destination.kind : "kept";
|
|
75
|
+
const [fit, setFit] = (0, react.useState)(initialFit);
|
|
76
|
+
const [uri, setUri] = (0, react.useState)(target?.kind === "uri" ? target.uri : "");
|
|
77
|
+
const [verb, setVerb] = (0, react.useState)(target?.kind === "named" && PAGE_VERBS.includes(target.name) ? target.name : "NextPage");
|
|
78
|
+
/** The target the form says, or `undefined` to leave the item's as it is. */
|
|
79
|
+
const targetOf = () => {
|
|
80
|
+
switch (choice) {
|
|
81
|
+
case "none": return target ? null : void 0;
|
|
82
|
+
case "view": return outline.getCurrentViewTarget() ?? void 0;
|
|
83
|
+
case "page": {
|
|
84
|
+
const pageInfo = kernel.documents.getPage(Math.max(0, Number(page) - 1));
|
|
85
|
+
if (!pageInfo) return void 0;
|
|
86
|
+
if (target?.kind === "goto" && pageIndexOf(target.destination.page) === pageInfo.index && fit === initialFit) return;
|
|
87
|
+
return {
|
|
88
|
+
kind: "goto",
|
|
89
|
+
destination: fit === "fitH" ? {
|
|
90
|
+
kind: "fitH",
|
|
91
|
+
page: pageInfo.ref,
|
|
92
|
+
y: 0
|
|
93
|
+
} : {
|
|
94
|
+
kind: "fit",
|
|
95
|
+
page: pageInfo.ref
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
case "uri": {
|
|
100
|
+
const trimmed = uri.trim();
|
|
101
|
+
if (!trimmed || target?.kind === "uri" && target.uri === trimmed) return void 0;
|
|
102
|
+
return {
|
|
103
|
+
kind: "uri",
|
|
104
|
+
uri: trimmed
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
case "named": return target?.kind === "named" && target.name === verb ? void 0 : {
|
|
108
|
+
kind: "named",
|
|
109
|
+
name: verb
|
|
110
|
+
};
|
|
111
|
+
case "kept": return;
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
const save = () => {
|
|
115
|
+
const patch = {
|
|
116
|
+
...title !== item.title ? { title } : {},
|
|
117
|
+
...color !== item.color ? { color } : {},
|
|
118
|
+
...bold !== item.bold ? { bold } : {},
|
|
119
|
+
...italic !== item.italic ? { italic } : {},
|
|
120
|
+
...hasChildren && open !== item.open ? { open } : {}
|
|
121
|
+
};
|
|
122
|
+
const nextTarget = targetOf();
|
|
123
|
+
if (nextTarget !== void 0) patch.target = nextTarget;
|
|
124
|
+
if (Object.keys(patch).length > 0) outline.update(item.ref, patch).catch(() => {});
|
|
125
|
+
onClose();
|
|
126
|
+
};
|
|
127
|
+
const field = "border-border bg-surface text-fg focus:border-accent w-full rounded border px-2.5 py-1.5 text-sm outline-none";
|
|
128
|
+
const label = "text-fg-secondary mb-1 block text-xs font-medium";
|
|
129
|
+
const check = "text-fg-secondary flex items-center gap-2 text-sm";
|
|
130
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_dialog.Dialog, {
|
|
131
|
+
labelledBy: titleId,
|
|
132
|
+
onClose,
|
|
133
|
+
className: "border-border bg-surface w-96 max-w-[calc(100vw-2rem)] rounded-lg border p-4 shadow-xl",
|
|
134
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("form", {
|
|
135
|
+
onSubmit: (event) => {
|
|
136
|
+
event.preventDefault();
|
|
137
|
+
save();
|
|
138
|
+
},
|
|
139
|
+
className: "flex flex-col gap-3",
|
|
140
|
+
children: [
|
|
141
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
142
|
+
id: titleId,
|
|
143
|
+
className: "text-fg text-base font-semibold",
|
|
144
|
+
children: t("outline.properties.title")
|
|
145
|
+
}),
|
|
146
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
147
|
+
className: label,
|
|
148
|
+
children: t("outline.properties.name")
|
|
149
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
150
|
+
type: "text",
|
|
151
|
+
value: title,
|
|
152
|
+
maxLength: 32767,
|
|
153
|
+
onChange: (event) => setTitle(event.target.value),
|
|
154
|
+
className: field
|
|
155
|
+
})] }),
|
|
156
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", {
|
|
157
|
+
className: label,
|
|
158
|
+
children: t("outline.properties.color")
|
|
159
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
160
|
+
className: "flex flex-wrap items-center gap-1.5",
|
|
161
|
+
children: [
|
|
162
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
163
|
+
type: "button",
|
|
164
|
+
"aria-pressed": color === null,
|
|
165
|
+
onClick: () => setColor(null),
|
|
166
|
+
className: `border-border text-fg rounded border px-2 py-0.5 text-xs ${color === null ? "ring-accent ring-2" : ""}`,
|
|
167
|
+
children: t("outline.properties.noColor")
|
|
168
|
+
}),
|
|
169
|
+
SWATCHES.map((swatch) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
170
|
+
type: "button",
|
|
171
|
+
"aria-label": swatch,
|
|
172
|
+
"aria-pressed": color === swatch,
|
|
173
|
+
onClick: () => setColor(swatch),
|
|
174
|
+
className: `border-border h-6 w-6 rounded-full border ${color === swatch ? "ring-accent ring-2 ring-offset-1" : ""}`,
|
|
175
|
+
style: { background: swatch }
|
|
176
|
+
}, swatch)),
|
|
177
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
178
|
+
type: "color",
|
|
179
|
+
"aria-label": t("outline.properties.customColor"),
|
|
180
|
+
value: color ?? "#000000",
|
|
181
|
+
onChange: (event) => setColor(event.target.value),
|
|
182
|
+
className: "h-6 w-8 cursor-pointer rounded border-0 bg-transparent p-0"
|
|
183
|
+
})
|
|
184
|
+
]
|
|
185
|
+
})] }),
|
|
186
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
187
|
+
className: "flex gap-4",
|
|
188
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
189
|
+
className: check,
|
|
190
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
191
|
+
type: "checkbox",
|
|
192
|
+
checked: bold,
|
|
193
|
+
onChange: (event) => setBold(event.target.checked)
|
|
194
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
195
|
+
className: "font-semibold",
|
|
196
|
+
children: t("outline.properties.bold")
|
|
197
|
+
})]
|
|
198
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
199
|
+
className: check,
|
|
200
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
201
|
+
type: "checkbox",
|
|
202
|
+
checked: italic,
|
|
203
|
+
onChange: (event) => setItalic(event.target.checked)
|
|
204
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
205
|
+
className: "italic",
|
|
206
|
+
children: t("outline.properties.italic")
|
|
207
|
+
})]
|
|
208
|
+
})]
|
|
209
|
+
}),
|
|
210
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
211
|
+
className: `${check} ${hasChildren ? "" : "opacity-50"}`,
|
|
212
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
213
|
+
type: "checkbox",
|
|
214
|
+
disabled: !hasChildren,
|
|
215
|
+
checked: hasChildren && open,
|
|
216
|
+
onChange: (event) => setOpen(event.target.checked)
|
|
217
|
+
}), t("outline.properties.open")]
|
|
218
|
+
}),
|
|
219
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
220
|
+
className: "flex flex-col gap-2",
|
|
221
|
+
children: [
|
|
222
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", {
|
|
223
|
+
className: label,
|
|
224
|
+
children: t("outline.properties.target")
|
|
225
|
+
}),
|
|
226
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
227
|
+
value: choice,
|
|
228
|
+
onChange: (event) => setChoice(event.target.value),
|
|
229
|
+
className: field,
|
|
230
|
+
children: [
|
|
231
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
232
|
+
value: "none",
|
|
233
|
+
children: t("outline.properties.targetNone")
|
|
234
|
+
}),
|
|
235
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
236
|
+
value: "view",
|
|
237
|
+
children: t("outline.properties.targetView")
|
|
238
|
+
}),
|
|
239
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
240
|
+
value: "page",
|
|
241
|
+
children: t("linkEditor.page")
|
|
242
|
+
}),
|
|
243
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
244
|
+
value: "uri",
|
|
245
|
+
children: t("linkEditor.url")
|
|
246
|
+
}),
|
|
247
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
248
|
+
value: "named",
|
|
249
|
+
children: t("outline.properties.targetNamed")
|
|
250
|
+
}),
|
|
251
|
+
choice === "kept" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
252
|
+
value: "kept",
|
|
253
|
+
children: t("outline.properties.targetKept")
|
|
254
|
+
})
|
|
255
|
+
]
|
|
256
|
+
}),
|
|
257
|
+
choice === "page" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
258
|
+
className: "flex gap-2",
|
|
259
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
260
|
+
type: "number",
|
|
261
|
+
min: 1,
|
|
262
|
+
value: page,
|
|
263
|
+
"aria-label": t("linkEditor.pagePlaceholder"),
|
|
264
|
+
onChange: (event) => setPage(event.target.value),
|
|
265
|
+
className: `${field} w-24`
|
|
266
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
267
|
+
value: fit,
|
|
268
|
+
"aria-label": t("outline.properties.fit"),
|
|
269
|
+
onChange: (event) => setFit(event.target.value),
|
|
270
|
+
className: field,
|
|
271
|
+
children: [
|
|
272
|
+
initialFit === "kept" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
273
|
+
value: "kept",
|
|
274
|
+
children: t("outline.properties.fitKept")
|
|
275
|
+
}),
|
|
276
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
277
|
+
value: "fit",
|
|
278
|
+
children: t("commands.zoom.fitPage")
|
|
279
|
+
}),
|
|
280
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
281
|
+
value: "fitH",
|
|
282
|
+
children: t("commands.zoom.fitWidth")
|
|
283
|
+
})
|
|
284
|
+
]
|
|
285
|
+
})]
|
|
286
|
+
}),
|
|
287
|
+
choice === "uri" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
288
|
+
type: "url",
|
|
289
|
+
value: uri,
|
|
290
|
+
placeholder: t("linkEditor.urlPlaceholder"),
|
|
291
|
+
onChange: (event) => setUri(event.target.value),
|
|
292
|
+
className: field
|
|
293
|
+
}),
|
|
294
|
+
choice === "named" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
|
|
295
|
+
value: verb,
|
|
296
|
+
"aria-label": t("outline.properties.targetNamed"),
|
|
297
|
+
onChange: (event) => setVerb(event.target.value),
|
|
298
|
+
className: field,
|
|
299
|
+
children: PAGE_VERBS.map((name) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
300
|
+
value: name,
|
|
301
|
+
children: t(PAGE_VERB_KEYS[name])
|
|
302
|
+
}, name))
|
|
303
|
+
}),
|
|
304
|
+
choice === "kept" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
305
|
+
className: "text-fg-muted text-xs",
|
|
306
|
+
children: t("outline.properties.keptNote")
|
|
307
|
+
})
|
|
308
|
+
]
|
|
309
|
+
}),
|
|
310
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
311
|
+
className: "mt-1 flex justify-end gap-2",
|
|
312
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
313
|
+
type: "button",
|
|
314
|
+
onClick: onClose,
|
|
315
|
+
className: "border-border text-fg hover:bg-hover rounded border px-3 py-1.5 text-sm",
|
|
316
|
+
children: t("outline.properties.cancel")
|
|
317
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
318
|
+
type: "submit",
|
|
319
|
+
className: "bg-accent text-on-accent rounded px-3 py-1.5 text-sm font-medium",
|
|
320
|
+
children: t("outline.properties.save")
|
|
321
|
+
})]
|
|
322
|
+
})
|
|
323
|
+
]
|
|
324
|
+
})
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
//#endregion
|
|
328
|
+
exports.OutlinePropertiesDialog = OutlinePropertiesDialog;
|
|
329
|
+
|
|
330
|
+
//# sourceMappingURL=outline-properties-DT3FIxCw.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outline-properties-DT3FIxCw.cjs","names":["OUTLINE_PROPERTIES_DIALOG","OutlineToken","Dialog"],"sources":["../src/ui/outline-properties.tsx"],"sourcesContent":["/**\n * An outline item's properties, which `outline:properties` opens for the selected item: its\n * title, the colour and style it is drawn in, whether it is open when the document opens, and\n * where it goes. Save writes what changed as one change; Escape or Cancel keeps the item as it\n * was. A target the viewer doesn't write (a script, another file, an app) shows, and stays.\n */\nimport { useT } from '@embedpdf/react/i18n';\nimport {\n OutlineToken,\n type OutlineCapability,\n type OutlineItem,\n type OutlineItemPatch,\n} from '@embedpdf/react/outline';\nimport { useKernel, useOptionalCapability } from '@embedpdf/react/runtime';\nimport { useSurface } from '@embedpdf/react/shell';\nimport { useId, useState } from 'react';\n\nimport { Dialog } from './dialog';\nimport { OUTLINE_PROPERTIES_DIALOG } from '../config/outline';\n\n/** The colours offered for a title, after \"none\": the viewer's own text colour. */\nconst SWATCHES = ['#000000', '#c92a2a', '#e8590c', '#2b8a3e', '#1864ab', '#6741d9', '#868e96'];\n\n/** The standard page verbs a target can name. */\nconst PAGE_VERBS = ['NextPage', 'PrevPage', 'FirstPage', 'LastPage'] as const;\ntype PageVerb = (typeof PAGE_VERBS)[number];\nconst PAGE_VERB_KEYS: Record<PageVerb, string> = {\n NextPage: 'commands.page.next',\n PrevPage: 'commands.page.previous',\n FirstPage: 'commands.page.first',\n LastPage: 'commands.page.last',\n};\n\ntype TargetChoice = 'none' | 'view' | 'page' | 'uri' | 'named' | 'kept';\ntype Fit = 'fit' | 'fitH' | 'kept';\n\nexport function OutlinePropertiesDialog() {\n const surface = useSurface(OUTLINE_PROPERTIES_DIALOG);\n const outline = useOptionalCapability(OutlineToken);\n const number = (surface.props as { item?: number }).item;\n const item =\n outline && number !== undefined\n ? outline.get({ kind: 'objectNumber', objectNumber: number })\n : null;\n if (!surface.isOpen || !outline || !item) return null;\n return (\n <PropertiesForm\n key={number}\n outline={outline}\n item={item}\n hasChildren={outline.getChildren(item.ref).length > 0}\n onClose={surface.close}\n />\n );\n}\n\nfunction PropertiesForm({\n outline,\n item,\n hasChildren,\n onClose,\n}: {\n outline: OutlineCapability;\n item: OutlineItem;\n hasChildren: boolean;\n onClose: () => void;\n}) {\n const t = useT();\n const kernel = useKernel();\n const titleId = useId();\n const target = item.target;\n const pageIndexOf = (page: { kind: 'objectNumber'; objectNumber: number }) =>\n kernel.documents.getPage(page)?.index ?? 0;\n\n const [title, setTitle] = useState(item.title);\n const [color, setColor] = useState<string | null>(item.color);\n const [bold, setBold] = useState(item.bold);\n const [italic, setItalic] = useState(item.italic);\n const [open, setOpen] = useState(item.open);\n const [choice, setChoice] = useState<TargetChoice>(() => {\n if (!target) return 'none';\n if (target.kind === 'goto') return 'page';\n if (target.kind === 'uri') return 'uri';\n if (target.kind === 'named' && (PAGE_VERBS as readonly string[]).includes(target.name)) {\n return 'named';\n }\n return 'kept';\n });\n const [page, setPage] = useState(() =>\n String(target?.kind === 'goto' ? pageIndexOf(target.destination.page) + 1 : 1),\n );\n // A destination that is neither of the two fits (a spot on the page) is offered as it is.\n const initialFit: Fit =\n target?.kind === 'goto' &&\n (target.destination.kind === 'fit' || target.destination.kind === 'fitH')\n ? target.destination.kind\n : 'kept';\n const [fit, setFit] = useState<Fit>(initialFit);\n const [uri, setUri] = useState(target?.kind === 'uri' ? target.uri : '');\n const [verb, setVerb] = useState<PageVerb>(\n target?.kind === 'named' && (PAGE_VERBS as readonly string[]).includes(target.name)\n ? (target.name as PageVerb)\n : 'NextPage',\n );\n\n /** The target the form says, or `undefined` to leave the item's as it is. */\n const targetOf = (): OutlineItemPatch['target'] | undefined => {\n switch (choice) {\n case 'none':\n return target ? null : undefined;\n case 'view':\n return outline.getCurrentViewTarget() ?? undefined;\n case 'page': {\n const pageInfo = kernel.documents.getPage(Math.max(0, Number(page) - 1));\n if (!pageInfo) return undefined;\n // The page and fit the item already has keep the exact spot it goes to.\n if (\n target?.kind === 'goto' &&\n pageIndexOf(target.destination.page) === pageInfo.index &&\n fit === initialFit\n ) {\n return undefined;\n }\n return {\n kind: 'goto',\n destination:\n fit === 'fitH'\n ? { kind: 'fitH', page: pageInfo.ref, y: 0 }\n : { kind: 'fit', page: pageInfo.ref },\n };\n }\n case 'uri': {\n const trimmed = uri.trim();\n if (!trimmed || (target?.kind === 'uri' && target.uri === trimmed)) return undefined;\n return { kind: 'uri', uri: trimmed };\n }\n case 'named':\n return target?.kind === 'named' && target.name === verb\n ? undefined\n : { kind: 'named', name: verb };\n case 'kept':\n return undefined;\n }\n };\n\n const save = () => {\n const patch: OutlineItemPatch = {\n ...(title !== item.title ? { title } : {}),\n ...(color !== item.color ? { color } : {}),\n ...(bold !== item.bold ? { bold } : {}),\n ...(italic !== item.italic ? { italic } : {}),\n ...(hasChildren && open !== item.open ? { open } : {}),\n };\n const nextTarget = targetOf();\n if (nextTarget !== undefined) patch.target = nextTarget;\n if (Object.keys(patch).length > 0) void outline.update(item.ref, patch).catch(() => {});\n onClose();\n };\n\n const field =\n 'border-border bg-surface text-fg focus:border-accent w-full rounded border px-2.5 py-1.5 text-sm outline-none';\n const label = 'text-fg-secondary mb-1 block text-xs font-medium';\n const check = 'text-fg-secondary flex items-center gap-2 text-sm';\n\n return (\n <Dialog\n labelledBy={titleId}\n onClose={onClose}\n className=\"border-border bg-surface w-96 max-w-[calc(100vw-2rem)] rounded-lg border p-4 shadow-xl\"\n >\n <form\n onSubmit={(event) => {\n event.preventDefault();\n save();\n }}\n className=\"flex flex-col gap-3\"\n >\n <h2 id={titleId} className=\"text-fg text-base font-semibold\">\n {t('outline.properties.title')}\n </h2>\n\n <label>\n <span className={label}>{t('outline.properties.name')}</span>\n <input\n type=\"text\"\n value={title}\n maxLength={32_767}\n onChange={(event) => setTitle(event.target.value)}\n className={field}\n />\n </label>\n\n <fieldset>\n <legend className={label}>{t('outline.properties.color')}</legend>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <button\n type=\"button\"\n aria-pressed={color === null}\n onClick={() => setColor(null)}\n className={`border-border text-fg rounded border px-2 py-0.5 text-xs ${\n color === null ? 'ring-accent ring-2' : ''\n }`}\n >\n {t('outline.properties.noColor')}\n </button>\n {SWATCHES.map((swatch) => (\n <button\n key={swatch}\n type=\"button\"\n aria-label={swatch}\n aria-pressed={color === swatch}\n onClick={() => setColor(swatch)}\n className={`border-border h-6 w-6 rounded-full border ${\n color === swatch ? 'ring-accent ring-2 ring-offset-1' : ''\n }`}\n style={{ background: swatch }}\n />\n ))}\n <input\n type=\"color\"\n aria-label={t('outline.properties.customColor')}\n value={color ?? '#000000'}\n onChange={(event) => setColor(event.target.value)}\n className=\"h-6 w-8 cursor-pointer rounded border-0 bg-transparent p-0\"\n />\n </div>\n </fieldset>\n\n <div className=\"flex gap-4\">\n <label className={check}>\n <input\n type=\"checkbox\"\n checked={bold}\n onChange={(event) => setBold(event.target.checked)}\n />\n <span className=\"font-semibold\">{t('outline.properties.bold')}</span>\n </label>\n <label className={check}>\n <input\n type=\"checkbox\"\n checked={italic}\n onChange={(event) => setItalic(event.target.checked)}\n />\n <span className=\"italic\">{t('outline.properties.italic')}</span>\n </label>\n </div>\n\n <label className={`${check} ${hasChildren ? '' : 'opacity-50'}`}>\n <input\n type=\"checkbox\"\n disabled={!hasChildren}\n checked={hasChildren && open}\n onChange={(event) => setOpen(event.target.checked)}\n />\n {t('outline.properties.open')}\n </label>\n\n <fieldset className=\"flex flex-col gap-2\">\n <legend className={label}>{t('outline.properties.target')}</legend>\n <select\n value={choice}\n onChange={(event) => setChoice(event.target.value as TargetChoice)}\n className={field}\n >\n <option value=\"none\">{t('outline.properties.targetNone')}</option>\n <option value=\"view\">{t('outline.properties.targetView')}</option>\n <option value=\"page\">{t('linkEditor.page')}</option>\n <option value=\"uri\">{t('linkEditor.url')}</option>\n <option value=\"named\">{t('outline.properties.targetNamed')}</option>\n {choice === 'kept' && (\n <option value=\"kept\">{t('outline.properties.targetKept')}</option>\n )}\n </select>\n {choice === 'page' && (\n <div className=\"flex gap-2\">\n <input\n type=\"number\"\n min={1}\n value={page}\n aria-label={t('linkEditor.pagePlaceholder')}\n onChange={(event) => setPage(event.target.value)}\n className={`${field} w-24`}\n />\n <select\n value={fit}\n aria-label={t('outline.properties.fit')}\n onChange={(event) => setFit(event.target.value as Fit)}\n className={field}\n >\n {initialFit === 'kept' && (\n <option value=\"kept\">{t('outline.properties.fitKept')}</option>\n )}\n <option value=\"fit\">{t('commands.zoom.fitPage')}</option>\n <option value=\"fitH\">{t('commands.zoom.fitWidth')}</option>\n </select>\n </div>\n )}\n {choice === 'uri' && (\n <input\n type=\"url\"\n value={uri}\n placeholder={t('linkEditor.urlPlaceholder')}\n onChange={(event) => setUri(event.target.value)}\n className={field}\n />\n )}\n {choice === 'named' && (\n <select\n value={verb}\n aria-label={t('outline.properties.targetNamed')}\n onChange={(event) => setVerb(event.target.value as PageVerb)}\n className={field}\n >\n {PAGE_VERBS.map((name) => (\n <option key={name} value={name}>\n {t(PAGE_VERB_KEYS[name])}\n </option>\n ))}\n </select>\n )}\n {choice === 'kept' && (\n <p className=\"text-fg-muted text-xs\">{t('outline.properties.keptNote')}</p>\n )}\n </fieldset>\n\n <div className=\"mt-1 flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"border-border text-fg hover:bg-hover rounded border px-3 py-1.5 text-sm\"\n >\n {t('outline.properties.cancel')}\n </button>\n <button\n type=\"submit\"\n className=\"bg-accent text-on-accent rounded px-3 py-1.5 text-sm font-medium\"\n >\n {t('outline.properties.save')}\n </button>\n </div>\n </form>\n </Dialog>\n );\n}\n"],"mappings":"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"}
|