@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.
Files changed (177) hide show
  1. package/README.md +175 -132
  2. package/dist/annotation-fonts-DWjVOTP0.js +80 -0
  3. package/dist/annotation-fonts-DWjVOTP0.js.map +1 -0
  4. package/dist/annotation-fonts-dpfVkhnq.cjs +91 -0
  5. package/dist/annotation-fonts-dpfVkhnq.cjs.map +1 -0
  6. package/dist/annotation-style-B3XKAyZ-.cjs +879 -0
  7. package/dist/annotation-style-B3XKAyZ-.cjs.map +1 -0
  8. package/dist/annotation-style-CXF3X47Z.js +879 -0
  9. package/dist/annotation-style-CXF3X47Z.js.map +1 -0
  10. package/dist/ar-B132r9bo.cjs +659 -0
  11. package/dist/ar-B132r9bo.cjs.map +1 -0
  12. package/dist/ar-BLWFJoA_.js +659 -0
  13. package/dist/ar-BLWFJoA_.js.map +1 -0
  14. package/dist/attachments-panel-Cxln8xos.cjs +217 -0
  15. package/dist/attachments-panel-Cxln8xos.cjs.map +1 -0
  16. package/dist/attachments-panel-H1ucRbwo.js +217 -0
  17. package/dist/attachments-panel-H1ucRbwo.js.map +1 -0
  18. package/dist/chrome.cjs +399 -242
  19. package/dist/chrome.cjs.map +1 -1
  20. package/dist/chrome.d.cts +5 -35
  21. package/dist/chrome.d.ts +5 -35
  22. package/dist/chrome.js +398 -239
  23. package/dist/chrome.js.map +1 -1
  24. package/dist/commands-BkgLP3Om.js +1348 -0
  25. package/dist/commands-BkgLP3Om.js.map +1 -0
  26. package/dist/commands-DL1gjZt7.cjs +1473 -0
  27. package/dist/commands-DL1gjZt7.cjs.map +1 -0
  28. package/dist/commands.cjs +13 -649
  29. package/dist/commands.d.cts +30 -3
  30. package/dist/commands.d.ts +30 -3
  31. package/dist/commands.js +2 -647
  32. package/dist/comments-panel-BsnWedTh.cjs +514 -0
  33. package/dist/comments-panel-BsnWedTh.cjs.map +1 -0
  34. package/dist/comments-panel-D7Eadws9.js +514 -0
  35. package/dist/comments-panel-D7Eadws9.js.map +1 -0
  36. package/dist/de-7_MvFWzN.cjs +658 -0
  37. package/dist/de-7_MvFWzN.cjs.map +1 -0
  38. package/dist/de-BUhwc9-x.js +658 -0
  39. package/dist/de-BUhwc9-x.js.map +1 -0
  40. package/dist/dialog-BIb373cg.js +55 -0
  41. package/dist/dialog-BIb373cg.js.map +1 -0
  42. package/dist/dialog-CngKTnAM.cjs +60 -0
  43. package/dist/dialog-CngKTnAM.cjs.map +1 -0
  44. package/dist/es-DgYj-1L3.cjs +658 -0
  45. package/dist/es-DgYj-1L3.cjs.map +1 -0
  46. package/dist/es-DoXTqFoO.js +658 -0
  47. package/dist/es-DoXTqFoO.js.map +1 -0
  48. package/dist/form-design-panel-CgV_5YWC.js +418 -0
  49. package/dist/form-design-panel-CgV_5YWC.js.map +1 -0
  50. package/dist/form-design-panel-D0FdmWXW.cjs +418 -0
  51. package/dist/form-design-panel-D0FdmWXW.cjs.map +1 -0
  52. package/dist/fr-B-8NDhBA.js +658 -0
  53. package/dist/fr-B-8NDhBA.js.map +1 -0
  54. package/dist/fr-C856dmQJ.cjs +658 -0
  55. package/dist/fr-C856dmQJ.cjs.map +1 -0
  56. package/dist/he-BFTeNc4t.cjs +659 -0
  57. package/dist/he-BFTeNc4t.cjs.map +1 -0
  58. package/dist/he-Dlh0fNXM.js +659 -0
  59. package/dist/he-Dlh0fNXM.js.map +1 -0
  60. package/dist/icons-1UfLUZ_y.cjs +1029 -0
  61. package/dist/icons-1UfLUZ_y.cjs.map +1 -0
  62. package/dist/icons-7dB0Y1ct.js +875 -0
  63. package/dist/icons-7dB0Y1ct.js.map +1 -0
  64. package/dist/index.cjs +3651 -5447
  65. package/dist/index.cjs.map +1 -1
  66. package/dist/index.d.cts +646 -144
  67. package/dist/index.d.ts +646 -144
  68. package/dist/index.js +3618 -5368
  69. package/dist/index.js.map +1 -1
  70. package/dist/it-Bef-2Yxq.cjs +658 -0
  71. package/dist/it-Bef-2Yxq.cjs.map +1 -0
  72. package/dist/it-BkirG7ol.js +658 -0
  73. package/dist/it-BkirG7ol.js.map +1 -0
  74. package/dist/ja-CGEjCE-s.js +658 -0
  75. package/dist/ja-CGEjCE-s.js.map +1 -0
  76. package/dist/ja-DNw2zqSD.cjs +658 -0
  77. package/dist/ja-DNw2zqSD.cjs.map +1 -0
  78. package/dist/ko-CTkl5vMh.js +658 -0
  79. package/dist/ko-CTkl5vMh.js.map +1 -0
  80. package/dist/ko-YHzeBqP6.cjs +658 -0
  81. package/dist/ko-YHzeBqP6.cjs.map +1 -0
  82. package/dist/labels-BiM9wp9K.cjs +21 -0
  83. package/dist/labels-BiM9wp9K.cjs.map +1 -0
  84. package/dist/labels-C6_i87Oj.js +16 -0
  85. package/dist/labels-C6_i87Oj.js.map +1 -0
  86. package/dist/link-editor-CAS7MZM2.cjs +125 -0
  87. package/dist/link-editor-CAS7MZM2.cjs.map +1 -0
  88. package/dist/link-editor-CkwtqRvb.js +125 -0
  89. package/dist/link-editor-CkwtqRvb.js.map +1 -0
  90. package/dist/measurement-CQdbnIrn.js +325 -0
  91. package/dist/measurement-CQdbnIrn.js.map +1 -0
  92. package/dist/measurement-Cxv1Ahxx.cjs +326 -0
  93. package/dist/measurement-Cxv1Ahxx.cjs.map +1 -0
  94. package/dist/nl-BjkbaLq3.cjs +658 -0
  95. package/dist/nl-BjkbaLq3.cjs.map +1 -0
  96. package/dist/nl-Dya4sR8_.js +658 -0
  97. package/dist/nl-Dya4sR8_.js.map +1 -0
  98. package/dist/outline-panel-BpGtBdj0.cjs +707 -0
  99. package/dist/outline-panel-BpGtBdj0.cjs.map +1 -0
  100. package/dist/outline-panel-DO5_REYw.js +707 -0
  101. package/dist/outline-panel-DO5_REYw.js.map +1 -0
  102. package/dist/outline-properties-BCa2cc0t.js +330 -0
  103. package/dist/outline-properties-BCa2cc0t.js.map +1 -0
  104. package/dist/outline-properties-DT3FIxCw.cjs +330 -0
  105. package/dist/outline-properties-DT3FIxCw.cjs.map +1 -0
  106. package/dist/pl-CKKdVnpZ.cjs +658 -0
  107. package/dist/pl-CKKdVnpZ.cjs.map +1 -0
  108. package/dist/pl-DA9b5NVg.js +658 -0
  109. package/dist/pl-DA9b5NVg.js.map +1 -0
  110. package/dist/print-dialog-BqIrHCBh.cjs +276 -0
  111. package/dist/print-dialog-BqIrHCBh.cjs.map +1 -0
  112. package/dist/print-dialog-DvcI2m2_.js +276 -0
  113. package/dist/print-dialog-DvcI2m2_.js.map +1 -0
  114. package/dist/pt-DLcszlzi.cjs +658 -0
  115. package/dist/pt-DLcszlzi.cjs.map +1 -0
  116. package/dist/pt-Nm8yyjbX.js +658 -0
  117. package/dist/pt-Nm8yyjbX.js.map +1 -0
  118. package/dist/redact-confirm-C6EiK8yN.cjs +83 -0
  119. package/dist/redact-confirm-C6EiK8yN.cjs.map +1 -0
  120. package/dist/redact-confirm-CKuv9iN_.js +83 -0
  121. package/dist/redact-confirm-CKuv9iN_.js.map +1 -0
  122. package/dist/redaction-panel-CgNZ-pQk.js +96 -0
  123. package/dist/redaction-panel-CgNZ-pQk.js.map +1 -0
  124. package/dist/redaction-panel-ZhX0dlMi.cjs +96 -0
  125. package/dist/redaction-panel-ZhX0dlMi.cjs.map +1 -0
  126. package/dist/search-panel-BE4xzWlm.js +249 -0
  127. package/dist/search-panel-BE4xzWlm.js.map +1 -0
  128. package/dist/search-panel-wcbTNG1z.cjs +249 -0
  129. package/dist/search-panel-wcbTNG1z.cjs.map +1 -0
  130. package/dist/sheet-DTBFiwde.cjs +461 -0
  131. package/dist/sheet-DTBFiwde.cjs.map +1 -0
  132. package/dist/sheet-DyjKfAq0.js +378 -0
  133. package/dist/sheet-DyjKfAq0.js.map +1 -0
  134. package/dist/sign-dialog-D5WGx-Yn.cjs +155 -0
  135. package/dist/sign-dialog-D5WGx-Yn.cjs.map +1 -0
  136. package/dist/sign-dialog-DerNe8qT.js +155 -0
  137. package/dist/sign-dialog-DerNe8qT.js.map +1 -0
  138. package/dist/signature-inspector-Bz6TAfZM.cjs +160 -0
  139. package/dist/signature-inspector-Bz6TAfZM.cjs.map +1 -0
  140. package/dist/signature-inspector-CsGr9EBk.js +160 -0
  141. package/dist/signature-inspector-CsGr9EBk.js.map +1 -0
  142. package/dist/signature-maker-D_YfBXLn.cjs +393 -0
  143. package/dist/signature-maker-D_YfBXLn.cjs.map +1 -0
  144. package/dist/signature-maker-Dnth4rV4.js +393 -0
  145. package/dist/signature-maker-Dnth4rV4.js.map +1 -0
  146. package/dist/signatures-panel-Ci_LaI1C.cjs +294 -0
  147. package/dist/signatures-panel-Ci_LaI1C.cjs.map +1 -0
  148. package/dist/signatures-panel-DZ9ywrjz.js +294 -0
  149. package/dist/signatures-panel-DZ9ywrjz.js.map +1 -0
  150. package/dist/stamp-store-BHvRs-Do.cjs +147 -0
  151. package/dist/stamp-store-BHvRs-Do.cjs.map +1 -0
  152. package/dist/stamp-store-WuF-L3Jj.js +112 -0
  153. package/dist/stamp-store-WuF-L3Jj.js.map +1 -0
  154. package/dist/stamps-panel-BrczStaz.js +225 -0
  155. package/dist/stamps-panel-BrczStaz.js.map +1 -0
  156. package/dist/stamps-panel-Cv9nJBwx.cjs +225 -0
  157. package/dist/stamps-panel-Cv9nJBwx.cjs.map +1 -0
  158. package/dist/theme-Be0OZokZ.js +97 -0
  159. package/dist/theme-Be0OZokZ.js.map +1 -0
  160. package/dist/theme-FR26JI3r.cjs +126 -0
  161. package/dist/theme-FR26JI3r.cjs.map +1 -0
  162. package/dist/toolbar-DF361xWY.js +1565 -0
  163. package/dist/toolbar-DF361xWY.js.map +1 -0
  164. package/dist/toolbar-ddvpsvTb.cjs +1660 -0
  165. package/dist/toolbar-ddvpsvTb.cjs.map +1 -0
  166. package/dist/zh-cn-BMPPkLpL.js +658 -0
  167. package/dist/zh-cn-BMPPkLpL.js.map +1 -0
  168. package/dist/zh-cn-CZOO3p4H.cjs +658 -0
  169. package/dist/zh-cn-CZOO3p4H.cjs.map +1 -0
  170. package/package.json +6 -4
  171. package/src/styles.css +161 -89
  172. package/dist/commands.cjs.map +0 -1
  173. package/dist/commands.js.map +0 -1
  174. package/dist/es-BXLlBo2b.cjs +0 -321
  175. package/dist/es-BXLlBo2b.cjs.map +0 -1
  176. package/dist/es-CLgTsFDS.js +0 -321
  177. 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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"}